@pie-players/pie-assessment-toolkit 0.3.43 → 0.3.45

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 (441) hide show
  1. package/README.md +54 -69
  2. package/dist/attempt/AssessmentSession.d.ts +0 -1
  3. package/dist/attempt/AssessmentSession.js.map +1 -1
  4. package/dist/attempt/TestSession.d.ts +0 -1
  5. package/dist/attempt/TestSession.js.map +1 -1
  6. package/dist/attempt/adapters/activity-to-test-attempt-session.d.ts +0 -1
  7. package/dist/attempt/adapters/activity-to-test-attempt-session.js.map +1 -1
  8. package/dist/components/ItemToolBar.custom-element.js +1607 -428
  9. package/dist/components/PieAssessmentToolkit.custom-element.js +19498 -3590
  10. package/dist/components/SectionToolBar.custom-element.js +1887 -611
  11. package/dist/components/item-toolbar-element.d.ts +0 -1
  12. package/dist/components/item-toolbar-element.js.map +1 -1
  13. package/dist/components/pie-assessment-toolkit-element.d.ts +0 -1
  14. package/dist/components/pie-assessment-toolkit-element.js.map +1 -1
  15. package/dist/components/section-toolbar-element.d.ts +0 -1
  16. package/dist/components/section-toolbar-element.js.map +1 -1
  17. package/dist/components/vendor/nds/README.md +110 -0
  18. package/dist/components/vendor/nds/nds-icon-button.js +826 -0
  19. package/dist/context/assessment-toolkit-context.d.ts +0 -1
  20. package/dist/context/assessment-toolkit-context.js.map +1 -1
  21. package/dist/context/runtime-context-consumer.d.ts +0 -1
  22. package/dist/context/runtime-context-consumer.js.map +1 -1
  23. package/dist/index.d.ts +3 -7
  24. package/dist/index.js +1 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/item-loader.d.ts +0 -1
  27. package/dist/item-loader.js.map +1 -1
  28. package/dist/policy/core/PolicySource.d.ts +0 -1
  29. package/dist/policy/core/PolicySource.js.map +1 -1
  30. package/dist/policy/core/ToolPolicyEngine.d.ts +1 -3
  31. package/dist/policy/core/ToolPolicyEngine.js +1 -2
  32. package/dist/policy/core/ToolPolicyEngine.js.map +1 -1
  33. package/dist/policy/core/compose-decision.d.ts +0 -1
  34. package/dist/policy/core/compose-decision.js.map +1 -1
  35. package/dist/policy/core/decision-types.d.ts +0 -1
  36. package/dist/policy/core/decision-types.js.map +1 -1
  37. package/dist/policy/core/engine-context.d.ts +0 -1
  38. package/dist/policy/core/engine-context.js.map +1 -1
  39. package/dist/policy/core/pnp-policy-inputs.d.ts +2 -4
  40. package/dist/policy/core/pnp-policy-inputs.js +2 -3
  41. package/dist/policy/core/pnp-policy-inputs.js.map +1 -1
  42. package/dist/policy/core/policy-source-tag.d.ts +0 -1
  43. package/dist/policy/core/policy-source-tag.js.map +1 -1
  44. package/dist/policy/core/provenance.d.ts +7 -35
  45. package/dist/policy/core/provenance.js +4 -21
  46. package/dist/policy/core/provenance.js.map +1 -1
  47. package/dist/policy/engine.d.ts +0 -1
  48. package/dist/policy/engine.js.map +1 -1
  49. package/dist/policy/internal.d.ts +0 -1
  50. package/dist/policy/internal.js.map +1 -1
  51. package/dist/policy/sources/PnpPolicySource.d.ts +6 -20
  52. package/dist/policy/sources/PnpPolicySource.js +6 -19
  53. package/dist/policy/sources/PnpPolicySource.js.map +1 -1
  54. package/dist/runtime/RuntimeRegistry.d.ts +0 -1
  55. package/dist/runtime/RuntimeRegistry.js.map +1 -1
  56. package/dist/runtime/SectionRuntimeEngine.d.ts +13 -29
  57. package/dist/runtime/SectionRuntimeEngine.js +13 -27
  58. package/dist/runtime/SectionRuntimeEngine.js.map +1 -1
  59. package/dist/runtime/adapter/SectionEngineAdapter.d.ts +2 -3
  60. package/dist/runtime/adapter/SectionEngineAdapter.js +2 -2
  61. package/dist/runtime/adapter/SectionEngineAdapter.js.map +1 -1
  62. package/dist/runtime/adapter/coordinator-bridge.d.ts +1 -2
  63. package/dist/runtime/adapter/coordinator-bridge.js +1 -1
  64. package/dist/runtime/adapter/coordinator-bridge.js.map +1 -1
  65. package/dist/runtime/adapter/dom-event-bridge.d.ts +1 -2
  66. package/dist/runtime/adapter/dom-event-bridge.js +1 -1
  67. package/dist/runtime/adapter/dom-event-bridge.js.map +1 -1
  68. package/dist/runtime/adapter/framework-error-bridge.d.ts +0 -1
  69. package/dist/runtime/adapter/framework-error-bridge.js.map +1 -1
  70. package/dist/runtime/adapter/instrumentation-bridge.d.ts +0 -1
  71. package/dist/runtime/adapter/instrumentation-bridge.js.map +1 -1
  72. package/dist/runtime/adapter/subscriber-fanout.d.ts +0 -1
  73. package/dist/runtime/adapter/subscriber-fanout.js.map +1 -1
  74. package/dist/runtime/catalog-registration.d.ts +12 -0
  75. package/dist/runtime/catalog-registration.js +54 -0
  76. package/dist/runtime/catalog-registration.js.map +1 -0
  77. package/dist/runtime/core/SectionEngineCore.d.ts +0 -1
  78. package/dist/runtime/core/SectionEngineCore.js.map +1 -1
  79. package/dist/runtime/core/cohort.d.ts +0 -1
  80. package/dist/runtime/core/cohort.js.map +1 -1
  81. package/dist/runtime/core/engine-input.d.ts +0 -1
  82. package/dist/runtime/core/engine-input.js.map +1 -1
  83. package/dist/runtime/core/engine-output.d.ts +2 -3
  84. package/dist/runtime/core/engine-output.js +2 -2
  85. package/dist/runtime/core/engine-output.js.map +1 -1
  86. package/dist/runtime/core/engine-readiness.d.ts +2 -3
  87. package/dist/runtime/core/engine-readiness.js.map +1 -1
  88. package/dist/runtime/core/engine-resolver.d.ts +13 -42
  89. package/dist/runtime/core/engine-resolver.js +19 -76
  90. package/dist/runtime/core/engine-resolver.js.map +1 -1
  91. package/dist/runtime/core/engine-stage-derivation.d.ts +0 -1
  92. package/dist/runtime/core/engine-stage-derivation.js.map +1 -1
  93. package/dist/runtime/core/engine-state.d.ts +0 -1
  94. package/dist/runtime/core/engine-state.js.map +1 -1
  95. package/dist/runtime/core/engine-transition.d.ts +1 -2
  96. package/dist/runtime/core/engine-transition.js +1 -1
  97. package/dist/runtime/core/engine-transition.js.map +1 -1
  98. package/dist/runtime/engine-context.d.ts +0 -1
  99. package/dist/runtime/engine-context.js.map +1 -1
  100. package/dist/runtime/engine.d.ts +1 -2
  101. package/dist/runtime/engine.js.map +1 -1
  102. package/dist/runtime/internal.d.ts +0 -1
  103. package/dist/runtime/internal.js.map +1 -1
  104. package/dist/runtime/registration-events.d.ts +0 -1
  105. package/dist/runtime/registration-events.js.map +1 -1
  106. package/dist/runtime/runtime-id.d.ts +0 -1
  107. package/dist/runtime/runtime-id.js.map +1 -1
  108. package/dist/runtime/section-runtime-engine-host-context.d.ts +22 -16
  109. package/dist/runtime/section-runtime-engine-host-context.js +10 -10
  110. package/dist/runtime/section-runtime-engine-host-context.js.map +1 -1
  111. package/dist/runtime/session-event-emitter-policy.d.ts +0 -1
  112. package/dist/runtime/session-event-emitter-policy.js.map +1 -1
  113. package/dist/runtime/stage-emit-gate.d.ts +4 -5
  114. package/dist/runtime/stage-emit-gate.js +3 -3
  115. package/dist/runtime/stage-emit-gate.js.map +1 -1
  116. package/dist/runtime/tool-host-contract.d.ts +0 -1
  117. package/dist/runtime/tool-host-contract.js.map +1 -1
  118. package/dist/services/AccessibilityCatalogResolver.d.ts +23 -1
  119. package/dist/services/AccessibilityCatalogResolver.js +200 -28
  120. package/dist/services/AccessibilityCatalogResolver.js.map +1 -1
  121. package/dist/services/ContextVariableStore.d.ts +0 -1
  122. package/dist/services/ContextVariableStore.js.map +1 -1
  123. package/dist/services/ElementToolStateStore.d.ts +0 -1
  124. package/dist/services/ElementToolStateStore.js.map +1 -1
  125. package/dist/services/HighlightCoordinator.d.ts +25 -1
  126. package/dist/services/HighlightCoordinator.js +125 -0
  127. package/dist/services/HighlightCoordinator.js.map +1 -1
  128. package/dist/services/I18nService.d.ts +0 -1
  129. package/dist/services/I18nService.js.map +1 -1
  130. package/dist/services/RangeSerializer.d.ts +0 -1
  131. package/dist/services/RangeSerializer.js.map +1 -1
  132. package/dist/services/SSMLExtractor.d.ts +16 -2
  133. package/dist/services/SSMLExtractor.js +86 -7
  134. package/dist/services/SSMLExtractor.js.map +1 -1
  135. package/dist/services/TTSService.d.ts +30 -5
  136. package/dist/services/TTSService.js +652 -159
  137. package/dist/services/TTSService.js.map +1 -1
  138. package/dist/services/ThemeProvider.d.ts +0 -1
  139. package/dist/services/ThemeProvider.js.map +1 -1
  140. package/dist/services/ToolConfigResolver.d.ts +0 -1
  141. package/dist/services/ToolConfigResolver.js.map +1 -1
  142. package/dist/services/ToolCoordinator.d.ts +0 -1
  143. package/dist/services/ToolCoordinator.js.map +1 -1
  144. package/dist/services/ToolRegistry.d.ts +2 -3
  145. package/dist/services/ToolRegistry.js +1 -1
  146. package/dist/services/ToolRegistry.js.map +1 -1
  147. package/dist/services/ToolkitCoordinator.d.ts +16 -74
  148. package/dist/services/ToolkitCoordinator.js +34 -113
  149. package/dist/services/ToolkitCoordinator.js.map +1 -1
  150. package/dist/services/create-tools-config.d.ts +0 -1
  151. package/dist/services/create-tools-config.js.map +1 -1
  152. package/dist/services/createDefaultToolRegistry.d.ts +0 -1
  153. package/dist/services/createDefaultToolRegistry.js.map +1 -1
  154. package/dist/services/defaultPersonalNeedsProfile.d.ts +0 -1
  155. package/dist/services/defaultPersonalNeedsProfile.js.map +1 -1
  156. package/dist/services/framework-error-bus.d.ts +0 -1
  157. package/dist/services/framework-error-bus.js.map +1 -1
  158. package/dist/services/framework-error.d.ts +0 -1
  159. package/dist/services/framework-error.js.map +1 -1
  160. package/dist/services/interfaces.d.ts +20 -3
  161. package/dist/services/interfaces.js.map +1 -1
  162. package/dist/services/pnp-standard-features.d.ts +0 -1
  163. package/dist/services/pnp-standard-features.js.map +1 -1
  164. package/dist/services/section-controller-types.d.ts +0 -1
  165. package/dist/services/section-controller-types.js.map +1 -1
  166. package/dist/services/tool-config-defaults.d.ts +0 -1
  167. package/dist/services/tool-config-defaults.js.map +1 -1
  168. package/dist/services/tool-config-validation.d.ts +1 -2
  169. package/dist/services/tool-config-validation.js +7 -7
  170. package/dist/services/tool-config-validation.js.map +1 -1
  171. package/dist/services/tool-context.d.ts +0 -1
  172. package/dist/services/tool-context.js.map +1 -1
  173. package/dist/services/tool-instance-id.d.ts +0 -1
  174. package/dist/services/tool-instance-id.js +1 -1
  175. package/dist/services/tool-instance-id.js.map +1 -1
  176. package/dist/services/tool-providers/DesmosToolProvider.d.ts +0 -1
  177. package/dist/services/tool-providers/DesmosToolProvider.js.map +1 -1
  178. package/dist/services/tool-providers/TTSToolProvider.d.ts +0 -1
  179. package/dist/services/tool-providers/TTSToolProvider.js +3 -3
  180. package/dist/services/tool-providers/TTSToolProvider.js.map +1 -1
  181. package/dist/services/tool-providers/ToolProviderApi.d.ts +0 -1
  182. package/dist/services/tool-providers/ToolProviderApi.js.map +1 -1
  183. package/dist/services/tool-providers/ToolProviderRegistry.d.ts +0 -1
  184. package/dist/services/tool-providers/ToolProviderRegistry.js.map +1 -1
  185. package/dist/services/tool-providers/index.d.ts +0 -1
  186. package/dist/services/tool-providers/index.js.map +1 -1
  187. package/dist/services/toolbar-items.d.ts +0 -1
  188. package/dist/services/toolbar-items.js.map +1 -1
  189. package/dist/services/tools-config-normalizer.d.ts +13 -3
  190. package/dist/services/tools-config-normalizer.js +3 -8
  191. package/dist/services/tools-config-normalizer.js.map +1 -1
  192. package/dist/services/tts/browser-provider.d.ts +0 -1
  193. package/dist/services/tts/browser-provider.js +2 -0
  194. package/dist/services/tts/browser-provider.js.map +1 -1
  195. package/dist/services/tts/catalog-span-alignment.d.ts +39 -0
  196. package/dist/services/tts/catalog-span-alignment.js +300 -0
  197. package/dist/services/tts/catalog-span-alignment.js.map +1 -0
  198. package/dist/services/tts/generated-speech/assemble-plan.d.ts +33 -0
  199. package/dist/services/tts/generated-speech/assemble-plan.js +111 -0
  200. package/dist/services/tts/generated-speech/assemble-plan.js.map +1 -0
  201. package/dist/services/tts/generated-speech/dom/build-dom-plan.d.ts +25 -0
  202. package/dist/services/tts/generated-speech/dom/build-dom-plan.js +66 -0
  203. package/dist/services/tts/generated-speech/dom/build-dom-plan.js.map +1 -0
  204. package/dist/services/tts/generated-speech/dom/to-chunk-inputs.d.ts +19 -0
  205. package/dist/services/tts/generated-speech/dom/to-chunk-inputs.js +71 -0
  206. package/dist/services/tts/generated-speech/dom/to-chunk-inputs.js.map +1 -0
  207. package/dist/services/tts/generated-speech/dom/types.d.ts +37 -0
  208. package/dist/services/tts/generated-speech/dom/types.js +2 -0
  209. package/dist/services/tts/generated-speech/dom/types.js.map +1 -0
  210. package/dist/services/tts/generated-speech/index.d.ts +17 -0
  211. package/dist/services/tts/generated-speech/index.js +17 -0
  212. package/dist/services/tts/generated-speech/index.js.map +1 -0
  213. package/dist/services/tts/generated-speech/math-speech-cache.d.ts +15 -0
  214. package/dist/services/tts/generated-speech/math-speech-cache.js +78 -0
  215. package/dist/services/tts/generated-speech/math-speech-cache.js.map +1 -0
  216. package/dist/services/tts/generated-speech/types.d.ts +104 -0
  217. package/dist/services/tts/generated-speech/types.js +18 -0
  218. package/dist/services/tts/generated-speech/types.js.map +1 -0
  219. package/dist/services/tts/highlight-pipeline/boundary-normalizer.d.ts +2 -0
  220. package/dist/services/tts/highlight-pipeline/boundary-normalizer.js +106 -0
  221. package/dist/services/tts/highlight-pipeline/boundary-normalizer.js.map +1 -0
  222. package/dist/services/tts/highlight-pipeline/create-highlight-plan.d.ts +6 -0
  223. package/dist/services/tts/highlight-pipeline/create-highlight-plan.js +217 -0
  224. package/dist/services/tts/highlight-pipeline/create-highlight-plan.js.map +1 -0
  225. package/dist/services/tts/highlight-pipeline/highlight-policy.d.ts +2 -0
  226. package/dist/services/tts/highlight-pipeline/highlight-policy.js +32 -0
  227. package/dist/services/tts/highlight-pipeline/highlight-policy.js.map +1 -0
  228. package/dist/services/tts/highlight-pipeline/index.d.ts +9 -0
  229. package/dist/services/tts/highlight-pipeline/index.js +9 -0
  230. package/dist/services/tts/highlight-pipeline/index.js.map +1 -0
  231. package/dist/services/tts/highlight-pipeline/math-semantic-resolver.d.ts +3 -0
  232. package/dist/services/tts/highlight-pipeline/math-semantic-resolver.js +32 -0
  233. package/dist/services/tts/highlight-pipeline/math-semantic-resolver.js.map +1 -0
  234. package/dist/services/tts/highlight-pipeline/normalize-speech-chunks.d.ts +29 -0
  235. package/dist/services/tts/highlight-pipeline/normalize-speech-chunks.js +44 -0
  236. package/dist/services/tts/highlight-pipeline/normalize-speech-chunks.js.map +1 -0
  237. package/dist/services/tts/highlight-pipeline/prose-boundary-resolver.d.ts +2 -0
  238. package/dist/services/tts/highlight-pipeline/prose-boundary-resolver.js +20 -0
  239. package/dist/services/tts/highlight-pipeline/prose-boundary-resolver.js.map +1 -0
  240. package/dist/services/tts/highlight-pipeline/readable-region.d.ts +1 -0
  241. package/dist/services/tts/highlight-pipeline/readable-region.js +19 -0
  242. package/dist/services/tts/highlight-pipeline/readable-region.js.map +1 -0
  243. package/dist/services/tts/highlight-pipeline/rendered-math-target-resolver.d.ts +6 -0
  244. package/dist/services/tts/highlight-pipeline/rendered-math-target-resolver.js +198 -0
  245. package/dist/services/tts/highlight-pipeline/rendered-math-target-resolver.js.map +1 -0
  246. package/dist/services/tts/highlight-pipeline/types.d.ts +72 -0
  247. package/dist/services/tts/highlight-pipeline/types.js +2 -0
  248. package/dist/services/tts/highlight-pipeline/types.js.map +1 -0
  249. package/dist/services/tts/highlight-pipeline/visible-map-range.d.ts +2 -0
  250. package/dist/services/tts/highlight-pipeline/visible-map-range.js +22 -0
  251. package/dist/services/tts/highlight-pipeline/visible-map-range.js.map +1 -0
  252. package/dist/services/tts/math-alignment/index.d.ts +30 -0
  253. package/dist/services/tts/math-alignment/index.js +66 -0
  254. package/dist/services/tts/math-alignment/index.js.map +1 -0
  255. package/dist/services/tts/math-alignment/mathml-tokenizer.d.ts +2 -0
  256. package/dist/services/tts/math-alignment/mathml-tokenizer.js +317 -0
  257. package/dist/services/tts/math-alignment/mathml-tokenizer.js.map +1 -0
  258. package/dist/services/tts/math-alignment/range-resolver.d.ts +10 -0
  259. package/dist/services/tts/math-alignment/range-resolver.js +13 -0
  260. package/dist/services/tts/math-alignment/range-resolver.js.map +1 -0
  261. package/dist/services/tts/math-alignment/sequence-aligner.d.ts +7 -0
  262. package/dist/services/tts/math-alignment/sequence-aligner.js +119 -0
  263. package/dist/services/tts/math-alignment/sequence-aligner.js.map +1 -0
  264. package/dist/services/tts/math-alignment/speech-tokenizer.d.ts +31 -0
  265. package/dist/services/tts/math-alignment/speech-tokenizer.js +143 -0
  266. package/dist/services/tts/math-alignment/speech-tokenizer.js.map +1 -0
  267. package/dist/services/tts/math-alignment/types.d.ts +58 -0
  268. package/dist/services/tts/math-alignment/types.js +2 -0
  269. package/dist/services/tts/math-alignment/types.js.map +1 -0
  270. package/dist/services/tts/math-aware-text-processing.d.ts +18 -0
  271. package/dist/services/tts/math-aware-text-processing.js +348 -0
  272. package/dist/services/tts/math-aware-text-processing.js.map +1 -0
  273. package/dist/services/tts/math-speech.d.ts +44 -0
  274. package/dist/services/tts/math-speech.js +147 -0
  275. package/dist/services/tts/math-speech.js.map +1 -0
  276. package/dist/services/tts/mathml-sanitization.d.ts +1 -0
  277. package/dist/services/tts/mathml-sanitization.js +170 -0
  278. package/dist/services/tts/mathml-sanitization.js.map +1 -0
  279. package/dist/services/tts/ssml/spoken-text.d.ts +33 -0
  280. package/dist/services/tts/ssml/spoken-text.js +159 -0
  281. package/dist/services/tts/ssml/spoken-text.js.map +1 -0
  282. package/dist/services/tts/text-processing.d.ts +3 -1
  283. package/dist/services/tts/text-processing.js +30 -4
  284. package/dist/services/tts/text-processing.js.map +1 -1
  285. package/dist/services/tts/text-segmentation.d.ts +0 -1
  286. package/dist/services/tts/text-segmentation.js.map +1 -1
  287. package/dist/services/tts/visual-line-ranges.d.ts +0 -1
  288. package/dist/services/tts/visual-line-ranges.js.map +1 -1
  289. package/dist/services/tts-control-events.d.ts +0 -1
  290. package/dist/services/tts-control-events.js.map +1 -1
  291. package/dist/services/tts-runtime-config.d.ts +17 -2
  292. package/dist/services/tts-runtime-config.js +11 -1
  293. package/dist/services/tts-runtime-config.js.map +1 -1
  294. package/dist/tools/calculators/desmos-provider.d.ts +0 -1
  295. package/dist/tools/calculators/desmos-provider.js.map +1 -1
  296. package/dist/tools/client.d.ts +0 -1
  297. package/dist/tools/client.js.map +1 -1
  298. package/dist/tools/default-tool-module-loaders.d.ts +0 -1
  299. package/dist/tools/default-tool-module-loaders.js.map +1 -1
  300. package/dist/tools/index.d.ts +0 -1
  301. package/dist/tools/index.js.map +1 -1
  302. package/dist/tools/library-loader.d.ts +0 -1
  303. package/dist/tools/library-loader.js.map +1 -1
  304. package/dist/tools/registrations/accessibility-tools.d.ts +0 -1
  305. package/dist/tools/registrations/accessibility-tools.js +0 -1
  306. package/dist/tools/registrations/accessibility-tools.js.map +1 -1
  307. package/dist/tools/registrations/calculator.d.ts +0 -1
  308. package/dist/tools/registrations/calculator.js +41 -2
  309. package/dist/tools/registrations/calculator.js.map +1 -1
  310. package/dist/tools/registrations/interaction-tools.d.ts +0 -1
  311. package/dist/tools/registrations/interaction-tools.js.map +1 -1
  312. package/dist/tools/registrations/measurement-tools.d.ts +0 -1
  313. package/dist/tools/registrations/measurement-tools.js.map +1 -1
  314. package/dist/tools/registrations/subject-specific-tools.d.ts +0 -1
  315. package/dist/tools/registrations/subject-specific-tools.js.map +1 -1
  316. package/dist/tools/registrations/toolbar-registration-helpers.d.ts +0 -1
  317. package/dist/tools/registrations/toolbar-registration-helpers.js.map +1 -1
  318. package/dist/tools/registrations/tts.d.ts +0 -1
  319. package/dist/tools/registrations/tts.js.map +1 -1
  320. package/dist/tools/response-discovery.d.ts +0 -1
  321. package/dist/tools/response-discovery.js.map +1 -1
  322. package/dist/tools/tool-tag-map.d.ts +0 -1
  323. package/dist/tools/tool-tag-map.js +0 -1
  324. package/dist/tools/tool-tag-map.js.map +1 -1
  325. package/dist/tools/types.d.ts +0 -1
  326. package/dist/tools/types.js.map +1 -1
  327. package/dist/tools/variant-resolver.d.ts +0 -1
  328. package/dist/tools/variant-resolver.js.map +1 -1
  329. package/dist/utils/logger.d.ts +0 -1
  330. package/dist/utils/logger.js.map +1 -1
  331. package/package.json +8 -11
  332. package/dist/attempt/AssessmentSession.d.ts.map +0 -1
  333. package/dist/attempt/TestSession.d.ts.map +0 -1
  334. package/dist/attempt/adapters/activity-to-test-attempt-session.d.ts.map +0 -1
  335. package/dist/components/item-toolbar-element.d.ts.map +0 -1
  336. package/dist/components/pie-assessment-toolkit-element.d.ts.map +0 -1
  337. package/dist/components/section-toolbar-element.d.ts.map +0 -1
  338. package/dist/context/assessment-toolkit-context.d.ts.map +0 -1
  339. package/dist/context/runtime-context-consumer.d.ts.map +0 -1
  340. package/dist/index.d.ts.map +0 -1
  341. package/dist/item-loader.d.ts.map +0 -1
  342. package/dist/policy/core/PolicySource.d.ts.map +0 -1
  343. package/dist/policy/core/ToolPolicyEngine.d.ts.map +0 -1
  344. package/dist/policy/core/compose-decision.d.ts.map +0 -1
  345. package/dist/policy/core/decision-types.d.ts.map +0 -1
  346. package/dist/policy/core/engine-context.d.ts.map +0 -1
  347. package/dist/policy/core/pnp-policy-inputs.d.ts.map +0 -1
  348. package/dist/policy/core/policy-source-tag.d.ts.map +0 -1
  349. package/dist/policy/core/provenance.d.ts.map +0 -1
  350. package/dist/policy/engine.d.ts.map +0 -1
  351. package/dist/policy/internal.d.ts.map +0 -1
  352. package/dist/policy/sources/PnpPolicySource.d.ts.map +0 -1
  353. package/dist/runtime/RuntimeRegistry.d.ts.map +0 -1
  354. package/dist/runtime/SectionRuntimeEngine.d.ts.map +0 -1
  355. package/dist/runtime/adapter/SectionEngineAdapter.d.ts.map +0 -1
  356. package/dist/runtime/adapter/coordinator-bridge.d.ts.map +0 -1
  357. package/dist/runtime/adapter/dom-event-bridge.d.ts.map +0 -1
  358. package/dist/runtime/adapter/framework-error-bridge.d.ts.map +0 -1
  359. package/dist/runtime/adapter/instrumentation-bridge.d.ts.map +0 -1
  360. package/dist/runtime/adapter/subscriber-fanout.d.ts.map +0 -1
  361. package/dist/runtime/core/SectionEngineCore.d.ts.map +0 -1
  362. package/dist/runtime/core/cohort.d.ts.map +0 -1
  363. package/dist/runtime/core/engine-input.d.ts.map +0 -1
  364. package/dist/runtime/core/engine-output.d.ts.map +0 -1
  365. package/dist/runtime/core/engine-readiness.d.ts.map +0 -1
  366. package/dist/runtime/core/engine-resolver.d.ts.map +0 -1
  367. package/dist/runtime/core/engine-stage-derivation.d.ts.map +0 -1
  368. package/dist/runtime/core/engine-state.d.ts.map +0 -1
  369. package/dist/runtime/core/engine-transition.d.ts.map +0 -1
  370. package/dist/runtime/engine-context.d.ts.map +0 -1
  371. package/dist/runtime/engine.d.ts.map +0 -1
  372. package/dist/runtime/internal.d.ts.map +0 -1
  373. package/dist/runtime/registration-events.d.ts.map +0 -1
  374. package/dist/runtime/runtime-id.d.ts.map +0 -1
  375. package/dist/runtime/section-runtime-engine-host-context.d.ts.map +0 -1
  376. package/dist/runtime/session-event-emitter-policy.d.ts.map +0 -1
  377. package/dist/runtime/stage-emit-gate.d.ts.map +0 -1
  378. package/dist/runtime/tool-host-contract.d.ts.map +0 -1
  379. package/dist/services/AccessibilityCatalogResolver.d.ts.map +0 -1
  380. package/dist/services/ContextVariableStore.d.ts.map +0 -1
  381. package/dist/services/ElementToolStateStore.d.ts.map +0 -1
  382. package/dist/services/HighlightCoordinator.d.ts.map +0 -1
  383. package/dist/services/I18nService.d.ts.map +0 -1
  384. package/dist/services/PNPToolResolver.d.ts +0 -281
  385. package/dist/services/PNPToolResolver.d.ts.map +0 -1
  386. package/dist/services/PNPToolResolver.js +0 -514
  387. package/dist/services/PNPToolResolver.js.map +0 -1
  388. package/dist/services/RangeSerializer.d.ts.map +0 -1
  389. package/dist/services/SSMLExtractor.d.ts.map +0 -1
  390. package/dist/services/TTSService.d.ts.map +0 -1
  391. package/dist/services/ThemeProvider.d.ts.map +0 -1
  392. package/dist/services/ToolConfigResolver.d.ts.map +0 -1
  393. package/dist/services/ToolCoordinator.d.ts.map +0 -1
  394. package/dist/services/ToolRegistry.d.ts.map +0 -1
  395. package/dist/services/ToolkitCoordinator.d.ts.map +0 -1
  396. package/dist/services/create-tools-config.d.ts.map +0 -1
  397. package/dist/services/createDefaultToolRegistry.d.ts.map +0 -1
  398. package/dist/services/defaultPersonalNeedsProfile.d.ts.map +0 -1
  399. package/dist/services/framework-error-bus.d.ts.map +0 -1
  400. package/dist/services/framework-error.d.ts.map +0 -1
  401. package/dist/services/interfaces.d.ts.map +0 -1
  402. package/dist/services/pnp-provenance.d.ts +0 -167
  403. package/dist/services/pnp-provenance.d.ts.map +0 -1
  404. package/dist/services/pnp-provenance.js +0 -231
  405. package/dist/services/pnp-provenance.js.map +0 -1
  406. package/dist/services/pnp-standard-features.d.ts.map +0 -1
  407. package/dist/services/section-controller-types.d.ts.map +0 -1
  408. package/dist/services/tool-config-defaults.d.ts.map +0 -1
  409. package/dist/services/tool-config-validation.d.ts.map +0 -1
  410. package/dist/services/tool-context.d.ts.map +0 -1
  411. package/dist/services/tool-instance-id.d.ts.map +0 -1
  412. package/dist/services/tool-providers/DesmosToolProvider.d.ts.map +0 -1
  413. package/dist/services/tool-providers/TTSToolProvider.d.ts.map +0 -1
  414. package/dist/services/tool-providers/ToolProviderApi.d.ts.map +0 -1
  415. package/dist/services/tool-providers/ToolProviderRegistry.d.ts.map +0 -1
  416. package/dist/services/tool-providers/index.d.ts.map +0 -1
  417. package/dist/services/toolbar-items.d.ts.map +0 -1
  418. package/dist/services/tools-config-normalizer.d.ts.map +0 -1
  419. package/dist/services/tts/browser-provider.d.ts.map +0 -1
  420. package/dist/services/tts/text-processing.d.ts.map +0 -1
  421. package/dist/services/tts/text-segmentation.d.ts.map +0 -1
  422. package/dist/services/tts/visual-line-ranges.d.ts.map +0 -1
  423. package/dist/services/tts-control-events.d.ts.map +0 -1
  424. package/dist/services/tts-runtime-config.d.ts.map +0 -1
  425. package/dist/tools/calculators/desmos-provider.d.ts.map +0 -1
  426. package/dist/tools/client.d.ts.map +0 -1
  427. package/dist/tools/default-tool-module-loaders.d.ts.map +0 -1
  428. package/dist/tools/index.d.ts.map +0 -1
  429. package/dist/tools/library-loader.d.ts.map +0 -1
  430. package/dist/tools/registrations/accessibility-tools.d.ts.map +0 -1
  431. package/dist/tools/registrations/calculator.d.ts.map +0 -1
  432. package/dist/tools/registrations/interaction-tools.d.ts.map +0 -1
  433. package/dist/tools/registrations/measurement-tools.d.ts.map +0 -1
  434. package/dist/tools/registrations/subject-specific-tools.d.ts.map +0 -1
  435. package/dist/tools/registrations/toolbar-registration-helpers.d.ts.map +0 -1
  436. package/dist/tools/registrations/tts.d.ts.map +0 -1
  437. package/dist/tools/response-discovery.d.ts.map +0 -1
  438. package/dist/tools/tool-tag-map.d.ts.map +0 -1
  439. package/dist/tools/types.d.ts.map +0 -1
  440. package/dist/tools/variant-resolver.d.ts.map +0 -1
  441. package/dist/utils/logger.d.ts.map +0 -1
@@ -1,7 +1,18 @@
1
1
  export const normalizeTextForSpeech = (text) => text.trim().replace(/\s+/g, " ");
2
+ // Single source of truth for aligning spoken text to visible / math text.
3
+ // Letters are matched with `\p{L}` so the tokenizer is Unicode-aware — accented
4
+ // Latin ("café") and non-Latin scripts stay one token instead of being split
5
+ // or dropped, which is what previously limited word-level highlight alignment
6
+ // to ASCII. Numbers cover integers and decimals; the trailing class lists the
7
+ // math glyphs a TTS engine may surface as a single visible token. A fresh
8
+ // RegExp is returned each call because the global flag carries mutable
9
+ // `lastIndex` state that must not be shared across call sites.
10
+ export const createSpeechAlignmentTokenPattern = () => /[\p{L}]+|\d+(?:\.\d+)?|[±√=+\-*/()²³^×÷≤≥≠≈<>|%°'′\u2062]/gu;
2
11
  export const isElementHiddenForTTS = (element) => {
3
12
  if (element.hidden)
4
13
  return true;
14
+ if (element.tagName?.toLowerCase() === "mjx-assistive-mml")
15
+ return true;
5
16
  if (element.getAttribute("aria-hidden") === "true")
6
17
  return true;
7
18
  if (element.hasAttribute("inert"))
@@ -38,7 +49,20 @@ export const isElementHiddenForTTS = (element) => {
38
49
  }
39
50
  return false;
40
51
  };
41
- const shouldInsertBoundarySpace = (previousChar, nextChar, options) => {
52
+ export const isNodeHiddenForTTS = (node, root) => {
53
+ let current = node.nodeType === 1
54
+ ? node
55
+ : node.parentElement;
56
+ while (current) {
57
+ if (isElementHiddenForTTS(current))
58
+ return true;
59
+ if (root && current === root)
60
+ break;
61
+ current = current.parentElement;
62
+ }
63
+ return false;
64
+ };
65
+ export const shouldInsertWordBoundarySpace = (previousChar, nextChar, options) => {
42
66
  if (!previousChar || !nextChar)
43
67
  return false;
44
68
  if (/\s/.test(previousChar) || /\s/.test(nextChar))
@@ -50,7 +74,9 @@ const shouldInsertBoundarySpace = (previousChar, nextChar, options) => {
50
74
  try {
51
75
  const Segmenter = globalThis.Intl?.Segmenter;
52
76
  if (typeof Segmenter === "function") {
53
- const segmenter = new Segmenter(options?.locale, { granularity: "word" });
77
+ const segmenter = new Segmenter(options?.locale, {
78
+ granularity: "word",
79
+ });
54
80
  const segments = Array.from(segmenter.segment(`${previousChar}${nextChar}`));
55
81
  const wordLikeCount = segments.filter((segment) => segment.isWordLike !== false &&
56
82
  segment.segment.trim().length > 0).length;
@@ -85,13 +111,13 @@ export const collectVisibleTextAndMap = (element, options) => {
85
111
  while (current) {
86
112
  const textNode = current;
87
113
  const parent = textNode.parentElement;
88
- if (parent && !isElementHiddenForTTS(parent)) {
114
+ if (parent && !isNodeHiddenForTTS(textNode, element)) {
89
115
  const raw = textNode.textContent || "";
90
116
  const firstVisibleMatch = raw.match(/\S/);
91
117
  const firstVisibleChar = firstVisibleMatch ? firstVisibleMatch[0] : null;
92
118
  if (!inLeadingWhitespace &&
93
119
  !lastCharWasWhitespace &&
94
- shouldInsertBoundarySpace(previousVisibleChar, firstVisibleChar, options)) {
120
+ shouldInsertWordBoundarySpace(previousVisibleChar, firstVisibleChar, options)) {
95
121
  outChars.push(" ");
96
122
  if (lastMapped) {
97
123
  map.set(outPos, lastMapped);
@@ -1 +1 @@
1
- {"version":3,"file":"text-processing.js","sourceRoot":"","sources":["../../../src/services/tts/text-processing.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC9D,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAElC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAW,EAAE;IAClE,IAAK,OAAuB,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAChE,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,SAAS,GAAI,OAAuB,CAAC,SAAS,CAAC;IACrD,IACC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;QAC9B,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC;QAClC,SAAS,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACrC,CAAC;QACF,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC/D,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;QACtD,MAAM,MAAM,GACX,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvB,KAAK,IAAI,CAAC;YACV,MAAM,IAAI,CAAC,CAAC;QACb,MAAM,eAAe,GACpB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;YACpC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACtC,IACC,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;YAC7D,MAAM;YACN,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,eAAe,CAAC,EAC/C,CAAC;YACF,OAAO,IAAI,CAAC;QACb,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CACjC,YAA2B,EAC3B,QAAuB,EACvB,OAA+B,EACrB,EAAE;IACZ,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,MAAM,IAAI,GAAG,OAAO,EAAE,mBAAmB,IAAI,oBAAoB,CAAC;IAClE,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QACnC,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;YAC7C,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,YAAY,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC7E,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CACpC,CAAC,OAAO,EAAE,EAAE,CACV,OAAoC,CAAC,UAAU,KAAK,KAAK;oBAC1D,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAClC,CAAC,MAAM,CAAC;gBACT,IAAI,aAAa,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC;YACrC,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,uCAAuC;QACxC,CAAC;IACF,CAAC;IACD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,WAAW,IAAI,WAAW,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACvC,OAAgB,EAChB,OAA+B,EACY,EAAE;IAC7C,MAAM,GAAG,GAAsB,IAAI,GAAG,EAAE,CAAC;IACzC,IACC,OAAO,QAAQ,KAAK,WAAW;QAC/B,OAAQ,QAA2C,CAAC,gBAAgB;YACnE,UAAU;QACX,OAAO,UAAU,KAAK,WAAW,EAChC,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;IAC1B,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,mBAAmB,GAAG,IAAI,CAAC;IAC/B,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAClC,IAAI,UAAU,GAA0C,IAAI,CAAC;IAC7D,IAAI,mBAAmB,GAAkB,IAAI,CAAC;IAE9C,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IACxE,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,OAAO,OAAO,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,OAAe,CAAC;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;QACtC,IAAI,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;YACvC,MAAM,iBAAiB,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAEzE,IACC,CAAC,mBAAmB;gBACpB,CAAC,qBAAqB;gBACtB,yBAAyB,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,OAAO,CAAC,EACxE,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,UAAU,EAAE,CAAC;oBAChB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAC7B,CAAC;gBACD,MAAM,EAAE,CAAC;gBACT,qBAAqB,GAAG,IAAI,CAAC;YAC9B,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEnC,IAAI,mBAAmB,EAAE,CAAC;oBACzB,IAAI,CAAC,YAAY,EAAE,CAAC;wBACnB,mBAAmB,GAAG,KAAK,CAAC;wBAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAClB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;wBAC/C,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;wBAC3C,MAAM,EAAE,CAAC;wBACT,qBAAqB,GAAG,KAAK,CAAC;wBAC9B,mBAAmB,GAAG,EAAE,CAAC;oBAC1B,CAAC;gBACF,CAAC;qBAAM,IAAI,YAAY,EAAE,CAAC;oBACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACnB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;wBAC/C,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;wBAC3C,MAAM,EAAE,CAAC;oBACV,CAAC;oBACD,qBAAqB,GAAG,IAAI,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACP,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAClB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC/C,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;oBAC3C,MAAM,EAAE,CAAC;oBACT,qBAAqB,GAAG,KAAK,CAAC;oBAC9B,mBAAmB,GAAG,EAAE,CAAC;gBAC1B,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACzC,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,OAAgB,EAChB,OAA+B,EACtB,EAAE,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"text-processing.js","sourceRoot":"","sources":["../../../src/services/tts/text-processing.ts"],"names":[],"mappings":"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","sourcesContent":["export type NormalizedTextMap = Map<number, { node: Text; offset: number }>;\nexport type BoundarySpacingMode = \"segmenterPreferred\" | \"alnum\" | \"none\";\n\nexport interface TextProcessingOptions {\n\tlocale?: string;\n\tboundarySpacingMode?: BoundarySpacingMode;\n}\n\nexport const normalizeTextForSpeech = (text: string): string =>\n\ttext.trim().replace(/\\s+/g, \" \");\n\n// Single source of truth for aligning spoken text to visible / math text.\n// Letters are matched with `\\p{L}` so the tokenizer is Unicode-aware — accented\n// Latin (\"café\") and non-Latin scripts stay one token instead of being split\n// or dropped, which is what previously limited word-level highlight alignment\n// to ASCII. Numbers cover integers and decimals; the trailing class lists the\n// math glyphs a TTS engine may surface as a single visible token. A fresh\n// RegExp is returned each call because the global flag carries mutable\n// `lastIndex` state that must not be shared across call sites.\nexport const createSpeechAlignmentTokenPattern = (): RegExp =>\n\t/[\\p{L}]+|\\d+(?:\\.\\d+)?|[±√=+\\-*/()²³^×÷≤≥≠≈<>|%°'′\\u2062]/gu;\n\nexport const isElementHiddenForTTS = (element: Element): boolean => {\n\tif ((element as HTMLElement).hidden) return true;\n\tif (element.tagName?.toLowerCase() === \"mjx-assistive-mml\") return true;\n\tif (element.getAttribute(\"aria-hidden\") === \"true\") return true;\n\tif (element.hasAttribute(\"inert\")) return true;\n\tconst classList = (element as HTMLElement).classList;\n\tif (\n\t\tclassList?.contains(\"sr-only\") ||\n\t\tclassList?.contains(\"pie-sr-only\") ||\n\t\tclassList?.contains(\"visually-hidden\")\n\t) {\n\t\treturn true;\n\t}\n\tif (typeof window !== \"undefined\") {\n\t\tconst style = window.getComputedStyle(element);\n\t\tif (style.display === \"none\" || style.visibility === \"hidden\") {\n\t\t\treturn true;\n\t\t}\n\t\tconst width = Number.parseFloat(style.width || \"0\");\n\t\tconst height = Number.parseFloat(style.height || \"0\");\n\t\tconst isTiny =\n\t\t\tNumber.isFinite(width) &&\n\t\t\tNumber.isFinite(height) &&\n\t\t\twidth <= 1 &&\n\t\t\theight <= 1;\n\t\tconst isOffscreenClip =\n\t\t\tstyle.clipPath.includes(\"inset(50%\") ||\n\t\t\tstyle.clipPath.includes(\"inset(100%\") ||\n\t\t\tstyle.clip.includes(\"rect(0px, 0px, 0px, 0px)\") ||\n\t\t\tstyle.clip.includes(\"rect(0 0 0 0)\");\n\t\tif (\n\t\t\t(style.position === \"absolute\" || style.position === \"fixed\") &&\n\t\t\tisTiny &&\n\t\t\t(style.overflow === \"hidden\" || isOffscreenClip)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\tif (style.opacity === \"0\" && isTiny) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nexport const isNodeHiddenForTTS = (\n\tnode: Node,\n\troot?: Element | null,\n): boolean => {\n\tlet current =\n\t\tnode.nodeType === 1\n\t\t\t? (node as Element)\n\t\t\t: (node.parentElement as Element | null);\n\twhile (current) {\n\t\tif (isElementHiddenForTTS(current)) return true;\n\t\tif (root && current === root) break;\n\t\tcurrent = current.parentElement;\n\t}\n\treturn false;\n};\n\nexport const shouldInsertWordBoundarySpace = (\n\tpreviousChar: string | null,\n\tnextChar: string | null,\n\toptions?: TextProcessingOptions,\n): boolean => {\n\tif (!previousChar || !nextChar) return false;\n\tif (/\\s/.test(previousChar) || /\\s/.test(nextChar)) return false;\n\tconst mode = options?.boundarySpacingMode ?? \"segmenterPreferred\";\n\tif (mode === \"none\") return false;\n\tif (mode === \"segmenterPreferred\") {\n\t\ttry {\n\t\t\tconst Segmenter = globalThis.Intl?.Segmenter;\n\t\t\tif (typeof Segmenter === \"function\") {\n\t\t\t\tconst segmenter = new Segmenter(options?.locale, {\n\t\t\t\t\tgranularity: \"word\",\n\t\t\t\t});\n\t\t\t\tconst segments = Array.from(\n\t\t\t\t\tsegmenter.segment(`${previousChar}${nextChar}`),\n\t\t\t\t);\n\t\t\t\tconst wordLikeCount = segments.filter(\n\t\t\t\t\t(segment) =>\n\t\t\t\t\t\t(segment as { isWordLike?: boolean }).isWordLike !== false &&\n\t\t\t\t\t\tsegment.segment.trim().length > 0,\n\t\t\t\t).length;\n\t\t\t\tif (wordLikeCount >= 2) return true;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Fall back to alnum heuristics below.\n\t\t}\n\t}\n\tconst prevIsAlnum = /[A-Za-z0-9]/.test(previousChar);\n\tconst nextIsAlnum = /[A-Za-z0-9]/.test(nextChar);\n\treturn prevIsAlnum && nextIsAlnum;\n};\n\nexport const collectVisibleTextAndMap = (\n\telement: Element,\n\toptions?: TextProcessingOptions,\n): { text: string; map: NormalizedTextMap } => {\n\tconst map: NormalizedTextMap = new Map();\n\tif (\n\t\ttypeof document === \"undefined\" ||\n\t\ttypeof (document as { createTreeWalker?: unknown }).createTreeWalker !==\n\t\t\t\"function\" ||\n\t\ttypeof NodeFilter === \"undefined\"\n\t) {\n\t\treturn { text: \"\", map };\n\t}\n\tconst outChars: string[] = [];\n\tlet outPos = 0;\n\tlet inLeadingWhitespace = true;\n\tlet lastCharWasWhitespace = false;\n\tlet lastMapped: { node: Text; offset: number } | null = null;\n\tlet previousVisibleChar: string | null = null;\n\n\tconst walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);\n\tlet current = walker.nextNode();\n\twhile (current) {\n\t\tconst textNode = current as Text;\n\t\tconst parent = textNode.parentElement;\n\t\tif (parent && !isNodeHiddenForTTS(textNode, element)) {\n\t\t\tconst raw = textNode.textContent || \"\";\n\t\t\tconst firstVisibleMatch = raw.match(/\\S/);\n\t\t\tconst firstVisibleChar = firstVisibleMatch ? firstVisibleMatch[0] : null;\n\n\t\t\tif (\n\t\t\t\t!inLeadingWhitespace &&\n\t\t\t\t!lastCharWasWhitespace &&\n\t\t\t\tshouldInsertWordBoundarySpace(\n\t\t\t\t\tpreviousVisibleChar,\n\t\t\t\t\tfirstVisibleChar,\n\t\t\t\t\toptions,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\toutChars.push(\" \");\n\t\t\t\tif (lastMapped) {\n\t\t\t\t\tmap.set(outPos, lastMapped);\n\t\t\t\t}\n\t\t\t\toutPos++;\n\t\t\t\tlastCharWasWhitespace = true;\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < raw.length; i++) {\n\t\t\t\tconst ch = raw[i];\n\t\t\t\tconst isWhitespace = /\\s/.test(ch);\n\n\t\t\t\tif (inLeadingWhitespace) {\n\t\t\t\t\tif (!isWhitespace) {\n\t\t\t\t\t\tinLeadingWhitespace = false;\n\t\t\t\t\t\toutChars.push(ch);\n\t\t\t\t\t\tmap.set(outPos, { node: textNode, offset: i });\n\t\t\t\t\t\tlastMapped = { node: textNode, offset: i };\n\t\t\t\t\t\toutPos++;\n\t\t\t\t\t\tlastCharWasWhitespace = false;\n\t\t\t\t\t\tpreviousVisibleChar = ch;\n\t\t\t\t\t}\n\t\t\t\t} else if (isWhitespace) {\n\t\t\t\t\tif (!lastCharWasWhitespace) {\n\t\t\t\t\t\toutChars.push(\" \");\n\t\t\t\t\t\tmap.set(outPos, { node: textNode, offset: i });\n\t\t\t\t\t\tlastMapped = { node: textNode, offset: i };\n\t\t\t\t\t\toutPos++;\n\t\t\t\t\t}\n\t\t\t\t\tlastCharWasWhitespace = true;\n\t\t\t\t} else {\n\t\t\t\t\toutChars.push(ch);\n\t\t\t\t\tmap.set(outPos, { node: textNode, offset: i });\n\t\t\t\t\tlastMapped = { node: textNode, offset: i };\n\t\t\t\t\toutPos++;\n\t\t\t\t\tlastCharWasWhitespace = false;\n\t\t\t\t\tpreviousVisibleChar = ch;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcurrent = walker.nextNode();\n\t}\n\n\tconst text = outChars.join(\"\").trimEnd();\n\twhile (map.has(text.length)) {\n\t\tmap.delete(text.length);\n\t}\n\treturn { text, map };\n};\n\nexport const extractVisibleText = (\n\telement: Element,\n\toptions?: TextProcessingOptions,\n): string => collectVisibleTextAndMap(element, options).text;\n"]}
@@ -7,4 +7,3 @@ export interface SentenceSegmentationOptions {
7
7
  useSentenceSegmenter?: boolean;
8
8
  }
9
9
  export declare const segmentSentences: (text: string, options?: SentenceSegmentationOptions) => SentenceSegment[];
10
- //# sourceMappingURL=text-segmentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-segmentation.js","sourceRoot":"","sources":["../../../src/services/tts/text-segmentation.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC/B,IAAY,EACZ,OAAqC,EACjB,EAAE;IACtB,MAAM,oBAAoB,GAAG,OAAO,EAAE,oBAAoB,KAAK,KAAK,CAAC;IACrE,IAAI,CAAC;QACJ,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;QAC7C,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE;gBAChD,WAAW,EAAE,UAAU;aACvB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAChD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAClB,IAAI,EAAE,OAAO,CAAC,OAAO;gBACrB,MAAM,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;iBACF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,MAAM,CAAC;QACtC,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,sCAAsC;IACvC,CAAC;IAED,MAAM,aAAa,GAAG,sBAAsB,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,MAAM,KAAK,CAAC,CAAC;YAAE,SAAS;QAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC"}
1
+ {"version":3,"file":"text-segmentation.js","sourceRoot":"","sources":["../../../src/services/tts/text-segmentation.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC/B,IAAY,EACZ,OAAqC,EACjB,EAAE;IACtB,MAAM,oBAAoB,GAAG,OAAO,EAAE,oBAAoB,KAAK,KAAK,CAAC;IACrE,IAAI,CAAC;QACJ,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;QAC7C,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE;gBAChD,WAAW,EAAE,UAAU;aACvB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAChD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAClB,IAAI,EAAE,OAAO,CAAC,OAAO;gBACrB,MAAM,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;iBACF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,MAAM,CAAC;QACtC,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,sCAAsC;IACvC,CAAC;IAED,MAAM,aAAa,GAAG,sBAAsB,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,IAAI,MAAM,KAAK,CAAC,CAAC;YAAE,SAAS;QAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC","sourcesContent":["export interface SentenceSegment {\n\ttext: string;\n\toffset: number;\n}\n\nexport interface SentenceSegmentationOptions {\n\tlocale?: string;\n\tuseSentenceSegmenter?: boolean;\n}\n\nexport const segmentSentences = (\n\ttext: string,\n\toptions?: SentenceSegmentationOptions,\n): SentenceSegment[] => {\n\tconst useSentenceSegmenter = options?.useSentenceSegmenter !== false;\n\ttry {\n\t\tif (!useSentenceSegmenter) {\n\t\t\tthrow new Error(\"Segmenter disabled by policy\");\n\t\t}\n\t\tconst Segmenter = globalThis.Intl?.Segmenter;\n\t\tif (typeof Segmenter === \"function\") {\n\t\t\tconst segmenter = new Segmenter(options?.locale, {\n\t\t\t\tgranularity: \"sentence\",\n\t\t\t});\n\t\t\tconst parsed = Array.from(segmenter.segment(text))\n\t\t\t\t.map((segment) => ({\n\t\t\t\t\ttext: segment.segment,\n\t\t\t\t\toffset: segment.index,\n\t\t\t\t}))\n\t\t\t\t.filter((segment) => segment.text.trim().length > 0);\n\t\t\tif (parsed.length > 0) return parsed;\n\t\t}\n\t} catch {\n\t\t// Fall through to regex segmentation.\n\t}\n\n\tconst sentenceRegex = /[^.!?]+(?:[.!?]+|$)/g;\n\tconst raw = text.match(sentenceRegex) || [text];\n\tconst parsed: SentenceSegment[] = [];\n\tlet processed = 0;\n\tfor (const sentence of raw) {\n\t\tconst offset = text.indexOf(sentence, processed);\n\t\tif (offset === -1) continue;\n\t\tparsed.push({ text: sentence, offset });\n\t\tprocessed = offset + sentence.length;\n\t}\n\treturn parsed.length > 0 ? parsed : [{ text, offset: 0 }];\n};\n"]}
@@ -16,4 +16,3 @@ export declare function intersectRangeWithElement(range: Range, root: Element):
16
16
  * when layout or caret APIs are unavailable.
17
17
  */
18
18
  export declare function visualLineRangesForFocusInRoot(root: Element, focus: Range): Range[];
19
- //# sourceMappingURL=visual-line-ranges.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"visual-line-ranges.js","sourceRoot":"","sources":["../../../src/services/tts/visual-line-ranges.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"visual-line-ranges.js","sourceRoot":"","sources":["../../../src/services/tts/visual-line-ranges.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Derive visual line box ranges inside a root element for TTS read-along.\n *\n * Cloud TTS (Polly, Google, etc.) only provides word/sentence character offsets.\n * “Lines” are layout-dependent (wrap, zoom, font size), so we compute them in\n * the browser from the same DOM Range already used for word highlighting.\n */\n\nconst LINE_TOP_EPSILON = 2;\nconst CARET_INSET = 1;\nconst HORIZONTAL_PROBE_STEP = 3;\nconst MAX_HORIZONTAL_PROBES = 400;\nconst MAX_LINE_RANGES = 48;\n\ntype DocumentWithCaret = Document & {\n\tcaretRangeFromPoint?: (x: number, y: number) => Range | null;\n\tcaretPositionFromPoint?: (\n\t\tx: number,\n\t\ty: number,\n\t) => { offsetNode: Node; offset: number } | null;\n};\n\nfunction caretRangeAtPoint(doc: Document, x: number, y: number): Range | null {\n\tconst d = doc as DocumentWithCaret;\n\tif (typeof d.caretRangeFromPoint === \"function\") {\n\t\ttry {\n\t\t\treturn d.caretRangeFromPoint(x, y);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\tconst pos = d.caretPositionFromPoint?.(x, y);\n\tif (\n\t\tpos?.offsetNode?.nodeType === Node.TEXT_NODE ||\n\t\tpos?.offsetNode?.nodeType === Node.ELEMENT_NODE\n\t) {\n\t\tconst r = doc.createRange();\n\t\ttry {\n\t\t\tr.setStart(pos.offsetNode, pos.offset);\n\t\t\tr.collapse(true);\n\t\t\treturn r;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction collapsedRangeTop(r: Range): number | null {\n\tconst rects = r.getClientRects();\n\tif (rects.length === 0) return null;\n\treturn rects[0].top;\n}\n\n/**\n * Intersect `range` with the contents of `root` (document order).\n * Returns null if there is no non-empty intersection.\n */\nexport function intersectRangeWithElement(\n\trange: Range,\n\troot: Element,\n): Range | null {\n\tif (typeof document === \"undefined\") return null;\n\tif (typeof range.compareBoundaryPoints !== \"function\") return null;\n\ttry {\n\t\tconst doc = range.startContainer.ownerDocument || document;\n\t\tconst rootRange = doc.createRange();\n\t\trootRange.selectNodeContents(root);\n\n\t\tif (range.compareBoundaryPoints(Range.END_TO_START, rootRange) <= 0) {\n\t\t\treturn null;\n\t\t}\n\t\tif (range.compareBoundaryPoints(Range.START_TO_END, rootRange) >= 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst out = doc.createRange();\n\t\tif (range.compareBoundaryPoints(Range.START_TO_START, rootRange) < 0) {\n\t\t\tout.setStart(rootRange.startContainer, rootRange.startOffset);\n\t\t} else {\n\t\t\tout.setStart(range.startContainer, range.startOffset);\n\t\t}\n\t\tif (range.compareBoundaryPoints(Range.END_TO_END, rootRange) > 0) {\n\t\t\tout.setEnd(rootRange.endContainer, rootRange.endOffset);\n\t\t} else {\n\t\t\tout.setEnd(range.endContainer, range.endOffset);\n\t\t}\n\t\tif (out.collapsed) return null;\n\t\treturn out;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction lineKeyForRect(top: number): number {\n\treturn Math.round(top / LINE_TOP_EPSILON);\n}\n\nfunction extendLineEdge(\n\tdoc: Document,\n\troot: Element,\n\trefTop: number,\n\tmidY: number,\n\tstartX: number,\n\trootLeft: number,\n\trootRight: number,\n\tdirection: \"left\" | \"right\",\n): Range | null {\n\tlet lastGood: Range | null = null;\n\tlet x = startX;\n\tif (direction === \"left\") {\n\t\tfor (let i = 0; i < MAX_HORIZONTAL_PROBES && x >= rootLeft + CARET_INSET; i++) {\n\t\t\tconst cr = caretRangeAtPoint(doc, x, midY);\n\t\t\tif (!cr || !rootContainsNode(root, cr.startContainer)) break;\n\t\t\tconst t = collapsedRangeTop(cr);\n\t\t\tif (t === null || Math.abs(t - refTop) > LINE_TOP_EPSILON) break;\n\t\t\tlastGood = cr.cloneRange();\n\t\t\tx -= HORIZONTAL_PROBE_STEP;\n\t\t}\n\t} else {\n\t\tfor (let i = 0; i < MAX_HORIZONTAL_PROBES && x <= rootRight - CARET_INSET; i++) {\n\t\t\tconst cr = caretRangeAtPoint(doc, x, midY);\n\t\t\tif (!cr || !rootContainsNode(root, cr.startContainer)) break;\n\t\t\tconst t = collapsedRangeTop(cr);\n\t\t\tif (t === null || Math.abs(t - refTop) > LINE_TOP_EPSILON) break;\n\t\t\tlastGood = cr.cloneRange();\n\t\t\tx += HORIZONTAL_PROBE_STEP;\n\t\t}\n\t}\n\treturn lastGood;\n}\n\nfunction rootContainsNode(root: Element, node: Node): boolean {\n\tif (typeof root.contains !== \"function\") return false;\n\ttry {\n\t\treturn root.contains(node);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction fallbackSingleRangeFromFocus(focus: Range): Range[] {\n\ttry {\n\t\tconst doc = focus.startContainer.ownerDocument || document;\n\t\tconst r = doc.createRange();\n\t\tr.setStart(focus.startContainer, focus.startOffset);\n\t\tr.setEnd(focus.endContainer, focus.endOffset);\n\t\treturn [r];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\n/**\n * Returns one Range per visual line that intersects `focus`, expanded to the\n * full width of each line within `root`. Falls back to `[intersectedFocus]`\n * when layout or caret APIs are unavailable.\n */\nexport function visualLineRangesForFocusInRoot(\n\troot: Element,\n\tfocus: Range,\n): Range[] {\n\tif (typeof document === \"undefined\") return [];\n\tif (!focus.startContainer) {\n\t\treturn [];\n\t}\n\n\tconst doc = focus.startContainer.ownerDocument || document;\n\tconst intersected = intersectRangeWithElement(focus, root);\n\tif (!intersected) {\n\t\treturn fallbackSingleRangeFromFocus(focus);\n\t}\n\n\tlet rects: DOMRect[];\n\ttry {\n\t\trects = Array.from(intersected.getClientRects()).filter(\n\t\t\t(r) => r.width > 0 && r.height > 0,\n\t\t);\n\t} catch {\n\t\treturn [intersected.cloneRange()];\n\t}\n\tif (rects.length === 0) {\n\t\treturn [intersected.cloneRange()];\n\t}\n\n\tlet rootBounds: DOMRect;\n\ttry {\n\t\trootBounds = root.getBoundingClientRect();\n\t} catch {\n\t\treturn [intersected.cloneRange()];\n\t}\n\tconst groups = new Map<number, DOMRect[]>();\n\tfor (const rect of rects) {\n\t\tconst key = lineKeyForRect(rect.top);\n\t\tconst list = groups.get(key);\n\t\tif (list) list.push(rect);\n\t\telse groups.set(key, [rect]);\n\t}\n\n\tconst sortedKeys = Array.from(groups.keys()).sort((a, b) => a - b);\n\tconst out: Range[] = [];\n\n\tfor (const key of sortedKeys) {\n\t\tif (out.length >= MAX_LINE_RANGES) break;\n\t\tconst group = groups.get(key);\n\t\tif (!group?.length) continue;\n\n\t\tlet sumTop = 0;\n\t\tlet sumMid = 0;\n\t\tlet minL = Infinity;\n\t\tlet maxR = -Infinity;\n\t\tfor (const r of group) {\n\t\t\tsumTop += r.top;\n\t\t\tsumMid += r.top + r.height / 2;\n\t\t\tminL = Math.min(minL, r.left);\n\t\t\tmaxR = Math.max(maxR, r.right);\n\t\t}\n\t\tconst refTop = sumTop / group.length;\n\t\tconst midY = sumMid / group.length;\n\n\t\tconst leftEdge = extendLineEdge(\n\t\t\tdoc,\n\t\t\troot,\n\t\t\trefTop,\n\t\t\tmidY,\n\t\t\tminL,\n\t\t\trootBounds.left,\n\t\t\trootBounds.right,\n\t\t\t\"left\",\n\t\t);\n\t\tconst rightEdge = extendLineEdge(\n\t\t\tdoc,\n\t\t\troot,\n\t\t\trefTop,\n\t\t\tmidY,\n\t\t\tmaxR,\n\t\t\trootBounds.left,\n\t\t\trootBounds.right,\n\t\t\t\"right\",\n\t\t);\n\n\t\tif (!leftEdge || !rightEdge) {\n\t\t\tconst fallback = intersected.cloneRange();\n\t\t\treturn [fallback];\n\t\t}\n\n\t\tconst lineRange = doc.createRange();\n\t\ttry {\n\t\t\tlineRange.setStart(leftEdge.startContainer, leftEdge.startOffset);\n\t\t\tlineRange.setEnd(rightEdge.startContainer, rightEdge.startOffset);\n\t\t} catch {\n\t\t\treturn [intersected.cloneRange()];\n\t\t}\n\n\t\tif (lineRange.collapsed) {\n\t\t\treturn [intersected.cloneRange()];\n\t\t}\n\n\t\tconst clipped = intersectRangeWithElement(lineRange, root);\n\t\tif (clipped && !clipped.collapsed) {\n\t\t\tout.push(clipped);\n\t\t} else {\n\t\t\treturn [intersected.cloneRange()];\n\t\t}\n\t}\n\n\treturn out.length > 0 ? out : [intersected.cloneRange()];\n}\n"]}
@@ -11,4 +11,3 @@ export type TTSControlHandoffDetail = {
11
11
  */
12
12
  source?: "host";
13
13
  };
14
- //# sourceMappingURL=tts-control-events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tts-control-events.js","sourceRoot":"","sources":["../../src/services/tts-control-events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,yBAAyB,CAAC"}
1
+ {"version":3,"file":"tts-control-events.js","sourceRoot":"","sources":["../../src/services/tts-control-events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,yBAAyB,CAAC","sourcesContent":["/**\n * Shared orchestration events for TTS tool UI controls.\n *\n * These events are intentionally UI-level coordination hints. They do not replace\n * playback controls such as stop/pause/resume.\n */\nexport const PIE_TTS_CONTROL_HANDOFF_EVENT = \"pie-tts-control-handoff\";\n\nexport type TTSControlHandoffDetail = {\n\t/**\n\t * Optional source identifier for host-orchestrated handoff tracing.\n\t */\n\tsource?: \"host\";\n};\n"]}
@@ -1,5 +1,6 @@
1
1
  import type { TTSConfig } from "./TTSService.js";
2
2
  import type { ToolProviderConfig } from "./tools-config-normalizer.js";
3
+ import { type SREMathSpeechOptions } from "./tts/math-speech.js";
3
4
  export type TTSLayoutMode = "reserved-row" | "expanding-row" | "floating-overlay" | "left-aligned";
4
5
  export interface TTSHostToolbarLayout {
5
6
  mount: "before-buttons";
@@ -37,6 +38,21 @@ export interface TTSRuntimeSettings {
37
38
  */
38
39
  speedOptions?: number[];
39
40
  layoutMode?: TTSLayoutMode;
41
+ /**
42
+ * Per-token highlighting of math expressions.
43
+ * - `true` / omitted (default): when the spoken math aligns confidently to the
44
+ * rendered MathML, the formula is highlighted glyph by glyph; otherwise it
45
+ * safely falls back to a whole-formula block.
46
+ * - `false`: every formula is highlighted as a single block (the fallback),
47
+ * never broken into per-token highlights. Prose word tracking is unaffected.
48
+ */
49
+ mathTokenHighlighting?: boolean;
50
+ /**
51
+ * Speech Rule Engine options for generated MathML speech. Hosts can use these
52
+ * to tune SRE itself (for example ClearSpeak ImpliedTimes/Paren preferences)
53
+ * instead of relying on toolkit-specific speech rewrites.
54
+ */
55
+ mathSpeech?: SREMathSpeechOptions;
40
56
  }
41
57
  export declare const normalizeTTSLayoutMode: (value: unknown, fallback?: TTSLayoutMode) => TTSLayoutMode;
42
58
  /** Default inline TTS speed button multipliers (excluding 1.0×). */
@@ -56,11 +72,10 @@ export declare const formatTTSSpeedOptionsAsText: (values: number[]) => string;
56
72
  * - Non-empty text with no parseable finite numbers → same as invalid-only array config: defaults.
57
73
  */
58
74
  export declare const parseTTSSpeedOptionsFromText: (text: string) => number[];
59
- export declare const resolveTTSRuntimeSettings: (config: ToolProviderConfig | undefined) => TTSRuntimeSettings;
75
+ export declare const resolveTTSRuntimeSettings: (config: ToolProviderConfig | TTSRuntimeSettings | undefined) => TTSRuntimeSettings;
60
76
  export declare const resolveTTSBackend: (config: TTSRuntimeSettings) => NonNullable<TTSRuntimeSettings["backend"]>;
61
77
  export declare const resolveRuntimeProvider: (config: TTSRuntimeSettings, backend: NonNullable<TTSRuntimeSettings["backend"]>) => TTSRuntimeSettings["serverProvider"];
62
78
  export declare const resolveTransportMode: (config: TTSRuntimeSettings, runtimeProvider: TTSRuntimeSettings["serverProvider"]) => NonNullable<TTSRuntimeSettings["transportMode"]>;
63
79
  export declare const buildRuntimeTTSConfig: (config: TTSRuntimeSettings) => Partial<TTSConfig>;
64
80
  export declare const resolveTTSLayoutMode: (config: TTSRuntimeSettings) => TTSLayoutMode;
65
81
  export declare const resolveTTSHostToolbarLayout: (config: TTSRuntimeSettings) => TTSHostToolbarLayout;
66
- //# sourceMappingURL=tts-runtime-config.d.ts.map
@@ -1,3 +1,4 @@
1
+ import { normalizeSREMathSpeechOptions, } from "./tts/math-speech.js";
1
2
  const VALID_TTS_LAYOUT_MODES = new Set([
2
3
  "reserved-row",
3
4
  "expanding-row",
@@ -94,7 +95,7 @@ const applyRuntimeDefaults = (config) => {
94
95
  };
95
96
  export const resolveTTSRuntimeSettings = (config) => {
96
97
  const configRecord = toRecord(config);
97
- const settingsRecord = toRecord(config?.settings);
98
+ const settingsRecord = toRecord(configRecord.settings);
98
99
  return applyRuntimeDefaults({
99
100
  ...configRecord,
100
101
  ...settingsRecord,
@@ -114,6 +115,7 @@ export const buildRuntimeTTSConfig = (config) => {
114
115
  const backend = resolveTTSBackend(config);
115
116
  const runtimeProvider = resolveRuntimeProvider(config, backend);
116
117
  const transportMode = resolveTransportMode(config, runtimeProvider);
118
+ const mathSpeech = normalizeSREMathSpeechOptions(config.mathSpeech);
117
119
  return {
118
120
  voice: config.defaultVoice,
119
121
  rate: config.rate,
@@ -141,6 +143,7 @@ export const buildRuntimeTTSConfig = (config) => {
141
143
  ...(transportMode === "custom" && config.lang_id
142
144
  ? { lang_id: config.lang_id }
143
145
  : {}),
146
+ ...(mathSpeech ? { mathSpeech } : {}),
144
147
  },
145
148
  apiEndpoint: config.apiEndpoint,
146
149
  provider: runtimeProvider,
@@ -150,6 +153,13 @@ export const buildRuntimeTTSConfig = (config) => {
150
153
  endpointValidationMode: config.endpointValidationMode,
151
154
  includeAuthOnAssetFetch: config.includeAuthOnAssetFetch,
152
155
  validateEndpoint: config.validateEndpoint,
156
+ // Toolkit-level highlight setting carried through the config channel
157
+ // (like apiEndpoint/transportMode); consumed by the highlight pipeline,
158
+ // ignored by providers. Only forwarded when set so the pipeline default
159
+ // (per-token enabled) applies otherwise.
160
+ ...(typeof config.mathTokenHighlighting === "boolean"
161
+ ? { mathTokenHighlighting: config.mathTokenHighlighting }
162
+ : {}),
153
163
  };
154
164
  };
155
165
  export const resolveTTSLayoutMode = (config) => normalizeTTSLayoutMode(config.layoutMode);
@@ -1 +1 @@
1
- {"version":3,"file":"tts-runtime-config.js","sourceRoot":"","sources":["../../src/services/tts-runtime-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tts-runtime-config.js","sourceRoot":"","sources":["../../src/services/tts-runtime-config.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TTSConfig } from \"./TTSService.js\";\nimport type { ToolProviderConfig } from \"./tools-config-normalizer.js\";\nimport {\n\tnormalizeSREMathSpeechOptions,\n\ttype SREMathSpeechOptions,\n} from \"./tts/math-speech.js\";\n\nexport type TTSLayoutMode =\n\t| \"reserved-row\"\n\t| \"expanding-row\"\n\t| \"floating-overlay\"\n\t| \"left-aligned\";\n\nconst VALID_TTS_LAYOUT_MODES = new Set<TTSLayoutMode>([\n\t\"reserved-row\",\n\t\"expanding-row\",\n\t\"floating-overlay\",\n\t\"left-aligned\",\n]);\n\nexport interface TTSHostToolbarLayout {\n\tmount: \"before-buttons\";\n\tcontrolsRow: {\n\t\treserveSpace: boolean;\n\t\texpandWhenToolActive: boolean;\n\t};\n}\n\nexport interface TTSRuntimeSettings {\n\tbackend?: \"browser\" | \"polly\" | \"google\" | \"server\";\n\tserverProvider?: \"polly\" | \"google\" | \"custom\";\n\tprovider?: \"polly\" | \"google\" | \"custom\";\n\tengine?: \"standard\" | \"neural\";\n\tsampleRate?: number;\n\tformat?: \"mp3\" | \"ogg\" | \"pcm\";\n\tspeechMarksMode?: \"word\" | \"word+sentence\";\n\tdefaultVoice?: string;\n\trate?: number;\n\tpitch?: number;\n\tapiEndpoint?: string;\n\tlanguage?: string;\n\ttransportMode?: \"pie\" | \"custom\";\n\tendpointMode?: \"synthesizePath\" | \"rootPost\";\n\tendpointValidationMode?: \"voices\" | \"endpoint\" | \"none\";\n\tincludeAuthOnAssetFetch?: boolean;\n\tvalidateEndpoint?: boolean;\n\tcache?: boolean;\n\tspeedRate?: \"slow\" | \"medium\" | \"fast\";\n\tlang_id?: string;\n\t/**\n\t * Optional inline TTS speed buttons.\n\t * - Omitted/non-array: default speed buttons are shown.\n\t * - Empty array: hide speed buttons.\n\t * - Arrays that sanitize to no valid values: default speed buttons are shown.\n\t */\n\tspeedOptions?: number[];\n\tlayoutMode?: TTSLayoutMode;\n\t/**\n\t * Per-token highlighting of math expressions.\n\t * - `true` / omitted (default): when the spoken math aligns confidently to the\n\t * rendered MathML, the formula is highlighted glyph by glyph; otherwise it\n\t * safely falls back to a whole-formula block.\n\t * - `false`: every formula is highlighted as a single block (the fallback),\n\t * never broken into per-token highlights. Prose word tracking is unaffected.\n\t */\n\tmathTokenHighlighting?: boolean;\n\t/**\n\t * Speech Rule Engine options for generated MathML speech. Hosts can use these\n\t * to tune SRE itself (for example ClearSpeak ImpliedTimes/Paren preferences)\n\t * instead of relying on toolkit-specific speech rewrites.\n\t */\n\tmathSpeech?: SREMathSpeechOptions;\n}\n\nconst toRecord = (value: unknown): Record<string, unknown> =>\n\tvalue && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n\nconst isServerBackend = (\n\tbackend: TTSRuntimeSettings[\"backend\"],\n): backend is \"polly\" | \"google\" | \"server\" =>\n\tbackend === \"polly\" || backend === \"google\" || backend === \"server\";\n\nconst withDefault = <T>(value: T | undefined, fallback: T): T =>\n\tvalue === undefined ? fallback : value;\n\nexport const normalizeTTSLayoutMode = (\n\tvalue: unknown,\n\tfallback: TTSLayoutMode = \"left-aligned\",\n): TTSLayoutMode =>\n\ttypeof value === \"string\" &&\n\tVALID_TTS_LAYOUT_MODES.has(value as TTSLayoutMode)\n\t\t? (value as TTSLayoutMode)\n\t\t: fallback;\n\n/** Default inline TTS speed button multipliers (excluding 1.0×). */\nexport const DEFAULT_TTS_SPEED_OPTIONS = Object.freeze([0.8, 1.25]);\n\n/**\n * Resolves inline toolbar speed options from host config.\n * - Omitted/non-array: default speed buttons.\n * - Empty array: hide speed buttons.\n * - Arrays that sanitize to no valid values: default speed buttons.\n * - 1.0× is never shown as a discrete speed button.\n */\nexport const normalizeTTSSpeedOptions = (value: unknown): number[] => {\n\tif (!Array.isArray(value)) return [...DEFAULT_TTS_SPEED_OPTIONS];\n\tif (value.length === 0) return [];\n\tconst deduped = new Set<number>();\n\tfor (const entry of value) {\n\t\tif (typeof entry !== \"number\" || !Number.isFinite(entry) || entry <= 0) continue;\n\t\tconst rounded = Math.round(entry * 100) / 100;\n\t\tif (rounded === 1) continue;\n\t\tdeduped.add(rounded);\n\t}\n\treturn deduped.size ? Array.from(deduped) : [...DEFAULT_TTS_SPEED_OPTIONS];\n};\n\nexport const formatTTSSpeedOptionsAsText = (values: number[]): string =>\n\tvalues.join(\", \");\n\n/**\n * Parse comma/semicolon-separated multipliers from settings UI text.\n * - Empty or whitespace-only string → hide speed buttons (`[]`).\n * - Non-empty text with no parseable finite numbers → same as invalid-only array config: defaults.\n */\nexport const parseTTSSpeedOptionsFromText = (text: string): number[] => {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return [];\n\tconst parts = trimmed\n\t\t.split(/[,;]+/)\n\t\t.map((p) => p.trim())\n\t\t.filter(Boolean);\n\tconst candidates = parts\n\t\t.map((p) => Number.parseFloat(p))\n\t\t.filter((n) => Number.isFinite(n));\n\tif (!candidates.length) return [...DEFAULT_TTS_SPEED_OPTIONS];\n\treturn normalizeTTSSpeedOptions(candidates);\n};\n\nconst applyRuntimeDefaults = (\n\tconfig: TTSRuntimeSettings,\n): TTSRuntimeSettings => {\n\tconst withLayoutDefaults: TTSRuntimeSettings = {\n\t\t...config,\n\t\tlayoutMode: normalizeTTSLayoutMode(config.layoutMode),\n\t};\n\tconst backend = config.backend || \"browser\";\n\tif (!isServerBackend(backend)) return withLayoutDefaults;\n\n\tconst withServerDefaults: TTSRuntimeSettings = {\n\t\t...withLayoutDefaults,\n\t\tapiEndpoint: withDefault(withLayoutDefaults.apiEndpoint, \"/api/tts\"),\n\t\ttransportMode: withDefault(withLayoutDefaults.transportMode, \"pie\"),\n\t\tendpointValidationMode: withDefault(\n\t\t\twithLayoutDefaults.endpointValidationMode,\n\t\t\t\"voices\",\n\t\t),\n\t\tvalidateEndpoint: withDefault(withLayoutDefaults.validateEndpoint, true),\n\t\tincludeAuthOnAssetFetch: withDefault(\n\t\t\twithLayoutDefaults.includeAuthOnAssetFetch,\n\t\t\tfalse,\n\t\t),\n\t\trate: withDefault(withLayoutDefaults.rate, 1.0),\n\t\tlanguage: withDefault(withLayoutDefaults.language, \"en-US\"),\n\t};\n\n\tif (backend === \"polly\") {\n\t\treturn {\n\t\t\t...withServerDefaults,\n\t\t\tdefaultVoice: withDefault(withServerDefaults.defaultVoice, \"Joanna\"),\n\t\t\tengine: withDefault(withServerDefaults.engine, \"neural\"),\n\t\t\tformat: withDefault(withServerDefaults.format, \"mp3\"),\n\t\t\tspeechMarksMode: withDefault(\n\t\t\t\twithServerDefaults.speechMarksMode,\n\t\t\t\t\"word+sentence\",\n\t\t\t),\n\t\t};\n\t}\n\n\tif (backend === \"google\") {\n\t\treturn {\n\t\t\t...withServerDefaults,\n\t\t\tdefaultVoice: withDefault(withServerDefaults.defaultVoice, \"en-US-Wavenet-A\"),\n\t\t};\n\t}\n\n\treturn withServerDefaults;\n};\n\nexport const resolveTTSRuntimeSettings = (\n\tconfig: ToolProviderConfig | TTSRuntimeSettings | undefined,\n): TTSRuntimeSettings => {\n\tconst configRecord = toRecord(config);\n\tconst settingsRecord = toRecord(configRecord.settings);\n\treturn applyRuntimeDefaults({\n\t\t...configRecord,\n\t\t...settingsRecord,\n\t} as TTSRuntimeSettings);\n};\n\nexport const resolveTTSBackend = (\n\tconfig: TTSRuntimeSettings,\n): NonNullable<TTSRuntimeSettings[\"backend\"]> => config.backend || \"browser\";\n\nexport const resolveRuntimeProvider = (\n\tconfig: TTSRuntimeSettings,\n\tbackend: NonNullable<TTSRuntimeSettings[\"backend\"]>,\n): TTSRuntimeSettings[\"serverProvider\"] => {\n\tif (backend === \"polly\" || backend === \"google\") return backend;\n\tif (backend === \"server\") {\n\t\treturn config.serverProvider || config.provider;\n\t}\n\treturn config.serverProvider || config.provider;\n};\n\nexport const resolveTransportMode = (\n\tconfig: TTSRuntimeSettings,\n\truntimeProvider: TTSRuntimeSettings[\"serverProvider\"],\n): NonNullable<TTSRuntimeSettings[\"transportMode\"]> =>\n\tconfig.transportMode || (runtimeProvider === \"custom\" ? \"custom\" : \"pie\");\n\nexport const buildRuntimeTTSConfig = (\n\tconfig: TTSRuntimeSettings,\n): Partial<TTSConfig> => {\n\tconst backend = resolveTTSBackend(config);\n\tconst runtimeProvider = resolveRuntimeProvider(config, backend);\n\tconst transportMode = resolveTransportMode(config, runtimeProvider);\n\tconst mathSpeech = normalizeSREMathSpeechOptions(config.mathSpeech);\n\treturn {\n\t\tvoice: config.defaultVoice,\n\t\trate: config.rate,\n\t\tpitch: config.pitch,\n\t\tproviderOptions: {\n\t\t\t...(config.language ? { locale: config.language } : {}),\n\t\t\t...(backend === \"polly\" && config.engine ? { engine: config.engine } : {}),\n\t\t\t...(backend === \"polly\" && typeof config.sampleRate === \"number\"\n\t\t\t\t? { sampleRate: config.sampleRate }\n\t\t\t\t: {}),\n\t\t\t...(backend === \"polly\" && config.format ? { format: config.format } : {}),\n\t\t\t...(backend === \"polly\"\n\t\t\t\t? {\n\t\t\t\t\t\tspeechMarkTypes:\n\t\t\t\t\t\t\tconfig.speechMarksMode === \"word+sentence\"\n\t\t\t\t\t\t\t\t? [\"word\", \"sentence\"]\n\t\t\t\t\t\t\t\t: [\"word\"],\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(transportMode === \"custom\" && typeof config.cache === \"boolean\"\n\t\t\t\t? { cache: config.cache }\n\t\t\t\t: {}),\n\t\t\t...(transportMode === \"custom\" && config.speedRate\n\t\t\t\t? { speedRate: config.speedRate }\n\t\t\t\t: {}),\n\t\t\t...(transportMode === \"custom\" && config.lang_id\n\t\t\t\t? { lang_id: config.lang_id }\n\t\t\t\t: {}),\n\t\t\t...(mathSpeech ? { mathSpeech } : {}),\n\t\t},\n\t\tapiEndpoint: config.apiEndpoint,\n\t\tprovider: runtimeProvider,\n\t\tlanguage: config.language,\n\t\ttransportMode,\n\t\tendpointMode: config.endpointMode,\n\t\tendpointValidationMode: config.endpointValidationMode,\n\t\tincludeAuthOnAssetFetch: config.includeAuthOnAssetFetch,\n\t\tvalidateEndpoint: config.validateEndpoint,\n\t\t// Toolkit-level highlight setting carried through the config channel\n\t\t// (like apiEndpoint/transportMode); consumed by the highlight pipeline,\n\t\t// ignored by providers. Only forwarded when set so the pipeline default\n\t\t// (per-token enabled) applies otherwise.\n\t\t...(typeof config.mathTokenHighlighting === \"boolean\"\n\t\t\t? { mathTokenHighlighting: config.mathTokenHighlighting }\n\t\t\t: {}),\n\t} as Partial<TTSConfig>;\n};\n\nexport const resolveTTSLayoutMode = (\n\tconfig: TTSRuntimeSettings,\n): TTSLayoutMode => normalizeTTSLayoutMode(config.layoutMode);\n\nexport const resolveTTSHostToolbarLayout = (\n\tconfig: TTSRuntimeSettings,\n): TTSHostToolbarLayout => {\n\tconst layoutMode = resolveTTSLayoutMode(config);\n\tswitch (layoutMode) {\n\t\tcase \"reserved-row\":\n\t\t\treturn {\n\t\t\t\tmount: \"before-buttons\",\n\t\t\t\tcontrolsRow: {\n\t\t\t\t\treserveSpace: true,\n\t\t\t\t\texpandWhenToolActive: false,\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"expanding-row\":\n\t\t\treturn {\n\t\t\t\tmount: \"before-buttons\",\n\t\t\t\tcontrolsRow: {\n\t\t\t\t\treserveSpace: false,\n\t\t\t\t\texpandWhenToolActive: true,\n\t\t\t\t},\n\t\t\t};\n\t\tcase \"floating-overlay\":\n\t\tcase \"left-aligned\":\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tmount: \"before-buttons\",\n\t\t\t\tcontrolsRow: {\n\t\t\t\t\treserveSpace: false,\n\t\t\t\t\texpandWhenToolActive: false,\n\t\t\t\t},\n\t\t\t};\n\t}\n};\n"]}
@@ -44,4 +44,3 @@ export declare class DesmosCalculatorProvider implements CalculatorProvider {
44
44
  */
45
45
  getCapabilities(): CalculatorProviderCapabilities;
46
46
  }
47
- //# sourceMappingURL=desmos-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"desmos-provider.js","sourceRoot":"","sources":["../../../src/tools/calculators/desmos-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"desmos-provider.js","sourceRoot":"","sources":["../../../src/tools/calculators/desmos-provider.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Desmos Calculator Provider\n * Implementation of CalculatorProvider for Desmos calculators\n *\n * Supports: Basic, Scientific, and Graphing calculators\n * Based on Desmos API v1.10+\n */\n\nimport type {\n\tCalculationHistoryEntry,\n\tCalculator,\n\tCalculatorProvider,\n\tCalculatorProviderCapabilities,\n\tCalculatorProviderConfig,\n\tCalculatorState,\n\tCalculatorType,\n\tDesmosCalculatorConfig,\n} from \"@pie-players/pie-calculator\";\nimport { COMMON_LIBRARIES, libraryLoader } from \"../library-loader.js\";\n\n/**\n * Desmos Calculator Provider Implementation\n */\nexport class DesmosCalculatorProvider implements CalculatorProvider {\n\treadonly providerId = \"desmos\";\n\treadonly providerName = \"Desmos\";\n\treadonly supportedTypes: CalculatorType[] = [\n\t\t\"basic\",\n\t\t\"scientific\",\n\t\t\"graphing\",\n\t];\n\treadonly version = \"1.10\";\n\n\tprivate initialized = false;\n\tprivate apiKey?: string;\n\n\t/**\n\t * Get the configured API key\n\t */\n\tgetApiKey(): string | undefined {\n\t\treturn this.apiKey;\n\t}\n\n\t/**\n\t * Initialize Desmos library\n\t * @param config Optional configuration including API key\n\t */\n\tasync initialize(config?: { apiKey?: string }): Promise<void> {\n\t\tif (this.initialized) return;\n\n\t\t// SSR guard: Desmos calculators should NEVER run on the server\n\t\tif (typeof window === \"undefined\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"Desmos calculators can only be initialized in the browser\",\n\t\t\t);\n\t\t}\n\n\t\t// Store API key from config, environment variable, or global\n\t\tthis.apiKey =\n\t\t\tconfig?.apiKey ||\n\t\t\t(typeof process !== \"undefined\" && process.env?.DESMOS_API_KEY) ||\n\t\t\t(typeof window !== \"undefined\" && (window as any).PIE_DESMOS_API_KEY);\n\n\t\t// Warn if no API key is provided (production usage requires it)\n\t\tif (!this.apiKey) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[DesmosProvider] No API key provided. Production usage requires a Desmos API key. \" +\n\t\t\t\t\t\"Obtain one from https://www.desmos.com/api or contact partnerships@desmos.com\",\n\t\t\t);\n\t\t}\n\n\t\t// Load Desmos library\n\t\tawait libraryLoader.loadScript(COMMON_LIBRARIES.desmos);\n\n\t\t// Verify Desmos API is available\n\t\tif (!(window as any).Desmos) {\n\t\t\tthrow new Error(\"Desmos API not loaded\");\n\t\t}\n\n\t\tthis.initialized = true;\n\t\tconsole.log(\n\t\t\t`[DesmosProvider] Initialized successfully${this.apiKey ? \" with API key\" : \" (no API key)\"}`,\n\t\t);\n\t}\n\n\t/**\n\t * Create a calculator instance\n\t */\n\tasync createCalculator(\n\t\ttype: CalculatorType,\n\t\tcontainer: HTMLElement,\n\t\tconfig?: CalculatorProviderConfig,\n\t): Promise<Calculator> {\n\t\tif (!this.initialized) {\n\t\t\tawait this.initialize();\n\t\t}\n\n\t\tif (!this.supportsType(type)) {\n\t\t\tthrow new Error(`Desmos does not support calculator type: ${type}`);\n\t\t}\n\n\t\treturn new DesmosCalculator(this, type, container, config);\n\t}\n\n\t/**\n\t * Check if type is supported\n\t */\n\tsupportsType(type: CalculatorType): boolean {\n\t\treturn this.supportedTypes.includes(type);\n\t}\n\n\t/**\n\t * Cleanup (no-op for Desmos)\n\t */\n\tdestroy(): void {\n\t\t// Desmos doesn't require global cleanup\n\t\tthis.initialized = false;\n\t}\n\n\t/**\n\t * Get provider capabilities\n\t */\n\tgetCapabilities(): CalculatorProviderCapabilities {\n\t\treturn {\n\t\t\tsupportsHistory: true,\n\t\t\tsupportsGraphing: true,\n\t\t\tsupportsExpressions: true,\n\t\t\tcanExport: true,\n\t\t\tmaxPrecision: 15, // JavaScript number precision\n\t\t\tinputMethods: [\"keyboard\", \"mouse\", \"touch\"],\n\t\t};\n\t}\n}\n\n/**\n * Desmos Calculator Instance\n */\nclass DesmosCalculator implements Calculator {\n\treadonly provider: CalculatorProvider;\n\treadonly type: CalculatorType;\n\n\tprivate desmosCalculator: any;\n\tprivate container: HTMLElement;\n\tprivate config?: CalculatorProviderConfig;\n\n\tconstructor(\n\t\tprovider: CalculatorProvider,\n\t\ttype: CalculatorType,\n\t\tcontainer: HTMLElement,\n\t\tconfig?: CalculatorProviderConfig,\n\t) {\n\t\tthis.provider = provider;\n\t\tthis.type = type;\n\t\tthis.container = container;\n\t\tthis.config = config;\n\n\t\tthis._initializeCalculator();\n\t}\n\n\t/**\n\t * Initialize Desmos calculator instance\n\t * Based on production implementation patterns\n\t */\n\tprivate _initializeCalculator(): void {\n\t\tconst Desmos = (window as any).Desmos;\n\n\t\t// Get Desmos-specific config or empty object\n\t\tconst desmosConfig = this.config?.desmos || {};\n\n\t\t// Determine API key (config overrides provider-level)\n\t\tconst apiKey =\n\t\t\tdesmosConfig.apiKey ||\n\t\t\t(this.provider as DesmosCalculatorProvider).getApiKey();\n\n\t\t// Apply restricted mode defaults if enabled\n\t\tconst restrictedDefaults = this._getRestrictedModeDefaults();\n\n\t\t// Merge order: type-specific defaults < restricted mode defaults < explicit config\n\t\t// This ensures explicit config can override restricted mode when needed\n\t\tconst options = {\n\t\t\t...this._getTypeSpecificDefaults(),\n\t\t\t...restrictedDefaults,\n\t\t\t...desmosConfig,\n\t\t\t...this._mapConfigToDesmos(this.config),\n\t\t};\n\n\t\t// Add API key if available\n\t\tif (apiKey) {\n\t\t\toptions.apiKey = apiKey;\n\t\t}\n\n\t\t// Create appropriate calculator type\n\t\tswitch (this.type) {\n\t\t\tcase \"basic\":\n\t\t\t\tthis.desmosCalculator = Desmos.FourFunctionCalculator(\n\t\t\t\t\tthis.container,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"scientific\":\n\t\t\t\tthis.desmosCalculator = Desmos.ScientificCalculator(\n\t\t\t\t\tthis.container,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"graphing\":\n\t\t\t\tthis.desmosCalculator = Desmos.GraphingCalculator(\n\t\t\t\t\tthis.container,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown Desmos calculator type: ${this.type}`);\n\t\t}\n\n\t\tconsole.log(\n\t\t\t`[DesmosCalculator] Created ${this.type} calculator with options:`,\n\t\t\toptions,\n\t\t);\n\t}\n\n\t/**\n\t * Get type-specific default options\n\t */\n\tprivate _getTypeSpecificDefaults(): any {\n\t\tconst defaults: any = {\n\t\t\tborder: false, // No border around calculator (production implementation pattern)\n\t\t};\n\n\t\tswitch (this.type) {\n\t\t\tcase \"basic\":\n\t\t\t\t// Basic calculator: no keypad, no graph paper (just the calculator itself)\n\t\t\t\t// Matches production FourFunctionCalculator setup\n\t\t\t\tdefaults.keypad = false;\n\t\t\t\tdefaults.graphpaper = false;\n\t\t\t\tbreak;\n\t\t\tcase \"scientific\":\n\t\t\t\t// Scientific calculator: minimal defaults, mostly controlled by config\n\t\t\t\tbreak;\n\t\t\tcase \"graphing\":\n\t\t\t\t// Graphing calculator: enable expressions, zoom buttons, topbar by default\n\t\t\t\tdefaults.expressions = true;\n\t\t\t\tdefaults.zoomButtons = true;\n\t\t\t\tdefaults.expressionsTopbar = true;\n\t\t\t\tdefaults.settingsMenu = true;\n\t\t\t\tdefaults.notes = true;\n\t\t\t\tdefaults.folders = true;\n\t\t\t\tdefaults.images = false; // Images disabled by default (production pattern)\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn defaults;\n\t}\n\n\t/**\n\t * Get restricted mode defaults (test mode options)\n\t * Based on production test mode configuration\n\t */\n\tprivate _getRestrictedModeDefaults(): any {\n\t\tif (!this.config?.restrictedMode) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Restricted mode defaults based on production test mode settings\n\t\tconst restricted: any = {\n\t\t\tborder: false,\n\t\t\tlinks: false,\n\t\t\tqwertyKeyboard: true,\n\t\t\tdegreeMode: true,\n\t\t\tdecimalToFraction: true,\n\t\t};\n\n\t\t// Type-specific restricted mode options\n\t\tif (this.type === \"graphing\") {\n\t\t\tObject.assign(restricted, {\n\t\t\t\timages: false,\n\t\t\t\tfolders: false,\n\t\t\t\tnotes: false,\n\t\t\t\trestrictedFunctions: true,\n\t\t\t\tplotSingleVariableImplicitEquations: false,\n\t\t\t\tplotImplicits: false,\n\t\t\t\tplotInequalities: false,\n\t\t\t\tsliders: false,\n\t\t\t\tsettingsMenu: false,\n\t\t\t\tzoomButtons: false,\n\t\t\t\tgeometryComputationFunctions: true,\n\t\t\t\tdistributions: true,\n\t\t\t});\n\t\t} else if (this.type === \"scientific\") {\n\t\t\tObject.assign(restricted, {\n\t\t\t\tfunctionDefinition: false,\n\t\t\t\tbrailleExpressionDownload: false,\n\t\t\t});\n\t\t}\n\n\t\treturn restricted;\n\t}\n\n\t/**\n\t * Map provider config to Desmos options\n\t */\n\tprivate _mapConfigToDesmos(config?: CalculatorProviderConfig): any {\n\t\tif (!config) return {};\n\n\t\tconst desmosOptions: any = {};\n\n\t\t// Map locale to Desmos language option\n\t\tif (config.locale) {\n\t\t\tdesmosOptions.language = config.locale;\n\t\t}\n\n\t\t// Theme mapping (Desmos may support this via CSS, not API)\n\t\t// Note: Desmos doesn't have a theme option in the API, but we keep this\n\t\t// for potential future use or CSS-based theming\n\n\t\treturn desmosOptions;\n\t}\n\n\t/**\n\t * Get current value/expression\n\t */\n\tgetValue(): string {\n\t\t// For graphing calculator, get all expressions\n\t\tif (this.type === \"graphing\") {\n\t\t\tconst state = this.desmosCalculator.getState();\n\t\t\treturn JSON.stringify(state.expressions.list);\n\t\t}\n\n\t\t// For basic/scientific, get current expression\n\t\tconst state = this.desmosCalculator.getState();\n\t\treturn state.expression || \"\";\n\t}\n\n\t/**\n\t * Set value/expression\n\t */\n\tsetValue(value: string): void {\n\t\tif (this.type === \"graphing\") {\n\t\t\ttry {\n\t\t\t\tconst expressions = JSON.parse(value);\n\t\t\t\tthis.desmosCalculator.setState({ expressions: { list: expressions } });\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"[DesmosCalculator] Invalid expression format:\", error);\n\t\t\t}\n\t\t} else {\n\t\t\t// Basic/Scientific calculators\n\t\t\tthis.desmosCalculator.setExpression({ latex: value });\n\t\t}\n\t}\n\n\t/**\n\t * Clear calculator\n\t */\n\tclear(): void {\n\t\tif (this.type === \"graphing\") {\n\t\t\tthis.desmosCalculator.setBlank();\n\t\t} else {\n\t\t\tthis.setValue(\"\");\n\t\t}\n\t}\n\n\t/**\n\t * Get calculation history (not natively supported by Desmos)\n\t */\n\tgetHistory(): CalculationHistoryEntry[] {\n\t\t// Desmos doesn't provide history natively\n\t\t// Would need to implement custom tracking\n\t\treturn [];\n\t}\n\n\t/**\n\t * Clear history\n\t */\n\tclearHistory(): void {\n\t\t// No-op - Desmos doesn't have history\n\t}\n\n\t/**\n\t * Resize calculator when container dimensions change\n\t * Matches production pattern: calculatorInstance.resize()\n\t */\n\tresize(): void {\n\t\tif (\n\t\t\tthis.desmosCalculator &&\n\t\t\ttypeof this.desmosCalculator.resize === \"function\"\n\t\t) {\n\t\t\tthis.desmosCalculator.resize();\n\t\t}\n\t}\n\n\t/**\n\t * Move keyboard focus to the primary input/expression field so keyboard\n\t * users can begin typing immediately after the calculator opens.\n\t */\n\tfocus(): void {\n\t\ttry {\n\t\t\tif (\n\t\t\t\tthis.type === \"graphing\" &&\n\t\t\t\ttypeof this.desmosCalculator?.focusFirstExpression === \"function\"\n\t\t\t) {\n\t\t\t\tthis.desmosCalculator.focusFirstExpression();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst target = this.container.querySelector<HTMLElement>(\n\t\t\t\t'.dcg-mq-editable-field[tabindex=\"0\"], textarea, [contenteditable=\"true\"], [tabindex]:not([tabindex=\"-1\"])',\n\t\t\t);\n\t\t\ttarget?.focus();\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[DesmosCalculator] focus() failed:\", error);\n\t\t}\n\t}\n\n\t/**\n\t * Evaluate expression (for graphing calculator)\n\t */\n\tasync evaluate(expression: string): Promise<string> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\t// Set expression and wait for computation\n\t\t\t\tthis.desmosCalculator.setExpression({ latex: expression });\n\n\t\t\t\t// For basic math, Desmos evaluates automatically\n\t\t\t\t// Get the result from state\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tconst result = this.getValue();\n\t\t\t\t\tresolve(result);\n\t\t\t\t}, 100); // Small delay for Desmos to compute\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Export calculator state\n\t */\n\texportState(): CalculatorState {\n\t\tconst state = this.desmosCalculator.getState();\n\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tprovider: \"desmos\",\n\t\t\tvalue: this.getValue(),\n\t\t\tproviderState: state,\n\t\t};\n\t}\n\n\t/**\n\t * Import calculator state\n\t */\n\timportState(state: CalculatorState): void {\n\t\tif (state.provider !== \"desmos\") {\n\t\t\tthrow new Error(`Cannot import state from provider: ${state.provider}`);\n\t\t}\n\n\t\tif (state.providerState) {\n\t\t\tthis.desmosCalculator.setState(state.providerState);\n\t\t} else if (state.value) {\n\t\t\tthis.setValue(state.value);\n\t\t}\n\t}\n\n\t/**\n\t * Destroy calculator\n\t */\n\tdestroy(): void {\n\t\tif (this.desmosCalculator) {\n\t\t\ttry {\n\t\t\t\tthis.desmosCalculator.destroy();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\"[DesmosCalculator] Error during destroy:\", error);\n\t\t\t}\n\t\t\tthis.desmosCalculator = null;\n\t\t}\n\n\t\t// Clear the container to ensure Desmos releases all references\n\t\tif (this.container) {\n\t\t\t// Remove any Desmos-specific attributes\n\t\t\tthis.container.removeAttribute(\"data-desmos-id\");\n\n\t\t\t// Use modern API - more efficient and cleaner\n\t\t\tthis.container.replaceChildren();\n\t\t}\n\t}\n}\n\n"]}
@@ -12,4 +12,3 @@ export { DesmosCalculatorProvider } from "./calculators/desmos-provider.js";
12
12
  export { COMMON_LIBRARIES, LibraryLoaderImpl, libraryLoader, } from "./library-loader.js";
13
13
  export { ResponseDiscoveryServiceImpl, responseDiscovery, } from "./response-discovery.js";
14
14
  export * from "./types.js";
15
- //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/tools/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,sDAAsD;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,+CAA+C;AAC/C,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACb,MAAM,qBAAqB,CAAC;AAC7B,iDAAiD;AACjD,OAAO,EACN,4BAA4B,EAC5B,iBAAiB,GACjB,MAAM,yBAAyB,CAAC;AACjC,2BAA2B;AAC3B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/tools/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,sDAAsD;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,+CAA+C;AAC/C,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACb,MAAM,qBAAqB,CAAC;AAC7B,iDAAiD;AACjD,OAAO,EACN,4BAA4B,EAC5B,iBAAiB,GACjB,MAAM,yBAAyB,CAAC;AACjC,2BAA2B;AAC3B,cAAc,YAAY,CAAC","sourcesContent":["/**\n * Client-only tool system exports\n *\n * This entry point exports only browser-safe code for use in custom elements.\n * It excludes server-side services like accommodationResolver, variantResolver, etc.\n *\n * Tools should import from '@pie-players/pie-assessment-toolkit/tools/client' instead of\n * '@pie-players/pie-assessment-toolkit' to ensure\n * they don't accidentally pull in server-side dependencies.\n */\n\n// Calculator providers (client-safe, have SSR guards)\nexport { DesmosCalculatorProvider } from \"./calculators/desmos-provider.js\";\n// Library loader (client-safe, has SSR guards)\nexport {\n\tCOMMON_LIBRARIES,\n\tLibraryLoaderImpl,\n\tlibraryLoader,\n} from \"./library-loader.js\";\n// Response discovery (client-safe, browser-only)\nexport {\n\tResponseDiscoveryServiceImpl,\n\tresponseDiscovery,\n} from \"./response-discovery.js\";\n// Core types (client-safe)\nexport * from \"./types.js\";\n"]}
@@ -1,3 +1,2 @@
1
1
  import type { ToolModuleLoader } from "../services/ToolRegistry.js";
2
2
  export declare const DEFAULT_TOOL_MODULE_LOADERS: Record<string, ToolModuleLoader>;
3
- //# sourceMappingURL=default-tool-module-loaders.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"default-tool-module-loaders.js","sourceRoot":"","sources":["../../src/tools/default-tool-module-loaders.ts"],"names":[],"mappings":"AAEA,MAAM,oBAAoB,GAAG,CAC5B,IAA4B,EACZ,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAEjD;;;;;GAKG;AACH,SAAS,oBAAoB;IAC5B,IACC,OAAO,UAAU,KAAK,WAAW;QACjC,gBAAgB,IAAI,UAAU;QAC9B,UAAU,CAAC,cAAc,EAAE,GAAG,CAAC,qBAAqB,CAAC,EACpD,CAAC;QACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,oBAAoB,CAC1B,GAAG,EAAE;IACJ,0IAA0I;IAC1I,2EAA2E;IAC3E,MAAM,CAAC,yCAAyC,CAAC,CAClD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAqC;IAC5E,6DAA6D;IAC7D,iEAAiE;IACjE,UAAU,EAAE,oBAAoB;IAChC,YAAY,EAAE,GAAG,EAAE,CAClB,oBAAoB,CACnB,GAAG,EAAE;IACJ,0IAA0I;IAC1I,2EAA2E;IAC3E,MAAM,CAAC,kCAAkC,CAAC,CAC3C;CACF,CAAC"}
1
+ {"version":3,"file":"default-tool-module-loaders.js","sourceRoot":"","sources":["../../src/tools/default-tool-module-loaders.ts"],"names":[],"mappings":"AAEA,MAAM,oBAAoB,GAAG,CAC5B,IAA4B,EACZ,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAEjD;;;;;GAKG;AACH,SAAS,oBAAoB;IAC5B,IACC,OAAO,UAAU,KAAK,WAAW;QACjC,gBAAgB,IAAI,UAAU;QAC9B,UAAU,CAAC,cAAc,EAAE,GAAG,CAAC,qBAAqB,CAAC,EACpD,CAAC;QACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,oBAAoB,CAC1B,GAAG,EAAE;IACJ,0IAA0I;IAC1I,2EAA2E;IAC3E,MAAM,CAAC,yCAAyC,CAAC,CAClD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAqC;IAC5E,6DAA6D;IAC7D,iEAAiE;IACjE,UAAU,EAAE,oBAAoB;IAChC,YAAY,EAAE,GAAG,EAAE,CAClB,oBAAoB,CACnB,GAAG,EAAE;IACJ,0IAA0I;IAC1I,2EAA2E;IAC3E,MAAM,CAAC,kCAAkC,CAAC,CAC3C;CACF,CAAC","sourcesContent":["import type { ToolModuleLoader } from \"../services/ToolRegistry.js\";\n\nconst loadSideEffectModule = (\n\tload: () => Promise<unknown>,\n): Promise<void> => load().then(() => undefined);\n\n/**\n * Default lazy module loaders for built-in tools.\n *\n * Keeping this map near tool registrations avoids hard-coding module imports\n * in runtime components.\n */\nfunction loadCalculatorModule(): Promise<unknown> {\n\tif (\n\t\ttypeof globalThis !== \"undefined\" &&\n\t\t\"customElements\" in globalThis &&\n\t\tglobalThis.customElements?.get(\"pie-tool-calculator\")\n\t) {\n\t\treturn Promise.resolve();\n\t}\n\treturn loadSideEffectModule(\n\t\t() =>\n\t\t\t// biome-ignore lint/suspicious/noTsIgnore: module is optional; @ts-expect-error would fail in workspace builds where the symlink resolves\n\t\t\t// @ts-ignore Optional host module may be absent from toolkit package deps.\n\t\t\timport(\"@pie-players/pie-tool-calculator-desmos\"),\n\t);\n}\n\nexport const DEFAULT_TOOL_MODULE_LOADERS: Record<string, ToolModuleLoader> = {\n\t// Keep toolkit defaults limited to broadly expected modules.\n\t// Hosts can register additional optional tool loaders as needed.\n\tcalculator: loadCalculatorModule,\n\ttextToSpeech: () =>\n\t\tloadSideEffectModule(\n\t\t\t() =>\n\t\t\t\t// biome-ignore lint/suspicious/noTsIgnore: module is optional; @ts-expect-error would fail in workspace builds where the symlink resolves\n\t\t\t\t// @ts-ignore Optional host module may be absent from toolkit package deps.\n\t\t\t\timport(\"@pie-players/pie-tool-tts-inline\"),\n\t\t),\n};\n"]}
@@ -6,4 +6,3 @@
6
6
  */
7
7
  export * from "./client.js";
8
8
  export { VariantResolverImpl } from "./variant-resolver.js";
9
- //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,yDAAyD;AACzD,cAAc,aAAa,CAAC;AAC5B,mBAAmB;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,yDAAyD;AACzD,cAAc,aAAa,CAAC;AAC5B,mBAAmB;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["/**\n * Tool system exports\n *\n * For custom elements and client-side code, use\n * '@pie-players/pie-assessment-toolkit/tools/client' instead.\n */\n\n// Re-export everything from client.ts (client-safe code)\nexport * from \"./client.js\";\n// Variant resolver\nexport { VariantResolverImpl } from \"./variant-resolver.js\";\n"]}
@@ -60,4 +60,3 @@ export declare const libraryLoader: LibraryLoaderImpl;
60
60
  * Based on industry best practices and platform analyses
61
61
  */
62
62
  export declare const COMMON_LIBRARIES: Record<string, LibraryConfig>;
63
- //# sourceMappingURL=library-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"library-loader.js","sourceRoot":"","sources":["../../src/tools/library-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"library-loader.js","sourceRoot":"","sources":["../../src/tools/library-loader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Library Loader Service\n * Dynamically loads external JavaScript libraries with retry logic and fallback URLs\n *\n * Based on architectural enhancements from renaissance-tool-analyses.md\n * Supports both static and dynamic library loading\n */\n\nimport type { LibraryConfig, LibraryLoader, LoaderStats } from \"./types.js\";\n\n/**\n * Implementation of LibraryLoader service\n */\nexport class LibraryLoaderImpl implements LibraryLoader {\n\tprivate loadedLibraries = new Set<string>();\n\tprivate pendingLoads = new Map<string, Promise<void>>();\n\tprivate failedLibraries = new Map<string, Error>();\n\tprivate stats: LoaderStats = {\n\t\tloaded: [],\n\t\tfailed: [],\n\t\tpending: [],\n\t\tcacheHits: 0,\n\t\tcacheMisses: 0,\n\t\ttotalLoadTime: 0,\n\t};\n\n\t/**\n\t * Load a JavaScript library\n\t */\n\tasync loadScript(library: LibraryConfig): Promise<void> {\n\t\t// SSR guard: Library loading should NEVER run on the server\n\t\tif (typeof window === \"undefined\" || typeof document === \"undefined\") {\n\t\t\tthrow new Error(\"Library loader can only be used in the browser\");\n\t\t}\n\n\t\tconst startTime = performance.now();\n\n\t\t// Check if already loaded\n\t\tif (this.isLoaded(library.id)) {\n\t\t\tthis.stats.cacheHits++;\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if already pending\n\t\tconst pending = this.pendingLoads.get(library.id);\n\t\tif (pending) {\n\t\t\treturn pending;\n\t\t}\n\n\t\tthis.stats.cacheMisses++;\n\n\t\t// Start loading\n\t\tconst loadPromise = this._loadScriptWithRetry(library);\n\t\tthis.pendingLoads.set(library.id, loadPromise);\n\t\tthis.stats.pending.push(library.id);\n\n\t\ttry {\n\t\t\tawait loadPromise;\n\t\t\tthis.loadedLibraries.add(library.id);\n\t\t\tthis.stats.loaded.push(library.id);\n\n\t\t\tconst loadTime = performance.now() - startTime;\n\t\t\tthis.stats.totalLoadTime += loadTime;\n\n\t\t\tconsole.log(\n\t\t\t\t`[LibraryLoader] Successfully loaded ${library.id} in ${loadTime.toFixed(2)}ms`,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthis.failedLibraries.set(library.id, error as Error);\n\t\t\tthis.stats.failed.push(library.id);\n\t\t\tconsole.error(`[LibraryLoader] Failed to load ${library.id}:`, error);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tthis.pendingLoads.delete(library.id);\n\t\t\tconst pendingIndex = this.stats.pending.indexOf(library.id);\n\t\t\tif (pendingIndex !== -1) {\n\t\t\t\tthis.stats.pending.splice(pendingIndex, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Load a stylesheet\n\t */\n\tasync loadStylesheet(\n\t\turl: string,\n\t\ttargetRoot?: Document | ShadowRoot,\n\t): Promise<void> {\n\t\t// SSR guard: Stylesheet loading should NEVER run on the server\n\t\tif (typeof window === \"undefined\" || typeof document === \"undefined\") {\n\t\t\tthrow new Error(\"Stylesheet loader can only be used in the browser\");\n\t\t}\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst root = targetRoot ?? document;\n\n\t\t\t// Check if already loaded\n\t\t\tconst existing = root.querySelector(`link[href=\"${url}\"]`);\n\t\t\tif (existing) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst link = document.createElement(\"link\");\n\t\t\tlink.rel = \"stylesheet\";\n\t\t\tlink.href = url;\n\n\t\t\tlink.onload = () => resolve();\n\t\t\tlink.onerror = () =>\n\t\t\t\treject(new Error(`Failed to load stylesheet: ${url}`));\n\n\t\t\tif (root instanceof ShadowRoot) {\n\t\t\t\troot.appendChild(link);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdocument.head.appendChild(link);\n\t\t});\n\t}\n\n\t/**\n\t * Check if a library is already loaded\n\t */\n\tisLoaded(libraryId: string): boolean {\n\t\treturn this.loadedLibraries.has(libraryId);\n\t}\n\n\t/**\n\t * Preload multiple libraries in parallel\n\t */\n\tasync preload(libraries: LibraryConfig[]): Promise<void> {\n\t\tconst promises = libraries.map((lib) => this.loadScript(lib));\n\t\tawait Promise.all(promises);\n\t}\n\n\t/**\n\t * Unload a library (remove script tag)\n\t */\n\tunload(libraryId: string): void {\n\t\tconst script = document.querySelector(\n\t\t\t`script[data-library-id=\"${libraryId}\"]`,\n\t\t);\n\t\tif (script) {\n\t\t\tscript.remove();\n\t\t\tthis.loadedLibraries.delete(libraryId);\n\n\t\t\t// Remove from stats\n\t\t\tconst loadedIndex = this.stats.loaded.indexOf(libraryId);\n\t\t\tif (loadedIndex !== -1) {\n\t\t\t\tthis.stats.loaded.splice(loadedIndex, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Get loader statistics\n\t */\n\tgetStats(): LoaderStats {\n\t\treturn { ...this.stats };\n\t}\n\n\t/**\n\t * Load script with retry logic\n\t */\n\tprivate async _loadScriptWithRetry(library: LibraryConfig): Promise<void> {\n\t\tconst urls = [library.url, ...(library.fallbackUrls || [])];\n\t\tconst maxAttempts = library.retry?.maxAttempts || 3;\n\t\tconst delay = library.retry?.delay || 1000;\n\t\tconst backoffMultiplier = library.retry?.backoffMultiplier || 2;\n\n\t\tlet lastError: Error | null = null;\n\n\t\tfor (const url of urls) {\n\t\t\tfor (let attempt = 1; attempt <= maxAttempts; attempt++) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this._loadScriptFromUrl(url, library);\n\n\t\t\t\t\t// Verify library loaded if globalVar specified\n\t\t\t\t\tif (library.globalVar) {\n\t\t\t\t\t\tif (!(library.globalVar in window)) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Library ${library.id} loaded but global ${library.globalVar} not found`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn; // Success\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlastError = error as Error;\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[LibraryLoader] Attempt ${attempt}/${maxAttempts} failed for ${url}:`,\n\t\t\t\t\t\terror,\n\t\t\t\t\t);\n\n\t\t\t\t\t// Wait before retry (exponential backoff)\n\t\t\t\t\tif (attempt < maxAttempts) {\n\t\t\t\t\t\tconst waitTime = delay * Math.pow(backoffMultiplier, attempt - 1);\n\t\t\t\t\t\tawait this._sleep(waitTime);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`Failed to load library ${library.id} after trying all URLs: ${lastError?.message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Load script from a specific URL\n\t */\n\tprivate _loadScriptFromUrl(\n\t\turl: string,\n\t\tlibrary: LibraryConfig,\n\t): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst script = document.createElement(\"script\");\n\t\t\tscript.src = url;\n\t\t\tscript.dataset.libraryId = library.id;\n\n\t\t\tif (library.async) script.async = true;\n\t\t\tif (library.defer) script.defer = true;\n\t\t\tif (library.integrity) script.integrity = library.integrity;\n\t\t\tif (library.crossorigin) script.crossOrigin = library.crossorigin;\n\n\t\t\tlet timeoutId: number | undefined;\n\n\t\t\tconst cleanup = () => {\n\t\t\t\tif (timeoutId) clearTimeout(timeoutId);\n\t\t\t\tscript.onload = null;\n\t\t\t\tscript.onerror = null;\n\t\t\t};\n\n\t\t\tscript.onload = () => {\n\t\t\t\tcleanup();\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tscript.onerror = (error) => {\n\t\t\t\tcleanup();\n\t\t\t\tscript.remove();\n\t\t\t\treject(new Error(`Script load error for ${url}: ${error}`));\n\t\t\t};\n\n\t\t\t// Timeout handling\n\t\t\tif (library.timeout) {\n\t\t\t\ttimeoutId = window.setTimeout(() => {\n\t\t\t\t\tcleanup();\n\t\t\t\t\tscript.remove();\n\t\t\t\t\treject(\n\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t`Script load timeout for ${url} after ${library.timeout}ms`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}, library.timeout);\n\t\t\t}\n\n\t\t\tdocument.head.appendChild(script);\n\t\t});\n\t}\n\n\t/**\n\t * Sleep utility for retry delays\n\t */\n\tprivate _sleep(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n}\n\n/**\n * Singleton instance\n */\nexport const libraryLoader = new LibraryLoaderImpl();\n\n/**\n * Desmos library version (matches the version in calculator.js)\n * Update this when upgrading to a new version\n */\nconst DESMOS_VERSION = \"v1.10.1\";\n\n/**\n * Common library configurations\n * Based on industry best practices and platform analyses\n */\nexport const COMMON_LIBRARIES: Record<string, LibraryConfig> = {\n\tdesmos: {\n\t\tid: \"desmos\",\n\t\turl: `/lib/desmos/${DESMOS_VERSION}/calculator.js`, // Self-hosted (prioritized) - versioned for better cache control\n\t\tfallbackUrls: [\n\t\t\t\"https://www.desmos.com/api/v1.10/calculator.js\",\n\t\t\t\"https://cdn.jsdelivr.net/npm/desmos@1.10/dist/calculator.js\",\n\t\t],\n\t\tglobalVar: \"Desmos\",\n\t\ttimeout: 10000,\n\t\tretry: { maxAttempts: 3, delay: 1000, backoffMultiplier: 2 },\n\t},\n\n\tmathjax: {\n\t\tid: \"mathjax\",\n\t\turl: \"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\",\n\t\tfallbackUrls: [\n\t\t\t\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-chtml.min.js\",\n\t\t\t\"/static/lib/mathjax/tex-mml-chtml.js\",\n\t\t],\n\t\tglobalVar: \"MathJax\",\n\t\tasync: true,\n\t\tretry: { maxAttempts: 2, delay: 1500 },\n\t},\n\n\tkatex: {\n\t\tid: \"katex\",\n\t\turl: \"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\",\n\t\tfallbackUrls: [\n\t\t\t\"https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.js\",\n\t\t\t\"/static/lib/katex/katex.min.js\",\n\t\t],\n\t\tglobalVar: \"katex\",\n\t\ttimeout: 5000,\n\t},\n};\n"]}
@@ -32,4 +32,3 @@ export declare const themeToolRegistration: ToolRegistration;
32
32
  * Zero DOM mutation, optimal performance.
33
33
  */
34
34
  export declare const annotationToolbarRegistration: ToolRegistration;
35
- //# sourceMappingURL=accessibility-tools.d.ts.map
@@ -94,7 +94,6 @@ export const themeToolRegistration = {
94
94
  "highContrastDisplay", // QTI 3.0 standard (visual.highContrastDisplay)
95
95
  "colorContrast", // QTI 3.0 standard (visual.colorContrast)
96
96
  "invertColors", // QTI 3.0 standard (visual.invertColors)
97
- "colorScheme", // Legacy alias
98
97
  "theme", // Canonical id
99
98
  "highContrast", // Common variant
100
99
  "customColors", // Common variant