@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.
Files changed (58) hide show
  1. package/dist/components/Composer.d.ts +9 -11
  2. package/dist/components/Composer.js +3 -3
  3. package/dist/components/Container.d.ts +8 -7
  4. package/dist/components/Container.js +6 -25
  5. package/dist/components/ConversationList.d.ts +6 -3
  6. package/dist/components/ConversationList.js +6 -4
  7. package/dist/components/Header.js +3 -3
  8. package/dist/components/OverridableComponent.js +1 -1
  9. package/dist/components/VoiceRecorder.js +9 -9
  10. package/dist/components/common/BotInfo.d.ts +6 -3
  11. package/dist/components/common/BotInfo.js +4 -4
  12. package/dist/components/messages/InlineFeedback.js +2 -2
  13. package/dist/components/messages/Message.d.ts +6 -3
  14. package/dist/components/messages/Message.js +23 -98
  15. package/dist/components/messages/MessageGroup.js +4 -12
  16. package/dist/components/messages/MessageList.d.ts +6 -3
  17. package/dist/components/messages/MessageList.js +8 -8
  18. package/dist/core/api.d.ts +1 -0
  19. package/dist/core/api.js +26 -6
  20. package/dist/core/socket.d.ts +2 -0
  21. package/dist/core/socket.js +29 -6
  22. package/dist/fonts/roboto.d.ts +4 -0
  23. package/dist/fonts/roboto.js +9 -0
  24. package/dist/index.d.ts +0 -1
  25. package/dist/index.js +15 -11
  26. package/dist/main.d.ts +9 -7
  27. package/dist/main.js +46 -27
  28. package/dist/store/composer.js +2 -2
  29. package/dist/store/index.d.ts +4 -4
  30. package/dist/store/index.js +36 -40
  31. package/dist/store/view.js +2 -2
  32. package/dist/translations/index.d.ts +1 -2
  33. package/dist/translations/index.js +11 -25
  34. package/dist/typings.d.ts +3 -1
  35. package/dist/utils.js +1 -1
  36. package/package.json +34 -13
  37. package/dist/components/Keyboard.d.ts +0 -22
  38. package/dist/components/Keyboard.js +0 -86
  39. package/dist/components/messages/renderer/Button.d.ts +0 -16
  40. package/dist/components/messages/renderer/Button.js +0 -66
  41. package/dist/components/messages/renderer/Carousel.d.ts +0 -21
  42. package/dist/components/messages/renderer/Carousel.js +0 -72
  43. package/dist/components/messages/renderer/Dropdown.d.ts +0 -3
  44. package/dist/components/messages/renderer/Dropdown.js +0 -76
  45. package/dist/components/messages/renderer/FileInput.d.ts +0 -9
  46. package/dist/components/messages/renderer/FileInput.js +0 -32
  47. package/dist/components/messages/renderer/FileMessage.d.ts +0 -3
  48. package/dist/components/messages/renderer/FileMessage.js +0 -53
  49. package/dist/components/messages/renderer/LoginPrompt.d.ts +0 -6
  50. package/dist/components/messages/renderer/LoginPrompt.js +0 -98
  51. package/dist/components/messages/renderer/QuickReplies.d.ts +0 -18
  52. package/dist/components/messages/renderer/QuickReplies.js +0 -73
  53. package/dist/components/messages/renderer/Text.d.ts +0 -11
  54. package/dist/components/messages/renderer/Text.js +0 -71
  55. package/dist/components/messages/renderer/VoiceMessage.d.ts +0 -5
  56. package/dist/components/messages/renderer/VoiceMessage.js +0 -50
  57. package/dist/components/messages/renderer/index.d.ts +0 -8
  58. 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,3 +0,0 @@
1
- /// <reference types="react" />
2
- import { Renderer } from '../../../typings';
3
- export declare const Dropdown: (props: Renderer.Dropdown) => JSX.Element;
@@ -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,9 +0,0 @@
1
- import React from 'react';
2
- import { Renderer } from '../../../typings';
3
- export declare class FileInput extends React.Component<Renderer.FileInput> {
4
- state: {
5
- value: string;
6
- };
7
- handleFilChanged: (e: any) => void;
8
- render(): JSX.Element;
9
- }
@@ -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,3 +0,0 @@
1
- /// <reference types="react" />
2
- import { Renderer } from '../../../typings';
3
- export declare const FileMessage: (props: Renderer.FileMessage) => JSX.Element | null;
@@ -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,5 +0,0 @@
1
- import { FC } from 'react';
2
- import { Renderer } from '../../../typings';
3
- declare type Props = Renderer.VoiceMessage;
4
- export declare const VoiceMessage: FC<Props>;
5
- export {};
@@ -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; } });