UNPKG

botframework-webchat-component

Version:
160 lines (124 loc) 16.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSendBoxSpeechInterimsVisible = useSendBoxSpeechInterimsVisible; exports.default = void 0; var _botframeworkWebchatCore = require("botframework-webchat-core"); var _botframeworkWebchatApi = require("botframework-webchat-api"); var _classnames = _interopRequireDefault(require("classnames")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireDefault(require("react")); var _DictationInterims = _interopRequireDefault(require("./SendBox/DictationInterims")); var _MicrophoneButton = _interopRequireDefault(require("./SendBox/MicrophoneButton")); var _SendButton = _interopRequireDefault(require("./SendBox/SendButton")); var _SuggestedActions = _interopRequireDefault(require("./SendBox/SuggestedActions")); var _TextBox = _interopRequireDefault(require("./SendBox/TextBox")); var _UploadButton = _interopRequireDefault(require("./SendBox/UploadButton")); var _useStyleSet3 = _interopRequireDefault(require("./hooks/useStyleSet")); var _useStyleToEmotionObject = _interopRequireDefault(require("./hooks/internal/useStyleToEmotionObject")); var _useWebSpeechPonyfill4 = _interopRequireDefault(require("./hooks/useWebSpeechPonyfill")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } var _Constants$DictateSta = _botframeworkWebchatCore.Constants.DictateState, DICTATING = _Constants$DictateSta.DICTATING, STARTING = _Constants$DictateSta.STARTING; var useActivities = _botframeworkWebchatApi.hooks.useActivities, useDirection = _botframeworkWebchatApi.hooks.useDirection, useDictateState = _botframeworkWebchatApi.hooks.useDictateState, useStyleOptions = _botframeworkWebchatApi.hooks.useStyleOptions; var ROOT_STYLE = { '&.webchat__send-box': { '& .webchat__send-box__button': { flexShrink: 0 }, '& .webchat__send-box__dictation-interims': { flex: 10000 }, '& .webchat__send-box__main': { display: 'flex' }, '& .webchat__send-box__microphone-button': { flex: 1 }, '& .webchat__send-box__text-box': { flex: 10000 } } }; // TODO: [P3] We should consider exposing core/src/definitions and use it instead function activityIsSpeakingOrQueuedToSpeak(_ref) { var _ref$channelData = _ref.channelData; _ref$channelData = _ref$channelData === void 0 ? {} : _ref$channelData; var speak = _ref$channelData.speak; return !!speak; } function useSendBoxSpeechInterimsVisible() { var _useActivities = useActivities(), _useActivities2 = _slicedToArray(_useActivities, 1), activities = _useActivities2[0]; var _useDictateState = useDictateState(), _useDictateState2 = _slicedToArray(_useDictateState, 1), dictateState = _useDictateState2[0]; return [(dictateState === STARTING || dictateState === DICTATING) && !activities.filter(activityIsSpeakingOrQueuedToSpeak).length]; } var BasicSendBox = function BasicSendBox(_ref2) { var className = _ref2.className; var _useStyleOptions = useStyleOptions(), _useStyleOptions2 = _slicedToArray(_useStyleOptions, 1), _useStyleOptions2$ = _useStyleOptions2[0], hideUploadButton = _useStyleOptions2$.hideUploadButton, sendBoxButtonAlignment = _useStyleOptions2$.sendBoxButtonAlignment; var _useStyleSet = (0, _useStyleSet3.default)(), _useStyleSet2 = _slicedToArray(_useStyleSet, 1), sendBoxStyleSet = _useStyleSet2[0].sendBox; var _useWebSpeechPonyfill = (0, _useWebSpeechPonyfill4.default)(), _useWebSpeechPonyfill2 = _slicedToArray(_useWebSpeechPonyfill, 1), _useWebSpeechPonyfill3 = _useWebSpeechPonyfill2[0]; _useWebSpeechPonyfill3 = _useWebSpeechPonyfill3 === void 0 ? {} : _useWebSpeechPonyfill3; var SpeechRecognition = _useWebSpeechPonyfill3.SpeechRecognition; var _useDirection = useDirection(), _useDirection2 = _slicedToArray(_useDirection, 1), direction = _useDirection2[0]; var _useSendBoxSpeechInte = useSendBoxSpeechInterimsVisible(), _useSendBoxSpeechInte2 = _slicedToArray(_useSendBoxSpeechInte, 1), speechInterimsVisible = _useSendBoxSpeechInte2[0]; var styleToEmotionObject = (0, _useStyleToEmotionObject.default)(); var rootClassName = styleToEmotionObject(ROOT_STYLE) + ''; var supportSpeechRecognition = !!SpeechRecognition; var buttonClassName = (0, _classnames.default)('webchat__send-box__button', { 'webchat__send-box__button--align-bottom': sendBoxButtonAlignment === 'bottom', 'webchat__send-box__button--align-stretch': sendBoxButtonAlignment !== 'bottom' && sendBoxButtonAlignment !== 'top', 'webchat__send-box__button--align-top': sendBoxButtonAlignment === 'top' }); return /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)('webchat__send-box', sendBoxStyleSet + '', rootClassName + '', (className || '') + ''), dir: direction, role: "form" }, /*#__PURE__*/_react.default.createElement(_SuggestedActions.default, null), /*#__PURE__*/_react.default.createElement("div", { className: "webchat__send-box__main" }, !hideUploadButton && /*#__PURE__*/_react.default.createElement(_UploadButton.default, { className: buttonClassName }), speechInterimsVisible ? /*#__PURE__*/_react.default.createElement(_DictationInterims.default, { className: "webchat__send-box__dictation-interims" }) : /*#__PURE__*/_react.default.createElement(_TextBox.default, { className: "webchat__send-box__text-box" }), supportSpeechRecognition ? /*#__PURE__*/_react.default.createElement(_MicrophoneButton.default, { className: (0, _classnames.default)(buttonClassName, 'webchat__send-box__microphone-button') }) : /*#__PURE__*/_react.default.createElement(_SendButton.default, { className: buttonClassName }))); }; BasicSendBox.defaultProps = { className: '' }; BasicSendBox.propTypes = { className: _propTypes.default.string }; var _default = BasicSendBox; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1NlbmRCb3guanMiXSwibmFtZXMiOlsiQ29uc3RhbnRzIiwiRGljdGF0ZVN0YXRlIiwiRElDVEFUSU5HIiwiU1RBUlRJTkciLCJ1c2VBY3Rpdml0aWVzIiwiaG9va3MiLCJ1c2VEaXJlY3Rpb24iLCJ1c2VEaWN0YXRlU3RhdGUiLCJ1c2VTdHlsZU9wdGlvbnMiLCJST09UX1NUWUxFIiwiZmxleFNocmluayIsImZsZXgiLCJkaXNwbGF5IiwiYWN0aXZpdHlJc1NwZWFraW5nT3JRdWV1ZWRUb1NwZWFrIiwiY2hhbm5lbERhdGEiLCJzcGVhayIsInVzZVNlbmRCb3hTcGVlY2hJbnRlcmltc1Zpc2libGUiLCJhY3Rpdml0aWVzIiwiZGljdGF0ZVN0YXRlIiwiZmlsdGVyIiwibGVuZ3RoIiwiQmFzaWNTZW5kQm94IiwiY2xhc3NOYW1lIiwiaGlkZVVwbG9hZEJ1dHRvbiIsInNlbmRCb3hCdXR0b25BbGlnbm1lbnQiLCJzZW5kQm94U3R5bGVTZXQiLCJzZW5kQm94IiwiU3BlZWNoUmVjb2duaXRpb24iLCJkaXJlY3Rpb24iLCJzcGVlY2hJbnRlcmltc1Zpc2libGUiLCJzdHlsZVRvRW1vdGlvbk9iamVjdCIsInJvb3RDbGFzc05hbWUiLCJzdXBwb3J0U3BlZWNoUmVjb2duaXRpb24iLCJidXR0b25DbGFzc05hbWUiLCJkZWZhdWx0UHJvcHMiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBSUlBLGtDLENBREZDLFk7SUFBZ0JDLFMseUJBQUFBLFM7SUFBV0MsUSx5QkFBQUEsUTtJQUdyQkMsYSxHQUFrRUMsNkIsQ0FBbEVELGE7SUFBZUUsWSxHQUFtREQsNkIsQ0FBbkRDLFk7SUFBY0MsZSxHQUFxQ0YsNkIsQ0FB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QW5CLElBTEosRUFPR0csd0JBQXdCLGdCQUN2Qiw2QkFBQyx5QkFBRDtBQUFrQixJQUFBLFNBQVMsRUFBRSx5QkFBV0MsZUFBWCxFQUE0QixzQ0FBNUI7QUFBN0IsSUFEdUIsZ0JBR3ZCLDZCQUFDLG1CQUFEO0FBQVksSUFBQSxTQUFTLEVBQUVBO0FBQXZCLElBVkosQ0FORixDQURGO0FBc0JELENBeENEOztBQTBDQVosWUFBWSxDQUFDYSxZQUFiLEdBQTRCO0FBQzFCWixFQUFBQSxTQUFTLEVBQUU7QUFEZSxDQUE1QjtBQUlBRCxZQUFZLENBQUNjLFNBQWIsR0FBeUI7QUFDdkJiLEVBQUFBLFNBQVMsRUFBRWMsbUJBQVVDO0FBREUsQ0FBekI7ZUFJZWhCLFkiLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWNvcmUnO1xuaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IERpY3RhdGlvbkludGVyaW1zIGZyb20gJy4vU2VuZEJveC9EaWN0YXRpb25JbnRlcmltcyc7XG5pbXBvcnQgTWljcm9waG9uZUJ1dHRvbiBmcm9tICcuL1NlbmRCb3gvTWljcm9waG9uZUJ1dHRvbic7XG5pbXBvcnQgU2VuZEJ1dHRvbiBmcm9tICcuL1NlbmRCb3gvU2VuZEJ1dHRvbic7XG5pbXBvcnQgU3VnZ2VzdGVkQWN0aW9ucyBmcm9tICcuL1NlbmRCb3gvU3VnZ2VzdGVkQWN0aW9ucyc7XG5pbXBvcnQgVGV4dEJveCBmcm9tICcuL1NlbmRCb3gvVGV4dEJveCc7XG5pbXBvcnQgVXBsb2FkQnV0dG9uIGZyb20gJy4vU2VuZEJveC9VcGxvYWRCdXR0b24nO1xuaW1wb3J0IHVzZVN0eWxlU2V0IGZyb20gJy4vaG9va3MvdXNlU3R5bGVTZXQnO1xuaW1wb3J0IHVzZVN0eWxlVG9FbW90aW9uT2JqZWN0IGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QnO1xuaW1wb3J0IHVzZVdlYlNwZWVjaFBvbnlmaWxsIGZyb20gJy4vaG9va3MvdXNlV2ViU3BlZWNoUG9ueWZpbGwnO1xuXG5jb25zdCB7XG4gIERpY3RhdGVTdGF0ZTogeyBESUNUQVRJTkcsIFNUQVJUSU5HIH1cbn0gPSBDb25zdGFudHM7XG5cbmNvbnN0IHsgdXNlQWN0aXZpdGllcywgdXNlRGlyZWN0aW9uLCB1c2VEaWN0YXRlU3RhdGUsIHVzZVN0eWxlT3B0aW9ucyB9ID0gaG9va3M7XG5cbmNvbnN0IFJPT1RfU1RZTEUgPSB7XG4gICcmLndlYmNoYXRfX3NlbmQtYm94Jzoge1xuICAgICcmIC53ZWJjaGF0X19zZW5kLWJveF9fYnV0dG9uJzogeyBmbGV4U2hyaW5rOiAwIH0sXG4gICAgJyYgLndlYmNoYXRfX3NlbmQtYm94X19kaWN0YXRpb24taW50ZXJpbXMnOiB7IGZsZXg6IDEwMDAwIH0sXG4gICAgJyYgLndlYmNoYXRfX3NlbmQtYm94X19tYWluJzogeyBkaXNwbGF5OiAnZmxleCcgfSxcbiAgICAnJiAud2ViY2hhdF9fc2VuZC1ib3hfX21pY3JvcGhvbmUtYnV0dG9uJzogeyBmbGV4OiAxIH0sXG4gICAgJyYgLndlYmNoYXRfX3NlbmQtYm94X190ZXh0LWJveCc6IHsgZmxleDogMTAwMDAgfVxuICB9XG59O1xuXG4vLyBUT0RPOiBbUDNdIFdlIHNob3VsZCBjb25zaWRlciBleHBvc2luZyBjb3JlL3NyYy9kZWZpbml0aW9ucyBhbmQgdXNlIGl0IGluc3RlYWRcbmZ1bmN0aW9uIGFjdGl2aXR5SXNTcGVha2luZ09yUXVldWVkVG9TcGVhayh7IGNoYW5uZWxEYXRhOiB7IHNwZWFrIH0gPSB7fSB9KSB7XG4gIHJldHVybiAhIXNwZWFrO1xufVxuXG5mdW5jdGlvbiB1c2VTZW5kQm94U3BlZWNoSW50ZXJpbXNWaXNpYmxlKCkge1xuICBjb25zdCBbYWN0aXZpdGllc10gPSB1c2VBY3Rpdml0aWVzKCk7XG4gIGNvbnN0IFtkaWN0YXRlU3RhdGVdID0gdXNlRGljdGF0ZVN0YXRlKCk7XG5cbiAgcmV0dXJuIFtcbiAgICAoZGljdGF0ZVN0YXRlID09PSBTVEFSVElORyB8fCBkaWN0YXRlU3RhdGUgPT09IERJQ1RBVElORykgJiZcbiAgICAgICFhY3Rpdml0aWVzLmZpbHRlcihhY3Rpdml0eUlzU3BlYWtpbmdPclF1ZXVlZFRvU3BlYWspLmxlbmd0aFxuICBdO1xufVxuXG5jb25zdCBCYXNpY1NlbmRCb3ggPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCBbeyBoaWRlVXBsb2FkQnV0dG9uLCBzZW5kQm94QnV0dG9uQWxpZ25tZW50IH1dID0gdXNlU3R5bGVPcHRpb25zKCk7XG4gIGNvbnN0IFt7IHNlbmRCb3g6IHNlbmRCb3hTdHlsZVNldCB9XSA9IHVzZVN0eWxlU2V0KCk7XG4gIGNvbnN0IFt7IFNwZWVjaFJlY29nbml0aW9uIH0gPSB7fV0gPSB1c2VXZWJTcGVlY2hQb255ZmlsbCgpO1xuICBjb25zdCBbZGlyZWN0aW9uXSA9IHVzZURpcmVjdGlvbigpO1xuICBjb25zdCBbc3BlZWNoSW50ZXJpbXNWaXNpYmxlXSA9IHVzZVNlbmRCb3hTcGVlY2hJbnRlcmltc1Zpc2libGUoKTtcbiAgY29uc3Qgc3R5bGVUb0Vtb3Rpb25PYmplY3QgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpO1xuXG4gIGNvbnN0IHJvb3RDbGFzc05hbWUgPSBzdHlsZVRvRW1vdGlvbk9iamVjdChST09UX1NUWUxFKSArICcnO1xuXG4gIGNvbnN0IHN1cHBvcnRTcGVlY2hSZWNvZ25pdGlvbiA9ICEhU3BlZWNoUmVjb2duaXRpb247XG5cbiAgY29uc3QgYnV0dG9uQ2xhc3NOYW1lID0gY2xhc3NOYW1lcygnd2ViY2hhdF9fc2VuZC1ib3hfX2J1dHRvbicsIHtcbiAgICAnd2ViY2hhdF9fc2VuZC1ib3hfX2J1dHRvbi0tYWxpZ24tYm90dG9tJzogc2VuZEJveEJ1dHRvbkFsaWdubWVudCA9PT0gJ2JvdHRvbScsXG4gICAgJ3dlYmNoYXRfX3NlbmQtYm94X19idXR0b24tLWFsaWduLXN0cmV0Y2gnOiBzZW5kQm94QnV0dG9uQWxpZ25tZW50ICE9PSAnYm90dG9tJyAmJiBzZW5kQm94QnV0dG9uQWxpZ25tZW50ICE9PSAndG9wJyxcbiAgICAnd2ViY2hhdF9fc2VuZC1ib3hfX2J1dHRvbi0tYWxpZ24tdG9wJzogc2VuZEJveEJ1dHRvbkFsaWdubWVudCA9PT0gJ3RvcCdcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoJ3dlYmNoYXRfX3NlbmQtYm94Jywgc2VuZEJveFN0eWxlU2V0ICsgJycsIHJvb3RDbGFzc05hbWUgKyAnJywgKGNsYXNzTmFtZSB8fCAnJykgKyAnJyl9XG4gICAgICBkaXI9e2RpcmVjdGlvbn1cbiAgICAgIHJvbGU9XCJmb3JtXCJcbiAgICA+XG4gICAgICA8U3VnZ2VzdGVkQWN0aW9ucyAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19zZW5kLWJveF9fbWFpblwiPlxuICAgICAgICB7IWhpZGVVcGxvYWRCdXR0b24gJiYgPFVwbG9hZEJ1dHRvbiBjbGFzc05hbWU9e2J1dHRvbkNsYXNzTmFtZX0gLz59XG4gICAgICAgIHtzcGVlY2hJbnRlcmltc1Zpc2libGUgPyAoXG4gICAgICAgICAgPERpY3RhdGlvbkludGVyaW1zIGNsYXNzTmFtZT1cIndlYmNoYXRfX3NlbmQtYm94X19kaWN0YXRpb24taW50ZXJpbXNcIiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxUZXh0Qm94IGNsYXNzTmFtZT1cIndlYmNoYXRfX3NlbmQtYm94X190ZXh0LWJveFwiIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtzdXBwb3J0U3BlZWNoUmVjb2duaXRpb24gPyAoXG4gICAgICAgICAgPE1pY3JvcGhvbmVCdXR0b24gY2xhc3NOYW1lPXtjbGFzc05hbWVzKGJ1dHRvbkNsYXNzTmFtZSwgJ3dlYmNoYXRfX3NlbmQtYm94X19taWNyb3Bob25lLWJ1dHRvbicpfSAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTZW5kQnV0dG9uIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3NOYW1lfSAvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5CYXNpY1NlbmRCb3guZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6ICcnXG59O1xuXG5CYXNpY1NlbmRCb3gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2ljU2VuZEJveDtcblxuZXhwb3J0IHsgdXNlU2VuZEJveFNwZWVjaEludGVyaW1zVmlzaWJsZSB9O1xuIl19