@botpress/webchat 0.2.3 → 0.2.4

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 (54) hide show
  1. package/dist/components/Composer.d.ts +1 -1
  2. package/dist/components/Composer.js +12 -2
  3. package/dist/components/Container.d.ts +1 -1
  4. package/dist/components/Container.js +0 -2
  5. package/dist/components/ContextMenu.js +0 -9
  6. package/dist/components/Header.d.ts +1 -1
  7. package/dist/components/Header.js +10 -27
  8. package/dist/components/VoiceRecorder.js +6 -2
  9. package/dist/components/common/{Avatar.d.ts → Avatar/index.d.ts} +0 -0
  10. package/dist/components/common/Avatar/index.js +13 -0
  11. package/dist/components/common/{BotInfo.d.ts → BotInfo/index.d.ts} +2 -2
  12. package/dist/components/common/BotInfo/index.js +112 -0
  13. package/dist/components/common/ConfirmDialog/index.d.ts +11 -0
  14. package/dist/components/common/ConfirmDialog/index.js +78 -0
  15. package/dist/components/common/Dialog/index.d.ts +17 -0
  16. package/dist/components/common/Dialog/index.js +57 -0
  17. package/dist/components/common/MoreOptions/index.d.ts +21 -0
  18. package/dist/components/common/MoreOptions/index.js +60 -0
  19. package/dist/components/common/Overlay/index.d.ts +7 -0
  20. package/dist/components/common/{Avatar.js → Overlay/index.js} +15 -8
  21. package/dist/components/common/ToolTip/index.d.ts +10 -0
  22. package/dist/components/common/ToolTip/index.js +163 -0
  23. package/dist/components/common/ToolTip/utils.d.ts +15 -0
  24. package/dist/components/common/ToolTip/utils.js +78 -0
  25. package/dist/components/messages/Message.js +1 -20
  26. package/dist/components/messages/MessageGroup.d.ts +1 -9
  27. package/dist/components/messages/MessageGroup.js +4 -35
  28. package/dist/components/messages/MessageList.d.ts +1 -1
  29. package/dist/components/messages/MessageList.js +1 -2
  30. package/dist/core/api.d.ts +4 -13
  31. package/dist/core/api.js +29 -130
  32. package/dist/core/socket.d.ts +0 -5
  33. package/dist/core/socket.js +2 -45
  34. package/dist/icons/Cancel.d.ts +5 -0
  35. package/dist/icons/Cancel.js +10 -0
  36. package/dist/icons/Microphone.d.ts +5 -0
  37. package/dist/icons/Microphone.js +12 -0
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.js +7 -0
  40. package/dist/main.d.ts +1 -1
  41. package/dist/main.js +20 -37
  42. package/dist/store/composer.js +3 -6
  43. package/dist/store/index.d.ts +6 -12
  44. package/dist/store/index.js +74 -89
  45. package/dist/store/view.d.ts +0 -2
  46. package/dist/store/view.js +0 -10
  47. package/dist/translations/index.d.ts +2 -1
  48. package/dist/translations/index.js +9 -4
  49. package/dist/typings.d.ts +6 -18
  50. package/dist/utils/storage.d.ts +17 -0
  51. package/dist/utils/storage.js +117 -0
  52. package/dist/utils.js +1 -1
  53. package/package.json +4 -2
  54. package/dist/components/common/BotInfo.js +0 -110
@@ -12,4 +12,4 @@ declare type ComposerProps = {
12
12
  composerPlaceholder: string;
13
13
  composerLocked: boolean;
14
14
  composerHidden: boolean;
15
- } & WrappedComponentProps & Pick<StoreDef, 'botName' | 'composerPlaceholder' | 'intl' | 'focusedArea' | 'sendMessage' | 'sendVoiceMessage' | 'focusPrevious' | 'focusNext' | 'recallHistory' | 'setFocus' | 'updateMessage' | 'message' | 'enableArrowNavigation' | 'resetSession' | 'isEmulator' | 'enableResetSessionShortcut' | 'enableVoiceComposer' | 'currentConversation' | 'preferredLanguage'>;
15
+ } & WrappedComponentProps & Pick<StoreDef, 'botName' | 'composerPlaceholder' | 'intl' | 'focusedArea' | 'sendMessage' | 'sendVoiceMessage' | 'focusPrevious' | 'focusNext' | 'recallHistory' | 'setFocus' | 'updateMessage' | 'message' | 'enableArrowNavigation' | 'resetSession' | 'enableResetSessionShortcut' | 'enableVoiceComposer' | 'currentConversation' | 'preferredLanguage'>;
@@ -16,6 +16,7 @@ const mobx_1 = require("mobx");
16
16
  const mobx_react_1 = require("mobx-react");
17
17
  const react_1 = __importDefault(require("react"));
18
18
  const react_intl_1 = require("react-intl");
19
+ const ToolTip_1 = __importDefault(require("./common/ToolTip"));
19
20
  const VoiceRecorder_1 = __importDefault(require("./VoiceRecorder"));
20
21
  class Composer extends react_1.default.Component {
21
22
  constructor(props) {
@@ -89,7 +90,17 @@ class Composer extends react_1.default.Component {
89
90
  defaultMessage: 'Message to send'
90
91
  }), disabled: this.props.composerLocked }),
91
92
  react_1.default.createElement("label", { htmlFor: "input-message", style: { display: 'none' } }, placeholder),
92
- react_1.default.createElement("div", { className: 'bpw-send-buttons' }, this.props.enableVoiceComposer && (react_1.default.createElement(VoiceRecorder_1.default, { onStart: this.onVoiceStart, onDone: this.onVoiceEnd, onNotAvailable: this.onVoiceNotAvailable }))))));
93
+ react_1.default.createElement("div", { className: 'bpw-send-buttons' },
94
+ this.props.enableVoiceComposer && (react_1.default.createElement(VoiceRecorder_1.default, { onStart: this.onVoiceStart, onDone: this.onVoiceEnd, onNotAvailable: this.onVoiceNotAvailable })),
95
+ react_1.default.createElement(ToolTip_1.default, { childId: "btn-send", content: this.props.intl.formatMessage({
96
+ id: 'composer.sendMessage',
97
+ defaultMessage: 'Send Message'
98
+ }) },
99
+ react_1.default.createElement("button", { className: 'bpw-send-button', disabled: !this.props.message.length || this.props.composerLocked || this.state.isRecording, onClick: this.props.sendMessage.bind(this, undefined), "aria-label": this.props.intl.formatMessage({
100
+ id: 'composer.send',
101
+ defaultMessage: 'Send'
102
+ }), id: "btn-send" },
103
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: 'composer.send' })))))));
93
104
  }
94
105
  }
95
106
  exports.default = (0, mobx_react_1.inject)(({ store }) => ({
@@ -112,6 +123,5 @@ exports.default = (0, mobx_react_1.inject)(({ store }) => ({
112
123
  enableResetSessionShortcut: store.config.enableResetSessionShortcut,
113
124
  resetSession: store.resetSession,
114
125
  currentConversation: store.currentConversation,
115
- isEmulator: store.isEmulator,
116
126
  preferredLanguage: store.preferredLanguage
117
127
  }))((0, react_intl_1.injectIntl)((0, mobx_react_1.observer)(Composer)));
@@ -9,4 +9,4 @@ declare const _default: React.ForwardRefExoticComponent<import("react-intl").Omi
9
9
  export default _default;
10
10
  declare type ContainerProps = {
11
11
  store?: RootStore;
12
- } & WrappedComponentProps & Pick<StoreDef, 'config' | 'botName' | 'isFullscreen' | 'isConversationsDisplayed' | 'isBotInfoDisplayed' | 'sideTransition' | 'isInitialized' | 'dimensions' | 'isEmulator' | 'isPoweredByDisplayed' | 'rtl'>;
12
+ } & WrappedComponentProps & Pick<StoreDef, 'config' | 'botName' | 'isFullscreen' | 'isConversationsDisplayed' | 'isBotInfoDisplayed' | 'sideTransition' | 'isInitialized' | 'dimensions' | 'isPoweredByDisplayed' | 'rtl'>;
@@ -29,7 +29,6 @@ class Container extends react_1.default.Component {
29
29
  }
30
30
  else {
31
31
  return (react_1.default.createElement("div", { className: (0, classnames_1.default)('bpw-msg-list-container', {
32
- 'bpw-emulator': this.props.isEmulator,
33
32
  'bpw-rtl': this.props.rtl
34
33
  }) },
35
34
  react_1.default.createElement(MessageList_1.default, null),
@@ -58,7 +57,6 @@ exports.default = (0, mobx_react_1.inject)(({ store }) => ({
58
57
  isFullscreen: store.view.isFullscreen,
59
58
  sideTransition: store.view.sideTransition,
60
59
  dimensions: store.view.dimensions,
61
- isEmulator: store.isEmulator,
62
60
  isInitialized: store.isInitialized,
63
61
  isPoweredByDisplayed: store.view.isPoweredByDisplayed,
64
62
  config: store.config,
@@ -15,15 +15,6 @@ function MessageMenu(props) {
15
15
  }
16
16
  const showContextMenu = (e, props) => {
17
17
  const customActions = props.store.view.customActions;
18
- if (props.store.config.isEmulator) {
19
- customActions.push({
20
- id: 'actionDebug',
21
- label: 'Inspect in Debugger',
22
- onClick: (_actionId, props) => {
23
- props.store.loadEventInDebugger(props.incomingEventId, true);
24
- }
25
- });
26
- }
27
18
  if (customActions && props.incomingEventId) {
28
19
  e.preventDefault();
29
20
  const menu = react_1.default.createElement(MessageMenu, { element: props, customActions: customActions });
@@ -25,4 +25,4 @@ declare class Header extends React.Component<HeaderProps> {
25
25
  }
26
26
  declare const _default: typeof Header & import("mobx-react").IWrappedComponent<unknown>;
27
27
  export default _default;
28
- declare type HeaderProps = Pick<StoreDef, 'intl' | 'sendMessage' | 'focusPrevious' | 'focusNext' | 'focusedArea' | 'isConversationsDisplayed' | 'botName' | 'isEmulator' | 'hasUnreadMessages' | 'unreadCount' | 'hasBotInfoDescription' | 'deleteConversation' | 'resetSession' | 'downloadConversation' | 'toggleConversations' | 'hideChat' | 'toggleBotInfo' | 'botAvatarUrl' | 'showResetButton' | 'showDeleteConversationButton' | 'showDownloadButton' | 'showConversationsButton' | 'showBotInfoButton' | 'showCloseButton' | 'enableArrowNavigation' | 'botConvoDescription' | 'customButtons'>;
28
+ declare type HeaderProps = Pick<StoreDef, 'intl' | 'sendMessage' | 'focusPrevious' | 'focusNext' | 'focusedArea' | 'isConversationsDisplayed' | 'botName' | 'hasUnreadMessages' | 'unreadCount' | 'hasBotInfoDescription' | 'deleteConversation' | 'resetSession' | 'downloadConversation' | 'toggleConversations' | 'hideChat' | 'toggleBotInfo' | 'botAvatarUrl' | 'showResetButton' | 'showDeleteConversationButton' | 'showDownloadButton' | 'showConversationsButton' | 'showBotInfoButton' | 'showCloseButton' | 'enableArrowNavigation' | 'botConvoDescription' | 'customButtons'>;
@@ -15,9 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const mobx_1 = require("mobx");
16
16
  const mobx_react_1 = require("mobx-react");
17
17
  const react_1 = __importDefault(require("react"));
18
- // TODO: put this back
19
- // import confirmDialog from '../../../../../../packages/ui-shared-lite/ConfirmDialog'
20
- // import MoreOptions from '../../../../../../packages/ui-shared-lite/MoreOptions'
21
18
  const Close_1 = __importDefault(require("../icons/Close"));
22
19
  const Delete_1 = __importDefault(require("../icons/Delete"));
23
20
  const Download_1 = __importDefault(require("../icons/Download"));
@@ -25,6 +22,7 @@ const Information_1 = __importDefault(require("../icons/Information"));
25
22
  const List_1 = __importDefault(require("../icons/List"));
26
23
  const Reload_1 = __importDefault(require("../icons/Reload"));
27
24
  const Avatar_1 = __importDefault(require("./common/Avatar"));
25
+ const ConfirmDialog_1 = __importDefault(require("./common/ConfirmDialog"));
28
26
  class Header extends react_1.default.Component {
29
27
  constructor() {
30
28
  super(...arguments);
@@ -68,26 +66,18 @@ class Header extends react_1.default.Component {
68
66
  this.props.hasBotInfoDescription && (react_1.default.createElement("div", { className: 'bpw-header-subtitle' }, this.props.botConvoDescription))));
69
67
  };
70
68
  this.handleDeleteConversation = () => __awaiter(this, void 0, void 0, function* () {
71
- // TODO: put this back
72
- /*
73
- if (
74
- await confirmDialog(
75
- this.props.intl!.formatMessage({
76
- id: 'header.deleteConversation'
77
- }),
78
- {
79
- acceptLabel: this.props.intl!.formatMessage({
69
+ if (yield (0, ConfirmDialog_1.default)(this.props.intl.formatMessage({
70
+ id: 'header.deleteConversation'
71
+ }), {
72
+ acceptLabel: this.props.intl.formatMessage({
80
73
  id: 'header.deleteConversationYes'
81
- }),
82
- declineLabel: this.props.intl!.formatMessage({
74
+ }),
75
+ declineLabel: this.props.intl.formatMessage({
83
76
  id: 'header.deleteConversationNo'
84
- })
85
- }
86
- )
87
- ) {
88
- await this.props.deleteConversation!()
77
+ })
78
+ })) {
79
+ yield this.props.deleteConversation();
89
80
  }
90
- */
91
81
  });
92
82
  this.handleKeyDown = (action, e) => {
93
83
  if (!this.props.enableArrowNavigation) {
@@ -178,12 +168,6 @@ class Header extends react_1.default.Component {
178
168
  action: this.props.deleteConversation
179
169
  });
180
170
  }
181
- if (this.props.isEmulator) {
182
- return (react_1.default.createElement("div", { className: "bpw-emulator-header" },
183
- react_1.default.createElement("span", { className: "bpw-emulator-header-tab" }, "Emulator"),
184
- react_1.default.createElement("div", null,
185
- react_1.default.createElement("span", { className: "bpw-emulator-buttons" }, this.props.showResetButton && this.renderResetButton()))));
186
- }
187
171
  return (react_1.default.createElement("div", { className: 'bpw-header-container' },
188
172
  react_1.default.createElement("div", { className: 'bpw-header-title-flexbox' },
189
173
  react_1.default.createElement("div", { className: 'bpw-header-title-container' },
@@ -222,7 +206,6 @@ exports.default = (0, mobx_react_1.inject)(({ store }) => ({
222
206
  botName: store.botName,
223
207
  botAvatarUrl: store.botAvatarUrl,
224
208
  hasBotInfoDescription: store.hasBotInfoDescription,
225
- isEmulator: store.isEmulator,
226
209
  botConvoDescription: store.config.botConvoDescription,
227
210
  enableArrowNavigation: store.config.enableArrowNavigation
228
211
  }))((0, mobx_react_1.observer)(Header));
@@ -34,6 +34,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
34
34
  const classnames_1 = __importDefault(require("classnames"));
35
35
  const lite_1 = __importDefault(require("mime/lite"));
36
36
  const react_1 = __importStar(require("react"));
37
+ const Cancel_1 = __importDefault(require("../icons/Cancel"));
38
+ const Microphone_1 = __importDefault(require("../icons/Microphone"));
37
39
  const VoiceRecorder = (props) => {
38
40
  var _a;
39
41
  const [isRecording, setIsRecording] = (0, react_1.useState)(false);
@@ -127,7 +129,9 @@ const VoiceRecorder = (props) => {
127
129
  return null;
128
130
  }
129
131
  return (react_1.default.createElement(react_1.Fragment, null,
130
- isRecording && (react_1.default.createElement("button", { className: (0, classnames_1.default)('bpw-send-button', props.className), onClick: cancelRecording })),
131
- react_1.default.createElement("button", { className: (0, classnames_1.default)('bpw-send-button', props.className), onClick: isRecording ? stopRecording : startRecording })));
132
+ isRecording && (react_1.default.createElement("button", { className: (0, classnames_1.default)('bpw-send-button', props.className), onClick: cancelRecording },
133
+ react_1.default.createElement(Cancel_1.default, { fill: "#ff0000" }))),
134
+ react_1.default.createElement("button", { className: (0, classnames_1.default)('bpw-send-button', props.className), onClick: isRecording ? stopRecording : startRecording },
135
+ react_1.default.createElement(Microphone_1.default, { fill: isRecording ? '#f1f1f1' : 'black' }))));
132
136
  };
133
137
  exports.default = VoiceRecorder;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const Avatar = ({ name, avatarUrl, height, width }) => {
8
+ return (react_1.default.createElement("div", { className: 'bpw-bot-avatar' },
9
+ avatarUrl && react_1.default.createElement("img", { height: height, width: width, src: avatarUrl }),
10
+ !avatarUrl && (react_1.default.createElement("svg", { width: width, height: width },
11
+ react_1.default.createElement("text", { textAnchor: 'middle', x: '50%', y: '50%', dy: '0.35em', fill: '#ffffff', fontSize: 15 }, name && name[0])))));
12
+ };
13
+ exports.default = Avatar;
@@ -1,6 +1,6 @@
1
- import * as React from 'react';
1
+ import React from 'react';
2
2
  import { WrappedComponentProps } from 'react-intl';
3
- import { StoreDef } from '../../store';
3
+ import { StoreDef } from '../../../store';
4
4
  declare const _default: React.ForwardRefExoticComponent<import("react-intl").Omit<BotInfoProps, "intl"> & {
5
5
  forwardedRef?: React.Ref<any> | undefined;
6
6
  } & React.RefAttributes<any>> & {
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
+ return new (P || (P = Promise))(function (resolve, reject) {
24
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
28
+ });
29
+ };
30
+ var __importDefault = (this && this.__importDefault) || function (mod) {
31
+ return (mod && mod.__esModule) ? mod : { "default": mod };
32
+ };
33
+ Object.defineProperty(exports, "__esModule", { value: true });
34
+ const classnames_1 = __importDefault(require("classnames"));
35
+ const mobx_react_1 = require("mobx-react");
36
+ const react_1 = __importStar(require("react"));
37
+ const react_intl_1 = require("react-intl");
38
+ const Email_1 = __importDefault(require("../../../icons/Email"));
39
+ const Phone_1 = __importDefault(require("../../../icons/Phone"));
40
+ const Website_1 = __importDefault(require("../../../icons/Website"));
41
+ const utils_1 = require("../../../utils");
42
+ const Avatar_1 = __importDefault(require("../Avatar"));
43
+ const CoverPicture = ({ botInfo }) => (react_1.default.createElement("div", { className: 'bpw-botinfo-cover-picture-wrapper' },
44
+ react_1.default.createElement("img", { className: 'bpw-botinfo-cover-picture', src: (botInfo.details && botInfo.details.coverPictureUrl) ||
45
+ `https://via.placeholder.com/400x175?text=${botInfo.name}` })));
46
+ class BotInfoPage extends react_1.default.Component {
47
+ constructor() {
48
+ super(...arguments);
49
+ this.changeLanguage = (e) => __awaiter(this, void 0, void 0, function* () {
50
+ const lang = e.target.value;
51
+ yield this.props.updatePreferredLanguage(lang);
52
+ });
53
+ }
54
+ componentDidMount() {
55
+ var _a;
56
+ (_a = this.btnEl) === null || _a === void 0 ? void 0 : _a.focus();
57
+ }
58
+ renderDescription(text) {
59
+ const html = (0, utils_1.renderUnsafeHTML)(text, this.props.escapeHTML);
60
+ return react_1.default.createElement("div", { className: 'bpw-botinfo-description', dangerouslySetInnerHTML: { __html: html } });
61
+ }
62
+ render() {
63
+ const { botInfo, botName, avatarUrl } = this.props;
64
+ const onDismiss = this.props.isConversationStarted ? this.props.toggleBotInfo : this.props.startConversation;
65
+ return (react_1.default.createElement(react_1.Fragment, null,
66
+ react_1.default.createElement("link", { rel: "stylesheet", href: "style.scss" }),
67
+ react_1.default.createElement("div", { className: (0, classnames_1.default)('bpw-botinfo-container', {
68
+ 'bpw-rtl': this.props.rtl
69
+ }) },
70
+ react_1.default.createElement(CoverPicture, { botInfo: botInfo }),
71
+ react_1.default.createElement("div", { className: 'bpw-botinfo-summary' },
72
+ react_1.default.createElement(Avatar_1.default, { name: botName, avatarUrl: avatarUrl, height: 64, width: 64 }),
73
+ react_1.default.createElement("h3", null, botName),
74
+ this.renderDescription(botInfo.description)),
75
+ botInfo.details && (react_1.default.createElement(react_1.default.Fragment, null,
76
+ react_1.default.createElement("div", { className: 'bpw-botinfo-links' },
77
+ botInfo.details.phoneNumber && (react_1.default.createElement("div", { className: 'bpw-botinfo-link' },
78
+ react_1.default.createElement("i", null,
79
+ react_1.default.createElement(Phone_1.default, null)),
80
+ react_1.default.createElement("a", { target: '_blank', href: `tel:${botInfo.details.phoneNumber}` }, botInfo.details.phoneNumber))),
81
+ botInfo.details.website && (react_1.default.createElement("div", { className: 'bpw-botinfo-link' },
82
+ react_1.default.createElement("i", null,
83
+ react_1.default.createElement(Website_1.default, null)),
84
+ react_1.default.createElement("a", { target: '_blank', href: botInfo.details.website }, botInfo.details.website))),
85
+ botInfo.details.emailAddress && (react_1.default.createElement("div", { className: 'bpw-botinfo-link' },
86
+ react_1.default.createElement("i", null,
87
+ react_1.default.createElement(Email_1.default, null)),
88
+ react_1.default.createElement("a", { target: '_blank', href: `mailto:${botInfo.details.emailAddress}` }, botInfo.details.emailAddress)))),
89
+ botInfo.details.termsConditions && (react_1.default.createElement("div", { className: 'bpw-botinfo-terms' },
90
+ react_1.default.createElement("a", { target: '_blank', href: botInfo.details.termsConditions },
91
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: 'botInfo.termsAndConditions' })))),
92
+ botInfo.details.privacyPolicy && (react_1.default.createElement("div", { className: 'bpw-botinfo-terms' },
93
+ react_1.default.createElement("a", { target: '_blank', href: botInfo.details.privacyPolicy },
94
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: 'botInfo.privacyPolicy' })))))),
95
+ botInfo.languages.length > 1 && (react_1.default.createElement("div", { className: 'bpw-botinfo-preferred-language' },
96
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: 'botInfo.preferredLanguage' }),
97
+ react_1.default.createElement("select", { value: this.props.preferredLanguage, onChange: this.changeLanguage }, botInfo.languages.map((lang) => (react_1.default.createElement("option", { key: lang, value: lang }, lang.toUpperCase())))))),
98
+ react_1.default.createElement("button", { tabIndex: 1, ref: (el) => (this.btnEl = el), className: 'bpw-botinfo-start-button', onClick: onDismiss.bind(this, undefined) }, this.props.isConversationStarted ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: 'botInfo.backToConversation' })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: 'botInfo.startConversation' }))))));
99
+ }
100
+ }
101
+ exports.default = (0, mobx_react_1.inject)(({ store }) => ({
102
+ botName: store.botName,
103
+ botInfo: store.botInfo,
104
+ avatarUrl: store.botAvatarUrl,
105
+ startConversation: store.startConversation,
106
+ toggleBotInfo: store.view.toggleBotInfo,
107
+ isConversationStarted: store.isConversationStarted,
108
+ updatePreferredLanguage: store.updatePreferredLanguage,
109
+ preferredLanguage: store.preferredLanguage,
110
+ escapeHTML: store.escapeHTML,
111
+ rtl: store.rtl
112
+ }))((0, react_intl_1.injectIntl)((0, mobx_react_1.observer)(BotInfoPage)));
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ export interface ConfirmDialogOptions {
3
+ title?: string;
4
+ accept?: () => void;
5
+ decline?: () => void;
6
+ acceptLabel: string;
7
+ declineLabel: string;
8
+ body?: JSX.Element;
9
+ }
10
+ declare const confirmDialog: (message: string, options: ConfirmDialogOptions) => Promise<boolean>;
11
+ export default confirmDialog;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const core_1 = require("@blueprintjs/core");
26
+ const react_1 = __importDefault(require("react"));
27
+ const react_dom_1 = __importDefault(require("react-dom"));
28
+ const Dialog_1 = require("../Dialog");
29
+ const styles = __importStar(require("./style.module.scss"));
30
+ const ConfirmDialogComponent = (props) => {
31
+ const onAccept = () => {
32
+ var _a;
33
+ removeDialog();
34
+ (_a = props.accept) === null || _a === void 0 ? void 0 : _a.call(props);
35
+ props.resolve(true);
36
+ };
37
+ const onDecline = () => {
38
+ var _a;
39
+ removeDialog();
40
+ (_a = props.decline) === null || _a === void 0 ? void 0 : _a.call(props);
41
+ props.resolve(false);
42
+ };
43
+ return (react_1.default.createElement(Dialog_1.Wrapper, { icon: "warning-sign", usePortal: false, isOpen: true, onClose: onDecline, size: "sm" },
44
+ react_1.default.createElement(Dialog_1.Body, null,
45
+ react_1.default.createElement(core_1.Icon, { icon: "warning-sign", iconSize: 32, className: styles.icon }),
46
+ react_1.default.createElement("div", null,
47
+ props.message,
48
+ props.body)),
49
+ react_1.default.createElement(Dialog_1.Footer, null,
50
+ react_1.default.createElement(core_1.Button, { id: "confirm-dialog-decline", className: core_1.Classes.BUTTON, type: "button", onClick: onDecline, text: props.declineLabel, tabIndex: 2, intent: core_1.Intent.NONE }),
51
+ react_1.default.createElement(core_1.Button, { id: "confirm-dialog-accept", className: core_1.Classes.BUTTON, type: "button", autoFocus: true, onClick: onAccept, text: props.acceptLabel, tabIndex: 3, intent: core_1.Intent.WARNING }))));
52
+ };
53
+ const defaultConfirmOptions = {
54
+ title: '',
55
+ accept: () => { },
56
+ acceptLabel: 'Confirm',
57
+ decline: () => { },
58
+ declineLabel: 'Decline'
59
+ };
60
+ const confirmDialog = (message, options) => {
61
+ return new Promise((resolve, _reject) => {
62
+ addDialog(Object.assign(Object.assign(Object.assign({ message }, defaultConfirmOptions), options), { isOpen: false, resolve }));
63
+ });
64
+ };
65
+ function addDialog(props) {
66
+ const body = document.getElementsByTagName('body')[0];
67
+ const div = document.createElement('div');
68
+ div.setAttribute('id', 'confirmDialog-container');
69
+ div.setAttribute('class', styles.ConfirmDialogContainer);
70
+ body.appendChild(div);
71
+ react_dom_1.default.render(react_1.default.createElement(ConfirmDialogComponent, Object.assign({}, props)), div);
72
+ }
73
+ function removeDialog() {
74
+ const div = document.getElementById('confirmDialog-container');
75
+ const body = document.getElementsByTagName('body')[0];
76
+ body.removeChild(div);
77
+ }
78
+ exports.default = confirmDialog;
@@ -0,0 +1,17 @@
1
+ import { IDialogProps } from '@blueprintjs/core';
2
+ import { FC } from 'react';
3
+ export interface DialogProps extends IDialogProps {
4
+ onSubmit?: () => void;
5
+ children: JSX.Element | JSX.Element[];
6
+ isOpen: boolean;
7
+ height?: number;
8
+ size?: 'sm' | 'md' | 'lg';
9
+ }
10
+ export declare const Wrapper: FC<DialogProps>;
11
+ export declare const Body: ({ children, className }: {
12
+ children: JSX.Element | JSX.Element[];
13
+ className?: string | undefined;
14
+ }) => JSX.Element;
15
+ export declare const Footer: ({ children }: {
16
+ children: JSX.Element | JSX.Element[];
17
+ }) => JSX.Element;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.Footer = exports.Body = exports.Wrapper = void 0;
26
+ const core_1 = require("@blueprintjs/core");
27
+ const classnames_1 = __importDefault(require("classnames"));
28
+ const react_1 = __importDefault(require("react"));
29
+ const style = __importStar(require("./style.module.scss"));
30
+ const Wrapper = (props) => {
31
+ let width = 500;
32
+ if (props.size === 'sm') {
33
+ width = 360;
34
+ }
35
+ else if (props.size === 'md') {
36
+ width = 700;
37
+ }
38
+ else if (props.size === 'lg') {
39
+ width = 900;
40
+ }
41
+ const onSubmit = (e) => {
42
+ var _a;
43
+ e.preventDefault();
44
+ (_a = props.onSubmit) === null || _a === void 0 ? void 0 : _a.call(props);
45
+ };
46
+ return (react_1.default.createElement(core_1.Dialog, Object.assign({ className: style.dialog, transitionDuration: 0, canOutsideClickClose: false, enforceFocus: false, style: { width, height: props.height } }, props), props.onSubmit ? (react_1.default.createElement("form", { className: style.form, onSubmit: onSubmit }, props.children)) : (props.children)));
47
+ };
48
+ exports.Wrapper = Wrapper;
49
+ const Body = ({ children, className }) => {
50
+ return react_1.default.createElement("div", { className: (0, classnames_1.default)(core_1.Classes.DIALOG_BODY, core_1.Classes.UI_TEXT, style.dialogBody, className) }, children);
51
+ };
52
+ exports.Body = Body;
53
+ const Footer = ({ children }) => {
54
+ return (react_1.default.createElement("div", { className: core_1.Classes.DIALOG_FOOTER },
55
+ react_1.default.createElement("div", { className: core_1.Classes.DIALOG_FOOTER_ACTIONS }, children)));
56
+ };
57
+ exports.Footer = Footer;
@@ -0,0 +1,21 @@
1
+ import { IconName } from '@blueprintjs/core';
2
+ import { FC } from 'react';
3
+ interface MoreOptionsProps {
4
+ show: boolean;
5
+ onToggle: (value: boolean) => void;
6
+ children?: any;
7
+ className?: string;
8
+ element?: JSX.Element;
9
+ items: MoreOptionsItems[];
10
+ }
11
+ export interface MoreOptionsItems {
12
+ icon?: IconName;
13
+ label: string;
14
+ className?: string;
15
+ selected?: boolean;
16
+ content?: JSX.Element;
17
+ action?: () => void;
18
+ type?: 'delete';
19
+ }
20
+ declare const MoreOptions: FC<MoreOptionsProps>;
21
+ export default MoreOptions;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const core_1 = require("@blueprintjs/core");
26
+ const classnames_1 = __importDefault(require("classnames"));
27
+ const react_1 = __importStar(require("react"));
28
+ const Overlay_1 = __importDefault(require("../Overlay"));
29
+ const style = __importStar(require("./style.module.scss"));
30
+ const MoreOptions = (props) => {
31
+ const { show, onToggle, className, items, element } = props;
32
+ const handleToggle = (e) => {
33
+ e.stopPropagation();
34
+ onToggle(!show);
35
+ };
36
+ const onAction = (e, action) => {
37
+ e.stopPropagation();
38
+ onToggle(false);
39
+ action();
40
+ };
41
+ return (react_1.default.createElement(react_1.Fragment, null,
42
+ !element && (react_1.default.createElement("button", { onClick: handleToggle, type: "button", className: (0, classnames_1.default)(style.moreBtn, 'more-options-btn', { [style.active]: show }) },
43
+ react_1.default.createElement("span", { className: style.moreBtnDots }))),
44
+ element,
45
+ show && (react_1.default.createElement("ul", { className: (0, classnames_1.default)(style.moreMenu, 'more-options-more-menu', className) }, items.map((item, index) => {
46
+ const { action, className, content, icon, label, type, selected } = item;
47
+ return (react_1.default.createElement("li", { key: index, className: className }, content ? (content) : (react_1.default.createElement(react_1.Fragment, null,
48
+ action && (react_1.default.createElement(core_1.Button, { icon: icon, minimal: true, className: (0, classnames_1.default)(style.moreMenuItem, {
49
+ [style.delete]: type === 'delete',
50
+ ['more-options-selected-option']: selected
51
+ }), onClick: (e) => onAction(e, action) },
52
+ label,
53
+ selected && react_1.default.createElement(core_1.Icon, { icon: "tick", iconSize: 12 }))),
54
+ !action && (react_1.default.createElement("span", { className: (0, classnames_1.default)(style.moreMenuItem, style.noHover, { [style.delete]: type === 'delete' }) },
55
+ react_1.default.createElement(core_1.Icon, { icon: icon, iconSize: 16 }),
56
+ label))))));
57
+ }))),
58
+ show && react_1.default.createElement(Overlay_1.default, { onClick: handleToggle })));
59
+ };
60
+ exports.default = MoreOptions;
@@ -0,0 +1,7 @@
1
+ import React, { FC } from 'react';
2
+ export interface OverlayProps {
3
+ onClick: (e: React.MouseEvent<HTMLElement, MouseEvent>) => void;
4
+ onContextMenu?: (e: React.MouseEvent<HTMLElement, MouseEvent>) => void;
5
+ }
6
+ declare const Overlay: FC<OverlayProps>;
7
+ export default Overlay;
@@ -18,12 +18,19 @@ var __importStar = (this && this.__importStar) || function (mod) {
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- const React = __importStar(require("react"));
23
- const Avatar = ({ name, avatarUrl, height, width }) => {
24
- return (React.createElement("div", { className: 'bpw-bot-avatar' },
25
- avatarUrl && React.createElement("img", { height: height, width: width, src: avatarUrl }),
26
- !avatarUrl && (React.createElement("svg", { width: width, height: width },
27
- React.createElement("text", { textAnchor: 'middle', x: '50%', y: '50%', dy: '0.35em', fill: '#ffffff', fontSize: 15 }, name && name[0])))));
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
28
23
  };
29
- exports.default = Avatar;
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const react_1 = __importDefault(require("react"));
26
+ const style = __importStar(require("./style.module.scss"));
27
+ const Overlay = ({ onClick, onContextMenu }) => (react_1.default.createElement("div", { onContextMenu: (e) => {
28
+ e.preventDefault();
29
+ e.persist();
30
+ if (!onContextMenu) {
31
+ onClick(e);
32
+ return;
33
+ }
34
+ onContextMenu(e);
35
+ }, className: style.overlay, onClick: onClick }));
36
+ exports.default = Overlay;
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+ interface ToolTipProps {
3
+ hoverOpenDelay?: number;
4
+ children: JSX.Element;
5
+ content?: string | JSX.Element;
6
+ position?: string;
7
+ childId?: string;
8
+ }
9
+ declare const ToolTip: FC<ToolTipProps>;
10
+ export default ToolTip;