@magmamath/students-features 0.9.112-rc.standard-0 → 0.9.112

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 (196) hide show
  1. package/dist/commonjs/features/chatbot/TTS_HIGHLIGHTING.md +69 -58
  2. package/dist/commonjs/features/chatbot/components/Chat/Chat.js +32 -21
  3. package/dist/commonjs/features/chatbot/components/Chat/Chat.js.map +1 -1
  4. package/dist/commonjs/features/chatbot/components/ChatMessage/ChatMessage.js.map +1 -1
  5. package/dist/commonjs/features/chatbot/components/ChatMessage/MessageContent.js +16 -4
  6. package/dist/commonjs/features/chatbot/components/ChatMessage/MessageContent.js.map +1 -1
  7. package/dist/commonjs/features/chatbot/components/ChatMessage/ReceivedMessage.js +6 -2
  8. package/dist/commonjs/features/chatbot/components/ChatMessage/ReceivedMessage.js.map +1 -1
  9. package/dist/commonjs/features/chatbot/components/Chatbot.js +4 -2
  10. package/dist/commonjs/features/chatbot/components/Chatbot.js.map +1 -1
  11. package/dist/commonjs/features/chatbot/constants.js +2 -1
  12. package/dist/commonjs/features/chatbot/constants.js.map +1 -1
  13. package/dist/commonjs/features/chatbot/helpers/ttsHighlight.js +29 -0
  14. package/dist/commonjs/features/chatbot/helpers/ttsHighlight.js.map +1 -0
  15. package/dist/commonjs/features/chatbot/model/ChatBotModel.js +7 -5
  16. package/dist/commonjs/features/chatbot/model/ChatBotModel.js.map +1 -1
  17. package/dist/commonjs/features/chatbot/model/ChatTTSHighlightModel.js +56 -0
  18. package/dist/commonjs/features/chatbot/model/ChatTTSHighlightModel.js.map +1 -0
  19. package/dist/commonjs/features/chatbot/model/ChatTTSModel.js +154 -0
  20. package/dist/commonjs/features/chatbot/model/ChatTTSModel.js.map +1 -0
  21. package/dist/commonjs/features/chatbot/types/model.types.js.map +1 -1
  22. package/dist/commonjs/features/chatbot/types/t2s.types.js.map +1 -1
  23. package/dist/commonjs/features/openEnded/components/OpenEndedAttemptsLimit.js +34 -0
  24. package/dist/commonjs/features/openEnded/components/OpenEndedAttemptsLimit.js.map +1 -0
  25. package/dist/commonjs/features/openEnded/components/OpenEndedScoreLabel.js +77 -0
  26. package/dist/commonjs/features/openEnded/components/OpenEndedScoreLabel.js.map +1 -0
  27. package/dist/commonjs/features/openEnded/index.js +48 -0
  28. package/dist/commonjs/features/openEnded/index.js.map +1 -0
  29. package/dist/commonjs/features/openEnded/oe.helpers.js +26 -0
  30. package/dist/commonjs/features/openEnded/oe.helpers.js.map +1 -0
  31. package/dist/commonjs/features/openEnded/oe.types.js +14 -0
  32. package/dist/commonjs/features/openEnded/oe.types.js.map +1 -0
  33. package/dist/commonjs/index.js +13 -1
  34. package/dist/commonjs/index.js.map +1 -1
  35. package/dist/commonjs/shared/common.constants.js +9 -0
  36. package/dist/commonjs/shared/common.constants.js.map +1 -0
  37. package/dist/commonjs/types/common.types.js +4 -0
  38. package/dist/module/features/chatbot/TTS_HIGHLIGHTING.md +69 -58
  39. package/dist/module/features/chatbot/components/Chat/Chat.js +32 -21
  40. package/dist/module/features/chatbot/components/Chat/Chat.js.map +1 -1
  41. package/dist/module/features/chatbot/components/ChatMessage/ChatMessage.js.map +1 -1
  42. package/dist/module/features/chatbot/components/ChatMessage/MessageContent.js +16 -4
  43. package/dist/module/features/chatbot/components/ChatMessage/MessageContent.js.map +1 -1
  44. package/dist/module/features/chatbot/components/ChatMessage/ReceivedMessage.js +6 -2
  45. package/dist/module/features/chatbot/components/ChatMessage/ReceivedMessage.js.map +1 -1
  46. package/dist/module/features/chatbot/components/Chatbot.js +4 -2
  47. package/dist/module/features/chatbot/components/Chatbot.js.map +1 -1
  48. package/dist/module/features/chatbot/constants.js +1 -0
  49. package/dist/module/features/chatbot/constants.js.map +1 -1
  50. package/dist/module/features/chatbot/helpers/ttsHighlight.js +23 -0
  51. package/dist/module/features/chatbot/helpers/ttsHighlight.js.map +1 -0
  52. package/dist/module/features/chatbot/index.js.map +1 -1
  53. package/dist/module/features/chatbot/model/ChatBotModel.js +7 -5
  54. package/dist/module/features/chatbot/model/ChatBotModel.js.map +1 -1
  55. package/dist/module/features/chatbot/model/ChatTTSHighlightModel.js +52 -0
  56. package/dist/module/features/chatbot/model/ChatTTSHighlightModel.js.map +1 -0
  57. package/dist/module/features/chatbot/model/ChatTTSModel.js +149 -0
  58. package/dist/module/features/chatbot/model/ChatTTSModel.js.map +1 -0
  59. package/dist/module/features/chatbot/types/model.types.js.map +1 -1
  60. package/dist/module/features/chatbot/types/t2s.types.js.map +1 -1
  61. package/dist/module/features/openEnded/components/OpenEndedAttemptsLimit.js +28 -0
  62. package/dist/module/features/openEnded/components/OpenEndedAttemptsLimit.js.map +1 -0
  63. package/dist/module/features/openEnded/components/OpenEndedScoreLabel.js +71 -0
  64. package/dist/module/features/openEnded/components/OpenEndedScoreLabel.js.map +1 -0
  65. package/dist/module/features/openEnded/index.js +7 -0
  66. package/dist/module/features/openEnded/index.js.map +1 -0
  67. package/dist/module/features/openEnded/oe.helpers.js +21 -0
  68. package/dist/module/features/openEnded/oe.helpers.js.map +1 -0
  69. package/dist/module/features/openEnded/oe.types.js +10 -0
  70. package/dist/module/features/openEnded/oe.types.js.map +1 -0
  71. package/dist/module/index.js +1 -0
  72. package/dist/module/index.js.map +1 -1
  73. package/dist/module/shared/common.constants.js +5 -0
  74. package/dist/module/shared/common.constants.js.map +1 -0
  75. package/dist/module/types/common.types.js +2 -0
  76. package/dist/typescript/commonjs/features/chatbot/components/Chat/Chat.d.ts +3 -1
  77. package/dist/typescript/commonjs/features/chatbot/components/Chat/Chat.d.ts.map +1 -1
  78. package/dist/typescript/commonjs/features/chatbot/components/ChatMessage/ChatMessage.d.ts +3 -1
  79. package/dist/typescript/commonjs/features/chatbot/components/ChatMessage/ChatMessage.d.ts.map +1 -1
  80. package/dist/typescript/commonjs/features/chatbot/components/ChatMessage/MessageContent.d.ts +4 -2
  81. package/dist/typescript/commonjs/features/chatbot/components/ChatMessage/MessageContent.d.ts.map +1 -1
  82. package/dist/typescript/commonjs/features/chatbot/components/ChatMessage/ReceivedMessage.d.ts +1 -1
  83. package/dist/typescript/commonjs/features/chatbot/components/ChatMessage/ReceivedMessage.d.ts.map +1 -1
  84. package/dist/typescript/commonjs/features/chatbot/components/Chatbot.d.ts +3 -1
  85. package/dist/typescript/commonjs/features/chatbot/components/Chatbot.d.ts.map +1 -1
  86. package/dist/typescript/commonjs/features/chatbot/constants.d.ts +1 -0
  87. package/dist/typescript/commonjs/features/chatbot/constants.d.ts.map +1 -1
  88. package/dist/typescript/commonjs/features/chatbot/helpers/ttsHighlight.d.ts +8 -0
  89. package/dist/typescript/commonjs/features/chatbot/helpers/ttsHighlight.d.ts.map +1 -0
  90. package/dist/typescript/commonjs/features/chatbot/index.d.ts +1 -1
  91. package/dist/typescript/commonjs/features/chatbot/index.d.ts.map +1 -1
  92. package/dist/typescript/commonjs/features/chatbot/model/ChatBotModel.d.ts +3 -2
  93. package/dist/typescript/commonjs/features/chatbot/model/ChatBotModel.d.ts.map +1 -1
  94. package/dist/typescript/commonjs/features/chatbot/model/ChatTTSHighlightModel.d.ts +25 -0
  95. package/dist/typescript/commonjs/features/chatbot/model/ChatTTSHighlightModel.d.ts.map +1 -0
  96. package/dist/typescript/commonjs/features/chatbot/model/ChatTTSModel.d.ts +38 -0
  97. package/dist/typescript/commonjs/features/chatbot/model/ChatTTSModel.d.ts.map +1 -0
  98. package/dist/typescript/commonjs/features/chatbot/types/api.types.d.ts +2 -0
  99. package/dist/typescript/commonjs/features/chatbot/types/api.types.d.ts.map +1 -1
  100. package/dist/typescript/commonjs/features/chatbot/types/model.types.d.ts +1 -8
  101. package/dist/typescript/commonjs/features/chatbot/types/model.types.d.ts.map +1 -1
  102. package/dist/typescript/commonjs/features/chatbot/types/t2s.types.d.ts +25 -0
  103. package/dist/typescript/commonjs/features/chatbot/types/t2s.types.d.ts.map +1 -1
  104. package/dist/typescript/commonjs/features/openEnded/components/OpenEndedAttemptsLimit.d.ts +7 -0
  105. package/dist/typescript/commonjs/features/openEnded/components/OpenEndedAttemptsLimit.d.ts.map +1 -0
  106. package/dist/typescript/commonjs/features/openEnded/components/OpenEndedScoreLabel.d.ts +12 -0
  107. package/dist/typescript/commonjs/features/openEnded/components/OpenEndedScoreLabel.d.ts.map +1 -0
  108. package/dist/typescript/commonjs/features/openEnded/index.d.ts +5 -0
  109. package/dist/typescript/commonjs/features/openEnded/index.d.ts.map +1 -0
  110. package/dist/typescript/commonjs/features/openEnded/oe.helpers.d.ts +13 -0
  111. package/dist/typescript/commonjs/features/openEnded/oe.helpers.d.ts.map +1 -0
  112. package/dist/typescript/commonjs/features/openEnded/oe.types.d.ts +7 -0
  113. package/dist/typescript/commonjs/features/openEnded/oe.types.d.ts.map +1 -0
  114. package/dist/typescript/commonjs/index.d.ts +1 -0
  115. package/dist/typescript/commonjs/index.d.ts.map +1 -1
  116. package/dist/typescript/commonjs/shared/common.constants.d.ts +2 -0
  117. package/dist/typescript/commonjs/shared/common.constants.d.ts.map +1 -0
  118. package/dist/typescript/commonjs/types/common.types.d.ts +2 -0
  119. package/dist/typescript/commonjs/types/common.types.d.ts.map +1 -1
  120. package/dist/typescript/module/features/chatbot/components/Chat/Chat.d.ts +3 -1
  121. package/dist/typescript/module/features/chatbot/components/Chat/Chat.d.ts.map +1 -1
  122. package/dist/typescript/module/features/chatbot/components/ChatMessage/ChatMessage.d.ts +3 -1
  123. package/dist/typescript/module/features/chatbot/components/ChatMessage/ChatMessage.d.ts.map +1 -1
  124. package/dist/typescript/module/features/chatbot/components/ChatMessage/MessageContent.d.ts +4 -2
  125. package/dist/typescript/module/features/chatbot/components/ChatMessage/MessageContent.d.ts.map +1 -1
  126. package/dist/typescript/module/features/chatbot/components/ChatMessage/ReceivedMessage.d.ts +1 -1
  127. package/dist/typescript/module/features/chatbot/components/ChatMessage/ReceivedMessage.d.ts.map +1 -1
  128. package/dist/typescript/module/features/chatbot/components/Chatbot.d.ts +3 -1
  129. package/dist/typescript/module/features/chatbot/components/Chatbot.d.ts.map +1 -1
  130. package/dist/typescript/module/features/chatbot/constants.d.ts +1 -0
  131. package/dist/typescript/module/features/chatbot/constants.d.ts.map +1 -1
  132. package/dist/typescript/module/features/chatbot/helpers/ttsHighlight.d.ts +8 -0
  133. package/dist/typescript/module/features/chatbot/helpers/ttsHighlight.d.ts.map +1 -0
  134. package/dist/typescript/module/features/chatbot/index.d.ts +1 -1
  135. package/dist/typescript/module/features/chatbot/index.d.ts.map +1 -1
  136. package/dist/typescript/module/features/chatbot/model/ChatBotModel.d.ts +3 -2
  137. package/dist/typescript/module/features/chatbot/model/ChatBotModel.d.ts.map +1 -1
  138. package/dist/typescript/module/features/chatbot/model/ChatTTSHighlightModel.d.ts +25 -0
  139. package/dist/typescript/module/features/chatbot/model/ChatTTSHighlightModel.d.ts.map +1 -0
  140. package/dist/typescript/module/features/chatbot/model/ChatTTSModel.d.ts +38 -0
  141. package/dist/typescript/module/features/chatbot/model/ChatTTSModel.d.ts.map +1 -0
  142. package/dist/typescript/module/features/chatbot/types/api.types.d.ts +2 -0
  143. package/dist/typescript/module/features/chatbot/types/api.types.d.ts.map +1 -1
  144. package/dist/typescript/module/features/chatbot/types/model.types.d.ts +1 -8
  145. package/dist/typescript/module/features/chatbot/types/model.types.d.ts.map +1 -1
  146. package/dist/typescript/module/features/chatbot/types/t2s.types.d.ts +25 -0
  147. package/dist/typescript/module/features/chatbot/types/t2s.types.d.ts.map +1 -1
  148. package/dist/typescript/module/features/openEnded/components/OpenEndedAttemptsLimit.d.ts +7 -0
  149. package/dist/typescript/module/features/openEnded/components/OpenEndedAttemptsLimit.d.ts.map +1 -0
  150. package/dist/typescript/module/features/openEnded/components/OpenEndedScoreLabel.d.ts +12 -0
  151. package/dist/typescript/module/features/openEnded/components/OpenEndedScoreLabel.d.ts.map +1 -0
  152. package/dist/typescript/module/features/openEnded/index.d.ts +5 -0
  153. package/dist/typescript/module/features/openEnded/index.d.ts.map +1 -0
  154. package/dist/typescript/module/features/openEnded/oe.helpers.d.ts +13 -0
  155. package/dist/typescript/module/features/openEnded/oe.helpers.d.ts.map +1 -0
  156. package/dist/typescript/module/features/openEnded/oe.types.d.ts +7 -0
  157. package/dist/typescript/module/features/openEnded/oe.types.d.ts.map +1 -0
  158. package/dist/typescript/module/index.d.ts +1 -0
  159. package/dist/typescript/module/index.d.ts.map +1 -1
  160. package/dist/typescript/module/shared/common.constants.d.ts +2 -0
  161. package/dist/typescript/module/shared/common.constants.d.ts.map +1 -0
  162. package/dist/typescript/module/types/common.types.d.ts +2 -0
  163. package/dist/typescript/module/types/common.types.d.ts.map +1 -1
  164. package/package.json +1 -1
  165. package/src/features/chatbot/TTS_HIGHLIGHTING.md +69 -58
  166. package/src/features/chatbot/components/Chat/Chat.tsx +36 -21
  167. package/src/features/chatbot/components/ChatMessage/ChatMessage.tsx +3 -1
  168. package/src/features/chatbot/components/ChatMessage/MessageContent.tsx +25 -3
  169. package/src/features/chatbot/components/ChatMessage/ReceivedMessage.tsx +4 -0
  170. package/src/features/chatbot/components/Chatbot.tsx +4 -0
  171. package/src/features/chatbot/constants.ts +2 -0
  172. package/src/features/chatbot/helpers/ttsHighlight.ts +25 -0
  173. package/src/features/chatbot/index.ts +1 -1
  174. package/src/features/chatbot/model/ChatBotModel.ts +10 -5
  175. package/src/features/chatbot/model/ChatTTSHighlightModel.ts +64 -0
  176. package/src/features/chatbot/model/ChatTTSModel.ts +168 -0
  177. package/src/features/chatbot/types/api.types.ts +1 -3
  178. package/src/features/chatbot/types/model.types.ts +1 -9
  179. package/src/features/chatbot/types/t2s.types.ts +33 -0
  180. package/src/features/openEnded/components/OpenEndedAttemptsLimit.tsx +26 -0
  181. package/src/features/openEnded/components/OpenEndedScoreLabel.tsx +81 -0
  182. package/src/features/openEnded/index.ts +4 -0
  183. package/src/features/openEnded/oe.helpers.ts +31 -0
  184. package/src/features/openEnded/oe.types.ts +6 -0
  185. package/src/index.ts +1 -0
  186. package/src/shared/common.constants.ts +3 -0
  187. package/src/types/common.types.ts +4 -0
  188. package/dist/commonjs/features/chatbot/model/t2s.js +0 -107
  189. package/dist/commonjs/features/chatbot/model/t2s.js.map +0 -1
  190. package/dist/module/features/chatbot/model/t2s.js +0 -102
  191. package/dist/module/features/chatbot/model/t2s.js.map +0 -1
  192. package/dist/typescript/commonjs/features/chatbot/model/t2s.d.ts +0 -34
  193. package/dist/typescript/commonjs/features/chatbot/model/t2s.d.ts.map +0 -1
  194. package/dist/typescript/module/features/chatbot/model/t2s.d.ts +0 -34
  195. package/dist/typescript/module/features/chatbot/model/t2s.d.ts.map +0 -1
  196. package/src/features/chatbot/model/t2s.ts +0 -123
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- Word-by-word text highlighting synchronized with text-to-speech playback in the chatbot. The feature is optional and enabled via props.
5
+ Word-by-word text highlighting synchronized with text-to-speech playback in the chatbot. The feature is optional and enabled via `isWordHighlightEnabled` config flag.
6
6
 
7
7
  ## How It Works
8
8
 
@@ -18,7 +18,7 @@ Word-by-word text highlighting synchronized with text-to-speech playback in the
18
18
  │ [{ markName: "w_0", timeSeconds: 0.0 }, │
19
19
  │ { markName: "w_1", timeSeconds: 0.5 }] │
20
20
  │ ↓ │
21
- │ 4. Audio plays, ontimeupdate fires (~4x/sec)
21
+ │ 4. Audio plays, onTimeUpdate fires via RAF loop
22
22
  │ ↓ │
23
23
  │ 5. Current time → find matching timepoint → word index │
24
24
  │ ↓ │
@@ -33,77 +33,88 @@ Word-by-word text highlighting synchronized with text-to-speech playback in the
33
33
  chatModel.bot.setUpT2S({
34
34
  audioProvider: createT2SAudioProvider(),
35
35
  textSanitizer: removeKatexPartFromTextToSpeech,
36
- isHighlightEnabled: true, // Enable highlighting
36
+ isWordHighlightEnabled: true,
37
37
  })
38
-
39
- // In component
40
- <Chatbot
41
- model={chatModel.bot}
42
- isHighlightEnabled={true}
43
- highlightConfig={{
44
- MessageRenderer: ChatbotHighlightedMessage,
45
- }}
46
- />
47
38
  ```
48
39
 
49
- ## Files Modified
40
+ ## Architecture
50
41
 
51
- ### students-features
42
+ ### ChatTTSModel (ChatTTSModel.ts)
52
43
 
53
- | File | Changes |
54
- |------|---------|
55
- | `types/t2s.types.ts` | Added `onTimeUpdate`, `getCurrentTime` to AudioProvider; added `HighlightConfig` type |
56
- | `types/api.types.ts` | Added `ssml` option to GoogleText2SpeechPayload input |
57
- | `helpers/textToSSML.ts` | NEW - Converts text to SSML with word marks |
58
- | `model/t2s.ts` | Added `$highlightedWordIndex`, `$timepoints`, `$time` stores; SSML/timepoint handling |
59
- | `components/Chatbot.tsx` | Added `isHighlightEnabled`, `highlightConfig` props |
60
- | `components/Chat/Chat.tsx` | Passes highlight state to ChatMessage |
61
- | `components/ChatMessage/*` | Passes highlight props through component chain |
62
- | `components/ChatMessage/MessageContent.tsx` | Renders custom MessageRenderer when provided |
63
-
64
- ### students-web
65
-
66
- | File | Changes |
67
- |------|---------|
68
- | `chatbot/helpers.ts` | Added `onTimeUpdate`, `getCurrentTime` to AudioProvider |
69
- | `chatbot/components/ChatbotHighlightedMessage.tsx` | NEW - Renders words with highlight styling |
70
- | `chatbot/components/ChatbotHighlightedMessage.module.scss` | NEW - Yellow highlight styles |
71
- | `chatbot/model/model.ts` | Enabled `isHighlightEnabled: true` |
72
- | `PracticeMode/chatbot/PracticeChatbot.tsx` | Passes highlightConfig with MessageRenderer |
73
-
74
- ## Key Components
75
-
76
- ### textToSSML (students-features)
77
- ```ts
78
- textToSSML("Hello world")
79
- // → '<speak><mark name="w_0"/>Hello <mark name="w_1"/>world</speak>'
80
- ```
44
+ Handles TTS playback and word highlighting. Key design decisions:
81
45
 
82
- ### $highlightedWordIndex (students-features)
83
- Effector store that computes current word index from timepoints + playback time.
46
+ - **Map-based cache** — `audioCache: Map<string, AudioCache>` stores both `audioPath` and `timepoints` per message. When highlighting is off, `timepoints` is `[]`. Cache lives for the model's lifetime (cleared when user leaves the problem).
47
+ - **`fetchAudio()` method** encapsulates API call + audioContent decoding. Highlight vs non-highlight differences are ternaries (SSML vs plain text, `enableTimePointing`).
48
+ - **`play()` is linear** — cache lookup → fetch if miss → store → activate highlight if enabled → play audio. No branching between highlight/non-highlight paths.
49
+ - **Pause/resume guards** — `wordHighlightEnabled` check before toggling `setIsActive(false)`/`setIsActive(true)` on pause/resume.
50
+ - **`wordHighlightEnabled` (private)** — stored result of `!!isWordHighlightEnabled && !!audioProvider.onTimeUpdate`. Set once at `setConfig`.
51
+ - **`isWordHighlightEnabled` (public getter)** — read-only access for external consumers (e.g. `Chat.tsx`).
84
52
 
85
- ### ChatbotHighlightedMessage (students-web)
86
- ```tsx
87
- // Splits text, highlights word at highlightedIndex
88
- <span className={isHighlighted ? styles.Highlighted : undefined}>
89
- {word}
90
- </span>
53
+ ### AudioProvider type
54
+
55
+ ```typescript
56
+ type AudioProvider = {
57
+ play: (audioPath: string, onPlaybackComplete: () => void) => Promise<void>
58
+ pause: () => void
59
+ resume: () => void
60
+ stop: () => void
61
+ onTimeUpdate?: OnTimeUpdate // optional — presence enables highlight capability
62
+ }
91
63
  ```
92
64
 
65
+ `onTimeUpdate` is optional. It's the mechanism that syncs audio playback time with word highlights via a RAF loop. If the provider doesn't have it, highlighting won't activate even if `isWordHighlightEnabled: true`.
66
+
67
+ ### ChatTTSHighlightModel (ChatTTSHighlightModel.ts)
68
+
69
+ Manages highlight state using Effector stores with declarative reset. Receives `OnTimeUpdate` callback directly (not the whole `AudioProvider`).
70
+
71
+ - **`$isActive`** — gates `$highlightedWordIndex` computation. Toggled on pause/resume without resetting timepoints.
72
+ - **`$highlightedWordIndex`** — derived store, returns `-1` when inactive or no match. Parses mark name via `WORD_MARK_REGEX`.
73
+ - **`activate(timepoints, onTimeUpdate)`** — sets timepoints, enables highlighting, registers time update callback. Only triggers store updates when the highlighted word actually changes (`lastMark` comparison).
74
+ - **`deactivate(onTimeUpdate)`** — stops listening, resets all state via declarative `.reset()` chain.
75
+ - **All stores use `.reset(this.reset)`** — single `reset` event clears `$time`, `$timepoints`, and `$isActive`.
76
+
77
+ ### Helpers (helpers/ttsHighlight.ts)
78
+
79
+ - **`textToSSML(text)`** — converts plain text to SSML with `<mark>` tags for word timing.
80
+ - **`findCurrentMark(timepoints, time)`** — iterates backwards through timepoints to find the current mark. Efficient for linear playback.
81
+
82
+ ### Constants (constants.ts)
83
+
84
+ - **`WORD_MARK_REGEX`** — `/^w_(\d+)$/` — extracts word index from mark names like `w_0`, `w_1`.
85
+
86
+ ### Naming conventions
87
+
88
+ | Name | Scope | Purpose |
89
+ |------|-------|---------|
90
+ | `wordHighlight` | public instance | `ChatTTSHighlightModel` instance on `ChatTTSModel` |
91
+ | `wordHighlightEnabled` | private field | Whether highlighting is active (set once at config) |
92
+ | `isWordHighlightEnabled` | public getter | Read-only access to `wordHighlightEnabled` for external consumers |
93
+ | `isWordHighlightEnabled` | T2SConfig field | Config flag passed to `setUpT2S()` |
94
+
93
95
  ## Data Flow
94
96
 
95
97
  ```
96
- AudioProvider.onTimeUpdate(time)
97
-
98
- t2s.setTime(time)
98
+ AudioProvider.onTimeUpdate(callback)
99
99
 
100
- $highlightedWordIndex = findCurrentMark(timepoints, time) → parse index
100
+ ChatTTSHighlightModel.activate(timepoints, onTimeUpdate)
101
101
 
102
- Chat.tsx: useUnit(model.t2s.$highlightedWordIndex)
102
+ RAF loop → audio.currentTime → findCurrentMark() → only updates when mark changes
103
103
 
104
- ChatMessage ReceivedMessageMessageContent
104
+ $highlightedWordIndex = parse mark name "w_N" N (or -1 if inactive/no match)
105
105
 
106
- MessageRenderer({ text, highlightedIndex })
106
+ Chat.tsx: model.t2s.isWordHighlightEnabled && isPlayingMessage ? highlightedWordIndex : -1
107
107
 
108
- ChatbotHighlightedMessage renders highlighted word
108
+ ChatMessage MessageContent → TTSHighlightRenderer({ text, highlightedIndex })
109
109
  ```
110
+
111
+ ## Key Files
112
+
113
+ | File | Purpose |
114
+ |------|---------|
115
+ | `model/ChatTTSModel.ts` | `ChatTTSModel` — TTS playback, caching, highlight orchestration |
116
+ | `model/ChatTTSHighlightModel.ts` | Highlight state — timepoints, current time, `$isActive`, derived word index |
117
+ | `helpers/ttsHighlight.ts` | `textToSSML` + `findCurrentMark` — SSML conversion and playback position lookup |
118
+ | `constants.ts` | `WORD_MARK_REGEX` and audio config defaults |
119
+ | `types/t2s.types.ts` | `AudioProvider`, `OnTimeUpdate`, `AudioStatus`, `AudioCache`, `TTSHighlightRendererProps` types |
120
+ | `components/Chat/Chat.tsx` | Reads `isWordHighlightEnabled` and `$highlightedWordIndex`, passes to messages |
@@ -27,16 +27,18 @@ const Chat = ({
27
27
  isTextToSpeechEnabled,
28
28
  isInputDisabled,
29
29
  colorScheme = _styleTypes.ColorScheme.Blue,
30
- MessageWrapper
30
+ MessageWrapper,
31
+ TTSHighlightRenderer
31
32
  }) => {
32
33
  const dimensions = (0, _reactNative.useWindowDimensions)();
33
34
  const ref = (0, _react.useRef)(null);
34
35
  const isOpen = (0, _effectorReact.useUnit)(model.$isOpen);
35
36
  const isHelpRequestPending = (0, _effectorReact.useUnit)(model.sendHelpRequestFx.pending);
36
37
  const isTextToSpeechPending = (0, _effectorReact.useUnit)(model.api.textToSpeechTextFx.pending);
38
+ const audioStatus = (0, _effectorReact.useUnit)(model.t2s.$status);
37
39
  const currentPlayingId = (0, _effectorReact.useUnit)(model.t2s.$currentPlayingId);
40
+ const highlightedWordIndex = (0, _effectorReact.useUnit)(model.t2s.wordHighlight.$highlightedWordIndex);
38
41
  const isTranslated = (0, _effectorReact.useUnit)(model.translation.$isTranslated);
39
- const audioStatus = (0, _effectorReact.useUnit)(model.t2s.$status);
40
42
  const errorSpottingEnabled = (0, _effectorReact.useUnit)(model.errorSpotting.$isEnabled);
41
43
  const messages = (0, _effectorReact.useStoreMap)(model.$currentChatData, ({
42
44
  messages
@@ -60,25 +62,34 @@ const Chat = ({
60
62
  },
61
63
  children: [isOpen && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
62
64
  style: [styles.gap, isInputDisabled && styles.messagesWithoutInput],
63
- children: [messages.map(message => /*#__PURE__*/(0, _jsxRuntime.jsx)(_ConditionalWrapper.ConditionalWrapper, {
64
- withWrapper: shouldWrapMessage,
65
- Wrapper: MessageWrapper,
66
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChatMessage.ChatMessage, {
67
- isTranslated: isTranslated,
68
- withIcon: !message.isOwnMessage && message.id === lastMessageId,
69
- message: message,
70
- variant: message.isOwnMessage ? _modelTypes.MessageVariant.SENT : _modelTypes.MessageVariant.RECEIVED,
71
- colorScheme: colorScheme,
72
- withErrorSpotting: errorSpottingEnabled && !message.isOwnMessage,
73
- t2sState: {
74
- isEnabled: isTextToSpeechEnabled && !message.isOwnMessage,
75
- isActive: message.id === currentPlayingId,
76
- isLoading: isTextToSpeechPending,
77
- status: audioStatus,
78
- disabled: isTextToSpeechPending
79
- }
80
- }, message.id)
81
- })), isHelpRequestPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_MessageLoader.MessageLoader, {
65
+ children: [messages.map((message, index) => {
66
+ const key = `${message.id}-${index}`;
67
+ const isPlayingMessage = message.id === currentPlayingId;
68
+ const messageHighlightIndex = model.t2s.isWordHighlightEnabled && isPlayingMessage ? highlightedWordIndex : -1;
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.default.Fragment, {
70
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ConditionalWrapper.ConditionalWrapper, {
71
+ withWrapper: shouldWrapMessage,
72
+ Wrapper: MessageWrapper,
73
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChatMessage.ChatMessage, {
74
+ isTranslated: isTranslated,
75
+ withIcon: !message.isOwnMessage && message.id === lastMessageId,
76
+ message: message,
77
+ variant: message.isOwnMessage ? _modelTypes.MessageVariant.SENT : _modelTypes.MessageVariant.RECEIVED,
78
+ colorScheme: colorScheme,
79
+ withErrorSpotting: errorSpottingEnabled && !message.isOwnMessage,
80
+ highlightedWordIndex: messageHighlightIndex,
81
+ TTSHighlightRenderer: TTSHighlightRenderer,
82
+ t2sState: {
83
+ isEnabled: isTextToSpeechEnabled && !message.isOwnMessage,
84
+ isActive: isPlayingMessage,
85
+ isLoading: isTextToSpeechPending,
86
+ status: audioStatus,
87
+ disabled: isTextToSpeechPending
88
+ }
89
+ })
90
+ })
91
+ }, key);
92
+ }), isHelpRequestPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_MessageLoader.MessageLoader, {
82
93
  colorScheme: colorScheme
83
94
  })]
84
95
  }), isOpen && !isInputDisabled && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChatInput.ChatInput, {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_effectorReact","_ChatMessage","_MessageLoader","_ChatInput","_modelTypes","_styleTypes","_ConditionalWrapper","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","TOOLBAR_HEIGHT","BOTTOM_OFFSET","Platform","select","web","Chat","model","isHintFeedback","isTextToSpeechEnabled","isInputDisabled","colorScheme","ColorScheme","Blue","MessageWrapper","dimensions","useWindowDimensions","ref","useRef","isOpen","useUnit","$isOpen","isHelpRequestPending","sendHelpRequestFx","pending","isTextToSpeechPending","api","textToSpeechTextFx","currentPlayingId","t2s","$currentPlayingId","isTranslated","translation","$isTranslated","audioStatus","$status","errorSpottingEnabled","errorSpotting","$isEnabled","messages","useStoreMap","$currentChatData","lastMessageId","at","id","MAX_HEIGHT","height","shouldWrapMessage","length","jsx","View","style","styles","container","maxHeight","children","jsxs","ScrollView","bounces","contentContainerStyle","list","onContentSizeChange","_","current","scrollToEnd","setScrollActive","gap","messagesWithoutInput","map","message","ConditionalWrapper","withWrapper","Wrapper","ChatMessage","withIcon","isOwnMessage","variant","MessageVariant","SENT","RECEIVED","withErrorSpotting","t2sState","isEnabled","isActive","isLoading","status","disabled","MessageLoader","ChatInput","hasMessages","exports","StyleSheet","create","flex","alignItems","width","paddingVertical","paddingRight","marginBottom"],"sourceRoot":"../../../../../../src","sources":["features/chatbot/components/Chat/Chat.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_effectorReact","_ChatMessage","_MessageLoader","_ChatInput","_modelTypes","_styleTypes","_ConditionalWrapper","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","TOOLBAR_HEIGHT","BOTTOM_OFFSET","Platform","select","web","Chat","model","isHintFeedback","isTextToSpeechEnabled","isInputDisabled","colorScheme","ColorScheme","Blue","MessageWrapper","TTSHighlightRenderer","dimensions","useWindowDimensions","ref","useRef","isOpen","useUnit","$isOpen","isHelpRequestPending","sendHelpRequestFx","pending","isTextToSpeechPending","api","textToSpeechTextFx","audioStatus","t2s","$status","currentPlayingId","$currentPlayingId","highlightedWordIndex","wordHighlight","$highlightedWordIndex","isTranslated","translation","$isTranslated","errorSpottingEnabled","errorSpotting","$isEnabled","messages","useStoreMap","$currentChatData","lastMessageId","at","id","MAX_HEIGHT","height","shouldWrapMessage","length","jsx","View","style","styles","container","maxHeight","children","jsxs","ScrollView","bounces","contentContainerStyle","list","onContentSizeChange","_","current","scrollToEnd","setScrollActive","gap","messagesWithoutInput","map","message","index","key","isPlayingMessage","messageHighlightIndex","isWordHighlightEnabled","Fragment","ConditionalWrapper","withWrapper","Wrapper","ChatMessage","withIcon","isOwnMessage","variant","MessageVariant","SENT","RECEIVED","withErrorSpotting","t2sState","isEnabled","isActive","isLoading","status","disabled","MessageLoader","ChatInput","hasMessages","exports","StyleSheet","create","flex","alignItems","width","paddingVertical","paddingRight","marginBottom"],"sourceRoot":"../../../../../../src","sources":["features/chatbot/components/Chat/Chat.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_ReceivedMessage","_SentMessage","_modelTypes","_jsxRuntime","e","__esModule","default","variantsMap","MessageVariant","SENT","SentMessage","RECEIVED","ReceivedMessage","ChatMessage","variant","props","Component","jsx","exports"],"sourceRoot":"../../../../../../src","sources":["features/chatbot/components/ChatMessage/ChatMessage.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAH,OAAA;AAAwD,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAgBxD,MAAMG,WAAgE,GAAG;EACvE,CAACC,0BAAc,CAACC,IAAI,GAAGC,wBAAW;EAClC,CAACF,0BAAc,CAACG,QAAQ,GAAGC;AAC7B,CAAC;AAEM,MAAMC,WAAW,GAAGA,CAAC;EAAEC,OAAO;EAAE,GAAGC;AAAwB,CAAC,KAAK;EACtE,MAAMC,SAAS,GAAGT,WAAW,CAACO,OAAO,CAAC;EACtC,oBAAO,IAAAX,WAAA,CAAAc,GAAA,EAACD,SAAS;IAAA,GAAKD;EAAK,CAAG,CAAC;AACjC,CAAC;AAAAG,OAAA,CAAAL,WAAA,GAAAA,WAAA","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_ReceivedMessage","_SentMessage","_modelTypes","_jsxRuntime","e","__esModule","default","variantsMap","MessageVariant","SENT","SentMessage","RECEIVED","ReceivedMessage","ChatMessage","variant","props","Component","jsx","exports"],"sourceRoot":"../../../../../../src","sources":["features/chatbot/components/ChatMessage/ChatMessage.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAH,OAAA;AAAwD,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAkBxD,MAAMG,WAAgE,GAAG;EACvE,CAACC,0BAAc,CAACC,IAAI,GAAGC,wBAAW;EAClC,CAACF,0BAAc,CAACG,QAAQ,GAAGC;AAC7B,CAAC;AAEM,MAAMC,WAAW,GAAGA,CAAC;EAAEC,OAAO;EAAE,GAAGC;AAAwB,CAAC,KAAK;EACtE,MAAMC,SAAS,GAAGT,WAAW,CAACO,OAAO,CAAC;EACtC,oBAAO,IAAAX,WAAA,CAAAc,GAAA,EAACD,SAAS;IAAA,GAAKD;EAAK,CAAG,CAAC;AACjC,CAAC;AAAAG,OAAA,CAAAL,WAAA,GAAAA,WAAA","ignoreList":[]}
@@ -17,11 +17,17 @@ const MessageContentWeb = ({
17
17
  t2sState,
18
18
  variant,
19
19
  colorScheme = _styleTypes.ColorScheme.Blue,
20
- withErrorSpotting
20
+ withErrorSpotting,
21
+ highlightedWordIndex,
22
+ TTSHighlightRenderer: TTSHighlightComponent
21
23
  }) => {
22
24
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
23
25
  style: styles.messageText,
24
- children: [text, /*#__PURE__*/(0, _jsxRuntime.jsx)(_MessageButtonsBlock.MessageButtonsBlock, {
26
+ children: [TTSHighlightComponent ? /*#__PURE__*/(0, _jsxRuntime.jsx)(TTSHighlightComponent, {
27
+ text: text,
28
+ highlightedIndex: highlightedWordIndex ?? -1,
29
+ colorScheme: colorScheme
30
+ }) : text, /*#__PURE__*/(0, _jsxRuntime.jsx)(_MessageButtonsBlock.MessageButtonsBlock, {
25
31
  message: message,
26
32
  t2sState: t2sState,
27
33
  variant: variant,
@@ -36,12 +42,18 @@ const MessageContentMobile = ({
36
42
  t2sState,
37
43
  variant,
38
44
  colorScheme = _styleTypes.ColorScheme.Blue,
39
- withErrorSpotting
45
+ withErrorSpotting,
46
+ highlightedWordIndex,
47
+ TTSHighlightRenderer: TTSHighlightComponent
40
48
  }) => {
41
49
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
42
50
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
43
51
  style: [styles.messageText, styles.mobileMessageText],
44
- children: [text, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
52
+ children: [TTSHighlightComponent ? /*#__PURE__*/(0, _jsxRuntime.jsx)(TTSHighlightComponent, {
53
+ text: text,
54
+ highlightedIndex: highlightedWordIndex ?? -1,
55
+ colorScheme: colorScheme
56
+ }) : text, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
45
57
  style: {
46
58
  width: (0, _helpers.getSpacerSize)(message, t2sState)
47
59
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_styleTypes","_MessageButtonsBlock","_helpers","_jsxRuntime","e","__esModule","default","MessageContentWeb","message","text","t2sState","variant","colorScheme","ColorScheme","Blue","withErrorSpotting","jsxs","Text","style","styles","messageText","children","jsx","MessageButtonsBlock","MessageContentMobile","Fragment","mobileMessageText","View","width","getSpacerSize","MessageContent","exports","Platform","select","web","StyleSheet","create","flex","fontSize","fontWeight","fontFamily","color","lineHeight"],"sourceRoot":"../../../../../../src","sources":["features/chatbot/components/ChatMessage/MessageContent.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAIA,IAAAE,WAAA,GAAAF,OAAA;AAEA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAAyC,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAD,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAYzC,MAAMG,iBAAiB,GAAGA,CAAC;EACzBC,OAAO;EACPC,IAAI;EACJC,QAAQ;EACRC,OAAO;EACPC,WAAW,GAAGC,uBAAW,CAACC,IAAI;EAC9BC;AACmB,CAAC,KAAK;EACzB,oBACE,IAAAZ,WAAA,CAAAa,IAAA,EAACjB,YAAA,CAAAkB,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,WAAY;IAAAC,QAAA,GAC7BZ,IAAI,eACL,IAAAN,WAAA,CAAAmB,GAAA,EAACrB,oBAAA,CAAAsB,mBAAmB;MAClBf,OAAO,EAAEA,OAAQ;MACjBE,QAAQ,EAAEA,QAAS;MACnBC,OAAO,EAAEA,OAAQ;MACjBC,WAAW,EAAEA,WAAY;MACzBG,iBAAiB,EAAEA;IAAkB,CACtC,CAAC;EAAA,CACE,CAAC;AAEX,CAAC;AAED,MAAMS,oBAAoB,GAAGA,CAAC;EAC5BhB,OAAO;EACPC,IAAI;EACJC,QAAQ;EACRC,OAAO;EACPC,WAAW,GAAGC,uBAAW,CAACC,IAAI;EAC9BC;AACmB,CAAC,KAAK;EACzB,oBACE,IAAAZ,WAAA,CAAAa,IAAA,EAAAb,WAAA,CAAAsB,QAAA;IAAAJ,QAAA,gBACE,IAAAlB,WAAA,CAAAa,IAAA,EAACjB,YAAA,CAAAkB,IAAI;MAACC,KAAK,EAAE,CAACC,MAAM,CAACC,WAAW,EAAED,MAAM,CAACO,iBAAiB,CAAE;MAAAL,QAAA,GACzDZ,IAAI,eACL,IAAAN,WAAA,CAAAmB,GAAA,EAACvB,YAAA,CAAA4B,IAAI;QAACT,KAAK,EAAE;UAAEU,KAAK,EAAE,IAAAC,sBAAa,EAACrB,OAAO,EAAEE,QAAQ;QAAE;MAAE,CAAE,CAAC;IAAA,CACxD,CAAC,eACP,IAAAP,WAAA,CAAAmB,GAAA,EAACrB,oBAAA,CAAAsB,mBAAmB;MAClBf,OAAO,EAAEA,OAAQ;MACjBE,QAAQ,EAAEA,QAAS;MACnBC,OAAO,EAAEA,OAAQ;MACjBC,WAAW,EAAEA,WAAY;MACzBG,iBAAiB,EAAEA;IAAkB,CACtC,CAAC;EAAA,CACF,CAAC;AAEP,CAAC;AAEM,MAAMe,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAGE,qBAAQ,CAACC,MAAM,CAAC;EAC5CC,GAAG,EAAE3B,iBAAiB;EACtBD,OAAO,EAAEkB;AACX,CAAC,CAAC;AAEF,MAAML,MAAM,GAAGgB,uBAAU,CAACC,MAAM,CAAC;EAC/BhB,WAAW,EAAE;IACXiB,IAAI,EAAE,CAAC;IACPC,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,GAAG;IACfC,UAAU,EAAE,cAAc;IAC1BC,KAAK,EAAE,SAAS;IAChBb,KAAK,EAAE;EACT,CAAC;EACDF,iBAAiB,EAAE;IACjBgB,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_styleTypes","_MessageButtonsBlock","_helpers","_jsxRuntime","e","__esModule","default","MessageContentWeb","message","text","t2sState","variant","colorScheme","ColorScheme","Blue","withErrorSpotting","highlightedWordIndex","TTSHighlightRenderer","TTSHighlightComponent","jsxs","Text","style","styles","messageText","children","jsx","highlightedIndex","MessageButtonsBlock","MessageContentMobile","Fragment","mobileMessageText","View","width","getSpacerSize","MessageContent","exports","Platform","select","web","StyleSheet","create","flex","fontSize","fontWeight","fontFamily","color","lineHeight"],"sourceRoot":"../../../../../../src","sources":["features/chatbot/components/ChatMessage/MessageContent.tsx"],"mappings":"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","ignoreList":[]}
@@ -18,7 +18,9 @@ const ReceivedMessage = ({
18
18
  t2sState,
19
19
  withIcon,
20
20
  colorScheme = _styleTypes.ColorScheme.Blue,
21
- withErrorSpotting
21
+ withErrorSpotting,
22
+ highlightedWordIndex,
23
+ TTSHighlightRenderer
22
24
  }) => {
23
25
  const text = isTranslated ? message.translatedMessage : message.message;
24
26
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
@@ -37,7 +39,9 @@ const ReceivedMessage = ({
37
39
  t2sState: t2sState,
38
40
  text: text ?? '',
39
41
  colorScheme: colorScheme,
40
- withErrorSpotting: withErrorSpotting
42
+ withErrorSpotting: withErrorSpotting,
43
+ highlightedWordIndex: highlightedWordIndex,
44
+ TTSHighlightRenderer: TTSHighlightRenderer
41
45
  })
42
46
  })]
43
47
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_ChatbotIcon","_styleTypes","_MessageContent","_modelTypes","_jsxRuntime","e","__esModule","default","ReceivedMessage","message","isTranslated","t2sState","withIcon","colorScheme","ColorScheme","Blue","withErrorSpotting","text","translatedMessage","jsxs","View","style","styles","container","children","jsx","icon","ChatbotIcon","width","height","MessageContent","variant","MessageVariant","RECEIVED","exports","StyleSheet","create","flex","flexDirection","maxWidth","alignItems","justifyContent","alignSelf","marginRight","padding","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","borderRadius","borderBottomLeftRadius","backgroundColor"],"sourceRoot":"../../../../../../src","sources":["features/chatbot/components/ChatMessage/ReceivedMessage.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAGA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAAwD,IAAAM,WAAA,GAAAN,OAAA;AAAA,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEjD,MAAMG,eAAe,GAAGA,CAAC;EAC9BC,OAAO;EACPC,YAAY;EACZC,QAAQ;EACRC,QAAQ;EACRC,WAAW,GAAGC,uBAAW,CAACC,IAAI;EAC9BC;AACY,CAAC,KAAK;EAClB,MAAMC,IAAI,GAAGP,YAAY,GAAGD,OAAO,CAACS,iBAAiB,GAAGT,OAAO,CAACA,OAAO;EAEvE,oBACE,IAAAL,WAAA,CAAAe,IAAA,EAACpB,YAAA,CAAAqB,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,GAC3BZ,QAAQ,iBACP,IAAAR,WAAA,CAAAqB,GAAA,EAAC1B,YAAA,CAAAqB,IAAI;MAACC,KAAK,EAAEC,MAAM,CAACI,IAAK;MAAAF,QAAA,eACvB,IAAApB,WAAA,CAAAqB,GAAA,EAACzB,YAAA,CAAA2B,WAAW;QAACC,KAAK,EAAE,EAAG;QAACC,MAAM,EAAE;MAAG,CAAE;IAAC,CAClC,CACP,eAED,IAAAzB,WAAA,CAAAqB,GAAA,EAAC1B,YAAA,CAAAqB,IAAI;MAACC,KAAK,EAAEC,MAAM,CAACb,OAAQ;MAAAe,QAAA,eAC1B,IAAApB,WAAA,CAAAqB,GAAA,EAACvB,eAAA,CAAA4B,cAAc;QACbrB,OAAO,EAAEA,OAAQ;QACjBsB,OAAO,EAAEC,0BAAc,CAACC,QAAS;QACjCtB,QAAQ,EAAEA,QAAS;QACnBM,IAAI,EAAEA,IAAI,IAAI,EAAG;QACjBJ,WAAW,EAAEA,WAAY;QACzBG,iBAAiB,EAAEA;MAAkB,CACtC;IAAC,CACE,CAAC;EAAA,CACH,CAAC;AAEX,CAAC;AAAAkB,OAAA,CAAA1B,eAAA,GAAAA,eAAA;AAED,MAAMc,MAAM,GAAGa,uBAAU,CAACC,MAAM,CAAC;EAC/Bb,SAAS,EAAE;IACTc,IAAI,EAAE,CAAC;IACPC,aAAa,EAAE,KAAK;IACpBC,QAAQ,EAAE,GAAG;IACbX,KAAK,EAAE,GAAG;IACVY,UAAU,EAAE,UAAU;IACtBC,cAAc,EAAE;EAClB,CAAC;EACDf,IAAI,EAAE;IACJgB,SAAS,EAAE,UAAU;IACrBC,WAAW,EAAE;EACf,CAAC;EACDlC,OAAO,EAAE;IACP4B,IAAI,EAAE,CAAC;IACPC,aAAa,EAAE,KAAK;IACpBC,QAAQ,EAAE,GAAG;IACbK,OAAO,EAAE,CAAC;IACVC,WAAW,EAAE,MAAM;IACnBC,YAAY,EAAE;MAAElB,KAAK,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAE,CAAC;IACrCkB,aAAa,EAAE,IAAI;IACnBC,YAAY,EAAE,CAAC;IACfC,SAAS,EAAE,CAAC;IACZC,YAAY,EAAE,CAAC;IACfC,sBAAsB,EAAE,CAAC;IACzBC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_ChatbotIcon","_styleTypes","_MessageContent","_modelTypes","_jsxRuntime","e","__esModule","default","ReceivedMessage","message","isTranslated","t2sState","withIcon","colorScheme","ColorScheme","Blue","withErrorSpotting","highlightedWordIndex","TTSHighlightRenderer","text","translatedMessage","jsxs","View","style","styles","container","children","jsx","icon","ChatbotIcon","width","height","MessageContent","variant","MessageVariant","RECEIVED","exports","StyleSheet","create","flex","flexDirection","maxWidth","alignItems","justifyContent","alignSelf","marginRight","padding","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","borderRadius","borderBottomLeftRadius","backgroundColor"],"sourceRoot":"../../../../../../src","sources":["features/chatbot/components/ChatMessage/ReceivedMessage.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAGA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAAwD,IAAAM,WAAA,GAAAN,OAAA;AAAA,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEjD,MAAMG,eAAe,GAAGA,CAAC;EAC9BC,OAAO;EACPC,YAAY;EACZC,QAAQ;EACRC,QAAQ;EACRC,WAAW,GAAGC,uBAAW,CAACC,IAAI;EAC9BC,iBAAiB;EACjBC,oBAAoB;EACpBC;AACY,CAAC,KAAK;EAClB,MAAMC,IAAI,GAAGT,YAAY,GAAGD,OAAO,CAACW,iBAAiB,GAAGX,OAAO,CAACA,OAAO;EAEvE,oBACE,IAAAL,WAAA,CAAAiB,IAAA,EAACtB,YAAA,CAAAuB,IAAI;IAACC,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,GAC3Bd,QAAQ,iBACP,IAAAR,WAAA,CAAAuB,GAAA,EAAC5B,YAAA,CAAAuB,IAAI;MAACC,KAAK,EAAEC,MAAM,CAACI,IAAK;MAAAF,QAAA,eACvB,IAAAtB,WAAA,CAAAuB,GAAA,EAAC3B,YAAA,CAAA6B,WAAW;QAACC,KAAK,EAAE,EAAG;QAACC,MAAM,EAAE;MAAG,CAAE;IAAC,CAClC,CACP,eAED,IAAA3B,WAAA,CAAAuB,GAAA,EAAC5B,YAAA,CAAAuB,IAAI;MAACC,KAAK,EAAEC,MAAM,CAACf,OAAQ;MAAAiB,QAAA,eAC1B,IAAAtB,WAAA,CAAAuB,GAAA,EAACzB,eAAA,CAAA8B,cAAc;QACbvB,OAAO,EAAEA,OAAQ;QACjBwB,OAAO,EAAEC,0BAAc,CAACC,QAAS;QACjCxB,QAAQ,EAAEA,QAAS;QACnBQ,IAAI,EAAEA,IAAI,IAAI,EAAG;QACjBN,WAAW,EAAEA,WAAY;QACzBG,iBAAiB,EAAEA,iBAAkB;QACrCC,oBAAoB,EAAEA,oBAAqB;QAC3CC,oBAAoB,EAAEA;MAAqB,CAC5C;IAAC,CACE,CAAC;EAAA,CACH,CAAC;AAEX,CAAC;AAAAkB,OAAA,CAAA5B,eAAA,GAAAA,eAAA;AAED,MAAMgB,MAAM,GAAGa,uBAAU,CAACC,MAAM,CAAC;EAC/Bb,SAAS,EAAE;IACTc,IAAI,EAAE,CAAC;IACPC,aAAa,EAAE,KAAK;IACpBC,QAAQ,EAAE,GAAG;IACbX,KAAK,EAAE,GAAG;IACVY,UAAU,EAAE,UAAU;IACtBC,cAAc,EAAE;EAClB,CAAC;EACDf,IAAI,EAAE;IACJgB,SAAS,EAAE,UAAU;IACrBC,WAAW,EAAE;EACf,CAAC;EACDpC,OAAO,EAAE;IACP8B,IAAI,EAAE,CAAC;IACPC,aAAa,EAAE,KAAK;IACpBC,QAAQ,EAAE,GAAG;IACbK,OAAO,EAAE,CAAC;IACVC,WAAW,EAAE,MAAM;IACnBC,YAAY,EAAE;MAAElB,KAAK,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAE,CAAC;IACrCkB,aAAa,EAAE,IAAI;IACnBC,YAAY,EAAE,CAAC;IACfC,SAAS,EAAE,CAAC;IACZC,YAAY,EAAE,CAAC;IACfC,sBAAsB,EAAE,CAAC;IACzBC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC","ignoreList":[]}
@@ -20,7 +20,8 @@ const Chatbot = ({
20
20
  textToSpeechConfig,
21
21
  ButtonWrapper,
22
22
  iconSize,
23
- colorScheme = _styleTypes.ColorScheme.Blue
23
+ colorScheme = _styleTypes.ColorScheme.Blue,
24
+ TTSHighlightRenderer
24
25
  }) => {
25
26
  const isChatAllowed = (0, _effectorReact.useUnit)(model.$chatAccess);
26
27
  const isAvailable = (0, _effectorReact.useStoreMap)(model.$currentChatData, ({
@@ -47,7 +48,8 @@ const Chatbot = ({
47
48
  isHintFeedback: isHintFeedback,
48
49
  isTextToSpeechEnabled: isTextToSpeechEnabled,
49
50
  isInputDisabled: isInputDisabled,
50
- MessageWrapper: ButtonWrapper
51
+ MessageWrapper: ButtonWrapper,
52
+ TTSHighlightRenderer: TTSHighlightRenderer
51
53
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChatControls.ChatControls, {
52
54
  model: model,
53
55
  onPressChatIcon: openChat,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_effectorReact","_Chat","_ChatControls","_ChatBotModelContext","_styleTypes","_jsxRuntime","e","__esModule","default","Chatbot","model","isHintFeedback","isTextToSpeechEnabled","isInputDisabled","textToSpeechConfig","ButtonWrapper","iconSize","colorScheme","ColorScheme","Blue","isChatAllowed","useUnit","$chatAccess","isAvailable","useStoreMap","$currentChatData","t2s","setAudioConfig","shouldAnimateCloseButton","store","fn","chat","messages","length","keys","openChat","setIsOpen","closeChat","jsxs","ChatBotModelContext","Provider","value","children","jsx","Chat","MessageWrapper","ChatControls","onPressChatIcon","onPressClose","undefined","exports"],"sourceRoot":"../../../../../src","sources":["features/chatbot/components/Chatbot.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAGA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AAEA,IAAAI,oBAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAAkD,IAAAM,WAAA,GAAAN,OAAA;AAAA,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAgB3C,MAAMG,OAAO,GAAGA,CAAC;EACtBC,KAAK;EACLC,cAAc;EACdC,qBAAqB,GAAG,KAAK;EAC7BC,eAAe;EACfC,kBAAkB;EAClBC,aAAa;EACbC,QAAQ;EACRC,WAAW,GAAGC,uBAAW,CAACC;AACd,CAAC,KAAK;EAClB,MAAMC,aAAa,GAAG,IAAAC,sBAAO,EAACX,KAAK,CAACY,WAAW,CAAC;EAChD,MAAMC,WAAW,GAAG,IAAAC,0BAAW,EAACd,KAAK,CAACe,gBAAgB,EAAE,CAAC;IAAEF;EAAY,CAAC,KAAKA,WAAW,CAAC;EACzFb,KAAK,CAACgB,GAAG,CAACC,cAAc,CAACb,kBAAkB,IAAI,IAAI,CAAC;EAEpD,MAAMc,wBAAwB,GAAG,IAAAJ,0BAAW,EAAC;IAC3CK,KAAK,EAAEnB,KAAK,CAACe,gBAAgB;IAC7BK,EAAE,EAAEA,CAACC,IAAI,EAAE,CAAClB,eAAe,CAAC,KAAK;MAC/B,OAAOA,eAAe,IAAIkB,IAAI,CAACC,QAAQ,CAACC,MAAM,KAAK,CAAC;IACtD,CAAC;IACDC,IAAI,EAAE,CAACrB,eAAe;EACxB,CAAC,CAAC;EAEF,MAAMsB,QAAQ,GAAGA,CAAA,KAAMzB,KAAK,CAAC0B,SAAS,CAAC,IAAI,CAAC;EAC5C,MAAMC,SAAS,GAAGA,CAAA,KAAM3B,KAAK,CAAC0B,SAAS,CAAC,KAAK,CAAC;EAE9C,IAAI,CAACb,WAAW,IAAI,CAACH,aAAa,EAAE;IAClC,OAAO,IAAI;EACb;EAEA,oBACE,IAAAf,WAAA,CAAAiC,IAAA,EAACnC,oBAAA,CAAAoC,mBAAmB,CAACC,QAAQ;IAACC,KAAK,EAAE/B,KAAM;IAAAgC,QAAA,gBACzC,IAAArC,WAAA,CAAAsC,GAAA,EAAC1C,KAAA,CAAA2C,IAAI;MACHlC,KAAK,EAAEA,KAAM;MACbO,WAAW,EAAEA,WAAY;MACzBN,cAAc,EAAEA,cAAe;MAC/BC,qBAAqB,EAAEA,qBAAsB;MAC7CC,eAAe,EAAEA,eAAgB;MACjCgC,cAAc,EAAE9B;IAAc,CAC/B,CAAC,eAEF,IAAAV,WAAA,CAAAsC,GAAA,EAACzC,aAAA,CAAA4C,YAAY;MACXpC,KAAK,EAAEA,KAAM;MACbqC,eAAe,EAAEZ,QAAS;MAC1Ba,YAAY,EAAEX,SAAU;MACxBrB,QAAQ,EAAEA,QAAS;MACnBD,aAAa,EAAEF,eAAe,GAAGoC,SAAS,GAAGlC,aAAc;MAC3Da,wBAAwB,EAAEA;IAAyB,CACpD,CAAC;EAAA,CAC0B,CAAC;AAEnC,CAAC;AAAAsB,OAAA,CAAAzC,OAAA,GAAAA,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_effectorReact","_Chat","_ChatControls","_ChatBotModelContext","_styleTypes","_jsxRuntime","e","__esModule","default","Chatbot","model","isHintFeedback","isTextToSpeechEnabled","isInputDisabled","textToSpeechConfig","ButtonWrapper","iconSize","colorScheme","ColorScheme","Blue","TTSHighlightRenderer","isChatAllowed","useUnit","$chatAccess","isAvailable","useStoreMap","$currentChatData","t2s","setAudioConfig","shouldAnimateCloseButton","store","fn","chat","messages","length","keys","openChat","setIsOpen","closeChat","jsxs","ChatBotModelContext","Provider","value","children","jsx","Chat","MessageWrapper","ChatControls","onPressChatIcon","onPressClose","undefined","exports"],"sourceRoot":"../../../../../src","sources":["features/chatbot/components/Chatbot.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAGA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AAEA,IAAAI,oBAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAAkD,IAAAM,WAAA,GAAAN,OAAA;AAAA,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAkB3C,MAAMG,OAAO,GAAGA,CAAC;EACtBC,KAAK;EACLC,cAAc;EACdC,qBAAqB,GAAG,KAAK;EAC7BC,eAAe;EACfC,kBAAkB;EAClBC,aAAa;EACbC,QAAQ;EACRC,WAAW,GAAGC,uBAAW,CAACC,IAAI;EAC9BC;AACY,CAAC,KAAK;EAClB,MAAMC,aAAa,GAAG,IAAAC,sBAAO,EAACZ,KAAK,CAACa,WAAW,CAAC;EAChD,MAAMC,WAAW,GAAG,IAAAC,0BAAW,EAACf,KAAK,CAACgB,gBAAgB,EAAE,CAAC;IAAEF;EAAY,CAAC,KAAKA,WAAW,CAAC;EACzFd,KAAK,CAACiB,GAAG,CAACC,cAAc,CAACd,kBAAkB,IAAI,IAAI,CAAC;EAEpD,MAAMe,wBAAwB,GAAG,IAAAJ,0BAAW,EAAC;IAC3CK,KAAK,EAAEpB,KAAK,CAACgB,gBAAgB;IAC7BK,EAAE,EAAEA,CAACC,IAAI,EAAE,CAACnB,eAAe,CAAC,KAAK;MAC/B,OAAOA,eAAe,IAAImB,IAAI,CAACC,QAAQ,CAACC,MAAM,KAAK,CAAC;IACtD,CAAC;IACDC,IAAI,EAAE,CAACtB,eAAe;EACxB,CAAC,CAAC;EAEF,MAAMuB,QAAQ,GAAGA,CAAA,KAAM1B,KAAK,CAAC2B,SAAS,CAAC,IAAI,CAAC;EAC5C,MAAMC,SAAS,GAAGA,CAAA,KAAM5B,KAAK,CAAC2B,SAAS,CAAC,KAAK,CAAC;EAE9C,IAAI,CAACb,WAAW,IAAI,CAACH,aAAa,EAAE;IAClC,OAAO,IAAI;EACb;EAEA,oBACE,IAAAhB,WAAA,CAAAkC,IAAA,EAACpC,oBAAA,CAAAqC,mBAAmB,CAACC,QAAQ;IAACC,KAAK,EAAEhC,KAAM;IAAAiC,QAAA,gBACzC,IAAAtC,WAAA,CAAAuC,GAAA,EAAC3C,KAAA,CAAA4C,IAAI;MACHnC,KAAK,EAAEA,KAAM;MACbO,WAAW,EAAEA,WAAY;MACzBN,cAAc,EAAEA,cAAe;MAC/BC,qBAAqB,EAAEA,qBAAsB;MAC7CC,eAAe,EAAEA,eAAgB;MACjCiC,cAAc,EAAE/B,aAAc;MAC9BK,oBAAoB,EAAEA;IAAqB,CAC5C,CAAC,eAEF,IAAAf,WAAA,CAAAuC,GAAA,EAAC1C,aAAA,CAAA6C,YAAY;MACXrC,KAAK,EAAEA,KAAM;MACbsC,eAAe,EAAEZ,QAAS;MAC1Ba,YAAY,EAAEX,SAAU;MACxBtB,QAAQ,EAAEA,QAAS;MACnBD,aAAa,EAAEF,eAAe,GAAGqC,SAAS,GAAGnC,aAAc;MAC3Dc,wBAAwB,EAAEA;IAAyB,CACpD,CAAC;EAAA,CAC0B,CAAC;AAEnC,CAAC;AAAAsB,OAAA,CAAA1C,OAAA,GAAAA,OAAA","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TEXT_TO_SPEECH_CONFIG = exports.MESSAGE_COLORS_MAP = exports.KATEX_REPLACEMENTS_REVERSE = exports.KATEX_REPLACEMENTS = exports.HOVER_ANIMATION_DURATION = exports.DEFAULT_VOICE = exports.CONTROLS_COLORS_MAP = exports.AUDIO_CONFIG = void 0;
6
+ exports.WORD_MARK_REGEX = exports.TEXT_TO_SPEECH_CONFIG = exports.MESSAGE_COLORS_MAP = exports.KATEX_REPLACEMENTS_REVERSE = exports.KATEX_REPLACEMENTS = exports.HOVER_ANIMATION_DURATION = exports.DEFAULT_VOICE = exports.CONTROLS_COLORS_MAP = exports.AUDIO_CONFIG = void 0;
7
7
  var _reactNativeUi = require("@magmamath/react-native-ui");
8
8
  var _reactNative = require("react-native");
9
9
  var _modelTypes = require("./types/model.types.js");
@@ -77,4 +77,5 @@ const CONTROLS_COLORS_MAP = exports.CONTROLS_COLORS_MAP = {
77
77
  }
78
78
  };
79
79
  const HOVER_ANIMATION_DURATION = exports.HOVER_ANIMATION_DURATION = 200;
80
+ const WORD_MARK_REGEX = exports.WORD_MARK_REGEX = /^w_(\d+)$/;
80
81
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeUi","require","_reactNative","_modelTypes","_styleTypes","AUDIO_CONFIG","exports","audioEncoding","pitch","speakingRate","DEFAULT_VOICE","languageCode","name","TEXT_TO_SPEECH_CONFIG","Platform","select","ios","audioConfig","voice","default","KATEX_REPLACEMENTS","KATEX_REPLACEMENTS_REVERSE","__KATEX_DOLLAR_SYMBOL__","MESSAGE_COLORS_MAP","ColorScheme","Blue","MessageVariant","RECEIVED","background","COLORS","NEUTRAL_3","border","icon","ButtonColor","BLUE","SENT","PRIMARY_BLUE","Yellow","YELLOW","PRIMARY_YELLOW","CONTROLS_COLORS_MAP","hover","HOVER_ANIMATION_DURATION"],"sourceRoot":"../../../../src","sources":["features/chatbot/constants.ts"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAGO,MAAMI,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1BE,aAAa,EAAE,UAAU;EACzBC,KAAK,EAAE,CAAC;EACRC,YAAY,EAAE;AAChB,CAAC;AAEM,MAAMC,aAAa,GAAAJ,OAAA,CAAAI,aAAA,GAAG;EAC3BC,YAAY,EAAE,OAAO;EACrBC,IAAI,EAAE;AACR,CAAC;AAEM,MAAMC,qBAAqB,GAAAP,OAAA,CAAAO,qBAAA,GAAGC,qBAAQ,CAACC,MAAM,CAAC;EACnDC,GAAG,EAAE;IACHC,WAAW,EAAE;MACXV,aAAa,EAAE,KAAK;MACpBC,KAAK,EAAE,GAAG;MACVC,YAAY,EAAE;IAChB,CAAC;IACDS,KAAK,EAAE;MACLP,YAAY,EAAE,OAAO;MACrBC,IAAI,EAAE;IACR;EACF,CAAC;EACDO,OAAO,EAAE;IACPF,WAAW,EAAEZ,YAAY;IACzBa,KAAK,EAAER;EACT;AACF,CAAC,CAAC;AAEK,MAAMU,kBAAkB,GAAAd,OAAA,CAAAc,kBAAA,GAAG;EAChC,KAAK,EAAE;AACT,CAAU;AAEH,MAAMC,0BAA0B,GAAAf,OAAA,CAAAe,0BAAA,GAAG;EACxCC,uBAAuB,EAAE;AAC3B,CAAU;AAEH,MAAMC,kBAAkB,GAAAjB,OAAA,CAAAiB,kBAAA,GAAG;EAChC,CAACC,uBAAW,CAACC,IAAI,GAAG;IAClB,CAACC,0BAAc,CAACC,QAAQ,GAAG;MACzBC,UAAU,EAAEC,qBAAM,CAACC,SAAS;MAC5BC,MAAM,EAAEF,qBAAM,CAACC,SAAS;MACxBE,IAAI,EAAEC,0BAAW,CAACC;IACpB,CAAC;IACD,CAACR,0BAAc,CAACS,IAAI,GAAG;MACrBP,UAAU,EAAEC,qBAAM,CAACO,YAAY;MAC/BL,MAAM,EAAEF,qBAAM,CAACO,YAAY;MAC3BJ,IAAI,EAAEC,0BAAW,CAACC;IACpB;EACF,CAAC;EACD,CAACV,uBAAW,CAACa,MAAM,GAAG;IACpB,CAACX,0BAAc,CAACC,QAAQ,GAAG;MACzBC,UAAU,EAAEC,qBAAM,CAACC,SAAS;MAC5BC,MAAM,EAAEF,qBAAM,CAACC,SAAS;MACxBE,IAAI,EAAEC,0BAAW,CAACK;IACpB,CAAC;IACD,CAACZ,0BAAc,CAACS,IAAI,GAAG;MACrBP,UAAU,EAAEC,qBAAM,CAACU,cAAc;MACjCR,MAAM,EAAEF,qBAAM,CAACU,cAAc;MAC7BP,IAAI,EAAEC,0BAAW,CAACK;IACpB;EACF;AACF,CAAC;AAEM,MAAME,mBAAmB,GAAAlC,OAAA,CAAAkC,mBAAA,GAAG;EACjC,CAAChB,uBAAW,CAACC,IAAI,GAAG;IAClBgB,KAAK,EAAEZ,qBAAM,CAACO,YAAY;IAC1BR,UAAU,EAAEC,qBAAM,CAACO;EACrB,CAAC;EACD,CAACZ,uBAAW,CAACa,MAAM,GAAG;IACpBI,KAAK,EAAEZ,qBAAM,CAACU,cAAc;IAC5BX,UAAU,EAAEC,qBAAM,CAACU;EACrB;AACF,CAAC;AAEM,MAAMG,wBAAwB,GAAApC,OAAA,CAAAoC,wBAAA,GAAG,GAAG","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeUi","require","_reactNative","_modelTypes","_styleTypes","AUDIO_CONFIG","exports","audioEncoding","pitch","speakingRate","DEFAULT_VOICE","languageCode","name","TEXT_TO_SPEECH_CONFIG","Platform","select","ios","audioConfig","voice","default","KATEX_REPLACEMENTS","KATEX_REPLACEMENTS_REVERSE","__KATEX_DOLLAR_SYMBOL__","MESSAGE_COLORS_MAP","ColorScheme","Blue","MessageVariant","RECEIVED","background","COLORS","NEUTRAL_3","border","icon","ButtonColor","BLUE","SENT","PRIMARY_BLUE","Yellow","YELLOW","PRIMARY_YELLOW","CONTROLS_COLORS_MAP","hover","HOVER_ANIMATION_DURATION","WORD_MARK_REGEX"],"sourceRoot":"../../../../src","sources":["features/chatbot/constants.ts"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAGO,MAAMI,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1BE,aAAa,EAAE,UAAU;EACzBC,KAAK,EAAE,CAAC;EACRC,YAAY,EAAE;AAChB,CAAC;AAEM,MAAMC,aAAa,GAAAJ,OAAA,CAAAI,aAAA,GAAG;EAC3BC,YAAY,EAAE,OAAO;EACrBC,IAAI,EAAE;AACR,CAAC;AAEM,MAAMC,qBAAqB,GAAAP,OAAA,CAAAO,qBAAA,GAAGC,qBAAQ,CAACC,MAAM,CAAC;EACnDC,GAAG,EAAE;IACHC,WAAW,EAAE;MACXV,aAAa,EAAE,KAAK;MACpBC,KAAK,EAAE,GAAG;MACVC,YAAY,EAAE;IAChB,CAAC;IACDS,KAAK,EAAE;MACLP,YAAY,EAAE,OAAO;MACrBC,IAAI,EAAE;IACR;EACF,CAAC;EACDO,OAAO,EAAE;IACPF,WAAW,EAAEZ,YAAY;IACzBa,KAAK,EAAER;EACT;AACF,CAAC,CAAC;AAEK,MAAMU,kBAAkB,GAAAd,OAAA,CAAAc,kBAAA,GAAG;EAChC,KAAK,EAAE;AACT,CAAU;AAEH,MAAMC,0BAA0B,GAAAf,OAAA,CAAAe,0BAAA,GAAG;EACxCC,uBAAuB,EAAE;AAC3B,CAAU;AAEH,MAAMC,kBAAkB,GAAAjB,OAAA,CAAAiB,kBAAA,GAAG;EAChC,CAACC,uBAAW,CAACC,IAAI,GAAG;IAClB,CAACC,0BAAc,CAACC,QAAQ,GAAG;MACzBC,UAAU,EAAEC,qBAAM,CAACC,SAAS;MAC5BC,MAAM,EAAEF,qBAAM,CAACC,SAAS;MACxBE,IAAI,EAAEC,0BAAW,CAACC;IACpB,CAAC;IACD,CAACR,0BAAc,CAACS,IAAI,GAAG;MACrBP,UAAU,EAAEC,qBAAM,CAACO,YAAY;MAC/BL,MAAM,EAAEF,qBAAM,CAACO,YAAY;MAC3BJ,IAAI,EAAEC,0BAAW,CAACC;IACpB;EACF,CAAC;EACD,CAACV,uBAAW,CAACa,MAAM,GAAG;IACpB,CAACX,0BAAc,CAACC,QAAQ,GAAG;MACzBC,UAAU,EAAEC,qBAAM,CAACC,SAAS;MAC5BC,MAAM,EAAEF,qBAAM,CAACC,SAAS;MACxBE,IAAI,EAAEC,0BAAW,CAACK;IACpB,CAAC;IACD,CAACZ,0BAAc,CAACS,IAAI,GAAG;MACrBP,UAAU,EAAEC,qBAAM,CAACU,cAAc;MACjCR,MAAM,EAAEF,qBAAM,CAACU,cAAc;MAC7BP,IAAI,EAAEC,0BAAW,CAACK;IACpB;EACF;AACF,CAAC;AAEM,MAAME,mBAAmB,GAAAlC,OAAA,CAAAkC,mBAAA,GAAG;EACjC,CAAChB,uBAAW,CAACC,IAAI,GAAG;IAClBgB,KAAK,EAAEZ,qBAAM,CAACO,YAAY;IAC1BR,UAAU,EAAEC,qBAAM,CAACO;EACrB,CAAC;EACD,CAACZ,uBAAW,CAACa,MAAM,GAAG;IACpBI,KAAK,EAAEZ,qBAAM,CAACU,cAAc;IAC5BX,UAAU,EAAEC,qBAAM,CAACU;EACrB;AACF,CAAC;AAEM,MAAMG,wBAAwB,GAAApC,OAAA,CAAAoC,wBAAA,GAAG,GAAG;AAEpC,MAAMC,eAAe,GAAArC,OAAA,CAAAqC,eAAA,GAAG,WAAW","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.textToSSML = exports.findCurrentMark = void 0;
7
+ const escapeXml = str => str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
8
+
9
+ /**
10
+ * Converts plain text to SSML with word marks for TTS highlighting.
11
+ * "Hello world" -> '<speak><mark name="w_0"/>Hello <mark name="w_1"/>world</speak>'
12
+ */
13
+ const textToSSML = text => {
14
+ const words = text.split(/\s+/).filter(Boolean);
15
+ if (words.length === 0) return '<speak></speak>';
16
+ const ssmlParts = words.map((word, i) => `<mark name="w_${i}"/>${escapeXml(word)}`);
17
+ return `<speak>${ssmlParts.join(' ')}</speak>`;
18
+ };
19
+ exports.textToSSML = textToSSML;
20
+ const findCurrentMark = (timepoints, time) => {
21
+ for (let i = timepoints.length - 1; i >= 0; i--) {
22
+ if (timepoints[i].timeSeconds <= time) {
23
+ return timepoints[i].markName;
24
+ }
25
+ }
26
+ return undefined;
27
+ };
28
+ exports.findCurrentMark = findCurrentMark;
29
+ //# sourceMappingURL=ttsHighlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["escapeXml","str","replace","textToSSML","text","words","split","filter","Boolean","length","ssmlParts","map","word","i","join","exports","findCurrentMark","timepoints","time","timeSeconds","markName","undefined"],"sourceRoot":"../../../../../src","sources":["features/chatbot/helpers/ttsHighlight.ts"],"mappings":";;;;;;AAEA,MAAMA,SAAS,GAAIC,GAAW,IAC5BA,GAAG,CAACC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;;AAExE;AACA;AACA;AACA;AACO,MAAMC,UAAU,GAAIC,IAAY,IAAa;EAClD,MAAMC,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,KAAK,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC;EAC/C,IAAIH,KAAK,CAACI,MAAM,KAAK,CAAC,EAAE,OAAO,iBAAiB;EAEhD,MAAMC,SAAS,GAAGL,KAAK,CAACM,GAAG,CAAC,CAACC,IAAI,EAAEC,CAAC,KAAK,iBAAiBA,CAAC,MAAMb,SAAS,CAACY,IAAI,CAAC,EAAE,CAAC;EACnF,OAAO,UAAUF,SAAS,CAACI,IAAI,CAAC,GAAG,CAAC,UAAU;AAChD,CAAC;AAAAC,OAAA,CAAAZ,UAAA,GAAAA,UAAA;AAEM,MAAMa,eAAe,GAAGA,CAACC,UAAuB,EAAEC,IAAY,KAAyB;EAC5F,KAAK,IAAIL,CAAC,GAAGI,UAAU,CAACR,MAAM,GAAG,CAAC,EAAEI,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;IAC/C,IAAII,UAAU,CAACJ,CAAC,CAAC,CAACM,WAAW,IAAID,IAAI,EAAE;MACrC,OAAOD,UAAU,CAACJ,CAAC,CAAC,CAACO,QAAQ;IAC/B;EACF;EACA,OAAOC,SAAS;AAClB,CAAC;AAAAN,OAAA,CAAAC,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -7,7 +7,7 @@ exports.ChatbotModel = void 0;
7
7
  var _effector = require("effector");
8
8
  var _ChatbotApi = require("./ChatbotApi.js");
9
9
  var _ChatbotTranslation = require("./ChatbotTranslation.js");
10
- var _t2s = require("./t2s.js");
10
+ var _ChatTTSModel = require("./ChatTTSModel.js");
11
11
  var _messagesHelper = require("./messagesHelper.js");
12
12
  var _ChatBotThreadManager = require("./ChatBotThreadManager.js");
13
13
  var _ChatsCacheModel = require("./ChatsCacheModel.js");
@@ -66,6 +66,7 @@ class ChatbotModel {
66
66
  postMessage: this.threadManager.postMessage
67
67
  });
68
68
  this.$chatAccess = chatAccess;
69
+ if ($key) this.bindKey($key);
69
70
  this.threadManager.setApi({
70
71
  getHint: api.requestHint,
71
72
  sendMessage: api.sendMessage
@@ -74,9 +75,6 @@ class ChatbotModel {
74
75
  this.threadManager.setMessagesLimit(threadMessagesLimit);
75
76
  }
76
77
  this.$alternatives = (0, _effector.createStore)(null).on(this.api.getAlternativesFx.doneData, (_, payload) => (0, _helpers.transformAlternatives)(payload)).on(this.setAlternatives, (_, payload) => (0, _helpers.transformAlternatives)(payload)).reset(this.resetAlternatives);
77
- this.t2s = new _t2s.ChatTextToSpeechModel({
78
- api: this.api
79
- });
80
78
  this.translation = new _ChatbotTranslation.ChatbotTranslation({
81
79
  $context: this.$context,
82
80
  defaultMessages: this.defaultMessages,
@@ -88,10 +86,14 @@ class ChatbotModel {
88
86
  },
89
87
  chats: this.cache
90
88
  });
89
+ this.t2s = new _ChatTTSModel.ChatTTSModel({
90
+ api: this.api,
91
+ $currentChatData: this.$currentChatData,
92
+ $isTranslated: this.translation.$isTranslated
93
+ });
91
94
  this.errorSpotting = new _ErrorSpottingModel.ErrorSpottingModel({
92
95
  $currentChatData: this.$currentChatData
93
96
  });
94
- if ($key) this.bindKey($key);
95
97
  (0, _effector.sample)({
96
98
  source: this.$isOpen.updates,
97
99
  filter: isOpen => !isOpen,