@botonic/react 1.0.0-dev.1 → 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 (116) 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 +3 -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 +14 -4
  32. package/lib/webchat/hooks.js.map +1 -1
  33. package/lib/webchat/index.js +1 -1
  34. package/lib/webchat/webchat-reducer.js +6 -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/custom-message.jsx +2 -1
  45. package/src/experimental/components/message.jsx +14 -7
  46. package/src/experimental/constants.js +189 -0
  47. package/src/experimental/contexts.jsx +36 -0
  48. package/src/experimental/dev-app.jsx +14 -7
  49. package/src/experimental/index.js +32 -20
  50. package/src/experimental/msg-to-botonic.jsx +9 -9
  51. package/src/experimental/react-bot.jsx +1 -1
  52. package/src/experimental/util/dom.js +55 -0
  53. package/src/experimental/util/objects.js +39 -0
  54. package/src/experimental/util/webchat.js +61 -0
  55. package/src/experimental/webchat/actions.jsx +24 -0
  56. package/src/experimental/webchat/hooks.js +296 -0
  57. package/src/experimental/webchat/messages-reducer.js +86 -0
  58. package/src/experimental/webchat/session-view.jsx +166 -0
  59. package/src/experimental/webchat/webchat-dev.jsx +23 -19
  60. package/src/experimental/webchat/webchat-reducer.js +68 -0
  61. package/src/experimental/webchat/webchat.jsx +107 -75
  62. package/src/experimental/webchat-app.jsx +34 -15
  63. package/src/index.d.ts +1 -0
  64. package/src/util/dom.js +5 -3
  65. package/src/webchat/devices/device-adapter.js +16 -4
  66. package/src/webchat/devices/scrollbar-controller.js +9 -4
  67. package/src/webchat/webchat.jsx +2 -1
  68. package/src/webchat-app.jsx +6 -4
  69. package/lib/experimental/components/audio.js +0 -46
  70. package/lib/experimental/components/audio.js.map +0 -1
  71. package/lib/experimental/components/carousel.js +0 -194
  72. package/lib/experimental/components/carousel.js.map +0 -1
  73. package/lib/experimental/components/custom-message.js +0 -132
  74. package/lib/experimental/components/custom-message.js.map +0 -1
  75. package/lib/experimental/components/document.js +0 -69
  76. package/lib/experimental/components/document.js.map +0 -1
  77. package/lib/experimental/components/image.js +0 -47
  78. package/lib/experimental/components/image.js.map +0 -1
  79. package/lib/experimental/components/index.js +0 -184
  80. package/lib/experimental/components/index.js.map +0 -1
  81. package/lib/experimental/components/location.js +0 -54
  82. package/lib/experimental/components/location.js.map +0 -1
  83. package/lib/experimental/components/markdown.js +0 -103
  84. package/lib/experimental/components/markdown.js.map +0 -1
  85. package/lib/experimental/components/message.js +0 -353
  86. package/lib/experimental/components/message.js.map +0 -1
  87. package/lib/experimental/components/text.js +0 -80
  88. package/lib/experimental/components/text.js.map +0 -1
  89. package/lib/experimental/components/video.js +0 -49
  90. package/lib/experimental/components/video.js.map +0 -1
  91. package/lib/experimental/components/whatsapp-template.js +0 -53
  92. package/lib/experimental/components/whatsapp-template.js.map +0 -1
  93. package/lib/experimental/dev-app.js +0 -240
  94. package/lib/experimental/dev-app.js.map +0 -1
  95. package/lib/experimental/index.js +0 -1022
  96. package/lib/experimental/index.js.map +0 -1
  97. package/lib/experimental/msg-to-botonic.js +0 -162
  98. package/lib/experimental/msg-to-botonic.js.map +0 -1
  99. package/lib/experimental/node-app.js +0 -97
  100. package/lib/experimental/node-app.js.map +0 -1
  101. package/lib/experimental/react-bot.js +0 -167
  102. package/lib/experimental/react-bot.js.map +0 -1
  103. package/lib/experimental/webchat/assets/Inter-VariableFont_slnt,wght.ttf +0 -0
  104. package/lib/experimental/webchat/assets/botonic-logo-white.svg +0 -16
  105. package/lib/experimental/webchat/assets/messenger.svg +0 -10
  106. package/lib/experimental/webchat/assets/open-new-window.svg +0 -3
  107. package/lib/experimental/webchat/assets/open.svg +0 -3
  108. package/lib/experimental/webchat/assets/telegram.svg +0 -10
  109. package/lib/experimental/webchat/assets/webchat.svg +0 -21
  110. package/lib/experimental/webchat/assets/whatsapp.svg +0 -4
  111. package/lib/experimental/webchat/webchat-dev.js +0 -300
  112. package/lib/experimental/webchat/webchat-dev.js.map +0 -1
  113. package/lib/experimental/webchat/webchat.js +0 -1051
  114. package/lib/experimental/webchat/webchat.js.map +0 -1
  115. package/lib/experimental/webchat-app.js +0 -642
  116. package/lib/experimental/webchat-app.js.map +0 -1
@@ -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"}
@@ -1,47 +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.Image = void 0;
9
-
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
-
14
- var _core = require("@botonic/core");
15
-
16
- var _react = _interopRequireDefault(require("react"));
17
-
18
- var _styledComponents = _interopRequireDefault(require("styled-components"));
19
-
20
- var _constants = require("../../constants");
21
-
22
- var _message = require("./message");
23
-
24
- var _templateObject;
25
-
26
- var StyledImage = _styledComponents["default"].img(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border-radius: 8px;\n max-width: 150px;\n max-height: 150px;\n margin: 10px;\n"])));
27
-
28
- var serialize = function serialize(imageProps) {
29
- return {
30
- src: imageProps.src
31
- };
32
- };
33
-
34
- var Image = function Image(props) {
35
- return /*#__PURE__*/_react["default"].createElement(_message.Message, (0, _extends2["default"])({
36
- role: _constants.ROLES.IMAGE_MESSAGE,
37
- json: serialize(props)
38
- }, props, {
39
- type: _core.INPUT.IMAGE
40
- }), (0, _core.isBrowser)() && /*#__PURE__*/_react["default"].createElement(StyledImage, {
41
- src: props.src
42
- }), props.children);
43
- };
44
-
45
- exports.Image = Image;
46
- Image.serialize = serialize;
47
- //# sourceMappingURL=image.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/experimental/components/image.jsx"],"names":["StyledImage","styled","img","serialize","imageProps","src","Image","props","ROLES","IMAGE_MESSAGE","INPUT","IMAGE","children"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;;;AAEA,IAAMA,WAAW,GAAGC,6BAAOC,GAAV,2KAAjB;;AAOA,IAAMC,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,uCAAe,gCAAC,WAAD;AAAa,IAAA,GAAG,EAAEJ,KAAK,CAACF;AAAxB,IANlB,EAOGE,KAAK,CAACK,QAPT,CADwB;AAAA,CAAnB;;;AAYPN,KAAK,CAACH,SAAN,GAAkBA,SAAlB","sourcesContent":["import { INPUT, isBrowser } from '@botonic/core'\nimport React from 'react'\nimport styled from 'styled-components'\n\nimport { ROLES } from '../../constants'\nimport { Message } from './message'\n\nconst StyledImage = styled.img`\n border-radius: 8px;\n max-width: 150px;\n max-height: 150px;\n margin: 10px;\n`\n\nconst serialize = imageProps => {\n return { src: imageProps.src }\n}\n\nexport const Image = props => (\n <Message\n role={ROLES.IMAGE_MESSAGE}\n json={serialize(props)}\n {...props}\n type={INPUT.IMAGE}\n >\n {isBrowser() && <StyledImage src={props.src}></StyledImage>}\n {props.children}\n </Message>\n)\n\nImage.serialize = serialize\n"],"file":"image.js"}