@botonic/react 1.0.0-beta.0 → 1.0.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/lib/components/button.js +2 -0
  2. package/lib/components/button.js.map +1 -1
  3. package/lib/components/components.js +1 -1
  4. package/lib/components/image.js +47 -5
  5. package/lib/components/image.js.map +1 -1
  6. package/lib/components/index.js +6 -6
  7. package/lib/components/markdown.js +1 -1
  8. package/lib/components/multichannel/multichannel-utils.js +8 -6
  9. package/lib/components/multichannel/multichannel-utils.js.map +1 -1
  10. package/lib/components/timestamps.js +1 -1
  11. package/lib/constants.js +2 -1
  12. package/lib/constants.js.map +1 -1
  13. package/lib/dev-app.js +7 -6
  14. package/lib/dev-app.js.map +1 -1
  15. package/lib/index.d.ts +3 -0
  16. package/lib/index.js +20 -20
  17. package/lib/message-utils.js +1 -1
  18. package/lib/util/dom.js +8 -2
  19. package/lib/util/dom.js.map +1 -1
  20. package/lib/util/environment.js +1 -1
  21. package/lib/util/objects.js +1 -1
  22. package/lib/util/react.js +1 -1
  23. package/lib/util/webchat.js +1 -1
  24. package/lib/webchat/actions.js +5 -1
  25. package/lib/webchat/actions.js.map +1 -1
  26. package/lib/webchat/devices/device-adapter.js +14 -4
  27. package/lib/webchat/devices/device-adapter.js.map +1 -1
  28. package/lib/webchat/devices/scrollbar-controller.js +5 -3
  29. package/lib/webchat/devices/scrollbar-controller.js.map +1 -1
  30. package/lib/webchat/header.js +1 -1
  31. package/lib/webchat/hooks.js +25 -6
  32. package/lib/webchat/hooks.js.map +1 -1
  33. package/lib/webchat/index.js +1 -1
  34. package/lib/webchat/webchat-reducer.js +11 -0
  35. package/lib/webchat/webchat-reducer.js.map +1 -1
  36. package/lib/webchat/webchat.js +21 -4
  37. package/lib/webchat/webchat.js.map +1 -1
  38. package/lib/webchat/webview.js +1 -1
  39. package/lib/webchat-app.js +20 -9
  40. package/lib/webchat-app.js.map +1 -1
  41. package/package.json +6 -6
  42. package/src/components/button.jsx +2 -0
  43. package/src/dev-app.jsx +8 -3
  44. package/src/experimental/components/message.jsx +8 -2
  45. package/src/experimental/constants.js +189 -0
  46. package/src/experimental/contexts.jsx +36 -0
  47. package/src/experimental/dev-app.jsx +14 -7
  48. package/src/experimental/index.js +94 -25
  49. package/src/experimental/msg-to-botonic.jsx +8 -8
  50. package/src/experimental/react-bot.jsx +1 -1
  51. package/src/experimental/util/dom.js +55 -0
  52. package/src/experimental/util/objects.js +39 -0
  53. package/src/experimental/util/webchat.js +61 -0
  54. package/src/experimental/webchat/actions.jsx +24 -0
  55. package/src/experimental/webchat/hooks.js +296 -0
  56. package/src/experimental/webchat/messages-reducer.js +86 -0
  57. package/src/experimental/webchat/session-view.jsx +166 -0
  58. package/src/experimental/webchat/webchat-dev.jsx +23 -19
  59. package/src/experimental/webchat/webchat-reducer.js +68 -0
  60. package/src/experimental/webchat/webchat.jsx +109 -82
  61. package/src/experimental/webchat-app.jsx +39 -15
  62. package/src/index.d.ts +1 -0
  63. package/src/util/dom.js +5 -3
  64. package/src/webchat/actions.jsx +1 -0
  65. package/src/webchat/devices/device-adapter.js +16 -4
  66. package/src/webchat/devices/scrollbar-controller.js +9 -4
  67. package/src/webchat/hooks.js +10 -0
  68. package/src/webchat/webchat-reducer.js +3 -0
  69. package/src/webchat/webchat.jsx +2 -1
  70. package/src/webchat-app.jsx +6 -4
  71. package/lib/experimental/components/audio.js +0 -46
  72. package/lib/experimental/components/audio.js.map +0 -1
  73. package/lib/experimental/components/carousel.js +0 -194
  74. package/lib/experimental/components/carousel.js.map +0 -1
  75. package/lib/experimental/components/custom-message.js +0 -132
  76. package/lib/experimental/components/custom-message.js.map +0 -1
  77. package/lib/experimental/components/document.js +0 -69
  78. package/lib/experimental/components/document.js.map +0 -1
  79. package/lib/experimental/components/image.js +0 -47
  80. package/lib/experimental/components/image.js.map +0 -1
  81. package/lib/experimental/components/index.js +0 -184
  82. package/lib/experimental/components/index.js.map +0 -1
  83. package/lib/experimental/components/location.js +0 -54
  84. package/lib/experimental/components/location.js.map +0 -1
  85. package/lib/experimental/components/markdown.js +0 -103
  86. package/lib/experimental/components/markdown.js.map +0 -1
  87. package/lib/experimental/components/message.js +0 -353
  88. package/lib/experimental/components/message.js.map +0 -1
  89. package/lib/experimental/components/text.js +0 -80
  90. package/lib/experimental/components/text.js.map +0 -1
  91. package/lib/experimental/components/video.js +0 -49
  92. package/lib/experimental/components/video.js.map +0 -1
  93. package/lib/experimental/components/whatsapp-template.js +0 -53
  94. package/lib/experimental/components/whatsapp-template.js.map +0 -1
  95. package/lib/experimental/dev-app.js +0 -240
  96. package/lib/experimental/dev-app.js.map +0 -1
  97. package/lib/experimental/index.js +0 -748
  98. package/lib/experimental/index.js.map +0 -1
  99. package/lib/experimental/msg-to-botonic.js +0 -162
  100. package/lib/experimental/msg-to-botonic.js.map +0 -1
  101. package/lib/experimental/node-app.js +0 -97
  102. package/lib/experimental/node-app.js.map +0 -1
  103. package/lib/experimental/react-bot.js +0 -167
  104. package/lib/experimental/react-bot.js.map +0 -1
  105. package/lib/experimental/webchat/assets/Inter-VariableFont_slnt,wght.ttf +0 -0
  106. package/lib/experimental/webchat/assets/botonic-logo-white.svg +0 -16
  107. package/lib/experimental/webchat/assets/messenger.svg +0 -10
  108. package/lib/experimental/webchat/assets/open-new-window.svg +0 -3
  109. package/lib/experimental/webchat/assets/open.svg +0 -3
  110. package/lib/experimental/webchat/assets/telegram.svg +0 -10
  111. package/lib/experimental/webchat/assets/webchat.svg +0 -21
  112. package/lib/experimental/webchat/assets/whatsapp.svg +0 -4
  113. package/lib/experimental/webchat/webchat-dev.js +0 -300
  114. package/lib/experimental/webchat/webchat-dev.js.map +0 -1
  115. package/lib/experimental/webchat/webchat.js +0 -1044
  116. package/lib/experimental/webchat/webchat.js.map +0 -1
  117. package/lib/experimental/webchat-app.js +0 -635
  118. package/lib/experimental/webchat-app.js.map +0 -1
@@ -15,6 +15,7 @@ import {
15
15
  TOGGLE_WEBCHAT,
16
16
  UPDATE_DEV_SETTINGS,
17
17
  UPDATE_HANDOFF,
18
+ UPDATE_JWT,
18
19
  UPDATE_LAST_MESSAGE_DATE,
19
20
  UPDATE_LAST_ROUTE_PATH,
20
21
  UPDATE_LATEST_INPUT,
@@ -60,6 +61,7 @@ export const webchatInitialState = {
60
61
  isCoverComponentOpen: false,
61
62
  lastMessageUpdate: undefined,
62
63
  currentAttachment: undefined,
64
+ jwt: null,
63
65
  }
64
66
 
65
67
  export function useWebchat() {
@@ -164,6 +166,13 @@ export function useWebchat() {
164
166
  })
165
167
  }
166
168
 
169
+ const updateJwt = jwt => {
170
+ webchatDispatch({
171
+ type: UPDATE_JWT,
172
+ payload: jwt,
173
+ })
174
+ }
175
+
167
176
  return {
168
177
  webchatState,
169
178
  webchatDispatch,
@@ -188,6 +197,7 @@ export function useWebchat() {
188
197
  clearMessages,
189
198
  updateLastMessageDate,
190
199
  setCurrentAttachment,
200
+ updateJwt,
191
201
  }
192
202
  }
193
203
 
@@ -8,6 +8,7 @@ import {
8
8
  TOGGLE_WEBCHAT,
9
9
  UPDATE_DEV_SETTINGS,
10
10
  UPDATE_HANDOFF,
11
+ UPDATE_JWT,
11
12
  UPDATE_LAST_ROUTE_PATH,
12
13
  UPDATE_LATEST_INPUT,
13
14
  UPDATE_SESSION,
@@ -52,6 +53,8 @@ export function webchatReducer(state, action) {
52
53
  return { ...state, lastRoutePath: action.payload }
53
54
  case SET_CURRENT_ATTACHMENT:
54
55
  return { ...state, currentAttachment: action.payload }
56
+ case UPDATE_JWT:
57
+ return { ...state, jwt: action.payload }
55
58
  default:
56
59
  return messagesReducer(state, action)
57
60
  }
@@ -212,6 +212,8 @@ export const Webchat = forwardRef((props, ref) => {
212
212
 
213
213
  const host = props.host || document.body
214
214
 
215
+ const deviceAdapter = new DeviceAdapter()
216
+
215
217
  const saveWebchatState = webchatState => {
216
218
  storage &&
217
219
  saveState(
@@ -227,7 +229,6 @@ export const Webchat = forwardRef((props, ref) => {
227
229
  )
228
230
  )
229
231
  }
230
- const deviceAdapter = new DeviceAdapter()
231
232
 
232
233
  const handleAttachment = event => {
233
234
  if (!isAllowedSize(event.target.files[0].size)) {
@@ -141,7 +141,7 @@ export class WebchatApp {
141
141
  }
142
142
 
143
143
  onServiceEvent(event) {
144
- if (event.action === 'connectionChange') {
144
+ if (event.action === 'connection_change') {
145
145
  this.onConnectionChange && this.onConnectionChange(this, event.online)
146
146
  this.webchatRef.current.setOnline(event.online)
147
147
  } else if (event.action === 'update_message_info')
@@ -243,7 +243,7 @@ export class WebchatApp {
243
243
  }
244
244
 
245
245
  // eslint-disable-next-line complexity
246
- getComponent(optionsAtRuntime = {}) {
246
+ getComponent(host, optionsAtRuntime = {}) {
247
247
  let {
248
248
  theme = {},
249
249
  persistentMenu,
@@ -265,6 +265,7 @@ export class WebchatApp {
265
265
  appId,
266
266
  visibility,
267
267
  server,
268
+ hostId,
268
269
  ...webchatOptions
269
270
  } = optionsAtRuntime
270
271
  theme = merge(this.theme, theme)
@@ -287,6 +288,8 @@ export class WebchatApp {
287
288
  this.onConnectionChange = onConnectionChange || this.onConnectionChange
288
289
  this.visibility = visibility || this.visibility
289
290
  this.appId = appId || this.appId
291
+ this.hostId = hostId || this.hostId
292
+ this.createRootElement(host)
290
293
  return (
291
294
  <Webchat
292
295
  {...webchatOptions}
@@ -342,11 +345,10 @@ export class WebchatApp {
342
345
 
343
346
  async render(dest, optionsAtRuntime = {}) {
344
347
  onDOMLoaded(async () => {
345
- this.createRootElement(dest)
346
348
  const isVisible = await this.resolveWebchatVisibility(optionsAtRuntime)
347
349
  if (isVisible)
348
350
  render(
349
- this.getComponent(optionsAtRuntime),
351
+ this.getComponent(dest, optionsAtRuntime),
350
352
  this.getReactMountNode(dest)
351
353
  )
352
354
  })
@@ -1,46 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.Audio = void 0;
9
-
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
- var _core = require("@botonic/core");
13
-
14
- var _react = _interopRequireDefault(require("react"));
15
-
16
- var _constants = require("../../constants");
17
-
18
- var _message = require("./message");
19
-
20
- var serialize = function serialize(audioProps) {
21
- return {
22
- src: audioProps.src
23
- };
24
- };
25
-
26
- var Audio = function Audio(props) {
27
- return /*#__PURE__*/_react["default"].createElement(_message.Message, (0, _extends2["default"])({
28
- role: _constants.ROLES.AUDIO_MESSAGE,
29
- json: serialize(props)
30
- }, props, {
31
- type: _core.INPUT.AUDIO
32
- }), (0, _core.isBrowser)() && /*#__PURE__*/_react["default"].createElement("audio", {
33
- style: {
34
- maxWidth: '100%'
35
- },
36
- id: "myAudio",
37
- controls: true
38
- }, /*#__PURE__*/_react["default"].createElement("source", {
39
- src: props.src,
40
- type: "audio/mpeg"
41
- }), "Your browser does not support this audio format."), props.children);
42
- };
43
-
44
- exports.Audio = Audio;
45
- Audio.serialize = serialize;
46
- //# sourceMappingURL=audio.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/experimental/components/audio.jsx"],"names":["serialize","audioProps","src","Audio","props","ROLES","AUDIO_MESSAGE","INPUT","AUDIO","maxWidth","children"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AAEA,IAAMA,SAAS,GAAG,SAAZA,SAAY,CAAAC,UAAU,EAAI;AAC9B,SAAO;AAAEC,IAAAA,GAAG,EAAED,UAAU,CAACC;AAAlB,GAAP;AACD,CAFD;;AAIO,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAAC,KAAK;AAAA,sBACxB,gCAAC,gBAAD;AACE,IAAA,IAAI,EAAEC,iBAAMC,aADd;AAEE,IAAA,IAAI,EAAEN,SAAS,CAACI,KAAD;AAFjB,KAGMA,KAHN;AAIE,IAAA,IAAI,EAAEG,YAAMC;AAJd,MAMG,uCACC;AAAO,IAAA,KAAK,EAAE;AAAEC,MAAAA,QAAQ,EAAE;AAAZ,KAAd;AAAoC,IAAA,EAAE,EAAC,SAAvC;AAAiD,IAAA,QAAQ;AAAzD,kBACE;AAAQ,IAAA,GAAG,EAAEL,KAAK,CAACF,GAAnB;AAAwB,IAAA,IAAI,EAAC;AAA7B,IADF,qDAPJ,EAYGE,KAAK,CAACM,QAZT,CADwB;AAAA,CAAnB;;;AAiBPP,KAAK,CAACH,SAAN,GAAkBA,SAAlB","sourcesContent":["import { INPUT, isBrowser } from '@botonic/core'\nimport React from 'react'\n\nimport { ROLES } from '../../constants'\nimport { Message } from './message'\n\nconst serialize = audioProps => {\n return { src: audioProps.src }\n}\n\nexport const Audio = props => (\n <Message\n role={ROLES.AUDIO_MESSAGE}\n json={serialize(props)}\n {...props}\n type={INPUT.AUDIO}\n >\n {isBrowser() && (\n <audio style={{ maxWidth: '100%' }} id='myAudio' controls>\n <source src={props.src} type='audio/mpeg' />\n Your browser does not support this audio format.\n </audio>\n )}\n {props.children}\n </Message>\n)\n\nAudio.serialize = serialize\n"],"file":"audio.js"}
@@ -1,194 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.Carousel = void 0;
11
-
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
-
16
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
-
18
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
19
-
20
- var _core = require("@botonic/core");
21
-
22
- var _react = _interopRequireWildcard(require("react"));
23
-
24
- var _styledComponents = _interopRequireDefault(require("styled-components"));
25
-
26
- var _leftArrow = _interopRequireDefault(require("../../assets/leftArrow.svg"));
27
-
28
- var _rightArrow = _interopRequireDefault(require("../../assets/rightArrow.svg"));
29
-
30
- var _buttonsDisabler = require("../../components/buttons-disabler");
31
-
32
- var _constants = require("../../constants");
33
-
34
- var _contexts = require("../../contexts");
35
-
36
- var _environment = require("../../util/environment");
37
-
38
- var _styledScrollbar = require("../../webchat/components/styled-scrollbar");
39
-
40
- var _message = require("./message");
41
-
42
- var _templateObject, _templateObject2, _templateObject3, _templateObject4;
43
-
44
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
45
-
46
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
47
-
48
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
49
-
50
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
51
-
52
- var StyledCarousel = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding: 10px 0px;\n display: flex;\n flex-direction: row;\n max-width: 100%;\n ", "\n"])), function (props) {
53
- return props.carouselArrowsEnabled && 'overflow-x: auto;';
54
- });
55
-
56
- var StyledItems = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n"])));
57
-
58
- var StyledArrowContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n top: calc(50% - 20px);\n height: 40px;\n width: 25px;\n background: ", ";\n display: flex;\n align-items: center;\n cursor: pointer;\n justify-content: ", ";\n left: ", "px;\n right: ", "px;\n border-top-", "-radius: 30px;\n border-bottom-", "-radius: 30px;\n"])), _constants.COLORS.SILVER, function (props) {
59
- return props.justifyContent;
60
- }, function (props) {
61
- return props.left;
62
- }, function (props) {
63
- return props.right;
64
- }, function (props) {
65
- return props.arrow;
66
- }, function (props) {
67
- return props.arrow;
68
- });
69
-
70
- var StyledArrow = _styledComponents["default"].img(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n width: 20px;\n height: 20px;\n"])));
71
-
72
- var serialize = function serialize(carouselProps) {
73
- var carouselChildren = carouselProps.children;
74
- if (!Array.isArray(carouselChildren)) carouselChildren = [carouselChildren];
75
- return {
76
- type: _core.INPUT.CAROUSEL,
77
- elements: carouselChildren.map(function (e) {
78
- return e && e.type && e.type.serialize && e.type.serialize(e.props);
79
- })
80
- };
81
- };
82
- /**
83
- *
84
- * @param {MessageProps} props
85
- * @returns {JSX.Element}
86
- */
87
-
88
-
89
- var Carousel = function Carousel(props) {
90
- var _useContext = (0, _react.useContext)(_contexts.WebchatContext),
91
- getThemeProperty = _useContext.getThemeProperty;
92
-
93
- var content = props.children;
94
-
95
- var scrollbarOptions = _objectSpread(_objectSpread({}, {
96
- enable: true,
97
- autoHide: true
98
- }), getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.scrollbar));
99
-
100
- var _useState = (0, _react.useState)(false),
101
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
102
- hasLeftArrow = _useState2[0],
103
- setLeftArrow = _useState2[1];
104
-
105
- var _useState3 = (0, _react.useState)(true),
106
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
107
- hasRightArrow = _useState4[0],
108
- setRightArrow = _useState4[1];
109
-
110
- var carouselRef = (0, _react.useRef)(null);
111
- var CustomCarouselLeftArrow = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.customCarouselLeftArrow, undefined);
112
- var CustomCarouselRightArrow = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.customCarouselRightArrow, undefined);
113
- var carouselArrowsEnabled = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.enableCarouselArrows, true);
114
-
115
- var scrollCarouselBy = function scrollCarouselBy(value) {
116
- carouselRef.current.scrollBy({
117
- left: value,
118
- behavior: 'smooth'
119
- });
120
- };
121
-
122
- var setArrowsVisibility = function setArrowsVisibility(event) {
123
- var carousel = event.currentTarget;
124
- var maxRightScroll = carousel.scrollWidth - carousel.offsetWidth - _constants.WEBCHAT.DEFAULTS.ELEMENT_MARGIN_RIGHT;
125
- setLeftArrow(carousel.scrollLeft !== 0);
126
- setRightArrow(carousel.scrollLeft < maxRightScroll);
127
- };
128
-
129
- var getArrows = function getArrows() {
130
- var scrollBy = _constants.WEBCHAT.DEFAULTS.ELEMENT_WIDTH + _constants.WEBCHAT.DEFAULTS.ELEMENT_MARGIN_RIGHT;
131
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, hasLeftArrow && (CustomCarouselLeftArrow ? /*#__PURE__*/_react["default"].createElement(CustomCarouselLeftArrow, {
132
- scrollCarouselBy: scrollCarouselBy
133
- }) : /*#__PURE__*/_react["default"].createElement(StyledArrowContainer, {
134
- left: 0,
135
- arrow: 'right',
136
- justifyContent: 'flex-start',
137
- onClick: function onClick() {
138
- return scrollCarouselBy(-scrollBy);
139
- }
140
- }, /*#__PURE__*/_react["default"].createElement(StyledArrow, {
141
- src: (0, _environment.resolveImage)(_leftArrow["default"])
142
- }))), hasRightArrow && (CustomCarouselRightArrow ? /*#__PURE__*/_react["default"].createElement(CustomCarouselRightArrow, {
143
- scrollCarouselBy: scrollCarouselBy
144
- }) : /*#__PURE__*/_react["default"].createElement(StyledArrowContainer, {
145
- right: 0,
146
- arrow: 'left',
147
- justifyContent: 'flex-end',
148
- onClick: function onClick() {
149
- return scrollCarouselBy(scrollBy);
150
- }
151
- }, /*#__PURE__*/_react["default"].createElement(StyledArrow, {
152
- src: (0, _environment.resolveImage)(_rightArrow["default"])
153
- }))));
154
- };
155
-
156
- (0, _react.useEffect)(function () {
157
- var carousel = carouselRef.current;
158
-
159
- if (carousel && carousel.addEventListener) {
160
- carousel.addEventListener('scroll', setArrowsVisibility, false);
161
- } else if (carousel && carousel.attachEvent) {
162
- carousel.attachEvent('scroll', setArrowsVisibility);
163
- }
164
- }, [carouselRef.current]);
165
-
166
- var carouselProps = _objectSpread(_objectSpread({}, props), {}, {
167
- children: _buttonsDisabler.ButtonsDisabler.updateChildrenButtons(props.children)
168
- });
169
-
170
- if ((0, _core.isBrowser)()) {
171
- content = /*#__PURE__*/_react["default"].createElement(_styledScrollbar.StyledScrollbar, {
172
- scrollbar: scrollbarOptions,
173
- autoHide: scrollbarOptions.autoHide
174
- }, /*#__PURE__*/_react["default"].createElement(StyledCarousel, {
175
- ref: carouselRef,
176
- carouselArrowsEnabled: carouselArrowsEnabled
177
- }, /*#__PURE__*/_react["default"].createElement(StyledItems, null, carouselProps.children), carouselArrowsEnabled && getArrows()));
178
- }
179
-
180
- return /*#__PURE__*/_react["default"].createElement(_message.Message, (0, _extends2["default"])({
181
- style: {
182
- width: '85%',
183
- padding: 0,
184
- backgroundColor: _constants.COLORS.TRANSPARENT
185
- },
186
- blob: false,
187
- json: serialize(carouselProps),
188
- type: _core.INPUT.CAROUSEL
189
- }, carouselProps), content);
190
- };
191
-
192
- exports.Carousel = Carousel;
193
- Carousel.serialize = serialize;
194
- //# sourceMappingURL=carousel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/experimental/components/carousel.jsx"],"names":["StyledCarousel","styled","div","props","carouselArrowsEnabled","StyledItems","StyledArrowContainer","COLORS","SILVER","justifyContent","left","right","arrow","StyledArrow","img","serialize","carouselProps","carouselChildren","children","Array","isArray","type","INPUT","CAROUSEL","elements","map","e","Carousel","WebchatContext","getThemeProperty","content","scrollbarOptions","enable","autoHide","WEBCHAT","CUSTOM_PROPERTIES","scrollbar","hasLeftArrow","setLeftArrow","hasRightArrow","setRightArrow","carouselRef","CustomCarouselLeftArrow","customCarouselLeftArrow","undefined","CustomCarouselRightArrow","customCarouselRightArrow","enableCarouselArrows","scrollCarouselBy","value","current","scrollBy","behavior","setArrowsVisibility","event","carousel","currentTarget","maxRightScroll","scrollWidth","offsetWidth","DEFAULTS","ELEMENT_MARGIN_RIGHT","scrollLeft","getArrows","ELEMENT_WIDTH","LeftArrow","RightArrow","addEventListener","attachEvent","ButtonsDisabler","updateChildrenButtons","width","padding","backgroundColor","TRANSPARENT"],"mappings":"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","sourcesContent":["import { INPUT, isBrowser } from '@botonic/core'\nimport React, { useContext, useEffect, useRef, useState } from 'react'\nimport styled from 'styled-components'\n\nimport LeftArrow from '../../assets/leftArrow.svg'\nimport RightArrow from '../../assets/rightArrow.svg'\nimport { ButtonsDisabler } from '../../components/buttons-disabler'\nimport { COLORS, WEBCHAT } from '../../constants'\nimport { WebchatContext } from '../../contexts'\nimport { resolveImage } from '../../util/environment'\nimport { StyledScrollbar } from '../../webchat/components/styled-scrollbar'\nimport { Message } from './message'\n\nconst StyledCarousel = styled.div`\n padding: 10px 0px;\n display: flex;\n flex-direction: row;\n max-width: 100%;\n ${props => props.carouselArrowsEnabled && 'overflow-x: auto;'}\n`\n\nconst StyledItems = styled.div`\n display: flex;\n`\n\nconst StyledArrowContainer = styled.div`\n position: absolute;\n top: calc(50% - 20px);\n height: 40px;\n width: 25px;\n background: ${COLORS.SILVER};\n display: flex;\n align-items: center;\n cursor: pointer;\n justify-content: ${props => props.justifyContent};\n left: ${props => props.left}px;\n right: ${props => props.right}px;\n border-top-${props => props.arrow}-radius: 30px;\n border-bottom-${props => props.arrow}-radius: 30px;\n`\nconst StyledArrow = styled.img`\n width: 20px;\n height: 20px;\n`\n\nconst serialize = carouselProps => {\n let carouselChildren = carouselProps.children\n if (!Array.isArray(carouselChildren)) carouselChildren = [carouselChildren]\n return {\n type: INPUT.CAROUSEL,\n elements: carouselChildren.map(\n e => e && e.type && e.type.serialize && e.type.serialize(e.props)\n ),\n }\n}\n\n/**\n *\n * @param {MessageProps} props\n * @returns {JSX.Element}\n */\nexport const Carousel = props => {\n const { getThemeProperty } = useContext(WebchatContext)\n let content = props.children\n const scrollbarOptions = {\n ...{ enable: true, autoHide: true },\n ...getThemeProperty(WEBCHAT.CUSTOM_PROPERTIES.scrollbar),\n }\n const [hasLeftArrow, setLeftArrow] = useState(false)\n const [hasRightArrow, setRightArrow] = useState(true)\n const carouselRef = useRef(null)\n const CustomCarouselLeftArrow = getThemeProperty(\n WEBCHAT.CUSTOM_PROPERTIES.customCarouselLeftArrow,\n undefined\n )\n const CustomCarouselRightArrow = getThemeProperty(\n WEBCHAT.CUSTOM_PROPERTIES.customCarouselRightArrow,\n undefined\n )\n const carouselArrowsEnabled = getThemeProperty(\n WEBCHAT.CUSTOM_PROPERTIES.enableCarouselArrows,\n true\n )\n\n const scrollCarouselBy = value => {\n carouselRef.current.scrollBy({\n left: value,\n behavior: 'smooth',\n })\n }\n\n const setArrowsVisibility = event => {\n const carousel = event.currentTarget\n const maxRightScroll =\n carousel.scrollWidth -\n carousel.offsetWidth -\n WEBCHAT.DEFAULTS.ELEMENT_MARGIN_RIGHT\n setLeftArrow(carousel.scrollLeft !== 0)\n setRightArrow(carousel.scrollLeft < maxRightScroll)\n }\n\n const getArrows = () => {\n const scrollBy =\n WEBCHAT.DEFAULTS.ELEMENT_WIDTH + WEBCHAT.DEFAULTS.ELEMENT_MARGIN_RIGHT\n return (\n <>\n {hasLeftArrow &&\n (CustomCarouselLeftArrow ? (\n <CustomCarouselLeftArrow scrollCarouselBy={scrollCarouselBy} />\n ) : (\n <StyledArrowContainer\n left={0}\n arrow={'right'}\n justifyContent={'flex-start'}\n onClick={() => scrollCarouselBy(-scrollBy)}\n >\n <StyledArrow src={resolveImage(LeftArrow)} />\n </StyledArrowContainer>\n ))}\n {hasRightArrow &&\n (CustomCarouselRightArrow ? (\n <CustomCarouselRightArrow scrollCarouselBy={scrollCarouselBy} />\n ) : (\n <StyledArrowContainer\n right={0}\n arrow={'left'}\n justifyContent={'flex-end'}\n onClick={() => scrollCarouselBy(scrollBy)}\n >\n <StyledArrow src={resolveImage(RightArrow)} />\n </StyledArrowContainer>\n ))}\n </>\n )\n }\n\n useEffect(() => {\n const carousel = carouselRef.current\n if (carousel && carousel.addEventListener) {\n carousel.addEventListener('scroll', setArrowsVisibility, false)\n } else if (carousel && carousel.attachEvent) {\n carousel.attachEvent('scroll', setArrowsVisibility)\n }\n }, [carouselRef.current])\n\n const carouselProps = {\n ...props,\n children: ButtonsDisabler.updateChildrenButtons(props.children),\n }\n\n if (isBrowser()) {\n content = (\n <StyledScrollbar\n scrollbar={scrollbarOptions}\n autoHide={scrollbarOptions.autoHide}\n >\n <StyledCarousel\n ref={carouselRef}\n carouselArrowsEnabled={carouselArrowsEnabled}\n >\n <StyledItems>{carouselProps.children}</StyledItems>\n {carouselArrowsEnabled && getArrows()}\n </StyledCarousel>\n </StyledScrollbar>\n )\n }\n\n return (\n <Message\n style={{ width: '85%', padding: 0, backgroundColor: COLORS.TRANSPARENT }}\n blob={false}\n json={serialize(carouselProps)}\n type={INPUT.CAROUSEL}\n {...carouselProps}\n >\n {content}\n </Message>\n )\n}\n\nCarousel.serialize = serialize\n"],"file":"carousel.js"}
@@ -1,132 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.customMessage = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
-
14
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
-
16
- var _core = require("@botonic/core");
17
-
18
- var _lodash = _interopRequireDefault(require("lodash.merge"));
19
-
20
- var _react = _interopRequireDefault(require("react"));
21
-
22
- var _reply = require("../../components/reply");
23
-
24
- var _constants = require("../../constants");
25
-
26
- var _errorBoundary = require("../../util/error-boundary");
27
-
28
- var _logs = require("../../util/logs");
29
-
30
- var _react2 = require("../../util/react");
31
-
32
- var _message = require("./message");
33
-
34
- var _excluded = ["id", "children"];
35
-
36
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
37
-
38
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
39
-
40
- /**
41
- *
42
- * @param name as it appears at ThemeProps' message.customTypes key
43
- * @param CustomMessageComponent
44
- * @param defaultProps Props for the wrapper Message
45
- * @param ErrorBoundary to recover in case it fails
46
- */
47
- var customMessage = function customMessage(_ref) {
48
- var name = _ref.name,
49
- CustomMessageComponent = _ref.component,
50
- _ref$defaultProps = _ref.defaultProps,
51
- defaultProps = _ref$defaultProps === void 0 ? {} : _ref$defaultProps,
52
- _ref$errorBoundary = _ref.errorBoundary,
53
- ErrorBoundary = _ref$errorBoundary === void 0 ? (0, _errorBoundary.createErrorBoundary)() : _ref$errorBoundary;
54
-
55
- var CustomMessage = function CustomMessage(props) {
56
- (0, _logs.warnDeprecatedProps)(defaultProps, 'customMessage:');
57
- if (defaultProps.from === _constants.SENDERS.user) defaultProps.ack = 1;
58
- return /*#__PURE__*/_react["default"].createElement(_message.Message, (0, _extends2["default"])({}, (0, _lodash["default"])((0, _react2.mapObjectNonBooleanValues)(defaultProps), props), {
59
- type: _core.INPUT.CUSTOM
60
- }));
61
- };
62
-
63
- var splitChildren = function splitChildren(props) {
64
- var children = props.children;
65
-
66
- var isReply = function isReply(e) {
67
- return e.type === _reply.Reply;
68
- };
69
-
70
- try {
71
- if (!Array.isArray(children) && !isReply(children)) {
72
- return {
73
- replies: null,
74
- childrenWithoutReplies: children
75
- };
76
- }
77
-
78
- var childrenArray = _react["default"].Children.toArray(children);
79
-
80
- var replies = childrenArray.filter(isReply);
81
- var childrenWithoutReplies = childrenArray.filter(function (e) {
82
- return !isReply(e);
83
- });
84
- return {
85
- replies: replies,
86
- childrenWithoutReplies: childrenWithoutReplies
87
- };
88
- } catch (e) {
89
- return {
90
- replies: null,
91
- childrenWithoutReplies: children
92
- };
93
- }
94
- };
95
-
96
- var WrappedComponent = function WrappedComponent(props) {
97
- var id = props.id,
98
- children = props.children,
99
- customMessageProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
100
-
101
- var _splitChildren = splitChildren(props),
102
- replies = _splitChildren.replies,
103
- childrenWithoutReplies = _splitChildren.childrenWithoutReplies;
104
-
105
- return /*#__PURE__*/_react["default"].createElement(CustomMessage, {
106
- id: id,
107
- json: _objectSpread(_objectSpread({}, customMessageProps), {}, {
108
- id: id,
109
- children: childrenWithoutReplies,
110
- customTypeName: name
111
- })
112
- }, /*#__PURE__*/_react["default"].createElement(ErrorBoundary, (0, _extends2["default"])({
113
- key: 'errorBoundary'
114
- }, customMessageProps), /*#__PURE__*/_react["default"].createElement(CustomMessageComponent, customMessageProps, childrenWithoutReplies)), replies);
115
- };
116
-
117
- WrappedComponent.customTypeName = name; // eslint-disable-next-line react/display-name
118
-
119
- WrappedComponent.deserialize = function (msg) {
120
- return /*#__PURE__*/_react["default"].createElement(WrappedComponent, msg, msg.replies.length > 0 && msg.replies.map(function (r, i) {
121
- return /*#__PURE__*/_react["default"].createElement(_reply.Reply, {
122
- key: i,
123
- payload: r.payload
124
- }, r.title);
125
- }));
126
- };
127
-
128
- return WrappedComponent;
129
- };
130
-
131
- exports.customMessage = customMessage;
132
- //# sourceMappingURL=custom-message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/experimental/components/custom-message.jsx"],"names":["customMessage","name","CustomMessageComponent","component","defaultProps","errorBoundary","ErrorBoundary","CustomMessage","props","from","SENDERS","user","ack","INPUT","CUSTOM","splitChildren","children","isReply","e","type","Reply","Array","isArray","replies","childrenWithoutReplies","childrenArray","React","Children","toArray","filter","WrappedComponent","id","customMessageProps","customTypeName","deserialize","msg","length","map","r","i","payload","title"],"mappings":"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","sourcesContent":["import { INPUT } from '@botonic/core'\nimport merge from 'lodash.merge'\nimport React from 'react'\n\nimport { Reply } from '../../components/reply'\nimport { SENDERS } from '../../constants'\nimport { createErrorBoundary } from '../../util/error-boundary'\nimport { warnDeprecatedProps } from '../../util/logs'\nimport { mapObjectNonBooleanValues } from '../../util/react'\nimport { Message } from './message'\n\n/**\n *\n * @param name as it appears at ThemeProps' message.customTypes key\n * @param CustomMessageComponent\n * @param defaultProps Props for the wrapper Message\n * @param ErrorBoundary to recover in case it fails\n */\nexport const customMessage = ({\n name,\n component: CustomMessageComponent,\n defaultProps = {},\n errorBoundary: ErrorBoundary = createErrorBoundary(),\n}) => {\n const CustomMessage = props => {\n warnDeprecatedProps(defaultProps, 'customMessage:')\n if (defaultProps.from === SENDERS.user) defaultProps.ack = 1\n return (\n <Message\n {...merge(mapObjectNonBooleanValues(defaultProps), props)}\n type={INPUT.CUSTOM}\n />\n )\n }\n\n const splitChildren = props => {\n const { children } = props\n const isReply = e => e.type === Reply\n try {\n if (!Array.isArray(children) && !isReply(children)) {\n return { replies: null, childrenWithoutReplies: children }\n }\n const childrenArray = React.Children.toArray(children)\n const replies = childrenArray.filter(isReply)\n const childrenWithoutReplies = childrenArray.filter(e => !isReply(e))\n return {\n replies: replies,\n childrenWithoutReplies,\n }\n } catch (e) {\n return { replies: null, childrenWithoutReplies: children }\n }\n }\n\n const WrappedComponent = props => {\n const { id, children, ...customMessageProps } = props\n const { replies, childrenWithoutReplies } = splitChildren(props)\n return (\n <CustomMessage\n id={id}\n json={{\n ...customMessageProps,\n id,\n children: childrenWithoutReplies,\n customTypeName: name,\n }}\n >\n <ErrorBoundary key={'errorBoundary'} {...customMessageProps}>\n <CustomMessageComponent {...customMessageProps}>\n {childrenWithoutReplies}\n </CustomMessageComponent>\n </ErrorBoundary>\n {replies}\n </CustomMessage>\n )\n }\n WrappedComponent.customTypeName = name\n // eslint-disable-next-line react/display-name\n WrappedComponent.deserialize = msg => {\n return (\n <WrappedComponent {...msg}>\n {msg.replies.length > 0 &&\n msg.replies.map((r, i) => (\n <Reply key={i} payload={r.payload}>\n {r.title}\n </Reply>\n ))}\n </WrappedComponent>\n )\n }\n return WrappedComponent\n}\n"],"file":"custom-message.js"}
@@ -1,69 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.Document = void 0;
11
-
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
17
-
18
- var _core = require("@botonic/core");
19
-
20
- var _react = _interopRequireWildcard(require("react"));
21
-
22
- var _styledComponents = _interopRequireDefault(require("styled-components"));
23
-
24
- var _constants = require("../../constants");
25
-
26
- var _contexts = require("../../contexts");
27
-
28
- var _message = require("./message");
29
-
30
- var _templateObject;
31
-
32
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
-
34
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
-
36
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
37
-
38
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
39
-
40
- var StyledButton = _styledComponents["default"].a(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: block;\n height: 25px;\n background-color: #f0f0f0;\n padding: 10px;\n text-align: center;\n border-radius: 5px;\n color: black;\n font-weight: bold;\n line-height: 25px;\n text-decoration: none;\n border: 1px solid black;\n opacity: 0.9;\n &:hover {\n opacity: 1;\n }\n"])));
41
-
42
- var serialize = function serialize(documentProps) {
43
- return {
44
- src: documentProps.src
45
- };
46
- };
47
-
48
- var Document = function Document(props) {
49
- var _useContext = (0, _react.useContext)(_contexts.WebchatContext),
50
- getThemeProperty = _useContext.getThemeProperty;
51
-
52
- var documentDownload = getThemeProperty(_constants.WEBCHAT.CUSTOM_PROPERTIES.documentDownload, {});
53
- if (typeof documentDownload === 'function') documentDownload = documentDownload(props.from);
54
- return /*#__PURE__*/_react["default"].createElement(_message.Message, (0, _extends2["default"])({
55
- role: _constants.ROLES.DOCUMENT_MESSAGE,
56
- json: serialize(props)
57
- }, props, {
58
- type: _core.INPUT.DOCUMENT
59
- }), (0, _core.isBrowser)() && /*#__PURE__*/_react["default"].createElement(StyledButton, {
60
- href: props.src,
61
- target: "_blank",
62
- rel: "noreferrer",
63
- style: _objectSpread({}, documentDownload.style)
64
- }, documentDownload.text || 'Download'), props.children);
65
- };
66
-
67
- exports.Document = Document;
68
- Document.serialize = serialize;
69
- //# sourceMappingURL=document.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/experimental/components/document.jsx"],"names":["StyledButton","styled","a","serialize","documentProps","src","Document","props","WebchatContext","getThemeProperty","documentDownload","WEBCHAT","CUSTOM_PROPERTIES","from","ROLES","DOCUMENT_MESSAGE","INPUT","DOCUMENT","style","text","children"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;AACA;;;;;;;;;;;;AAEA,IAAMA,YAAY,GAAGC,6BAAOC,CAAV,iYAAlB;;AAkBA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAAC,aAAa,EAAI;AACjC,SAAO;AAAEC,IAAAA,GAAG,EAAED,aAAa,CAACC;AAArB,GAAP;AACD,CAFD;;AAIO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAAC,KAAK,EAAI;AAC/B,oBAA6B,uBAAWC,wBAAX,CAA7B;AAAA,MAAQC,gBAAR,eAAQA,gBAAR;;AACA,MAAIC,gBAAgB,GAAGD,gBAAgB,CACrCE,mBAAQC,iBAAR,CAA0BF,gBADW,EAErC,EAFqC,CAAvC;AAIA,MAAI,OAAOA,gBAAP,KAA4B,UAAhC,EACEA,gBAAgB,GAAGA,gBAAgB,CAACH,KAAK,CAACM,IAAP,CAAnC;AAEF,sBACE,gCAAC,gBAAD;AACE,IAAA,IAAI,EAAEC,iBAAMC,gBADd;AAEE,IAAA,IAAI,EAAEZ,SAAS,CAACI,KAAD;AAFjB,KAGMA,KAHN;AAIE,IAAA,IAAI,EAAES,YAAMC;AAJd,MAMG,uCACC,gCAAC,YAAD;AACE,IAAA,IAAI,EAAEV,KAAK,CAACF,GADd;AAEE,IAAA,MAAM,EAAC,QAFT;AAGE,IAAA,GAAG,EAAC,YAHN;AAIE,IAAA,KAAK,oBACAK,gBAAgB,CAACQ,KADjB;AAJP,KAQGR,gBAAgB,CAACS,IAAjB,IAAyB,UAR5B,CAPJ,EAkBGZ,KAAK,CAACa,QAlBT,CADF;AAsBD,CA/BM;;;AAiCPd,QAAQ,CAACH,SAAT,GAAqBA,SAArB","sourcesContent":["import { INPUT, isBrowser } from '@botonic/core'\nimport React, { useContext } from 'react'\nimport styled from 'styled-components'\n\nimport { ROLES, WEBCHAT } from '../../constants'\nimport { WebchatContext } from '../../contexts'\nimport { Message } from './message'\n\nconst StyledButton = styled.a`\n display: block;\n height: 25px;\n background-color: #f0f0f0;\n padding: 10px;\n text-align: center;\n border-radius: 5px;\n color: black;\n font-weight: bold;\n line-height: 25px;\n text-decoration: none;\n border: 1px solid black;\n opacity: 0.9;\n &:hover {\n opacity: 1;\n }\n`\n\nconst serialize = documentProps => {\n return { src: documentProps.src }\n}\n\nexport const Document = props => {\n const { getThemeProperty } = useContext(WebchatContext)\n let documentDownload = getThemeProperty(\n WEBCHAT.CUSTOM_PROPERTIES.documentDownload,\n {}\n )\n if (typeof documentDownload === 'function')\n documentDownload = documentDownload(props.from)\n\n return (\n <Message\n role={ROLES.DOCUMENT_MESSAGE}\n json={serialize(props)}\n {...props}\n type={INPUT.DOCUMENT}\n >\n {isBrowser() && (\n <StyledButton\n href={props.src}\n target='_blank'\n rel='noreferrer'\n style={{\n ...documentDownload.style,\n }}\n >\n {documentDownload.text || 'Download'}\n </StyledButton>\n )}\n {props.children}\n </Message>\n )\n}\n\nDocument.serialize = serialize\n"],"file":"document.js"}