@micromag/screen-conversation 0.3.390 → 0.3.396

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 (3) hide show
  1. package/es/index.js +32 -6
  2. package/lib/index.js +32 -6
  3. package/package.json +13 -13
package/es/index.js CHANGED
@@ -176,6 +176,7 @@ var propTypes = {
176
176
  // layout: PropTypes.oneOf(['normal']),
177
177
  title: PropTypes.headingElement,
178
178
  timing: PropTypes$1.oneOf(['instant', 'sequence']),
179
+ readingSpeed: PropTypes$1.number,
179
180
  spacing: PropTypes$1.number,
180
181
  background: PropTypes.backgroundElement,
181
182
  header: PropTypes.header,
@@ -191,6 +192,7 @@ var defaultProps = {
191
192
  // layout: 'normal',
192
193
  title: null,
193
194
  timing: 'sequence',
195
+ readingSpeed: 255,
194
196
  spacing: 20,
195
197
  background: null,
196
198
  header: null,
@@ -206,6 +208,7 @@ var ConversationScreen = function ConversationScreen(_ref) {
206
208
  var _ref6;
207
209
  var title = _ref.title,
208
210
  timingMode = _ref.timing,
211
+ readingSpeed = _ref.readingSpeed,
209
212
  spacing = _ref.spacing,
210
213
  background = _ref.background,
211
214
  header = _ref.header,
@@ -283,25 +286,37 @@ var ConversationScreen = function ConversationScreen(_ref) {
283
286
  }, [conversationState, setConversationState]);
284
287
 
285
288
  // sequence timings
286
- var defaultTimingFactor = 40;
287
289
  var defaultHesitationDelay = 1000;
290
+ var imageReadDelay = 5000; // 5 seconds
291
+ var millisecondsPerWord = 60 * 1000 / readingSpeed;
288
292
  var filteredMessages = (messages || []).filter(function (m) {
289
293
  return m !== null;
290
294
  });
291
295
  var timings = filteredMessages.map(function (messageParams, messageI) {
292
296
  var _ref3 = messageParams || {},
293
297
  _ref3$timing = _ref3.timing,
294
- timing = _ref3$timing === void 0 ? null : _ref3$timing,
295
- _ref3$message = _ref3.message,
296
- message = _ref3$message === void 0 ? null : _ref3$message;
298
+ timing = _ref3$timing === void 0 ? null : _ref3$timing;
299
+ _ref3.message;
297
300
  if (timing !== null) {
298
301
  return timing;
299
302
  }
300
303
  if (messageI === 0) {
301
304
  return 0;
302
305
  }
303
- var finalTime = defaultTimingFactor * ((message || '').length || 10);
304
- return finalTime < 2000 ? finalTime : 2000;
306
+
307
+ // the trick here is to estimate "how long it take to read the previous message"
308
+ // instead of "how long does it take to write this message".
309
+ var previous = filteredMessages[messageI - 1];
310
+
311
+ // counting words: only keep whitespaces and alphanumeric characters, then split of whitespaces
312
+ var wordCount = previous.message.replace(/[^\w\d\s]/g, '').trim().split(/\s/g).length;
313
+ var finalTimeMs = wordCount * millisecondsPerWord;
314
+
315
+ // if the message includes an image, add some more time to "read" it
316
+ if (previous.image) {
317
+ finalTimeMs += imageReadDelay;
318
+ }
319
+ return Math.max(finalTimeMs, 2000);
305
320
  });
306
321
  var hesitationTimings = filteredMessages.map(function () {
307
322
  var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@@ -509,6 +524,17 @@ var definition = {
509
524
  "value": "Conversation"
510
525
  }]
511
526
  })
527
+ }, {
528
+ name: 'readingSpeed',
529
+ type: 'number',
530
+ defaultValue: 255,
531
+ label: defineMessage({
532
+ id: "QjbLZ9",
533
+ defaultMessage: [{
534
+ "type": 0,
535
+ "value": "Reading speed (in Words Per Minute)"
536
+ }]
537
+ })
512
538
  }, {
513
539
  name: 'background',
514
540
  type: 'background',
package/lib/index.js CHANGED
@@ -199,6 +199,7 @@ var propTypes = {
199
199
  // layout: PropTypes.oneOf(['normal']),
200
200
  title: core.PropTypes.headingElement,
201
201
  timing: PropTypes__default["default"].oneOf(['instant', 'sequence']),
202
+ readingSpeed: PropTypes__default["default"].number,
202
203
  spacing: PropTypes__default["default"].number,
203
204
  background: core.PropTypes.backgroundElement,
204
205
  header: core.PropTypes.header,
@@ -214,6 +215,7 @@ var defaultProps = {
214
215
  // layout: 'normal',
215
216
  title: null,
216
217
  timing: 'sequence',
218
+ readingSpeed: 255,
217
219
  spacing: 20,
218
220
  background: null,
219
221
  header: null,
@@ -229,6 +231,7 @@ var ConversationScreen = function ConversationScreen(_ref) {
229
231
  var _ref6;
230
232
  var title = _ref.title,
231
233
  timingMode = _ref.timing,
234
+ readingSpeed = _ref.readingSpeed,
232
235
  spacing = _ref.spacing,
233
236
  background = _ref.background,
234
237
  header = _ref.header,
@@ -306,25 +309,37 @@ var ConversationScreen = function ConversationScreen(_ref) {
306
309
  }, [conversationState, setConversationState]);
307
310
 
308
311
  // sequence timings
309
- var defaultTimingFactor = 40;
310
312
  var defaultHesitationDelay = 1000;
313
+ var imageReadDelay = 5000; // 5 seconds
314
+ var millisecondsPerWord = 60 * 1000 / readingSpeed;
311
315
  var filteredMessages = (messages || []).filter(function (m) {
312
316
  return m !== null;
313
317
  });
314
318
  var timings = filteredMessages.map(function (messageParams, messageI) {
315
319
  var _ref3 = messageParams || {},
316
320
  _ref3$timing = _ref3.timing,
317
- timing = _ref3$timing === void 0 ? null : _ref3$timing,
318
- _ref3$message = _ref3.message,
319
- message = _ref3$message === void 0 ? null : _ref3$message;
321
+ timing = _ref3$timing === void 0 ? null : _ref3$timing;
322
+ _ref3.message;
320
323
  if (timing !== null) {
321
324
  return timing;
322
325
  }
323
326
  if (messageI === 0) {
324
327
  return 0;
325
328
  }
326
- var finalTime = defaultTimingFactor * ((message || '').length || 10);
327
- return finalTime < 2000 ? finalTime : 2000;
329
+
330
+ // the trick here is to estimate "how long it take to read the previous message"
331
+ // instead of "how long does it take to write this message".
332
+ var previous = filteredMessages[messageI - 1];
333
+
334
+ // counting words: only keep whitespaces and alphanumeric characters, then split of whitespaces
335
+ var wordCount = previous.message.replace(/[^\w\d\s]/g, '').trim().split(/\s/g).length;
336
+ var finalTimeMs = wordCount * millisecondsPerWord;
337
+
338
+ // if the message includes an image, add some more time to "read" it
339
+ if (previous.image) {
340
+ finalTimeMs += imageReadDelay;
341
+ }
342
+ return Math.max(finalTimeMs, 2000);
328
343
  });
329
344
  var hesitationTimings = filteredMessages.map(function () {
330
345
  var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@@ -532,6 +547,17 @@ var definition = {
532
547
  "value": "Conversation"
533
548
  }]
534
549
  })
550
+ }, {
551
+ name: 'readingSpeed',
552
+ type: 'number',
553
+ defaultValue: 255,
554
+ label: reactIntl.defineMessage({
555
+ id: "QjbLZ9",
556
+ defaultMessage: [{
557
+ "type": 0,
558
+ "value": "Reading speed (in Words Per Minute)"
559
+ }]
560
+ })
535
561
  }, {
536
562
  name: 'background',
537
563
  type: 'background',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/screen-conversation",
3
- "version": "0.3.390",
3
+ "version": "0.3.396",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "keywords": [
@@ -50,17 +50,17 @@
50
50
  },
51
51
  "dependencies": {
52
52
  "@babel/runtime": "^7.13.10",
53
- "@micromag/core": "^0.3.390",
54
- "@micromag/element-background": "^0.3.390",
55
- "@micromag/element-container": "^0.3.390",
56
- "@micromag/element-footer": "^0.3.390",
57
- "@micromag/element-header": "^0.3.390",
58
- "@micromag/element-heading": "^0.3.390",
59
- "@micromag/element-layout": "^0.3.390",
60
- "@micromag/element-scroll": "^0.3.390",
61
- "@micromag/element-text": "^0.3.390",
62
- "@micromag/element-visual": "^0.3.390",
63
- "@micromag/transforms": "^0.3.390",
53
+ "@micromag/core": "^0.3.396",
54
+ "@micromag/element-background": "^0.3.396",
55
+ "@micromag/element-container": "^0.3.396",
56
+ "@micromag/element-footer": "^0.3.396",
57
+ "@micromag/element-header": "^0.3.396",
58
+ "@micromag/element-heading": "^0.3.396",
59
+ "@micromag/element-layout": "^0.3.396",
60
+ "@micromag/element-scroll": "^0.3.396",
61
+ "@micromag/element-text": "^0.3.396",
62
+ "@micromag/element-visual": "^0.3.396",
63
+ "@micromag/transforms": "^0.3.396",
64
64
  "classnames": "^2.2.6",
65
65
  "lodash": "^4.17.21",
66
66
  "prop-types": "^15.7.2",
@@ -71,5 +71,5 @@
71
71
  "access": "public",
72
72
  "registry": "https://registry.npmjs.org/"
73
73
  },
74
- "gitHead": "d310ff6071a34b84d9311f0e02a6862fb836abef"
74
+ "gitHead": "6f09831a86f03a570096ccc769aa2ecb3bcba693"
75
75
  }