@editframe/elements 0.24.1-beta.0 → 0.25.0-beta.0

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 (335) hide show
  1. package/dist/DelayedLoadingState.js +31 -0
  2. package/dist/DelayedLoadingState.js.map +1 -0
  3. package/dist/EF_FRAMEGEN.d.ts +50 -46
  4. package/dist/EF_FRAMEGEN.js +5 -1
  5. package/dist/EF_FRAMEGEN.js.map +1 -0
  6. package/dist/EF_INTERACTIVE.js +4 -0
  7. package/dist/EF_INTERACTIVE.js.map +1 -0
  8. package/dist/EF_RENDERING.js +4 -0
  9. package/dist/EF_RENDERING.js.map +1 -0
  10. package/dist/_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js +4 -1
  11. package/dist/attachContextRoot.js +6 -1
  12. package/dist/attachContextRoot.js.map +1 -0
  13. package/dist/elements/CrossUpdateController.js +4 -0
  14. package/dist/elements/CrossUpdateController.js.map +1 -0
  15. package/dist/elements/EFAudio.d.ts +24 -16
  16. package/dist/elements/EFAudio.js +10 -1
  17. package/dist/elements/EFAudio.js.map +1 -0
  18. package/dist/elements/EFCaptions.d.ts +118 -109
  19. package/dist/elements/EFCaptions.js +11 -6
  20. package/dist/elements/EFCaptions.js.map +1 -0
  21. package/dist/elements/EFImage.d.ts +31 -20
  22. package/dist/elements/EFImage.js +6 -1
  23. package/dist/elements/EFImage.js.map +1 -0
  24. package/dist/elements/EFMedia/AssetIdMediaEngine.js +5 -0
  25. package/dist/elements/EFMedia/AssetIdMediaEngine.js.map +1 -0
  26. package/dist/elements/EFMedia/AssetMediaEngine.js +12 -0
  27. package/dist/elements/EFMedia/AssetMediaEngine.js.map +1 -0
  28. package/dist/elements/EFMedia/BaseMediaEngine.js +53 -0
  29. package/dist/elements/EFMedia/BaseMediaEngine.js.map +1 -0
  30. package/dist/elements/EFMedia/BufferedSeekingInput.d.ts +47 -46
  31. package/dist/elements/EFMedia/BufferedSeekingInput.js +6 -1
  32. package/dist/elements/EFMedia/BufferedSeekingInput.js.map +1 -0
  33. package/dist/elements/EFMedia/JitMediaEngine.js +12 -0
  34. package/dist/elements/EFMedia/JitMediaEngine.js.map +1 -0
  35. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.d.ts +9 -13
  36. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js +5 -0
  37. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.js.map +1 -0
  38. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js +6 -1
  39. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.js.map +1 -0
  40. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js +5 -0
  41. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.js.map +1 -0
  42. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js +5 -0
  43. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.js.map +1 -0
  44. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js +5 -0
  45. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.js.map +1 -0
  46. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js +5 -0
  47. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.js.map +1 -0
  48. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js +5 -0
  49. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.js.map +1 -0
  50. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js +6 -1
  51. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.js.map +1 -0
  52. package/dist/elements/EFMedia/shared/AudioSpanUtils.js +18 -2
  53. package/dist/elements/EFMedia/shared/AudioSpanUtils.js.map +1 -0
  54. package/dist/elements/EFMedia/shared/BufferUtils.d.ts +9 -67
  55. package/dist/elements/EFMedia/shared/BufferUtils.js +15 -0
  56. package/dist/elements/EFMedia/shared/BufferUtils.js.map +1 -0
  57. package/dist/elements/EFMedia/shared/GlobalInputCache.js +29 -0
  58. package/dist/elements/EFMedia/shared/GlobalInputCache.js.map +1 -0
  59. package/dist/elements/EFMedia/shared/MediaTaskUtils.d.ts +11 -17
  60. package/dist/elements/EFMedia/shared/PrecisionUtils.js +25 -0
  61. package/dist/elements/EFMedia/shared/PrecisionUtils.js.map +1 -0
  62. package/dist/elements/EFMedia/shared/ThumbnailExtractor.js +22 -0
  63. package/dist/elements/EFMedia/shared/ThumbnailExtractor.js.map +1 -0
  64. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js +13 -0
  65. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.js.map +1 -0
  66. package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js +21 -0
  67. package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.js.map +1 -0
  68. package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js +18 -0
  69. package/dist/elements/EFMedia/videoTasks/ScrubInputCache.js.map +1 -0
  70. package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.js +10 -0
  71. package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.js.map +1 -0
  72. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.js +5 -0
  73. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.js.map +1 -0
  74. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.js +5 -0
  75. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.js.map +1 -0
  76. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.js +6 -1
  77. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.js.map +1 -0
  78. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.js +5 -0
  79. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.js.map +1 -0
  80. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.js +5 -0
  81. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.js.map +1 -0
  82. package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.js +16 -2
  83. package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.js.map +1 -0
  84. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.d.ts +9 -13
  85. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js +5 -0
  86. package/dist/elements/EFMedia/videoTasks/makeVideoBufferTask.js.map +1 -0
  87. package/dist/elements/EFMedia.d.ts +115 -104
  88. package/dist/elements/EFMedia.js +25 -1
  89. package/dist/elements/EFMedia.js.map +1 -0
  90. package/dist/elements/EFSourceMixin.d.ts +10 -11
  91. package/dist/elements/EFSourceMixin.js +5 -0
  92. package/dist/elements/EFSourceMixin.js.map +1 -0
  93. package/dist/elements/EFSurface.d.ts +35 -27
  94. package/dist/elements/EFSurface.js +6 -1
  95. package/dist/elements/EFSurface.js.map +1 -0
  96. package/dist/elements/EFTemporal.d.ts +200 -213
  97. package/dist/elements/EFTemporal.js +24 -4
  98. package/dist/elements/EFTemporal.js.map +1 -0
  99. package/dist/elements/EFThumbnailStrip.d.ts +91 -83
  100. package/dist/elements/EFThumbnailStrip.js +49 -4
  101. package/dist/elements/EFThumbnailStrip.js.map +1 -0
  102. package/dist/elements/EFTimegroup.d.ts +107 -101
  103. package/dist/elements/EFTimegroup.js +58 -3
  104. package/dist/elements/EFTimegroup.js.map +1 -0
  105. package/dist/elements/EFVideo.d.ts +120 -108
  106. package/dist/elements/EFVideo.js +46 -2
  107. package/dist/elements/EFVideo.js.map +1 -0
  108. package/dist/elements/EFWaveform.d.ts +48 -41
  109. package/dist/elements/EFWaveform.js +6 -1
  110. package/dist/elements/EFWaveform.js.map +1 -0
  111. package/dist/elements/FetchMixin.d.ts +8 -6
  112. package/dist/elements/FetchMixin.js +4 -0
  113. package/dist/elements/FetchMixin.js.map +1 -0
  114. package/dist/elements/SampleBuffer.d.ts +18 -13
  115. package/dist/elements/SampleBuffer.js +5 -0
  116. package/dist/elements/SampleBuffer.js.map +1 -0
  117. package/dist/elements/TargetController.d.ts +23 -24
  118. package/dist/elements/TargetController.js +8 -3
  119. package/dist/elements/TargetController.js.map +1 -0
  120. package/dist/elements/TimegroupController.d.ts +17 -12
  121. package/dist/elements/TimegroupController.js +4 -0
  122. package/dist/elements/TimegroupController.js.map +1 -0
  123. package/dist/elements/durationConverter.js +9 -4
  124. package/dist/elements/durationConverter.js.map +1 -0
  125. package/dist/elements/parseTimeToMs.js +4 -0
  126. package/dist/elements/parseTimeToMs.js.map +1 -0
  127. package/dist/elements/renderTemporalAudio.js +4 -0
  128. package/dist/elements/renderTemporalAudio.js.map +1 -0
  129. package/dist/elements/updateAnimations.js +29 -8
  130. package/dist/elements/updateAnimations.js.map +1 -0
  131. package/dist/elements-ZhsB7B5N.css +9 -0
  132. package/dist/elements-ZhsB7B5N.css.map +1 -0
  133. package/dist/getRenderInfo.d.ts +53 -47
  134. package/dist/getRenderInfo.js +5 -0
  135. package/dist/getRenderInfo.js.map +1 -0
  136. package/dist/gui/ContextMixin.d.ts +19 -20
  137. package/dist/gui/ContextMixin.js +32 -1
  138. package/dist/gui/ContextMixin.js.map +1 -0
  139. package/dist/gui/Controllable.d.ts +13 -14
  140. package/dist/gui/Controllable.js +5 -0
  141. package/dist/gui/Controllable.js.map +1 -0
  142. package/dist/gui/EFConfiguration.d.ts +18 -14
  143. package/dist/gui/EFConfiguration.js +6 -1
  144. package/dist/gui/EFConfiguration.js.map +1 -0
  145. package/dist/gui/EFControls.d.ts +35 -31
  146. package/dist/gui/EFControls.js +8 -3
  147. package/dist/gui/EFControls.js.map +1 -0
  148. package/dist/gui/EFDial.d.ts +23 -16
  149. package/dist/gui/EFDial.js +6 -1
  150. package/dist/gui/EFDial.js.map +1 -0
  151. package/dist/gui/EFFilmstrip.d.ts +183 -177
  152. package/dist/gui/EFFilmstrip.js +30 -25
  153. package/dist/gui/EFFilmstrip.js.map +1 -0
  154. package/dist/gui/EFFitScale.d.ts +30 -24
  155. package/dist/gui/EFFitScale.js +6 -1
  156. package/dist/gui/EFFitScale.js.map +1 -0
  157. package/dist/gui/EFFocusOverlay.d.ts +22 -14
  158. package/dist/gui/EFFocusOverlay.js +6 -1
  159. package/dist/gui/EFFocusOverlay.js.map +1 -0
  160. package/dist/gui/EFPause.d.ts +24 -18
  161. package/dist/gui/EFPause.js +6 -1
  162. package/dist/gui/EFPause.js.map +1 -0
  163. package/dist/gui/EFPlay.d.ts +24 -18
  164. package/dist/gui/EFPlay.js +6 -1
  165. package/dist/gui/EFPlay.js.map +1 -0
  166. package/dist/gui/EFPreview.d.ts +22 -15
  167. package/dist/gui/EFPreview.js +9 -1
  168. package/dist/gui/EFPreview.js.map +1 -0
  169. package/dist/gui/EFResizableBox.d.ts +39 -32
  170. package/dist/gui/EFResizableBox.js +8 -3
  171. package/dist/gui/EFResizableBox.js.map +1 -0
  172. package/dist/gui/EFScrubber.d.ts +31 -25
  173. package/dist/gui/EFScrubber.js +6 -1
  174. package/dist/gui/EFScrubber.js.map +1 -0
  175. package/dist/gui/EFTimeDisplay.d.ts +21 -14
  176. package/dist/gui/EFTimeDisplay.js +6 -1
  177. package/dist/gui/EFTimeDisplay.js.map +1 -0
  178. package/dist/gui/EFToggleLoop.d.ts +19 -13
  179. package/dist/gui/EFToggleLoop.js +6 -1
  180. package/dist/gui/EFToggleLoop.js.map +1 -0
  181. package/dist/gui/EFTogglePlay.d.ts +23 -17
  182. package/dist/gui/EFTogglePlay.js +6 -1
  183. package/dist/gui/EFTogglePlay.js.map +1 -0
  184. package/dist/gui/EFWorkbench.d.ts +24 -16
  185. package/dist/gui/EFWorkbench.js +6 -1
  186. package/dist/gui/EFWorkbench.js.map +1 -0
  187. package/dist/gui/PlaybackController.d.ts +54 -50
  188. package/dist/gui/PlaybackController.js +18 -0
  189. package/dist/gui/PlaybackController.js.map +1 -0
  190. package/dist/gui/TWMixin.js +5 -1
  191. package/dist/gui/TWMixin.js.map +1 -0
  192. package/dist/gui/TWMixin2.js +6 -1
  193. package/dist/gui/TWMixin2.js.map +1 -0
  194. package/dist/gui/TargetOrContextMixin.js +5 -0
  195. package/dist/gui/TargetOrContextMixin.js.map +1 -0
  196. package/dist/gui/currentTimeContext.js +5 -0
  197. package/dist/gui/currentTimeContext.js.map +1 -0
  198. package/dist/gui/durationContext.js +5 -0
  199. package/dist/gui/durationContext.js.map +1 -0
  200. package/dist/gui/efContext.js +5 -0
  201. package/dist/gui/efContext.js.map +1 -0
  202. package/dist/gui/fetchContext.js +5 -0
  203. package/dist/gui/fetchContext.js.map +1 -0
  204. package/dist/gui/focusContext.d.ts +6 -5
  205. package/dist/gui/focusContext.js +5 -0
  206. package/dist/gui/focusContext.js.map +1 -0
  207. package/dist/gui/focusedElementContext.js +5 -0
  208. package/dist/gui/focusedElementContext.js.map +1 -0
  209. package/dist/gui/playingContext.js +5 -0
  210. package/dist/gui/playingContext.js.map +1 -0
  211. package/dist/index.d.ts +27 -26
  212. package/dist/index.js +6 -1
  213. package/dist/index.js.map +1 -0
  214. package/dist/msToTimeCode.js +4 -0
  215. package/dist/msToTimeCode.js.map +1 -0
  216. package/dist/otel/BridgeSpanExporter.js +5 -0
  217. package/dist/otel/BridgeSpanExporter.js.map +1 -0
  218. package/dist/otel/setupBrowserTracing.js +7 -2
  219. package/dist/otel/setupBrowserTracing.js.map +1 -0
  220. package/dist/otel/tracingHelpers.d.ts +7 -34
  221. package/dist/otel/tracingHelpers.js +34 -2
  222. package/dist/otel/tracingHelpers.js.map +1 -0
  223. package/dist/transcoding/cache/RequestDeduplicator.js +25 -0
  224. package/dist/transcoding/cache/RequestDeduplicator.js.map +1 -0
  225. package/dist/transcoding/cache/URLTokenDeduplicator.js +23 -0
  226. package/dist/transcoding/cache/URLTokenDeduplicator.js.map +1 -0
  227. package/dist/transcoding/types/index.d.ts +96 -270
  228. package/dist/transcoding/utils/UrlGenerator.d.ts +30 -25
  229. package/dist/transcoding/utils/UrlGenerator.js +19 -0
  230. package/dist/transcoding/utils/UrlGenerator.js.map +1 -0
  231. package/dist/utils/LRUCache.js +44 -0
  232. package/dist/utils/LRUCache.js.map +1 -0
  233. package/package.json +11 -24
  234. package/tsdown.config.ts +36 -0
  235. package/dist/DelayedLoadingState.d.ts +0 -48
  236. package/dist/DelayedLoadingState.integration.test.d.ts +0 -1
  237. package/dist/DelayedLoadingState.test.d.ts +0 -1
  238. package/dist/EF_INTERACTIVE.d.ts +0 -1
  239. package/dist/EF_RENDERING.d.ts +0 -1
  240. package/dist/LoadingDebounce.test.d.ts +0 -1
  241. package/dist/ManualScrubTest.test.d.ts +0 -1
  242. package/dist/ScrubResolvedFlashing.test.d.ts +0 -1
  243. package/dist/ScrubTrackManager.test.d.ts +0 -1
  244. package/dist/VideoSeekFlashing.browsertest.d.ts +0 -0
  245. package/dist/VideoStuckDiagnostic.test.d.ts +0 -1
  246. package/dist/attachContextRoot.d.ts +0 -1
  247. package/dist/elements/ContextProxiesController.d.ts +0 -39
  248. package/dist/elements/CrossUpdateController.d.ts +0 -8
  249. package/dist/elements/EFAudio.browsertest.d.ts +0 -0
  250. package/dist/elements/EFCaptions.browsertest.d.ts +0 -0
  251. package/dist/elements/EFImage.browsertest.d.ts +0 -0
  252. package/dist/elements/EFMedia/AssetIdMediaEngine.d.ts +0 -19
  253. package/dist/elements/EFMedia/AssetIdMediaEngine.test.d.ts +0 -1
  254. package/dist/elements/EFMedia/AssetMediaEngine.browsertest.d.ts +0 -0
  255. package/dist/elements/EFMedia/AssetMediaEngine.d.ts +0 -56
  256. package/dist/elements/EFMedia/BaseMediaEngine.browsertest.d.ts +0 -1
  257. package/dist/elements/EFMedia/BaseMediaEngine.d.ts +0 -103
  258. package/dist/elements/EFMedia/BufferedSeekingInput.browsertest.d.ts +0 -1
  259. package/dist/elements/EFMedia/JitMediaEngine.browsertest.d.ts +0 -0
  260. package/dist/elements/EFMedia/JitMediaEngine.d.ts +0 -46
  261. package/dist/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.d.ts +0 -9
  262. package/dist/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.d.ts +0 -3
  263. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.d.ts +0 -9
  264. package/dist/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.d.ts +0 -4
  265. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.d.ts +0 -9
  266. package/dist/elements/EFMedia/audioTasks/makeAudioInputTask.d.ts +0 -3
  267. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.d.ts +0 -0
  268. package/dist/elements/EFMedia/audioTasks/makeAudioSeekTask.d.ts +0 -7
  269. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.d.ts +0 -4
  270. package/dist/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.d.ts +0 -4
  271. package/dist/elements/EFMedia/audioTasks/makeAudioTasksVideoOnly.browsertest.d.ts +0 -1
  272. package/dist/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.d.ts +0 -3
  273. package/dist/elements/EFMedia/shared/AudioSpanUtils.d.ts +0 -7
  274. package/dist/elements/EFMedia/shared/GlobalInputCache.d.ts +0 -39
  275. package/dist/elements/EFMedia/shared/PrecisionUtils.d.ts +0 -28
  276. package/dist/elements/EFMedia/shared/RenditionHelpers.browsertest.d.ts +0 -1
  277. package/dist/elements/EFMedia/shared/RenditionHelpers.d.ts +0 -11
  278. package/dist/elements/EFMedia/shared/ThumbnailExtractor.d.ts +0 -27
  279. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.d.ts +0 -9
  280. package/dist/elements/EFMedia/tasks/makeMediaEngineTask.d.ts +0 -17
  281. package/dist/elements/EFMedia/videoTasks/MainVideoInputCache.d.ts +0 -29
  282. package/dist/elements/EFMedia/videoTasks/ScrubInputCache.d.ts +0 -25
  283. package/dist/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.d.ts +0 -8
  284. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.d.ts +0 -4
  285. package/dist/elements/EFMedia/videoTasks/makeScrubVideoInputTask.d.ts +0 -3
  286. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.d.ts +0 -6
  287. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.d.ts +0 -4
  288. package/dist/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.d.ts +0 -4
  289. package/dist/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.d.ts +0 -6
  290. package/dist/elements/EFMedia.browsertest.d.ts +0 -10
  291. package/dist/elements/EFSurface.browsertest.d.ts +0 -0
  292. package/dist/elements/EFTemporal.browsertest.d.ts +0 -22
  293. package/dist/elements/EFThumbnailStrip.browsertest.d.ts +0 -0
  294. package/dist/elements/EFThumbnailStrip.media-engine.browsertest.d.ts +0 -0
  295. package/dist/elements/EFTimegroup.browsertest.d.ts +0 -41
  296. package/dist/elements/EFVideo.browsertest.d.ts +0 -0
  297. package/dist/elements/FetchContext.browsertest.d.ts +0 -0
  298. package/dist/elements/TargetController.browsertest.d.ts +0 -19
  299. package/dist/elements/durationConverter.d.ts +0 -16
  300. package/dist/elements/parseTimeToMs.d.ts +0 -1
  301. package/dist/elements/printTaskStatus.d.ts +0 -2
  302. package/dist/elements/renderTemporalAudio.d.ts +0 -10
  303. package/dist/elements/updateAnimations.browsertest.d.ts +0 -13
  304. package/dist/elements/updateAnimations.d.ts +0 -24
  305. package/dist/elements/util.d.ts +0 -3
  306. package/dist/gui/ContextMixin.browsertest.d.ts +0 -15
  307. package/dist/gui/Controllable.browsertest.d.ts +0 -0
  308. package/dist/gui/EFControls.browsertest.d.ts +0 -11
  309. package/dist/gui/EFDial.browsertest.d.ts +0 -0
  310. package/dist/gui/EFFilmstrip.browsertest.d.ts +0 -11
  311. package/dist/gui/EFPause.browsertest.d.ts +0 -0
  312. package/dist/gui/EFPlay.browsertest.d.ts +0 -0
  313. package/dist/gui/EFResizableBox.browsertest.d.ts +0 -0
  314. package/dist/gui/EFTimeDisplay.browsertest.d.ts +0 -0
  315. package/dist/gui/TWMixin.d.ts +0 -2
  316. package/dist/gui/TargetOrContextMixin.d.ts +0 -10
  317. package/dist/gui/currentTimeContext.d.ts +0 -3
  318. package/dist/gui/durationContext.d.ts +0 -3
  319. package/dist/gui/efContext.d.ts +0 -4
  320. package/dist/gui/fetchContext.d.ts +0 -3
  321. package/dist/gui/focusedElementContext.d.ts +0 -3
  322. package/dist/gui/playingContext.d.ts +0 -6
  323. package/dist/msToTimeCode.d.ts +0 -1
  324. package/dist/otel/BridgeSpanExporter.d.ts +0 -13
  325. package/dist/otel/setupBrowserTracing.d.ts +0 -12
  326. package/dist/style.css +0 -2
  327. package/dist/transcoding/cache/RequestDeduplicator.d.ts +0 -29
  328. package/dist/transcoding/cache/RequestDeduplicator.test.d.ts +0 -1
  329. package/dist/transcoding/cache/URLTokenDeduplicator.d.ts +0 -38
  330. package/dist/transcoding/cache/URLTokenDeduplicator.test.d.ts +0 -1
  331. package/dist/transcoding/utils/MediaUtils.d.ts +0 -9
  332. package/dist/transcoding/utils/constants.d.ts +0 -27
  333. package/dist/utils/LRUCache.d.ts +0 -80
  334. package/dist/utils/LRUCache.test.d.ts +0 -1
  335. /package/dist/{LoadingIndicator.browsertest.d.ts → elements.js} +0 -0
@@ -2,8 +2,10 @@ import { __decorate } from "../_virtual/_@oxc-project_runtime@0.94.0/helpers/dec
2
2
  import { LitElement, css, html } from "lit";
3
3
  import { customElement, property, state } from "lit/decorators.js";
4
4
  import { styleMap } from "lit/directives/style-map.js";
5
- var DEFAULT_MIN_SIZE = 10;
6
- var CENTER_RESIZE_MULTIPLIER = 2;
5
+
6
+ //#region src/gui/EFResizableBox.ts
7
+ const DEFAULT_MIN_SIZE = 10;
8
+ const CENTER_RESIZE_MULTIPLIER = 2;
7
9
  function constrainMovementDeltas(initialBounds, deltaX, deltaY, container) {
8
10
  const maxLeftMovement = -initialBounds.x;
9
11
  const maxRightMovement = container.width - (initialBounds.x + initialBounds.width);
@@ -207,7 +209,7 @@ function calculateCenterResizeWithAspectRatio(context, handle) {
207
209
  height: newHeight
208
210
  };
209
211
  }
210
- var EFResizableBox = class EFResizableBox$1 extends LitElement {
212
+ let EFResizableBox = class EFResizableBox$1 extends LitElement {
211
213
  constructor(..._args) {
212
214
  super(..._args);
213
215
  this.bounds = {
@@ -544,4 +546,7 @@ __decorate([property({ type: Number })], EFResizableBox.prototype, "minSize", vo
544
546
  __decorate([state()], EFResizableBox.prototype, "isDragging", void 0);
545
547
  __decorate([state()], EFResizableBox.prototype, "dragMode", void 0);
546
548
  EFResizableBox = __decorate([customElement("ef-resizable-box")], EFResizableBox);
549
+
550
+ //#endregion
547
551
  export { EFResizableBox };
552
+ //# sourceMappingURL=EFResizableBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EFResizableBox.js","names":["movementValue: number","newBounds: BoxBounds","EFResizableBox","context: ResizeContext","idealBounds: BoxBounds","result: BoxBounds"],"sources":["../../src/gui/EFResizableBox.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\n// Constants\nconst DEFAULT_MIN_SIZE = 10;\nconst CENTER_RESIZE_MULTIPLIER = 2;\n\nexport interface BoxBounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ntype ResizeCorner = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\";\ntype ResizeSide = \"top\" | \"right\" | \"bottom\" | \"left\";\ntype ResizeHandle = ResizeCorner | ResizeSide;\n\ninterface Dimensions {\n width: number;\n height: number;\n}\n\ninterface ResizeContext {\n readonly initialBounds: BoxBounds;\n readonly container: Dimensions;\n readonly constraints: {\n minSize: number;\n aspectRatio?: number;\n };\n readonly movement: {\n deltaX: number;\n deltaY: number;\n };\n readonly modifiers: {\n centerResize: boolean;\n preserveAspectRatio: boolean;\n };\n}\n\n// Pure calculation functions\nfunction constrainMovementDeltas(\n initialBounds: BoxBounds,\n deltaX: number,\n deltaY: number,\n container: Dimensions,\n): { deltaX: number; deltaY: number } {\n const maxLeftMovement = -initialBounds.x;\n const maxRightMovement =\n container.width - (initialBounds.x + initialBounds.width);\n const maxUpMovement = -initialBounds.y;\n const maxDownMovement =\n container.height - (initialBounds.y + initialBounds.height);\n\n return {\n deltaX: Math.max(maxLeftMovement, Math.min(maxRightMovement, deltaX)),\n deltaY: Math.max(maxUpMovement, Math.min(maxDownMovement, deltaY)),\n };\n}\n\nfunction calculateNormalResize(\n context: ResizeContext,\n handle: ResizeHandle,\n): BoxBounds {\n const { initialBounds, movement } = context;\n const { deltaX, deltaY } = movement;\n\n switch (handle) {\n case \"bottom-right\":\n return {\n ...initialBounds,\n width: initialBounds.width + deltaX,\n height: initialBounds.height + deltaY,\n };\n\n case \"top-left\": {\n const rightEdge = initialBounds.x + initialBounds.width;\n const bottomEdge = initialBounds.y + initialBounds.height;\n const newX = initialBounds.x + deltaX;\n const newY = initialBounds.y + deltaY;\n\n return {\n x: newX,\n y: newY,\n width: rightEdge - newX,\n height: bottomEdge - newY,\n };\n }\n\n case \"top-right\": {\n const bottomEdge = initialBounds.y + initialBounds.height;\n const newY = initialBounds.y + deltaY;\n\n return {\n ...initialBounds,\n y: newY,\n width: initialBounds.width + deltaX,\n height: bottomEdge - newY,\n };\n }\n\n case \"bottom-left\": {\n const rightEdge = initialBounds.x + initialBounds.width;\n const newX = initialBounds.x + deltaX;\n\n return {\n ...initialBounds,\n x: newX,\n width: rightEdge - newX,\n height: initialBounds.height + deltaY,\n };\n }\n\n case \"top\": {\n const bottomEdge = initialBounds.y + initialBounds.height;\n const newY = initialBounds.y + deltaY;\n\n return {\n ...initialBounds,\n y: newY,\n height: bottomEdge - newY,\n };\n }\n\n case \"right\":\n return {\n ...initialBounds,\n width: initialBounds.width + deltaX,\n };\n\n case \"bottom\":\n return {\n ...initialBounds,\n height: initialBounds.height + deltaY,\n };\n\n case \"left\": {\n const rightEdge = initialBounds.x + initialBounds.width;\n const newX = initialBounds.x + deltaX;\n\n return {\n ...initialBounds,\n x: newX,\n width: rightEdge - newX,\n };\n }\n\n default:\n return initialBounds;\n }\n}\n\nfunction calculateAspectRatioResize(\n context: ResizeContext,\n handle: ResizeHandle,\n): BoxBounds {\n const { initialBounds, movement, constraints } = context;\n const { deltaX, deltaY } = movement;\n if (!constraints.aspectRatio) {\n return initialBounds;\n }\n const aspectRatio = constraints.aspectRatio;\n\n const widthMovement = deltaX;\n const heightMovement = deltaY * aspectRatio;\n\n let movementValue: number;\n switch (handle) {\n case \"bottom-right\":\n case \"top-left\":\n movementValue = (widthMovement + heightMovement) / 2;\n break;\n case \"top-right\":\n case \"bottom-left\":\n movementValue = (widthMovement - heightMovement) / 2;\n break;\n default:\n movementValue = widthMovement;\n }\n\n const baseWidth =\n handle === \"top-left\" || handle === \"bottom-left\"\n ? initialBounds.width - movementValue\n : initialBounds.width + movementValue;\n\n const width = Math.max(constraints.minSize, baseWidth);\n const height = width / aspectRatio;\n\n const newBounds: BoxBounds = { ...initialBounds, width, height };\n\n // Adjust position for handles that move the origin\n switch (handle) {\n case \"top-left\":\n newBounds.x = initialBounds.x + initialBounds.width - width;\n newBounds.y = initialBounds.y + initialBounds.height - height;\n break;\n case \"top-right\":\n newBounds.y = initialBounds.y + initialBounds.height - height;\n break;\n case \"bottom-left\":\n newBounds.x = initialBounds.x + initialBounds.width - width;\n break;\n }\n\n return newBounds;\n}\n\nfunction calculateCenterResize(\n context: ResizeContext,\n handle: ResizeHandle,\n): BoxBounds {\n const { initialBounds, movement } = context;\n const { deltaX, deltaY } = movement;\n\n const centerX = initialBounds.x + initialBounds.width / 2;\n const centerY = initialBounds.y + initialBounds.height / 2;\n\n let widthChange = 0;\n let heightChange = 0;\n\n switch (handle) {\n case \"bottom-right\":\n widthChange = deltaX * CENTER_RESIZE_MULTIPLIER;\n heightChange = deltaY * CENTER_RESIZE_MULTIPLIER;\n break;\n case \"top-left\":\n widthChange = -deltaX * CENTER_RESIZE_MULTIPLIER;\n heightChange = -deltaY * CENTER_RESIZE_MULTIPLIER;\n break;\n case \"top-right\":\n widthChange = deltaX * CENTER_RESIZE_MULTIPLIER;\n heightChange = -deltaY * CENTER_RESIZE_MULTIPLIER;\n break;\n case \"bottom-left\":\n widthChange = -deltaX * CENTER_RESIZE_MULTIPLIER;\n heightChange = deltaY * CENTER_RESIZE_MULTIPLIER;\n break;\n case \"top\":\n case \"bottom\":\n heightChange =\n (handle === \"bottom\" ? deltaY : -deltaY) * CENTER_RESIZE_MULTIPLIER;\n break;\n case \"left\":\n case \"right\":\n widthChange =\n (handle === \"right\" ? deltaX : -deltaX) * CENTER_RESIZE_MULTIPLIER;\n break;\n }\n\n const newWidth = initialBounds.width + widthChange;\n const newHeight = initialBounds.height + heightChange;\n\n return {\n x: centerX - newWidth / 2,\n y: centerY - newHeight / 2,\n width: newWidth,\n height: newHeight,\n };\n}\n\nfunction calculateCenterResizeWithAspectRatio(\n context: ResizeContext,\n handle: ResizeHandle,\n): BoxBounds {\n const { initialBounds, movement, constraints } = context;\n const { deltaX, deltaY } = movement;\n if (!constraints.aspectRatio) {\n return initialBounds;\n }\n const aspectRatio = constraints.aspectRatio;\n\n const centerX = initialBounds.x + initialBounds.width / 2;\n const centerY = initialBounds.y + initialBounds.height / 2;\n\n let movementValue: number;\n switch (handle) {\n case \"bottom-right\":\n movementValue = Math.max(deltaX, deltaY);\n break;\n case \"top-left\":\n movementValue = -Math.max(-deltaX, -deltaY);\n break;\n case \"top-right\":\n movementValue = Math.max(deltaX, -deltaY);\n break;\n case \"bottom-left\":\n movementValue = Math.max(-deltaX, deltaY);\n break;\n case \"top\":\n case \"bottom\":\n movementValue = handle === \"bottom\" ? deltaY : -deltaY;\n break;\n case \"left\":\n case \"right\":\n movementValue = handle === \"right\" ? deltaX : -deltaX;\n break;\n default:\n movementValue = Math.max(deltaX, deltaY);\n }\n\n const newWidth = Math.max(\n constraints.minSize,\n initialBounds.width + movementValue * CENTER_RESIZE_MULTIPLIER,\n );\n const newHeight = newWidth / aspectRatio;\n\n return {\n x: centerX - newWidth / 2,\n y: centerY - newHeight / 2,\n width: newWidth,\n height: newHeight,\n };\n}\n\n@customElement(\"ef-resizable-box\")\nexport class EFResizableBox extends LitElement {\n @property({ type: Object })\n bounds: BoxBounds = { x: 0, y: 0, width: 100, height: 100 };\n\n @state()\n private containerWidth = 0;\n\n @state()\n private containerHeight = 0;\n\n @property({ type: Number })\n minSize = DEFAULT_MIN_SIZE;\n\n @state()\n private isDragging = false;\n\n @state()\n private dragMode: \"move\" | \"resize\" | null = null;\n\n private interaction: {\n startPoint: { x: number; y: number };\n target: { mode: \"move\" | \"resize\"; handle?: ResizeHandle };\n initialBounds: BoxBounds;\n pointerId: number;\n } | null = null;\n\n private modifiers = { shift: false, alt: false };\n\n static styles = css`\n .box {\n position: absolute;\n border: 2px solid var(--ef-resizable-box-border-color, #3b82f6);\n background-color: var(--ef-resizable-box-bg-color, rgba(59, 130, 246, 0.2));\n cursor: grab;\n }\n .box.dragging {\n border-color: var(--ef-resizable-box-dragging-border-color, #2563eb);\n background-color: var(--ef-resizable-box-dragging-bg-color, rgba(37, 99, 235, 0.3));\n }\n .handle {\n position: absolute;\n background-color: var(--ef-resizable-box-handle-color, #3b82f6);\n touch-action: none;\n }\n .top-left { top: -4px; left: -4px; width: 8px; height: 8px; cursor: nwse-resize; }\n .top-right { top: -4px; right: -4px; width: 8px; height: 8px; cursor: nesw-resize; }\n .bottom-left { bottom: -4px; left: -4px; width: 8px; height: 8px; cursor: nesw-resize; }\n .bottom-right { bottom: -4px; right: -4px; width: 8px; height: 8px; cursor: nwse-resize; }\n .top { top: -4px; left: 4px; right: 4px; height: 8px; cursor: ns-resize; }\n .right { top: 4px; bottom: 4px; right: -4px; width: 8px; cursor: ew-resize; }\n .bottom { bottom: -4px; left: 4px; right: 4px; height: 8px; cursor: ns-resize; }\n .left { top: 4px; bottom: 4px; left: -4px; width: 8px; cursor: ew-resize; }\n `;\n\n private resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n if (this.offsetParent) {\n this.containerWidth = this.offsetParent.clientWidth;\n this.containerHeight = this.offsetParent.clientHeight;\n }\n this.resizeObserver = new ResizeObserver(() => {\n if (this.offsetParent) {\n this.containerWidth = this.offsetParent.clientWidth;\n this.containerHeight = this.offsetParent.clientHeight;\n }\n });\n if (this.offsetParent) {\n this.resizeObserver.observe(this.offsetParent);\n }\n }\n\n private handlePointerDown(\n e: PointerEvent,\n mode: \"move\" | \"resize\",\n handle?: ResizeHandle,\n ) {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = true;\n this.dragMode = mode;\n\n this.interaction = {\n startPoint: { x: e.clientX, y: e.clientY },\n target: { mode, handle },\n initialBounds: { ...this.bounds },\n pointerId: e.pointerId,\n };\n this.modifiers = { shift: e.shiftKey, alt: e.altKey };\n\n document.addEventListener(\"pointermove\", this.handlePointerMove);\n document.addEventListener(\"pointerup\", this.handlePointerUp);\n }\n\n private handlePointerMove = (e: PointerEvent) => {\n if (\n !this.isDragging ||\n !this.interaction ||\n e.pointerId !== this.interaction.pointerId\n )\n return;\n\n const deltaX = e.clientX - this.interaction.startPoint.x;\n const deltaY = e.clientY - this.interaction.startPoint.y;\n\n this.modifiers = { shift: e.shiftKey, alt: e.altKey };\n\n if (this.dragMode === \"move\") {\n const constrainedMovement = constrainMovementDeltas(\n this.interaction.initialBounds,\n deltaX,\n deltaY,\n { width: this.containerWidth, height: this.containerHeight },\n );\n this.bounds = {\n ...this.interaction.initialBounds,\n x: this.interaction.initialBounds.x + constrainedMovement.deltaX,\n y: this.interaction.initialBounds.y + constrainedMovement.deltaY,\n };\n } else if (this.dragMode === \"resize\" && this.interaction.target.handle) {\n const context: ResizeContext = {\n initialBounds: this.interaction.initialBounds,\n container: { width: this.containerWidth, height: this.containerHeight },\n constraints: {\n minSize: this.minSize,\n aspectRatio: this.modifiers.shift\n ? this.interaction.initialBounds.width /\n this.interaction.initialBounds.height\n : undefined,\n },\n movement: { deltaX, deltaY },\n modifiers: {\n centerResize: this.modifiers.alt,\n preserveAspectRatio: this.modifiers.shift,\n },\n };\n this.bounds = this.calculateBoundsWithModeAwareConstraints(\n context,\n this.interaction.target.handle,\n );\n }\n\n this.dispatchBoundsChange();\n };\n\n private handlePointerUp = () => {\n this.isDragging = false;\n this.dragMode = null;\n this.interaction = null;\n document.removeEventListener(\"pointermove\", this.handlePointerMove);\n document.removeEventListener(\"pointerup\", this.handlePointerUp);\n };\n\n private calculateBoundsWithModeAwareConstraints(\n context: ResizeContext,\n handle: ResizeHandle,\n ): BoxBounds {\n const { modifiers, constraints, container, initialBounds } = context;\n\n // For normal resize, use the simple delta constraint approach\n if (!modifiers.centerResize && !modifiers.preserveAspectRatio) {\n const constrainedMovement = this.constrainResizeDeltas(\n initialBounds,\n context.movement.deltaX,\n context.movement.deltaY,\n handle,\n container,\n constraints.minSize,\n );\n\n return calculateNormalResize(\n {\n ...context,\n movement: constrainedMovement,\n },\n handle,\n );\n }\n\n // For modifier-based resizes, calculate ideal bounds then constrain smartly\n let idealBounds: BoxBounds;\n\n if (modifiers.centerResize && modifiers.preserveAspectRatio) {\n idealBounds = calculateCenterResizeWithAspectRatio(context, handle);\n } else if (modifiers.centerResize) {\n idealBounds = calculateCenterResize(context, handle);\n } else {\n idealBounds = calculateAspectRatioResize(context, handle);\n }\n\n // Smart constraint that preserves the resize mode's behavior\n return this.constrainBoundsForMode(idealBounds, context, handle);\n }\n\n private constrainBoundsForMode(\n idealBounds: BoxBounds,\n context: ResizeContext,\n handle: ResizeHandle,\n ): BoxBounds {\n const { container, constraints, modifiers } = context;\n\n // Check if bounds are already valid\n if (this.isValidBounds(idealBounds, container, constraints.minSize)) {\n return idealBounds;\n }\n\n // For combined center + aspect ratio, need special handling\n if (\n modifiers.centerResize &&\n modifiers.preserveAspectRatio &&\n constraints.aspectRatio\n ) {\n return this.constrainCenterResizeWithAspectRatio(idealBounds, context);\n }\n\n // For aspect ratio modes, we need to scale the bounds proportionally\n if (modifiers.preserveAspectRatio && constraints.aspectRatio) {\n return this.constrainWithAspectRatio(idealBounds, context, handle);\n }\n\n // For center resize, we need to adjust from the center\n if (modifiers.centerResize) {\n return this.constrainCenterResize(idealBounds, context);\n }\n\n // Fallback to simple constraint\n return this.simpleConstrainBounds(\n idealBounds,\n container,\n constraints.minSize,\n );\n }\n\n private isValidBounds(\n bounds: BoxBounds,\n container: Dimensions,\n minSize: number,\n ): boolean {\n return (\n bounds.x >= 0 &&\n bounds.y >= 0 &&\n bounds.width >= minSize &&\n bounds.height >= minSize &&\n bounds.x + bounds.width <= container.width &&\n bounds.y + bounds.height <= container.height\n );\n }\n\n private constrainWithAspectRatio(\n idealBounds: BoxBounds,\n context: ResizeContext,\n handle: ResizeHandle,\n ): BoxBounds {\n const { container, constraints, initialBounds } = context;\n if (!constraints.aspectRatio) {\n return initialBounds;\n }\n const aspectRatio = constraints.aspectRatio;\n\n // Calculate maximum allowed dimensions\n const maxWidth = container.width - Math.max(0, idealBounds.x);\n const maxHeight = container.height - Math.max(0, idealBounds.y);\n\n // Find the largest size that fits both constraints\n let constrainedWidth = Math.max(\n constraints.minSize,\n Math.min(maxWidth, idealBounds.width),\n );\n let constrainedHeight = constrainedWidth / aspectRatio;\n\n // If height is too big, constrain by height instead\n if (constrainedHeight > maxHeight) {\n constrainedHeight = Math.max(constraints.minSize, maxHeight);\n constrainedWidth = constrainedHeight * aspectRatio;\n }\n\n // Ensure we don't go smaller than minimum\n if (constrainedWidth < constraints.minSize) {\n constrainedWidth = constraints.minSize;\n constrainedHeight = constrainedWidth / aspectRatio;\n }\n\n const result: BoxBounds = {\n ...idealBounds,\n width: constrainedWidth,\n height: constrainedHeight,\n };\n\n // Adjust position for handles that move the origin\n switch (handle) {\n case \"top-left\":\n result.x = initialBounds.x + initialBounds.width - constrainedWidth;\n result.y = initialBounds.y + initialBounds.height - constrainedHeight;\n break;\n case \"top-right\":\n result.y = initialBounds.y + initialBounds.height - constrainedHeight;\n break;\n case \"bottom-left\":\n result.x = initialBounds.x + initialBounds.width - constrainedWidth;\n break;\n }\n\n // Ensure position is within bounds\n result.x = Math.max(0, Math.min(container.width - result.width, result.x));\n result.y = Math.max(\n 0,\n Math.min(container.height - result.height, result.y),\n );\n\n return result;\n }\n\n private constrainCenterResize(\n idealBounds: BoxBounds,\n context: ResizeContext,\n ): BoxBounds {\n const { container, constraints, initialBounds } = context;\n\n const centerX = initialBounds.x + initialBounds.width / 2;\n const centerY = initialBounds.y + initialBounds.height / 2;\n\n // Calculate maximum dimensions from center\n const maxWidthFromCenter = Math.min(\n centerX * 2,\n (container.width - centerX) * 2,\n );\n const maxHeightFromCenter = Math.min(\n centerY * 2,\n (container.height - centerY) * 2,\n );\n\n const constrainedWidth = Math.max(\n constraints.minSize,\n Math.min(maxWidthFromCenter, idealBounds.width),\n );\n const constrainedHeight = Math.max(\n constraints.minSize,\n Math.min(maxHeightFromCenter, idealBounds.height),\n );\n\n return {\n x: centerX - constrainedWidth / 2,\n y: centerY - constrainedHeight / 2,\n width: constrainedWidth,\n height: constrainedHeight,\n };\n }\n\n private constrainCenterResizeWithAspectRatio(\n idealBounds: BoxBounds,\n context: ResizeContext,\n ): BoxBounds {\n const { container, constraints, initialBounds } = context;\n if (!constraints.aspectRatio) {\n return initialBounds;\n }\n const aspectRatio = constraints.aspectRatio;\n\n const centerX = initialBounds.x + initialBounds.width / 2;\n const centerY = initialBounds.y + initialBounds.height / 2;\n\n // Calculate maximum dimensions from center while maintaining aspect ratio\n const maxWidthFromCenter = Math.min(\n centerX * 2,\n (container.width - centerX) * 2,\n );\n const maxHeightFromCenter = Math.min(\n centerY * 2,\n (container.height - centerY) * 2,\n );\n\n // Start with the ideal width, then constrain\n let constrainedWidth = Math.max(\n constraints.minSize,\n Math.min(maxWidthFromCenter, idealBounds.width),\n );\n let constrainedHeight = constrainedWidth / aspectRatio;\n\n // If height doesn't fit, constrain by height instead\n if (constrainedHeight > maxHeightFromCenter) {\n constrainedHeight = Math.max(constraints.minSize, maxHeightFromCenter);\n constrainedWidth = constrainedHeight * aspectRatio;\n }\n\n // Ensure minimum size\n if (constrainedWidth < constraints.minSize) {\n constrainedWidth = constraints.minSize;\n constrainedHeight = constrainedWidth / aspectRatio;\n }\n\n if (constrainedHeight < constraints.minSize) {\n constrainedHeight = constraints.minSize;\n constrainedWidth = constrainedHeight * aspectRatio;\n }\n\n return {\n x: centerX - constrainedWidth / 2,\n y: centerY - constrainedHeight / 2,\n width: constrainedWidth,\n height: constrainedHeight,\n };\n }\n\n private simpleConstrainBounds(\n bounds: BoxBounds,\n container: Dimensions,\n minSize: number,\n ): BoxBounds {\n return {\n x: Math.max(0, Math.min(container.width - bounds.width, bounds.x)),\n y: Math.max(0, Math.min(container.height - bounds.height, bounds.y)),\n width: Math.max(\n minSize,\n Math.min(container.width - bounds.x, bounds.width),\n ),\n height: Math.max(\n minSize,\n Math.min(container.height - bounds.y, bounds.height),\n ),\n };\n }\n\n private constrainResizeDeltas(\n initialBounds: BoxBounds,\n deltaX: number,\n deltaY: number,\n handle: ResizeHandle,\n container: Dimensions,\n minSize: number,\n ): { deltaX: number; deltaY: number } {\n let constrainedDeltaX = deltaX;\n let constrainedDeltaY = deltaY;\n\n switch (handle) {\n case \"bottom-right\":\n // Can't make smaller than minSize, can't go beyond container\n constrainedDeltaX = Math.max(\n minSize - initialBounds.width,\n Math.min(\n container.width - initialBounds.x - initialBounds.width,\n deltaX,\n ),\n );\n constrainedDeltaY = Math.max(\n minSize - initialBounds.height,\n Math.min(\n container.height - initialBounds.y - initialBounds.height,\n deltaY,\n ),\n );\n break;\n\n case \"top-left\":\n // Can't make smaller than minSize, can't go beyond 0\n constrainedDeltaX = Math.max(\n -initialBounds.x,\n Math.min(initialBounds.width - minSize, deltaX),\n );\n constrainedDeltaY = Math.max(\n -initialBounds.y,\n Math.min(initialBounds.height - minSize, deltaY),\n );\n break;\n\n case \"top-right\":\n constrainedDeltaX = Math.max(\n minSize - initialBounds.width,\n Math.min(\n container.width - initialBounds.x - initialBounds.width,\n deltaX,\n ),\n );\n constrainedDeltaY = Math.max(\n -initialBounds.y,\n Math.min(initialBounds.height - minSize, deltaY),\n );\n break;\n\n case \"bottom-left\":\n constrainedDeltaX = Math.max(\n -initialBounds.x,\n Math.min(initialBounds.width - minSize, deltaX),\n );\n constrainedDeltaY = Math.max(\n minSize - initialBounds.height,\n Math.min(\n container.height - initialBounds.y - initialBounds.height,\n deltaY,\n ),\n );\n break;\n\n case \"right\":\n constrainedDeltaX = Math.max(\n minSize - initialBounds.width,\n Math.min(\n container.width - initialBounds.x - initialBounds.width,\n deltaX,\n ),\n );\n break;\n\n case \"left\":\n constrainedDeltaX = Math.max(\n -initialBounds.x,\n Math.min(initialBounds.width - minSize, deltaX),\n );\n break;\n\n case \"bottom\":\n constrainedDeltaY = Math.max(\n minSize - initialBounds.height,\n Math.min(\n container.height - initialBounds.y - initialBounds.height,\n deltaY,\n ),\n );\n break;\n\n case \"top\":\n constrainedDeltaY = Math.max(\n -initialBounds.y,\n Math.min(initialBounds.height - minSize, deltaY),\n );\n break;\n }\n\n return { deltaX: constrainedDeltaX, deltaY: constrainedDeltaY };\n }\n\n private dispatchBoundsChange() {\n this.dispatchEvent(\n new CustomEvent(\"bounds-change\", {\n detail: { bounds: this.bounds },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n render() {\n const boxStyles = {\n left: `${this.bounds.x}px`,\n top: `${this.bounds.y}px`,\n width: `${this.bounds.width}px`,\n height: `${this.bounds.height}px`,\n };\n\n return html`\n <div\n class=\"box ${this.isDragging ? \"dragging\" : \"\"}\"\n style=${styleMap(boxStyles)}\n @pointerdown=${(e: PointerEvent) => this.handlePointerDown(e, \"move\")}\n >\n ${this.renderHandles()}\n <slot></slot>\n </div>\n `;\n }\n\n private renderHandles() {\n const handles: ResizeHandle[] = [\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n ];\n return handles.map(\n (handle) => html`\n <div\n class=\"handle ${handle}\"\n @pointerdown=${(e: PointerEvent) => this.handlePointerDown(e, \"resize\", handle)}\n ></div>\n `,\n );\n }\n}\n"],"mappings":"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"}
@@ -1,30 +1,36 @@
1
- import { LitElement } from 'lit';
2
- import { ControllableInterface } from './Controllable.js';
1
+ import { ControllableInterface } from "./Controllable.js";
2
+ import * as lit18 from "lit";
3
+ import { LitElement } from "lit";
4
+ import * as lit_html16 from "lit-html";
5
+
6
+ //#region src/gui/EFScrubber.d.ts
3
7
  declare const EFScrubber_base: (new (...args: any[]) => {
4
- target: string;
5
- targetElement: ControllableInterface | null;
6
- effectiveContext: ControllableInterface | null;
8
+ target: string;
9
+ targetElement: ControllableInterface | null;
10
+ effectiveContext: ControllableInterface | null;
7
11
  }) & typeof LitElement;
8
- export declare class EFScrubber extends EFScrubber_base {
9
- static styles: import('lit').CSSResult[];
10
- playing: boolean;
11
- currentTimeMs: number;
12
- durationMs: number;
13
- get context(): ControllableInterface | null;
14
- private scrubProgress;
15
- private isMoving;
16
- private scrubberRef?;
17
- private updateProgress;
18
- private boundHandlePointerDown;
19
- private boundHandlePointerMove;
20
- private boundHandlePointerUp;
21
- render(): import('lit-html').TemplateResult<1>;
22
- connectedCallback(): void;
23
- disconnectedCallback(): void;
12
+ declare class EFScrubber extends EFScrubber_base {
13
+ static styles: lit18.CSSResult[];
14
+ playing: boolean;
15
+ currentTimeMs: number;
16
+ durationMs: number;
17
+ get context(): ControllableInterface | null;
18
+ private scrubProgress;
19
+ private isMoving;
20
+ private scrubberRef?;
21
+ private updateProgress;
22
+ private boundHandlePointerDown;
23
+ private boundHandlePointerMove;
24
+ private boundHandlePointerUp;
25
+ render(): lit_html16.TemplateResult<1>;
26
+ connectedCallback(): void;
27
+ disconnectedCallback(): void;
24
28
  }
25
29
  declare global {
26
- interface HTMLElementTagNameMap {
27
- "ef-scrubber": EFScrubber;
28
- }
30
+ interface HTMLElementTagNameMap {
31
+ "ef-scrubber": EFScrubber;
32
+ }
29
33
  }
30
- export {};
34
+ //#endregion
35
+ export { EFScrubber };
36
+ //# sourceMappingURL=EFScrubber.d.ts.map
@@ -8,7 +8,9 @@ import { consume } from "@lit/context";
8
8
  import { LitElement, css, html } from "lit";
9
9
  import { customElement, state } from "lit/decorators.js";
10
10
  import { ref } from "lit/directives/ref.js";
11
- var EFScrubber = class EFScrubber$1 extends TargetOrContextMixin(LitElement, efContext) {
11
+
12
+ //#region src/gui/EFScrubber.ts
13
+ let EFScrubber = class EFScrubber$1 extends TargetOrContextMixin(LitElement, efContext) {
12
14
  constructor(..._args) {
13
15
  super(..._args);
14
16
  this.playing = false;
@@ -128,4 +130,7 @@ __decorate([consume({
128
130
  __decorate([state()], EFScrubber.prototype, "scrubProgress", void 0);
129
131
  __decorate([state()], EFScrubber.prototype, "isMoving", void 0);
130
132
  EFScrubber = __decorate([customElement("ef-scrubber")], EFScrubber);
133
+
134
+ //#endregion
131
135
  export { EFScrubber };
136
+ //# sourceMappingURL=EFScrubber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EFScrubber.js","names":["EFScrubber"],"sources":["../../src/gui/EFScrubber.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { css, html, LitElement } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\n\nimport { ref } from \"lit/directives/ref.js\";\nimport type { ControllableInterface } from \"./Controllable.js\";\nimport { currentTimeContext } from \"./currentTimeContext.js\";\nimport { durationContext } from \"./durationContext.js\";\nimport { efContext } from \"./efContext.js\";\nimport { playingContext } from \"./playingContext.js\";\nimport { TargetOrContextMixin } from \"./TargetOrContextMixin.js\";\n\n@customElement(\"ef-scrubber\")\nexport class EFScrubber extends TargetOrContextMixin(LitElement, efContext) {\n static styles = [\n css`\n :host {\n --ef-scrubber-height: 4px;\n --ef-scrubber-background: rgb(209 213 219);\n --ef-scrubber-progress-color: rgb(37 99 235);\n --ef-scrubber-handle-size: 12px;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n \n .scrubber {\n width: 100%;\n height: var(--ef-scrubber-height);\n background: var(--ef-scrubber-background);\n position: relative;\n cursor: pointer;\n border-radius: 2px;\n }\n\n .progress {\n position: absolute;\n height: 100%;\n background: var(--ef-scrubber-progress-color);\n border-radius: 2px;\n }\n\n .handle {\n position: absolute;\n width: var(--ef-scrubber-handle-size);\n height: var(--ef-scrubber-handle-size);\n background: var(--ef-scrubber-progress-color);\n border-radius: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n cursor: grab;\n }\n\n /* Add CSS Shadow Parts */\n ::part(scrubber) { }\n ::part(progress) { }\n ::part(handle) { }\n `,\n ];\n\n @consume({ context: playingContext, subscribe: true })\n playing = false;\n\n @consume({ context: currentTimeContext, subscribe: true })\n currentTimeMs = Number.NaN;\n\n @consume({ context: durationContext, subscribe: true })\n durationMs = 0;\n\n get context(): ControllableInterface | null {\n return this.effectiveContext;\n }\n\n @state()\n private scrubProgress = 0;\n\n @state()\n private isMoving = false;\n\n private scrubberRef?: HTMLElement;\n\n private updateProgress(e: MouseEvent) {\n if (!this.context || !this.scrubberRef) return;\n\n const rect = this.scrubberRef.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const progress = Math.max(0, Math.min(1, x / rect.width));\n\n this.scrubProgress = progress;\n this.context.currentTimeMs = progress * this.durationMs;\n }\n\n private boundHandlePointerDown = (e: MouseEvent) => {\n this.isMoving = true;\n e.preventDefault();\n this.updateProgress(e);\n };\n\n private boundHandlePointerMove = (e: MouseEvent) => {\n if (this.isMoving) {\n this.updateProgress(e);\n }\n };\n\n private boundHandlePointerUp = () => {\n this.isMoving = false;\n };\n\n render() {\n // Calculate progress from currentTimeMs and duration\n const currentProgress =\n this.durationMs > 0 ? (this.currentTimeMs ?? 0) / this.durationMs : 0;\n\n const displayProgress = this.isMoving\n ? this.scrubProgress\n : currentProgress;\n\n return html`\n <div \n ${ref((el) => {\n this.scrubberRef = el as HTMLElement;\n })}\n part=\"scrubber\"\n class=\"scrubber\"\n @mousedown=${this.boundHandlePointerDown}\n >\n <div class=\"progress\" style=\"width: ${displayProgress * 100}%\"></div>\n <div class=\"handle\" style=\"left: ${displayProgress * 100}%\"></div>\n </div>\n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"pointerup\", this.boundHandlePointerUp);\n window.addEventListener(\"pointermove\", this.boundHandlePointerMove);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\"pointerup\", this.boundHandlePointerUp);\n window.removeEventListener(\"pointermove\", this.boundHandlePointerMove);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-scrubber\": EFScrubber;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAaO,uBAAMA,qBAAmB,qBAAqB,YAAY,UAAU,CAAC;;;iBAiDhE;uBAGM;oBAGH;uBAOW;kBAGL;iCAee,MAAkB;AAClD,QAAK,WAAW;AAChB,KAAE,gBAAgB;AAClB,QAAK,eAAe,EAAE;;iCAGU,MAAkB;AAClD,OAAI,KAAK,SACP,MAAK,eAAe,EAAE;;oCAIW;AACnC,QAAK,WAAW;;;;gBA5FF,CACd,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA4CJ;;CAWD,IAAI,UAAwC;AAC1C,SAAO,KAAK;;CAWd,AAAQ,eAAe,GAAe;AACpC,MAAI,CAAC,KAAK,WAAW,CAAC,KAAK,YAAa;EAExC,MAAM,OAAO,KAAK,YAAY,uBAAuB;EACrD,MAAM,IAAI,EAAE,UAAU,KAAK;EAC3B,MAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC;AAEzD,OAAK,gBAAgB;AACrB,OAAK,QAAQ,gBAAgB,WAAW,KAAK;;CAmB/C,SAAS;EAEP,MAAM,kBACJ,KAAK,aAAa,KAAK,KAAK,iBAAiB,KAAK,KAAK,aAAa;EAEtE,MAAM,kBAAkB,KAAK,WACzB,KAAK,gBACL;AAEJ,SAAO,IAAI;;UAEL,KAAK,OAAO;AACZ,QAAK,cAAc;IACnB,CAAC;;;qBAGU,KAAK,uBAAuB;;8CAEH,kBAAkB,IAAI;2CACzB,kBAAkB,IAAI;;;;CAK/D,oBAAoB;AAClB,QAAM,mBAAmB;AACzB,SAAO,iBAAiB,aAAa,KAAK,qBAAqB;AAC/D,SAAO,iBAAiB,eAAe,KAAK,uBAAuB;;CAGrE,uBAAuB;AACrB,QAAM,sBAAsB;AAC5B,SAAO,oBAAoB,aAAa,KAAK,qBAAqB;AAClE,SAAO,oBAAoB,eAAe,KAAK,uBAAuB;;;YAjFvE,QAAQ;CAAE,SAAS;CAAgB,WAAW;CAAM,CAAC;YAGrD,QAAQ;CAAE,SAAS;CAAoB,WAAW;CAAM,CAAC;YAGzD,QAAQ;CAAE,SAAS;CAAiB,WAAW;CAAM,CAAC;YAOtD,OAAO;YAGP,OAAO;yBAjET,cAAc,cAAc"}
@@ -1,19 +1,26 @@
1
- import { LitElement } from 'lit';
1
+ import { ControllableInterface } from "./Controllable.js";
2
+ import * as lit19 from "lit";
3
+ import { LitElement } from "lit";
4
+ import * as lit_html17 from "lit-html";
5
+
6
+ //#region src/gui/EFTimeDisplay.d.ts
2
7
  declare const EFTimeDisplay_base: (new (...args: any[]) => {
3
- target: string;
4
- targetElement: import('./Controllable.js').ControllableInterface | null;
5
- effectiveContext: import('./Controllable.js').ControllableInterface | null;
8
+ target: string;
9
+ targetElement: ControllableInterface | null;
10
+ effectiveContext: ControllableInterface | null;
6
11
  }) & typeof LitElement;
7
- export declare class EFTimeDisplay extends EFTimeDisplay_base {
8
- static styles: import('lit').CSSResult;
9
- currentTimeMs: number;
10
- durationMs: number;
11
- private formatTime;
12
- render(): import('lit-html').TemplateResult<1>;
12
+ declare class EFTimeDisplay extends EFTimeDisplay_base {
13
+ static styles: lit19.CSSResult;
14
+ currentTimeMs: number;
15
+ durationMs: number;
16
+ private formatTime;
17
+ render(): lit_html17.TemplateResult<1>;
13
18
  }
14
19
  declare global {
15
- interface HTMLElementTagNameMap {
16
- "ef-time-display": EFTimeDisplay;
17
- }
20
+ interface HTMLElementTagNameMap {
21
+ "ef-time-display": EFTimeDisplay;
22
+ }
18
23
  }
19
- export {};
24
+ //#endregion
25
+ export { EFTimeDisplay };
26
+ //# sourceMappingURL=EFTimeDisplay.d.ts.map
@@ -6,7 +6,9 @@ import { TargetOrContextMixin } from "./TargetOrContextMixin.js";
6
6
  import { consume } from "@lit/context";
7
7
  import { LitElement, css, html } from "lit";
8
8
  import { customElement } from "lit/decorators.js";
9
- var EFTimeDisplay = class EFTimeDisplay$1 extends TargetOrContextMixin(LitElement, efContext) {
9
+
10
+ //#region src/gui/EFTimeDisplay.ts
11
+ let EFTimeDisplay = class EFTimeDisplay$1 extends TargetOrContextMixin(LitElement, efContext) {
10
12
  constructor(..._args) {
11
13
  super(..._args);
12
14
  this.currentTimeMs = NaN;
@@ -47,4 +49,7 @@ __decorate([consume({
47
49
  subscribe: true
48
50
  })], EFTimeDisplay.prototype, "durationMs", void 0);
49
51
  EFTimeDisplay = __decorate([customElement("ef-time-display")], EFTimeDisplay);
52
+
53
+ //#endregion
50
54
  export { EFTimeDisplay };
55
+ //# sourceMappingURL=EFTimeDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EFTimeDisplay.js","names":["EFTimeDisplay"],"sources":["../../src/gui/EFTimeDisplay.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { css, html, LitElement } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\nimport { currentTimeContext } from \"./currentTimeContext.js\";\nimport { durationContext } from \"./durationContext.js\";\nimport { efContext } from \"./efContext.js\";\nimport { TargetOrContextMixin } from \"./TargetOrContextMixin.js\";\n\n@customElement(\"ef-time-display\")\nexport class EFTimeDisplay extends TargetOrContextMixin(LitElement, efContext) {\n static styles = css`\n :host {\n display: inline-block;\n font-family: var(--ef-font-family, system-ui);\n font-size: var(--ef-font-size-xs, 0.75rem);\n color: var(--ef-text-color, rgb(75 85 99));\n white-space: nowrap;\n }\n `;\n\n @consume({ context: currentTimeContext, subscribe: true })\n currentTimeMs = Number.NaN;\n\n @consume({ context: durationContext, subscribe: true })\n durationMs = 0;\n\n private formatTime(ms: number): string {\n // Handle NaN, undefined, null, or negative values\n if (!Number.isFinite(ms) || ms < 0) {\n return \"0:00\";\n }\n\n const totalSeconds = Math.floor(ms / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return `${minutes}:${seconds.toString().padStart(2, \"0\")}`;\n }\n\n render() {\n const currentTime = this.currentTimeMs;\n const totalTime = this.durationMs;\n\n return html`\n <span part=\"time\">\n ${this.formatTime(currentTime)} / ${this.formatTime(totalTime)}\n </span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-time-display\": EFTimeDisplay;\n }\n}\n"],"mappings":";;;;;;;;;;AASO,0BAAMA,wBAAsB,qBAAqB,YAAY,UAAU,CAAC;;;uBAY7D;oBAGH;;;gBAdG,GAAG;;;;;;;;;;CAgBnB,AAAQ,WAAW,IAAoB;AAErC,MAAI,CAAC,OAAO,SAAS,GAAG,IAAI,KAAK,EAC/B,QAAO;EAGT,MAAM,eAAe,KAAK,MAAM,KAAK,IAAK;AAG1C,SAAO,GAFS,KAAK,MAAM,eAAe,GAAG,CAE3B,IADF,eAAe,IACF,UAAU,CAAC,SAAS,GAAG,IAAI;;CAG1D,SAAS;EACP,MAAM,cAAc,KAAK;EACzB,MAAM,YAAY,KAAK;AAEvB,SAAO,IAAI;;UAEL,KAAK,WAAW,YAAY,CAAC,KAAK,KAAK,WAAW,UAAU,CAAC;;;;;YAxBpE,QAAQ;CAAE,SAAS;CAAoB,WAAW;CAAM,CAAC;YAGzD,QAAQ;CAAE,SAAS;CAAiB,WAAW;CAAM,CAAC;4BAfxD,cAAc,kBAAkB"}
@@ -1,18 +1,24 @@
1
- import { LitElement } from 'lit';
2
- import { ControllableInterface } from './Controllable.js';
1
+ import { ControllableInterface } from "./Controllable.js";
2
+ import * as lit17 from "lit";
3
+ import { LitElement } from "lit";
4
+ import * as lit_html15 from "lit-html";
5
+
6
+ //#region src/gui/EFToggleLoop.d.ts
3
7
  declare const EFToggleLoop_base: (new (...args: any[]) => {
4
- target: string;
5
- targetElement: ControllableInterface | null;
6
- effectiveContext: ControllableInterface | null;
8
+ target: string;
9
+ targetElement: ControllableInterface | null;
10
+ effectiveContext: ControllableInterface | null;
7
11
  }) & typeof LitElement;
8
- export declare class EFToggleLoop extends EFToggleLoop_base {
9
- static styles: import('lit').CSSResult[];
10
- get context(): ControllableInterface | null;
11
- render(): import('lit-html').TemplateResult<1>;
12
+ declare class EFToggleLoop extends EFToggleLoop_base {
13
+ static styles: lit17.CSSResult[];
14
+ get context(): ControllableInterface | null;
15
+ render(): lit_html15.TemplateResult<1>;
12
16
  }
13
17
  declare global {
14
- interface HTMLElementTagNameMap {
15
- "ef-toggle-loop": EFToggleLoop;
16
- }
18
+ interface HTMLElementTagNameMap {
19
+ "ef-toggle-loop": EFToggleLoop;
20
+ }
17
21
  }
18
- export {};
22
+ //#endregion
23
+ export { EFToggleLoop };
24
+ //# sourceMappingURL=EFToggleLoop.d.ts.map
@@ -3,7 +3,9 @@ import { efContext } from "./efContext.js";
3
3
  import { TargetOrContextMixin } from "./TargetOrContextMixin.js";
4
4
  import { LitElement, css, html } from "lit";
5
5
  import { customElement } from "lit/decorators.js";
6
- var EFToggleLoop = class EFToggleLoop$1 extends TargetOrContextMixin(LitElement, efContext) {
6
+
7
+ //#region src/gui/EFToggleLoop.ts
8
+ let EFToggleLoop = class EFToggleLoop$1 extends TargetOrContextMixin(LitElement, efContext) {
7
9
  static {
8
10
  this.styles = [css`
9
11
  :host {}
@@ -21,4 +23,7 @@ var EFToggleLoop = class EFToggleLoop$1 extends TargetOrContextMixin(LitElement,
21
23
  }
22
24
  };
23
25
  EFToggleLoop = __decorate([customElement("ef-toggle-loop")], EFToggleLoop);
26
+
27
+ //#endregion
24
28
  export { EFToggleLoop };
29
+ //# sourceMappingURL=EFToggleLoop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EFToggleLoop.js","names":["EFToggleLoop"],"sources":["../../src/gui/EFToggleLoop.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\nimport type { ControllableInterface } from \"./Controllable.js\";\nimport { efContext } from \"./efContext.js\";\nimport { TargetOrContextMixin } from \"./TargetOrContextMixin.js\";\n\n@customElement(\"ef-toggle-loop\")\nexport class EFToggleLoop extends TargetOrContextMixin(LitElement, efContext) {\n static styles = [\n css`\n :host {}\n `,\n ];\n\n get context(): ControllableInterface | null {\n return this.effectiveContext;\n }\n\n render() {\n return html`\n <slot @click=${() => {\n if (this.context) {\n this.context.loop = !this.context.loop;\n }\n }}></slot>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-toggle-loop\": EFToggleLoop;\n }\n}\n"],"mappings":";;;;;;;AAQO,yBAAMA,uBAAqB,qBAAqB,YAAY,UAAU,CAAC;;gBAC5D,CACd,GAAG;;MAGJ;;CAED,IAAI,UAAwC;AAC1C,SAAO,KAAK;;CAGd,SAAS;AACP,SAAO,IAAI;2BACY;AACnB,OAAI,KAAK,QACP,MAAK,QAAQ,OAAO,CAAC,KAAK,QAAQ;IAEpC;;;;2BAlBP,cAAc,iBAAiB"}
@@ -1,22 +1,28 @@
1
- import { LitElement } from 'lit';
2
- import { ControllableInterface } from './Controllable.js';
1
+ import { ControllableInterface } from "./Controllable.js";
2
+ import * as lit14 from "lit";
3
+ import { LitElement } from "lit";
4
+ import * as lit_html12 from "lit-html";
5
+
6
+ //#region src/gui/EFTogglePlay.d.ts
3
7
  declare const EFTogglePlay_base: (new (...args: any[]) => {
4
- target: string;
5
- targetElement: ControllableInterface | null;
6
- effectiveContext: ControllableInterface | null;
8
+ target: string;
9
+ targetElement: ControllableInterface | null;
10
+ effectiveContext: ControllableInterface | null;
7
11
  }) & typeof LitElement;
8
- export declare class EFTogglePlay extends EFTogglePlay_base {
9
- static styles: import('lit').CSSResult[];
10
- playing: boolean;
11
- get efContext(): ControllableInterface | null;
12
- connectedCallback(): void;
13
- disconnectedCallback(): void;
14
- render(): import('lit-html').TemplateResult<1>;
15
- togglePlay: () => void;
12
+ declare class EFTogglePlay extends EFTogglePlay_base {
13
+ static styles: lit14.CSSResult[];
14
+ playing: boolean;
15
+ get efContext(): ControllableInterface | null;
16
+ connectedCallback(): void;
17
+ disconnectedCallback(): void;
18
+ render(): lit_html12.TemplateResult<1>;
19
+ togglePlay: () => void;
16
20
  }
17
21
  declare global {
18
- interface HTMLElementTagNameMap {
19
- "ef-toggle-play": EFTogglePlay;
20
- }
22
+ interface HTMLElementTagNameMap {
23
+ "ef-toggle-play": EFTogglePlay;
24
+ }
21
25
  }
22
- export {};
26
+ //#endregion
27
+ export { EFTogglePlay };
28
+ //# sourceMappingURL=EFTogglePlay.d.ts.map
@@ -6,8 +6,10 @@ import { TargetOrContextMixin } from "./TargetOrContextMixin.js";
6
6
  import { consume } from "@lit/context";
7
7
  import { LitElement, css, html } from "lit";
8
8
  import { customElement, state } from "lit/decorators.js";
9
+
10
+ //#region src/gui/EFTogglePlay.ts
9
11
  attachContextRoot();
10
- var EFTogglePlay = class EFTogglePlay$1 extends TargetOrContextMixin(LitElement, efContext) {
12
+ let EFTogglePlay = class EFTogglePlay$1 extends TargetOrContextMixin(LitElement, efContext) {
11
13
  constructor(..._args) {
12
14
  super(..._args);
13
15
  this.playing = false;
@@ -48,4 +50,7 @@ __decorate([consume({
48
50
  subscribe: true
49
51
  }), state()], EFTogglePlay.prototype, "playing", void 0);
50
52
  EFTogglePlay = __decorate([customElement("ef-toggle-play")], EFTogglePlay);
53
+
54
+ //#endregion
51
55
  export { EFTogglePlay };
56
+ //# sourceMappingURL=EFTogglePlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EFTogglePlay.js","names":["EFTogglePlay"],"sources":["../../src/gui/EFTogglePlay.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { css, html, LitElement } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { attachContextRoot } from \"../attachContextRoot.js\";\nimport type { ControllableInterface } from \"./Controllable.js\";\nimport { efContext } from \"./efContext.js\";\nimport { playingContext } from \"./playingContext.js\";\nimport { TargetOrContextMixin } from \"./TargetOrContextMixin.js\";\n\nattachContextRoot();\n\n@customElement(\"ef-toggle-play\")\nexport class EFTogglePlay extends TargetOrContextMixin(LitElement, efContext) {\n static styles = [\n css`\n :host {}\n div {\n all: inherit;\n }\n `,\n ];\n\n @consume({ context: playingContext, subscribe: true })\n @state()\n playing = false;\n\n get efContext(): ControllableInterface | null {\n return this.effectiveContext;\n }\n\n // Attach click listener to host\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener(\"click\", this.togglePlay);\n }\n\n // Detach click listener from host\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"click\", this.togglePlay);\n }\n\n render() {\n return html`\n <div>\n ${\n this.playing\n ? html`<slot name=\"pause\"></slot>`\n : html`<slot name=\"play\"></slot>`\n }\n </div>\n `;\n }\n\n togglePlay = () => {\n if (this.efContext) {\n if (this.playing) {\n this.efContext.pause();\n } else {\n this.efContext.play();\n }\n }\n };\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-toggle-play\": EFTogglePlay;\n }\n}\n"],"mappings":";;;;;;;;;;AASA,mBAAmB;AAGZ,yBAAMA,uBAAqB,qBAAqB,YAAY,UAAU,CAAC;;;iBAYlE;0BA8BS;AACjB,OAAI,KAAK,UACP,KAAI,KAAK,QACP,MAAK,UAAU,OAAO;OAEtB,MAAK,UAAU,MAAM;;;;gBA9CX,CACd,GAAG;;;;;MAMJ;;CAMD,IAAI,YAA0C;AAC5C,SAAO,KAAK;;CAId,oBAAoB;AAClB,QAAM,mBAAmB;AACzB,OAAK,iBAAiB,SAAS,KAAK,WAAW;;CAIjD,uBAAuB;AACrB,QAAM,sBAAsB;AAC5B,OAAK,oBAAoB,SAAS,KAAK,WAAW;;CAGpD,SAAS;AACP,SAAO,IAAI;;UAGL,KAAK,UACD,IAAI,+BACJ,IAAI,4BACT;;;;;YA3BN,QAAQ;CAAE,SAAS;CAAgB,WAAW;CAAM,CAAC,EACrD,OAAO;2BAZT,cAAc,iBAAiB"}
@@ -1,19 +1,27 @@
1
- import { LitElement, PropertyValueMap } from 'lit';
2
- declare const EFWorkbench_base: (new (...args: any[]) => import('./ContextMixin.js').ContextMixinInterface) & typeof LitElement;
3
- export declare class EFWorkbench extends EFWorkbench_base {
4
- static styles: import('lit').CSSResult[];
5
- rendering: boolean;
6
- focusOverlay: import('lit-html/directives/ref.js').Ref<HTMLDivElement>;
7
- handleStageWheel(event: WheelEvent): void;
8
- connectedCallback(): void;
9
- disconnectedCallback(): void;
10
- update(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
11
- drawOverlays: () => void;
12
- render(): import('lit-html').TemplateResult<1>;
1
+ import { ContextMixinInterface } from "./ContextMixin.js";
2
+ import * as lit10 from "lit";
3
+ import { LitElement, PropertyValueMap } from "lit";
4
+ import * as lit_html10 from "lit-html";
5
+ import * as lit_html_directives_ref_js2 from "lit-html/directives/ref.js";
6
+
7
+ //#region src/gui/EFWorkbench.d.ts
8
+ declare const EFWorkbench_base: (new (...args: any[]) => ContextMixinInterface) & typeof LitElement;
9
+ declare class EFWorkbench extends EFWorkbench_base {
10
+ static styles: lit10.CSSResult[];
11
+ rendering: boolean;
12
+ focusOverlay: lit_html_directives_ref_js2.Ref<HTMLDivElement>;
13
+ handleStageWheel(event: WheelEvent): void;
14
+ connectedCallback(): void;
15
+ disconnectedCallback(): void;
16
+ update(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
17
+ drawOverlays: () => void;
18
+ render(): lit_html10.TemplateResult<1>;
13
19
  }
14
20
  declare global {
15
- interface HTMLElementTagNameMap {
16
- "ef-workbench": EFWorkbench;
17
- }
21
+ interface HTMLElementTagNameMap {
22
+ "ef-workbench": EFWorkbench;
23
+ }
18
24
  }
19
- export {};
25
+ //#endregion
26
+ export { EFWorkbench };
27
+ //# sourceMappingURL=EFWorkbench.d.ts.map
@@ -4,7 +4,9 @@ import { TWMixin } from "./TWMixin2.js";
4
4
  import { LitElement, css, html } from "lit";
5
5
  import { customElement, eventOptions, property } from "lit/decorators.js";
6
6
  import { createRef, ref } from "lit/directives/ref.js";
7
- var EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement)) {
7
+
8
+ //#region src/gui/EFWorkbench.ts
9
+ let EFWorkbench = class EFWorkbench$1 extends ContextMixin(TWMixin(LitElement)) {
8
10
  constructor(..._args) {
9
11
  super(..._args);
10
12
  this.rendering = false;
@@ -88,4 +90,7 @@ __decorate([eventOptions({
88
90
  capture: true
89
91
  })], EFWorkbench.prototype, "handleStageWheel", null);
90
92
  EFWorkbench = __decorate([customElement("ef-workbench")], EFWorkbench);
93
+
94
+ //#endregion
91
95
  export { EFWorkbench };
96
+ //# sourceMappingURL=EFWorkbench.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EFWorkbench.js","names":["EFWorkbench"],"sources":["../../src/gui/EFWorkbench.ts"],"sourcesContent":["import { css, html, LitElement, type PropertyValueMap } from \"lit\";\nimport { customElement, eventOptions, property } from \"lit/decorators.js\";\nimport { createRef, ref } from \"lit/directives/ref.js\";\n\nimport { ContextMixin } from \"./ContextMixin.js\";\nimport { TWMixin } from \"./TWMixin.js\";\n\n@customElement(\"ef-workbench\")\nexport class EFWorkbench extends ContextMixin(TWMixin(LitElement)) {\n static styles = [\n css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n `,\n ];\n\n @property({ type: Boolean })\n rendering = false;\n\n focusOverlay = createRef<HTMLDivElement>();\n\n @eventOptions({ passive: false, capture: true })\n handleStageWheel(event: WheelEvent) {\n event.preventDefault();\n }\n\n connectedCallback(): void {\n document.body.style.width = \"100%\";\n document.body.style.height = \"100%\";\n document.documentElement.style.width = \"100%\";\n document.documentElement.style.height = \"100%\";\n super.connectedCallback();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n document.body.style.width = \"\";\n document.body.style.height = \"\";\n document.documentElement.style.width = \"\";\n document.documentElement.style.height = \"\";\n }\n\n update(\n changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>,\n ): void {\n super.update(changedProperties);\n\n if (changedProperties.has(\"focusedElement\")) {\n this.drawOverlays();\n }\n }\n\n drawOverlays = () => {\n const focusOverlay = this.focusOverlay.value;\n if (focusOverlay) {\n if (this.focusedElement) {\n focusOverlay.style.display = \"block\";\n const rect = this.focusedElement.getBoundingClientRect();\n Object.assign(focusOverlay.style, {\n position: \"fixed\",\n top: `${rect.top}px`,\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n });\n requestAnimationFrame(this.drawOverlays);\n } else {\n focusOverlay.style.display = \"none\";\n }\n }\n };\n\n render() {\n // TODO: this.rendering is not correctly set when using the framegen bridge\n // so to hack we're checking for the existence of EF_RENDERING on the window\n if (\n this.rendering ||\n (typeof window !== \"undefined\" && window.EF_RENDERING?.() === true)\n ) {\n return html`\n <slot class=\"fixed inset-0 h-full w-full\" name=\"canvas\"></slot>\n `;\n }\n return html`\n <div\n class=\"grid h-full w-full bg-slate-800\"\n style=\"grid-template-rows: 1fr 300px; grid-template-columns: 100%;\"\n >\n <div\n class=\"relative h-full w-full overflow-hidden\"\n @wheel=${this.handleStageWheel}\n >\n <ef-fit-scale class=\"h-full grid place-content-center\">\n <slot name=\"canvas\" class=\"contents\"></slot>\n </ef-fit-scale>\n <div\n class=\"border border-blue-500 bg-blue-200 bg-opacity-20 absolute\"\n ${ref(this.focusOverlay)}\n ></div>\n </div>\n\n <slot class=\"overflow inline-block\" name=\"timeline\"></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ef-workbench\": EFWorkbench;\n }\n}\n"],"mappings":";;;;;;;;AAQO,wBAAMA,sBAAoB,aAAa,QAAQ,WAAW,CAAC,CAAC;;;mBAYrD;sBAEG,WAA2B;4BAiCrB;GACnB,MAAM,eAAe,KAAK,aAAa;AACvC,OAAI,aACF,KAAI,KAAK,gBAAgB;AACvB,iBAAa,MAAM,UAAU;IAC7B,MAAM,OAAO,KAAK,eAAe,uBAAuB;AACxD,WAAO,OAAO,aAAa,OAAO;KAChC,UAAU;KACV,KAAK,GAAG,KAAK,IAAI;KACjB,MAAM,GAAG,KAAK,KAAK;KACnB,OAAO,GAAG,KAAK,MAAM;KACrB,QAAQ,GAAG,KAAK,OAAO;KACxB,CAAC;AACF,0BAAsB,KAAK,aAAa;SAExC,cAAa,MAAM,UAAU;;;;gBA7DnB,CACd,GAAG;;;;;;MAOJ;;CAOD,AACA,iBAAiB,OAAmB;AAClC,QAAM,gBAAgB;;CAGxB,oBAA0B;AACxB,WAAS,KAAK,MAAM,QAAQ;AAC5B,WAAS,KAAK,MAAM,SAAS;AAC7B,WAAS,gBAAgB,MAAM,QAAQ;AACvC,WAAS,gBAAgB,MAAM,SAAS;AACxC,QAAM,mBAAmB;;CAG3B,uBAA6B;AAC3B,QAAM,sBAAsB;AAC5B,WAAS,KAAK,MAAM,QAAQ;AAC5B,WAAS,KAAK,MAAM,SAAS;AAC7B,WAAS,gBAAgB,MAAM,QAAQ;AACvC,WAAS,gBAAgB,MAAM,SAAS;;CAG1C,OACE,mBACM;AACN,QAAM,OAAO,kBAAkB;AAE/B,MAAI,kBAAkB,IAAI,iBAAiB,CACzC,MAAK,cAAc;;CAwBvB,SAAS;AAGP,MACE,KAAK,aACJ,OAAO,WAAW,eAAe,OAAO,gBAAgB,KAAK,KAE9D,QAAO,IAAI;;;AAIb,SAAO,IAAI;;;;;;;mBAOI,KAAK,iBAAiB;;;;;;;cAO3B,IAAI,KAAK,aAAa,CAAC;;;;;;;;;YAjFlC,SAAS,EAAE,MAAM,SAAS,CAAC;YAK3B,aAAa;CAAE,SAAS;CAAO,SAAS;CAAM,CAAC;0BAjBjD,cAAc,eAAe"}
@@ -1,30 +1,32 @@
1
- import { Task } from '@lit/task';
2
- import { ReactiveController, ReactiveControllerHost } from 'lit';
1
+ import { Task } from "@lit/task";
2
+ import { ReactiveController, ReactiveControllerHost } from "lit";
3
+
4
+ //#region src/gui/PlaybackController.d.ts
3
5
  interface PlaybackHost extends HTMLElement, ReactiveControllerHost {
4
- currentTimeMs: number;
5
- durationMs: number;
6
- endTimeMs: number;
7
- frameTask: {
8
- run(): void;
9
- taskComplete: Promise<unknown>;
10
- };
11
- renderAudio?(fromMs: number, toMs: number): Promise<AudioBuffer>;
12
- waitForMediaDurations?(): Promise<void>;
13
- saveTimeToLocalStorage?(time: number): void;
14
- loadTimeFromLocalStorage?(): number | undefined;
15
- requestUpdate(property?: string): void;
16
- updateComplete: Promise<boolean>;
17
- playing: boolean;
18
- loop: boolean;
19
- play(): void;
20
- pause(): void;
21
- playbackController?: PlaybackController;
22
- parentTimegroup?: any;
23
- rootTimegroup?: any;
6
+ currentTimeMs: number;
7
+ durationMs: number;
8
+ endTimeMs: number;
9
+ frameTask: {
10
+ run(): void;
11
+ taskComplete: Promise<unknown>;
12
+ };
13
+ renderAudio?(fromMs: number, toMs: number): Promise<AudioBuffer>;
14
+ waitForMediaDurations?(): Promise<void>;
15
+ saveTimeToLocalStorage?(time: number): void;
16
+ loadTimeFromLocalStorage?(): number | undefined;
17
+ requestUpdate(property?: string): void;
18
+ updateComplete: Promise<boolean>;
19
+ playing: boolean;
20
+ loop: boolean;
21
+ play(): void;
22
+ pause(): void;
23
+ playbackController?: PlaybackController;
24
+ parentTimegroup?: any;
25
+ rootTimegroup?: any;
24
26
  }
25
- export type PlaybackControllerUpdateEvent = {
26
- property: "playing" | "loop" | "currentTimeMs";
27
- value: boolean | number;
27
+ type PlaybackControllerUpdateEvent = {
28
+ property: "playing" | "loop" | "currentTimeMs";
29
+ value: boolean | number;
28
30
  };
29
31
  /**
30
32
  * Manages playback state and audio-driven timing for root temporal elements
@@ -39,29 +41,31 @@ export type PlaybackControllerUpdateEvent = {
39
41
  *
40
42
  * Works with any temporal element (timegroups or standalone media) via PlaybackHost interface
41
43
  */
42
- export declare class PlaybackController implements ReactiveController {
43
- #private;
44
- seekTask: Task<readonly [number | undefined], number | undefined>;
45
- constructor(host: PlaybackHost);
46
- get currentTime(): number;
47
- set currentTime(time: number);
48
- get playing(): boolean;
49
- setPlaying(value: boolean): void;
50
- get loop(): boolean;
51
- setLoop(value: boolean): void;
52
- get currentTimeMs(): number;
53
- setCurrentTimeMs(value: number): void;
54
- play(): void;
55
- pause(): void;
56
- hostConnected(): void;
57
- hostDisconnected(): void;
58
- hostUpdated(): void;
59
- runThrottledFrameTask(): Promise<void>;
60
- addListener(listener: (event: PlaybackControllerUpdateEvent) => void): void;
61
- removeListener(listener: (event: PlaybackControllerUpdateEvent) => void): void;
62
- remove(): void;
63
- private maybeLoopPlayback;
64
- private stopPlayback;
65
- private startPlayback;
44
+ declare class PlaybackController implements ReactiveController {
45
+ #private;
46
+ seekTask: Task<readonly [number | undefined], number | undefined>;
47
+ constructor(host: PlaybackHost);
48
+ get currentTime(): number;
49
+ set currentTime(time: number);
50
+ get playing(): boolean;
51
+ setPlaying(value: boolean): void;
52
+ get loop(): boolean;
53
+ setLoop(value: boolean): void;
54
+ get currentTimeMs(): number;
55
+ setCurrentTimeMs(value: number): void;
56
+ play(): void;
57
+ pause(): void;
58
+ hostConnected(): void;
59
+ hostDisconnected(): void;
60
+ hostUpdated(): void;
61
+ runThrottledFrameTask(): Promise<void>;
62
+ addListener(listener: (event: PlaybackControllerUpdateEvent) => void): void;
63
+ removeListener(listener: (event: PlaybackControllerUpdateEvent) => void): void;
64
+ remove(): void;
65
+ private maybeLoopPlayback;
66
+ private stopPlayback;
67
+ private startPlayback;
66
68
  }
67
- export {};
69
+ //#endregion
70
+ export { PlaybackController };
71
+ //# sourceMappingURL=PlaybackController.d.ts.map