@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.
- package/lib/app.js +4 -3
- package/lib/app.js.map +1 -1
- package/lib/components/button.js +22 -2
- package/lib/components/button.js.map +1 -1
- package/lib/components/buttons-disabler.js +2 -2
- package/lib/components/carousel.js +2 -2
- package/lib/components/custom-message.js +2 -2
- package/lib/components/document.js +2 -2
- package/lib/components/image.js +28 -32
- package/lib/components/image.js.map +1 -1
- package/lib/components/message.js +2 -2
- package/lib/components/multichannel/facebook/facebook.js +2 -2
- package/lib/components/reply.js +2 -2
- package/lib/components/subtitle.js +2 -2
- package/lib/components/text.js +2 -2
- package/lib/components/timestamps.js +2 -2
- package/lib/components/title.js +2 -2
- package/lib/constants.js +201 -0
- package/lib/constants.js.map +1 -0
- package/lib/contexts.js +57 -0
- package/lib/contexts.js.map +1 -0
- package/lib/dev-app.js +241 -0
- package/lib/dev-app.js.map +1 -0
- package/lib/index.d.ts +241 -0
- package/lib/index.js +131 -0
- package/lib/index.js.map +1 -0
- package/lib/message-utils.js +149 -0
- package/lib/message-utils.js.map +1 -0
- package/lib/msg-to-botonic.js +199 -0
- package/lib/msg-to-botonic.js.map +1 -0
- package/lib/node-app.js +97 -0
- package/lib/node-app.js.map +1 -0
- package/lib/react-bot.js +167 -0
- package/lib/react-bot.js.map +1 -0
- package/lib/util/dom.js +84 -0
- package/lib/util/dom.js.map +1 -0
- package/lib/util/environment.js +42 -0
- package/lib/util/environment.js.map +1 -0
- package/lib/util/error-boundary.js +105 -0
- package/lib/util/error-boundary.js.map +1 -0
- package/lib/util/index.d.ts +9 -0
- package/lib/util/index.js +2 -0
- package/lib/util/index.js.map +1 -0
- package/lib/util/logs.js +28 -0
- package/lib/util/logs.js.map +1 -0
- package/lib/util/objects.js +60 -0
- package/lib/util/objects.js.map +1 -0
- package/lib/util/react.js +75 -0
- package/lib/util/react.js.map +1 -0
- package/lib/util/regexs.js +31 -0
- package/lib/util/regexs.js.map +1 -0
- package/lib/util/webchat.js +92 -0
- package/lib/util/webchat.js.map +1 -0
- package/lib/webchat/actions.js +53 -0
- package/lib/webchat/actions.js.map +1 -0
- package/lib/webchat/components/attachment.js +43 -0
- package/lib/webchat/components/attachment.js.map +1 -0
- package/lib/webchat/components/common.js +33 -0
- package/lib/webchat/components/common.js.map +1 -0
- package/lib/webchat/components/emoji-picker.js +58 -0
- package/lib/webchat/components/emoji-picker.js.map +1 -0
- package/lib/webchat/components/persistent-menu.js +96 -0
- package/lib/webchat/components/persistent-menu.js.map +1 -0
- package/lib/webchat/components/send-button.js +27 -0
- package/lib/webchat/components/send-button.js.map +1 -0
- package/lib/webchat/components/styled-scrollbar.js +55 -0
- package/lib/webchat/components/styled-scrollbar.js.map +1 -0
- package/lib/webchat/components/styled-scrollbar.scss +12 -0
- package/lib/webchat/components/typing-indicator.js +27 -0
- package/lib/webchat/components/typing-indicator.js.map +1 -0
- package/lib/webchat/components/typing-indicator.scss +38 -0
- package/lib/webchat/devices/device-adapter.js +82 -0
- package/lib/webchat/devices/device-adapter.js.map +1 -0
- package/lib/webchat/devices/index.js +32 -0
- package/lib/webchat/devices/index.js.map +1 -0
- package/lib/webchat/devices/scrollbar-controller.js +152 -0
- package/lib/webchat/devices/scrollbar-controller.js.map +1 -0
- package/lib/webchat/devices/webchat-resizer.js +76 -0
- package/lib/webchat/devices/webchat-resizer.js.map +1 -0
- package/lib/webchat/header.js +116 -0
- package/lib/webchat/header.js.map +1 -0
- package/lib/webchat/hooks.js +359 -0
- package/lib/webchat/hooks.js.map +1 -0
- package/lib/webchat/index.d.ts +62 -0
- package/lib/webchat/index.js +32 -0
- package/lib/webchat/index.js.map +1 -0
- package/lib/webchat/message-list.js +88 -0
- package/lib/webchat/message-list.js.map +1 -0
- package/lib/webchat/messages-reducer.js +93 -0
- package/lib/webchat/messages-reducer.js.map +1 -0
- package/lib/webchat/replies.js +78 -0
- package/lib/webchat/replies.js.map +1 -0
- package/lib/webchat/session-view.js +106 -0
- package/lib/webchat/session-view.js.map +1 -0
- package/lib/webchat/use-storage-state-hook.js +29 -0
- package/lib/webchat/use-storage-state-hook.js.map +1 -0
- package/lib/webchat/webchat-dev.js +109 -0
- package/lib/webchat/webchat-dev.js.map +1 -0
- package/lib/webchat/webchat-reducer.js +108 -0
- package/lib/webchat/webchat-reducer.js.map +1 -0
- package/lib/webchat/webchat.js +1059 -0
- package/lib/webchat/webchat.js.map +1 -0
- package/lib/webchat/webview.js +122 -0
- package/lib/webchat/webview.js.map +1 -0
- package/lib/webchat-app.js +653 -0
- package/lib/webchat-app.js.map +1 -0
- package/lib/webchat.template.html +37 -0
- package/lib/webview.js +214 -0
- package/lib/webview.js.map +1 -0
- package/lib/webview.template.html +39 -0
- package/package.json +2 -2
- package/src/components/button.jsx +21 -1
- package/src/components/image.jsx +22 -27
- package/src/components/index.d.ts +5 -1
- package/src/constants.js +1 -0
- package/src/index.d.ts +3 -7
- package/src/index.js +0 -1
- package/src/webchat/actions.jsx +1 -1
- package/src/webchat/hooks.js +5 -5
- package/src/webchat/webchat-reducer.js +3 -3
- package/src/webchat/webchat.jsx +20 -17
- package/src/webchat-app.jsx +4 -4
- package/src/webchat/components/portal-modal/backdrop.jsx +0 -38
- package/src/webchat/components/portal-modal/constants.js +0 -7
- package/src/webchat/components/portal-modal/content.jsx +0 -10
- package/src/webchat/components/portal-modal/index.js +0 -5
- package/src/webchat/components/portal-modal/portal-modal-component.jsx +0 -72
- package/src/webchat/components/portal-modal/portal.jsx +0 -21
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.msgToBotonic = msgToBotonic;
|
|
9
|
+
exports.msgsToBotonic = msgsToBotonic;
|
|
10
|
+
|
|
11
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
12
|
+
|
|
13
|
+
var _react = _interopRequireDefault(require("react"));
|
|
14
|
+
|
|
15
|
+
var _messageUtils = require("../src/message-utils");
|
|
16
|
+
|
|
17
|
+
var _audio = require("./components/audio");
|
|
18
|
+
|
|
19
|
+
var _button = require("./components/button");
|
|
20
|
+
|
|
21
|
+
var _buttonsDisabler = require("./components/buttons-disabler");
|
|
22
|
+
|
|
23
|
+
var _carousel = require("./components/carousel");
|
|
24
|
+
|
|
25
|
+
var _document = require("./components/document");
|
|
26
|
+
|
|
27
|
+
var _element = require("./components/element");
|
|
28
|
+
|
|
29
|
+
var _image = require("./components/image");
|
|
30
|
+
|
|
31
|
+
var _location = require("./components/location");
|
|
32
|
+
|
|
33
|
+
var _pic = require("./components/pic");
|
|
34
|
+
|
|
35
|
+
var _reply = require("./components/reply");
|
|
36
|
+
|
|
37
|
+
var _subtitle = require("./components/subtitle");
|
|
38
|
+
|
|
39
|
+
var _text = require("./components/text");
|
|
40
|
+
|
|
41
|
+
var _title = require("./components/title");
|
|
42
|
+
|
|
43
|
+
var _video = require("./components/video");
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
*
|
|
47
|
+
* @param msg {object}
|
|
48
|
+
* @param customMessageTypes {{customTypeName}[]?}
|
|
49
|
+
* @return {React.ReactNode}
|
|
50
|
+
*/
|
|
51
|
+
function msgToBotonic(msg, customMessageTypes) {
|
|
52
|
+
delete msg.display;
|
|
53
|
+
|
|
54
|
+
if ((0, _messageUtils.isCustom)(msg)) {
|
|
55
|
+
try {
|
|
56
|
+
return customMessageTypes.find(function (mt) {
|
|
57
|
+
return mt.customTypeName === msg.data.customTypeName;
|
|
58
|
+
}).deserialize(msg);
|
|
59
|
+
} catch (e) {
|
|
60
|
+
console.log(e);
|
|
61
|
+
}
|
|
62
|
+
} else if ((0, _messageUtils.isText)(msg)) {
|
|
63
|
+
return textToBotonic(msg);
|
|
64
|
+
} else if ((0, _messageUtils.isCarousel)(msg)) {
|
|
65
|
+
var elements = msg.elements || msg.data.elements;
|
|
66
|
+
return /*#__PURE__*/_react["default"].createElement(_carousel.Carousel, (0, _extends2["default"])({}, msg, {
|
|
67
|
+
key: msg.key
|
|
68
|
+
}), elementsParse(elements));
|
|
69
|
+
} else if ((0, _messageUtils.isImage)(msg)) {
|
|
70
|
+
return /*#__PURE__*/_react["default"].createElement(_image.Image, (0, _extends2["default"])({
|
|
71
|
+
key: msg.key
|
|
72
|
+
}, msg, {
|
|
73
|
+
src: msg.data.image != undefined ? msg.data.image : msg.data
|
|
74
|
+
}));
|
|
75
|
+
} else if ((0, _messageUtils.isVideo)(msg)) {
|
|
76
|
+
return /*#__PURE__*/_react["default"].createElement(_video.Video, (0, _extends2["default"])({}, msg, {
|
|
77
|
+
src: msg.data.video != undefined ? msg.data.video : msg.data
|
|
78
|
+
}));
|
|
79
|
+
} else if ((0, _messageUtils.isAudio)(msg)) {
|
|
80
|
+
return /*#__PURE__*/_react["default"].createElement(_audio.Audio, (0, _extends2["default"])({}, msg, {
|
|
81
|
+
src: msg.data.audio != undefined ? msg.data.audio : msg.data
|
|
82
|
+
}));
|
|
83
|
+
} else if ((0, _messageUtils.isDocument)(msg)) {
|
|
84
|
+
return /*#__PURE__*/_react["default"].createElement(_document.Document, (0, _extends2["default"])({}, msg, {
|
|
85
|
+
src: msg.data.document != undefined ? msg.data.document : msg.data
|
|
86
|
+
}));
|
|
87
|
+
} else if ((0, _messageUtils.isLocation)(msg)) {
|
|
88
|
+
var lat = msg.data ? msg.data.location.lat : msg.latitude;
|
|
89
|
+
|
|
90
|
+
var _long = msg.data ? msg.data.location["long"] : msg.longitude;
|
|
91
|
+
|
|
92
|
+
return /*#__PURE__*/_react["default"].createElement(_location.Location, (0, _extends2["default"])({}, msg, {
|
|
93
|
+
lat: lat,
|
|
94
|
+
"long": _long
|
|
95
|
+
}));
|
|
96
|
+
} else if ((0, _messageUtils.isButtonMessage)(msg)) {
|
|
97
|
+
var buttons = buttonsParse(msg.buttons);
|
|
98
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_text.Text, msg, msg.text, buttons));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
console.warn("Not converting message of type ".concat(msg.type));
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function rndStr() {
|
|
106
|
+
return Math.random().toString();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* @param msgs {object|object[]}
|
|
110
|
+
* @param customMessageTypes {{customTypeName}[]?}
|
|
111
|
+
* @return {React.ReactNode}
|
|
112
|
+
*/
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
function msgsToBotonic(msgs, customMessageTypes) {
|
|
116
|
+
if (Array.isArray(msgs)) {
|
|
117
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, msgs.map(function (msg, i) {
|
|
118
|
+
if (msg.key == null) {
|
|
119
|
+
msg.key = "msg".concat(i);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return msgToBotonic(msg, customMessageTypes);
|
|
123
|
+
}));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return msgToBotonic(msgs, customMessageTypes);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function textToBotonic(msg) {
|
|
130
|
+
var txt = msg.data && msg.data.text != undefined ? msg.data.text : String(msg.data);
|
|
131
|
+
if (msg.replies && msg.replies.length || msg.keyboard && msg.keyboard.length) return /*#__PURE__*/_react["default"].createElement(_text.Text, (0, _extends2["default"])({}, msg, {
|
|
132
|
+
key: msg.key
|
|
133
|
+
}), txt, quickrepliesParse(msg));
|
|
134
|
+
if (msg.buttons && msg.buttons.length) return /*#__PURE__*/_react["default"].createElement(_text.Text, (0, _extends2["default"])({}, msg, {
|
|
135
|
+
key: msg.key
|
|
136
|
+
}), txt, buttonsParse(msg.buttons));
|
|
137
|
+
return /*#__PURE__*/_react["default"].createElement(_text.Text, (0, _extends2["default"])({}, msg, {
|
|
138
|
+
key: msg.key
|
|
139
|
+
}), txt);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function elementsParse(elements) {
|
|
143
|
+
return elements.map(function (e, i) {
|
|
144
|
+
return /*#__PURE__*/_react["default"].createElement(_element.Element, {
|
|
145
|
+
key: i
|
|
146
|
+
}, /*#__PURE__*/_react["default"].createElement(_pic.Pic, {
|
|
147
|
+
src: e.img || e.pic || e.image_url
|
|
148
|
+
}), /*#__PURE__*/_react["default"].createElement(_title.Title, null, e.title), /*#__PURE__*/_react["default"].createElement(_subtitle.Subtitle, null, e.subtitle), buttonsParse(e.button || e.buttons));
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function buttonsParse(buttons) {
|
|
153
|
+
return buttons.map(function (b, i) {
|
|
154
|
+
var props = b.props || b;
|
|
155
|
+
var payload = props.payload;
|
|
156
|
+
if (props.path) payload = "__PATH_PAYLOAD__".concat(props.path);
|
|
157
|
+
var url = props.messenger_extensions ? null : props.url;
|
|
158
|
+
var target = props.messenger_extensions ? null : props.target;
|
|
159
|
+
var title = props.title;
|
|
160
|
+
var webview = props.messenger_extensions ? props.url : props.webview;
|
|
161
|
+
|
|
162
|
+
var disabledProps = _buttonsDisabler.ButtonsDisabler.constructBrowserProps(props);
|
|
163
|
+
|
|
164
|
+
return /*#__PURE__*/_react["default"].createElement(_button.Button, (0, _extends2["default"])({
|
|
165
|
+
key: i,
|
|
166
|
+
payload: payload,
|
|
167
|
+
url: url,
|
|
168
|
+
target: target,
|
|
169
|
+
webview: webview
|
|
170
|
+
}, disabledProps), title);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function quickrepliesParse(msg) {
|
|
175
|
+
var replies = null;
|
|
176
|
+
|
|
177
|
+
if (msg.replies) {
|
|
178
|
+
replies = msg.replies.map(function (el, i) {
|
|
179
|
+
var payload = el.payload;
|
|
180
|
+
if (el.path) payload = "__PATH_PAYLOAD__".concat(el.path);
|
|
181
|
+
return /*#__PURE__*/_react["default"].createElement(_reply.Reply, {
|
|
182
|
+
key: i,
|
|
183
|
+
payload: payload
|
|
184
|
+
}, el.text);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (msg.keyboard) {
|
|
189
|
+
replies = msg.keyboard.map(function (el, i) {
|
|
190
|
+
return /*#__PURE__*/_react["default"].createElement(_reply.Reply, {
|
|
191
|
+
key: i,
|
|
192
|
+
payload: el.data
|
|
193
|
+
}, el.label);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return replies;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=msg-to-botonic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/msg-to-botonic.jsx"],"names":["msgToBotonic","msg","customMessageTypes","display","find","mt","customTypeName","data","deserialize","e","console","log","textToBotonic","elements","key","elementsParse","image","undefined","video","audio","document","lat","location","latitude","long","longitude","buttons","buttonsParse","text","warn","type","rndStr","Math","random","toString","msgsToBotonic","msgs","Array","isArray","map","i","txt","String","replies","length","keyboard","quickrepliesParse","img","pic","image_url","title","subtitle","button","b","props","payload","path","url","messenger_extensions","target","webview","disabledProps","ButtonsDisabler","constructBrowserProps","el","label"],"mappings":"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","sourcesContent":["import React from 'react'\n\nimport {\n isAudio,\n isButtonMessage,\n isCarousel,\n isCustom,\n isDocument,\n isImage,\n isLocation,\n isText,\n isVideo,\n} from '../src/message-utils'\nimport { Audio } from './components/audio'\nimport { Button } from './components/button'\nimport { ButtonsDisabler } from './components/buttons-disabler'\nimport { Carousel } from './components/carousel'\nimport { Document } from './components/document'\nimport { Element } from './components/element'\nimport { Image } from './components/image'\nimport { Location } from './components/location'\nimport { Pic } from './components/pic'\nimport { Reply } from './components/reply'\nimport { Subtitle } from './components/subtitle'\nimport { Text } from './components/text'\nimport { Title } from './components/title'\nimport { Video } from './components/video'\n\n/**\n *\n * @param msg {object}\n * @param customMessageTypes {{customTypeName}[]?}\n * @return {React.ReactNode}\n */\nexport function msgToBotonic(msg, customMessageTypes) {\n delete msg.display\n if (isCustom(msg)) {\n try {\n return customMessageTypes\n .find(mt => mt.customTypeName === msg.data.customTypeName)\n .deserialize(msg)\n } catch (e) {\n console.log(e)\n }\n } else if (isText(msg)) {\n return textToBotonic(msg)\n } else if (isCarousel(msg)) {\n const elements = msg.elements || msg.data.elements\n return (\n <Carousel {...msg} key={msg.key}>\n {elementsParse(elements)}\n </Carousel>\n )\n } else if (isImage(msg)) {\n return (\n <Image\n key={msg.key}\n {...msg}\n src={msg.data.image != undefined ? msg.data.image : msg.data}\n />\n )\n } else if (isVideo(msg)) {\n return (\n <Video\n {...msg}\n src={msg.data.video != undefined ? msg.data.video : msg.data}\n />\n )\n } else if (isAudio(msg)) {\n return (\n <Audio\n {...msg}\n src={msg.data.audio != undefined ? msg.data.audio : msg.data}\n />\n )\n } else if (isDocument(msg)) {\n return (\n <Document\n {...msg}\n src={msg.data.document != undefined ? msg.data.document : msg.data}\n />\n )\n } else if (isLocation(msg)) {\n const lat = msg.data ? msg.data.location.lat : msg.latitude\n const long = msg.data ? msg.data.location.long : msg.longitude\n return <Location {...msg} lat={lat} long={long} />\n } else if (isButtonMessage(msg)) {\n const buttons = buttonsParse(msg.buttons)\n return (\n <>\n <Text {...msg}>\n {msg.text}\n {buttons}\n </Text>\n </>\n )\n }\n console.warn(`Not converting message of type ${msg.type}`)\n return null\n}\n\nfunction rndStr() {\n return Math.random().toString()\n}\n\n/**\n * @param msgs {object|object[]}\n * @param customMessageTypes {{customTypeName}[]?}\n * @return {React.ReactNode}\n */\nexport function msgsToBotonic(msgs, customMessageTypes) {\n if (Array.isArray(msgs)) {\n return (\n <>\n {msgs.map((msg, i) => {\n if (msg.key == null) {\n msg.key = `msg${i}`\n }\n return msgToBotonic(msg, customMessageTypes)\n })}\n </>\n )\n }\n return msgToBotonic(msgs, customMessageTypes)\n}\n\nfunction textToBotonic(msg) {\n const txt =\n msg.data && msg.data.text != undefined ? msg.data.text : String(msg.data)\n if (\n (msg.replies && msg.replies.length) ||\n (msg.keyboard && msg.keyboard.length)\n )\n return (\n <Text {...msg} key={msg.key}>\n {txt}\n {quickrepliesParse(msg)}\n </Text>\n )\n if (msg.buttons && msg.buttons.length)\n return (\n <Text {...msg} key={msg.key}>\n {txt}\n {buttonsParse(msg.buttons)}\n </Text>\n )\n return (\n <Text {...msg} key={msg.key}>\n {txt}\n </Text>\n )\n}\n\nfunction elementsParse(elements) {\n return elements.map((e, i) => (\n <Element key={i}>\n <Pic src={e.img || e.pic || e.image_url} />\n <Title>{e.title}</Title>\n <Subtitle>{e.subtitle}</Subtitle>\n {buttonsParse(e.button || e.buttons)}\n </Element>\n ))\n}\n\nfunction buttonsParse(buttons) {\n return buttons.map((b, i) => {\n const props = b.props || b\n let payload = props.payload\n if (props.path) payload = `__PATH_PAYLOAD__${props.path}`\n const url = props.messenger_extensions ? null : props.url\n const target = props.messenger_extensions ? null : props.target\n const title = props.title\n const webview = props.messenger_extensions ? props.url : props.webview\n const disabledProps = ButtonsDisabler.constructBrowserProps(props)\n return (\n <Button\n key={i}\n payload={payload}\n url={url}\n target={target}\n webview={webview}\n {...disabledProps}\n >\n {title}\n </Button>\n )\n })\n}\n\nfunction quickrepliesParse(msg) {\n let replies = null\n if (msg.replies) {\n replies = msg.replies.map((el, i) => {\n let payload = el.payload\n if (el.path) payload = `__PATH_PAYLOAD__${el.path}`\n return (\n <Reply key={i} payload={payload}>\n {el.text}\n </Reply>\n )\n })\n }\n if (msg.keyboard) {\n replies = msg.keyboard.map((el, i) => (\n <Reply key={i} payload={el.data}>\n {el.label}\n </Reply>\n ))\n }\n return replies\n}\n"],"file":"msg-to-botonic.js"}
|
package/lib/node-app.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.NodeApp = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
+
|
|
18
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
19
|
+
|
|
20
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
21
|
+
|
|
22
|
+
var _server = require("react-dom/server");
|
|
23
|
+
|
|
24
|
+
var _reactBot = require("./react-bot");
|
|
25
|
+
|
|
26
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
27
|
+
|
|
28
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
29
|
+
|
|
30
|
+
var NodeApp = /*#__PURE__*/function () {
|
|
31
|
+
function NodeApp(options) {
|
|
32
|
+
var _this = this;
|
|
33
|
+
|
|
34
|
+
(0, _classCallCheck2["default"])(this, NodeApp);
|
|
35
|
+
this.bot = new _reactBot.ReactBot(_objectSpread({
|
|
36
|
+
renderer: function renderer(args) {
|
|
37
|
+
return _this.renderNode(args);
|
|
38
|
+
}
|
|
39
|
+
}, options));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
(0, _createClass2["default"])(NodeApp, [{
|
|
43
|
+
key: "renderNode",
|
|
44
|
+
value: function () {
|
|
45
|
+
var _renderNode = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(args) {
|
|
46
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
47
|
+
while (1) {
|
|
48
|
+
switch (_context.prev = _context.next) {
|
|
49
|
+
case 0:
|
|
50
|
+
_context.next = 2;
|
|
51
|
+
return this.bot.renderReactActions(args);
|
|
52
|
+
|
|
53
|
+
case 2:
|
|
54
|
+
return _context.abrupt("return", _context.sent.map(function (action) {
|
|
55
|
+
return (0, _server.renderToStaticMarkup)(action);
|
|
56
|
+
}).join('\n'));
|
|
57
|
+
|
|
58
|
+
case 3:
|
|
59
|
+
case "end":
|
|
60
|
+
return _context.stop();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}, _callee, this);
|
|
64
|
+
}));
|
|
65
|
+
|
|
66
|
+
function renderNode(_x) {
|
|
67
|
+
return _renderNode.apply(this, arguments);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return renderNode;
|
|
71
|
+
}()
|
|
72
|
+
}, {
|
|
73
|
+
key: "input",
|
|
74
|
+
value: function input(args) {
|
|
75
|
+
return this.bot.input(args);
|
|
76
|
+
}
|
|
77
|
+
}, {
|
|
78
|
+
key: "getConfig",
|
|
79
|
+
value: function getConfig() {
|
|
80
|
+
return Object.entries(this.bot.plugins).map(function (_ref) {
|
|
81
|
+
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
82
|
+
_ = _ref2[0],
|
|
83
|
+
plugin = _ref2[1];
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
id: plugin.id,
|
|
87
|
+
name: plugin.name,
|
|
88
|
+
config: plugin.config
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}]);
|
|
93
|
+
return NodeApp;
|
|
94
|
+
}();
|
|
95
|
+
|
|
96
|
+
exports.NodeApp = NodeApp;
|
|
97
|
+
//# sourceMappingURL=node-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/node-app.jsx"],"names":["NodeApp","options","bot","ReactBot","renderer","args","renderNode","renderReactActions","map","action","join","input","Object","entries","plugins","_","plugin","id","name","config"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAEaA,O;AACX,mBAAYC,OAAZ,EAAqB;AAAA;;AAAA;AACnB,SAAKC,GAAL,GAAW,IAAIC,kBAAJ;AACTC,MAAAA,QAAQ,EAAE,kBAAAC,IAAI;AAAA,eAAI,KAAI,CAACC,UAAL,CAAgBD,IAAhB,CAAJ;AAAA;AADL,OAENJ,OAFM,EAAX;AAID;;;;;sGAED,iBAAiBI,IAAjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACgB,KAAKH,GAAL,CAASK,kBAAT,CAA4BF,IAA5B,CADhB;;AAAA;AAAA,+DAEKG,GAFL,CAES,UAAAC,MAAM;AAAA,yBAAI,kCAAqBA,MAArB,CAAJ;AAAA,iBAFf,EAGKC,IAHL,CAGU,IAHV;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAMA,eAAML,IAAN,EAAY;AACV,aAAO,KAAKH,GAAL,CAASS,KAAT,CAAeN,IAAf,CAAP;AACD;;;WAED,qBAAY;AACV,aAAOO,MAAM,CAACC,OAAP,CAAe,KAAKX,GAAL,CAASY,OAAxB,EAAiCN,GAAjC,CAAqC,gBAAiB;AAAA;AAAA,YAAfO,CAAe;AAAA,YAAZC,MAAY;;AAC3D,eAAO;AAAEC,UAAAA,EAAE,EAAED,MAAM,CAACC,EAAb;AAAiBC,UAAAA,IAAI,EAAEF,MAAM,CAACE,IAA9B;AAAoCC,UAAAA,MAAM,EAAEH,MAAM,CAACG;AAAnD,SAAP;AACD,OAFM,CAAP;AAGD","sourcesContent":["import { renderToStaticMarkup } from 'react-dom/server'\n\nimport { ReactBot } from './react-bot'\n\nexport class NodeApp {\n constructor(options) {\n this.bot = new ReactBot({\n renderer: args => this.renderNode(args),\n ...options,\n })\n }\n\n async renderNode(args) {\n return (await this.bot.renderReactActions(args))\n .map(action => renderToStaticMarkup(action))\n .join('\\n')\n }\n\n input(args) {\n return this.bot.input(args)\n }\n\n getConfig() {\n return Object.entries(this.bot.plugins).map(([_, plugin]) => {\n return { id: plugin.id, name: plugin.name, config: plugin.config }\n })\n }\n}\n"],"file":"node-app.js"}
|
package/lib/react-bot.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.ReactBot = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
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 _react = _interopRequireDefault(require("react"));
|
|
29
|
+
|
|
30
|
+
var _text = require("./components/text");
|
|
31
|
+
|
|
32
|
+
var _contexts = require("./contexts");
|
|
33
|
+
|
|
34
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
35
|
+
|
|
36
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
37
|
+
|
|
38
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
39
|
+
|
|
40
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
41
|
+
|
|
42
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
43
|
+
|
|
44
|
+
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); }; }
|
|
45
|
+
|
|
46
|
+
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; } }
|
|
47
|
+
|
|
48
|
+
var ReactBot = /*#__PURE__*/function (_CoreBot) {
|
|
49
|
+
(0, _inherits2["default"])(ReactBot, _CoreBot);
|
|
50
|
+
|
|
51
|
+
var _super = _createSuper(ReactBot);
|
|
52
|
+
|
|
53
|
+
function ReactBot(options) {
|
|
54
|
+
var _this;
|
|
55
|
+
|
|
56
|
+
(0, _classCallCheck2["default"])(this, ReactBot);
|
|
57
|
+
return _this = _super.call(this, _objectSpread({
|
|
58
|
+
defaultRoutes: [{
|
|
59
|
+
path: '404',
|
|
60
|
+
action: function action() {
|
|
61
|
+
return /*#__PURE__*/_react["default"].createElement(_text.Text, null, "I don't understand you");
|
|
62
|
+
} // eslint-disable-line
|
|
63
|
+
|
|
64
|
+
}],
|
|
65
|
+
renderer: function renderer(args) {
|
|
66
|
+
return _this.renderReactActions(args);
|
|
67
|
+
}
|
|
68
|
+
}, options));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
(0, _createClass2["default"])(ReactBot, [{
|
|
72
|
+
key: "renderReactActions",
|
|
73
|
+
value: function () {
|
|
74
|
+
var _renderReactActions = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) {
|
|
75
|
+
var request, actions, renderedActions, props, renderedAction, _iterator, _step, Action;
|
|
76
|
+
|
|
77
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
78
|
+
while (1) {
|
|
79
|
+
switch (_context.prev = _context.next) {
|
|
80
|
+
case 0:
|
|
81
|
+
request = _ref.request, actions = _ref.actions;
|
|
82
|
+
renderedActions = [];
|
|
83
|
+
_iterator = _createForOfIteratorHelper(actions);
|
|
84
|
+
_context.prev = 3;
|
|
85
|
+
|
|
86
|
+
_iterator.s();
|
|
87
|
+
|
|
88
|
+
case 5:
|
|
89
|
+
if ((_step = _iterator.n()).done) {
|
|
90
|
+
_context.next = 20;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
Action = _step.value;
|
|
95
|
+
|
|
96
|
+
if (!Action) {
|
|
97
|
+
_context.next = 18;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (!Action.botonicInit) {
|
|
102
|
+
_context.next = 14;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
_context.next = 11;
|
|
107
|
+
return Action.botonicInit(request);
|
|
108
|
+
|
|
109
|
+
case 11:
|
|
110
|
+
_context.t0 = _context.sent;
|
|
111
|
+
_context.next = 15;
|
|
112
|
+
break;
|
|
113
|
+
|
|
114
|
+
case 14:
|
|
115
|
+
_context.t0 = {};
|
|
116
|
+
|
|
117
|
+
case 15:
|
|
118
|
+
props = _context.t0;
|
|
119
|
+
renderedAction = /*#__PURE__*/_react["default"].createElement(_contexts.RequestContext.Provider, {
|
|
120
|
+
value: request
|
|
121
|
+
}, /*#__PURE__*/_react["default"].createElement(Action, props));
|
|
122
|
+
renderedActions.push(renderedAction);
|
|
123
|
+
|
|
124
|
+
case 18:
|
|
125
|
+
_context.next = 5;
|
|
126
|
+
break;
|
|
127
|
+
|
|
128
|
+
case 20:
|
|
129
|
+
_context.next = 25;
|
|
130
|
+
break;
|
|
131
|
+
|
|
132
|
+
case 22:
|
|
133
|
+
_context.prev = 22;
|
|
134
|
+
_context.t1 = _context["catch"](3);
|
|
135
|
+
|
|
136
|
+
_iterator.e(_context.t1);
|
|
137
|
+
|
|
138
|
+
case 25:
|
|
139
|
+
_context.prev = 25;
|
|
140
|
+
|
|
141
|
+
_iterator.f();
|
|
142
|
+
|
|
143
|
+
return _context.finish(25);
|
|
144
|
+
|
|
145
|
+
case 28:
|
|
146
|
+
return _context.abrupt("return", renderedActions);
|
|
147
|
+
|
|
148
|
+
case 29:
|
|
149
|
+
case "end":
|
|
150
|
+
return _context.stop();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}, _callee, null, [[3, 22, 25, 28]]);
|
|
154
|
+
}));
|
|
155
|
+
|
|
156
|
+
function renderReactActions(_x) {
|
|
157
|
+
return _renderReactActions.apply(this, arguments);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return renderReactActions;
|
|
161
|
+
}()
|
|
162
|
+
}]);
|
|
163
|
+
return ReactBot;
|
|
164
|
+
}(_core.CoreBot);
|
|
165
|
+
|
|
166
|
+
exports.ReactBot = ReactBot;
|
|
167
|
+
//# sourceMappingURL=react-bot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/react-bot.jsx"],"names":["ReactBot","options","defaultRoutes","path","action","renderer","args","renderReactActions","request","actions","renderedActions","Action","botonicInit","props","renderedAction","push","CoreBot"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;;;;;;;;;;;;;IAEaA,Q;;;;;AACX,oBAAYC,OAAZ,EAAqB;AAAA;;AAAA;AAAA;AAEjBC,MAAAA,aAAa,EAAE,CACb;AACEC,QAAAA,IAAI,EAAE,KADR;AAEEC,QAAAA,MAAM,EAAE;AAAA,8BAAM,gCAAC,UAAD,iCAAN;AAAA,SAFV,CAEqD;;AAFrD,OADa,CAFE;AAQjBC,MAAAA,QAAQ,EAAE,kBAAAC,IAAI;AAAA,eAAI,MAAKC,kBAAL,CAAwBD,IAAxB,CAAJ;AAAA;AARG,OASdL,OATc;AAWpB;;;;;8GAED;AAAA;;AAAA;AAAA;AAAA;AAAA;AAA2BO,gBAAAA,OAA3B,QAA2BA,OAA3B,EAAoCC,OAApC,QAAoCA,OAApC;AACQC,gBAAAA,eADR,GAC0B,EAD1B;AAAA,uDAIuBD,OAJvB;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAIaE,gBAAAA,MAJb;;AAAA,qBAKQA,MALR;AAAA;AAAA;AAAA;;AAAA,qBAMcA,MAAM,CAACC,WANrB;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAMyCD,MAAM,CAACC,WAAP,CAAmBJ,OAAnB,CANzC;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,8BAMuE,EANvE;;AAAA;AAMMK,gBAAAA,KANN;AAOMC,gBAAAA,cAAc,gBACZ,gCAAC,wBAAD,CAAgB,QAAhB;AAAyB,kBAAA,KAAK,EAAEN;AAAhC,gCACE,gCAAC,MAAD,EAAYK,KAAZ,CADF,CADF;AAKAH,gBAAAA,eAAe,CAACK,IAAhB,CAAqBD,cAArB;;AAZN;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA,iDAeSJ,eAfT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAd4BM,a","sourcesContent":["import { CoreBot } from '@botonic/core'\nimport React from 'react'\n\nimport { Text } from './components/text'\nimport { RequestContext } from './contexts'\n\nexport class ReactBot extends CoreBot {\n constructor(options) {\n super({\n defaultRoutes: [\n {\n path: '404',\n action: () => <Text>I don't understand you</Text>, // eslint-disable-line\n },\n ],\n renderer: args => this.renderReactActions(args),\n ...options,\n })\n }\n\n async renderReactActions({ request, actions }) {\n const renderedActions = []\n let props\n let renderedAction\n for (const Action of actions) {\n if (Action) {\n props = Action.botonicInit ? await Action.botonicInit(request) : {}\n renderedAction = (\n <RequestContext.Provider value={request}>\n <Action {...props} />\n </RequestContext.Provider>\n )\n renderedActions.push(renderedAction)\n }\n }\n return renderedActions\n }\n}\n"],"file":"react-bot.js"}
|
package/lib/util/dom.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.scrollToBottom = exports.onDOMLoaded = exports.isShadowDOMSupported = exports.getWebchatElement = exports.getScrollableContent = exports.getScrollableArea = void 0;
|
|
7
|
+
|
|
8
|
+
var _constants = require("../constants");
|
|
9
|
+
|
|
10
|
+
var getScrollableContent = function getScrollableContent(webchatElement) {
|
|
11
|
+
return webchatElement.querySelector(_constants.WEBCHAT.SELECTORS.SCROLLABLE_CONTENT);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
exports.getScrollableContent = getScrollableContent;
|
|
15
|
+
|
|
16
|
+
var getScrollableArea = function getScrollableArea(webchatElement) {
|
|
17
|
+
var getArea = function getArea(area) {
|
|
18
|
+
var botonicScrollableContent = getScrollableContent(webchatElement);
|
|
19
|
+
var scrollableArea = botonicScrollableContent && botonicScrollableContent.querySelector(area);
|
|
20
|
+
return scrollableArea;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
full: getArea(_constants.WEBCHAT.SELECTORS.SIMPLEBAR_CONTENT),
|
|
25
|
+
visible: getArea(_constants.WEBCHAT.SELECTORS.SIMPLEBAR_WRAPPER)
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
exports.getScrollableArea = getScrollableArea;
|
|
30
|
+
|
|
31
|
+
var scrollToBottom = function scrollToBottom() {
|
|
32
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
33
|
+
_ref$timeout = _ref.timeout,
|
|
34
|
+
timeout = _ref$timeout === void 0 ? 200 : _ref$timeout,
|
|
35
|
+
_ref$behavior = _ref.behavior,
|
|
36
|
+
behavior = _ref$behavior === void 0 ? 'smooth' : _ref$behavior,
|
|
37
|
+
host = _ref.host;
|
|
38
|
+
|
|
39
|
+
var webchatElement = getWebchatElement(host);
|
|
40
|
+
if (!webchatElement) return;
|
|
41
|
+
var frame = getScrollableArea(webchatElement).visible;
|
|
42
|
+
|
|
43
|
+
if (frame) {
|
|
44
|
+
setTimeout(function () {
|
|
45
|
+
return frame.scrollTo({
|
|
46
|
+
top: frame.scrollHeight,
|
|
47
|
+
behavior: behavior
|
|
48
|
+
});
|
|
49
|
+
}, timeout);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
exports.scrollToBottom = scrollToBottom;
|
|
54
|
+
|
|
55
|
+
var getWebchatElement = function getWebchatElement(host) {
|
|
56
|
+
return host && host.querySelector("#".concat(_constants.WEBCHAT.DEFAULTS.ID));
|
|
57
|
+
}; // https://stackoverflow.com/questions/9457891/how-to-detect-if-domcontentloaded-was-fired
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
exports.getWebchatElement = getWebchatElement;
|
|
61
|
+
|
|
62
|
+
var onDOMLoaded = function onDOMLoaded(callback) {
|
|
63
|
+
if (/complete|interactive|loaded/.test(document.readyState)) {
|
|
64
|
+
// In case the document has finished parsing, document's readyState will
|
|
65
|
+
// be one of "complete", "interactive" or (non-standard) "loaded".
|
|
66
|
+
callback();
|
|
67
|
+
} else {
|
|
68
|
+
// The document is not ready yet, so wait for the DOMContentLoaded event
|
|
69
|
+
document.addEventListener('DOMContentLoaded', callback, false);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
exports.onDOMLoaded = onDOMLoaded;
|
|
74
|
+
|
|
75
|
+
var isShadowDOMSupported = function isShadowDOMSupported() {
|
|
76
|
+
try {
|
|
77
|
+
return document.head.createShadowRoot || document.head.attachShadow;
|
|
78
|
+
} catch (e) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
exports.isShadowDOMSupported = isShadowDOMSupported;
|
|
84
|
+
//# sourceMappingURL=dom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.staticAsset = exports.resolveImage = exports.isURL = exports.isProd = exports.isDev = void 0;
|
|
7
|
+
var isDev = process.env.NODE_ENV === 'development';
|
|
8
|
+
exports.isDev = isDev;
|
|
9
|
+
var isProd = process.env.NODE_ENV === 'production';
|
|
10
|
+
exports.isProd = isProd;
|
|
11
|
+
|
|
12
|
+
var staticAsset = function staticAsset(path) {
|
|
13
|
+
try {
|
|
14
|
+
if (isURL(path)) return path; // Webpack 5 >= fully resolves absolute path to assets
|
|
15
|
+
|
|
16
|
+
var scriptBaseURL = document.querySelector('script[src$="webchat.botonic.js"]').getAttribute('src');
|
|
17
|
+
var scriptName = scriptBaseURL.split('/').pop();
|
|
18
|
+
var basePath = scriptBaseURL.replace('/' + scriptName, '/');
|
|
19
|
+
return basePath + path;
|
|
20
|
+
} catch (e) {
|
|
21
|
+
console.error("Could not resolve path: '".concat(path, "'"));
|
|
22
|
+
return path;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
exports.staticAsset = staticAsset;
|
|
27
|
+
|
|
28
|
+
var resolveImage = function resolveImage(src) {
|
|
29
|
+
if (isURL(src)) return src;
|
|
30
|
+
return staticAsset(src);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
exports.resolveImage = resolveImage;
|
|
34
|
+
|
|
35
|
+
var isURL = function isURL(urlPath) {
|
|
36
|
+
// @stephenhay (38 chars) from: https://mathiasbynens.be/demo/url-regex
|
|
37
|
+
var pattern = new RegExp(/^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/);
|
|
38
|
+
return !!pattern.test(urlPath);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
exports.isURL = isURL;
|
|
42
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/util/environment.js"],"names":["isDev","process","env","NODE_ENV","isProd","staticAsset","path","isURL","scriptBaseURL","document","querySelector","getAttribute","scriptName","split","pop","basePath","replace","e","console","error","resolveImage","src","urlPath","pattern","RegExp","test"],"mappings":";;;;;;AAAO,IAAMA,KAAK,GAAGC,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,aAAvC;;AACA,IAAMC,MAAM,GAAGH,OAAO,CAACC,GAAR,CAAYC,QAAZ,KAAyB,YAAxC;;;AAEA,IAAME,WAAW,GAAG,SAAdA,WAAc,CAAAC,IAAI,EAAI;AACjC,MAAI;AACF,QAAIC,KAAK,CAACD,IAAD,CAAT,EAAiB,OAAOA,IAAP,CADf,CAC2B;;AAC7B,QAAME,aAAa,GAAGC,QAAQ,CAC3BC,aADmB,CACL,mCADK,EAEnBC,YAFmB,CAEN,KAFM,CAAtB;AAGA,QAAMC,UAAU,GAAGJ,aAAa,CAACK,KAAd,CAAoB,GAApB,EAAyBC,GAAzB,EAAnB;AACA,QAAMC,QAAQ,GAAGP,aAAa,CAACQ,OAAd,CAAsB,MAAMJ,UAA5B,EAAwC,GAAxC,CAAjB;AACA,WAAOG,QAAQ,GAAGT,IAAlB;AACD,GARD,CAQE,OAAOW,CAAP,EAAU;AACVC,IAAAA,OAAO,CAACC,KAAR,oCAA0Cb,IAA1C;AACA,WAAOA,IAAP;AACD;AACF,CAbM;;;;AAeA,IAAMc,YAAY,GAAG,SAAfA,YAAe,CAAAC,GAAG,EAAI;AACjC,MAAId,KAAK,CAACc,GAAD,CAAT,EAAgB,OAAOA,GAAP;AAChB,SAAOhB,WAAW,CAACgB,GAAD,CAAlB;AACD,CAHM;;;;AAKA,IAAMd,KAAK,GAAG,SAARA,KAAQ,CAAAe,OAAO,EAAI;AAC9B;AACA,MAAMC,OAAO,GAAG,IAAIC,MAAJ,CAAW,sCAAX,CAAhB;AACA,SAAO,CAAC,CAACD,OAAO,CAACE,IAAR,CAAaH,OAAb,CAAT;AACD,CAJM","sourcesContent":["export const isDev = process.env.NODE_ENV === 'development'\nexport const isProd = process.env.NODE_ENV === 'production'\n\nexport const staticAsset = path => {\n try {\n if (isURL(path)) return path // Webpack 5 >= fully resolves absolute path to assets\n const scriptBaseURL = document\n .querySelector('script[src$=\"webchat.botonic.js\"]')\n .getAttribute('src')\n const scriptName = scriptBaseURL.split('/').pop()\n const basePath = scriptBaseURL.replace('/' + scriptName, '/')\n return basePath + path\n } catch (e) {\n console.error(`Could not resolve path: '${path}'`)\n return path\n }\n}\n\nexport const resolveImage = src => {\n if (isURL(src)) return src\n return staticAsset(src)\n}\n\nexport const isURL = urlPath => {\n // @stephenhay (38 chars) from: https://mathiasbynens.be/demo/url-regex\n const pattern = new RegExp(/^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/)\n return !!pattern.test(urlPath)\n}\n"],"file":"environment.js"}
|