@tscaps/engine 0.1.1 → 0.2.1

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 (321) hide show
  1. package/README.md +2 -4
  2. package/dist/modules/css/CssScoper.d.ts +21 -1
  3. package/dist/modules/css/CssScoper.d.ts.map +1 -1
  4. package/dist/modules/css/CssScoper.js +129 -56
  5. package/dist/modules/css/CssScoper.js.map +1 -1
  6. package/dist/modules/css/CssVarReferenceScanner.d.ts +13 -0
  7. package/dist/modules/css/CssVarReferenceScanner.d.ts.map +1 -0
  8. package/dist/modules/css/CssVarReferenceScanner.js +20 -0
  9. package/dist/modules/css/CssVarReferenceScanner.js.map +1 -0
  10. package/dist/modules/css/index.d.ts +1 -0
  11. package/dist/modules/css/index.d.ts.map +1 -1
  12. package/dist/modules/css/index.js +1 -0
  13. package/dist/modules/css/index.js.map +1 -1
  14. package/dist/modules/document/CssVariable.d.ts +24 -3
  15. package/dist/modules/document/CssVariable.d.ts.map +1 -1
  16. package/dist/modules/document/CssVariable.js +30 -2
  17. package/dist/modules/document/CssVariable.js.map +1 -1
  18. package/dist/modules/document/Decoration.d.ts +42 -0
  19. package/dist/modules/document/Decoration.d.ts.map +1 -0
  20. package/dist/modules/document/Decoration.js +52 -0
  21. package/dist/modules/document/Decoration.js.map +1 -0
  22. package/dist/modules/document/Document.d.ts.map +1 -1
  23. package/dist/modules/document/Document.js +0 -3
  24. package/dist/modules/document/Document.js.map +1 -1
  25. package/dist/modules/document/DocumentEditor.d.ts +11 -0
  26. package/dist/modules/document/DocumentEditor.d.ts.map +1 -1
  27. package/dist/modules/document/DocumentEditor.js +49 -9
  28. package/dist/modules/document/DocumentEditor.js.map +1 -1
  29. package/dist/modules/document/Line.d.ts +9 -6
  30. package/dist/modules/document/Line.d.ts.map +1 -1
  31. package/dist/modules/document/Line.js +11 -24
  32. package/dist/modules/document/Line.js.map +1 -1
  33. package/dist/modules/document/Section.d.ts +0 -4
  34. package/dist/modules/document/Section.d.ts.map +1 -1
  35. package/dist/modules/document/Section.js +2 -18
  36. package/dist/modules/document/Section.js.map +1 -1
  37. package/dist/modules/document/Segment.d.ts +10 -7
  38. package/dist/modules/document/Segment.d.ts.map +1 -1
  39. package/dist/modules/document/Segment.js +15 -22
  40. package/dist/modules/document/Segment.js.map +1 -1
  41. package/dist/modules/document/Tag.d.ts +3 -0
  42. package/dist/modules/document/Tag.d.ts.map +1 -1
  43. package/dist/modules/document/Tag.js +3 -0
  44. package/dist/modules/document/Tag.js.map +1 -1
  45. package/dist/modules/document/Word.d.ts +20 -7
  46. package/dist/modules/document/Word.d.ts.map +1 -1
  47. package/dist/modules/document/Word.js +32 -34
  48. package/dist/modules/document/Word.js.map +1 -1
  49. package/dist/modules/document/index.d.ts +1 -0
  50. package/dist/modules/document/index.d.ts.map +1 -1
  51. package/dist/modules/document/index.js +1 -0
  52. package/dist/modules/document/index.js.map +1 -1
  53. package/dist/modules/effect/CarryQuotesEffect.d.ts +1 -7
  54. package/dist/modules/effect/CarryQuotesEffect.d.ts.map +1 -1
  55. package/dist/modules/effect/CarryQuotesEffect.js +17 -30
  56. package/dist/modules/effect/CarryQuotesEffect.js.map +1 -1
  57. package/dist/modules/effect/RemovePunctuationEffect.d.ts +10 -2
  58. package/dist/modules/effect/RemovePunctuationEffect.d.ts.map +1 -1
  59. package/dist/modules/effect/RemovePunctuationEffect.js +26 -6
  60. package/dist/modules/effect/RemovePunctuationEffect.js.map +1 -1
  61. package/dist/modules/effect/SmartLowercaseEffect.d.ts +7 -6
  62. package/dist/modules/effect/SmartLowercaseEffect.d.ts.map +1 -1
  63. package/dist/modules/effect/SmartLowercaseEffect.js +11 -7
  64. package/dist/modules/effect/SmartLowercaseEffect.js.map +1 -1
  65. package/dist/modules/pipeline/RenderPipelineBuilder.d.ts +3 -3
  66. package/dist/modules/pipeline/RenderPipelineBuilder.d.ts.map +1 -1
  67. package/dist/modules/pipeline/RenderPipelineBuilder.js +11 -6
  68. package/dist/modules/pipeline/RenderPipelineBuilder.js.map +1 -1
  69. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.d.ts +19 -25
  70. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.d.ts.map +1 -1
  71. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.js +40 -717
  72. package/dist/modules/rendering/BrowserSubtitleFrameRenderer.js.map +1 -1
  73. package/dist/modules/rendering/SubtitleFrameRenderer.d.ts +8 -5
  74. package/dist/modules/rendering/SubtitleFrameRenderer.d.ts.map +1 -1
  75. package/dist/modules/rendering/index.d.ts +13 -8
  76. package/dist/modules/rendering/index.d.ts.map +1 -1
  77. package/dist/modules/rendering/index.js +5 -2
  78. package/dist/modules/rendering/index.js.map +1 -1
  79. package/dist/modules/rendering/styles/BaselineCssComposer.d.ts +23 -0
  80. package/dist/modules/rendering/styles/BaselineCssComposer.d.ts.map +1 -0
  81. package/dist/modules/rendering/styles/BaselineCssComposer.js +40 -0
  82. package/dist/modules/rendering/styles/BaselineCssComposer.js.map +1 -0
  83. package/dist/modules/rendering/styles/BehindActorBaselineCss.d.ts +19 -0
  84. package/dist/modules/rendering/styles/BehindActorBaselineCss.d.ts.map +1 -0
  85. package/dist/modules/rendering/styles/BehindActorBaselineCss.js +19 -0
  86. package/dist/modules/rendering/styles/BehindActorBaselineCss.js.map +1 -0
  87. package/dist/modules/rendering/styles/DecorationContainerBaselineCss.d.ts +7 -0
  88. package/dist/modules/rendering/styles/DecorationContainerBaselineCss.d.ts.map +1 -0
  89. package/dist/modules/rendering/styles/DecorationContainerBaselineCss.js +34 -0
  90. package/dist/modules/rendering/styles/DecorationContainerBaselineCss.js.map +1 -0
  91. package/dist/modules/rendering/styles/InlineStyleEmitter.d.ts +27 -0
  92. package/dist/modules/rendering/styles/InlineStyleEmitter.d.ts.map +1 -0
  93. package/dist/modules/rendering/styles/InlineStyleEmitter.js +53 -0
  94. package/dist/modules/rendering/styles/InlineStyleEmitter.js.map +1 -0
  95. package/dist/modules/rendering/styles/SegmentPaddingCssRuleBuilder.d.ts +15 -0
  96. package/dist/modules/rendering/styles/SegmentPaddingCssRuleBuilder.d.ts.map +1 -0
  97. package/dist/modules/rendering/styles/SegmentPaddingCssRuleBuilder.js +33 -0
  98. package/dist/modules/rendering/styles/SegmentPaddingCssRuleBuilder.js.map +1 -0
  99. package/dist/modules/rendering/styles/VideoFrameLayerClass.d.ts.map +1 -0
  100. package/dist/modules/rendering/styles/VideoFrameLayerClass.js.map +1 -0
  101. package/dist/modules/rendering/subtitle/AbstractAnim.d.ts +13 -0
  102. package/dist/modules/rendering/subtitle/AbstractAnim.d.ts.map +1 -0
  103. package/dist/modules/rendering/subtitle/AbstractAnim.js +2 -0
  104. package/dist/modules/rendering/subtitle/AbstractAnim.js.map +1 -0
  105. package/dist/modules/rendering/subtitle/ActiveRenderSession.d.ts +20 -0
  106. package/dist/modules/rendering/subtitle/ActiveRenderSession.d.ts.map +1 -0
  107. package/dist/modules/rendering/subtitle/ActiveRenderSession.js +31 -0
  108. package/dist/modules/rendering/subtitle/ActiveRenderSession.js.map +1 -0
  109. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.d.ts +19 -0
  110. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.d.ts.map +1 -0
  111. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.js +41 -0
  112. package/dist/modules/rendering/subtitle/ActiveRenderSessionFactory.js.map +1 -0
  113. package/dist/modules/rendering/subtitle/AnimationProbe.d.ts +25 -0
  114. package/dist/modules/rendering/subtitle/AnimationProbe.d.ts.map +1 -0
  115. package/dist/modules/rendering/subtitle/AnimationProbe.js +198 -0
  116. package/dist/modules/rendering/subtitle/AnimationProbe.js.map +1 -0
  117. package/dist/modules/rendering/subtitle/AssetGroupBuilder.d.ts +15 -0
  118. package/dist/modules/rendering/subtitle/AssetGroupBuilder.d.ts.map +1 -0
  119. package/dist/modules/rendering/subtitle/AssetGroupBuilder.js +26 -0
  120. package/dist/modules/rendering/subtitle/AssetGroupBuilder.js.map +1 -0
  121. package/dist/modules/rendering/subtitle/BatchPlan.d.ts +32 -0
  122. package/dist/modules/rendering/subtitle/BatchPlan.d.ts.map +1 -0
  123. package/dist/modules/rendering/subtitle/BatchPlan.js +2 -0
  124. package/dist/modules/rendering/subtitle/BatchPlan.js.map +1 -0
  125. package/dist/modules/rendering/subtitle/BatchPlanner.d.ts +31 -0
  126. package/dist/modules/rendering/subtitle/BatchPlanner.d.ts.map +1 -0
  127. package/dist/modules/rendering/subtitle/BatchPlanner.js +91 -0
  128. package/dist/modules/rendering/subtitle/BatchPlanner.js.map +1 -0
  129. package/dist/modules/rendering/subtitle/PreparedStyle.d.ts +35 -0
  130. package/dist/modules/rendering/subtitle/PreparedStyle.d.ts.map +1 -0
  131. package/dist/modules/rendering/subtitle/PreparedStyle.js +2 -0
  132. package/dist/modules/rendering/subtitle/PreparedStyle.js.map +1 -0
  133. package/dist/modules/rendering/subtitle/PreparedStyleFactory.d.ts +31 -0
  134. package/dist/modules/rendering/subtitle/PreparedStyleFactory.d.ts.map +1 -0
  135. package/dist/modules/rendering/subtitle/PreparedStyleFactory.js +91 -0
  136. package/dist/modules/rendering/subtitle/PreparedStyleFactory.js.map +1 -0
  137. package/dist/modules/rendering/subtitle/SegmentPaintRegionCache.d.ts +13 -0
  138. package/dist/modules/rendering/subtitle/SegmentPaintRegionCache.d.ts.map +1 -0
  139. package/dist/modules/rendering/subtitle/SegmentPaintRegionCache.js +24 -0
  140. package/dist/modules/rendering/subtitle/SegmentPaintRegionCache.js.map +1 -0
  141. package/dist/modules/rendering/{SegmentPaintRegionResolver.d.ts → subtitle/SegmentPaintRegionResolver.d.ts} +1 -1
  142. package/dist/modules/rendering/subtitle/SegmentPaintRegionResolver.d.ts.map +1 -0
  143. package/dist/modules/rendering/subtitle/SegmentPaintRegionResolver.js.map +1 -0
  144. package/dist/modules/rendering/subtitle/SegmentSubtreeDecomposer.d.ts +45 -0
  145. package/dist/modules/rendering/subtitle/SegmentSubtreeDecomposer.d.ts.map +1 -0
  146. package/dist/modules/rendering/subtitle/SegmentSubtreeDecomposer.js +50 -0
  147. package/dist/modules/rendering/subtitle/SegmentSubtreeDecomposer.js.map +1 -0
  148. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.d.ts +80 -0
  149. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.d.ts.map +1 -0
  150. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.js +188 -0
  151. package/dist/modules/rendering/subtitle/SegmentSubtreeHtmlBuilder.js.map +1 -0
  152. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.d.ts +45 -0
  153. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.d.ts.map +1 -0
  154. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.js +141 -0
  155. package/dist/modules/rendering/subtitle/SegmentWrapperRenderer.js.map +1 -0
  156. package/dist/modules/rendering/subtitle/SpriteSheetCompositor.d.ts +46 -0
  157. package/dist/modules/rendering/subtitle/SpriteSheetCompositor.d.ts.map +1 -0
  158. package/dist/modules/rendering/subtitle/SpriteSheetCompositor.js +134 -0
  159. package/dist/modules/rendering/subtitle/SpriteSheetCompositor.js.map +1 -0
  160. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.d.ts +17 -0
  161. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.d.ts.map +1 -0
  162. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.js +58 -0
  163. package/dist/modules/rendering/subtitle/SpriteSheetSizeProber.js.map +1 -0
  164. package/dist/modules/rendering/subtitle/SvgFilterMaterializer.d.ts +27 -0
  165. package/dist/modules/rendering/subtitle/SvgFilterMaterializer.d.ts.map +1 -0
  166. package/dist/modules/rendering/subtitle/SvgFilterMaterializer.js +40 -0
  167. package/dist/modules/rendering/subtitle/SvgFilterMaterializer.js.map +1 -0
  168. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.d.ts +42 -0
  169. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.d.ts.map +1 -0
  170. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.js +112 -0
  171. package/dist/modules/rendering/subtitle/VideoFrameVarsBuilder.js.map +1 -0
  172. package/dist/modules/rendering/types/AlignmentConfig.d.ts.map +1 -0
  173. package/dist/modules/rendering/types/AlignmentConfig.js.map +1 -0
  174. package/dist/modules/rendering/types/BehindActorRequirement.d.ts +12 -0
  175. package/dist/modules/rendering/types/BehindActorRequirement.d.ts.map +1 -0
  176. package/dist/modules/rendering/types/BehindActorRequirement.js +2 -0
  177. package/dist/modules/rendering/types/BehindActorRequirement.js.map +1 -0
  178. package/dist/modules/rendering/types/BoxEdges.d.ts.map +1 -0
  179. package/dist/modules/rendering/types/BoxEdges.js.map +1 -0
  180. package/dist/modules/rendering/types/DecorationPlacementSide.d.ts +8 -0
  181. package/dist/modules/rendering/types/DecorationPlacementSide.d.ts.map +1 -0
  182. package/dist/modules/rendering/types/DecorationPlacementSide.js +2 -0
  183. package/dist/modules/rendering/types/DecorationPlacementSide.js.map +1 -0
  184. package/dist/modules/rendering/{ElementRenderOverrides.d.ts → types/ElementRenderOverrides.d.ts} +1 -1
  185. package/dist/modules/rendering/types/ElementRenderOverrides.d.ts.map +1 -0
  186. package/dist/modules/rendering/types/ElementRenderOverrides.js.map +1 -0
  187. package/dist/modules/rendering/types/InlineStyleMap.d.ts.map +1 -0
  188. package/dist/modules/rendering/types/InlineStyleMap.js.map +1 -0
  189. package/dist/modules/rendering/{RenderingConfig.d.ts → types/RenderingConfig.d.ts} +3 -1
  190. package/dist/modules/rendering/types/RenderingConfig.d.ts.map +1 -0
  191. package/dist/modules/rendering/types/RenderingConfig.js.map +1 -0
  192. package/dist/modules/rendering/{ScopedRenderOverride.d.ts → types/ScopedRenderOverride.d.ts} +2 -2
  193. package/dist/modules/rendering/types/ScopedRenderOverride.d.ts.map +1 -0
  194. package/dist/modules/rendering/types/ScopedRenderOverride.js.map +1 -0
  195. package/dist/modules/rendering/types/VideoFrameSource.d.ts.map +1 -0
  196. package/dist/modules/rendering/types/VideoFrameSource.js.map +1 -0
  197. package/dist/modules/splitting/BoundaryScoreLimitByCharsSegmentSplitter.d.ts +33 -0
  198. package/dist/modules/splitting/BoundaryScoreLimitByCharsSegmentSplitter.d.ts.map +1 -0
  199. package/dist/modules/splitting/BoundaryScoreLimitByCharsSegmentSplitter.js +100 -0
  200. package/dist/modules/splitting/BoundaryScoreLimitByCharsSegmentSplitter.js.map +1 -0
  201. package/dist/modules/splitting/FixedTailLineSplitter.d.ts +29 -0
  202. package/dist/modules/splitting/FixedTailLineSplitter.d.ts.map +1 -0
  203. package/dist/modules/splitting/FixedTailLineSplitter.js +43 -0
  204. package/dist/modules/splitting/FixedTailLineSplitter.js.map +1 -0
  205. package/dist/modules/splitting/index.d.ts +4 -0
  206. package/dist/modules/splitting/index.d.ts.map +1 -1
  207. package/dist/modules/splitting/index.js +2 -0
  208. package/dist/modules/splitting/index.js.map +1 -1
  209. package/dist/modules/tagging/PauseTagger.d.ts +24 -0
  210. package/dist/modules/tagging/PauseTagger.d.ts.map +1 -0
  211. package/dist/modules/tagging/PauseTagger.js +41 -0
  212. package/dist/modules/tagging/PauseTagger.js.map +1 -0
  213. package/dist/modules/tagging/StructureTagger.d.ts +1 -1
  214. package/dist/modules/tagging/StructureTagger.d.ts.map +1 -1
  215. package/dist/modules/tagging/StructureTagger.js +11 -5
  216. package/dist/modules/tagging/StructureTagger.js.map +1 -1
  217. package/dist/modules/tagging/index.d.ts +2 -0
  218. package/dist/modules/tagging/index.d.ts.map +1 -1
  219. package/dist/modules/tagging/index.js +1 -0
  220. package/dist/modules/tagging/index.js.map +1 -1
  221. package/dist/modules/transcription/VttTranscriber.d.ts +28 -0
  222. package/dist/modules/transcription/VttTranscriber.d.ts.map +1 -0
  223. package/dist/modules/transcription/VttTranscriber.js +59 -0
  224. package/dist/modules/transcription/VttTranscriber.js.map +1 -0
  225. package/dist/modules/transcription/index.d.ts +1 -0
  226. package/dist/modules/transcription/index.d.ts.map +1 -1
  227. package/dist/modules/transcription/index.js +1 -0
  228. package/dist/modules/transcription/index.js.map +1 -1
  229. package/dist/modules/video/RenderJob.d.ts +17 -0
  230. package/dist/modules/video/RenderJob.d.ts.map +1 -1
  231. package/dist/modules/video/RenderTimeMap.d.ts +50 -0
  232. package/dist/modules/video/RenderTimeMap.d.ts.map +1 -0
  233. package/dist/modules/video/RenderTimeMap.js +90 -0
  234. package/dist/modules/video/RenderTimeMap.js.map +1 -0
  235. package/dist/modules/video/index.d.ts +8 -1
  236. package/dist/modules/video/index.d.ts.map +1 -1
  237. package/dist/modules/video/index.js +4 -0
  238. package/dist/modules/video/index.js.map +1 -1
  239. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.d.ts +102 -0
  240. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.d.ts.map +1 -0
  241. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.js +199 -0
  242. package/dist/modules/video/mediabunny/MediaBunnyTranscodeCoordinator.js.map +1 -0
  243. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.d.ts +12 -52
  244. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.d.ts.map +1 -1
  245. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.js +25 -190
  246. package/dist/modules/video/mediabunny/MediaBunnyVideoRenderer.js.map +1 -1
  247. package/dist/modules/video/mediabunny/audio/AudioTrackBridgeFactory.d.ts +7 -0
  248. package/dist/modules/video/mediabunny/audio/AudioTrackBridgeFactory.d.ts.map +1 -1
  249. package/dist/modules/video/mediabunny/audio/DefaultAudioTrackBridgeFactory.js +2 -2
  250. package/dist/modules/video/mediabunny/audio/DefaultAudioTrackBridgeFactory.js.map +1 -1
  251. package/dist/modules/video/mediabunny/audio/PassthroughAudioTrackBridge.d.ts +2 -0
  252. package/dist/modules/video/mediabunny/audio/PassthroughAudioTrackBridge.d.ts.map +1 -1
  253. package/dist/modules/video/mediabunny/audio/PassthroughAudioTrackBridge.js +8 -2
  254. package/dist/modules/video/mediabunny/audio/PassthroughAudioTrackBridge.js.map +1 -1
  255. package/dist/modules/video/mediabunny/audio/TranscodeAudioTrackBridge.d.ts +3 -0
  256. package/dist/modules/video/mediabunny/audio/TranscodeAudioTrackBridge.d.ts.map +1 -1
  257. package/dist/modules/video/mediabunny/audio/TranscodeAudioTrackBridge.js +9 -2
  258. package/dist/modules/video/mediabunny/audio/TranscodeAudioTrackBridge.js.map +1 -1
  259. package/dist/modules/video/mediabunny/codec/CodecPolicy.d.ts +7 -0
  260. package/dist/modules/video/mediabunny/codec/CodecPolicy.d.ts.map +1 -1
  261. package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.d.ts +1 -1
  262. package/dist/modules/video/mediabunny/frame/CurrentFrameVideoSource.d.ts.map +1 -1
  263. package/dist/modules/video/mediabunny/frame/FrameCompositor.d.ts +9 -2
  264. package/dist/modules/video/mediabunny/frame/FrameCompositor.d.ts.map +1 -1
  265. package/dist/modules/video/mediabunny/frame/LayeredFrameCompositor.d.ts +5 -2
  266. package/dist/modules/video/mediabunny/frame/LayeredFrameCompositor.d.ts.map +1 -1
  267. package/dist/modules/video/mediabunny/frame/LayeredFrameCompositor.js +8 -2
  268. package/dist/modules/video/mediabunny/frame/LayeredFrameCompositor.js.map +1 -1
  269. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.d.ts +35 -0
  270. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.d.ts.map +1 -0
  271. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.js +69 -0
  272. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainter.js.map +1 -0
  273. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainterFactory.d.ts +23 -0
  274. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainterFactory.d.ts.map +1 -0
  275. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainterFactory.js +23 -0
  276. package/dist/modules/video/mediabunny/painter/CaptionsOverlayFramePainterFactory.js.map +1 -0
  277. package/dist/modules/video/mediabunny/painter/FramePainter.d.ts +46 -0
  278. package/dist/modules/video/mediabunny/painter/FramePainter.d.ts.map +1 -0
  279. package/dist/modules/video/mediabunny/painter/FramePainter.js +2 -0
  280. package/dist/modules/video/mediabunny/painter/FramePainter.js.map +1 -0
  281. package/dist/modules/video/mediabunny/painter/TopLayerSource.d.ts +25 -0
  282. package/dist/modules/video/mediabunny/painter/TopLayerSource.d.ts.map +1 -0
  283. package/dist/modules/video/mediabunny/painter/TopLayerSource.js +2 -0
  284. package/dist/modules/video/mediabunny/painter/TopLayerSource.js.map +1 -0
  285. package/package.json +1 -1
  286. package/dist/modules/rendering/AlignmentConfig.d.ts.map +0 -1
  287. package/dist/modules/rendering/AlignmentConfig.js.map +0 -1
  288. package/dist/modules/rendering/BoxEdges.d.ts.map +0 -1
  289. package/dist/modules/rendering/BoxEdges.js.map +0 -1
  290. package/dist/modules/rendering/ElementRenderOverrides.d.ts.map +0 -1
  291. package/dist/modules/rendering/ElementRenderOverrides.js.map +0 -1
  292. package/dist/modules/rendering/InlineStyleMap.d.ts.map +0 -1
  293. package/dist/modules/rendering/InlineStyleMap.js.map +0 -1
  294. package/dist/modules/rendering/RenderingConfig.d.ts.map +0 -1
  295. package/dist/modules/rendering/RenderingConfig.js.map +0 -1
  296. package/dist/modules/rendering/ScopedRenderOverride.d.ts.map +0 -1
  297. package/dist/modules/rendering/ScopedRenderOverride.js.map +0 -1
  298. package/dist/modules/rendering/SegmentPaintRegionResolver.d.ts.map +0 -1
  299. package/dist/modules/rendering/SegmentPaintRegionResolver.js.map +0 -1
  300. package/dist/modules/rendering/SegmentSubtreeHtmlBuilder.d.ts +0 -58
  301. package/dist/modules/rendering/SegmentSubtreeHtmlBuilder.d.ts.map +0 -1
  302. package/dist/modules/rendering/SegmentSubtreeHtmlBuilder.js +0 -132
  303. package/dist/modules/rendering/SegmentSubtreeHtmlBuilder.js.map +0 -1
  304. package/dist/modules/rendering/VideoFrameLayerClass.d.ts.map +0 -1
  305. package/dist/modules/rendering/VideoFrameLayerClass.js.map +0 -1
  306. package/dist/modules/rendering/VideoFrameSource.d.ts.map +0 -1
  307. package/dist/modules/rendering/VideoFrameSource.js.map +0 -1
  308. /package/dist/modules/rendering/{VideoFrameLayerClass.d.ts → styles/VideoFrameLayerClass.d.ts} +0 -0
  309. /package/dist/modules/rendering/{VideoFrameLayerClass.js → styles/VideoFrameLayerClass.js} +0 -0
  310. /package/dist/modules/rendering/{SegmentPaintRegionResolver.js → subtitle/SegmentPaintRegionResolver.js} +0 -0
  311. /package/dist/modules/rendering/{AlignmentConfig.d.ts → types/AlignmentConfig.d.ts} +0 -0
  312. /package/dist/modules/rendering/{AlignmentConfig.js → types/AlignmentConfig.js} +0 -0
  313. /package/dist/modules/rendering/{BoxEdges.d.ts → types/BoxEdges.d.ts} +0 -0
  314. /package/dist/modules/rendering/{BoxEdges.js → types/BoxEdges.js} +0 -0
  315. /package/dist/modules/rendering/{ElementRenderOverrides.js → types/ElementRenderOverrides.js} +0 -0
  316. /package/dist/modules/rendering/{InlineStyleMap.d.ts → types/InlineStyleMap.d.ts} +0 -0
  317. /package/dist/modules/rendering/{InlineStyleMap.js → types/InlineStyleMap.js} +0 -0
  318. /package/dist/modules/rendering/{RenderingConfig.js → types/RenderingConfig.js} +0 -0
  319. /package/dist/modules/rendering/{ScopedRenderOverride.js → types/ScopedRenderOverride.js} +0 -0
  320. /package/dist/modules/rendering/{VideoFrameSource.d.ts → types/VideoFrameSource.d.ts} +0 -0
  321. /package/dist/modules/rendering/{VideoFrameSource.js → types/VideoFrameSource.js} +0 -0
@@ -0,0 +1,112 @@
1
+ import { CssVariable } from '../../document/CssVariable';
2
+ const NO_EXCLUDED_WORDS = new Set();
3
+ // Safety bleed applied to the painted region for video-frame styles
4
+ // that don't declare a `rendering.padding`. 0.25em ≈ enough to cover
5
+ // a typical text-shadow, kept narrow so the crop still pays off.
6
+ const UNDECLARED_PADDING_SAFETY_EM = 0.25;
7
+ /**
8
+ * Builds the inline-style map driving the video-frame backdrop for
9
+ * one segment: the JPEG data URL holding the painted region of the
10
+ * underlying frame, plus the region's pixel size and offset within
11
+ * the segment's anchor box. Caches paint regions per
12
+ * `(kind, segmentId)` so the JPEG crop is only measured once per
13
+ * segment.
14
+ *
15
+ * Returns an empty map for styles that don't consume the video
16
+ * frame.
17
+ */
18
+ export class VideoFrameVarsBuilder {
19
+ subtreeBuilder;
20
+ paintRegionResolver;
21
+ paintRegionCache;
22
+ width;
23
+ height;
24
+ videoFrameSource;
25
+ constructor(subtreeBuilder, paintRegionResolver, paintRegionCache, width, height, videoFrameSource) {
26
+ this.subtreeBuilder = subtreeBuilder;
27
+ this.paintRegionResolver = paintRegionResolver;
28
+ this.paintRegionCache = paintRegionCache;
29
+ this.width = width;
30
+ this.height = height;
31
+ this.videoFrameSource = videoFrameSource;
32
+ }
33
+ async build(style, seg, placement, t) {
34
+ if (!style.rendering.videoFrame.required)
35
+ return {};
36
+ const region = this.resolvePaintRegion(style, seg, placement);
37
+ // Offset vars assume the consuming element is a direct child of
38
+ // the wrapper: `%` resolves against the wrapper. The region.x/y
39
+ // bias positions the layer so the cropped frame's (0,0) lands on
40
+ // viewport (region.x, region.y); when no crop applies the bias
41
+ // is zero and the layer covers the full viewport.
42
+ return {
43
+ [CssVariable.VIDEO_FRAME]: `url("${await this.videoFrameSource.getFrameAt(t, style.rendering.videoFrame.jpegQuality, region)}")`,
44
+ [CssVariable.SUBTITLE_REGION_WIDTH]: `${region.width}px`,
45
+ [CssVariable.SUBTITLE_REGION_HEIGHT]: `${region.height}px`,
46
+ [CssVariable.SUBTITLE_REGION_X]: `calc(${placement.hAnchorPct}% - ${placement.xPx - region.x}px)`,
47
+ [CssVariable.SUBTITLE_REGION_Y]: `calc(${placement.vAnchorPct}% - ${placement.yPx - region.y}px)`,
48
+ };
49
+ }
50
+ /**
51
+ * The tight-crop optimization assumes every word stays inside the
52
+ * segment's in-flow bounding box. As soon as a word is
53
+ * repositioned outside that bbox, the same crop leaves its
54
+ * video-frame backdrop sampling pixels that aren't in the JPEG
55
+ * payload. Falling back to the full viewport for those segments
56
+ * restores correctness; the optimization recovers automatically
57
+ * the moment the override is reset.
58
+ */
59
+ resolvePaintRegion(style, seg, placement) {
60
+ return this.paintRegionCache.getOrCompute(style.kind, seg.id, () => this.hasPositionedWord(seg, style.wordOverrides) || this.hasPositionedDecoration(seg, style)
61
+ ? { x: 0, y: 0, width: this.width, height: this.height }
62
+ : this.measureSegmentPaintRegion(style, seg, placement));
63
+ }
64
+ measureSegmentPaintRegion(style, seg, placement) {
65
+ const segmentInlineStylesOverride = style.segmentOverrides.get(seg.id)?.inlineStyles;
66
+ const baseInlineStyles = segmentInlineStylesOverride
67
+ ? { ...style.inlineStyles, ...segmentInlineStylesOverride }
68
+ : style.inlineStyles;
69
+ const segmentHtml = this.subtreeBuilder.buildSegmentSubtree({
70
+ scopeClass: style.scopeClass,
71
+ baseInlineStyles,
72
+ wordOverrides: style.wordOverrides,
73
+ splitWordsIntoLetters: style.rendering.splitWordsIntoLetters,
74
+ includeVideoFrameLayer: style.rendering.videoFrame.required,
75
+ extraWrapperStyles: {},
76
+ decorationPlacements: style.decorationPlacements,
77
+ inlineStyleEmitter: style.inlineStyleEmitter,
78
+ }, seg, seg.time.start, NO_EXCLUDED_WORDS,
79
+ // Paint-region measurement renders the segment in isolation; the
80
+ // index inside the section doesn't affect layout, so any value works.
81
+ 0);
82
+ return this.paintRegionResolver.resolve({
83
+ segmentHtml,
84
+ probeContainer: style.probeContainer,
85
+ placement,
86
+ viewportWidth: this.width,
87
+ viewportHeight: this.height,
88
+ safetyBleedEm: style.rendering.padding === null ? UNDECLARED_PADDING_SAFETY_EM : 0,
89
+ });
90
+ }
91
+ hasPositionedWord(seg, wordOverrides) {
92
+ for (const line of seg.lines) {
93
+ for (const word of line.words) {
94
+ if (wordOverrides.get(word.id)?.alignment)
95
+ return true;
96
+ }
97
+ }
98
+ return false;
99
+ }
100
+ hasPositionedDecoration(seg, style) {
101
+ for (const line of seg.lines) {
102
+ for (const word of line.words) {
103
+ if (!word.decoration)
104
+ continue;
105
+ if (style.wordOverrides.get(word.decoration.id)?.alignment)
106
+ return true;
107
+ }
108
+ }
109
+ return false;
110
+ }
111
+ }
112
+ //# sourceMappingURL=VideoFrameVarsBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoFrameVarsBuilder.js","sourceRoot":"","sources":["../../../../src/modules/rendering/subtitle/VideoFrameVarsBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlignmentConfig.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/types/AlignmentConfig.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,aAAa,CAAC;IAE7B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IAEjC,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlignmentConfig.js","sourceRoot":"","sources":["../../../../src/modules/rendering/types/AlignmentConfig.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Whether a style participates in the "text-behind-actor" rendering
3
+ * primitive: the caption is rasterised as usual, and the consumer paints
4
+ * an actor cutout layer on top at composition time so the actor visually
5
+ * covers the caption. The engine exposes the state variables and the
6
+ * baseline CSS that resolves the final `--behind-actor-active` decision;
7
+ * the consumer supplies the cutout pixels outside the caption HTML.
8
+ */
9
+ export interface BehindActorRequirement {
10
+ readonly required: boolean;
11
+ }
12
+ //# sourceMappingURL=BehindActorRequirement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BehindActorRequirement.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/types/BehindActorRequirement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BehindActorRequirement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BehindActorRequirement.js","sourceRoot":"","sources":["../../../../src/modules/rendering/types/BehindActorRequirement.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxEdges.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/types/BoxEdges.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxEdges.js","sourceRoot":"","sources":["../../../../src/modules/rendering/types/BoxEdges.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Which side of the segment a decoration glyph should be lifted to
3
+ * when the host sheet's effect config takes it out of line flow. When
4
+ * a decoration id is absent from the placement map, the glyph stays
5
+ * inline next to its host word.
6
+ */
7
+ export type DecorationPlacementSide = 'above' | 'below';
8
+ //# sourceMappingURL=DecorationPlacementSide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DecorationPlacementSide.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/types/DecorationPlacementSide.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DecorationPlacementSide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DecorationPlacementSide.js","sourceRoot":"","sources":["../../../../src/modules/rendering/types/DecorationPlacementSide.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import type { ScopedRenderOverride } from '../rendering/ScopedRenderOverride';
1
+ import type { ScopedRenderOverride } from '../../rendering/types/ScopedRenderOverride';
2
2
  /**
3
3
  * Render-time overrides indexed by element id.
4
4
  * The bitmap renderer looks up each element by
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElementRenderOverrides.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/types/ElementRenderOverrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAE1F;;;;GAIG;AACH,qBAAa,sBAAsB;IAY/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,MAAM,CAAC,KAAK,IAAI,sBAAsB;IAItC,MAAM,CAAC,WAAW,CAChB,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,GAC9D,sBAAsB;IAIzB,OAAO;IAIP,OAAO,IAAI,OAAO;IAIlB,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;CAGzD"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElementRenderOverrides.js","sourceRoot":"","sources":["../../../../src/modules/rendering/types/ElementRenderOverrides.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAYd;IAXnB,MAAM,CAAC,KAAK;QACV,OAAO,IAAI,sBAAsB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,OAA+D;QAE/D,OAAO,IAAI,sBAAsB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,YACmB,OAAkD;QAAlD,YAAO,GAAP,OAAO,CAA2C;IAClE,CAAC;IAEJ,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineStyleMap.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/types/InlineStyleMap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineStyleMap.js","sourceRoot":"","sources":["../../../../src/modules/rendering/types/InlineStyleMap.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
- import type { BoxEdges } from '../rendering/BoxEdges';
1
+ import type { BoxEdges } from '../../rendering/types/BoxEdges';
2
+ import type { BehindActorRequirement } from '../../rendering/types/BehindActorRequirement';
2
3
  /**
3
4
  * Whether a style consumes the underlying video frame as part of
4
5
  * its visuals, and — when it does — at what JPEG quality the frame
@@ -18,5 +19,6 @@ export interface RenderingConfig {
18
19
  readonly videoFrame: VideoFrameRequirement;
19
20
  /** Extra space around the segment box, per side. `null` when not declared. */
20
21
  readonly padding: BoxEdges | null;
22
+ readonly behindActor: BehindActorRequirement;
21
23
  }
22
24
  //# sourceMappingURL=RenderingConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderingConfig.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/types/RenderingConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAE9F;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;IAC3C,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;CAC9C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderingConfig.js","sourceRoot":"","sources":["../../../../src/modules/rendering/types/RenderingConfig.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
- import type { AlignmentConfig } from '../rendering/AlignmentConfig';
2
- import type { InlineStyleMap } from '../rendering/InlineStyleMap';
1
+ import type { AlignmentConfig } from '../../rendering/types/AlignmentConfig';
2
+ import type { InlineStyleMap } from '../../rendering/types/InlineStyleMap';
3
3
  /**
4
4
  * Render-time overrides for one element (segment or word), layered on
5
5
  * top of the style's root-level defaults. Both fields are independent
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopedRenderOverride.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/types/ScopedRenderOverride.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CAC/C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopedRenderOverride.js","sourceRoot":"","sources":["../../../../src/modules/rendering/types/ScopedRenderOverride.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoFrameSource.d.ts","sourceRoot":"","sources":["../../../../src/modules/rendering/types/VideoFrameSource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;OASG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoFrameSource.js","sourceRoot":"","sources":["../../../../src/modules/rendering/types/VideoFrameSource.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import type { SegmentSplitter } from '../splitting/SegmentSplitter';
2
+ import { Segment } from '../document/Segment';
3
+ export interface BoundaryScoreLimitByCharsConfig {
4
+ maxChars: number;
5
+ minChars: number;
6
+ }
7
+ /**
8
+ * Splits segments by character count, keeping each chunk between
9
+ * `minChars` and `maxChars` when possible. Among the cut positions
10
+ * that satisfy both bounds, the one after the word with the highest
11
+ * `boundaryScore` wins — cuts land where an external scorer marked a
12
+ * strong boundary. When no word in the valid range carries a score,
13
+ * the splitter falls back to the greedy behaviour: grow the chunk to
14
+ * the maximum and retreat only enough to keep the tail above
15
+ * `minChars`.
16
+ *
17
+ * When the residual tail is too short to satisfy both bounds on its
18
+ * own, its words are absorbed into the current chunk as a last
19
+ * resort.
20
+ */
21
+ export declare class BoundaryScoreLimitByCharsSegmentSplitter implements SegmentSplitter {
22
+ private readonly _config;
23
+ constructor(_config: BoundaryScoreLimitByCharsConfig);
24
+ split(segments: ReadonlyArray<Segment>): Segment[];
25
+ private splitSegment;
26
+ private pickCut;
27
+ private largestCutWithinMax;
28
+ private smallestCutMeetingMin;
29
+ private cutsPreservingTail;
30
+ private highestScoredCut;
31
+ private weight;
32
+ }
33
+ //# sourceMappingURL=BoundaryScoreLimitByCharsSegmentSplitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoundaryScoreLimitByCharsSegmentSplitter.d.ts","sourceRoot":"","sources":["../../../src/modules/splitting/BoundaryScoreLimitByCharsSegmentSplitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAIpD,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,wCAAyC,YAAW,eAAe;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,+BAA+B;IAErE,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE;IAIlD,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,MAAM;CAMf"}
@@ -0,0 +1,100 @@
1
+ import { Segment } from '../document/Segment';
2
+ import { Line } from '../document/Line';
3
+ /**
4
+ * Splits segments by character count, keeping each chunk between
5
+ * `minChars` and `maxChars` when possible. Among the cut positions
6
+ * that satisfy both bounds, the one after the word with the highest
7
+ * `boundaryScore` wins — cuts land where an external scorer marked a
8
+ * strong boundary. When no word in the valid range carries a score,
9
+ * the splitter falls back to the greedy behaviour: grow the chunk to
10
+ * the maximum and retreat only enough to keep the tail above
11
+ * `minChars`.
12
+ *
13
+ * When the residual tail is too short to satisfy both bounds on its
14
+ * own, its words are absorbed into the current chunk as a last
15
+ * resort.
16
+ */
17
+ export class BoundaryScoreLimitByCharsSegmentSplitter {
18
+ _config;
19
+ constructor(_config) {
20
+ this._config = _config;
21
+ }
22
+ split(segments) {
23
+ return segments.flatMap((segment) => this.splitSegment(segment));
24
+ }
25
+ splitSegment(segment) {
26
+ const words = segment.getWords();
27
+ const n = words.length;
28
+ if (n === 0)
29
+ return [];
30
+ const result = [];
31
+ let start = 0;
32
+ while (start < n) {
33
+ const end = this.pickCut(words, start);
34
+ result.push(new Segment({ lines: [new Line({ words: words.slice(start, end) })] }));
35
+ start = end;
36
+ }
37
+ return result;
38
+ }
39
+ pickCut(words, start) {
40
+ const n = words.length;
41
+ const kHigh = this.largestCutWithinMax(words, start);
42
+ if (kHigh === n)
43
+ return n;
44
+ const kLow = this.smallestCutMeetingMin(words, start, kHigh);
45
+ if (kLow > kHigh)
46
+ return kHigh;
47
+ const candidates = this.cutsPreservingTail(words, kLow, kHigh);
48
+ if (candidates.length === 0)
49
+ return n;
50
+ return this.highestScoredCut(words, candidates);
51
+ }
52
+ largestCutWithinMax(words, start) {
53
+ const { maxChars } = this._config;
54
+ const n = words.length;
55
+ let end = start + 1;
56
+ while (end < n && this.weight(words, start, end + 1) <= maxChars)
57
+ end++;
58
+ return end;
59
+ }
60
+ smallestCutMeetingMin(words, start, upperBound) {
61
+ const { minChars } = this._config;
62
+ let k = start + 1;
63
+ while (k <= upperBound && this.weight(words, start, k) < minChars)
64
+ k++;
65
+ return k;
66
+ }
67
+ cutsPreservingTail(words, kLow, kHigh) {
68
+ const { minChars } = this._config;
69
+ const n = words.length;
70
+ const candidates = [];
71
+ for (let k = kLow; k <= kHigh; k++) {
72
+ if (this.weight(words, k, n) >= minChars)
73
+ candidates.push(k);
74
+ }
75
+ return candidates;
76
+ }
77
+ highestScoredCut(words, candidates) {
78
+ let best = candidates[candidates.length - 1];
79
+ let bestScore = -Infinity;
80
+ for (const k of candidates) {
81
+ const score = words[k - 1].boundaryScore;
82
+ if (score === null)
83
+ continue;
84
+ if (score > bestScore || (score === bestScore && k > best)) {
85
+ bestScore = score;
86
+ best = k;
87
+ }
88
+ }
89
+ return best;
90
+ }
91
+ weight(words, from, to) {
92
+ if (to <= from)
93
+ return 0;
94
+ let chars = to - from - 1;
95
+ for (let k = from; k < to; k++)
96
+ chars += words[k].text.length;
97
+ return chars;
98
+ }
99
+ }
100
+ //# sourceMappingURL=BoundaryScoreLimitByCharsSegmentSplitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoundaryScoreLimitByCharsSegmentSplitter.js","sourceRoot":"","sources":["../../../src/modules/splitting/BoundaryScoreLimitByCharsSegmentSplitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { LineSplitter } from '../splitting/LineSplitter';
2
+ import { Segment } from '../document/Segment';
3
+ export interface FixedTailLineSplitterConfig {
4
+ /**
5
+ * Word count reserved for the second (tail) line. Honored only when the
6
+ * segment carries strictly more words than this value; otherwise the
7
+ * splitter falls back to a one-word head and a tail with the rest, so
8
+ * neither line is empty.
9
+ */
10
+ readonly tailWordCount: number;
11
+ }
12
+ /**
13
+ * Splits each segment into exactly two lines when possible: the head line
14
+ * receives every word except the last `tailWordCount`, and the tail line
15
+ * receives those final words. Segments with one or two words stay on a
16
+ * single line; segments with three or more words but fewer than
17
+ * `tailWordCount + 1` fall back to one word on the head and the remainder
18
+ * on the tail, so neither line ends up empty.
19
+ */
20
+ export declare class FixedTailLineSplitter implements LineSplitter {
21
+ private readonly _config;
22
+ private static readonly MIN_WORDS_TO_SPLIT;
23
+ constructor(_config: FixedTailLineSplitterConfig);
24
+ split(segments: ReadonlyArray<Segment>): Segment[];
25
+ private splitSegment;
26
+ private buildLines;
27
+ private headSize;
28
+ }
29
+ //# sourceMappingURL=FixedTailLineSplitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixedTailLineSplitter.d.ts","sourceRoot":"","sources":["../../../src/modules/splitting/FixedTailLineSplitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAIpD,MAAM,WAAW,2BAA2B;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IAG5C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAK;gBAElB,OAAO,EAAE,2BAA2B;IAEjE,KAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE;IAIlD,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,QAAQ;CAMjB"}
@@ -0,0 +1,43 @@
1
+ import { Line } from '../document/Line';
2
+ /**
3
+ * Splits each segment into exactly two lines when possible: the head line
4
+ * receives every word except the last `tailWordCount`, and the tail line
5
+ * receives those final words. Segments with one or two words stay on a
6
+ * single line; segments with three or more words but fewer than
7
+ * `tailWordCount + 1` fall back to one word on the head and the remainder
8
+ * on the tail, so neither line ends up empty.
9
+ */
10
+ export class FixedTailLineSplitter {
11
+ _config;
12
+ static MIN_WORDS_TO_SPLIT = 3;
13
+ constructor(_config) {
14
+ this._config = _config;
15
+ }
16
+ split(segments) {
17
+ return segments.map((segment) => this.splitSegment(segment));
18
+ }
19
+ splitSegment(segment) {
20
+ const words = segment.getWords();
21
+ if (words.length === 0)
22
+ return segment;
23
+ const lines = this.buildLines(words);
24
+ return segment.with({ lines });
25
+ }
26
+ buildLines(words) {
27
+ if (words.length < FixedTailLineSplitter.MIN_WORDS_TO_SPLIT) {
28
+ return [new Line({ words })];
29
+ }
30
+ const splitAt = this.headSize(words.length);
31
+ return [
32
+ new Line({ words: words.slice(0, splitAt) }),
33
+ new Line({ words: words.slice(splitAt) }),
34
+ ];
35
+ }
36
+ headSize(totalWords) {
37
+ if (totalWords > this._config.tailWordCount) {
38
+ return totalWords - this._config.tailWordCount;
39
+ }
40
+ return 1;
41
+ }
42
+ }
43
+ //# sourceMappingURL=FixedTailLineSplitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FixedTailLineSplitter.js","sourceRoot":"","sources":["../../../src/modules/splitting/FixedTailLineSplitter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAa9C;;;;;;;GAOG;AACH,MAAM,OAAO,qBAAqB;IAGH;IAFrB,MAAM,CAAU,kBAAkB,GAAG,CAAC,CAAC;IAE/C,YAA6B,OAAoC;QAApC,YAAO,GAAP,OAAO,CAA6B;IAAG,CAAC;IAErE,KAAK,CAAC,QAAgC;QACpC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,YAAY,CAAC,OAAgB;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjC,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;YAC5D,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO;YACL,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;SAC1C,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,UAAkB;QACjC,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC5C,OAAO,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC"}
@@ -6,6 +6,8 @@ export { LimitByCharsSegmentSplitter } from '../splitting/LimitByCharsSegmentSpl
6
6
  export type { LimitByCharsConfig } from '../splitting/LimitByCharsSegmentSplitter';
7
7
  export { LimitByScaledCharsSegmentSplitter } from '../splitting/LimitByScaledCharsSegmentSplitter';
8
8
  export type { LimitByScaledCharsConfig } from '../splitting/LimitByScaledCharsSegmentSplitter';
9
+ export { BoundaryScoreLimitByCharsSegmentSplitter } from '../splitting/BoundaryScoreLimitByCharsSegmentSplitter';
10
+ export type { BoundaryScoreLimitByCharsConfig } from '../splitting/BoundaryScoreLimitByCharsSegmentSplitter';
9
11
  export { BoundarySegmentSplitter } from '../splitting/BoundarySegmentSplitter';
10
12
  export type { BoundaryConfig } from '../splitting/BoundarySegmentSplitter';
11
13
  export { PauseBasedSegmentSplitter } from '../splitting/PauseBasedSegmentSplitter';
@@ -16,6 +18,8 @@ export { BalancedLineSplitter } from '../splitting/BalancedLineSplitter';
16
18
  export type { BalancedLineSplitterConfig } from '../splitting/BalancedLineSplitter';
17
19
  export { BalancedPixelWidthLineSplitter } from '../splitting/BalancedPixelWidthLineSplitter';
18
20
  export type { BalancedPixelWidthLineSplitterConfig } from '../splitting/BalancedPixelWidthLineSplitter';
21
+ export { FixedTailLineSplitter } from '../splitting/FixedTailLineSplitter';
22
+ export type { FixedTailLineSplitterConfig } from '../splitting/FixedTailLineSplitter';
19
23
  export type { TextMeasurer } from '../splitting/TextMeasurer';
20
24
  export { DomProbeCanvasTextMeasurer } from '../splitting/DomProbeCanvasTextMeasurer';
21
25
  export type { DomProbeCanvasTextMeasurerParams } from '../splitting/DomProbeCanvasTextMeasurer';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/splitting/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAC7F,YAAY,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAC7F,YAAY,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,iCAAiC,EAAE,MAAM,sDAAsD,CAAC;AACzG,YAAY,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AACrG,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,YAAY,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,YAAY,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAC/F,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,YAAY,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,mDAAmD,CAAC;AACnG,YAAY,EAAE,oCAAoC,EAAE,MAAM,mDAAmD,CAAC;AAC9G,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAC3F,YAAY,EAAE,gCAAgC,EAAE,MAAM,+CAA+C,CAAC;AACtG,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/splitting/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAC7F,YAAY,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAC7F,YAAY,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,iCAAiC,EAAE,MAAM,sDAAsD,CAAC;AACzG,YAAY,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AACrG,OAAO,EAAE,wCAAwC,EAAE,MAAM,6DAA6D,CAAC;AACvH,YAAY,EAAE,+BAA+B,EAAE,MAAM,6DAA6D,CAAC;AACnH,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,YAAY,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,YAAY,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAC/F,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,YAAY,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,mDAAmD,CAAC;AACnG,YAAY,EAAE,oCAAoC,EAAE,MAAM,mDAAmD,CAAC;AAC9G,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,YAAY,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAC5F,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAC3F,YAAY,EAAE,gCAAgC,EAAE,MAAM,+CAA+C,CAAC;AACtG,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC"}
@@ -2,11 +2,13 @@ export { CompositeSegmentSplitter } from '../splitting/CompositeSegmentSplitter'
2
2
  export { LimitByWordsSegmentSplitter } from '../splitting/LimitByWordsSegmentSplitter';
3
3
  export { LimitByCharsSegmentSplitter } from '../splitting/LimitByCharsSegmentSplitter';
4
4
  export { LimitByScaledCharsSegmentSplitter } from '../splitting/LimitByScaledCharsSegmentSplitter';
5
+ export { BoundaryScoreLimitByCharsSegmentSplitter } from '../splitting/BoundaryScoreLimitByCharsSegmentSplitter';
5
6
  export { BoundarySegmentSplitter } from '../splitting/BoundarySegmentSplitter';
6
7
  export { PauseBasedSegmentSplitter } from '../splitting/PauseBasedSegmentSplitter';
7
8
  export { SpeakerChangeSegmentSplitter } from '../splitting/SpeakerChangeSegmentSplitter';
8
9
  export { BalancedLineSplitter } from '../splitting/BalancedLineSplitter';
9
10
  export { BalancedPixelWidthLineSplitter } from '../splitting/BalancedPixelWidthLineSplitter';
11
+ export { FixedTailLineSplitter } from '../splitting/FixedTailLineSplitter';
10
12
  export { DomProbeCanvasTextMeasurer } from '../splitting/DomProbeCanvasTextMeasurer';
11
13
  export { GraphemeWordSplitter } from '../splitting/GraphemeWordSplitter';
12
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/splitting/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAE7F,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAE7F,OAAO,EAAE,iCAAiC,EAAE,MAAM,sDAAsD,CAAC;AAEzG,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AAEzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,8BAA8B,EAAE,MAAM,mDAAmD,CAAC;AAGnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAG3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/splitting/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAE7F,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAE7F,OAAO,EAAE,iCAAiC,EAAE,MAAM,sDAAsD,CAAC;AAEzG,OAAO,EAAE,wCAAwC,EAAE,MAAM,6DAA6D,CAAC;AAEvH,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AAEzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAE/F,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,8BAA8B,EAAE,MAAM,mDAAmD,CAAC;AAEnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAGjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAG3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { Tagger } from '../tagging/Tagger';
2
+ import { Document } from '../document/Document';
3
+ export interface PauseTaggerConfig {
4
+ /**
5
+ * Minimum gap, in seconds, between a segment's start and the previous
6
+ * segment's end for the segment to be marked as following a pause.
7
+ */
8
+ readonly minGapSeconds: number;
9
+ }
10
+ /**
11
+ * Adds `SEGMENT_AFTER_PAUSE` to every segment whose start is preceded by
12
+ * a silent gap of at least `minGapSeconds`. Gaps are measured only within
13
+ * the same section: the first segment of each section is never tagged
14
+ * (positional first/last tags already cover that boundary).
15
+ */
16
+ export declare class PauseTagger extends Tagger {
17
+ private readonly _config;
18
+ constructor(_config: PauseTaggerConfig);
19
+ tag(document: Document): Document;
20
+ private tagSection;
21
+ private tagSegmentIfAfterPause;
22
+ private followsPause;
23
+ }
24
+ //# sourceMappingURL=PauseTagger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PauseTagger.d.ts","sourceRoot":"","sources":["../../../src/modules/tagging/PauseTagger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAKtD,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,MAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,iBAAiB;IAIvD,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;IAKjC,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,YAAY;CAIrB"}
@@ -0,0 +1,41 @@
1
+ import { Tagger } from '../tagging/Tagger';
2
+ import { Tag, StructureTag } from '../document/Tag';
3
+ /**
4
+ * Adds `SEGMENT_AFTER_PAUSE` to every segment whose start is preceded by
5
+ * a silent gap of at least `minGapSeconds`. Gaps are measured only within
6
+ * the same section: the first segment of each section is never tagged
7
+ * (positional first/last tags already cover that boundary).
8
+ */
9
+ export class PauseTagger extends Tagger {
10
+ _config;
11
+ constructor(_config) {
12
+ super();
13
+ this._config = _config;
14
+ }
15
+ tag(document) {
16
+ const sections = document.sections.map((section) => this.tagSection(section));
17
+ return document.with({ sections });
18
+ }
19
+ tagSection(section) {
20
+ let previousEndSeconds = null;
21
+ const segments = section.segments.map((segment) => {
22
+ const tagged = this.tagSegmentIfAfterPause(segment, previousEndSeconds);
23
+ previousEndSeconds = segment.time.end;
24
+ return tagged;
25
+ });
26
+ return section.with({ segments });
27
+ }
28
+ tagSegmentIfAfterPause(segment, previousEndSeconds) {
29
+ if (!this.followsPause(segment, previousEndSeconds))
30
+ return segment;
31
+ const structureTags = new Set(segment.structureTags);
32
+ structureTags.add(Tag.of(StructureTag.SEGMENT_AFTER_PAUSE));
33
+ return segment.with({ structureTags });
34
+ }
35
+ followsPause(segment, previousEndSeconds) {
36
+ if (previousEndSeconds === null)
37
+ return false;
38
+ return segment.time.start - previousEndSeconds >= this._config.minGapSeconds;
39
+ }
40
+ }
41
+ //# sourceMappingURL=PauseTagger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PauseTagger.js","sourceRoot":"","sources":["../../../src/modules/tagging/PauseTagger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAIjD,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAU1D;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,MAAM;IACR;IAA7B,YAA6B,OAA0B;QACrD,KAAK,EAAE,CAAC;QADmB,YAAO,GAAP,OAAO,CAAmB;IAEvD,CAAC;IAED,GAAG,CAAC,QAAkB;QACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrC,CAAC;IAEO,UAAU,CAAC,OAAgB;QACjC,IAAI,kBAAkB,GAAkB,IAAI,CAAC;QAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YACxE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpC,CAAC;IAEO,sBAAsB,CAAC,OAAgB,EAAE,kBAAiC;QAChF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,kBAAkB,CAAC;YAAE,OAAO,OAAO,CAAC;QACpE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAM,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1D,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;IACzC,CAAC;IAEO,YAAY,CAAC,OAAgB,EAAE,kBAAiC;QACtE,IAAI,kBAAkB,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC9C,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IAC/E,CAAC;CACF"}
@@ -3,7 +3,7 @@ import { Document } from '../document/Document';
3
3
  /**
4
4
  * Assigns positional structure tags across the Document hierarchy:
5
5
  * - Section-level: FIRST/LAST_SECTION_IN_DOCUMENT
6
- * - Segment-level: FIRST/LAST_SEGMENT_IN_SECTION
6
+ * - Segment-level: FIRST/LAST_SEGMENT_IN_SECTION, FIRST/LAST_SEGMENT_IN_DOCUMENT
7
7
  * - Line-level: FIRST/LAST_LINE_IN_SECTION, FIRST/LAST_LINE_IN_SEGMENT
8
8
  * - Word-level: FIRST/LAST_WORD_IN_SECTION, FIRST/LAST_WORD_IN_SEGMENT,
9
9
  * FIRST/LAST_WORD_IN_LINE