@videojs/spf 10.0.0-beta.3 → 10.0.0-beta.30

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 (580) hide show
  1. package/README.md +19 -38
  2. package/dist/default/core/actors/create-machine-actor.js +91 -0
  3. package/dist/default/core/actors/create-machine-actor.js.map +1 -0
  4. package/dist/default/core/actors/create-transition-actor.js +46 -0
  5. package/dist/default/core/actors/create-transition-actor.js.map +1 -0
  6. package/dist/default/core/composition/create-composition.js +85 -0
  7. package/dist/default/core/composition/create-composition.js.map +1 -0
  8. package/dist/default/core/composition/share-signals.js +39 -0
  9. package/dist/default/core/composition/share-signals.js.map +1 -0
  10. package/dist/default/core/machine.js +26 -0
  11. package/dist/default/core/machine.js.map +1 -0
  12. package/dist/default/core/reactors/create-machine-reactor.js +83 -0
  13. package/dist/default/core/reactors/create-machine-reactor.js.map +1 -0
  14. package/dist/default/core/signals/effect.js +41 -0
  15. package/dist/default/core/signals/effect.js.map +1 -0
  16. package/dist/default/core/signals/primitives.js +54 -0
  17. package/dist/default/core/signals/primitives.js.map +1 -0
  18. package/dist/default/core/signals/when.js +38 -0
  19. package/dist/default/core/signals/when.js.map +1 -0
  20. package/dist/default/core/tasks/delayed-reschedule.js +31 -0
  21. package/dist/default/core/tasks/delayed-reschedule.js.map +1 -0
  22. package/dist/default/core/tasks/task.js +321 -0
  23. package/dist/default/core/tasks/task.js.map +1 -0
  24. package/dist/default/dom.js +9 -0
  25. package/dist/default/hls-audio.js +3 -0
  26. package/dist/default/hls-background-video.js +3 -0
  27. package/dist/default/hls-video.js +4 -0
  28. package/dist/default/hls.js +8 -0
  29. package/dist/default/index.js +23 -0
  30. package/dist/default/index.js.map +1 -0
  31. package/dist/default/media/abr/quality-selection.js +21 -0
  32. package/dist/default/media/abr/quality-selection.js.map +1 -0
  33. package/dist/default/media/buffer/back-buffer.js +46 -0
  34. package/dist/default/media/buffer/back-buffer.js.map +1 -0
  35. package/dist/default/media/buffer/forward-buffer.js +119 -0
  36. package/dist/default/media/buffer/forward-buffer.js.map +1 -0
  37. package/dist/default/media/dom/capabilities.js +72 -0
  38. package/dist/default/media/dom/capabilities.js.map +1 -0
  39. package/dist/default/media/dom/mse/append-segment.js +60 -0
  40. package/dist/default/media/dom/mse/append-segment.js.map +1 -0
  41. package/dist/default/media/dom/mse/buffer-flusher.js +55 -0
  42. package/dist/default/media/dom/mse/buffer-flusher.js.map +1 -0
  43. package/dist/default/media/dom/mse/duration.js +95 -0
  44. package/dist/default/media/dom/mse/duration.js.map +1 -0
  45. package/dist/default/media/dom/mse/end-of-stream.js +20 -0
  46. package/dist/default/media/dom/mse/end-of-stream.js.map +1 -0
  47. package/dist/default/media/dom/mse/mediasource-setup.js +242 -0
  48. package/dist/default/media/dom/mse/mediasource-setup.js.map +1 -0
  49. package/dist/default/media/dom/screen.js +112 -0
  50. package/dist/default/media/dom/screen.js.map +1 -0
  51. package/dist/default/media/dom/text/resolve-vtt-segment.js +50 -0
  52. package/dist/default/media/dom/text/resolve-vtt-segment.js.map +1 -0
  53. package/dist/default/media/dom/text/text-track-slots.js +69 -0
  54. package/dist/default/media/dom/text/text-track-slots.js.map +1 -0
  55. package/dist/default/media/errors.js +69 -0
  56. package/dist/default/media/errors.js.map +1 -0
  57. package/dist/default/media/hls/parse-attributes.js +148 -0
  58. package/dist/default/media/hls/parse-attributes.js.map +1 -0
  59. package/dist/default/media/hls/parse-media-playlist.js +261 -0
  60. package/dist/default/media/hls/parse-media-playlist.js.map +1 -0
  61. package/dist/default/media/hls/parse-multivariant.js +234 -0
  62. package/dist/default/media/hls/parse-multivariant.js.map +1 -0
  63. package/dist/default/media/hls/reload-policy.js +71 -0
  64. package/dist/default/media/hls/reload-policy.js.map +1 -0
  65. package/dist/default/media/hls/resolve-url.js +11 -0
  66. package/dist/default/media/hls/resolve-url.js.map +1 -0
  67. package/dist/default/media/live-window.js +36 -0
  68. package/dist/default/media/live-window.js.map +1 -0
  69. package/dist/default/media/media-tracks/media-tracks.js +101 -0
  70. package/dist/default/media/media-tracks/media-tracks.js.map +1 -0
  71. package/dist/default/media/mp4/box.js +58 -0
  72. package/dist/default/media/mp4/box.js.map +1 -0
  73. package/dist/default/media/mp4/timestamp-origin.js +107 -0
  74. package/dist/default/media/mp4/timestamp-origin.js.map +1 -0
  75. package/dist/default/media/primitives/resolution.js +29 -0
  76. package/dist/default/media/primitives/resolution.js.map +1 -0
  77. package/dist/default/media/primitives/select-tracks.js +107 -0
  78. package/dist/default/media/primitives/select-tracks.js.map +1 -0
  79. package/dist/default/media/text/parse-vtt-timestamp-map.js +42 -0
  80. package/dist/default/media/text/parse-vtt-timestamp-map.js.map +1 -0
  81. package/dist/default/media/text/resolve-vtt-metadata.js +23 -0
  82. package/dist/default/media/text/resolve-vtt-metadata.js.map +1 -0
  83. package/dist/default/media/types/index.js +50 -0
  84. package/dist/default/media/types/index.js.map +1 -0
  85. package/dist/default/media/utils/cdn.js +56 -0
  86. package/dist/default/media/utils/cdn.js.map +1 -0
  87. package/dist/default/media/utils/preload.js +22 -0
  88. package/dist/default/media/utils/preload.js.map +1 -0
  89. package/dist/default/media/utils/track-selection.js +47 -0
  90. package/dist/default/media/utils/track-selection.js.map +1 -0
  91. package/dist/default/media/utils/tracks.js +144 -0
  92. package/dist/default/media/utils/tracks.js.map +1 -0
  93. package/dist/default/media-tracks.js +2 -0
  94. package/dist/default/mux-audio.js +3 -0
  95. package/dist/default/mux-background-video.js +3 -0
  96. package/dist/default/mux-video.js +3 -0
  97. package/dist/default/network/bandwidth-estimator.js +96 -0
  98. package/dist/default/network/bandwidth-estimator.js.map +1 -0
  99. package/dist/default/network/chunked-stream-iterable.js +49 -0
  100. package/dist/default/network/chunked-stream-iterable.js.map +1 -0
  101. package/dist/default/network/ewma.js +71 -0
  102. package/dist/default/network/ewma.js.map +1 -0
  103. package/dist/default/network/fetch.js +115 -0
  104. package/dist/default/network/fetch.js.map +1 -0
  105. package/dist/default/playback/actors/dom/segment-loader.js +249 -0
  106. package/dist/default/playback/actors/dom/segment-loader.js.map +1 -0
  107. package/dist/default/playback/actors/dom/source-buffer.js +139 -0
  108. package/dist/default/playback/actors/dom/source-buffer.js.map +1 -0
  109. package/dist/default/playback/actors/dom/text-tracks.js +46 -0
  110. package/dist/default/playback/actors/dom/text-tracks.js.map +1 -0
  111. package/dist/default/playback/actors/text-track-segment-loader.js +149 -0
  112. package/dist/default/playback/actors/text-track-segment-loader.js.map +1 -0
  113. package/dist/default/playback/adapters/hls-audio/adapter.js +186 -0
  114. package/dist/default/playback/adapters/hls-audio/adapter.js.map +1 -0
  115. package/dist/default/playback/adapters/hls-audio/media.js +9 -0
  116. package/dist/default/playback/adapters/hls-audio/media.js.map +1 -0
  117. package/dist/default/playback/adapters/hls-background-video/adapter.js +211 -0
  118. package/dist/default/playback/adapters/hls-background-video/adapter.js.map +1 -0
  119. package/dist/default/playback/adapters/hls-background-video/host.js +60 -0
  120. package/dist/default/playback/adapters/hls-background-video/host.js.map +1 -0
  121. package/dist/default/playback/adapters/hls-background-video/media.js +21 -0
  122. package/dist/default/playback/adapters/hls-background-video/media.js.map +1 -0
  123. package/dist/default/playback/adapters/hls-video/adapter.js +316 -0
  124. package/dist/default/playback/adapters/hls-video/adapter.js.map +1 -0
  125. package/dist/default/playback/adapters/hls-video/error-surface.js +51 -0
  126. package/dist/default/playback/adapters/hls-video/error-surface.js.map +1 -0
  127. package/dist/default/playback/adapters/hls-video/media-tracks.js +126 -0
  128. package/dist/default/playback/adapters/hls-video/media-tracks.js.map +1 -0
  129. package/dist/default/playback/adapters/hls-video/media.js +11 -0
  130. package/dist/default/playback/adapters/hls-video/media.js.map +1 -0
  131. package/dist/default/playback/adapters/mux-audio/media.js +26 -0
  132. package/dist/default/playback/adapters/mux-audio/media.js.map +1 -0
  133. package/dist/default/playback/adapters/mux-video/adapter.js +105 -0
  134. package/dist/default/playback/adapters/mux-video/adapter.js.map +1 -0
  135. package/dist/default/playback/adapters/mux-video/media.js +23 -0
  136. package/dist/default/playback/adapters/mux-video/media.js.map +1 -0
  137. package/dist/default/playback/behaviors/calculate-presentation-duration.js +36 -0
  138. package/dist/default/playback/behaviors/calculate-presentation-duration.js.map +1 -0
  139. package/dist/default/playback/behaviors/collect-errors.js +111 -0
  140. package/dist/default/playback/behaviors/collect-errors.js.map +1 -0
  141. package/dist/default/playback/behaviors/derive-cdn-priority.js +68 -0
  142. package/dist/default/playback/behaviors/derive-cdn-priority.js.map +1 -0
  143. package/dist/default/playback/behaviors/dom/airplay.js +211 -0
  144. package/dist/default/playback/behaviors/dom/airplay.js.map +1 -0
  145. package/dist/default/playback/behaviors/dom/apply-start-position.js +93 -0
  146. package/dist/default/playback/behaviors/dom/apply-start-position.js.map +1 -0
  147. package/dist/default/playback/behaviors/dom/end-of-stream.js +102 -0
  148. package/dist/default/playback/behaviors/dom/end-of-stream.js.map +1 -0
  149. package/dist/default/playback/behaviors/dom/load-segments.js +181 -0
  150. package/dist/default/playback/behaviors/dom/load-segments.js.map +1 -0
  151. package/dist/default/playback/behaviors/dom/recover-end-stall.js +77 -0
  152. package/dist/default/playback/behaviors/dom/recover-end-stall.js.map +1 -0
  153. package/dist/default/playback/behaviors/dom/seek-to-live-edge.js +132 -0
  154. package/dist/default/playback/behaviors/dom/seek-to-live-edge.js.map +1 -0
  155. package/dist/default/playback/behaviors/dom/setup-buffer-actors.js +205 -0
  156. package/dist/default/playback/behaviors/dom/setup-buffer-actors.js.map +1 -0
  157. package/dist/default/playback/behaviors/dom/setup-mediasource.js +114 -0
  158. package/dist/default/playback/behaviors/dom/setup-mediasource.js.map +1 -0
  159. package/dist/default/playback/behaviors/dom/setup-text-track-actors.js +40 -0
  160. package/dist/default/playback/behaviors/dom/setup-text-track-actors.js.map +1 -0
  161. package/dist/default/playback/behaviors/dom/sync-live-seekable-range.js +26 -0
  162. package/dist/default/playback/behaviors/dom/sync-live-seekable-range.js.map +1 -0
  163. package/dist/default/playback/behaviors/dom/sync-text-tracks.js +124 -0
  164. package/dist/default/playback/behaviors/dom/sync-text-tracks.js.map +1 -0
  165. package/dist/default/playback/behaviors/dom/track-current-time.js +52 -0
  166. package/dist/default/playback/behaviors/dom/track-current-time.js.map +1 -0
  167. package/dist/default/playback/behaviors/dom/track-load-triggers.js +94 -0
  168. package/dist/default/playback/behaviors/dom/track-load-triggers.js.map +1 -0
  169. package/dist/default/playback/behaviors/dom/track-playback-rate.js +37 -0
  170. package/dist/default/playback/behaviors/dom/track-playback-rate.js.map +1 -0
  171. package/dist/default/playback/behaviors/dom/track-player-resolution.js +57 -0
  172. package/dist/default/playback/behaviors/dom/track-player-resolution.js.map +1 -0
  173. package/dist/default/playback/behaviors/dom/track-screen-resolution.js +29 -0
  174. package/dist/default/playback/behaviors/dom/track-screen-resolution.js.map +1 -0
  175. package/dist/default/playback/behaviors/dom/update-mediasource-duration.js +113 -0
  176. package/dist/default/playback/behaviors/dom/update-mediasource-duration.js.map +1 -0
  177. package/dist/default/playback/behaviors/establish-start-media-time.js +197 -0
  178. package/dist/default/playback/behaviors/establish-start-media-time.js.map +1 -0
  179. package/dist/default/playback/behaviors/resolve-presentation.js +85 -0
  180. package/dist/default/playback/behaviors/resolve-presentation.js.map +1 -0
  181. package/dist/default/playback/behaviors/resolve-track.js +141 -0
  182. package/dist/default/playback/behaviors/resolve-track.js.map +1 -0
  183. package/dist/default/playback/behaviors/select-tracks.js +216 -0
  184. package/dist/default/playback/behaviors/select-tracks.js.map +1 -0
  185. package/dist/default/playback/behaviors/setup-failover-monitor.js +66 -0
  186. package/dist/default/playback/behaviors/setup-failover-monitor.js.map +1 -0
  187. package/dist/default/playback/behaviors/sync-preload.js +59 -0
  188. package/dist/default/playback/behaviors/sync-preload.js.map +1 -0
  189. package/dist/default/playback/behaviors/track-switching.js +391 -0
  190. package/dist/default/playback/behaviors/track-switching.js.map +1 -0
  191. package/dist/default/playback/engines/hls/engine-audio-only.js +98 -0
  192. package/dist/default/playback/engines/hls/engine-audio-only.js.map +1 -0
  193. package/dist/default/playback/engines/hls/engine-background-video.js +92 -0
  194. package/dist/default/playback/engines/hls/engine-background-video.js.map +1 -0
  195. package/dist/default/playback/engines/hls/engine.js +147 -0
  196. package/dist/default/playback/engines/hls/engine.js.map +1 -0
  197. package/dist/default/playback/primitives/error-messages.js +51 -0
  198. package/dist/default/playback/primitives/error-messages.js.map +1 -0
  199. package/dist/default/playback/primitives/failover-fetch.js +42 -0
  200. package/dist/default/playback/primitives/failover-fetch.js.map +1 -0
  201. package/dist/default/playback/primitives/head-peek.js +44 -0
  202. package/dist/default/playback/primitives/head-peek.js.map +1 -0
  203. package/dist/default/playback/primitives/live-window.js +66 -0
  204. package/dist/default/playback/primitives/live-window.js.map +1 -0
  205. package/dist/default/playback/primitives/relocation-pipelines.js +203 -0
  206. package/dist/default/playback/primitives/relocation-pipelines.js.map +1 -0
  207. package/dist/default/playback/primitives/report-track-conditions.js +86 -0
  208. package/dist/default/playback/primitives/report-track-conditions.js.map +1 -0
  209. package/dist/default/playback/primitives/segment-load-pipeline.js +96 -0
  210. package/dist/default/playback/primitives/segment-load-pipeline.js.map +1 -0
  211. package/dist/default/playback/primitives/selection-rules.js +86 -0
  212. package/dist/default/playback/primitives/selection-rules.js.map +1 -0
  213. package/dist/default/playback/primitives/text-segment-load-pipeline.js +37 -0
  214. package/dist/default/playback/primitives/text-segment-load-pipeline.js.map +1 -0
  215. package/dist/default/playback/primitives/track-types.js +61 -0
  216. package/dist/default/playback/primitives/track-types.js.map +1 -0
  217. package/dist/dev/core/actors/actor.d.ts +26 -0
  218. package/dist/dev/core/actors/actor.d.ts.map +1 -0
  219. package/dist/dev/core/actors/create-machine-actor.d.ts +128 -0
  220. package/dist/dev/core/actors/create-machine-actor.d.ts.map +1 -0
  221. package/dist/dev/core/actors/create-machine-actor.js +91 -0
  222. package/dist/dev/core/actors/create-machine-actor.js.map +1 -0
  223. package/dist/dev/core/actors/create-transition-actor.d.ts +41 -0
  224. package/dist/dev/core/actors/create-transition-actor.d.ts.map +1 -0
  225. package/dist/dev/core/actors/create-transition-actor.js +46 -0
  226. package/dist/dev/core/actors/create-transition-actor.js.map +1 -0
  227. package/dist/dev/core/composition/create-composition.d.ts +273 -0
  228. package/dist/dev/core/composition/create-composition.d.ts.map +1 -0
  229. package/dist/dev/core/composition/create-composition.js +85 -0
  230. package/dist/dev/core/composition/create-composition.js.map +1 -0
  231. package/dist/dev/core/composition/share-signals.d.ts +46 -0
  232. package/dist/dev/core/composition/share-signals.d.ts.map +1 -0
  233. package/dist/dev/core/composition/share-signals.js +39 -0
  234. package/dist/dev/core/composition/share-signals.js.map +1 -0
  235. package/dist/dev/core/machine.d.ts +21 -0
  236. package/dist/dev/core/machine.d.ts.map +1 -0
  237. package/dist/dev/core/machine.js +26 -0
  238. package/dist/dev/core/machine.js.map +1 -0
  239. package/dist/dev/core/reactors/create-machine-reactor.d.ts +93 -0
  240. package/dist/dev/core/reactors/create-machine-reactor.d.ts.map +1 -0
  241. package/dist/dev/core/reactors/create-machine-reactor.js +83 -0
  242. package/dist/dev/core/reactors/create-machine-reactor.js.map +1 -0
  243. package/dist/dev/core/signals/effect.d.ts +15 -0
  244. package/dist/dev/core/signals/effect.d.ts.map +1 -0
  245. package/dist/dev/core/signals/effect.js +41 -0
  246. package/dist/dev/core/signals/effect.js.map +1 -0
  247. package/dist/dev/core/signals/primitives.d.ts +46 -0
  248. package/dist/dev/core/signals/primitives.d.ts.map +1 -0
  249. package/dist/dev/core/signals/primitives.js +54 -0
  250. package/dist/dev/core/signals/primitives.js.map +1 -0
  251. package/dist/dev/core/signals/when.js +38 -0
  252. package/dist/dev/core/signals/when.js.map +1 -0
  253. package/dist/dev/core/tasks/delayed-reschedule.js +31 -0
  254. package/dist/dev/core/tasks/delayed-reschedule.js.map +1 -0
  255. package/dist/dev/core/tasks/task.d.ts +166 -0
  256. package/dist/dev/core/tasks/task.d.ts.map +1 -0
  257. package/dist/dev/core/tasks/task.js +321 -0
  258. package/dist/dev/core/tasks/task.js.map +1 -0
  259. package/dist/dev/dom.d.ts +9 -0
  260. package/dist/dev/dom.js +9 -0
  261. package/dist/dev/hls-audio.d.ts +3 -0
  262. package/dist/dev/hls-audio.js +3 -0
  263. package/dist/dev/hls-background-video.d.ts +4 -0
  264. package/dist/dev/hls-background-video.js +3 -0
  265. package/dist/dev/hls-video.d.ts +5 -0
  266. package/dist/dev/hls-video.js +4 -0
  267. package/dist/dev/hls.d.ts +9 -0
  268. package/dist/dev/hls.js +8 -0
  269. package/dist/dev/index.d.ts +24 -0
  270. package/dist/dev/index.d.ts.map +1 -0
  271. package/dist/dev/index.js +23 -0
  272. package/dist/dev/index.js.map +1 -0
  273. package/dist/dev/media/abr/quality-selection.d.ts +22 -0
  274. package/dist/dev/media/abr/quality-selection.d.ts.map +1 -0
  275. package/dist/dev/media/abr/quality-selection.js +21 -0
  276. package/dist/dev/media/abr/quality-selection.js.map +1 -0
  277. package/dist/dev/media/buffer/back-buffer.d.ts +14 -0
  278. package/dist/dev/media/buffer/back-buffer.d.ts.map +1 -0
  279. package/dist/dev/media/buffer/back-buffer.js +46 -0
  280. package/dist/dev/media/buffer/back-buffer.js.map +1 -0
  281. package/dist/dev/media/buffer/forward-buffer.d.ts +14 -0
  282. package/dist/dev/media/buffer/forward-buffer.d.ts.map +1 -0
  283. package/dist/dev/media/buffer/forward-buffer.js +119 -0
  284. package/dist/dev/media/buffer/forward-buffer.js.map +1 -0
  285. package/dist/dev/media/dom/capabilities.js +72 -0
  286. package/dist/dev/media/dom/capabilities.js.map +1 -0
  287. package/dist/dev/media/dom/mse/append-segment.d.ts +18 -0
  288. package/dist/dev/media/dom/mse/append-segment.d.ts.map +1 -0
  289. package/dist/dev/media/dom/mse/append-segment.js +60 -0
  290. package/dist/dev/media/dom/mse/append-segment.js.map +1 -0
  291. package/dist/dev/media/dom/mse/buffer-flusher.d.ts +24 -0
  292. package/dist/dev/media/dom/mse/buffer-flusher.d.ts.map +1 -0
  293. package/dist/dev/media/dom/mse/buffer-flusher.js +55 -0
  294. package/dist/dev/media/dom/mse/buffer-flusher.js.map +1 -0
  295. package/dist/dev/media/dom/mse/duration.js +95 -0
  296. package/dist/dev/media/dom/mse/duration.js.map +1 -0
  297. package/dist/dev/media/dom/mse/end-of-stream.js +20 -0
  298. package/dist/dev/media/dom/mse/end-of-stream.js.map +1 -0
  299. package/dist/dev/media/dom/mse/mediasource-setup.js +242 -0
  300. package/dist/dev/media/dom/mse/mediasource-setup.js.map +1 -0
  301. package/dist/dev/media/dom/screen.d.ts +7 -0
  302. package/dist/dev/media/dom/screen.d.ts.map +1 -0
  303. package/dist/dev/media/dom/screen.js +112 -0
  304. package/dist/dev/media/dom/screen.js.map +1 -0
  305. package/dist/dev/media/dom/text/resolve-vtt-segment.d.ts +6 -0
  306. package/dist/dev/media/dom/text/resolve-vtt-segment.d.ts.map +1 -0
  307. package/dist/dev/media/dom/text/resolve-vtt-segment.js +50 -0
  308. package/dist/dev/media/dom/text/resolve-vtt-segment.js.map +1 -0
  309. package/dist/dev/media/dom/text/text-track-slots.d.ts +30 -0
  310. package/dist/dev/media/dom/text/text-track-slots.d.ts.map +1 -0
  311. package/dist/dev/media/dom/text/text-track-slots.js +69 -0
  312. package/dist/dev/media/dom/text/text-track-slots.js.map +1 -0
  313. package/dist/dev/media/errors.d.ts +82 -0
  314. package/dist/dev/media/errors.d.ts.map +1 -0
  315. package/dist/dev/media/errors.js +69 -0
  316. package/dist/dev/media/errors.js.map +1 -0
  317. package/dist/dev/media/hls/parse-attributes.js +148 -0
  318. package/dist/dev/media/hls/parse-attributes.js.map +1 -0
  319. package/dist/dev/media/hls/parse-media-playlist.js +261 -0
  320. package/dist/dev/media/hls/parse-media-playlist.js.map +1 -0
  321. package/dist/dev/media/hls/parse-multivariant.js +234 -0
  322. package/dist/dev/media/hls/parse-multivariant.js.map +1 -0
  323. package/dist/dev/media/hls/reload-policy.js +71 -0
  324. package/dist/dev/media/hls/reload-policy.js.map +1 -0
  325. package/dist/dev/media/hls/resolve-url.js +11 -0
  326. package/dist/dev/media/hls/resolve-url.js.map +1 -0
  327. package/dist/dev/media/live-window.js +36 -0
  328. package/dist/dev/media/live-window.js.map +1 -0
  329. package/dist/dev/media/media-tracks/media-tracks.d.ts +51 -0
  330. package/dist/dev/media/media-tracks/media-tracks.d.ts.map +1 -0
  331. package/dist/dev/media/media-tracks/media-tracks.js +101 -0
  332. package/dist/dev/media/media-tracks/media-tracks.js.map +1 -0
  333. package/dist/dev/media/mp4/box.js +58 -0
  334. package/dist/dev/media/mp4/box.js.map +1 -0
  335. package/dist/dev/media/mp4/timestamp-origin.js +107 -0
  336. package/dist/dev/media/mp4/timestamp-origin.js.map +1 -0
  337. package/dist/dev/media/primitives/resolution.d.ts +24 -0
  338. package/dist/dev/media/primitives/resolution.d.ts.map +1 -0
  339. package/dist/dev/media/primitives/resolution.js +29 -0
  340. package/dist/dev/media/primitives/resolution.js.map +1 -0
  341. package/dist/dev/media/primitives/select-tracks.js +107 -0
  342. package/dist/dev/media/primitives/select-tracks.js.map +1 -0
  343. package/dist/dev/media/text/parse-vtt-timestamp-map.js +42 -0
  344. package/dist/dev/media/text/parse-vtt-timestamp-map.js.map +1 -0
  345. package/dist/dev/media/text/resolve-vtt-metadata.js +23 -0
  346. package/dist/dev/media/text/resolve-vtt-metadata.js.map +1 -0
  347. package/dist/dev/media/types/index.d.ts +377 -0
  348. package/dist/dev/media/types/index.d.ts.map +1 -0
  349. package/dist/dev/media/types/index.js +50 -0
  350. package/dist/dev/media/types/index.js.map +1 -0
  351. package/dist/dev/media/utils/cdn.d.ts +13 -0
  352. package/dist/dev/media/utils/cdn.d.ts.map +1 -0
  353. package/dist/dev/media/utils/cdn.js +56 -0
  354. package/dist/dev/media/utils/cdn.js.map +1 -0
  355. package/dist/dev/media/utils/preload.js +22 -0
  356. package/dist/dev/media/utils/preload.js.map +1 -0
  357. package/dist/dev/media/utils/track-selection.js +47 -0
  358. package/dist/dev/media/utils/track-selection.js.map +1 -0
  359. package/dist/dev/media/utils/tracks.js +144 -0
  360. package/dist/dev/media/utils/tracks.js.map +1 -0
  361. package/dist/dev/media-tracks.d.ts +3 -0
  362. package/dist/dev/media-tracks.js +2 -0
  363. package/dist/dev/mux-audio.d.ts +4 -0
  364. package/dist/dev/mux-audio.js +3 -0
  365. package/dist/dev/mux-background-video.d.ts +4 -0
  366. package/dist/dev/mux-background-video.js +3 -0
  367. package/dist/dev/mux-video.d.ts +4 -0
  368. package/dist/dev/mux-video.js +3 -0
  369. package/dist/dev/network/bandwidth-estimator.d.ts +50 -0
  370. package/dist/dev/network/bandwidth-estimator.d.ts.map +1 -0
  371. package/dist/dev/network/bandwidth-estimator.js +96 -0
  372. package/dist/dev/network/bandwidth-estimator.js.map +1 -0
  373. package/dist/dev/network/chunked-stream-iterable.js +49 -0
  374. package/dist/dev/network/chunked-stream-iterable.js.map +1 -0
  375. package/dist/dev/network/ewma.js +71 -0
  376. package/dist/dev/network/ewma.js.map +1 -0
  377. package/dist/dev/network/fetch.js +115 -0
  378. package/dist/dev/network/fetch.js.map +1 -0
  379. package/dist/dev/playback/actors/dom/segment-loader.d.ts +48 -0
  380. package/dist/dev/playback/actors/dom/segment-loader.d.ts.map +1 -0
  381. package/dist/dev/playback/actors/dom/segment-loader.js +249 -0
  382. package/dist/dev/playback/actors/dom/segment-loader.js.map +1 -0
  383. package/dist/dev/playback/actors/dom/source-buffer.d.ts +47 -0
  384. package/dist/dev/playback/actors/dom/source-buffer.d.ts.map +1 -0
  385. package/dist/dev/playback/actors/dom/source-buffer.js +139 -0
  386. package/dist/dev/playback/actors/dom/source-buffer.js.map +1 -0
  387. package/dist/dev/playback/actors/dom/text-tracks.d.ts +3 -0
  388. package/dist/dev/playback/actors/dom/text-tracks.js +46 -0
  389. package/dist/dev/playback/actors/dom/text-tracks.js.map +1 -0
  390. package/dist/dev/playback/actors/text-track-segment-loader.d.ts +54 -0
  391. package/dist/dev/playback/actors/text-track-segment-loader.d.ts.map +1 -0
  392. package/dist/dev/playback/actors/text-track-segment-loader.js +149 -0
  393. package/dist/dev/playback/actors/text-track-segment-loader.js.map +1 -0
  394. package/dist/dev/playback/actors/text-tracks.d.ts +33 -0
  395. package/dist/dev/playback/actors/text-tracks.d.ts.map +1 -0
  396. package/dist/dev/playback/adapters/hls-audio/adapter.d.ts +54 -0
  397. package/dist/dev/playback/adapters/hls-audio/adapter.d.ts.map +1 -0
  398. package/dist/dev/playback/adapters/hls-audio/adapter.js +186 -0
  399. package/dist/dev/playback/adapters/hls-audio/adapter.js.map +1 -0
  400. package/dist/dev/playback/adapters/hls-audio/media.d.ts +10 -0
  401. package/dist/dev/playback/adapters/hls-audio/media.d.ts.map +1 -0
  402. package/dist/dev/playback/adapters/hls-audio/media.js +9 -0
  403. package/dist/dev/playback/adapters/hls-audio/media.js.map +1 -0
  404. package/dist/dev/playback/adapters/hls-background-video/adapter.d.ts +77 -0
  405. package/dist/dev/playback/adapters/hls-background-video/adapter.d.ts.map +1 -0
  406. package/dist/dev/playback/adapters/hls-background-video/adapter.js +211 -0
  407. package/dist/dev/playback/adapters/hls-background-video/adapter.js.map +1 -0
  408. package/dist/dev/playback/adapters/hls-background-video/host.d.ts +38 -0
  409. package/dist/dev/playback/adapters/hls-background-video/host.d.ts.map +1 -0
  410. package/dist/dev/playback/adapters/hls-background-video/host.js +60 -0
  411. package/dist/dev/playback/adapters/hls-background-video/host.js.map +1 -0
  412. package/dist/dev/playback/adapters/hls-background-video/media.d.ts +20 -0
  413. package/dist/dev/playback/adapters/hls-background-video/media.d.ts.map +1 -0
  414. package/dist/dev/playback/adapters/hls-background-video/media.js +21 -0
  415. package/dist/dev/playback/adapters/hls-background-video/media.js.map +1 -0
  416. package/dist/dev/playback/adapters/hls-video/adapter.d.ts +63 -0
  417. package/dist/dev/playback/adapters/hls-video/adapter.d.ts.map +1 -0
  418. package/dist/dev/playback/adapters/hls-video/adapter.js +316 -0
  419. package/dist/dev/playback/adapters/hls-video/adapter.js.map +1 -0
  420. package/dist/dev/playback/adapters/hls-video/error-surface.d.ts +18 -0
  421. package/dist/dev/playback/adapters/hls-video/error-surface.d.ts.map +1 -0
  422. package/dist/dev/playback/adapters/hls-video/error-surface.js +51 -0
  423. package/dist/dev/playback/adapters/hls-video/error-surface.js.map +1 -0
  424. package/dist/dev/playback/adapters/hls-video/media-tracks.d.ts +22 -0
  425. package/dist/dev/playback/adapters/hls-video/media-tracks.d.ts.map +1 -0
  426. package/dist/dev/playback/adapters/hls-video/media-tracks.js +126 -0
  427. package/dist/dev/playback/adapters/hls-video/media-tracks.js.map +1 -0
  428. package/dist/dev/playback/adapters/hls-video/media.d.ts +10 -0
  429. package/dist/dev/playback/adapters/hls-video/media.d.ts.map +1 -0
  430. package/dist/dev/playback/adapters/hls-video/media.js +11 -0
  431. package/dist/dev/playback/adapters/hls-video/media.js.map +1 -0
  432. package/dist/dev/playback/adapters/mux-audio/media.d.ts +28 -0
  433. package/dist/dev/playback/adapters/mux-audio/media.d.ts.map +1 -0
  434. package/dist/dev/playback/adapters/mux-audio/media.js +26 -0
  435. package/dist/dev/playback/adapters/mux-audio/media.js.map +1 -0
  436. package/dist/dev/playback/adapters/mux-video/adapter.d.ts +34 -0
  437. package/dist/dev/playback/adapters/mux-video/adapter.d.ts.map +1 -0
  438. package/dist/dev/playback/adapters/mux-video/adapter.js +105 -0
  439. package/dist/dev/playback/adapters/mux-video/adapter.js.map +1 -0
  440. package/dist/dev/playback/adapters/mux-video/media.d.ts +24 -0
  441. package/dist/dev/playback/adapters/mux-video/media.d.ts.map +1 -0
  442. package/dist/dev/playback/adapters/mux-video/media.js +23 -0
  443. package/dist/dev/playback/adapters/mux-video/media.js.map +1 -0
  444. package/dist/dev/playback/behaviors/calculate-presentation-duration.d.ts +26 -0
  445. package/dist/dev/playback/behaviors/calculate-presentation-duration.d.ts.map +1 -0
  446. package/dist/dev/playback/behaviors/calculate-presentation-duration.js +36 -0
  447. package/dist/dev/playback/behaviors/calculate-presentation-duration.js.map +1 -0
  448. package/dist/dev/playback/behaviors/collect-errors.js +111 -0
  449. package/dist/dev/playback/behaviors/collect-errors.js.map +1 -0
  450. package/dist/dev/playback/behaviors/derive-cdn-priority.js +68 -0
  451. package/dist/dev/playback/behaviors/derive-cdn-priority.js.map +1 -0
  452. package/dist/dev/playback/behaviors/dom/airplay.js +211 -0
  453. package/dist/dev/playback/behaviors/dom/airplay.js.map +1 -0
  454. package/dist/dev/playback/behaviors/dom/apply-start-position.js +93 -0
  455. package/dist/dev/playback/behaviors/dom/apply-start-position.js.map +1 -0
  456. package/dist/dev/playback/behaviors/dom/end-of-stream.js +102 -0
  457. package/dist/dev/playback/behaviors/dom/end-of-stream.js.map +1 -0
  458. package/dist/dev/playback/behaviors/dom/load-segments.d.ts +72 -0
  459. package/dist/dev/playback/behaviors/dom/load-segments.d.ts.map +1 -0
  460. package/dist/dev/playback/behaviors/dom/load-segments.js +181 -0
  461. package/dist/dev/playback/behaviors/dom/load-segments.js.map +1 -0
  462. package/dist/dev/playback/behaviors/dom/recover-end-stall.js +77 -0
  463. package/dist/dev/playback/behaviors/dom/recover-end-stall.js.map +1 -0
  464. package/dist/dev/playback/behaviors/dom/seek-to-live-edge.js +132 -0
  465. package/dist/dev/playback/behaviors/dom/seek-to-live-edge.js.map +1 -0
  466. package/dist/dev/playback/behaviors/dom/setup-buffer-actors.js +205 -0
  467. package/dist/dev/playback/behaviors/dom/setup-buffer-actors.js.map +1 -0
  468. package/dist/dev/playback/behaviors/dom/setup-mediasource.js +114 -0
  469. package/dist/dev/playback/behaviors/dom/setup-mediasource.js.map +1 -0
  470. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.d.ts +28 -0
  471. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.d.ts.map +1 -0
  472. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.js +40 -0
  473. package/dist/dev/playback/behaviors/dom/setup-text-track-actors.js.map +1 -0
  474. package/dist/dev/playback/behaviors/dom/sync-live-seekable-range.js +26 -0
  475. package/dist/dev/playback/behaviors/dom/sync-live-seekable-range.js.map +1 -0
  476. package/dist/dev/playback/behaviors/dom/sync-text-tracks.js +124 -0
  477. package/dist/dev/playback/behaviors/dom/sync-text-tracks.js.map +1 -0
  478. package/dist/dev/playback/behaviors/dom/track-current-time.d.ts +33 -0
  479. package/dist/dev/playback/behaviors/dom/track-current-time.d.ts.map +1 -0
  480. package/dist/dev/playback/behaviors/dom/track-current-time.js +52 -0
  481. package/dist/dev/playback/behaviors/dom/track-current-time.js.map +1 -0
  482. package/dist/dev/playback/behaviors/dom/track-load-triggers.d.ts +47 -0
  483. package/dist/dev/playback/behaviors/dom/track-load-triggers.d.ts.map +1 -0
  484. package/dist/dev/playback/behaviors/dom/track-load-triggers.js +94 -0
  485. package/dist/dev/playback/behaviors/dom/track-load-triggers.js.map +1 -0
  486. package/dist/dev/playback/behaviors/dom/track-playback-rate.d.ts +33 -0
  487. package/dist/dev/playback/behaviors/dom/track-playback-rate.d.ts.map +1 -0
  488. package/dist/dev/playback/behaviors/dom/track-playback-rate.js +37 -0
  489. package/dist/dev/playback/behaviors/dom/track-playback-rate.js.map +1 -0
  490. package/dist/dev/playback/behaviors/dom/track-player-resolution.d.ts +8 -0
  491. package/dist/dev/playback/behaviors/dom/track-player-resolution.d.ts.map +1 -0
  492. package/dist/dev/playback/behaviors/dom/track-player-resolution.js +57 -0
  493. package/dist/dev/playback/behaviors/dom/track-player-resolution.js.map +1 -0
  494. package/dist/dev/playback/behaviors/dom/track-screen-resolution.js +29 -0
  495. package/dist/dev/playback/behaviors/dom/track-screen-resolution.js.map +1 -0
  496. package/dist/dev/playback/behaviors/dom/update-mediasource-duration.js +113 -0
  497. package/dist/dev/playback/behaviors/dom/update-mediasource-duration.js.map +1 -0
  498. package/dist/dev/playback/behaviors/establish-start-media-time.d.ts +36 -0
  499. package/dist/dev/playback/behaviors/establish-start-media-time.d.ts.map +1 -0
  500. package/dist/dev/playback/behaviors/establish-start-media-time.js +197 -0
  501. package/dist/dev/playback/behaviors/establish-start-media-time.js.map +1 -0
  502. package/dist/dev/playback/behaviors/resolve-presentation.d.ts +8 -0
  503. package/dist/dev/playback/behaviors/resolve-presentation.d.ts.map +1 -0
  504. package/dist/dev/playback/behaviors/resolve-presentation.js +85 -0
  505. package/dist/dev/playback/behaviors/resolve-presentation.js.map +1 -0
  506. package/dist/dev/playback/behaviors/resolve-track.js +141 -0
  507. package/dist/dev/playback/behaviors/resolve-track.js.map +1 -0
  508. package/dist/dev/playback/behaviors/select-tracks.d.ts +72 -0
  509. package/dist/dev/playback/behaviors/select-tracks.d.ts.map +1 -0
  510. package/dist/dev/playback/behaviors/select-tracks.js +216 -0
  511. package/dist/dev/playback/behaviors/select-tracks.js.map +1 -0
  512. package/dist/dev/playback/behaviors/setup-failover-monitor.d.ts +14 -0
  513. package/dist/dev/playback/behaviors/setup-failover-monitor.d.ts.map +1 -0
  514. package/dist/dev/playback/behaviors/setup-failover-monitor.js +66 -0
  515. package/dist/dev/playback/behaviors/setup-failover-monitor.js.map +1 -0
  516. package/dist/dev/playback/behaviors/sync-preload.js +59 -0
  517. package/dist/dev/playback/behaviors/sync-preload.js.map +1 -0
  518. package/dist/dev/playback/behaviors/track-switching.js +391 -0
  519. package/dist/dev/playback/behaviors/track-switching.js.map +1 -0
  520. package/dist/dev/playback/engines/hls/engine-audio-only.d.ts +173 -0
  521. package/dist/dev/playback/engines/hls/engine-audio-only.d.ts.map +1 -0
  522. package/dist/dev/playback/engines/hls/engine-audio-only.js +98 -0
  523. package/dist/dev/playback/engines/hls/engine-audio-only.js.map +1 -0
  524. package/dist/dev/playback/engines/hls/engine-background-video.d.ts +158 -0
  525. package/dist/dev/playback/engines/hls/engine-background-video.d.ts.map +1 -0
  526. package/dist/dev/playback/engines/hls/engine-background-video.js +92 -0
  527. package/dist/dev/playback/engines/hls/engine-background-video.js.map +1 -0
  528. package/dist/dev/playback/engines/hls/engine.d.ts +329 -0
  529. package/dist/dev/playback/engines/hls/engine.d.ts.map +1 -0
  530. package/dist/dev/playback/engines/hls/engine.js +147 -0
  531. package/dist/dev/playback/engines/hls/engine.js.map +1 -0
  532. package/dist/dev/playback/primitives/derive-start-media-time.d.ts +16 -0
  533. package/dist/dev/playback/primitives/derive-start-media-time.d.ts.map +1 -0
  534. package/dist/dev/playback/primitives/error-messages.js +51 -0
  535. package/dist/dev/playback/primitives/error-messages.js.map +1 -0
  536. package/dist/dev/playback/primitives/failover-fetch.js +42 -0
  537. package/dist/dev/playback/primitives/failover-fetch.js.map +1 -0
  538. package/dist/dev/playback/primitives/head-peek.js +44 -0
  539. package/dist/dev/playback/primitives/head-peek.js.map +1 -0
  540. package/dist/dev/playback/primitives/live-window.js +66 -0
  541. package/dist/dev/playback/primitives/live-window.js.map +1 -0
  542. package/dist/dev/playback/primitives/relocation-pipelines.js +203 -0
  543. package/dist/dev/playback/primitives/relocation-pipelines.js.map +1 -0
  544. package/dist/dev/playback/primitives/report-track-conditions.d.ts +11 -0
  545. package/dist/dev/playback/primitives/report-track-conditions.d.ts.map +1 -0
  546. package/dist/dev/playback/primitives/report-track-conditions.js +86 -0
  547. package/dist/dev/playback/primitives/report-track-conditions.js.map +1 -0
  548. package/dist/dev/playback/primitives/segment-load-pipeline.d.ts +2 -0
  549. package/dist/dev/playback/primitives/segment-load-pipeline.js +96 -0
  550. package/dist/dev/playback/primitives/segment-load-pipeline.js.map +1 -0
  551. package/dist/dev/playback/primitives/selection-rules.d.ts +38 -0
  552. package/dist/dev/playback/primitives/selection-rules.d.ts.map +1 -0
  553. package/dist/dev/playback/primitives/selection-rules.js +86 -0
  554. package/dist/dev/playback/primitives/selection-rules.js.map +1 -0
  555. package/dist/dev/playback/primitives/source-buffer-messages.d.ts +43 -0
  556. package/dist/dev/playback/primitives/source-buffer-messages.d.ts.map +1 -0
  557. package/dist/dev/playback/primitives/text-segment-load-pipeline.d.ts +65 -0
  558. package/dist/dev/playback/primitives/text-segment-load-pipeline.d.ts.map +1 -0
  559. package/dist/dev/playback/primitives/text-segment-load-pipeline.js +37 -0
  560. package/dist/dev/playback/primitives/text-segment-load-pipeline.js.map +1 -0
  561. package/dist/dev/playback/primitives/text-track-messages.d.ts +14 -0
  562. package/dist/dev/playback/primitives/text-track-messages.d.ts.map +1 -0
  563. package/dist/dev/playback/primitives/track-types.js +61 -0
  564. package/dist/dev/playback/primitives/track-types.js.map +1 -0
  565. package/package.json +63 -26
  566. package/dist/adapter-CMw-rvbk.js +0 -3512
  567. package/dist/adapter-CMw-rvbk.js.map +0 -1
  568. package/dist/adapter-l8iJN_GI.d.ts +0 -689
  569. package/dist/adapter-l8iJN_GI.d.ts.map +0 -1
  570. package/dist/dom/index.d.ts +0 -243
  571. package/dist/dom/index.d.ts.map +0 -1
  572. package/dist/dom/index.js +0 -38
  573. package/dist/dom/index.js.map +0 -1
  574. package/dist/dom/playback-engine/index.d.ts +0 -2
  575. package/dist/dom/playback-engine/index.js +0 -4
  576. package/dist/index.d.ts +0 -13
  577. package/dist/index.d.ts.map +0 -1
  578. package/dist/index.js +0 -3
  579. package/dist/src-DRsS_H80.js +0 -14
  580. package/dist/src-DRsS_H80.js.map +0 -1
@@ -0,0 +1,93 @@
1
+ import { Machine, MachineSnapshot } from "../machine.js";
2
+ //#region src/core/reactors/create-machine-reactor.d.ts
3
+ /**
4
+ * A reactive state-deriving function used in the `monitor` field.
5
+ *
6
+ * Returns the target state the reactor should be in. Any signals read inside
7
+ * the fn body create reactive dependencies — the framework re-evaluates it when
8
+ * those signals change and automatically calls `transition()` when the returned
9
+ * state differs from the current one.
10
+ */
11
+ type ReactorDeriveFn<State extends string> = () => State;
12
+ /**
13
+ * An effect function used in reactor `entry` and `effects` blocks.
14
+ *
15
+ * May return a cleanup function that runs before each re-evaluation and on
16
+ * state exit (including destroy).
17
+ */
18
+ type ReactorEffectFn = () => (() => void) | {
19
+ abort(): void;
20
+ } | void;
21
+ /**
22
+ * Per-state effect grouping for a single reactor state.
23
+ *
24
+ * - `entry` effects run once on state entry. The fn body is automatically
25
+ * untracked — no `untrack()` calls are needed inside. Use this for
26
+ * one-time setup: reading current values, attaching event listeners, etc.
27
+ * - `effects` run on state entry and re-run whenever a signal read inside
28
+ * the fn body changes. Use `untrack()` for reads you do not want to track.
29
+ * Use this for work that must stay in sync with reactive state.
30
+ *
31
+ * Both are optional; pass `{}` for states with no effects.
32
+ */
33
+ type ReactorStateDefinition = {
34
+ entry?: ReactorEffectFn | ReactorEffectFn[];
35
+ effects?: ReactorEffectFn | ReactorEffectFn[];
36
+ };
37
+ /**
38
+ * Full reactor definition passed to `createMachineReactor`.
39
+ *
40
+ * `State` is the set of domain-meaningful states. `'destroying'` and
41
+ * `'destroyed'` are always added by the framework as implicit terminal states —
42
+ * do not include them here.
43
+ */
44
+ type ReactorDefinition<State extends string> = {
45
+ /** Initial state. */
46
+ initial: State;
47
+ /**
48
+ * Reactive state derivation. Registered before per-state effects — the
49
+ * ordering guarantee ensures transitions fired here take effect before
50
+ * per-state effects re-evaluate in the same flush.
51
+ */
52
+ monitor?: ReactorDeriveFn<State> | ReactorDeriveFn<State>[];
53
+ /**
54
+ * Per-state effect groupings. Every valid state must be declared — pass `{}`
55
+ * for states with no effects. `entry` and `effects` each become independent
56
+ * `effect()` calls gated on that state, with their own cleanup lifecycles.
57
+ */
58
+ states: Record<State, ReactorStateDefinition>;
59
+ };
60
+ /** Live reactor instance returned by `createMachineReactor`. */
61
+ type Reactor<State extends string> = Machine<MachineSnapshot<State>>;
62
+ /**
63
+ * Creates a reactive Reactor from a declarative definition.
64
+ *
65
+ * A Reactor is driven by subscriptions to external signals rather than
66
+ * imperative messages. Each state holds an array of effect functions —
67
+ * every element becomes one independent `effect()` call gated on that state,
68
+ * with its own dependency tracking and cleanup lifecycle.
69
+ *
70
+ * `'destroying'` and `'destroyed'` are always implicit terminal states.
71
+ * `destroy()` transitions through both in sequence: `'destroying'` first (for
72
+ * potential async teardown in a future extension), then immediately `'destroyed'`
73
+ * for the synchronous base case. Active effect cleanups fire via disposal.
74
+ *
75
+ * @example
76
+ * const reactor = createMachineReactor({
77
+ * initial: 'waiting',
78
+ * monitor: () => srcSignal.get() ? 'active' : 'waiting',
79
+ * states: {
80
+ * active: {
81
+ * // entry: runs once on state entry; fn body is automatically untracked.
82
+ * entry: () => listen(el, 'play', handler),
83
+ * // effects: re-runs whenever tracked signals change.
84
+ * effects: () => { currentTimeSignal.get(); return cleanup; },
85
+ * },
86
+ * waiting: {},
87
+ * }
88
+ * });
89
+ */
90
+ declare function createMachineReactor<State extends string>(def: ReactorDefinition<State>): Reactor<State | 'destroying' | 'destroyed'>;
91
+ //#endregion
92
+ export { Reactor, ReactorDefinition, ReactorDeriveFn, ReactorEffectFn, ReactorStateDefinition, createMachineReactor };
93
+ //# sourceMappingURL=create-machine-reactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-machine-reactor.d.ts","names":[],"sources":["../../../../src/core/reactors/create-machine-reactor.ts"],"mappings":";;;;;;;;;;KAiBY,gBAAgB,8BAA8B;;;;;;;KAQ9C;EAAyC;;;;;;;;;;;;;;KAczC;EACV,QAAQ,kBAAkB;EAC1B,UAAU,kBAAkB;;;;;;;;;KAUlB,kBAAkB;;EAE5B,SAAS;;;;;;EAMT,UAAU,gBAAgB,SAAS,gBAAgB;;;;;;EAMnD,QAAQ,OAAO,OAAO;;;KAQZ,QAAQ,wBAAwB,QAAQ,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwCpD,qBAAqB,sBACnC,KAAK,kBAAkB,SACtB,QAAQ"}
@@ -0,0 +1,83 @@
1
+ import { untrack } from "../signals/primitives.js";
2
+ import { effect } from "../signals/effect.js";
3
+ import { createMachineCore } from "../machine.js";
4
+ //#region src/core/reactors/create-machine-reactor.ts
5
+ const toArray = (x) => x === void 0 ? [] : Array.isArray(x) ? x : [x];
6
+ /**
7
+ * Creates a reactive Reactor from a declarative definition.
8
+ *
9
+ * A Reactor is driven by subscriptions to external signals rather than
10
+ * imperative messages. Each state holds an array of effect functions —
11
+ * every element becomes one independent `effect()` call gated on that state,
12
+ * with its own dependency tracking and cleanup lifecycle.
13
+ *
14
+ * `'destroying'` and `'destroyed'` are always implicit terminal states.
15
+ * `destroy()` transitions through both in sequence: `'destroying'` first (for
16
+ * potential async teardown in a future extension), then immediately `'destroyed'`
17
+ * for the synchronous base case. Active effect cleanups fire via disposal.
18
+ *
19
+ * @example
20
+ * const reactor = createMachineReactor({
21
+ * initial: 'waiting',
22
+ * monitor: () => srcSignal.get() ? 'active' : 'waiting',
23
+ * states: {
24
+ * active: {
25
+ * // entry: runs once on state entry; fn body is automatically untracked.
26
+ * entry: () => listen(el, 'play', handler),
27
+ * // effects: re-runs whenever tracked signals change.
28
+ * effects: () => { currentTimeSignal.get(); return cleanup; },
29
+ * },
30
+ * waiting: {},
31
+ * }
32
+ * });
33
+ */
34
+ function createMachineReactor(def) {
35
+ const { snapshotSignal, getState, transition } = createMachineCore({ value: def.initial });
36
+ const effectDisposals = [];
37
+ const wrapResult = (result) => {
38
+ if (!result) return void 0;
39
+ if (typeof result === "function") return result;
40
+ return () => result.abort();
41
+ };
42
+ const untracked = (baseCall) => () => untrack(baseCall);
43
+ const isTerminal = (snapshot) => snapshot.value === "destroying" || snapshot.value === "destroyed";
44
+ const descriptors = [...toArray(def.monitor).map((fn) => ({
45
+ fn: () => {
46
+ const target = fn();
47
+ if (target !== getState()) transition(target);
48
+ },
49
+ shouldSkip: isTerminal
50
+ })), ...Object.entries(def.states).flatMap(([state, stateDef]) => {
51
+ const isNotState = (snapshot) => snapshot.value !== state;
52
+ return [...toArray(stateDef.entry).map((fn) => ({
53
+ fn,
54
+ shouldSkip: isNotState,
55
+ toFnCall: untracked
56
+ })), ...toArray(stateDef.effects).map((fn) => ({
57
+ fn,
58
+ shouldSkip: isNotState
59
+ }))];
60
+ })];
61
+ const toEffect = ({ fn, shouldSkip, toFnCall = (baseCall) => baseCall }) => effect(() => {
62
+ if (shouldSkip(snapshotSignal.get())) return;
63
+ const baseCall = () => fn();
64
+ return wrapResult(toFnCall(baseCall)());
65
+ });
66
+ effectDisposals.push(...descriptors.map(toEffect));
67
+ return {
68
+ get snapshot() {
69
+ return snapshotSignal;
70
+ },
71
+ destroy() {
72
+ const state = getState();
73
+ if (state === "destroying" || state === "destroyed") return;
74
+ transition("destroying");
75
+ transition("destroyed");
76
+ for (const dispose of effectDisposals) dispose();
77
+ }
78
+ };
79
+ }
80
+ //#endregion
81
+ export { createMachineReactor };
82
+
83
+ //# sourceMappingURL=create-machine-reactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-machine-reactor.js","names":[],"sources":["../../../../src/core/reactors/create-machine-reactor.ts"],"sourcesContent":["import type { Machine, MachineSnapshot } from '../machine';\nimport { createMachineCore } from '../machine';\nimport { effect } from '../signals/effect';\nimport { untrack } from '../signals/primitives';\n\n// =============================================================================\n// Definition types\n// =============================================================================\n\n/**\n * A reactive state-deriving function used in the `monitor` field.\n *\n * Returns the target state the reactor should be in. Any signals read inside\n * the fn body create reactive dependencies — the framework re-evaluates it when\n * those signals change and automatically calls `transition()` when the returned\n * state differs from the current one.\n */\nexport type ReactorDeriveFn<State extends string> = () => State;\n\n/**\n * An effect function used in reactor `entry` and `effects` blocks.\n *\n * May return a cleanup function that runs before each re-evaluation and on\n * state exit (including destroy).\n */\nexport type ReactorEffectFn = () => (() => void) | { abort(): void } | void;\n\n/**\n * Per-state effect grouping for a single reactor state.\n *\n * - `entry` effects run once on state entry. The fn body is automatically\n * untracked — no `untrack()` calls are needed inside. Use this for\n * one-time setup: reading current values, attaching event listeners, etc.\n * - `effects` run on state entry and re-run whenever a signal read inside\n * the fn body changes. Use `untrack()` for reads you do not want to track.\n * Use this for work that must stay in sync with reactive state.\n *\n * Both are optional; pass `{}` for states with no effects.\n */\nexport type ReactorStateDefinition = {\n entry?: ReactorEffectFn | ReactorEffectFn[];\n effects?: ReactorEffectFn | ReactorEffectFn[];\n};\n\n/**\n * Full reactor definition passed to `createMachineReactor`.\n *\n * `State` is the set of domain-meaningful states. `'destroying'` and\n * `'destroyed'` are always added by the framework as implicit terminal states —\n * do not include them here.\n */\nexport type ReactorDefinition<State extends string> = {\n /** Initial state. */\n initial: State;\n /**\n * Reactive state derivation. Registered before per-state effects — the\n * ordering guarantee ensures transitions fired here take effect before\n * per-state effects re-evaluate in the same flush.\n */\n monitor?: ReactorDeriveFn<State> | ReactorDeriveFn<State>[];\n /**\n * Per-state effect groupings. Every valid state must be declared — pass `{}`\n * for states with no effects. `entry` and `effects` each become independent\n * `effect()` calls gated on that state, with their own cleanup lifecycles.\n */\n states: Record<State, ReactorStateDefinition>;\n};\n\n// =============================================================================\n// Live reactor interface\n// =============================================================================\n\n/** Live reactor instance returned by `createMachineReactor`. */\nexport type Reactor<State extends string> = Machine<MachineSnapshot<State>>;\n\n// =============================================================================\n// Implementation helpers\n// =============================================================================\n\nconst toArray = <T>(x: T | T[] | undefined): T[] => (x === undefined ? [] : Array.isArray(x) ? x : [x]);\n\n// =============================================================================\n// Implementation\n// =============================================================================\n\n/**\n * Creates a reactive Reactor from a declarative definition.\n *\n * A Reactor is driven by subscriptions to external signals rather than\n * imperative messages. Each state holds an array of effect functions —\n * every element becomes one independent `effect()` call gated on that state,\n * with its own dependency tracking and cleanup lifecycle.\n *\n * `'destroying'` and `'destroyed'` are always implicit terminal states.\n * `destroy()` transitions through both in sequence: `'destroying'` first (for\n * potential async teardown in a future extension), then immediately `'destroyed'`\n * for the synchronous base case. Active effect cleanups fire via disposal.\n *\n * @example\n * const reactor = createMachineReactor({\n * initial: 'waiting',\n * monitor: () => srcSignal.get() ? 'active' : 'waiting',\n * states: {\n * active: {\n * // entry: runs once on state entry; fn body is automatically untracked.\n * entry: () => listen(el, 'play', handler),\n * // effects: re-runs whenever tracked signals change.\n * effects: () => { currentTimeSignal.get(); return cleanup; },\n * },\n * waiting: {},\n * }\n * });\n */\nexport function createMachineReactor<State extends string>(\n def: ReactorDefinition<State>\n): Reactor<State | 'destroying' | 'destroyed'> {\n type FullState = State | 'destroying' | 'destroyed';\n\n const { snapshotSignal, getState, transition } = createMachineCore<FullState, MachineSnapshot<FullState>>({\n value: def.initial as FullState,\n });\n\n const effectDisposals: Array<() => void> = [];\n\n const wrapResult = (result: ReturnType<ReactorEffectFn>) => {\n if (!result) return undefined;\n if (typeof result === 'function') return result;\n return () => result.abort();\n };\n\n type EffectCall = () => ReturnType<ReactorEffectFn>;\n\n type EffectDescriptor = {\n fn: ReactorEffectFn;\n shouldSkip: (snapshot: { value: FullState }) => boolean;\n toFnCall?: (baseCall: EffectCall) => EffectCall;\n };\n\n const untracked: EffectDescriptor['toFnCall'] = (baseCall) => () => untrack(baseCall);\n\n const isTerminal = (snapshot: { value: FullState }) =>\n snapshot.value === 'destroying' || snapshot.value === 'destroyed';\n\n // `monitor` descriptors are built first — the ordering guarantee ensures\n // transitions they trigger take effect before per-state effects re-evaluate\n // in the same flush. See the comment on effect registration order in the\n // previous implementation for full details.\n const descriptors: EffectDescriptor[] = [\n ...toArray(def.monitor).map((fn) => ({\n fn: () => {\n const target = fn();\n if (target !== (getState() as State)) transition(target as FullState);\n },\n shouldSkip: isTerminal,\n })),\n ...(Object.entries(def.states) as Array<[State, ReactorStateDefinition]>).flatMap(([state, stateDef]) => {\n const isNotState = (snapshot: { value: FullState }) => snapshot.value !== state;\n return [\n ...toArray(stateDef.entry).map((fn) => ({ fn, shouldSkip: isNotState, toFnCall: untracked })),\n ...toArray(stateDef.effects).map((fn) => ({ fn, shouldSkip: isNotState })),\n ];\n }),\n ];\n\n const toEffect = ({ fn, shouldSkip, toFnCall = (baseCall) => baseCall }: EffectDescriptor) =>\n effect(() => {\n const snapshot = snapshotSignal.get();\n if (shouldSkip(snapshot)) return;\n const baseCall = () => fn();\n return wrapResult(toFnCall(baseCall)());\n });\n\n effectDisposals.push(...descriptors.map(toEffect));\n\n return {\n get snapshot() {\n return snapshotSignal;\n },\n\n destroy(): void {\n const state = getState();\n if (state === 'destroying' || state === 'destroyed') return;\n // Two-step teardown: transition through 'destroying' first to leave room\n // for async teardown in a future extension, then immediately 'destroyed'\n // for the synchronous base case. Active effect cleanups fire via disposal.\n transition('destroying');\n transition('destroyed');\n for (const dispose of effectDisposals) dispose();\n },\n };\n}\n"],"mappings":";;;;AA+EA,MAAM,WAAc,MAAiC,MAAM,KAAA,IAAY,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCrG,SAAgB,qBACd,KAC6C;CAG7C,MAAM,EAAE,gBAAgB,UAAU,eAAe,kBAAyD,EACxG,OAAO,IAAI,QACb,CAAC;CAED,MAAM,kBAAqC,CAAC;CAE5C,MAAM,cAAc,WAAwC;EAC1D,IAAI,CAAC,QAAQ,OAAO,KAAA;EACpB,IAAI,OAAO,WAAW,YAAY,OAAO;EACzC,aAAa,OAAO,MAAM;CAC5B;CAUA,MAAM,aAA2C,mBAAmB,QAAQ,QAAQ;CAEpF,MAAM,cAAc,aAClB,SAAS,UAAU,gBAAgB,SAAS,UAAU;CAMxD,MAAM,cAAkC,CACtC,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,QAAQ;EACnC,UAAU;GACR,MAAM,SAAS,GAAG;GAClB,IAAI,WAAY,SAAS,GAAa,WAAW,MAAmB;EACtE;EACA,YAAY;CACd,EAAE,GACF,GAAI,OAAO,QAAQ,IAAI,MAAM,CAAC,CAA4C,SAAS,CAAC,OAAO,cAAc;EACvG,MAAM,cAAc,aAAmC,SAAS,UAAU;EAC1E,OAAO,CACL,GAAG,QAAQ,SAAS,KAAK,CAAC,CAAC,KAAK,QAAQ;GAAE;GAAI,YAAY;GAAY,UAAU;EAAU,EAAE,GAC5F,GAAG,QAAQ,SAAS,OAAO,CAAC,CAAC,KAAK,QAAQ;GAAE;GAAI,YAAY;EAAW,EAAE,CAC3E;CACF,CAAC,CACH;CAEA,MAAM,YAAY,EAAE,IAAI,YAAY,YAAY,aAAa,eAC3D,aAAa;EAEX,IAAI,WADa,eAAe,IACV,CAAC,GAAG;EAC1B,MAAM,iBAAiB,GAAG;EAC1B,OAAO,WAAW,SAAS,QAAQ,CAAC,CAAC,CAAC;CACxC,CAAC;CAEH,gBAAgB,KAAK,GAAG,YAAY,IAAI,QAAQ,CAAC;CAEjD,OAAO;EACL,IAAI,WAAW;GACb,OAAO;EACT;EAEA,UAAgB;GACd,MAAM,QAAQ,SAAS;GACvB,IAAI,UAAU,gBAAgB,UAAU,aAAa;GAIrD,WAAW,YAAY;GACvB,WAAW,WAAW;GACtB,KAAK,MAAM,WAAW,iBAAiB,QAAQ;EACjD;CACF;AACF"}
@@ -0,0 +1,15 @@
1
+ //#region src/core/signals/effect.d.ts
2
+ /**
3
+ * Run a side effect whenever its signal dependencies change.
4
+ *
5
+ * Executes immediately (synchronous initial run), then re-runs on the next
6
+ * microtask after any dependency changes. If the callback returns a function,
7
+ * it is called before each re-run and when the effect is stopped — the same
8
+ * cleanup contract as Preact Signals, Maverick Signals, and Svelte 5 $effect.
9
+ *
10
+ * Returns a cleanup function that stops the effect.
11
+ */
12
+ declare function effect(fn: () => (() => void) | void): () => void;
13
+ //#endregion
14
+ export { effect };
15
+ //# sourceMappingURL=effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect.d.ts","names":[],"sources":["../../../../src/core/signals/effect.ts"],"mappings":";;;;;;;;;;;iBA8BgB,OAAO"}
@@ -0,0 +1,41 @@
1
+ import { Signal } from "signal-polyfill";
2
+ //#region src/core/signals/effect.ts
3
+ const pending = /* @__PURE__ */ new Set();
4
+ const watcher = new Signal.subtle.Watcher(() => {
5
+ queueMicrotask(runPending);
6
+ });
7
+ function runPending() {
8
+ for (const c of watcher.getPending()) pending.add(c);
9
+ watcher.watch();
10
+ for (const c of pending) {
11
+ pending.delete(c);
12
+ c.get();
13
+ }
14
+ }
15
+ /**
16
+ * Run a side effect whenever its signal dependencies change.
17
+ *
18
+ * Executes immediately (synchronous initial run), then re-runs on the next
19
+ * microtask after any dependency changes. If the callback returns a function,
20
+ * it is called before each re-run and when the effect is stopped — the same
21
+ * cleanup contract as Preact Signals, Maverick Signals, and Svelte 5 $effect.
22
+ *
23
+ * Returns a cleanup function that stops the effect.
24
+ */
25
+ function effect(fn) {
26
+ let cleanup;
27
+ const c = new Signal.Computed(() => {
28
+ if (typeof cleanup === "function") cleanup();
29
+ cleanup = fn();
30
+ });
31
+ watcher.watch(c);
32
+ c.get();
33
+ return () => {
34
+ watcher.unwatch(c);
35
+ if (typeof cleanup === "function") cleanup();
36
+ };
37
+ }
38
+ //#endregion
39
+ export { effect };
40
+
41
+ //# sourceMappingURL=effect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect.js","names":[],"sources":["../../../../src/core/signals/effect.ts"],"sourcesContent":["import { Signal } from 'signal-polyfill';\n\n// Computeds waiting to re-run after their dependencies changed.\nconst pending = new Set<Signal.Computed<void>>();\n\nconst watcher = new Signal.subtle.Watcher(() => {\n queueMicrotask(runPending);\n});\n\nfunction runPending() {\n for (const c of watcher.getPending()) {\n pending.add(c as Signal.Computed<void>);\n }\n watcher.watch(); // re-arm before running effects, in case they write signals\n for (const c of pending) {\n pending.delete(c);\n c.get(); // re-run the effect body\n }\n}\n\n/**\n * Run a side effect whenever its signal dependencies change.\n *\n * Executes immediately (synchronous initial run), then re-runs on the next\n * microtask after any dependency changes. If the callback returns a function,\n * it is called before each re-run and when the effect is stopped — the same\n * cleanup contract as Preact Signals, Maverick Signals, and Svelte 5 $effect.\n *\n * Returns a cleanup function that stops the effect.\n */\nexport function effect(fn: () => (() => void) | void): () => void {\n let cleanup: (() => void) | void;\n const c = new Signal.Computed(() => {\n if (typeof cleanup === 'function') cleanup();\n cleanup = fn();\n });\n watcher.watch(c);\n c.get(); // initial run\n return () => {\n watcher.unwatch(c);\n if (typeof cleanup === 'function') cleanup();\n };\n}\n"],"mappings":";;AAGA,MAAM,0BAAU,IAAI,IAA2B;AAE/C,MAAM,UAAU,IAAI,OAAO,OAAO,cAAc;CAC9C,eAAe,UAAU;AAC3B,CAAC;AAED,SAAS,aAAa;CACpB,KAAK,MAAM,KAAK,QAAQ,WAAW,GACjC,QAAQ,IAAI,CAA0B;CAExC,QAAQ,MAAM;CACd,KAAK,MAAM,KAAK,SAAS;EACvB,QAAQ,OAAO,CAAC;EAChB,EAAE,IAAI;CACR;AACF;;;;;;;;;;;AAYA,SAAgB,OAAO,IAA2C;CAChE,IAAI;CACJ,MAAM,IAAI,IAAI,OAAO,eAAe;EAClC,IAAI,OAAO,YAAY,YAAY,QAAQ;EAC3C,UAAU,GAAG;CACf,CAAC;CACD,QAAQ,MAAM,CAAC;CACf,EAAE,IAAI;CACN,aAAa;EACX,QAAQ,QAAQ,CAAC;EACjB,IAAI,OAAO,YAAY,YAAY,QAAQ;CAC7C;AACF"}
@@ -0,0 +1,46 @@
1
+ import { Signal } from "signal-polyfill";
2
+ //#region src/core/signals/primitives.d.ts
3
+ /** Read a signal value without tracking it as a dependency. */
4
+ declare const untrack: <T>(fn: () => T) => T;
5
+ /** A writable reactive value (read + write). */
6
+ type Signal$1<T> = Signal.State<T>;
7
+ /** A derived reactive value that re-evaluates when its dependencies change (read-only). */
8
+ type Computed<T> = Signal.Computed<T>;
9
+ /** A read-only view of a reactive value. */
10
+ type ReadonlySignal<T> = Omit<Signal.State<T>, 'set'>;
11
+ interface SignalOptions<T> {
12
+ equals?: (t: T, t2: T) => boolean;
13
+ }
14
+ /** Create a writable reactive value. */
15
+ declare function signal<T>(initialValue: T, options?: SignalOptions<T>): Signal$1<T>;
16
+ /** Create a computed reactive value. */
17
+ declare function computed<T>(fn: () => T, options?: SignalOptions<T>): Computed<T>;
18
+ /**
19
+ * Update a writable signal. Two forms:
20
+ *
21
+ * - **Updater function** `(current) => next`. Works for any signal type,
22
+ * including `Signal<T | undefined>` — handle undefined in the updater.
23
+ * - **Partial object** to merge into the current state. Requires
24
+ * `T extends object`.
25
+ *
26
+ * @example
27
+ * update(state, { playbackRate: 2 });
28
+ * update(state, (s) => ({ ...s, count: s.count + 1 }));
29
+ * update(maybeUndefinedSignal, (current) => current ?? defaultValue);
30
+ */
31
+ declare function update<T>(signal: Signal$1<T>, updater: (current: T) => T): void;
32
+ declare function update<T extends object>(signal: Signal$1<T>, updater: Partial<T>): void;
33
+ /**
34
+ * Read every signal in a map and return a plain object snapshot. Each read
35
+ * tracks in the surrounding Computed/Effect — equivalent to calling `.get()`
36
+ * on a single `Signal<S>` over the merged shape.
37
+ *
38
+ * Convenience for behaviors that pass whole state/context snapshots to pure
39
+ * helpers; prefer per-field reads when only a few fields are needed.
40
+ */
41
+ declare function snapshot<M extends Record<string, ReadonlySignal<unknown>>>(map: M): { [K in keyof M]: M[K] extends {
42
+ get(): infer V;
43
+ } ? V : never; };
44
+ //#endregion
45
+ export { Computed, ReadonlySignal, Signal$1 as Signal, SignalOptions, computed, signal, snapshot, untrack, update };
46
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","names":[],"sources":["../../../../src/core/signals/primitives.ts"],"mappings":";;;cAGa,UAAU,GAAG,UAAU,MAAM;;KAqB9B,SAAO,KAAK,OAAS,MAAM;;KAG3B,SAAS,KAAK,OAAS,SAAS;;KAGhC,eAAe,KAAK,KAAK,OAAS,MAAM;UAEnC,cAAc;EAC7B,UAAU,GAAG,GAAG,IAAI;;;iBAIN,OAAO,GAAG,cAAc,GAAG,UAAU,cAAc,KAAK,SAAO;;iBAK/D,SAAS,GAAG,UAAU,GAAG,UAAU,cAAc,KAAK,SAAS;;;;;;;;;;;;;;iBAiB/D,OAAO,GAAG,QAAQ,SAAO,IAAI,UAAU,SAAS,MAAM;iBACtD,OAAO,kBAAkB,QAAQ,SAAO,IAAI,SAAS,QAAQ;;;;;;;;;iBAqC7D,SAAS,UAAU,eAAe,0BAChD,KAAK,OACD,WAAW,IAAI,EAAE;EAAa,aAAa;IAAM"}
@@ -0,0 +1,54 @@
1
+ import { Signal } from "signal-polyfill";
2
+ //#region src/core/signals/primitives.ts
3
+ /** Read a signal value without tracking it as a dependency. */
4
+ const untrack = Signal.subtle.untrack;
5
+ /**
6
+ * Read a signal's current value without tracking it as a dependency. Sugar
7
+ * for `untrack(() => signal.get())` to reduce boilerplate at single-read
8
+ * sites. Structurally typed to accept any signal-like (Signal, Computed,
9
+ * ReadonlySignal).
10
+ *
11
+ * Accepts an optional `transform` to project the value in the same call;
12
+ * the default is the identity function so the single-arg form returns `T`
13
+ * unchanged.
14
+ *
15
+ * @example
16
+ * const value = peek(someSignal);
17
+ * const id = peek(presentationSignal, (p) => p?.id);
18
+ */
19
+ function peek(source, transform = (v) => v) {
20
+ return untrack(() => transform(source.get()));
21
+ }
22
+ /** Create a writable reactive value. */
23
+ function signal(initialValue, options) {
24
+ return new Signal.State(initialValue, options);
25
+ }
26
+ /** Create a computed reactive value. */
27
+ function computed(fn, options) {
28
+ return new Signal.Computed(fn, options);
29
+ }
30
+ function update(signal, updater) {
31
+ const current = untrack(() => signal.get());
32
+ if (typeof updater === "function") signal.set(updater(current));
33
+ else signal.set({
34
+ ...current,
35
+ ...updater
36
+ });
37
+ }
38
+ /**
39
+ * Read every signal in a map and return a plain object snapshot. Each read
40
+ * tracks in the surrounding Computed/Effect — equivalent to calling `.get()`
41
+ * on a single `Signal<S>` over the merged shape.
42
+ *
43
+ * Convenience for behaviors that pass whole state/context snapshots to pure
44
+ * helpers; prefer per-field reads when only a few fields are needed.
45
+ */
46
+ function snapshot(map) {
47
+ const out = {};
48
+ for (const key in map) out[key] = map[key].get();
49
+ return out;
50
+ }
51
+ //#endregion
52
+ export { computed, peek, signal, snapshot, untrack, update };
53
+
54
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","names":["SignalNS"],"sources":["../../../../src/core/signals/primitives.ts"],"sourcesContent":["import { Signal as SignalNS } from 'signal-polyfill';\n\n/** Read a signal value without tracking it as a dependency. */\nexport const untrack: <T>(fn: () => T) => T = SignalNS.subtle.untrack;\n\n/**\n * Read a signal's current value without tracking it as a dependency. Sugar\n * for `untrack(() => signal.get())` to reduce boilerplate at single-read\n * sites. Structurally typed to accept any signal-like (Signal, Computed,\n * ReadonlySignal).\n *\n * Accepts an optional `transform` to project the value in the same call;\n * the default is the identity function so the single-arg form returns `T`\n * unchanged.\n *\n * @example\n * const value = peek(someSignal);\n * const id = peek(presentationSignal, (p) => p?.id);\n */\nexport function peek<T, R = T>(source: { get(): T }, transform: (value: T) => R = (v: T) => v as unknown as R): R {\n return untrack(() => transform(source.get()));\n}\n\n/** A writable reactive value (read + write). */\nexport type Signal<T> = SignalNS.State<T>;\n\n/** A derived reactive value that re-evaluates when its dependencies change (read-only). */\nexport type Computed<T> = SignalNS.Computed<T>;\n\n/** A read-only view of a reactive value. */\nexport type ReadonlySignal<T> = Omit<SignalNS.State<T>, 'set'>;\n\nexport interface SignalOptions<T> {\n equals?: (t: T, t2: T) => boolean;\n}\n\n/** Create a writable reactive value. */\nexport function signal<T>(initialValue: T, options?: SignalOptions<T>): Signal<T> {\n return new SignalNS.State(initialValue, options as SignalNS.Options<T>);\n}\n\n/** Create a computed reactive value. */\nexport function computed<T>(fn: () => T, options?: SignalOptions<T>): Computed<T> {\n return new SignalNS.Computed(fn, options as SignalNS.Options<T>);\n}\n\n/**\n * Update a writable signal. Two forms:\n *\n * - **Updater function** `(current) => next`. Works for any signal type,\n * including `Signal<T | undefined>` — handle undefined in the updater.\n * - **Partial object** to merge into the current state. Requires\n * `T extends object`.\n *\n * @example\n * update(state, { playbackRate: 2 });\n * update(state, (s) => ({ ...s, count: s.count + 1 }));\n * update(maybeUndefinedSignal, (current) => current ?? defaultValue);\n */\nexport function update<T>(signal: Signal<T>, updater: (current: T) => T): void;\nexport function update<T extends object>(signal: Signal<T>, updater: Partial<T>): void;\nexport function update<T>(signal: Signal<T>, updater: ((current: T) => T) | object): void {\n const current = untrack(() => signal.get());\n if (typeof updater === 'function') {\n signal.set((updater as (current: T) => T)(current));\n } else {\n // Partial<T> form — `T extends object` enforced by the public overload.\n signal.set({ ...(current as object), ...updater } as T);\n }\n}\n\n/**\n * Equality comparator for objects with an optional `id` field. Designed for\n * use as a `computed` `equals` option when reacting to identity changes\n * (Ham-shaped objects, JSON-API-shaped resources) while filtering internal\n * updates that preserve the id.\n *\n * Handles undefined inputs symmetrically: both undefined → equal; one\n * undefined → different.\n *\n * @example\n * const presentationById = computed(() => state.presentation.get(), {\n * equals: equalsById,\n * });\n */\nexport function equalsById<T extends { id?: string }>(a: T | undefined, b: T | undefined): boolean {\n return a?.id === b?.id;\n}\n\n/**\n * Read every signal in a map and return a plain object snapshot. Each read\n * tracks in the surrounding Computed/Effect — equivalent to calling `.get()`\n * on a single `Signal<S>` over the merged shape.\n *\n * Convenience for behaviors that pass whole state/context snapshots to pure\n * helpers; prefer per-field reads when only a few fields are needed.\n */\nexport function snapshot<M extends Record<string, ReadonlySignal<unknown>>>(\n map: M\n): { [K in keyof M]: M[K] extends { get(): infer V } ? V : never } {\n const out = {} as { [K in keyof M]: M[K] extends { get(): infer V } ? V : never };\n for (const key in map) {\n out[key] = map[key]!.get() as never;\n }\n return out;\n}\n"],"mappings":";;;AAGA,MAAa,UAAiCA,OAAS,OAAO;;;;;;;;;;;;;;;AAgB9D,SAAgB,KAAe,QAAsB,aAA8B,MAAS,GAAsB;CAChH,OAAO,cAAc,UAAU,OAAO,IAAI,CAAC,CAAC;AAC9C;;AAgBA,SAAgB,OAAU,cAAiB,SAAuC;CAChF,OAAO,IAAIA,OAAS,MAAM,cAAc,OAA8B;AACxE;;AAGA,SAAgB,SAAY,IAAa,SAAyC;CAChF,OAAO,IAAIA,OAAS,SAAS,IAAI,OAA8B;AACjE;AAiBA,SAAgB,OAAU,QAAmB,SAA6C;CACxF,MAAM,UAAU,cAAc,OAAO,IAAI,CAAC;CAC1C,IAAI,OAAO,YAAY,YACrB,OAAO,IAAK,QAA8B,OAAO,CAAC;MAGlD,OAAO,IAAI;EAAE,GAAI;EAAoB,GAAG;CAAQ,CAAM;AAE1D;;;;;;;;;AA4BA,SAAgB,SACd,KACiE;CACjE,MAAM,MAAM,CAAC;CACb,KAAK,MAAM,OAAO,KAChB,IAAI,OAAO,IAAI,IAAI,CAAE,IAAI;CAE3B,OAAO;AACT"}
@@ -0,0 +1,38 @@
1
+ import { effect } from "./effect.js";
2
+ //#region src/core/signals/when.ts
3
+ /**
4
+ * Resolve once `condition` returns true. The condition is a tracked read — it
5
+ * re-evaluates whenever a signal it read changes — so this is the promise
6
+ * bridge from signal space into async task bodies (await a state condition
7
+ * mid-task without polling).
8
+ *
9
+ * Settles synchronously when the condition already holds. Rejects with the
10
+ * abort reason when `signal` aborts first (an already-aborted signal rejects
11
+ * without evaluating the condition), so a task awaiting a condition dies with
12
+ * its runner instead of leaking the subscription.
13
+ */
14
+ function when(condition, options = {}) {
15
+ const { signal } = options;
16
+ if (signal?.aborted) return Promise.reject(signal.reason);
17
+ return new Promise((resolve, reject) => {
18
+ let settled = false;
19
+ const settle = (complete) => {
20
+ if (settled) return;
21
+ settled = true;
22
+ complete();
23
+ queueMicrotask(() => {
24
+ signal?.removeEventListener("abort", onAbort);
25
+ stop();
26
+ });
27
+ };
28
+ const onAbort = () => settle(() => reject(signal?.reason));
29
+ signal?.addEventListener("abort", onAbort, { once: true });
30
+ const stop = effect(() => {
31
+ if (!settled && condition()) settle(resolve);
32
+ });
33
+ });
34
+ }
35
+ //#endregion
36
+ export { when };
37
+
38
+ //# sourceMappingURL=when.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"when.js","names":[],"sources":["../../../../src/core/signals/when.ts"],"sourcesContent":["import { effect } from './effect';\n\n/**\n * Resolve once `condition` returns true. The condition is a tracked read — it\n * re-evaluates whenever a signal it read changes — so this is the promise\n * bridge from signal space into async task bodies (await a state condition\n * mid-task without polling).\n *\n * Settles synchronously when the condition already holds. Rejects with the\n * abort reason when `signal` aborts first (an already-aborted signal rejects\n * without evaluating the condition), so a task awaiting a condition dies with\n * its runner instead of leaking the subscription.\n */\nexport function when(condition: () => boolean, options: { signal?: AbortSignal } = {}): Promise<void> {\n const { signal } = options;\n if (signal?.aborted) return Promise.reject(signal.reason);\n\n return new Promise<void>((resolve, reject) => {\n let settled = false;\n const settle = (complete: () => void) => {\n if (settled) return;\n settled = true;\n complete();\n // Deferred: on the effect's synchronous initial run `stop` isn't\n // assigned yet, and stopping an effect from inside its own body is\n // undefined behavior for the scheduler either way.\n queueMicrotask(() => {\n signal?.removeEventListener('abort', onAbort);\n stop();\n });\n };\n const onAbort = () => settle(() => reject(signal?.reason));\n signal?.addEventListener('abort', onAbort, { once: true });\n const stop = effect(() => {\n if (!settled && condition()) settle(resolve);\n });\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAgB,KAAK,WAA0B,UAAoC,CAAC,GAAkB;CACpG,MAAM,EAAE,WAAW;CACnB,IAAI,QAAQ,SAAS,OAAO,QAAQ,OAAO,OAAO,MAAM;CAExD,OAAO,IAAI,SAAe,SAAS,WAAW;EAC5C,IAAI,UAAU;EACd,MAAM,UAAU,aAAyB;GACvC,IAAI,SAAS;GACb,UAAU;GACV,SAAS;GAIT,qBAAqB;IACnB,QAAQ,oBAAoB,SAAS,OAAO;IAC5C,KAAK;GACP,CAAC;EACH;EACA,MAAM,gBAAgB,aAAa,OAAO,QAAQ,MAAM,CAAC;EACzD,QAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EACzD,MAAM,OAAO,aAAa;GACxB,IAAI,CAAC,WAAW,UAAU,GAAG,OAAO,OAAO;EAC7C,CAAC;CACH,CAAC;AACH"}
@@ -0,0 +1,31 @@
1
+ import { sleep } from "@videojs/utils/time";
2
+ //#region src/core/tasks/delayed-reschedule.ts
3
+ /**
4
+ * Build a {@link Reschedule} from a pure cadence function — the common
5
+ * timer-based, *start-anchored* implementation.
6
+ *
7
+ * Invoked concurrently with the run, it observes the result, then waits
8
+ * `cadence(current, previous)` milliseconds **measured from when it was invoked**
9
+ * (≈ the run's start): it subtracts the run's own elapsed time, so consecutive
10
+ * runs begin one cadence apart regardless of how long each run takes (per
11
+ * RFC 8216 §6.3.4's "measured from the last time the client began loading"). If
12
+ * the run takes longer than the cadence, the next run starts immediately.
13
+ *
14
+ * A `null` cadence stops the recurrence. A rejected run rejects this reschedule,
15
+ * which the `RecurringRunner` propagates as the recurrence's failure — error
16
+ * recovery (e.g. retrying transient fetch failures) belongs below, at the fetch
17
+ * layer, not in the cadence.
18
+ */
19
+ function delayedReschedule(cadence) {
20
+ return async (task) => {
21
+ const startedAt = Date.now();
22
+ const ms = cadence(await task.run(), task.previous);
23
+ if (ms === null) return false;
24
+ await sleep(Math.max(0, ms - (Date.now() - startedAt)), task.signal);
25
+ return true;
26
+ };
27
+ }
28
+ //#endregion
29
+ export { delayedReschedule };
30
+
31
+ //# sourceMappingURL=delayed-reschedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delayed-reschedule.js","names":[],"sources":["../../../../src/core/tasks/delayed-reschedule.ts"],"sourcesContent":["import { sleep } from '@videojs/utils/time';\nimport type { Reschedule } from './task';\n\n/**\n * Build a {@link Reschedule} from a pure cadence function — the common\n * timer-based, *start-anchored* implementation.\n *\n * Invoked concurrently with the run, it observes the result, then waits\n * `cadence(current, previous)` milliseconds **measured from when it was invoked**\n * (≈ the run's start): it subtracts the run's own elapsed time, so consecutive\n * runs begin one cadence apart regardless of how long each run takes (per\n * RFC 8216 §6.3.4's \"measured from the last time the client began loading\"). If\n * the run takes longer than the cadence, the next run starts immediately.\n *\n * A `null` cadence stops the recurrence. A rejected run rejects this reschedule,\n * which the `RecurringRunner` propagates as the recurrence's failure — error\n * recovery (e.g. retrying transient fetch failures) belongs below, at the fetch\n * layer, not in the cadence.\n */\nexport function delayedReschedule<TValue>(\n cadence: (current: TValue, previous: TValue | undefined) => number | null\n): Reschedule<TValue> {\n return async (task) => {\n const startedAt = Date.now();\n const current = await task.run();\n // `task.previous` is the prior successful value (carried by the runner's\n // clone); read-only for the cadence, hence the cast off `DeepReadonly`.\n const ms = cadence(current, task.previous as TValue | undefined);\n if (ms === null) return false;\n await sleep(Math.max(0, ms - (Date.now() - startedAt)), task.signal);\n return true;\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,SAAgB,kBACd,SACoB;CACpB,OAAO,OAAO,SAAS;EACrB,MAAM,YAAY,KAAK,IAAI;EAI3B,MAAM,KAAK,QAAQ,MAHG,KAAK,IAAI,GAGH,KAAK,QAA8B;EAC/D,IAAI,OAAO,MAAM,OAAO;EACxB,MAAM,MAAM,KAAK,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,UAAU,GAAG,KAAK,MAAM;EACnE,OAAO;CACT;AACF"}
@@ -0,0 +1,166 @@
1
+ //#region src/core/tasks/task.d.ts
2
+ /** Recursively marks all properties as readonly. */
3
+ type DeepReadonly<T> = T extends (infer U)[] ? ReadonlyArray<DeepReadonly<U>> : T extends object ? { readonly [K in keyof T]: DeepReadonly<T[K]>; } : T;
4
+ type TaskStatus = 'pending' | 'running' | 'done' | 'error';
5
+ /**
6
+ * Configuration for a Task.
7
+ */
8
+ interface TaskConfig {
9
+ /**
10
+ * Identifier for this task.
11
+ * - string: used as-is
12
+ * - () => string: called once at construction time
13
+ * - undefined: a unique ID is generated via generateId()
14
+ */
15
+ id?: string | (() => string);
16
+ /**
17
+ * Optional external AbortSignal to compose with the task's internal one.
18
+ * The task's work is aborted when either the internal controller (via abort())
19
+ * or this external signal fires — whichever comes first.
20
+ */
21
+ signal?: AbortSignal;
22
+ }
23
+ /**
24
+ * Minimal contract for a schedulable unit of async work.
25
+ */
26
+ interface TaskLike<TValue = void, TError = unknown> {
27
+ readonly id: string;
28
+ readonly status: TaskStatus;
29
+ readonly value: DeepReadonly<TValue> | undefined;
30
+ readonly error: DeepReadonly<TError> | undefined;
31
+ /**
32
+ * The last successful value carried forward from the run this was `clone()`d
33
+ * from — the prior cycle's result for a `RecurringRunner` (undefined for an
34
+ * original, or until the lineage has produced a success).
35
+ */
36
+ readonly previous: DeepReadonly<TValue> | undefined;
37
+ /**
38
+ * The signal this task's work runs under (its own abort composed with any
39
+ * external one). Aborting the task fires it — so a `reschedule` can wait on it
40
+ * to have its delay cancelled when the recurrence is aborted.
41
+ */
42
+ readonly signal: AbortSignal;
43
+ /** Run the work, memoized: repeated calls share one execution + result. */
44
+ run(): Promise<TValue>;
45
+ abort(): void;
46
+ /** A fresh, structurally identical task (same work + id) in a pending state — for re-running. */
47
+ clone(): TaskLike<TValue, TError>;
48
+ }
49
+ /**
50
+ * Generic reusable task that wraps an async run function.
51
+ *
52
+ * Owns its own AbortController so it can always be aborted independently.
53
+ * Optionally composes an external AbortSignal so that a parent's cancellation
54
+ * propagates into the task's work without requiring the caller to track the
55
+ * task separately.
56
+ *
57
+ * `run()` is memoized: the work runs at most once per instance, and every call
58
+ * returns the same promise (so observers can `await run()` to read the result
59
+ * without re-triggering the work). To re-run the *same* work, take a `clone()` —
60
+ * a fresh instance with its own AbortController and a pending state.
61
+ *
62
+ * Ordering guarantee: `value` is written before `status` transitions to `'done'`;
63
+ * `error` is written before `status` transitions to `'error'`. Any reader
64
+ * observing `status === 'done'` is guaranteed `value` is already present.
65
+ */
66
+ declare class Task<TValue = void, TError = unknown> implements TaskLike<TValue, TError> {
67
+ #private;
68
+ readonly id: string;
69
+ constructor(runFn: (signal: AbortSignal) => Promise<TValue>, config?: TaskConfig);
70
+ get status(): TaskStatus;
71
+ get value(): DeepReadonly<TValue> | undefined;
72
+ get error(): DeepReadonly<TError> | undefined;
73
+ get previous(): DeepReadonly<TValue> | undefined;
74
+ get signal(): AbortSignal;
75
+ run(): Promise<TValue>;
76
+ abort(): void;
77
+ /**
78
+ * A fresh task with the same work, id, and external signal, in a pending state
79
+ * (its own AbortController, no memoized result) — so it can be run again. Used
80
+ * to re-run structurally identical work (e.g. `RecurringRunner` reloads).
81
+ *
82
+ * The clone inherits this run's value as its `previous` (or this run's own
83
+ * `previous` if it never produced one — e.g. it errored), so a recurrence's
84
+ * `previous` always tracks the last *successful* value across the lineage with
85
+ * no bookkeeping in the runner.
86
+ */
87
+ clone(): Task<TValue, TError>;
88
+ }
89
+ /**
90
+ * Runs tasks concurrently, deduplicated by task id.
91
+ *
92
+ * If a task with a given id is already in flight, subsequent schedule() calls
93
+ * for that id are silently ignored until the first completes. Tasks are stored
94
+ * so abortAll() can cancel any in-flight work (e.g. on engine cleanup).
95
+ */
96
+ declare class ConcurrentRunner {
97
+ #private;
98
+ schedule<TValue = void, TError = unknown>(task: TaskLike<TValue, TError>): Promise<TValue>;
99
+ /**
100
+ * Registers a callback to fire when all currently in-flight tasks settle.
101
+ * If the runner is already idle, the callback is never called. If abortAll()
102
+ * is called before the batch settles, the callback is superseded and silently
103
+ * dropped — no stale callbacks, no generation token required by the caller.
104
+ */
105
+ whenSettled(callback: () => void): void;
106
+ abortAll(): void;
107
+ destroy(): void;
108
+ }
109
+ /**
110
+ * Runs tasks one at a time in submission order.
111
+ *
112
+ * Each schedule() call returns a Promise that resolves or rejects with the
113
+ * task's result when it is eventually executed. Tasks wait in queue until the
114
+ * prior task completes.
115
+ *
116
+ * Serialization is achieved by chaining each task's run() onto the tail of a
117
+ * shared promise chain — no explicit queue or drain loop needed.
118
+ *
119
+ * abortAll() aborts all pending (not yet started) tasks and the currently
120
+ * in-flight task. Pending tasks still run briefly but receive an aborted
121
+ * signal and are expected to exit early.
122
+ */
123
+ declare class SerialRunner {
124
+ #private;
125
+ schedule<TValue = void, TError = unknown>(task: TaskLike<TValue, TError>): Promise<TValue>;
126
+ /**
127
+ * A promise that resolves when all currently-scheduled tasks have settled.
128
+ * Use the reference as a generation token: capture it after scheduling a
129
+ * batch, then check identity in the resolution callback to detect whether
130
+ * a subsequent abortAll() + new batch has superseded this one.
131
+ */
132
+ get settled(): Promise<void>;
133
+ /**
134
+ * Registers a callback to fire when all currently-pending tasks settle.
135
+ * If the runner is already idle (no pending or running tasks), the callback
136
+ * is never called. If new tasks are scheduled before the current batch
137
+ * settles, the callback is superseded and silently dropped — no stale
138
+ * callbacks, no generation token required by the caller.
139
+ */
140
+ whenSettled(callback: () => void): void;
141
+ /** Aborts and clears queued tasks without touching the in-flight task. */
142
+ abortPending(): void;
143
+ abortAll(): void;
144
+ destroy(): void;
145
+ }
146
+ /**
147
+ * Decides whether — and *when* — a {@link RecurringRunner} re-runs its task.
148
+ * Invoked **concurrently with the run** (so the inter-run interval can be
149
+ * measured from when the run *started*, not when it finished) with the single
150
+ * {@link TaskLike}, which carries everything a decision needs:
151
+ * - `task.run()` — the in-flight run, observable via this memoized call (does
152
+ * not re-trigger work), e.g. to read its result for a cadence/stop decision.
153
+ * - `task.previous` — the prior successful run's value (`undefined` on the
154
+ * first), for decisions that compare consecutive results.
155
+ * - `task.signal` — aborts the wait (and the recurrence) when the task is.
156
+ *
157
+ * Resolves `true` to re-run (after whatever delay it owns) or `false` to stop.
158
+ * The runner deals only in this awaitable verdict — *how* the delay is produced
159
+ * (a timer, a frame, an event) and *when* it's measured from live entirely in
160
+ * the reschedule function, so the runner itself knows nothing about time. See
161
+ * `delayedReschedule` for the common timer-based, start-anchored implementation.
162
+ */
163
+ type Reschedule<TValue> = (task: TaskLike<TValue>) => PromiseLike<boolean>;
164
+ //#endregion
165
+ export { ConcurrentRunner, DeepReadonly, Reschedule, SerialRunner, Task, TaskConfig, TaskLike, TaskStatus };
166
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","names":[],"sources":["../../../../src/core/tasks/task.ts"],"mappings":";;KAQY,aAAa,KAAK,iBAAiB,OAC3C,cAAc,aAAa,MAC3B,+BACc,WAAW,IAAI,aAAa,EAAE,SAC1C;KAMM;;;;UAKK;;;;;;;EAOf;;;;;;EAOA,SAAS;;;;;UAMM,SAAS,eAAe;WAC9B;WACA,QAAQ;WACR,OAAO,aAAa;WACpB,OAAO,aAAa;;;;;;WAMpB,UAAU,aAAa;;;;;;WAMvB,QAAQ;;EAEjB,OAAO,QAAQ;EACf;;EAEA,SAAS,SAAS,QAAQ;;;;;;;;;;;;;;;;;;;cAoBf,KAAK,eAAe,6BAA6B,SAAS,QAAQ;;WACpE;EAYT,YAAY,QAAQ,QAAQ,gBAAgB,QAAQ,SAAS,SAAS;MAUlE,UAAU;MAIV,SAAS,aAAa;MAItB,SAAS,aAAa;MAItB,YAAY,aAAa;MAIzB,UAAU;EAId,OAAO,QAAQ;EAuBf;;;;;;;;;;;EAcA,SAAS,KAAK,QAAQ;;;;;;;;;cAkBX;;EAMX,SAAS,eAAe,kBAAkB,MAAM,SAAS,QAAQ,UAAU,QAAQ;;;;;;;EAkCnF,YAAY;EAYZ;EAWA;;;;;;;;;;;;;;;;cAwBW;;EAMX,SAAS,eAAe,kBAAkB,MAAM,SAAS,QAAQ,UAAU,QAAQ;;;;;;;MA8B/E,WAAW;;;;;;;;EAWf,YAAY;;EAaZ;EAKA;EAKA;;;;;;;;;;;;;;;;;;;KA2BU,WAAW,WAAW,MAAM,SAAS,YAAY"}