@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,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"}
@@ -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"}
@@ -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"}
@@ -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"}