framefields 2.0.6 → 2.0.8

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 (164) hide show
  1. package/dist/audio/index.mjs +10 -10
  2. package/dist/{audio-D6enPyAG.mjs → audio--hi7MiZt.mjs} +3 -3
  3. package/dist/{audio-D6enPyAG.mjs.map → audio--hi7MiZt.mjs.map} +1 -1
  4. package/dist/{dist-sHqWCB9M.mjs → dist-BQFap0wr.mjs} +9 -6
  5. package/dist/dist-BQFap0wr.mjs.map +1 -0
  6. package/dist/{dist-JkiL-qy7.mjs → dist-ZVlYkuR4.mjs} +6 -5
  7. package/dist/dist-ZVlYkuR4.mjs.map +1 -0
  8. package/dist/effects/index.mjs +22 -22
  9. package/dist/{effects-l0T61DPU.mjs → effects-axfL_C3a.mjs} +2 -2
  10. package/dist/{effects-l0T61DPU.mjs.map → effects-axfL_C3a.mjs.map} +1 -1
  11. package/dist/fonts/index.mjs +1 -1
  12. package/dist/{fonts-CuG-05-_.mjs → fonts-Cy26mbrO.mjs} +2 -2
  13. package/dist/{fonts-CuG-05-_.mjs.map → fonts-Cy26mbrO.mjs.map} +1 -1
  14. package/dist/index-Bi2nRZ_g.d.mts.map +1 -1
  15. package/dist/index.d.mts +59 -59
  16. package/dist/index.d.mts.map +1 -1
  17. package/dist/index.mjs +37 -37
  18. package/dist/preview/index.mjs +10 -10
  19. package/dist/{preview-CcooLR2s.mjs → preview-BUPB38Kk.mjs} +2 -2
  20. package/dist/{preview-CcooLR2s.mjs.map → preview-BUPB38Kk.mjs.map} +1 -1
  21. package/dist/preview-engine/audio.mjs +1 -1
  22. package/dist/preview-engine/{chunk-45JOFIHE.mjs → chunk-5PPSCISJ.mjs} +1 -1
  23. package/dist/preview-engine/{chunk-5NYKHIQN.mjs → chunk-BUWK5RJ4.mjs} +9 -9
  24. package/dist/preview-engine/{chunk-OZVCWK27.mjs → chunk-JNEVSC4I.mjs} +1 -1
  25. package/dist/preview-engine/{chunk-RJJRPL42.mjs → chunk-VWLR2AZR.mjs} +1 -1
  26. package/dist/preview-engine/{chunk-KNZU3Z2F.mjs → chunk-WQ7BFSKF.mjs} +1 -1
  27. package/dist/preview-engine/{chunk-YK4XHUP4.mjs → chunk-ZJFAGIOM.mjs} +6 -6
  28. package/dist/preview-engine/{chunk-EJTGJVUA.mjs → chunk-ZSIJB76A.mjs} +2 -2
  29. package/dist/preview-engine/fonts.mjs +1 -1
  30. package/dist/preview-engine/framefields.mjs +1 -1
  31. package/dist/preview-engine/player.mjs +1 -1
  32. package/dist/preview-engine/{renderers-GYJTBVV2.mjs → renderers-27Q5X3U6.mjs} +1 -1
  33. package/dist/preview-engine/{renderers-R5WSHETG.mjs → renderers-MZBR3MSR.mjs} +1 -1
  34. package/dist/{program-DPFDbeL9.mjs → program-Jt07Tx1J.mjs} +2 -2
  35. package/dist/{program-DPFDbeL9.mjs.map → program-Jt07Tx1J.mjs.map} +1 -1
  36. package/dist/renderer/index.mjs +2 -2
  37. package/dist/{renderer-DVj8jfmO.mjs → renderer-0uccAKQe.mjs} +2 -2
  38. package/dist/{renderer-DVj8jfmO.mjs.map → renderer-0uccAKQe.mjs.map} +1 -1
  39. package/dist/renderer-1mNREW16.mjs +3 -0
  40. package/dist/renderer-4tKI3p9c.mjs +3 -0
  41. package/dist/renderer-B3XeKN-e.mjs +3 -0
  42. package/dist/{renderer-BXWu8aHU.mjs → renderer-B6Q5e9CU.mjs} +2 -2
  43. package/dist/{renderer-BXWu8aHU.mjs.map → renderer-B6Q5e9CU.mjs.map} +1 -1
  44. package/dist/renderer-B7_6SHd8.mjs +3 -0
  45. package/dist/renderer-BENF6Wts.mjs +3 -0
  46. package/dist/{renderer-Bl9C9lIo.mjs → renderer-BENX0vRC.mjs} +1 -1
  47. package/dist/{renderer-Cn-p1SyO.mjs → renderer-BPbNLPcz.mjs} +2 -2
  48. package/dist/{renderer-Cn-p1SyO.mjs.map → renderer-BPbNLPcz.mjs.map} +1 -1
  49. package/dist/renderer-BPiLdwI1.mjs +3 -0
  50. package/dist/{renderer-BpTwFaja.mjs → renderer-BQZniXw0.mjs} +2 -2
  51. package/dist/{renderer-BpTwFaja.mjs.map → renderer-BQZniXw0.mjs.map} +1 -1
  52. package/dist/{renderer-D3FsnptO.mjs → renderer-BTFPC3UJ.mjs} +1 -1
  53. package/dist/{renderer-BShK_xMJ.mjs → renderer-BdSHGzHj.mjs} +1 -1
  54. package/dist/renderer-BdyMrzUX.mjs +3 -0
  55. package/dist/renderer-BfpdekRn.mjs +3 -0
  56. package/dist/{renderer-CLWAbaCS.mjs → renderer-BjROyv5F.mjs} +2 -2
  57. package/dist/{renderer-CLWAbaCS.mjs.map → renderer-BjROyv5F.mjs.map} +1 -1
  58. package/dist/{renderer-C-F91lPu.mjs → renderer-BkOXe6o6.mjs} +2 -2
  59. package/dist/{renderer-C-F91lPu.mjs.map → renderer-BkOXe6o6.mjs.map} +1 -1
  60. package/dist/{renderer-B52Y2SDC.mjs → renderer-Bq3Geqe3.mjs} +1 -1
  61. package/dist/renderer-BtdnLjKZ.mjs +3 -0
  62. package/dist/{renderer-C5lJvf-h.mjs → renderer-Bu0xOP_v.mjs} +2 -2
  63. package/dist/{renderer-C5lJvf-h.mjs.map → renderer-Bu0xOP_v.mjs.map} +1 -1
  64. package/dist/{renderer-CM5c8a7B.mjs → renderer-Bv-ljXHc.mjs} +7 -7
  65. package/dist/{renderer-CM5c8a7B.mjs.map → renderer-Bv-ljXHc.mjs.map} +1 -1
  66. package/dist/{renderer-CsE9ztUa.mjs → renderer-C-Bv9nVB.mjs} +2 -2
  67. package/dist/{renderer-CsE9ztUa.mjs.map → renderer-C-Bv9nVB.mjs.map} +1 -1
  68. package/dist/renderer-C0q5UUY7.mjs +3 -0
  69. package/dist/{renderer-DvHpzsUV.mjs → renderer-C5RhNQdr.mjs} +2 -2
  70. package/dist/{renderer-DvHpzsUV.mjs.map → renderer-C5RhNQdr.mjs.map} +1 -1
  71. package/dist/{renderer-doPt4zQZ.mjs → renderer-CIMjMFGm.mjs} +2 -2
  72. package/dist/{renderer-doPt4zQZ.mjs.map → renderer-CIMjMFGm.mjs.map} +1 -1
  73. package/dist/{renderer-L72D1mwv.mjs → renderer-CIQYTiT9.mjs} +2 -2
  74. package/dist/{renderer-L72D1mwv.mjs.map → renderer-CIQYTiT9.mjs.map} +1 -1
  75. package/dist/{renderer-BhfFVqCx.mjs → renderer-CXJxK7HP.mjs} +2 -2
  76. package/dist/{renderer-BhfFVqCx.mjs.map → renderer-CXJxK7HP.mjs.map} +1 -1
  77. package/dist/{renderer-Dntxca07.mjs → renderer-CXZe0lfI.mjs} +2 -2
  78. package/dist/{renderer-Dntxca07.mjs.map → renderer-CXZe0lfI.mjs.map} +1 -1
  79. package/dist/{renderer-Cgy1H0Ql.mjs → renderer-CboM4tba.mjs} +2 -2
  80. package/dist/{renderer-Cgy1H0Ql.mjs.map → renderer-CboM4tba.mjs.map} +1 -1
  81. package/dist/{renderer-BbwOEawB.mjs → renderer-CceiI6P7.mjs} +2 -2
  82. package/dist/{renderer-BbwOEawB.mjs.map → renderer-CceiI6P7.mjs.map} +1 -1
  83. package/dist/renderer-Cg-rJgwM.mjs +3 -0
  84. package/dist/renderer-CkgQArsi.mjs +3 -0
  85. package/dist/{renderer--akPySto.mjs → renderer-CmIySXSN.mjs} +2 -2
  86. package/dist/{renderer--akPySto.mjs.map → renderer-CmIySXSN.mjs.map} +1 -1
  87. package/dist/renderer-CnO9KcmP.mjs +3 -0
  88. package/dist/renderer-Cnp5JCwi.mjs +3 -0
  89. package/dist/renderer-CwiCQzjW.mjs +4 -0
  90. package/dist/renderer-D2LCMZ0l.mjs +3 -0
  91. package/dist/{renderer-CLUPc9do.mjs → renderer-D49-PYDo.mjs} +2 -2
  92. package/dist/{renderer-CLUPc9do.mjs.map → renderer-D49-PYDo.mjs.map} +1 -1
  93. package/dist/{renderer-BNBh4omF.mjs → renderer-D5GsF1LT.mjs} +2 -2
  94. package/dist/{renderer-BNBh4omF.mjs.map → renderer-D5GsF1LT.mjs.map} +1 -1
  95. package/dist/{renderer-Bpf8EGY1.mjs → renderer-D5xelwpw.mjs} +2 -2
  96. package/dist/{renderer-Bpf8EGY1.mjs.map → renderer-D5xelwpw.mjs.map} +1 -1
  97. package/dist/renderer-DBGy4qIh.mjs +3 -0
  98. package/dist/renderer-DBRnvHBV.mjs +3 -0
  99. package/dist/{renderer-BHsEOp1I.mjs → renderer-DDd3cjaz.mjs} +2 -2
  100. package/dist/{renderer-BHsEOp1I.mjs.map → renderer-DDd3cjaz.mjs.map} +1 -1
  101. package/dist/{renderer-7v-ZNKEJ.mjs → renderer-DIfk6m2O.mjs} +2 -2
  102. package/dist/{renderer-7v-ZNKEJ.mjs.map → renderer-DIfk6m2O.mjs.map} +1 -1
  103. package/dist/renderer-DJgrcu3v.mjs +3 -0
  104. package/dist/{renderer-E5D4H5dK.mjs → renderer-DP-xNaYX.mjs} +2 -2
  105. package/dist/{renderer-E5D4H5dK.mjs.map → renderer-DP-xNaYX.mjs.map} +1 -1
  106. package/dist/{renderer-XRGwrdg8.mjs → renderer-DP948J9X.mjs} +2 -2
  107. package/dist/{renderer-XRGwrdg8.mjs.map → renderer-DP948J9X.mjs.map} +1 -1
  108. package/dist/renderer-DTpBOlDA.mjs +3 -0
  109. package/dist/{renderer-DnXQXk-8.mjs → renderer-DVQp5fLG.mjs} +2 -2
  110. package/dist/{renderer-DnXQXk-8.mjs.map → renderer-DVQp5fLG.mjs.map} +1 -1
  111. package/dist/renderer-DWwIX4Mr.mjs +3 -0
  112. package/dist/{renderer-BgrDGRNW.mjs → renderer-DXyaswab.mjs} +2 -2
  113. package/dist/{renderer-BgrDGRNW.mjs.map → renderer-DXyaswab.mjs.map} +1 -1
  114. package/dist/{renderer-0ty5QtXg.mjs → renderer-DbaSgadp.mjs} +2 -2
  115. package/dist/{renderer-0ty5QtXg.mjs.map → renderer-DbaSgadp.mjs.map} +1 -1
  116. package/dist/renderer-DfnacE0H.mjs +3 -0
  117. package/dist/{renderer-B1IXTeF2.mjs → renderer-Dgg6pQGI.mjs} +2 -2
  118. package/dist/{renderer-B1IXTeF2.mjs.map → renderer-Dgg6pQGI.mjs.map} +1 -1
  119. package/dist/{renderer-DJPuwTbS.mjs → renderer-DrgNyCSx.mjs} +2 -2
  120. package/dist/{renderer-DJPuwTbS.mjs.map → renderer-DrgNyCSx.mjs.map} +1 -1
  121. package/dist/{renderer-DM79djHG.mjs → renderer-DxBUppHf.mjs} +38 -38
  122. package/dist/{renderer-DM79djHG.mjs.map → renderer-DxBUppHf.mjs.map} +1 -1
  123. package/dist/renderer-RA8pee2T.mjs +3 -0
  124. package/dist/{renderer-BV_d3D_3.mjs → renderer-U0LJuM9D.mjs} +2 -2
  125. package/dist/{renderer-BV_d3D_3.mjs.map → renderer-U0LJuM9D.mjs.map} +1 -1
  126. package/dist/{renderer-BUJ6uaJE.mjs → renderer-VPK8JnSw.mjs} +2 -2
  127. package/dist/{renderer-BUJ6uaJE.mjs.map → renderer-VPK8JnSw.mjs.map} +1 -1
  128. package/dist/renderer-eH4u4-2c.mjs +3 -0
  129. package/dist/renderer-eWOqFUz9.mjs +3 -0
  130. package/dist/{renderer-CmMNU1-P.mjs → renderer-o4wOvjEC.mjs} +4 -4
  131. package/dist/{renderer-CmMNU1-P.mjs.map → renderer-o4wOvjEC.mjs.map} +1 -1
  132. package/dist/{renderer-DRf4FLSq.mjs → renderer-zwxwjWqa.mjs} +2 -2
  133. package/dist/{renderer-DRf4FLSq.mjs.map → renderer-zwxwjWqa.mjs.map} +1 -1
  134. package/dist/{renderers-CP8CFWDs-CAs5DgWj.mjs → renderers-CP8CFWDs-BQBjaV9O.mjs} +2 -2
  135. package/dist/{renderers-CP8CFWDs-CAs5DgWj.mjs.map → renderers-CP8CFWDs-BQBjaV9O.mjs.map} +1 -1
  136. package/dist/signals/index.mjs +4 -4
  137. package/package.json +54 -54
  138. package/dist/dist-JkiL-qy7.mjs.map +0 -1
  139. package/dist/dist-sHqWCB9M.mjs.map +0 -1
  140. package/dist/renderer-145WIXyW.mjs +0 -3
  141. package/dist/renderer-9W8q4Y8D.mjs +0 -3
  142. package/dist/renderer-B5HBViEG.mjs +0 -3
  143. package/dist/renderer-B7naoaVH.mjs +0 -3
  144. package/dist/renderer-BHYmRBem.mjs +0 -3
  145. package/dist/renderer-BL51bhvQ.mjs +0 -3
  146. package/dist/renderer-ByxrzTRg.mjs +0 -3
  147. package/dist/renderer-CDirzReW.mjs +0 -3
  148. package/dist/renderer-CGCmbeJ2.mjs +0 -3
  149. package/dist/renderer-CO0KsnEg.mjs +0 -3
  150. package/dist/renderer-COO44HDO.mjs +0 -3
  151. package/dist/renderer-C_9SIgZX.mjs +0 -3
  152. package/dist/renderer-CntaTaNq.mjs +0 -3
  153. package/dist/renderer-Cv9JLpL6.mjs +0 -3
  154. package/dist/renderer-D0FWIsWn.mjs +0 -3
  155. package/dist/renderer-D3jUYUDU.mjs +0 -3
  156. package/dist/renderer-D5Je-AeQ.mjs +0 -3
  157. package/dist/renderer-DNPwpmYS.mjs +0 -3
  158. package/dist/renderer-DawVsNLw.mjs +0 -3
  159. package/dist/renderer-Dl_6Kn87.mjs +0 -3
  160. package/dist/renderer-DlrJSfaw.mjs +0 -3
  161. package/dist/renderer-DpScOWGG.mjs +0 -4
  162. package/dist/renderer-DxYOA1MM.mjs +0 -3
  163. package/dist/renderer-S7jOr_jF.mjs +0 -3
  164. package/dist/renderer-kN2TeWks.mjs +0 -3
@@ -1,4 +1,4 @@
1
- import{a as Z}from"./chunk-LKYN3BM2.mjs";import{a as mt}from"./chunk-JPXQPP6J.mjs";import{a as B}from"./chunk-CNSHAFEA.mjs";import{a as pt,b as K,d as dt,e as L}from"./chunk-66NVL4BN.mjs";import{a as ct,b as ht}from"./chunk-RJJRPL42.mjs";import{d as R,f as G,g as M,i as ft}from"./chunk-YK4XHUP4.mjs";import{d as lt}from"./chunk-HYBAPT6I.mjs";import{e as g}from"./chunk-BVF64D6H.mjs";g();var $=class{constructor(t,e){this.url=t;this.isHeadless=e}url;isHeadless;input=null;initPromise=null;iterator=null;iteratorStartTimestamp=-1;currentFetchId=0;fetchLock=Promise.resolve();destroyed=!1;async init(){if(!this.input)return this.initPromise?this.initPromise:(this.destroyed=!1,this.initPromise=(async()=>{try{let t=await L.acquire(this.url);this.destroyed?L.release(this.url):this.input=t}catch(t){throw this.initPromise=null,t}})(),this.initPromise)}destroy(){this.destroyed=!0,this.iterator?.return(),this.input&&(L.release(this.url),this.input=null),this.initPromise=null,this.onDestroy()}},J=class extends ${canvasSink=null;videoSampleSink=null;currentFrame=null;nextFrame=null;currentSample=null;nextSample=null;headlessQueue=[];isDecoding=!1;decodeBuffer=null;nextRequest=null;pushHeadlessQueue(t){let e=this.headlessQueue.findIndex(r=>r.timestamp>t.timestamp);e===-1?this.headlessQueue.push(t):this.headlessQueue.splice(e,0,t)}async fillHeadlessQueue(t){if(this.iterator)for(;this.headlessQueue.length<2;){let e=await this.iterator.next();if(this.currentFetchId!==t){e.value?.close?.();return}if(e.done||!e.value)break;this.pushHeadlessQueue(e.value)}}async closeIterator(t){if(t)try{await t.return()}catch{}}resetSinks(){let t=this.iterator;if(this.iterator=null,t)try{t.return()}catch{}this.canvasSink=null,this.videoSampleSink=null,this.currentFrame=null,this.nextFrame=null,this.currentSample?.close(),this.currentSample=null,this.nextSample?.close(),this.nextSample=null;for(let e of this.headlessQueue)try{e.close()}catch{}this.headlessQueue=[],this.decodeBuffer=null,this.iteratorStartTimestamp=-1}onDestroy(){this.resetSinks()}async startIterator(t,e){if(!this.canvasSink)return;let r=Math.max(0,Number.isFinite(t)?t:0),i=this.iterator;if(this.iterator=null,await this.closeIterator(i),this.currentFetchId!==e||this.destroyed)return;this.iterator=this.canvasSink.canvases(r);let n=await this.iterator.next();if(this.currentFetchId!==e||this.destroyed)return;this.currentFrame=n.value??null;let s=await this.iterator.next();this.currentFetchId!==e||this.destroyed||(this.nextFrame=s.value??null,this.iteratorStartTimestamp=r)}async startIteratorHeadless(t,e){if(!this.videoSampleSink)return;let r=Math.max(0,Number.isFinite(t)?t:0),i=this.iterator;if(this.iterator=null,await this.closeIterator(i),this.currentFetchId!==e||this.destroyed)return;for(let s of this.headlessQueue)s.close();this.headlessQueue=[];let n=Math.max(0,r-.1);this.iterator=this.videoSampleSink.samples(n),await this.fillHeadlessQueue(e),!(this.currentFetchId!==e||this.destroyed)&&(this.iteratorStartTimestamp=r)}async getFrame(t){if(await this.init(),this.destroyed||!this.input)return null;let e=Math.max(0,Number.isFinite(t)?t:0);return this.isDecoding?(this.nextRequest&&this.nextRequest.resolve(null),new Promise((r,i)=>{this.nextRequest={timestampSec:e,resolve:r,reject:i}})):this.executeDecode(e)}async executeDecode(t){this.isDecoding=!0;try{return await this.performDecode(t)}finally{if(this.isDecoding=!1,this.nextRequest){let e=this.nextRequest;this.nextRequest=null,this.executeDecode(e.timestampSec).then(e.resolve).catch(e.reject)}}}async performDecodeHeadless(t,e){if(!this.videoSampleSink){if(this.destroyed||!this.input)return null;let h=await this.input.getPrimaryVideoTrack();if(!h)return null;this.videoSampleSink=new pt(h)}let r=1e-4;if((!this.iterator||t<this.iteratorStartTimestamp-r||this.headlessQueue.length>0&&t<this.headlessQueue[0].timestamp-.01||this.headlessQueue.length>0&&t-this.headlessQueue[0].timestamp>1)&&(await this.startIteratorHeadless(t,e),this.currentFetchId!==e||this.destroyed||!this.input))return null;for(;;){if(await this.fillHeadlessQueue(e),this.currentFetchId!==e||this.destroyed||!this.input)return null;if(this.headlessQueue.length>=2&&this.headlessQueue[1].timestamp<=t+r){this.headlessQueue.shift()?.close();continue}break}let s=this.headlessQueue[0];if(!s)return null;let a=s.displayWidth,o=s.displayHeight,l=a*o*4,c=this.decodeBuffer;return(!c||c.length!==l)&&(c=new Uint8Array(l),this.decodeBuffer=c),await s.copyTo(c,{format:"RGBA"}),this.currentFetchId!==e||this.destroyed||!this.input?null:{width:a,height:o,buffer:c}}async performDecodeInternal(t){this.currentFetchId++;let e=this.currentFetchId;if(this.isHeadless)return this.performDecodeHeadless(t,e);if(!this.canvasSink){if(this.destroyed||!this.input)return null;let a=await this.input.getPrimaryVideoTrack();if(!a)return null;this.canvasSink=new K(a,{poolSize:3,alpha:!0})}let r=1e-4;if((!this.iterator||t<this.iteratorStartTimestamp-r||this.currentFrame&&t<this.currentFrame.timestamp-.01||this.currentFrame&&t-this.currentFrame.timestamp>1)&&(await this.startIterator(t,e),this.currentFetchId!==e||this.destroyed||!this.input))return null;for(;this.nextFrame&&this.nextFrame.timestamp<=t+r;)if(this.currentFrame=this.nextFrame,this.nextFrame=null,this.iterator){let a=await this.iterator.next();if(this.currentFetchId!==e||this.destroyed||!this.input)return null;this.nextFrame=a.value??null}if(!this.currentFrame)return null;let s=this.currentFrame.canvas;return{width:s.width,height:s.height,canvas:s}}async performDecode(t){let e=Math.max(0,Number.isFinite(t)?t:0);try{return await this.performDecodeInternal(e)}catch(r){let i=r;if(i?.name==="InputDisposedError"||i?.message?.includes("disposed")||this.destroyed||!this.input)return null;this.resetSinks();try{if(!this.isHeadless&&this.input&&!this.destroyed){let n=await this.input.getPrimaryVideoTrack();if(n&&!this.destroyed)return this.canvasSink=new K(n,{poolSize:3,alpha:!0,decoderOptions:{hardwareAcceleration:"prefer-software"}}),await this.performDecodeInternal(e)}}catch{}throw r}}},tt=class extends ${audioSink=null;onDestroy(){this.audioSink=null}async startIterator(t,e){this.audioSink&&(this.iterator?.return(),this.iterator=this.audioSink.buffers(t),this.iteratorStartTimestamp=t)}async*getBuffers(t){try{if(await this.init(),this.destroyed||!this.input)return;if(!this.audioSink){let i=await this.input.getPrimaryAudioTrack();if(!i)return;this.audioSink=new dt(i)}(!this.iterator||Math.abs(t-this.iteratorStartTimestamp)>.05)&&(this.currentFetchId++,await this.startIterator(t,this.currentFetchId));let r=this.currentFetchId;if(!this.iterator)return;for await(let i of this.iterator){if(this.currentFetchId!==r||this.destroyed||!this.input)break;this.iteratorStartTimestamp=i.timestamp+i.duration,yield i}}catch(e){let r=e;if(r?.name==="InputDisposedError"||r?.message?.includes("disposed")||this.destroyed||!this.input)return;throw e}finally{let e=this.currentFetchId;this.currentFetchId===e&&(this.iterator=null)}}},et=class{videoDecoders=new Map;audioDecoders=new Map;lastAccessed=new Map;touchKey(t){this.lastAccessed.set(t,Date.now())}destroy(){for(let t of this.videoDecoders.values())try{t.destroy()}catch{}this.videoDecoders.clear();for(let t of this.audioDecoders.values())try{t.destroy()}catch{}this.audioDecoders.clear(),this.lastAccessed.clear()}prune(t=3e5){let e=Date.now();for(let[r,i]of this.lastAccessed.entries())if(e-i>t){let n=this.videoDecoders.get(r);n&&(n.destroy(),this.videoDecoders.delete(r));let s=this.audioDecoders.get(r);s&&(s.destroy(),this.audioDecoders.delete(r)),this.lastAccessed.delete(r)}}getVideo(t,e,r){let i=`${t}-${e}-${r??"default"}`,n=this.videoDecoders.get(i);return n||(n=new J(t,e),this.videoDecoders.set(i,n)),this.touchKey(i),this.prune(),n}getAudio(t,e){let r=`${t}-${e??"default"}`,i=this.audioDecoders.get(r);return i||(i=new tt(t,!1),this.audioDecoders.set(r,i)),this.touchKey(r),this.prune(),i}clearNode(t){for(let[e,r]of this.videoDecoders)e.includes(t)&&(r.destroy(),this.videoDecoders.delete(e),this.lastAccessed.delete(e));for(let[e,r]of this.audioDecoders)e.includes(t)&&(r.destroy(),this.audioDecoders.delete(e),this.lastAccessed.delete(e))}},Vt=new et;g();g();var yt=`
1
+ import{a as Z}from"./chunk-LKYN3BM2.mjs";import{a as mt}from"./chunk-JPXQPP6J.mjs";import{a as B}from"./chunk-CNSHAFEA.mjs";import{a as pt,b as K,d as dt,e as L}from"./chunk-66NVL4BN.mjs";import{a as ct,b as ht}from"./chunk-VWLR2AZR.mjs";import{d as R,f as G,g as M,i as ft}from"./chunk-ZJFAGIOM.mjs";import{d as lt}from"./chunk-HYBAPT6I.mjs";import{e as g}from"./chunk-BVF64D6H.mjs";g();var $=class{constructor(t,e){this.url=t;this.isHeadless=e}url;isHeadless;input=null;initPromise=null;iterator=null;iteratorStartTimestamp=-1;currentFetchId=0;fetchLock=Promise.resolve();destroyed=!1;async init(){if(!this.input)return this.initPromise?this.initPromise:(this.destroyed=!1,this.initPromise=(async()=>{try{let t=await L.acquire(this.url);this.destroyed?L.release(this.url):this.input=t}catch(t){throw this.initPromise=null,t}})(),this.initPromise)}destroy(){this.destroyed=!0,this.iterator?.return(),this.input&&(L.release(this.url),this.input=null),this.initPromise=null,this.onDestroy()}},J=class extends ${canvasSink=null;videoSampleSink=null;currentFrame=null;nextFrame=null;currentSample=null;nextSample=null;headlessQueue=[];isDecoding=!1;decodeBuffer=null;nextRequest=null;pushHeadlessQueue(t){let e=this.headlessQueue.findIndex(r=>r.timestamp>t.timestamp);e===-1?this.headlessQueue.push(t):this.headlessQueue.splice(e,0,t)}async fillHeadlessQueue(t){if(this.iterator)for(;this.headlessQueue.length<2;){let e=await this.iterator.next();if(this.currentFetchId!==t){e.value?.close?.();return}if(e.done||!e.value)break;this.pushHeadlessQueue(e.value)}}async closeIterator(t){if(t)try{await t.return()}catch{}}resetSinks(){let t=this.iterator;if(this.iterator=null,t)try{t.return()}catch{}this.canvasSink=null,this.videoSampleSink=null,this.currentFrame=null,this.nextFrame=null,this.currentSample?.close(),this.currentSample=null,this.nextSample?.close(),this.nextSample=null;for(let e of this.headlessQueue)try{e.close()}catch{}this.headlessQueue=[],this.decodeBuffer=null,this.iteratorStartTimestamp=-1}onDestroy(){this.resetSinks()}async startIterator(t,e){if(!this.canvasSink)return;let r=Math.max(0,Number.isFinite(t)?t:0),i=this.iterator;if(this.iterator=null,await this.closeIterator(i),this.currentFetchId!==e||this.destroyed)return;this.iterator=this.canvasSink.canvases(r);let n=await this.iterator.next();if(this.currentFetchId!==e||this.destroyed)return;this.currentFrame=n.value??null;let s=await this.iterator.next();this.currentFetchId!==e||this.destroyed||(this.nextFrame=s.value??null,this.iteratorStartTimestamp=r)}async startIteratorHeadless(t,e){if(!this.videoSampleSink)return;let r=Math.max(0,Number.isFinite(t)?t:0),i=this.iterator;if(this.iterator=null,await this.closeIterator(i),this.currentFetchId!==e||this.destroyed)return;for(let s of this.headlessQueue)s.close();this.headlessQueue=[];let n=Math.max(0,r-.1);this.iterator=this.videoSampleSink.samples(n),await this.fillHeadlessQueue(e),!(this.currentFetchId!==e||this.destroyed)&&(this.iteratorStartTimestamp=r)}async getFrame(t){if(await this.init(),this.destroyed||!this.input)return null;let e=Math.max(0,Number.isFinite(t)?t:0);return this.isDecoding?(this.nextRequest&&this.nextRequest.resolve(null),new Promise((r,i)=>{this.nextRequest={timestampSec:e,resolve:r,reject:i}})):this.executeDecode(e)}async executeDecode(t){this.isDecoding=!0;try{return await this.performDecode(t)}finally{if(this.isDecoding=!1,this.nextRequest){let e=this.nextRequest;this.nextRequest=null,this.executeDecode(e.timestampSec).then(e.resolve).catch(e.reject)}}}async performDecodeHeadless(t,e){if(!this.videoSampleSink){if(this.destroyed||!this.input)return null;let h=await this.input.getPrimaryVideoTrack();if(!h)return null;this.videoSampleSink=new pt(h)}let r=1e-4;if((!this.iterator||t<this.iteratorStartTimestamp-r||this.headlessQueue.length>0&&t<this.headlessQueue[0].timestamp-.01||this.headlessQueue.length>0&&t-this.headlessQueue[0].timestamp>1)&&(await this.startIteratorHeadless(t,e),this.currentFetchId!==e||this.destroyed||!this.input))return null;for(;;){if(await this.fillHeadlessQueue(e),this.currentFetchId!==e||this.destroyed||!this.input)return null;if(this.headlessQueue.length>=2&&this.headlessQueue[1].timestamp<=t+r){this.headlessQueue.shift()?.close();continue}break}let s=this.headlessQueue[0];if(!s)return null;let a=s.displayWidth,o=s.displayHeight,l=a*o*4,c=this.decodeBuffer;return(!c||c.length!==l)&&(c=new Uint8Array(l),this.decodeBuffer=c),await s.copyTo(c,{format:"RGBA"}),this.currentFetchId!==e||this.destroyed||!this.input?null:{width:a,height:o,buffer:c}}async performDecodeInternal(t){this.currentFetchId++;let e=this.currentFetchId;if(this.isHeadless)return this.performDecodeHeadless(t,e);if(!this.canvasSink){if(this.destroyed||!this.input)return null;let a=await this.input.getPrimaryVideoTrack();if(!a)return null;this.canvasSink=new K(a,{poolSize:3,alpha:!0})}let r=1e-4;if((!this.iterator||t<this.iteratorStartTimestamp-r||this.currentFrame&&t<this.currentFrame.timestamp-.01||this.currentFrame&&t-this.currentFrame.timestamp>1)&&(await this.startIterator(t,e),this.currentFetchId!==e||this.destroyed||!this.input))return null;for(;this.nextFrame&&this.nextFrame.timestamp<=t+r;)if(this.currentFrame=this.nextFrame,this.nextFrame=null,this.iterator){let a=await this.iterator.next();if(this.currentFetchId!==e||this.destroyed||!this.input)return null;this.nextFrame=a.value??null}if(!this.currentFrame)return null;let s=this.currentFrame.canvas;return{width:s.width,height:s.height,canvas:s}}async performDecode(t){let e=Math.max(0,Number.isFinite(t)?t:0);try{return await this.performDecodeInternal(e)}catch(r){let i=r;if(i?.name==="InputDisposedError"||i?.message?.includes("disposed")||this.destroyed||!this.input)return null;this.resetSinks();try{if(!this.isHeadless&&this.input&&!this.destroyed){let n=await this.input.getPrimaryVideoTrack();if(n&&!this.destroyed)return this.canvasSink=new K(n,{poolSize:3,alpha:!0,decoderOptions:{hardwareAcceleration:"prefer-software"}}),await this.performDecodeInternal(e)}}catch{}throw r}}},tt=class extends ${audioSink=null;onDestroy(){this.audioSink=null}async startIterator(t,e){this.audioSink&&(this.iterator?.return(),this.iterator=this.audioSink.buffers(t),this.iteratorStartTimestamp=t)}async*getBuffers(t){try{if(await this.init(),this.destroyed||!this.input)return;if(!this.audioSink){let i=await this.input.getPrimaryAudioTrack();if(!i)return;this.audioSink=new dt(i)}(!this.iterator||Math.abs(t-this.iteratorStartTimestamp)>.05)&&(this.currentFetchId++,await this.startIterator(t,this.currentFetchId));let r=this.currentFetchId;if(!this.iterator)return;for await(let i of this.iterator){if(this.currentFetchId!==r||this.destroyed||!this.input)break;this.iteratorStartTimestamp=i.timestamp+i.duration,yield i}}catch(e){let r=e;if(r?.name==="InputDisposedError"||r?.message?.includes("disposed")||this.destroyed||!this.input)return;throw e}finally{let e=this.currentFetchId;this.currentFetchId===e&&(this.iterator=null)}}},et=class{videoDecoders=new Map;audioDecoders=new Map;lastAccessed=new Map;touchKey(t){this.lastAccessed.set(t,Date.now())}destroy(){for(let t of this.videoDecoders.values())try{t.destroy()}catch{}this.videoDecoders.clear();for(let t of this.audioDecoders.values())try{t.destroy()}catch{}this.audioDecoders.clear(),this.lastAccessed.clear()}prune(t=3e5){let e=Date.now();for(let[r,i]of this.lastAccessed.entries())if(e-i>t){let n=this.videoDecoders.get(r);n&&(n.destroy(),this.videoDecoders.delete(r));let s=this.audioDecoders.get(r);s&&(s.destroy(),this.audioDecoders.delete(r)),this.lastAccessed.delete(r)}}getVideo(t,e,r){let i=`${t}-${e}-${r??"default"}`,n=this.videoDecoders.get(i);return n||(n=new J(t,e),this.videoDecoders.set(i,n)),this.touchKey(i),this.prune(),n}getAudio(t,e){let r=`${t}-${e??"default"}`,i=this.audioDecoders.get(r);return i||(i=new tt(t,!1),this.audioDecoders.set(r,i)),this.touchKey(r),this.prune(),i}clearNode(t){for(let[e,r]of this.videoDecoders)e.includes(t)&&(r.destroy(),this.videoDecoders.delete(e),this.lastAccessed.delete(e));for(let[e,r]of this.audioDecoders)e.includes(t)&&(r.destroy(),this.audioDecoders.delete(e),this.lastAccessed.delete(e))}},Vt=new et;g();g();var yt=`
2
2
  struct CompositeUniforms {
3
3
  blendMode : u32,
4
4
  padding1 : u32,
@@ -1 +1 @@
1
- import{a as l}from"./chunk-YK4XHUP4.mjs";import{b as w}from"./chunk-HYBAPT6I.mjs";import{d as u,e as p}from"./chunk-BVF64D6H.mjs";p();var g=null,i=new Map,b=new Set,c=new Map,F=new Map;async function v(e,r){let t=r;if(r.startsWith("/"))if(w)t=`${w}${r}`;else{let s=await import("./shims/fs-promises.mjs");try{await s.access(r)}catch{throw new Error(`Relative font URL "${r}" cannot be resolved because BASE_URL is not configured.`)}}if(i.has(t))return i.get(t);if(t.startsWith("file://"))try{let s=new URL(t).pathname;return u.platform==="win32"&&s.startsWith("/")&&(s=s.slice(1)),i.set(t,s),s}catch{let s=t.replace(/^file:\/\//,"");return i.set(t,s),s}if(!t.startsWith("http://")&&!t.startsWith("https://"))return t;let n=await import("./shims/fs-promises.mjs"),a=await import("./shims/path.mjs"),o=await import("./shims/os.mjs");g||(g=a.join(o.tmpdir(),"gatewai-fonts"),await n.mkdir(g,{recursive:!0}).catch(()=>{}));let $=e.replace(/[^a-zA-Z0-9_-]/g,"_"),m=new URL(t),f=a.extname(m.pathname);(!f||f.length>5)&&(f=".ttf");let d=a.join(g,`${$}-${Date.now()}${f}`),h=await fetch(t);if(!h.ok)throw new Error(`Failed to fetch font from ${t}: ${h.statusText}`);let P=await h.arrayBuffer();return await n.writeFile(d,Buffer.from(P)),i.set(t,d),d}async function U(e,r){if(c.has(e))return c.get(e);let t=globalThis;try{let n=await v(e,r);c.set(e,n),l(n===r?`[registerHeadlessFont] Registered "${e}" from ${n}`:`[registerHeadlessFont] Registered "${e}" from ${r} (cached at ${n})`);try{t.OffscreenCanvas&&typeof t.OffscreenCanvas.registerFont=="function"&&(t.OffscreenCanvas.registerFont(n,{family:e}),b.add(e))}catch(a){console.warn(`[registerHeadlessFont] SkiaCanvas registration failed for "${e}" (non-fatal):`,a)}return n}catch(n){console.warn(`[registerHeadlessFont] Failed to download font "${e}" from ${r}:`,n)}}function C(e){return c.get(e)}async function L(e){let r=F.get(e);if(r)return r;let t=c.get(e);if(t)try{let a=await(await import("./shims/fs-promises.mjs")).readFile(t),o=new Uint8Array(a.length);return o.set(a),l(`[getHeadlessFontData] Read local font binary for "${e}" from: ${t} (${o.length} bytes)`),F.set(e,o),o}catch(n){console.warn(`[getHeadlessFontData] Failed to read font file from ${t}:`,n)}}export{U as a,C as b,L as c};
1
+ import{a as l}from"./chunk-ZJFAGIOM.mjs";import{b as w}from"./chunk-HYBAPT6I.mjs";import{d as u,e as p}from"./chunk-BVF64D6H.mjs";p();var g=null,i=new Map,b=new Set,c=new Map,F=new Map;async function v(e,r){let t=r;if(r.startsWith("/"))if(w)t=`${w}${r}`;else{let s=await import("./shims/fs-promises.mjs");try{await s.access(r)}catch{throw new Error(`Relative font URL "${r}" cannot be resolved because BASE_URL is not configured.`)}}if(i.has(t))return i.get(t);if(t.startsWith("file://"))try{let s=new URL(t).pathname;return u.platform==="win32"&&s.startsWith("/")&&(s=s.slice(1)),i.set(t,s),s}catch{let s=t.replace(/^file:\/\//,"");return i.set(t,s),s}if(!t.startsWith("http://")&&!t.startsWith("https://"))return t;let n=await import("./shims/fs-promises.mjs"),a=await import("./shims/path.mjs"),o=await import("./shims/os.mjs");g||(g=a.join(o.tmpdir(),"gatewai-fonts"),await n.mkdir(g,{recursive:!0}).catch(()=>{}));let $=e.replace(/[^a-zA-Z0-9_-]/g,"_"),m=new URL(t),f=a.extname(m.pathname);(!f||f.length>5)&&(f=".ttf");let d=a.join(g,`${$}-${Date.now()}${f}`),h=await fetch(t);if(!h.ok)throw new Error(`Failed to fetch font from ${t}: ${h.statusText}`);let P=await h.arrayBuffer();return await n.writeFile(d,Buffer.from(P)),i.set(t,d),d}async function U(e,r){if(c.has(e))return c.get(e);let t=globalThis;try{let n=await v(e,r);c.set(e,n),l(n===r?`[registerHeadlessFont] Registered "${e}" from ${n}`:`[registerHeadlessFont] Registered "${e}" from ${r} (cached at ${n})`);try{t.OffscreenCanvas&&typeof t.OffscreenCanvas.registerFont=="function"&&(t.OffscreenCanvas.registerFont(n,{family:e}),b.add(e))}catch(a){console.warn(`[registerHeadlessFont] SkiaCanvas registration failed for "${e}" (non-fatal):`,a)}return n}catch(n){console.warn(`[registerHeadlessFont] Failed to download font "${e}" from ${r}:`,n)}}function C(e){return c.get(e)}async function L(e){let r=F.get(e);if(r)return r;let t=c.get(e);if(t)try{let a=await(await import("./shims/fs-promises.mjs")).readFile(t),o=new Uint8Array(a.length);return o.set(a),l(`[getHeadlessFontData] Read local font binary for "${e}" from: ${t} (${o.length} bytes)`),F.set(e,o),o}catch(n){console.warn(`[getHeadlessFontData] Failed to read font file from ${t}:`,n)}}export{U as a,C as b,L as c};
@@ -1,3 +1,3 @@
1
- import{a as F}from"./chunk-RJJRPL42.mjs";import{b as T,d as m}from"./chunk-YK4XHUP4.mjs";import{m as y}from"./chunk-4GEWSUX5.mjs";import{o}from"./chunk-YAQFFQPG.mjs";import{d as g,e as d}from"./chunk-BVF64D6H.mjs";d();d();var U=65536,x=1953658213,N=1954115633,$=1330926671,k=1953784678;function P(e,t){if(e.length<12)throw new Error(`Invalid font binary for "${t}": File size (${e.length} bytes) is too small to be a valid TrueType or OpenType font.`);let n=(e[0]??0)<<24|(e[1]??0)<<16|(e[2]??0)<<8|(e[3]??0);if(n===U||n===x||n===N||n===k)return"truetype";if(n===$)return"opentype";let r=(n>>>0).toString(16).padStart(8,"0");throw new Error(`Invalid font format for "${t}": Expected a valid TrueType (.ttf) or OpenType (.otf) font binary. Found header tag: 0x${r}.`)}async function v(e){if(e instanceof Uint8Array)return{buffer:e};if(typeof e!="string")throw new TypeError(`Font source must be a file path string or Uint8Array, received: ${typeof e}`);let t=e;if(t.startsWith("http://")||t.startsWith("https://")){let i=await fetch(t);if(!i.ok)throw new Error(`Failed to download font from "${t}": HTTP ${i.status} ${i.statusText}`);let l=await i.arrayBuffer();return{buffer:new Uint8Array(l),filePath:t}}if(t.startsWith("file://"))try{t=new URL(t).pathname}catch{t=t.replace(/^file:\/\//,"")}let n=[t,o.resolve(g.cwd(),t),o.resolve(g.cwd(),"assets/fonts",t),o.resolve(g.cwd(),"assets/fonts",o.basename(t))],r=g.cwd();for(let i=0;i<5;i++){n.push(o.resolve(r,t)),n.push(o.resolve(r,"assets/fonts",o.basename(t)));let l=o.dirname(r);if(l===r)break;r=l}let s=null,f=null;for(let i of n)try{if((await y.stat(i)).isFile()){s=i,f=await y.readFile(i);break}}catch{}if(!s||!f)throw new Error(`Font file not found: "${e}". Checked candidate locations:
1
+ import{a as F}from"./chunk-VWLR2AZR.mjs";import{b as T,d as m}from"./chunk-ZJFAGIOM.mjs";import{m as y}from"./chunk-4GEWSUX5.mjs";import{o}from"./chunk-YAQFFQPG.mjs";import{d as g,e as d}from"./chunk-BVF64D6H.mjs";d();d();var U=65536,x=1953658213,N=1954115633,$=1330926671,k=1953784678;function P(e,t){if(e.length<12)throw new Error(`Invalid font binary for "${t}": File size (${e.length} bytes) is too small to be a valid TrueType or OpenType font.`);let n=(e[0]??0)<<24|(e[1]??0)<<16|(e[2]??0)<<8|(e[3]??0);if(n===U||n===x||n===N||n===k)return"truetype";if(n===$)return"opentype";let r=(n>>>0).toString(16).padStart(8,"0");throw new Error(`Invalid font format for "${t}": Expected a valid TrueType (.ttf) or OpenType (.otf) font binary. Found header tag: 0x${r}.`)}async function v(e){if(e instanceof Uint8Array)return{buffer:e};if(typeof e!="string")throw new TypeError(`Font source must be a file path string or Uint8Array, received: ${typeof e}`);let t=e;if(t.startsWith("http://")||t.startsWith("https://")){let i=await fetch(t);if(!i.ok)throw new Error(`Failed to download font from "${t}": HTTP ${i.status} ${i.statusText}`);let l=await i.arrayBuffer();return{buffer:new Uint8Array(l),filePath:t}}if(t.startsWith("file://"))try{t=new URL(t).pathname}catch{t=t.replace(/^file:\/\//,"")}let n=[t,o.resolve(g.cwd(),t),o.resolve(g.cwd(),"assets/fonts",t),o.resolve(g.cwd(),"assets/fonts",o.basename(t))],r=g.cwd();for(let i=0;i<5;i++){n.push(o.resolve(r,t)),n.push(o.resolve(r,"assets/fonts",o.basename(t)));let l=o.dirname(r);if(l===r)break;r=l}let s=null,f=null;for(let i of n)try{if((await y.stat(i)).isFile()){s=i,f=await y.readFile(i);break}}catch{}if(!s||!f)throw new Error(`Font file not found: "${e}". Checked candidate locations:
2
2
  - ${n.join(`
3
3
  - `)}`);return{buffer:new Uint8Array(f.buffer,f.byteOffset,f.byteLength),filePath:s}}var b=class e{static instance=null;fonts=new Map;constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}static async register(t,n){return e.getInstance().register(t,n)}static async registerEmojiFont(t){let{buffer:n,filePath:r}=await v(t);P(n,r??(typeof t=="string"?t:"Uint8Array")),m.setEmojiFont(n,r)}static get(t){return e.getInstance().get(t)}static has(t){return e.getInstance().has(t)}static getAll(){return e.getInstance().getAll()}static getRegisteredFontPaths(){return e.getInstance().getRegisteredFontPaths()}static clear(){e.getInstance().clear()}async register(t,n){let r,s,f,i;if(typeof t=="object"&&t!==null)r=t.family,s=t.source,f=t.weight,i=t.style;else if(typeof t=="string"&&n!==void 0)r=t,s=n;else if(typeof t=="string")r=void 0,s=t;else throw new TypeError("Invalid arguments passed to FontManager.register");let{buffer:l,filePath:u}=await v(s),h=u??(typeof s=="string"?s:"Uint8Array"),E=P(l,h),c;try{let a=T(l);a&&"fonts"in a&&Array.isArray(a.fonts)&&a.fonts.length>0?c=a.fonts[0]:c=a}catch(a){let A=a instanceof Error?a.message:String(a);throw new Error(`Failed to parse TrueType/OpenType font binary for "${h}": ${A}`)}let R=c.familyName||c.postscriptName||o.parse(h).name,p=r?.trim()||R,w={family:p,source:s,filePath:u,format:E,postscriptName:c.postscriptName,unitsPerEm:c.unitsPerEm,weight:f,style:i};return this.fonts.set(p,w),u&&await F(p,u),m.setParsed(p,c),w}get(t){return this.fonts.get(t)}has(t){return this.fonts.has(t)}getAll(){return Array.from(this.fonts.values())}getRegisteredFontPaths(){let t=[];for(let n of this.fonts.values())n.filePath?t.push(n.filePath):typeof n.source=="string"&&t.push(n.source);return t}clear(){this.fonts.clear()}};export{b as a};