@botpress/webchat 0.0.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Composer.d.ts +9 -11
- package/dist/components/Composer.js +3 -3
- package/dist/components/Container.d.ts +8 -7
- package/dist/components/Container.js +6 -25
- package/dist/components/ConversationList.d.ts +6 -3
- package/dist/components/ConversationList.js +6 -4
- package/dist/components/Header.js +3 -3
- package/dist/components/OverridableComponent.js +1 -1
- package/dist/components/VoiceRecorder.js +9 -9
- package/dist/components/common/BotInfo.d.ts +6 -3
- package/dist/components/common/BotInfo.js +4 -4
- package/dist/components/messages/InlineFeedback.js +2 -2
- package/dist/components/messages/Message.d.ts +6 -3
- package/dist/components/messages/Message.js +23 -98
- package/dist/components/messages/MessageGroup.js +4 -12
- package/dist/components/messages/MessageList.d.ts +6 -3
- package/dist/components/messages/MessageList.js +8 -8
- package/dist/core/api.d.ts +1 -0
- package/dist/core/api.js +26 -6
- package/dist/core/socket.d.ts +2 -0
- package/dist/core/socket.js +29 -6
- package/dist/fonts/roboto.d.ts +4 -0
- package/dist/fonts/roboto.js +9 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +15 -11
- package/dist/main.d.ts +9 -7
- package/dist/main.js +46 -27
- package/dist/store/composer.js +2 -2
- package/dist/store/index.d.ts +4 -4
- package/dist/store/index.js +36 -40
- package/dist/store/view.js +2 -2
- package/dist/translations/index.d.ts +1 -2
- package/dist/translations/index.js +11 -25
- package/dist/typings.d.ts +3 -1
- package/dist/utils.js +1 -1
- package/package.json +34 -13
- package/dist/components/Keyboard.d.ts +0 -22
- package/dist/components/Keyboard.js +0 -86
- package/dist/components/messages/renderer/Button.d.ts +0 -16
- package/dist/components/messages/renderer/Button.js +0 -66
- package/dist/components/messages/renderer/Carousel.d.ts +0 -21
- package/dist/components/messages/renderer/Carousel.js +0 -72
- package/dist/components/messages/renderer/Dropdown.d.ts +0 -3
- package/dist/components/messages/renderer/Dropdown.js +0 -76
- package/dist/components/messages/renderer/FileInput.d.ts +0 -9
- package/dist/components/messages/renderer/FileInput.js +0 -32
- package/dist/components/messages/renderer/FileMessage.d.ts +0 -3
- package/dist/components/messages/renderer/FileMessage.js +0 -53
- package/dist/components/messages/renderer/LoginPrompt.d.ts +0 -6
- package/dist/components/messages/renderer/LoginPrompt.js +0 -98
- package/dist/components/messages/renderer/QuickReplies.d.ts +0 -18
- package/dist/components/messages/renderer/QuickReplies.js +0 -73
- package/dist/components/messages/renderer/Text.d.ts +0 -11
- package/dist/components/messages/renderer/Text.js +0 -71
- package/dist/components/messages/renderer/VoiceMessage.d.ts +0 -5
- package/dist/components/messages/renderer/VoiceMessage.js +0 -50
- package/dist/components/messages/renderer/index.d.ts +0 -8
- package/dist/components/messages/renderer/index.js +0 -19
|
@@ -1,72 +0,0 @@
|
|
|
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
|
-
exports.Card = exports.Carousel = void 0;
|
|
7
|
-
const react_1 = __importDefault(require("react"));
|
|
8
|
-
const react_slick_1 = __importDefault(require("react-slick"));
|
|
9
|
-
class Carousel extends react_1.default.Component {
|
|
10
|
-
constructor() {
|
|
11
|
-
super(...arguments);
|
|
12
|
-
this.state = {
|
|
13
|
-
adjustedWidth: 0
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
componentDidMount() {
|
|
17
|
-
this.setState({ adjustedWidth: this.ref.offsetWidth - window.innerWidth });
|
|
18
|
-
}
|
|
19
|
-
renderCarousel() {
|
|
20
|
-
const carousel = this.props.carousel;
|
|
21
|
-
const elements = carousel.elements || [];
|
|
22
|
-
// Breakpoints must be adjusted since the carousel is based on the page width, and not its parent component
|
|
23
|
-
const adjustBreakpoint = (size) => size - this.state.adjustedWidth;
|
|
24
|
-
const defaultSettings = {
|
|
25
|
-
dots: false,
|
|
26
|
-
infinite: false,
|
|
27
|
-
responsive: [...Array(10)].map((_, i) => ({
|
|
28
|
-
breakpoint: adjustBreakpoint(550 + i * 524),
|
|
29
|
-
settings: { slidesToShow: i + 1 }
|
|
30
|
-
})),
|
|
31
|
-
slidesToScroll: 1,
|
|
32
|
-
autoplay: false,
|
|
33
|
-
centerMode: false,
|
|
34
|
-
arrows: elements.length > 1
|
|
35
|
-
};
|
|
36
|
-
const settings = Object.assign({}, defaultSettings, carousel.settings);
|
|
37
|
-
return (react_1.default.createElement(react_slick_1.default, Object.assign({}, settings), elements.map((el, idx) => (react_1.default.createElement(exports.Card, { element: el, key: idx, onSendData: this.props.onSendData })))));
|
|
38
|
-
}
|
|
39
|
-
render() {
|
|
40
|
-
return (react_1.default.createElement("div", { ref: (el) => (this.ref = el), style: Object.assign({ width: '100%' }, this.props.style) }, this.state.adjustedWidth && this.renderCarousel()));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
exports.Carousel = Carousel;
|
|
44
|
-
const Card = (props) => {
|
|
45
|
-
const { picture, title, subtitle, buttons } = props.element;
|
|
46
|
-
return (react_1.default.createElement("div", { className: 'bpw-card-container' },
|
|
47
|
-
picture && react_1.default.createElement("div", { className: 'bpw-card-picture', style: { backgroundImage: `url("${picture}")` } }),
|
|
48
|
-
react_1.default.createElement("div", null,
|
|
49
|
-
react_1.default.createElement("div", { className: 'bpw-card-header' },
|
|
50
|
-
react_1.default.createElement("div", { className: 'bpw-card-title' }, title),
|
|
51
|
-
subtitle && react_1.default.createElement("div", { className: 'bpw-card-subtitle' }, subtitle)),
|
|
52
|
-
react_1.default.createElement("div", { className: 'bpw-card-buttons' }, buttons.map((btn) => {
|
|
53
|
-
var _a, _b;
|
|
54
|
-
if (btn.url) {
|
|
55
|
-
return (react_1.default.createElement("a", { href: btn.url, key: `1-${btn.title}`, target: /^javascript:/.test(btn.url) ? '_self' : '_blank', className: 'bpw-card-action' },
|
|
56
|
-
btn.title || btn,
|
|
57
|
-
/^javascript:/.test(btn.url) ? null : react_1.default.createElement("i", { className: 'bpw-card-external-icon' })));
|
|
58
|
-
}
|
|
59
|
-
else if (btn.type === 'postback' || btn.payload) {
|
|
60
|
-
return (react_1.default.createElement("a", { onClick: (_a = props.onSendData) === null || _a === void 0 ? void 0 : _a.bind(this, { type: 'postback', payload: btn.payload }), key: `2-${btn.title}`, className: 'bpw-card-action' }, btn.title || btn));
|
|
61
|
-
}
|
|
62
|
-
else if (btn.type === 'say_something' || btn.text) {
|
|
63
|
-
return (react_1.default.createElement("a", { onClick: (_b = props.onSendData) === null || _b === void 0 ? void 0 : _b.bind(this, { type: 'say_something', text: btn.text }), key: `2-${btn.title}`, className: 'bpw-card-action' }, btn.title || btn));
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
return (react_1.default.createElement("a", { href: '#', key: `3-${btn.title}`, target: '_blank', className: 'bpw-card-action' },
|
|
67
|
-
btn.title || btn,
|
|
68
|
-
react_1.default.createElement("i", { className: 'bpw-card-external-icon' })));
|
|
69
|
-
}
|
|
70
|
-
})))));
|
|
71
|
-
};
|
|
72
|
-
exports.Card = Card;
|
|
@@ -1,76 +0,0 @@
|
|
|
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.Dropdown = void 0;
|
|
26
|
-
const react_1 = __importStar(require("react"));
|
|
27
|
-
const react_select_1 = __importDefault(require("react-select"));
|
|
28
|
-
const creatable_1 = __importDefault(require("react-select/creatable"));
|
|
29
|
-
const utils_1 = require("../../../utils");
|
|
30
|
-
const Keyboard = __importStar(require("../../Keyboard"));
|
|
31
|
-
const Dropdown = (props) => {
|
|
32
|
-
const [options, setOptions] = react_1.useState([]);
|
|
33
|
-
const [selectedOption, setSelectedOption] = react_1.useState();
|
|
34
|
-
react_1.useEffect(() => {
|
|
35
|
-
if (props.options) {
|
|
36
|
-
setOptions(props.options.map((x) => ({ value: x.value || x.label, label: x.label })));
|
|
37
|
-
}
|
|
38
|
-
}, []);
|
|
39
|
-
react_1.useEffect(() => {
|
|
40
|
-
if (!props.buttonText) {
|
|
41
|
-
sendChoice();
|
|
42
|
-
}
|
|
43
|
-
}, [selectedOption]);
|
|
44
|
-
const sendChoice = () => {
|
|
45
|
-
if (!selectedOption) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
let { label, value } = selectedOption;
|
|
49
|
-
if (selectedOption.length) {
|
|
50
|
-
label = selectedOption.map((x) => x.label).join(',');
|
|
51
|
-
value = selectedOption.map((x) => x.value || x.label).join(',');
|
|
52
|
-
}
|
|
53
|
-
props.onSendData && props.onSendData({ type: 'quick_reply', text: label, payload: value || label });
|
|
54
|
-
};
|
|
55
|
-
const renderSelect = (inKeyboard) => {
|
|
56
|
-
return (react_1.default.createElement("div", { className: inKeyboard && 'bpw-keyboard-quick_reply-dropdown' },
|
|
57
|
-
react_1.default.createElement("div", { style: { width: props.width || '100%', display: 'inline-block' } }, props.allowCreation ? (react_1.default.createElement(creatable_1.default, { value: selectedOption, onChange: setSelectedOption, options: options, placeholder: props.placeholderText, isMulti: props.allowMultiple, menuPlacement: 'top' })) : (react_1.default.createElement(react_select_1.default, { value: selectedOption, onChange: setSelectedOption, options: options, placeholder: props.placeholderText, isMulti: props.allowMultiple, menuPlacement: 'top' }))),
|
|
58
|
-
props.buttonText && (react_1.default.createElement("button", { className: "bpw-button", onClick: sendChoice }, props.buttonText))));
|
|
59
|
-
};
|
|
60
|
-
const shouldDisplay = props.isLastGroup && props.isLastOfGroup;
|
|
61
|
-
let message;
|
|
62
|
-
if (props.markdown) {
|
|
63
|
-
const html = utils_1.renderUnsafeHTML(props.message, props.escapeHTML);
|
|
64
|
-
message = react_1.default.createElement("div", { dangerouslySetInnerHTML: { __html: html } });
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
message = react_1.default.createElement("p", null, props.message);
|
|
68
|
-
}
|
|
69
|
-
if (props.displayInKeyboard && Keyboard.Default.isReady()) {
|
|
70
|
-
return (react_1.default.createElement(Keyboard.Prepend, { keyboard: renderSelect(true), visible: shouldDisplay }, message));
|
|
71
|
-
}
|
|
72
|
-
return (react_1.default.createElement("div", null,
|
|
73
|
-
message,
|
|
74
|
-
shouldDisplay && renderSelect(false)));
|
|
75
|
-
};
|
|
76
|
-
exports.Dropdown = Dropdown;
|
|
@@ -1,32 +0,0 @@
|
|
|
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
|
-
exports.FileInput = void 0;
|
|
7
|
-
const react_1 = __importDefault(require("react"));
|
|
8
|
-
class FileInput extends react_1.default.Component {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(...arguments);
|
|
11
|
-
this.state = {
|
|
12
|
-
value: ''
|
|
13
|
-
};
|
|
14
|
-
this.handleFilChanged = (e) => {
|
|
15
|
-
this.setState({ value: e.target.value.split(/(\\|\/)/g).pop() });
|
|
16
|
-
this.props.onFileChanged && this.props.onFileChanged(e);
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
render() {
|
|
20
|
-
return (react_1.default.createElement("div", { style: { position: 'relative' } },
|
|
21
|
-
react_1.default.createElement("input", { type: 'file', name: this.props.name, className: this.props.className, onChange: this.handleFilChanged, accept: this.props.accept, style: {
|
|
22
|
-
position: 'absolute',
|
|
23
|
-
top: 0,
|
|
24
|
-
left: 0,
|
|
25
|
-
opacity: 0,
|
|
26
|
-
width: '100%',
|
|
27
|
-
zIndex: 1
|
|
28
|
-
} }),
|
|
29
|
-
react_1.default.createElement("input", { type: 'text', tabIndex: -1, name: this.props.name + '_filename', className: this.props.className, onChange: () => { }, placeholder: this.props.placeholder, disabled: this.props.disabled, style: { position: 'relative', zIndex: -1 } })));
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
exports.FileInput = FileInput;
|
|
@@ -1,53 +0,0 @@
|
|
|
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
|
-
exports.FileMessage = void 0;
|
|
7
|
-
const lite_1 = __importDefault(require("mime/lite"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const react_1 = __importDefault(require("react"));
|
|
10
|
-
const Text_1 = require("./Text");
|
|
11
|
-
const FileMessage = (props) => {
|
|
12
|
-
if (!props.file) {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
const { url, title, storage, text } = props.file;
|
|
16
|
-
let extension = '';
|
|
17
|
-
try {
|
|
18
|
-
const validUrl = new URL(url);
|
|
19
|
-
extension = validUrl.pathname;
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
// Try using path.extname since url might be relative.
|
|
23
|
-
extension = path_1.default.extname(url);
|
|
24
|
-
}
|
|
25
|
-
const mime = lite_1.default.getType(extension);
|
|
26
|
-
if (text) {
|
|
27
|
-
return react_1.default.createElement(Text_1.Text, { text: text, markdown: true, escapeHTML: props.escapeTextHTML });
|
|
28
|
-
}
|
|
29
|
-
if (storage === 'local') {
|
|
30
|
-
return (react_1.default.createElement("div", { className: 'bpw-file-message' },
|
|
31
|
-
react_1.default.createElement("div", null,
|
|
32
|
-
title,
|
|
33
|
-
" (local)")));
|
|
34
|
-
}
|
|
35
|
-
if (mime.includes('image/')) {
|
|
36
|
-
return (react_1.default.createElement("a", { href: url, target: '_blank' },
|
|
37
|
-
react_1.default.createElement("img", { src: url, title: title })));
|
|
38
|
-
}
|
|
39
|
-
else if (mime.includes('audio/')) {
|
|
40
|
-
return (react_1.default.createElement("audio", { controls: true },
|
|
41
|
-
react_1.default.createElement("source", { src: url, type: mime })));
|
|
42
|
-
}
|
|
43
|
-
else if (mime.includes('video/')) {
|
|
44
|
-
return (react_1.default.createElement("video", { controls: true },
|
|
45
|
-
react_1.default.createElement("source", { src: url, type: mime })));
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
return (react_1.default.createElement("div", null,
|
|
49
|
-
react_1.default.createElement("span", null, "File: "),
|
|
50
|
-
react_1.default.createElement("a", { href: url, target: '_blank' }, title || url)));
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
exports.FileMessage = FileMessage;
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { InjectedIntlProps } from 'react-intl';
|
|
3
|
-
import { Renderer } from '../../../typings';
|
|
4
|
-
export declare const LoginPrompt: React.ComponentClass<Pick<Renderer.Message, keyof Renderer.Message>, any> & {
|
|
5
|
-
WrappedComponent: React.ComponentType<Renderer.Message & InjectedIntlProps>;
|
|
6
|
-
};
|
|
@@ -1,98 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.LoginPrompt = void 0;
|
|
23
|
-
const react_1 = __importStar(require("react"));
|
|
24
|
-
const react_intl_1 = require("react-intl");
|
|
25
|
-
class LoginPromptClass extends react_1.Component {
|
|
26
|
-
constructor() {
|
|
27
|
-
super(...arguments);
|
|
28
|
-
this.state = {
|
|
29
|
-
username: '',
|
|
30
|
-
password: ''
|
|
31
|
-
};
|
|
32
|
-
this.handleInputChanged = (event) => this.setState({ [event.target.name]: event.target.value });
|
|
33
|
-
this.handleFormSubmit = (event) => {
|
|
34
|
-
var _a, _b;
|
|
35
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
36
|
-
(_b = (_a = this.props).onSendData) === null || _b === void 0 ? void 0 : _b.call(_a, {
|
|
37
|
-
type: 'login_prompt',
|
|
38
|
-
text: 'Provided login information',
|
|
39
|
-
username: this.state.username,
|
|
40
|
-
password: this.state.password,
|
|
41
|
-
sensitive: ['password']
|
|
42
|
-
});
|
|
43
|
-
event.preventDefault();
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
render_bot_active() {
|
|
47
|
-
const userName = this.props.intl.formatMessage({
|
|
48
|
-
id: 'loginForm.userName',
|
|
49
|
-
defaultMessage: 'Username'
|
|
50
|
-
});
|
|
51
|
-
const password = this.props.intl.formatMessage({
|
|
52
|
-
id: 'loginForm.password',
|
|
53
|
-
defaultMessage: 'Password'
|
|
54
|
-
});
|
|
55
|
-
const submit = this.props.intl.formatMessage({
|
|
56
|
-
id: 'loginForm.submit',
|
|
57
|
-
defaultMessage: 'Submit'
|
|
58
|
-
});
|
|
59
|
-
return (react_1.default.createElement("form", { className: 'bpw-form-container', onSubmit: this.handleFormSubmit },
|
|
60
|
-
react_1.default.createElement("label", null,
|
|
61
|
-
react_1.default.createElement("input", { id: "login_username", type: "input", name: "username", placeholder: userName, className: "bpw-input", onChange: this.handleInputChanged })),
|
|
62
|
-
react_1.default.createElement("label", null,
|
|
63
|
-
react_1.default.createElement("input", { id: "login_password", type: "password", name: "password", placeholder: password, className: "bpw-input", onChange: this.handleInputChanged })),
|
|
64
|
-
react_1.default.createElement("input", { id: "login_submit", className: 'bpw-button-alt', type: "submit", value: submit })));
|
|
65
|
-
}
|
|
66
|
-
render_bot_past() {
|
|
67
|
-
const formTitle = this.props.intl.formatMessage({
|
|
68
|
-
id: 'loginForm.formTitle',
|
|
69
|
-
defaultMessage: 'Login form'
|
|
70
|
-
});
|
|
71
|
-
return (react_1.default.createElement("div", { className: 'bpw-special-action' },
|
|
72
|
-
react_1.default.createElement("p", null,
|
|
73
|
-
"* ",
|
|
74
|
-
formTitle,
|
|
75
|
-
" *")));
|
|
76
|
-
}
|
|
77
|
-
render_user() {
|
|
78
|
-
const providedCredentials = this.props.intl.formatMessage({
|
|
79
|
-
id: 'loginForm.providedCredentials',
|
|
80
|
-
defaultMessage: 'Login form'
|
|
81
|
-
});
|
|
82
|
-
return (react_1.default.createElement("div", { className: 'bpw-special-action' },
|
|
83
|
-
react_1.default.createElement("p", null,
|
|
84
|
-
"* ",
|
|
85
|
-
providedCredentials,
|
|
86
|
-
" *")));
|
|
87
|
-
}
|
|
88
|
-
render() {
|
|
89
|
-
if (!this.props.isBotMessage) {
|
|
90
|
-
return this.render_user();
|
|
91
|
-
}
|
|
92
|
-
if (this.props.isLastMessage) {
|
|
93
|
-
return this.render_bot_active();
|
|
94
|
-
}
|
|
95
|
-
return this.render_bot_past();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
exports.LoginPrompt = react_intl_1.injectIntl(LoginPromptClass);
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Component } from 'react';
|
|
2
|
-
import { Renderer } from '../../../typings';
|
|
3
|
-
/**
|
|
4
|
-
* Displays an array of button, and handle when they are clicked
|
|
5
|
-
*
|
|
6
|
-
* @param {object} buttons The list of buttons to display (object with a label and a payload)
|
|
7
|
-
* @param {function} onSendData Called with the required payload to answer the quick reply
|
|
8
|
-
* @param {function} onFileUpload This is called when a file is uploaded
|
|
9
|
-
*
|
|
10
|
-
* @return onSendData is called with the reply
|
|
11
|
-
*/
|
|
12
|
-
export declare class QuickReplies extends Component<Renderer.QuickReply> {
|
|
13
|
-
componentDidMount(): void;
|
|
14
|
-
componentWillUnmount(): void;
|
|
15
|
-
handleButtonClicked: (title: string, payload: any) => void;
|
|
16
|
-
renderKeyboard(buttons: Renderer.QuickReplyButton[]): JSX.Element[];
|
|
17
|
-
render(): JSX.Element;
|
|
18
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.QuickReplies = void 0;
|
|
23
|
-
const react_1 = __importStar(require("react"));
|
|
24
|
-
const Keyboard = __importStar(require("../../Keyboard"));
|
|
25
|
-
const Button_1 = require("./Button");
|
|
26
|
-
/**
|
|
27
|
-
* Displays an array of button, and handle when they are clicked
|
|
28
|
-
*
|
|
29
|
-
* @param {object} buttons The list of buttons to display (object with a label and a payload)
|
|
30
|
-
* @param {function} onSendData Called with the required payload to answer the quick reply
|
|
31
|
-
* @param {function} onFileUpload This is called when a file is uploaded
|
|
32
|
-
*
|
|
33
|
-
* @return onSendData is called with the reply
|
|
34
|
-
*/
|
|
35
|
-
class QuickReplies extends react_1.Component {
|
|
36
|
-
constructor() {
|
|
37
|
-
super(...arguments);
|
|
38
|
-
this.handleButtonClicked = (title, payload) => {
|
|
39
|
-
var _a, _b;
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
41
|
-
(_b = (_a = this.props).onSendData) === null || _b === void 0 ? void 0 : _b.call(_a, {
|
|
42
|
-
type: 'quick_reply',
|
|
43
|
-
text: title,
|
|
44
|
-
payload
|
|
45
|
-
});
|
|
46
|
-
this.props.store.composer.setLocked(false);
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
componentDidMount() {
|
|
50
|
-
this.props.isLastGroup &&
|
|
51
|
-
this.props.isLastOfGroup &&
|
|
52
|
-
this.props.store.composer.setLocked(this.props.disableFreeText);
|
|
53
|
-
}
|
|
54
|
-
componentWillUnmount() {
|
|
55
|
-
this.props.store.composer.setLocked(false);
|
|
56
|
-
}
|
|
57
|
-
renderKeyboard(buttons) {
|
|
58
|
-
return buttons.map((btn, idx) => {
|
|
59
|
-
if (Array.isArray(btn)) {
|
|
60
|
-
return react_1.default.createElement("div", null, this.renderKeyboard(btn));
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
return (react_1.default.createElement(Button_1.Button, { key: idx, label: btn.label || btn.title, payload: btn.payload, preventDoubleClick: !btn.allowMultipleClick, onButtonClick: this.handleButtonClicked, onFileUpload: this.props.onFileUpload }));
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
render() {
|
|
68
|
-
const buttons = this.props.buttons || this.props.quick_replies;
|
|
69
|
-
const kbd = react_1.default.createElement("div", { className: 'bpw-keyboard-quick_reply' }, buttons && this.renderKeyboard(buttons));
|
|
70
|
-
return (react_1.default.createElement(Keyboard.Prepend, { keyboard: kbd, visible: this.props.isLastGroup && this.props.isLastOfGroup }, this.props.children));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
exports.QuickReplies = QuickReplies;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { Renderer } from '../../../typings';
|
|
3
|
-
/**
|
|
4
|
-
* A simple text element with optional markdown
|
|
5
|
-
* @param {boolean} markdown Enable markdown parsing for the given text
|
|
6
|
-
* @param {string} text The text to display
|
|
7
|
-
* @param {boolean} escapeHTML Prevent unsafe HTML rendering when markdown is enabled
|
|
8
|
-
* @param {number} maxLength Enables show more button when text overflows limit
|
|
9
|
-
*/
|
|
10
|
-
export declare const Text: (props: Renderer.Text) => JSX.Element;
|
|
11
|
-
export default Text;
|
|
@@ -1,71 +0,0 @@
|
|
|
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.Text = void 0;
|
|
26
|
-
const html_truncate_1 = __importDefault(require("html-truncate"));
|
|
27
|
-
const react_1 = __importStar(require("react"));
|
|
28
|
-
// @ts-ignore
|
|
29
|
-
const react_linkify_1 = __importDefault(require("react-linkify"));
|
|
30
|
-
const utils_1 = require("../../../utils");
|
|
31
|
-
/**
|
|
32
|
-
* A simple text element with optional markdown
|
|
33
|
-
* @param {boolean} markdown Enable markdown parsing for the given text
|
|
34
|
-
* @param {string} text The text to display
|
|
35
|
-
* @param {boolean} escapeHTML Prevent unsafe HTML rendering when markdown is enabled
|
|
36
|
-
* @param {number} maxLength Enables show more button when text overflows limit
|
|
37
|
-
*/
|
|
38
|
-
const Text = (props) => {
|
|
39
|
-
const [showMore, setShowMore] = react_1.useState(false);
|
|
40
|
-
const { maxLength, markdown, escapeHTML, intl, text } = props;
|
|
41
|
-
let hasShowMore;
|
|
42
|
-
if (intl && maxLength && text.length > maxLength) {
|
|
43
|
-
hasShowMore = true;
|
|
44
|
-
}
|
|
45
|
-
const truncateIfRequired = (message) => {
|
|
46
|
-
return hasShowMore && !showMore ? html_truncate_1.default(message, maxLength) : message;
|
|
47
|
-
};
|
|
48
|
-
let message;
|
|
49
|
-
if (markdown) {
|
|
50
|
-
const html = utils_1.renderUnsafeHTML(text, escapeHTML);
|
|
51
|
-
message = react_1.default.createElement("div", { dangerouslySetInnerHTML: { __html: truncateIfRequired(html) } });
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
message = react_1.default.createElement("p", null, truncateIfRequired(text));
|
|
55
|
-
}
|
|
56
|
-
return (react_1.default.createElement(react_linkify_1.default, { properties: { target: '_blank' } },
|
|
57
|
-
react_1.default.createElement("div", null, message),
|
|
58
|
-
hasShowMore && (react_1.default.createElement("button", { type: "button", onClick: (e) => setShowMore(!showMore), className: "bpw-message-read-more" },
|
|
59
|
-
showMore &&
|
|
60
|
-
intl.formatMessage({
|
|
61
|
-
id: 'messages.showLess',
|
|
62
|
-
defaultMessage: 'Show Less'
|
|
63
|
-
}),
|
|
64
|
-
!showMore &&
|
|
65
|
-
intl.formatMessage({
|
|
66
|
-
id: 'messages.readMore',
|
|
67
|
-
defaultMessage: 'Read More'
|
|
68
|
-
})))));
|
|
69
|
-
};
|
|
70
|
-
exports.Text = Text;
|
|
71
|
-
exports.default = exports.Text;
|
|
@@ -1,50 +0,0 @@
|
|
|
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.VoiceMessage = void 0;
|
|
26
|
-
const lite_1 = __importDefault(require("mime/lite"));
|
|
27
|
-
const path_1 = __importDefault(require("path"));
|
|
28
|
-
const react_1 = __importStar(require("react"));
|
|
29
|
-
const VoiceMessage = (props) => {
|
|
30
|
-
const audioRef = react_1.useRef(null);
|
|
31
|
-
react_1.useEffect(() => {
|
|
32
|
-
audioRef.current.addEventListener('ended', props.onAudioEnded);
|
|
33
|
-
return () => audioRef.current.removeEventListener('ended', props.onAudioEnded);
|
|
34
|
-
}, []);
|
|
35
|
-
react_1.useEffect(() => {
|
|
36
|
-
// Simulate an autoplay by playing every voice messages of a single message group one after the other
|
|
37
|
-
if (props.file.autoPlay && props.shouldPlay) {
|
|
38
|
-
void audioRef.current.play();
|
|
39
|
-
}
|
|
40
|
-
}, [props.file.autoPlay, props.shouldPlay]);
|
|
41
|
-
if (!props.file) {
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
const { audio } = props.file;
|
|
45
|
-
const extension = path_1.default.extname(audio);
|
|
46
|
-
const mime = lite_1.default.getType(extension);
|
|
47
|
-
return (react_1.default.createElement("audio", { controls: true, ref: audioRef },
|
|
48
|
-
react_1.default.createElement("source", { src: audio, type: mime })));
|
|
49
|
-
};
|
|
50
|
-
exports.VoiceMessage = VoiceMessage;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { QuickReplies } from './QuickReplies';
|
|
2
|
-
export { FileMessage } from './FileMessage';
|
|
3
|
-
export { VoiceMessage } from './VoiceMessage';
|
|
4
|
-
export { FileInput } from './FileInput';
|
|
5
|
-
export { Carousel } from './Carousel';
|
|
6
|
-
export { LoginPrompt } from './LoginPrompt';
|
|
7
|
-
export { Text } from './Text';
|
|
8
|
-
export { Button } from './Button';
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Button = exports.Text = exports.LoginPrompt = exports.Carousel = exports.FileInput = exports.VoiceMessage = exports.FileMessage = exports.QuickReplies = void 0;
|
|
4
|
-
var QuickReplies_1 = require("./QuickReplies");
|
|
5
|
-
Object.defineProperty(exports, "QuickReplies", { enumerable: true, get: function () { return QuickReplies_1.QuickReplies; } });
|
|
6
|
-
var FileMessage_1 = require("./FileMessage");
|
|
7
|
-
Object.defineProperty(exports, "FileMessage", { enumerable: true, get: function () { return FileMessage_1.FileMessage; } });
|
|
8
|
-
var VoiceMessage_1 = require("./VoiceMessage");
|
|
9
|
-
Object.defineProperty(exports, "VoiceMessage", { enumerable: true, get: function () { return VoiceMessage_1.VoiceMessage; } });
|
|
10
|
-
var FileInput_1 = require("./FileInput");
|
|
11
|
-
Object.defineProperty(exports, "FileInput", { enumerable: true, get: function () { return FileInput_1.FileInput; } });
|
|
12
|
-
var Carousel_1 = require("./Carousel");
|
|
13
|
-
Object.defineProperty(exports, "Carousel", { enumerable: true, get: function () { return Carousel_1.Carousel; } });
|
|
14
|
-
var LoginPrompt_1 = require("./LoginPrompt");
|
|
15
|
-
Object.defineProperty(exports, "LoginPrompt", { enumerable: true, get: function () { return LoginPrompt_1.LoginPrompt; } });
|
|
16
|
-
var Text_1 = require("./Text");
|
|
17
|
-
Object.defineProperty(exports, "Text", { enumerable: true, get: function () { return Text_1.Text; } });
|
|
18
|
-
var Button_1 = require("./Button");
|
|
19
|
-
Object.defineProperty(exports, "Button", { enumerable: true, get: function () { return Button_1.Button; } });
|