New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

react-say

Package Overview
Dependencies
Maintainers
1
Versions
52
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-say - npm Package Compare versions

Comparing version

to
0.0.1-master.66946c4

lib/SayPrimitive.js

2

CHANGELOG.md

@@ -8,3 +8,5 @@ # Changelog

## [Unreleased]
## [1.0.0] - 2018-07-09
### Added
- Initial release

@@ -59,14 +59,36 @@ 'use strict';

var utterance = new speechSynthesisUtterance(text);
var targetVoice = void 0;
var _ref3 = voice || {},
voiceURI = _ref3.voiceURI;
if (typeof voice === 'function') {
targetVoice = voice.call(speechSynthesis, speechSynthesis.getVoices());
} else {
var _ref3 = voice || {},
voiceURI = _ref3.voiceURI;
utterance.lang = lang;
utterance.pitch = pitch;
utterance.rate = rate;
utterance.voice = voiceURI && [].find.call(speechSynthesis.getVoices(), function (v) {
return v.voiceURI === voiceURI;
});
utterance.volume = volume;
targetVoice = voiceURI && [].find.call([].slice.call(speechSynthesis.getVoices()), function (v) {
return v.voiceURI === voiceURI;
});
}
// Edge will mute if "lang" is set to ""
utterance.lang = lang || '';
if (utterance.pitch || utterance.pitch === 0) {
utterance.pitch = pitch;
}
if (utterance.rate || utterance.rate === 0) {
utterance.rate = rate;
}
// Cognitive Services will error when "voice" is set to "null"
// Edge will error when "voice" is set to "undefined"
if (targetVoice) {
utterance.voice = targetVoice;
}
if (utterance.volume || utterance.volume === 0) {
utterance.volume = volume;
}
utterance.onboundary = onBoundary;

@@ -194,5 +216,15 @@ utterance.onend = onEnd;

Composer.propTypes = {
lang: _propTypes2.default.string,
onBoundary: _propTypes2.default.func,
onEnd: _propTypes2.default.func,
onError: _propTypes2.default.func,
onStart: _propTypes2.default.func,
pitch: _propTypes2.default.number,
rate: _propTypes2.default.number,
text: _propTypes2.default.string,
voice: _propTypes2.default.oneOfType([_propTypes2.default.any, _propTypes2.default.func]),
volume: _propTypes2.default.number,
speechSynthesis: _propTypes2.default.any,
speechSynthesisUtterance: _propTypes2.default.any
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Db21wb3Nlci5qcyJdLCJuYW1lcyI6WyJjcmVhdGVDb250ZXh0Iiwic3BlZWNoU3ludGhlc2lzIiwic3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIiwiY2FuY2VsIiwic3BlYWsiLCJsYW5nIiwib25Cb3VuZGFyeSIsIm9uRW5kIiwib25FcnJvciIsIm9uU3RhcnQiLCJwaXRjaCIsInJhdGUiLCJ0ZXh0Iiwidm9pY2UiLCJ2b2x1bWUiLCJ1dHRlcmFuY2UiLCJ2b2ljZVVSSSIsImZpbmQiLCJjYWxsIiwiZ2V0Vm9pY2VzIiwidiIsIm9uYm91bmRhcnkiLCJvbmVuZCIsIm9uZXJyb3IiLCJvbnN0YXJ0IiwibWFwIiwiZGVmIiwibG9jYWxTZXJ2aWNlIiwibmFtZSIsIkNvbXBvc2VyIiwicHJvcHMiLCJoYW5kbGVWb2ljZXNDaGFuZ2VkIiwiYmluZCIsIm9udm9pY2VzY2hhbmdlZCIsIm1lcmdlQ29udGV4dCIsImNvbnRleHQiLCJ2b2ljZXMiLCJzdGF0ZSIsIm5leHRQcm9wcyIsImNoYW5nZWQiLCJzb21lIiwic2V0U3RhdGUiLCJ0YXJnZXQiLCJjaGlsZHJlbiIsIlJlYWN0IiwiQ29tcG9uZW50IiwiZGVmYXVsdFByb3BzIiwid2luZG93Iiwid2Via2l0U3BlZWNoU3ludGhlc2lzIiwiU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIiwid2Via2l0U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYW55Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBRUE7Ozs7Ozs7Ozs7OztBQUVBLFNBQVNBLGFBQVQsT0FHRztBQUFBLE1BRkRDLGVBRUMsUUFGREEsZUFFQztBQUFBLE1BRERDLHdCQUNDLFFBRERBLHdCQUNDOztBQUNELFNBQU87QUFDTEMsWUFBUTtBQUFBLGFBQU1GLGdCQUFnQkUsTUFBaEIsRUFBTjtBQUFBLEtBREg7QUFFTEMsV0FBTyxzQkFXRDtBQUFBLFVB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T0MscUJBRDVCO0FBRXRCOUMsNEJBQTBCNkMsT0FBT0Usd0JBQVAsSUFBbUNGLE9BQU9HO0FBRjlDLENBQXhCOztBQUtBckIsU0FBU3NCLFNBQVQsR0FBcUI7QUFDbkJsRCxtQkFBaUJtRCxvQkFBVUMsR0FEUjtBQUVuQm5ELDRCQUEwQmtELG9CQUFVQztBQUZqQixDQUFyQiIsImZpbGUiOiJDb21wb3Nlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZW1vaXplIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tICcuL0NvbnRleHQnO1xuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KHtcbiAgc3BlZWNoU3ludGhlc2lzLFxuICBzcGVlY2hTeW50aGVzaXNVdHRlcmFuY2Vcbn0pIHtcbiAgcmV0dXJuIHtcbiAgICBjYW5jZWw6ICgpID0+IHNwZWVjaFN5bnRoZXNpcy5jYW5jZWwoKSxcbiAgICBzcGVhazogKHtcbiAgICAgIGxhbmcsXG4gICAgICBvbkJvdW5kYXJ5LFxuICAgICAgb25FbmQsXG4gICAgICBvbkVycm9yLFxuICAgICAgb25TdGFydCxcbiAgICAgIHBpdGNoID0gMSxcbiAgICAgIHJhdGUgPSAxLFxuICAgICAgdGV4dCxcbiAgICAgIHZvaWNlLFxuICAgICAgdm9sdW1lID0gMVxuICAgIH0pID0+IHtcbiAgICAgIGNvbnN0IHV0dGVyYW5jZSA9IG5ldyBzcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UodGV4dCk7XG4gICAgICBjb25zdCB7IHZvaWNlVVJJIH0gPSB2b2ljZSB8fCB7fTtcblxuICAgICAgdXR0ZXJhbmNlLmxhbmcgPSBsYW5nO1xuICAgICAgdXR0ZXJhbmNlLnBpdGNoID0gcGl0Y2g7XG4gICAgICB1dHRlcmFuY2UucmF0ZSA9IHJhdGU7XG4gICAgICB1dHRlcmFuY2Uudm9pY2UgPSB2b2ljZVVSSSAmJiBbXS5maW5kLmNhbGwoc3BlZWNoU3ludGhlc2lzLmdldFZvaWNlcygpLCB2ID0+IHYudm9pY2VVUkkgPT09IHZvaWNlVVJJKTtcbiAgICAgIHV0dGVyYW5jZS52b2x1bWUgPSB2b2x1bWU7XG5cbiAgICAgIHV0dGVyYW5jZS5vbmJvdW5kYXJ5ID0gb25Cb3VuZGFyeTtcbiAgICAgIHV0dGVyYW5jZS5vbmVuZCA9IG9uRW5kO1xuICAgICAgdXR0ZXJhbmNlLm9uZXJyb3IgPSBvbkVycm9yO1xuICAgICAgdXR0ZXJhbmNlLm9uc3RhcnQgPSBvblN0YXJ0O1xuXG4gICAgICBzcGVlY2hTeW50aGVzaXMuc3BlYWsodXR0ZXJhbmNlKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZvaWNlcyhzcGVlY2hTeW50aGVzaXMpIHtcbiAgcmV0dXJuIHNwZWVjaFN5bnRoZXNpcy5nZXRWb2ljZXMoKS5tYXAoKHtcbiAgICAnZGVmYXVsdCc6IGRlZixcbiAgICBsYW5nLFxuICAgIGxvY2FsU2VydmljZSxcbiAgICBuYW1lLFxuICAgIHZvaWNlVVJJXG4gIH0pID0+ICh7XG4gICAgJ2RlZmF1bHQnOiBkZWYsXG4gICAgbGFuZyxcbiAgICBsb2NhbFNlcnZpY2UsXG4gICAgbmFtZSxcbiAgICB2b2ljZVVSSVxuICB9KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBvc2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLmhhbmRsZVZvaWNlc0NoYW5nZWQgPSB0aGlzLmhhbmRsZVZvaWNlc0NoYW5nZWQuYmluZCh0aGlzKTtcblxuICAgIHByb3BzLnNwZWVjaFN5bnRoZXNpcy5vbnZvaWNlc2NoYW5nZWQgPSB0aGlzLmhhbmRsZVZvaWNlc0NoYW5nZWQ7XG5cbiAgICB0aGlzLm1lcmdlQ29udGV4dCA9IG1lbW9pemUoKGNvbnRleHQsIHZvaWNlcykgPT4gKHsgLi4uY29udGV4dCwgdm9pY2VzIH0pKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0OiBjcmVhdGVDb250ZXh0KHByb3BzKSxcbiAgICAgIHZvaWNlczogZ2V0Vm9pY2VzKHByb3BzLnNwZWVjaFN5bnRoZXNpcylcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICBjb25zdCB7IHByb3BzIH0gPSB0aGlzO1xuICAgIGNvbnN0IGNoYW5nZWQgPSBbXG4gICAgICAnc3BlZWNoU3ludGhlc2lzJyxcbiAgICAgICdzcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UnXG4gICAgXS5zb21lKG5hbWUgPT4gbmV4dFByb3BzW25hbWVdICE9PSBwcm9wc1tuYW1lXSk7XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5wcm9wcy5zcGVlY2hTeW50aGVzaXMub252b2ljZXNjaGFuZ2VkID0gbnVsbDtcbiAgICAgIHRoaXMuc3RhdGUuY29udGV4dC5jYW5jZWwoKTtcblxuICAgICAgbmV4dFByb3BzLnNwZWVjaFN5bnRoZXNpcy5vbnZvaWNlc2NoYW5nZWQgPSB0aGlzLmhhbmRsZVZvaWNlc0NoYW5nZWQ7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHsgY29udGV4dCB9KSA9PiB7XG4gICAgICAgIGNvbnRleHQuY2FuY2VsKCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZXh0OiBjcmVhdGVDb250ZXh0KG5leHRQcm9wcyksXG4gICAgICAgICAgdm9pY2VzOiBnZXRWb2ljZXMobmV4dFByb3BzLnNwZWVjaFN5bnRoZXNpcylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVZvaWNlc0NoYW5nZWQoeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IHZvaWNlcyA9IGdldFZvaWNlcyh0YXJnZXQpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAoeyB2b2ljZXMgfSkpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgcHJvcHMsIHN0YXRlIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXsgdGhpcy5tZXJnZUNvbnRleHQoc3RhdGUuY29udGV4dCwgc3RhdGUudm9pY2VzKSB9PlxuICAgICAgICB7XG4gICAgICAgICAgdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID9cbiAgICAgICAgICAgIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICB7IGNvbnRleHQgPT4gY2hpbGRyZW4oY29udGV4dCkgfVxuICAgICAgICAgICAgPC9Db250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIDpcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgIH1cbiAgICAgIDwvQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG59XG5cbkNvbXBvc2VyLmRlZmF1bHRQcm9wcyA9IHtcbiAgc3BlZWNoU3ludGhlc2lzOiB3aW5kb3cuc3BlZWNoU3ludGhlc2lzIHx8IHdpbmRvdy53ZWJraXRTcGVlY2hTeW50aGVzaXMsXG4gIHNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTogd2luZG93LlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSB8fCB3aW5kb3cud2Via2l0U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlXG59O1xuXG5Db21wb3Nlci5wcm9wVHlwZXMgPSB7XG4gIHNwZWVjaFN5bnRoZXNpczogUHJvcFR5cGVzLmFueSxcbiAgc3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOiBQcm9wVHlwZXMuYW55XG59O1xuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Db21wb3Nlci5qcyJdLCJuYW1lcyI6WyJjcmVhdGVDb250ZXh0Iiwic3BlZWNoU3ludGhlc2lzIiwic3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIiwiY2FuY2VsIiwic3BlYWsiLCJsYW5nIiwib25Cb3VuZGFyeSIsIm9uRW5kIiwib25FcnJvciIsIm9uU3RhcnQiLCJwaXRjaCIsInJhdGUiLCJ0ZXh0Iiwidm9pY2UiLCJ2b2x1bWUiLCJ1dHRlcmFuY2UiLCJ0YXJnZXRWb2ljZSIsImNhbGwiLCJnZXRWb2ljZXMiLCJ2b2ljZVVSSSIsImZpbmQiLCJzbGljZSIsInYiLCJvbmJvdW5kYXJ5Iiwib25lbmQiLCJvbmVycm9yIiwib25zdGFydCIsIm1hcCIsImRlZiIsImxvY2FsU2VydmljZSIsIm5hbWUiLCJDb21wb3NlciIsInByb3BzIiwiaGFuZGxlVm9pY2VzQ2hhbmdlZCIsImJpbmQiLCJvbnZvaWNlc2NoYW5nZWQiLCJtZXJnZUNvbnRleHQiLCJjb250ZXh0Iiwidm9pY2VzIiwic3RhdGUiLCJuZXh0UHJvcHMiLCJjaGFuZ2VkIiwic29tZSIsInNldFN0YXRlIiwidGFyZ2V0IiwiY2hpbGRyZW4iLCJSZWFjdCIsIkNvbXBvbmVudCIsImRlZmF1bHRQcm9wcyIsIndpbmRvdyIsIndlYmtpdFNwZWVjaFN5bnRoZXNpcyIsIlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSIsIndlYmtpdFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJudW1iZXIiLCJvbmVPZlR5cGUiLCJhbnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0EsYUFBVCxPQUdHO0FBQUEsTUFGREMsZUFFQyxRQUZEQSxlQUVDO0FBQUEsTUFEREMsd0JBQ0MsUUFEREEsd0JBQ0M7O0FBQ0QsU0FBTztBQUNMQyxZQUFRO0FBQUEs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LFVBQVF3QyxvQkFBVUcsTUFWQztBQVduQnhELG1CQUFpQnFELG9CQUFVSyxHQVhSO0FBWW5CekQsNEJBQTBCb0Qsb0JBQVVLO0FBWmpCLENBQXJCIiwiZmlsZSI6IkNvbXBvc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lbW9pemUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBDb250ZXh0IGZyb20gJy4vQ29udGV4dCc7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoe1xuICBzcGVlY2hTeW50aGVzaXMsXG4gIHNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVxufSkge1xuICByZXR1cm4ge1xuICAgIGNhbmNlbDogKCkgPT4gc3BlZWNoU3ludGhlc2lzLmNhbmNlbCgpLFxuICAgIHNwZWFrOiAoe1xuICAgICAgbGFuZyxcbiAgICAgIG9uQm91bmRhcnksXG4gICAgICBvbkVuZCxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBvblN0YXJ0LFxuICAgICAgcGl0Y2ggPSAxLFxuICAgICAgcmF0ZSA9IDEsXG4gICAgICB0ZXh0LFxuICAgICAgdm9pY2UsXG4gICAgICB2b2x1bWUgPSAxXG4gICAgfSkgPT4ge1xuICAgICAgY29uc3QgdXR0ZXJhbmNlID0gbmV3IHNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSh0ZXh0KTtcbiAgICAgIGxldCB0YXJnZXRWb2ljZTtcblxuICAgICAgaWYgKHR5cGVvZiB2b2ljZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0YXJnZXRWb2ljZSA9IHZvaWNlLmNhbGwoc3BlZWNoU3ludGhlc2lzLCBzcGVlY2hTeW50aGVzaXMuZ2V0Vm9pY2VzKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyB2b2ljZVVSSSB9ID0gdm9pY2UgfHwge307XG5cbiAgICAgICAgdGFyZ2V0Vm9pY2UgPSB2b2ljZVVSSSAmJiBbXS5maW5kLmNhbGwoW10uc2xpY2UuY2FsbChzcGVlY2hTeW50aGVzaXMuZ2V0Vm9pY2VzKCkpLCB2ID0+IHYudm9pY2VVUkkgPT09IHZvaWNlVVJJKTtcbiAgICAgIH1cblxuICAgICAgLy8gRWRnZSB3aWxsIG11dGUgaWYgXCJsYW5nXCIgaXMgc2V0IHRvIFwiXCJcbiAgICAgIHV0dGVyYW5jZS5sYW5nID0gbGFuZyB8fCAnJztcblxuICAgICAgaWYgKHV0dGVyYW5jZS5waXRjaCB8fCB1dHRlcmFuY2UucGl0Y2ggPT09IDApIHtcbiAgICAgICAgdXR0ZXJhbmNlLnBpdGNoID0gcGl0Y2g7XG4gICAgICB9XG5cbiAgICAgIGlmICh1dHRlcmFuY2UucmF0ZSB8fCB1dHRlcmFuY2UucmF0ZSA9PT0gMCkge1xuICAgICAgICB1dHRlcmFuY2UucmF0ZSA9IHJhdGU7XG4gICAgICB9XG5cbiAgICAgIC8vIENvZ25pdGl2ZSBTZXJ2aWNlcyB3aWxsIGVycm9yIHdoZW4gXCJ2b2ljZVwiIGlzIHNldCB0byBcIm51bGxcIlxuICAgICAgLy8gRWRnZSB3aWxsIGVycm9yIHdoZW4gXCJ2b2ljZVwiIGlzIHNldCB0byBcInVuZGVmaW5lZFwiXG4gICAgICBpZiAodGFyZ2V0Vm9pY2UpIHtcbiAgICAgICAgdXR0ZXJhbmNlLnZvaWNlID0gdGFyZ2V0Vm9pY2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh1dHRlcmFuY2Uudm9sdW1lIHx8IHV0dGVyYW5jZS52b2x1bWUgPT09IDApIHtcbiAgICAgICAgdXR0ZXJhbmNlLnZvbHVtZSA9IHZvbHVtZTtcbiAgICAgIH1cblxuICAgICAgdXR0ZXJhbmNlLm9uYm91bmRhcnkgPSBvbkJvdW5kYXJ5O1xuICAgICAgdXR0ZXJhbmNlLm9uZW5kID0gb25FbmQ7XG4gICAgICB1dHRlcmFuY2Uub25lcnJvciA9IG9uRXJyb3I7XG4gICAgICB1dHRlcmFuY2Uub25zdGFydCA9IG9uU3RhcnQ7XG5cbiAgICAgIHNwZWVjaFN5bnRoZXNpcy5zcGVhayh1dHRlcmFuY2UpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Vm9pY2VzKHNwZWVjaFN5bnRoZXNpcykge1xuICByZXR1cm4gc3BlZWNoU3ludGhlc2lzLmdldFZvaWNlcygpLm1hcCgoe1xuICAgICdkZWZhdWx0JzogZGVmLFxuICAgIGxhbmcsXG4gICAgbG9jYWxTZXJ2aWNlLFxuICAgIG5hbWUsXG4gICAgdm9pY2VVUklcbiAgfSkgPT4gKHtcbiAgICAnZGVmYXVsdCc6IGRlZixcbiAgICBsYW5nLFxuICAgIGxvY2FsU2VydmljZSxcbiAgICBuYW1lLFxuICAgIHZvaWNlVVJJXG4gIH0pKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcG9zZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuaGFuZGxlVm9pY2VzQ2hhbmdlZCA9IHRoaXMuaGFuZGxlVm9pY2VzQ2hhbmdlZC5iaW5kKHRoaXMpO1xuXG4gICAgcHJvcHMuc3BlZWNoU3ludGhlc2lzLm9udm9pY2VzY2hhbmdlZCA9IHRoaXMuaGFuZGxlVm9pY2VzQ2hhbmdlZDtcblxuICAgIHRoaXMubWVyZ2VDb250ZXh0ID0gbWVtb2l6ZSgoY29udGV4dCwgdm9pY2VzKSA9PiAoeyAuLi5jb250ZXh0LCB2b2ljZXMgfSkpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbnRleHQ6IGNyZWF0ZUNvbnRleHQocHJvcHMpLFxuICAgICAgdm9pY2VzOiBnZXRWb2ljZXMocHJvcHMuc3BlZWNoU3ludGhlc2lzKVxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIGNvbnN0IHsgcHJvcHMgfSA9IHRoaXM7XG4gICAgY29uc3QgY2hhbmdlZCA9IFtcbiAgICAgICdzcGVlY2hTeW50aGVzaXMnLFxuICAgICAgJ3NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSdcbiAgICBdLnNvbWUobmFtZSA9PiBuZXh0UHJvcHNbbmFtZV0gIT09IHByb3BzW25hbWVdKTtcblxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLnByb3BzLnNwZWVjaFN5bnRoZXNpcy5vbnZvaWNlc2NoYW5nZWQgPSBudWxsO1xuICAgICAgdGhpcy5zdGF0ZS5jb250ZXh0LmNhbmNlbCgpO1xuXG4gICAgICBuZXh0UHJvcHMuc3BlZWNoU3ludGhlc2lzLm9udm9pY2VzY2hhbmdlZCA9IHRoaXMuaGFuZGxlVm9pY2VzQ2hhbmdlZDtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSgoeyBjb250ZXh0IH0pID0+IHtcbiAgICAgICAgY29udGV4dC5jYW5jZWwoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUNvbnRleHQobmV4dFByb3BzKSxcbiAgICAgICAgICB2b2ljZXM6IGdldFZvaWNlcyhuZXh0UHJvcHMuc3BlZWNoU3ludGhlc2lzKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlVm9pY2VzQ2hhbmdlZCh7IHRhcmdldCB9KSB7XG4gICAgY29uc3Qgdm9pY2VzID0gZ2V0Vm9pY2VzKHRhcmdldCk7XG5cbiAgICB0aGlzLnNldFN0YXRlKCgpID0+ICh7IHZvaWNlcyB9KSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBwcm9wcywgc3RhdGUgfSA9IHRoaXM7XG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gcHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENvbnRleHQuUHJvdmlkZXIgdmFsdWU9eyB0aGlzLm1lcmdlQ29udGV4dChzdGF0ZS5jb250ZXh0LCBzdGF0ZS52b2ljZXMpIH0+XG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICAgPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgIHsgY29udGV4dCA9PiBjaGlsZHJlbihjb250ZXh0KSB9XG4gICAgICAgICAgICA8L0NvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgOlxuICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgfVxuICAgICAgPC9Db250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbn1cblxuQ29tcG9zZXIuZGVmYXVsdFByb3BzID0ge1xuICBzcGVlY2hTeW50aGVzaXM6IHdpbmRvdy5zcGVlY2hTeW50aGVzaXMgfHwgd2luZG93LndlYmtpdFNwZWVjaFN5bnRoZXNpcyxcbiAgc3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOiB3aW5kb3cuU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIHx8IHdpbmRvdy53ZWJraXRTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2Vcbn07XG5cbkNvbXBvc2VyLnByb3BUeXBlcyA9IHtcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25Cb3VuZGFyeTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBwaXRjaDogUHJvcFR5cGVzLm51bWJlcixcbiAgcmF0ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgdGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdm9pY2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnksIFByb3BUeXBlcy5mdW5jXSksXG4gIHZvbHVtZTogUHJvcFR5cGVzLm51bWJlcixcbiAgc3BlZWNoU3ludGhlc2lzOiBQcm9wVHlwZXMuYW55LFxuICBzcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6IFByb3BUeXBlcy5hbnlcbn07XG4iXX0=

20

lib/index.js

@@ -6,7 +6,7 @@ 'use strict';

});
exports.SayButton = exports.Say = exports.Context = exports.Composer = undefined;
exports.SayPrimitive = exports.SayButton = exports.Context = exports.Composer = undefined;
var _BasicSay = require('./BasicSay');
var _Say = require('./Say');
var _BasicSay2 = _interopRequireDefault(_BasicSay);
var _Say2 = _interopRequireDefault(_Say);

@@ -21,6 +21,2 @@ var _Composer = require('./Composer');

var _Say = require('./Say');
var _Say2 = _interopRequireDefault(_Say);
var _SayButton = require('./SayButton');

@@ -30,9 +26,13 @@

var _SayPrimitive = require('./SayPrimitive');
var _SayPrimitive2 = _interopRequireDefault(_SayPrimitive);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _BasicSay2.default;
exports.default = _Say2.default;
exports.Composer = _Composer2.default;
exports.Context = _Context2.default;
exports.Say = _Say2.default;
exports.SayButton = _SayButton2.default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJCYXNpY1NheSIsIkNvbXBvc2VyIiwiQ29udGV4dCIsIlNheSIsIlNheUJ1dHRvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztrQkFFZUEsa0I7UUFHYkMsUSxHQUFBQSxrQjtRQUNBQyxPLEdBQUFBLGlCO1FBQ0FDLEcsR0FBQUEsYTtRQUNBQyxTLEdBQUFBLG1CIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2ljU2F5IGZyb20gJy4vQmFzaWNTYXknO1xuaW1wb3J0IENvbXBvc2VyIGZyb20gJy4vQ29tcG9zZXInO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi9Db250ZXh0JztcbmltcG9ydCBTYXkgZnJvbSAnLi9TYXknO1xuaW1wb3J0IFNheUJ1dHRvbiBmcm9tICcuL1NheUJ1dHRvbic7XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2ljU2F5XG5cbmV4cG9ydCB7XG4gIENvbXBvc2VyLFxuICBDb250ZXh0LFxuICBTYXksXG4gIFNheUJ1dHRvblxufVxuIl19
exports.SayPrimitive = _SayPrimitive2.default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJTYXkiLCJDb21wb3NlciIsIkNvbnRleHQiLCJTYXlCdXR0b24iLCJTYXlQcmltaXRpdmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7a0JBRWVBLGE7UUFHYkMsUSxHQUFBQSxrQjtRQUNBQyxPLEdBQUFBLGlCO1FBQ0FDLFMsR0FBQUEsbUI7UUFDQUMsWSxHQUFBQSxzQiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTYXkgZnJvbSAnLi9TYXknO1xuaW1wb3J0IENvbXBvc2VyIGZyb20gJy4vQ29tcG9zZXInO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi9Db250ZXh0JztcbmltcG9ydCBTYXlCdXR0b24gZnJvbSAnLi9TYXlCdXR0b24nO1xuaW1wb3J0IFNheVByaW1pdGl2ZSBmcm9tICcuL1NheVByaW1pdGl2ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IFNheVxuXG5leHBvcnQge1xuICBDb21wb3NlcixcbiAgQ29udGV4dCxcbiAgU2F5QnV0dG9uLFxuICBTYXlQcmltaXRpdmVcbn1cbiJdfQ==

@@ -7,4 +7,2 @@ 'use strict';

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _propTypes = require('prop-types');

@@ -18,64 +16,45 @@

var _Context = require('./Context');
var _Composer = require('./Composer');
var _Context2 = _interopRequireDefault(_Context);
var _Composer2 = _interopRequireDefault(_Composer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _SayPrimitive = require('./SayPrimitive');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var _SayPrimitive2 = _interopRequireDefault(_SayPrimitive);
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Say = function Say(props) {
return _react2.default.createElement(
_Composer2.default,
{
speechSynthesis: props.speechSynthesis,
speechSynthesisUtterance: props.speechSynthesisUtterance
},
_react2.default.createElement(
_SayPrimitive2.default,
{
lang: props.lang,
onBoundary: props.onBoundary,
onEnd: props.onEnd,
onError: props.onError,
onStart: props.onStart,
pitch: props.pitch,
rate: props.rate,
speak: props.speak,
voice: props.voice,
volume: props.volume
},
props.children
)
);
};
var Say = function (_React$Component) {
_inherits(Say, _React$Component);
Say.defaultProps = {
speechSynthesis: window.speechSynthesis || window.webkitSpeechSynthesis,
speechSynthesisUtterance: window.SpeechSynthesisUtterance || window.webkitSpeechSynthesisUtterance
};
function Say() {
_classCallCheck(this, Say);
return _possibleConstructorReturn(this, (Say.__proto__ || Object.getPrototypeOf(Say)).apply(this, arguments));
}
_createClass(Say, [{
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate(nextProps) {
return nextProps.text !== this.props.text;
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
lang = _props.lang,
onBoundary = _props.onBoundary,
onEnd = _props.onEnd,
onError = _props.onError,
onStart = _props.onStart,
pitch = _props.pitch,
rate = _props.rate,
text = _props.text,
voice = _props.voice,
volume = _props.volume;
return _react2.default.createElement(
_Context2.default.Consumer,
null,
function (context) {
return context.speak({ lang: lang, onBoundary: onBoundary, onEnd: onEnd, onError: onError, onStart: onStart, pitch: pitch, rate: rate, text: text, voice: voice, volume: volume });
}
);
}
}]);
return Say;
}(_react2.default.Component);
exports.default = Say;
Say.propTypes = {
lang: _propTypes2.default.string,
pitch: _propTypes2.default.number,
rate: _propTypes2.default.number,
onBoundary: _propTypes2.default.func,

@@ -85,6 +64,12 @@ onEnd: _propTypes2.default.func,

onStart: _propTypes2.default.func,
text: _propTypes2.default.string,
voice: _propTypes2.default.any,
pitch: _propTypes2.default.number,
rate: _propTypes2.default.number,
speechSynthesis: _propTypes2.default.any,
speechSynthesisUtterance: _propTypes2.default.any,
speak: _propTypes2.default.string,
voice: _propTypes2.default.oneOfType([_propTypes2.default.any, _propTypes2.default.func]),
volume: _propTypes2.default.number
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TYXkuanMiXSwibmFtZXMiOlsiU2F5IiwibmV4dFByb3BzIiwidGV4dCIsInByb3BzIiwibGFuZyIsIm9uQm91bmRhcnkiLCJvbkVuZCIsIm9uRXJyb3IiLCJvblN0YXJ0IiwicGl0Y2giLCJyYXRlIiwidm9pY2UiLCJ2b2x1bWUiLCJjb250ZXh0Iiwic3BlYWsiLCJSZWFjdCIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm51bWJlciIsImZ1bmMiLCJhbnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUVBOzs7Ozs7Ozs7Ozs7SUFFcUJBLEc7Ozs7Ozs7Ozs7OzBDQUNHQyxTLEVBQVc7QUFDL0IsYUFBT0EsVUFBVUMsSUFBVixLQUFtQixLQUFLQyxLQUFMLENBQVdELElBQXJDO0FBQ0Q7Ozs2QkFFUTtBQUFBLG1CQUNpRixLQUFLQyxLQUR0RjtBQUFBLFVBQ0NDLElBREQsVUFDQ0EsSUFERDtBQUFBLFVBQ09DLFVBRFAsVUFDT0EsVUFEUDtBQUFBLFVBQ21CQyxLQURuQixVQUNtQkEsS0FEbkI7QUFBQSxVQUMwQkMsT0FEMUIsVUFDMEJBLE9BRDFCO0FBQUEsVUFDbUNDLE9BRG5DLFVBQ21DQSxPQURuQztBQUFBLFVBQzRDQyxLQUQ1QyxVQUM0Q0EsS0FENUM7QUFBQSxVQUNtREMsSUFEbkQsVUFDbURBLElBRG5EO0FBQUEsVUFDeURSLElBRHpELFVBQ3lEQSxJQUR6RDtBQUFBLFVBQytEUyxLQUQvRCxVQUMrREEsS0FEL0Q7QUFBQSxVQUNzRUMsTUFEdEUsVUFDc0VBLE1BRHRFOzs7QUFHUCxhQUNFO0FBQUMseUJBQUQsQ0FBUyxRQUFUO0FBQUE7QUFDSTtBQUFBLGlCQUFXQyxRQUFRQyxLQUFSLENBQWMsRUFBRVYsVUFBRixFQUFRQyxzQkFBUixFQUFvQkMsWUFBcEIsRUFBMkJDLGdCQUEzQixFQUFvQ0MsZ0JBQXBDLEVBQTZDQyxZQUE3QyxFQUFvREMsVUFBcEQsRUFBMERSLFVBQTFELEVBQWdFUyxZQUFoRSxFQUF1RUMsY0FBdkUsRUFBZCxDQUFYO0FBQUE7QUFESixPQURGO0FBS0Q7Ozs7RUFiOEJHLGdCQUFNQyxTOztrQkFBbEJoQixHOzs7QUFnQnJCQSxJQUFJaUIsU0FBSixHQUFnQjtBQUNkYixRQUFNYyxvQkFBVUMsTUFERjtBQUVkVixTQUFPUyxvQkFBVUUsTUFGSDtBQUdkVixRQUFNUSxvQkFBVUUsTUFIRjtBQUlkZixjQUFZYSxvQkFBVUcsSUFKUjtBQUtkZixTQUFPWSxvQkFBVUcsSUFMSDtBQU1kZCxXQUFTVyxvQkFBVUcsSUFOTDtBQU9kYixXQUFTVSxvQkFBVUcsSUFQTDtBQVFkbkIsUUFBTWdCLG9CQUFVQyxNQVJGO0FBU2RSLFNBQU9PLG9CQUFVSSxHQVRIO0FBVWRWLFVBQVFNLG9CQUFVRTtBQVZKLENBQWhCIiwiZmlsZSI6IlNheS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tICcuL0NvbnRleHQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTYXkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XG4gICAgcmV0dXJuIG5leHRQcm9wcy50ZXh0ICE9PSB0aGlzLnByb3BzLnRleHQ7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBsYW5nLCBvbkJvdW5kYXJ5LCBvbkVuZCwgb25FcnJvciwgb25TdGFydCwgcGl0Y2gsIHJhdGUsIHRleHQsIHZvaWNlLCB2b2x1bWUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHsgY29udGV4dCA9PiBjb250ZXh0LnNwZWFrKHsgbGFuZywgb25Cb3VuZGFyeSwgb25FbmQsIG9uRXJyb3IsIG9uU3RhcnQsIHBpdGNoLCByYXRlLCB0ZXh0LCB2b2ljZSwgdm9sdW1lIH0pIH1cbiAgICAgIDwvQ29udGV4dC5Db25zdW1lcj5cbiAgICApO1xuICB9XG59XG5cblNheS5wcm9wVHlwZXMgPSB7XG4gIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHBpdGNoOiBQcm9wVHlwZXMubnVtYmVyLFxuICByYXRlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBvbkJvdW5kYXJ5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25FbmQ6IFByb3BUeXBlcy5mdW5jLFxuICBvbkVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIHRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZvaWNlOiBQcm9wVHlwZXMuYW55LFxuICB2b2x1bWU6IFByb3BUeXBlcy5udW1iZXJcbn07XG4iXX0=
exports.default = Say;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TYXkuanMiXSwibmFtZXMiOlsiU2F5IiwicHJvcHMiLCJzcGVlY2hTeW50aGVzaXMiLCJzcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UiLCJsYW5nIiwib25Cb3VuZGFyeSIsIm9uRW5kIiwib25FcnJvciIsIm9uU3RhcnQiLCJwaXRjaCIsInJhdGUiLCJzcGVhayIsInZvaWNlIiwidm9sdW1lIiwiY2hpbGRyZW4iLCJkZWZhdWx0UHJvcHMiLCJ3aW5kb3ciLCJ3ZWJraXRTcGVlY2hTeW50aGVzaXMiLCJTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UiLCJ3ZWJraXRTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJmdW5jIiwibnVtYmVyIiwiYW55Iiwib25lT2ZUeXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBRUE7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsTUFBTSxTQUFOQSxHQUFNO0FBQUEsU0FDVjtBQUFDLHNCQUFEO0FBQUE7QUFDRSx1QkFBa0JDLE1BQU1DLGVBRDFCO0FBRUUsZ0NBQTJCRCxNQUFNRTtBQUZuQztBQUlFO0FBQUMsNEJBQUQ7QUFBQTtBQUNFLGNBQU9GLE1BQU1HLElBRGY7QUFFRSxvQkFBYUgsTUFBTUksVUFGckI7QUFHRSxlQUFRSixNQUFNSyxLQUhoQjtBQUlFLGlCQUFVTCxNQUFNTSxPQUpsQjtBQUtFLGlCQUFVTixNQUFNTyxPQUxsQjtBQU1FLGVBQVFQLE1BQU1RLEtBTmhCO0FBT0UsY0FBT1IsTUFBTVMsSUFQZjtBQVFFLGVBQVFULE1BQU1VLEtBUmhCO0FBU0UsZUFBUVYsTUFBTVcsS0FUaEI7QUFVRSxnQkFBU1gsTUFBTVk7QUFWakI7QUFZSVosWUFBTWE7QUFaVjtBQUpGLEdBRFU7QUFBQSxDQUFaOztBQXFCQWQsSUFBSWUsWUFBSixHQUFtQjtBQUNqQmIsbUJBQWlCYyxPQUFPZCxlQUFQLElBQTBCYyxPQUFPQyxxQkFEakM7QUFFakJkLDRCQUEwQmEsT0FBT0Usd0JBQVAsSUFBbUNGLE9BQU9HO0FBRm5ELENBQW5COztBQUtBbkIsSUFBSW9CLFNBQUosR0FBZ0I7QUFDZGhCLFFBQU1pQixvQkFBVUMsTUFERjtBQUVkakIsY0FBWWdCLG9CQUFVRSxJQUZSO0FBR2RqQixTQUFPZSxvQkFBVUUsSUFISDtBQUlkaEIsV0FBU2Msb0JBQVVFLElBSkw7QUFLZGYsV0FBU2Esb0JBQVVFLElBTEw7QUFNZGQsU0FBT1ksb0JBQVVHLE1BTkg7QUFPZGQsUUFBTVcsb0JBQVVHLE1BUEY7QUFRZHRCLG1CQUFpQm1CLG9CQUFVSSxHQVJiO0FBU2R0Qiw0QkFBMEJrQixvQkFBVUksR0FUdEI7QUFVZGQsU0FBT1Usb0JBQVVDLE1BVkg7QUFXZFYsU0FBT1Msb0JBQVVLLFNBQVYsQ0FBb0IsQ0FBQ0wsb0JBQVVJLEdBQVgsRUFBZ0JKLG9CQUFVRSxJQUExQixDQUFwQixDQVhPO0FBWWRWLFVBQVFRLG9CQUFVRztBQVpKLENBQWhCOztrQkFlZXhCLEciLCJmaWxlIjoiU2F5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBDb21wb3NlciBmcm9tICcuL0NvbXBvc2VyJztcbmltcG9ydCBTYXlQcmltaXRpdmUgZnJvbSAnLi9TYXlQcmltaXRpdmUnO1xuXG5jb25zdCBTYXkgPSBwcm9wcyA9PlxuICA8Q29tcG9zZXJcbiAgICBzcGVlY2hTeW50aGVzaXM9eyBwcm9wcy5zcGVlY2hTeW50aGVzaXMgfVxuICAgIHNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZT17IHByb3BzLnNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSB9XG4gID5cbiAgICA8U2F5UHJpbWl0aXZlXG4gICAgICBsYW5nPXsgcHJvcHMubGFuZyB9XG4gICAgICBvbkJvdW5kYXJ5PXsgcHJvcHMub25Cb3VuZGFyeSB9XG4gICAgICBvbkVuZD17IHByb3BzLm9uRW5kIH1cbiAgICAgIG9uRXJyb3I9eyBwcm9wcy5vbkVycm9yIH1cbiAgICAgIG9uU3RhcnQ9eyBwcm9wcy5vblN0YXJ0IH1cbiAgICAgIHBpdGNoPXsgcHJvcHMucGl0Y2ggfVxuICAgICAgcmF0ZT17IHByb3BzLnJhdGUgfVxuICAgICAgc3BlYWs9eyBwcm9wcy5zcGVhayB9XG4gICAgICB2b2ljZT17IHByb3BzLnZvaWNlIH1cbiAgICAgIHZvbHVtZT17IHByb3BzLnZvbHVtZSB9XG4gICAgPlxuICAgICAgeyBwcm9wcy5jaGlsZHJlbiB9XG4gICAgPC9TYXlQcmltaXRpdmU+XG4gIDwvQ29tcG9zZXI+XG5cblNheS5kZWZhdWx0UHJvcHMgPSB7XG4gIHNwZWVjaFN5bnRoZXNpczogd2luZG93LnNwZWVjaFN5bnRoZXNpcyB8fCB3aW5kb3cud2Via2l0U3BlZWNoU3ludGhlc2lzLFxuICBzcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6IHdpbmRvdy5TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UgfHwgd2luZG93LndlYmtpdFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVxufTtcblxuU2F5LnByb3BUeXBlcyA9IHtcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25Cb3VuZGFyeTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBwaXRjaDogUHJvcFR5cGVzLm51bWJlcixcbiAgcmF0ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgc3BlZWNoU3ludGhlc2lzOiBQcm9wVHlwZXMuYW55LFxuICBzcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6IFByb3BUeXBlcy5hbnksXG4gIHNwZWFrOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB2b2ljZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgdm9sdW1lOiBQcm9wVHlwZXMubnVtYmVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTYXlcbiJdfQ==

@@ -7,2 +7,6 @@ 'use strict';

var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _react = require('react');

@@ -18,3 +22,3 @@

exports.default = function (props) {
var SayButton = function SayButton(props) {
return _react2.default.createElement(

@@ -29,5 +33,9 @@ _Context2.default.Consumer,

lang: props.lang,
onBoundary: props.onBoundary,
onEnd: props.onEnd,
onError: props.onError,
onStart: props.onStart,
pitch: props.pitch,
rate: props.rate,
text: props.text,
text: props.speak,
voice: props.voice,

@@ -43,2 +51,17 @@ volume: props.volume

};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TYXlCdXR0b24uanMiXSwibmFtZXMiOlsiY29udGV4dCIsInNwZWFrIiwibGFuZyIsInByb3BzIiwicGl0Y2giLCJyYXRlIiwidGV4dCIsInZvaWNlIiwidm9sdW1lIiwib25DbGljayIsImV2ZW50IiwiY2hpbGRyZW4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBRUE7Ozs7OztrQkFFZTtBQUFBLFNBQ2I7QUFBQyxxQkFBRCxDQUFTLFFBQVQ7QUFBQTtBQUNJO0FBQUEsYUFDQTtBQUFBO0FBQUEsVUFBUSxTQUFVLHdCQUFTO0FBQ3pCQSxvQkFBUUMsS0FBUixDQUFjO0FBQ1pDLG9CQUFNQyxNQUFNRCxJQURBO0FBRVpFLHFCQUFPRCxNQUFNQyxLQUZEO0FBR1pDLG9CQUFNRixNQUFNRSxJQUhBO0FBSVpDLG9CQUFNSCxNQUFNRyxJQUpBO0FBS1pDLHFCQUFPSixNQUFNSSxLQUxEO0FBTVpDLHNCQUFRTCxNQUFNSztBQU5GLGFBQWQ7QUFRQUwsa0JBQU1NLE9BQU4sSUFBaUJOLE1BQU1NLE9BQU4sQ0FBY0MsS0FBZCxDQUFqQjtBQUNELFdBVkQ7QUFXSVAsY0FBTVE7QUFYVixPQURBO0FBQUE7QUFESixHQURhO0FBQUEsQyIsImZpbGUiOiJTYXlCdXR0b24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tICcuL0NvbnRleHQnO1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PlxuICA8Q29udGV4dC5Db25zdW1lcj5cbiAgICB7IGNvbnRleHQgPT5cbiAgICAgIDxidXR0b24gb25DbGljaz17IGV2ZW50ID0+IHtcbiAgICAgICAgY29udGV4dC5zcGVhayh7XG4gICAgICAgICAgbGFuZzogcHJvcHMubGFuZyxcbiAgICAgICAgICBwaXRjaDogcHJvcHMucGl0Y2gsXG4gICAgICAgICAgcmF0ZTogcHJvcHMucmF0ZSxcbiAgICAgICAgICB0ZXh0OiBwcm9wcy50ZXh0LFxuICAgICAgICAgIHZvaWNlOiBwcm9wcy52b2ljZSxcbiAgICAgICAgICB2b2x1bWU6IHByb3BzLnZvbHVtZVxuICAgICAgICB9KTtcbiAgICAgICAgcHJvcHMub25DbGljayAmJiBwcm9wcy5vbkNsaWNrKGV2ZW50KTtcbiAgICAgIH0gfT5cbiAgICAgICAgeyBwcm9wcy5jaGlsZHJlbiB9XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gIDwvQ29udGV4dC5Db25zdW1lcj5cbiJdfQ==
SayButton.propTypes = {
lang: _propTypes2.default.string,
onBoundary: _propTypes2.default.func,
onEnd: _propTypes2.default.func,
onError: _propTypes2.default.func,
onStart: _propTypes2.default.func,
pitch: _propTypes2.default.number,
rate: _propTypes2.default.number,
speak: _propTypes2.default.string,
voice: _propTypes2.default.oneOfType([_propTypes2.default.any, _propTypes2.default.func]),
volume: _propTypes2.default.number
};
exports.default = SayButton;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TYXlCdXR0b24uanMiXSwibmFtZXMiOlsiU2F5QnV0dG9uIiwiY29udGV4dCIsInNwZWFrIiwibGFuZyIsInByb3BzIiwib25Cb3VuZGFyeSIsIm9uRW5kIiwib25FcnJvciIsIm9uU3RhcnQiLCJwaXRjaCIsInJhdGUiLCJ0ZXh0Iiwidm9pY2UiLCJ2b2x1bWUiLCJvbkNsaWNrIiwiZXZlbnQiLCJjaGlsZHJlbiIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJudW1iZXIiLCJvbmVPZlR5cGUiLCJhbnkiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFFQTs7Ozs7O0FBRUEsSUFBTUEsWUFBWSxTQUFaQSxTQUFZO0FBQUEsU0FDaEI7QUFBQyxxQkFBRCxDQUFTLFFBQVQ7QUFBQTtBQUNJO0FBQUEsYUFDQTtBQUFBO0FBQUEsVUFBUSxTQUFVLHdCQUFTO0FBQ3pCQyxvQkFBUUMsS0FBUixDQUFjO0FBQ1pDLG9CQUFNQyxNQUFNRCxJQURBO0FBRVpFLDBCQUFZRCxNQUFNQyxVQUZOO0FBR1pDLHFCQUFPRixNQUFNRSxLQUhEO0FBSVpDLHVCQUFTSCxNQUFNRyxPQUpIO0FBS1pDLHVCQUFTSixNQUFNSSxPQUxIO0FBTVpDLHFCQUFPTCxNQUFNSyxLQU5EO0FBT1pDLG9CQUFNTixNQUFNTSxJQVBBO0FBUVpDLG9CQUFNUCxNQUFNRixLQVJBO0FBU1pVLHFCQUFPUixNQUFNUSxLQVREO0FBVVpDLHNCQUFRVCxNQUFNUztBQVZGLGFBQWQ7QUFZQVQsa0JBQU1VLE9BQU4sSUFBaUJWLE1BQU1VLE9BQU4sQ0FBY0MsS0FBZCxDQUFqQjtBQUNELFdBZEQ7QUFlSVgsY0FBTVk7QUFmVixPQURBO0FBQUE7QUFESixHQURnQjtBQUFBLENBQWxCOztBQXVCQWhCLFVBQVVpQixTQUFWLEdBQXNCO0FBQ3BCZCxRQUFNZSxvQkFBVUMsTUFESTtBQUVwQmQsY0FBWWEsb0JBQVVFLElBRkY7QUFHcEJkLFNBQU9ZLG9CQUFVRSxJQUhHO0FBSXBCYixXQUFTVyxvQkFBVUUsSUFKQztBQUtwQlosV0FBU1Usb0JBQVVFLElBTEM7QUFNcEJYLFNBQU9TLG9CQUFVRyxNQU5HO0FBT3BCWCxRQUFNUSxvQkFBVUcsTUFQSTtBQVFwQm5CLFNBQU9nQixvQkFBVUMsTUFSRztBQVNwQlAsU0FBT00sb0JBQVVJLFNBQVYsQ0FBb0IsQ0FBQ0osb0JBQVVLLEdBQVgsRUFBZ0JMLG9CQUFVRSxJQUExQixDQUFwQixDQVRhO0FBVXBCUCxVQUFRSyxvQkFBVUc7QUFWRSxDQUF0Qjs7a0JBYWVyQixTIiwiZmlsZSI6IlNheUJ1dHRvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tICcuL0NvbnRleHQnO1xuXG5jb25zdCBTYXlCdXR0b24gPSBwcm9wcyA9PlxuICA8Q29udGV4dC5Db25zdW1lcj5cbiAgICB7IGNvbnRleHQgPT5cbiAgICAgIDxidXR0b24gb25DbGljaz17IGV2ZW50ID0+IHtcbiAgICAgICAgY29udGV4dC5zcGVhayh7XG4gICAgICAgICAgbGFuZzogcHJvcHMubGFuZyxcbiAgICAgICAgICBvbkJvdW5kYXJ5OiBwcm9wcy5vbkJvdW5kYXJ5LFxuICAgICAgICAgIG9uRW5kOiBwcm9wcy5vbkVuZCxcbiAgICAgICAgICBvbkVycm9yOiBwcm9wcy5vbkVycm9yLFxuICAgICAgICAgIG9uU3RhcnQ6IHByb3BzLm9uU3RhcnQsXG4gICAgICAgICAgcGl0Y2g6IHByb3BzLnBpdGNoLFxuICAgICAgICAgIHJhdGU6IHByb3BzLnJhdGUsXG4gICAgICAgICAgdGV4dDogcHJvcHMuc3BlYWssXG4gICAgICAgICAgdm9pY2U6IHByb3BzLnZvaWNlLFxuICAgICAgICAgIHZvbHVtZTogcHJvcHMudm9sdW1lXG4gICAgICAgIH0pO1xuICAgICAgICBwcm9wcy5vbkNsaWNrICYmIHByb3BzLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgfSB9PlxuICAgICAgICB7IHByb3BzLmNoaWxkcmVuIH1cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9Db250ZXh0LkNvbnN1bWVyPlxuXG5TYXlCdXR0b24ucHJvcFR5cGVzID0ge1xuICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkJvdW5kYXJ5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25FbmQ6IFByb3BUeXBlcy5mdW5jLFxuICBvbkVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIHBpdGNoOiBQcm9wVHlwZXMubnVtYmVyLFxuICByYXRlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBzcGVhazogUHJvcFR5cGVzLnN0cmluZyxcbiAgdm9pY2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnksIFByb3BUeXBlcy5mdW5jXSksXG4gIHZvbHVtZTogUHJvcFR5cGVzLm51bWJlclxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2F5QnV0dG9uO1xuIl19
{
"name": "react-say",
"version": "0.0.1-master.601b9a7",
"version": "0.0.1-master.66946c4",
"description": "A React component that synthesis text into speech using Web Speech API",

@@ -5,0 +5,0 @@ "keywords": [],

@@ -22,25 +22,22 @@ # react-say

```jsx
import BasicSay from 'react-say';
import Say from 'react-say';
export default props =>
<BasicSay
text="A quick brown fox jumped over the lazy dogs."
/>
<Say speak="A quick brown fox jumped over the lazy dogs." />
```
## Customizing pitch/rate
## Customizing pitch/rate/volume
You may want to customize the speech by varying pitch and rate. You can use `<Composer>` and `<Say>` to say your text.
You may want to customize the speech by varying pitch, rate, and volume. You can use `<Composer>` and `<Say>` to say your text.
```jsx
import { Composer, Say } from 'react-say';
import Say from 'react-say';
export default props =>
<Composer>
<Say
pitch={ 1.1 }
rate={ 1.5 }
text="A quick brown fox jumped over the lazy dogs."
/>
</Composer>
<Say
pitch={ 1.1 }
rate={ 1.5 }
speak="A quick brown fox jumped over the lazy dogs."
volume={ .8 }
/>
```

@@ -52,18 +49,66 @@

Since some browsers may block speak synthesis before the user interacting with the page, you can use `<SayButton>` for the purpose.
You may want to say something after the user interacted with the page, for example, after clicking on a button. We have built `<SayButton>` that speak immediately after clicking on it. Some browsers may requires "priming" with a button.
```jsx
import { Composer, SayButton } from 'react-say';
import { SayButton } from 'react-say';
export default props =>
<Composer>
<SayButton
onClick={ event => console.log(event) }
text="A quick brown fox jumped over the lazy dogs."
>
Tell me a story
</SayButton>
</Composer>
<SayButton
onClick={ event => console.log(event) }
speak="A quick brown fox jumped over the lazy dogs."
>
Tell me a story
</SayButton>
```
## Selecting voice
Instead of passing a `SpeechSynthesisVoice` object, you can pass a function `(voices: SpeechSynthesisVoice[]) => SpeechSynthesisVoice` to select the voice just before the text is synthesized.
```jsx
import Say from 'react-say';
export default props =>
<Say
speak="A quick brown fox jumped over the lazy dogs."
voice={ voices => [].find.call(voices, v => v.lang === 'zh-HK') }
/>
```
> Note: it also works with `<SayButton>`.
## Bring your own `SpeechSynthesis`
You can bring your own `window.speechSynthesis` and `window.speechSynthesisUtterance` for custom speech synthesis. For example, you can bring Azure Cognitive Services thru [`web-speech-cognitive-services`](https://npmjs.com/package/web-speech-cognitive-services') package.
```jsx
import Say from 'react-say';
import { speechSynthesis, SpeechSynthesisUtterance, SubscriptionKey } from 'web-speech-cognitive-services';
// You will need to wait until the speech token has been exchanged
// The part has been omitted for code clarity
speechSynthesis.speechToken = new SubscriptionKey('your subscription key');
export default props =>
<Say
speak="A quick brown fox jumped over the lazy dogs."
speechSynthesis={ speechSynthesis }
speechSynthesisUtterance={ SpeechSynthesisUtterance }
voice={ voices => [].find.call(voices, v => v.lang === 'zh-HK') }
/>
```
> Note: `speechSynthesis` is camel-casing because it is an instance.
# Caveats
* If `<Say>` or `<SayButton>` is unmounted, the utterance will continue to speak
* Web Speech does not support stopping or dequeueing a pending utterance, only to cancel all utterances at once
* Since the utterance is already queued, speaking, or spoken, we cannot stop it and not cancelling other "innocent" utterance
* We decided to let it continue but not firing any events after unmount
# Roadmap
* [ ] Prettify playground page
# Contributions

@@ -70,0 +115,0 @@