@jackuait/blok 0.16.1 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/dist/blok.cjs +1 -1
  2. package/dist/blok.iife.js +4 -4
  3. package/dist/blok.mjs +2 -2
  4. package/dist/blok.umd.js +4 -4
  5. package/dist/chunks/APEv2Parser-4KTzNuV0.cjs +1 -0
  6. package/dist/chunks/APEv2Parser-WvRvu4zL.mjs +187 -0
  7. package/dist/chunks/AbstractID3Parser-DM9acVTg.mjs +34 -0
  8. package/dist/chunks/AbstractID3Parser-o6LG6Iyj.cjs +1 -0
  9. package/dist/chunks/AiffParser-C_VaWeb5.mjs +109 -0
  10. package/dist/chunks/AiffParser-DVmZ6jG0.cjs +1 -0
  11. package/dist/chunks/AsfParser-CH5F_9Wp.mjs +419 -0
  12. package/dist/chunks/AsfParser-Dwm_MRPg.cjs +1 -0
  13. package/dist/chunks/BasicParser-BFTgNkp-.mjs +743 -0
  14. package/dist/chunks/BasicParser-CLAKKNEs.cjs +1 -0
  15. package/dist/chunks/DsdiffParser-BAdYwB7y.mjs +108 -0
  16. package/dist/chunks/DsdiffParser-DRFw1wX0.cjs +1 -0
  17. package/dist/chunks/DsfParser-DWMLfBH1.mjs +61 -0
  18. package/dist/chunks/DsfParser-DjS_tBuv.cjs +1 -0
  19. package/dist/chunks/FlacParser-BdKXrY7L.mjs +255 -0
  20. package/dist/chunks/FlacParser-CPQ0VqXv.cjs +1 -0
  21. package/dist/chunks/ID3v1Parser-CPjEHype.cjs +1 -0
  22. package/dist/chunks/ID3v1Parser-DoxlznrE.mjs +75 -0
  23. package/dist/chunks/ID3v2Parser-BIrxzjBm.mjs +518 -0
  24. package/dist/chunks/ID3v2Parser-CMd_Ayt7.cjs +1 -0
  25. package/dist/chunks/ID3v2Token-Cc901eYL.cjs +1 -0
  26. package/dist/chunks/ID3v2Token-D5v9lCfb.mjs +107 -0
  27. package/dist/chunks/MP4Parser-0KMJ-q2k.mjs +811 -0
  28. package/dist/chunks/MP4Parser-B8kU67Xi.cjs +1 -0
  29. package/dist/chunks/MatroskaParser-CzZTyUP-.cjs +1 -0
  30. package/dist/chunks/MatroskaParser-fxFuCddu.mjs +814 -0
  31. package/dist/chunks/MpegParser-DX5r4iE7.cjs +1 -0
  32. package/dist/chunks/MpegParser-R-6QiuhU.mjs +513 -0
  33. package/dist/chunks/MusepackParser-DFLoF47O.mjs +187 -0
  34. package/dist/chunks/MusepackParser-OgeWmD5G.cjs +1 -0
  35. package/dist/chunks/OggParser-C1qP2qC7.mjs +251 -0
  36. package/dist/chunks/OggParser-DjscM3J-.cjs +1 -0
  37. package/dist/chunks/Util-BL3wIJcu.cjs +1 -0
  38. package/dist/chunks/Util-DiBcLCh8.mjs +109 -0
  39. package/dist/chunks/WavPackParser-3J7J92gh.cjs +1 -0
  40. package/dist/chunks/WavPackParser-Ck8xXsNf.mjs +116 -0
  41. package/dist/chunks/WaveParser-CiNJ-5JL.cjs +1 -0
  42. package/dist/chunks/WaveParser-hxQlWijT.mjs +187 -0
  43. package/dist/chunks/{blok-DEVVs3xk.cjs → blok-B7IRrvgX.cjs} +11 -11
  44. package/dist/chunks/{blok-D1e9swtF.mjs → blok-BoAuTqli.mjs} +776 -780
  45. package/dist/chunks/{constants-DfGAwzgk.mjs → constants-BO6zLfL2.mjs} +274 -274
  46. package/dist/chunks/constants-BWoyU4yv.cjs +606 -0
  47. package/dist/chunks/core-CqiEzfU3.mjs +292 -0
  48. package/dist/chunks/core-DdDpt2u7.mjs +3931 -0
  49. package/dist/chunks/core-YGVcFb_q.cjs +1 -0
  50. package/dist/chunks/core-uWDvHWK7.cjs +6 -0
  51. package/dist/chunks/{i18next-loader-BID4jAFG.cjs → i18next-loader-BBPMegxc.cjs} +1 -1
  52. package/dist/chunks/{i18next-loader-BH_a6G9t.mjs → i18next-loader-K-ir8UKk.mjs} +1 -1
  53. package/dist/chunks/{lightweight-i18n-B0VO8Rft.mjs → lightweight-i18n-DJpMke7a.mjs} +59 -0
  54. package/dist/chunks/lightweight-i18n-LFW8S8u-.cjs +1 -0
  55. package/dist/{messages-Ck7HWiG_.mjs → chunks/messages-3jkCmB_A.mjs} +60 -1
  56. package/dist/{messages-6RcfJ59a.mjs → chunks/messages-5339ApgH.mjs} +60 -1
  57. package/dist/{messages-CWdh59uz2.mjs → chunks/messages-7LWW3BVh.mjs} +60 -1
  58. package/dist/chunks/messages-9B1F-k48.cjs +1 -0
  59. package/dist/chunks/messages-Au1UpgkX.cjs +1 -0
  60. package/dist/chunks/messages-B-u5B7tY.cjs +1 -0
  61. package/dist/chunks/{messages-Bz_fTG46.mjs → messages-B01D7aHY.mjs} +60 -1
  62. package/dist/chunks/{messages-CEslBsO62.mjs → messages-B2iaIrIu.mjs} +60 -1
  63. package/dist/chunks/messages-B6794_2J.cjs +1 -0
  64. package/dist/chunks/{messages-BDNdC6-X.cjs → messages-B6dbtt1c.cjs} +1 -1
  65. package/dist/chunks/{messages-CVHSfosB.cjs → messages-B6yMdb3B.cjs} +1 -1
  66. package/dist/chunks/{messages-f1NcMMTR2.cjs → messages-B7st3eF_.cjs} +1 -1
  67. package/dist/chunks/{messages-D2nTfhRa2.cjs → messages-BHCepNsI.cjs} +1 -1
  68. package/dist/chunks/{messages-DB6z9ybS.cjs → messages-BHdKd7pH.cjs} +1 -1
  69. package/dist/{messages-C-XKbE2c.mjs → chunks/messages-BO-L5oN9.mjs} +60 -1
  70. package/dist/chunks/{messages-DDnB1EFE2.mjs → messages-BRTWvTAP.mjs} +60 -1
  71. package/dist/{messages-CUsdyCrN2.mjs → chunks/messages-BUvlOqll.mjs} +60 -1
  72. package/dist/chunks/messages-BV22YIZ_.cjs +1 -0
  73. package/dist/chunks/messages-BXp_U3uS.cjs +1 -0
  74. package/dist/{messages-BfGAGIg-2.mjs → chunks/messages-BYCHzM7F.mjs} +60 -1
  75. package/dist/chunks/messages-B_cHWyWC.cjs +1 -0
  76. package/dist/{messages-BbFJ2r9p.mjs → chunks/messages-B_d857cA.mjs} +60 -1
  77. package/dist/chunks/messages-BaVZgTrw.cjs +1 -0
  78. package/dist/{messages-DaoTSrJW.mjs → chunks/messages-Bb80Csl3.mjs} +60 -1
  79. package/dist/{messages-C1d7I7f_2.mjs → chunks/messages-BbZz_Anm.mjs} +60 -1
  80. package/dist/{messages-kb2GSl-V.mjs → chunks/messages-BdL8bmTL.mjs} +60 -1
  81. package/dist/chunks/{messages-CcvcAZOt.mjs → messages-BeS9EOEO.mjs} +60 -1
  82. package/dist/chunks/{messages-BG1Tn41d.cjs → messages-BjYhwRk7.cjs} +1 -1
  83. package/dist/chunks/{messages-CUxk6xrQ.cjs → messages-BkgBVEiE.cjs} +1 -1
  84. package/dist/chunks/{messages-BhTV7PCN.mjs → messages-Bmq--WTx.mjs} +60 -1
  85. package/dist/{messages-Z8HMjhe9.mjs → chunks/messages-Bp0LdGKj.mjs} +60 -1
  86. package/dist/chunks/{messages-Bq7pLz_h2.mjs → messages-BpMWMH9_.mjs} +60 -1
  87. package/dist/chunks/{messages-C-N1XBvh2.cjs → messages-BsTzdfZF.cjs} +1 -1
  88. package/dist/chunks/{messages-p5w1kuc5.cjs → messages-BveiGA2x.cjs} +1 -1
  89. package/dist/{messages-CSVEbRhT.mjs → chunks/messages-BwOUSDJR.mjs} +60 -1
  90. package/dist/chunks/messages-ByNR9m9W.cjs +1 -0
  91. package/dist/{messages-B8BXCJBA.mjs → chunks/messages-Byn9-dhb2.mjs} +60 -1
  92. package/dist/chunks/{messages-DaqNOQ8p.mjs → messages-C0swL9CY.mjs} +60 -1
  93. package/dist/chunks/{messages-CO_hj1x6.cjs → messages-C2ptZOWh.cjs} +1 -1
  94. package/dist/chunks/{messages-Dp5C7vWz.mjs → messages-C3rGCBi_.mjs} +60 -1
  95. package/dist/{messages-BytEaMMs.mjs → chunks/messages-C8_r3iTR2.mjs} +60 -1
  96. package/dist/chunks/{messages-Dp5SW9D-.mjs → messages-CATH_uz1.mjs} +60 -1
  97. package/dist/chunks/{messages-Bi3snvmH2.cjs → messages-CBbgEXuO.cjs} +1 -1
  98. package/dist/chunks/messages-CEySIig9.cjs +1 -0
  99. package/dist/chunks/messages-CGdCpNZ62.cjs +1 -0
  100. package/dist/chunks/{messages-CpJW0LBR.cjs → messages-CH9SBR-i.cjs} +1 -1
  101. package/dist/{messages-2pXizYBd.mjs → chunks/messages-CI2W7P-j.mjs} +60 -1
  102. package/dist/chunks/{messages-CHizzxUv.mjs → messages-CIBYzzFy.mjs} +60 -1
  103. package/dist/chunks/{messages-Cz7AbEFm.cjs → messages-CJFSq8Fl.cjs} +1 -1
  104. package/dist/chunks/{messages-DG8Lmqf52.cjs → messages-CM8uUnPx.cjs} +1 -1
  105. package/dist/chunks/{messages-Cf5mu1AT.cjs → messages-COx3hDcP.cjs} +1 -1
  106. package/dist/chunks/messages-CQT8TtiF.cjs +1 -0
  107. package/dist/chunks/{messages-DubJ63UL.mjs → messages-CRUb9o5k.mjs} +60 -1
  108. package/dist/chunks/messages-CT8djlV6.cjs +1 -0
  109. package/dist/{messages-BYyRYlTQ2.mjs → chunks/messages-CUPup5e3.mjs} +60 -1
  110. package/dist/chunks/{messages-BSyXBvUi2.cjs → messages-CVrOxu3J.cjs} +1 -1
  111. package/dist/chunks/messages-CWFSMzug2.cjs +1 -0
  112. package/dist/{messages-BXgGBpmY.mjs → chunks/messages-CX0tJpOb.mjs} +60 -1
  113. package/dist/chunks/{messages-xMrks-Gg.mjs → messages-CXk-iM-i.mjs} +60 -1
  114. package/dist/chunks/{messages-B-3_M44j.cjs → messages-CZJZ-au3.cjs} +1 -1
  115. package/dist/chunks/messages-CZddldga.cjs +1 -0
  116. package/dist/{messages-BmKhZE7I.mjs → chunks/messages-Ca9zIrBo.mjs} +60 -1
  117. package/dist/{messages-D1jUHOKr.mjs → chunks/messages-CbyVDo8y.mjs} +60 -1
  118. package/dist/chunks/{messages-CZQuqbNz2.cjs → messages-CcsM8Q7g.cjs} +1 -1
  119. package/dist/chunks/{messages-B3xnntgx2.mjs → messages-CeIzWL_4.mjs} +60 -1
  120. package/dist/{messages-DPZsygzY.mjs → chunks/messages-CeLv1whu2.mjs} +60 -1
  121. package/dist/chunks/messages-Ciq5_PsP.cjs +1 -0
  122. package/dist/{messages-qjir1Zx9.mjs → chunks/messages-CjCn5IsF.mjs} +60 -1
  123. package/dist/chunks/messages-CjfEt9bg.cjs +1 -0
  124. package/dist/{messages-S8uz2_bw2.mjs → chunks/messages-Ck1-ddbo.mjs} +60 -1
  125. package/dist/{messages-zoHZbvbe.mjs → chunks/messages-CkosWGGH.mjs} +60 -1
  126. package/dist/chunks/{messages-Bh3E53-f2.mjs → messages-Cl_pM31G.mjs} +60 -1
  127. package/dist/chunks/messages-CmsAbu_A.cjs +1 -0
  128. package/dist/chunks/messages-CqRtDVFO.cjs +1 -0
  129. package/dist/chunks/{messages-jAgR8EPP.cjs → messages-CuMtymEs.cjs} +1 -1
  130. package/dist/chunks/{messages-CSc7Lh_3.mjs → messages-Cvg_uTfy.mjs} +60 -1
  131. package/dist/chunks/messages-Cy-2_lIA.cjs +1 -0
  132. package/dist/{messages-B_XoP1A3.mjs → chunks/messages-D-QWtvWg.mjs} +60 -1
  133. package/dist/{messages-TfPmsrxh.mjs → chunks/messages-D-p-omWy.mjs} +60 -1
  134. package/dist/{messages-Bj8K6_bv.mjs → chunks/messages-D-s4_vnU.mjs} +60 -1
  135. package/dist/chunks/messages-D41fO84y.cjs +1 -0
  136. package/dist/{messages-BXs-Zwhx.mjs → chunks/messages-D4u2PSQw.mjs} +60 -1
  137. package/dist/chunks/messages-D7H9JUDr.cjs +1 -0
  138. package/dist/chunks/{messages-Bttb4o0k.cjs → messages-D7sU-NqL.cjs} +1 -1
  139. package/dist/chunks/{messages-Dml6u25s2.cjs → messages-DCwrXfck.cjs} +1 -1
  140. package/dist/{messages-CS6vG53A.mjs → chunks/messages-DDJkNbJy.mjs} +60 -1
  141. package/dist/{messages-BWzRZ5Un.mjs → chunks/messages-DDX6I6MX.mjs} +60 -1
  142. package/dist/chunks/messages-DEg5FAg1.cjs +1 -0
  143. package/dist/chunks/{messages-Bs9JOJDc.cjs → messages-DFHNw6PQ.cjs} +1 -1
  144. package/dist/chunks/{messages-M2lNlKhI2.mjs → messages-DHv7knYB.mjs} +60 -1
  145. package/dist/chunks/{messages-BxRX_hY12.cjs → messages-DIFwztFo.cjs} +1 -1
  146. package/dist/chunks/{messages-UoKgx7_8.cjs → messages-DIetNXTx.cjs} +1 -1
  147. package/dist/{messages-CdmaH2dA2.mjs → chunks/messages-DNtAzacv.mjs} +60 -1
  148. package/dist/chunks/messages-DOqJ6ogK.cjs +1 -0
  149. package/dist/chunks/messages-DQJcAz4s.cjs +1 -0
  150. package/dist/{messages-CzabNeP5.mjs → chunks/messages-DQfi2DoY.mjs} +60 -1
  151. package/dist/chunks/{messages-De0Fkl0K.mjs → messages-DQr7bXMD.mjs} +60 -1
  152. package/dist/chunks/messages-DT-JnTnw.cjs +1 -0
  153. package/dist/chunks/{messages-C2-v6HdR.cjs → messages-DUWCkLYR.cjs} +1 -1
  154. package/dist/chunks/{messages-BItPVbHx.cjs → messages-Da8yFc7l.cjs} +1 -1
  155. package/dist/chunks/{messages-BzC8TVYC.mjs → messages-DgF8OkNr.mjs} +60 -1
  156. package/dist/{messages-Dw7P8bMa2.mjs → chunks/messages-DiODNXET.mjs} +60 -1
  157. package/dist/{messages-CJsMZvUv.mjs → chunks/messages-DjZoCJ00.mjs} +60 -1
  158. package/dist/chunks/messages-DjrfovG0.cjs +1 -0
  159. package/dist/chunks/messages-DmjccFHq.cjs +1 -0
  160. package/dist/chunks/{messages-Vbqmvxs1.cjs → messages-DpNmnBjK.cjs} +1 -1
  161. package/dist/chunks/messages-DtaPHADA.cjs +1 -0
  162. package/dist/{messages-DFKu1WGX2.mjs → chunks/messages-DuD4ut1b.mjs} +60 -1
  163. package/dist/chunks/{messages-BqM6l_JM2.mjs → messages-DuHFGMCJ.mjs} +60 -1
  164. package/dist/{messages-tcfLP2b2.mjs → chunks/messages-Dwl878eS.mjs} +60 -1
  165. package/dist/chunks/{messages-BVuodJIJ.cjs → messages-ETJ7tQ9O.cjs} +1 -1
  166. package/dist/chunks/messages-EsX3eikv.cjs +1 -0
  167. package/dist/{messages-B4cc5O5K.mjs → chunks/messages-HJnG9r2l.mjs} +60 -1
  168. package/dist/chunks/{messages-Ckej-nnJ.cjs → messages-Hfo6uCIC.cjs} +1 -1
  169. package/dist/chunks/{messages-CT025FgD2.cjs → messages-IqNWRaNS.cjs} +1 -1
  170. package/dist/chunks/{messages-Cd-FaIr_2.mjs → messages-MPe9FjYe.mjs} +60 -1
  171. package/dist/chunks/messages-NJAjMFXd.cjs +1 -0
  172. package/dist/{messages-B0n-WDK72.mjs → chunks/messages-QCaF3d92.mjs} +60 -1
  173. package/dist/chunks/messages-SozFksSf.cjs +1 -0
  174. package/dist/chunks/messages-UXS3zL9A2.cjs +1 -0
  175. package/dist/chunks/{messages-5tb-mSXS.cjs → messages-VeyvtTce.cjs} +1 -1
  176. package/dist/chunks/{messages-BGoPxZ5n.mjs → messages-Xh-c7d4C.mjs} +60 -1
  177. package/dist/chunks/{messages-BfYWRC3o.cjs → messages-Z4LYgfWc.cjs} +1 -1
  178. package/dist/{messages-BCGyLzFB2.mjs → chunks/messages-ZMG7qQ3D.mjs} +60 -1
  179. package/dist/chunks/{messages-LWyC-1ol.mjs → messages-cSBZ5qVe.mjs} +60 -1
  180. package/dist/chunks/{messages-XM0y9kXy2.cjs → messages-gh5G15J1.cjs} +1 -1
  181. package/dist/{messages-DGwIRpOH2.mjs → chunks/messages-jEbEE90_.mjs} +60 -1
  182. package/dist/{messages-Cg3w36Bc.mjs → chunks/messages-kqnzps-X.mjs} +60 -1
  183. package/dist/chunks/{messages-S_Bmo_Qc.mjs → messages-m-A6ArIM.mjs} +60 -1
  184. package/dist/chunks/{messages-BHE1mg5A2.mjs → messages-t26x8wxB.mjs} +60 -1
  185. package/dist/chunks/{messages-s9I-JHCa.cjs → messages-tR0BdeVG.cjs} +1 -1
  186. package/dist/chunks/{messages-CxVi9cnz.mjs → messages-typO_i_k.mjs} +60 -1
  187. package/dist/chunks/{messages-Beh905t72.mjs → messages-ypIHI9Fr.mjs} +60 -1
  188. package/dist/{messages-ChivLKDg2.mjs → chunks/messages-zPUQsksJ.mjs} +60 -1
  189. package/dist/chunks/{tools-vX3wCW3a.mjs → tools-DRwLS-6t.mjs} +4223 -2323
  190. package/dist/chunks/tools-DXagFf6I.cjs +208 -0
  191. package/dist/chunks/types-BNsalfLy.cjs +1 -0
  192. package/dist/chunks/types-gj36fzRQ.mjs +28 -0
  193. package/dist/chunks/webm-muxer-BEeYNPIp.cjs +5 -0
  194. package/dist/chunks/webm-muxer-Doy8JtlV.mjs +864 -0
  195. package/dist/full.cjs +1 -1
  196. package/dist/full.mjs +10 -10
  197. package/dist/locales.mjs +126 -67
  198. package/dist/{chunks/messages-14GzwdH92.mjs → messages-4drvqPN8.mjs} +60 -1
  199. package/dist/{chunks/messages-CZfG1cmA2.mjs → messages-8__-vX3U.mjs} +60 -1
  200. package/dist/{chunks/messages-DyuKfskv.mjs → messages-Ao2vCNAH2.mjs} +60 -1
  201. package/dist/{messages-eFz25q1T.mjs → messages-B13GEFFu.mjs} +60 -1
  202. package/dist/{messages-C5sc4wjR.mjs → messages-B2YnZIU2.mjs} +60 -1
  203. package/dist/{chunks/messages-dZdV8VYV.mjs → messages-BI5B9bxE.mjs} +60 -1
  204. package/dist/{chunks/messages-Cc56SxY7.mjs → messages-BIgvPd6I2.mjs} +60 -1
  205. package/dist/{messages-Bd2Q-tnQ.mjs → messages-BKG0QHVl.mjs} +60 -1
  206. package/dist/{messages-DvSC5JGC2.mjs → messages-BKGg4XYm2.mjs} +60 -1
  207. package/dist/{chunks/messages-Bnm45Rmp.mjs → messages-BOWDzfkH.mjs} +60 -1
  208. package/dist/{messages-BOEP2ly_.mjs → messages-BQaiScU1.mjs} +60 -1
  209. package/dist/{chunks/messages-GXQbRrHa2.mjs → messages-BQhHthxq2.mjs} +60 -1
  210. package/dist/{chunks/messages-Cx_kyYnf2.mjs → messages-BRLWpOnP.mjs} +60 -1
  211. package/dist/{chunks/messages-CdOX6JHb2.mjs → messages-BarhGl2S2.mjs} +60 -1
  212. package/dist/{chunks/messages-PtDEkfSR2.mjs → messages-BgPDPIkO.mjs} +60 -1
  213. package/dist/{chunks/messages-BQKWm9xB.mjs → messages-BlvF3pot.mjs} +60 -1
  214. package/dist/{chunks/messages-C4Wacagz.mjs → messages-Bmu3rJwO.mjs} +60 -1
  215. package/dist/{chunks/messages-C62iC79d2.mjs → messages-BpwhHkFb2.mjs} +60 -1
  216. package/dist/{messages-DSmNNjPb.mjs → messages-BvutXmgt.mjs} +60 -1
  217. package/dist/{chunks/messages-DwU7qOBO2.mjs → messages-BwCgJUdq.mjs} +60 -1
  218. package/dist/{messages-BCeeFrNO.mjs → messages-C5IE9mXm.mjs} +60 -1
  219. package/dist/{chunks/messages-EI0ZLMIG.mjs → messages-C6R0bzW5.mjs} +60 -1
  220. package/dist/{chunks/messages-CZ4Jcn6y.mjs → messages-C9Kq8259.mjs} +60 -1
  221. package/dist/{messages-Nbssq1-N.mjs → messages-CAnOyxrm.mjs} +60 -1
  222. package/dist/{chunks/messages-DQb9YRoO2.mjs → messages-CDueJTe8.mjs} +60 -1
  223. package/dist/{chunks/messages-CpC5Cv_s.mjs → messages-CEGqNXnP.mjs} +60 -1
  224. package/dist/{messages-CWWIbebM2.mjs → messages-CF5MeYEt2.mjs} +60 -1
  225. package/dist/{chunks/messages-ID7kZQyc.mjs → messages-CGiVoFTi.mjs} +60 -1
  226. package/dist/{chunks/messages-B5eo-pGw.mjs → messages-CQzOV7VE2.mjs} +60 -1
  227. package/dist/{chunks/messages-DwAl9zoh2.mjs → messages-CUFac9Qe.mjs} +60 -1
  228. package/dist/{messages-DMH0zRig2.mjs → messages-CUcUO5bC2.mjs} +60 -1
  229. package/dist/{messages-CGZPFOEr.mjs → messages-CcF4SO9W.mjs} +60 -1
  230. package/dist/{messages-gJWgJtGo.mjs → messages-CeqpzGl9.mjs} +60 -1
  231. package/dist/{messages-BEnINcno2.mjs → messages-Cg6a88Bb2.mjs} +60 -1
  232. package/dist/{chunks/messages-BxhJFFrR.mjs → messages-Ch-SytN8.mjs} +60 -1
  233. package/dist/{chunks/messages-DzZZDveu.mjs → messages-Cn3uvFq3.mjs} +60 -1
  234. package/dist/{messages-CoSj68Ef2.mjs → messages-CqZgsrVP2.mjs} +60 -1
  235. package/dist/{messages-BrkXHD2D2.mjs → messages-CskLLTiG2.mjs} +60 -1
  236. package/dist/{chunks/messages-BSstxb1m2.mjs → messages-CusWGsl42.mjs} +60 -1
  237. package/dist/{messages-BInBVzW42.mjs → messages-Cvq2EFPT2.mjs} +60 -1
  238. package/dist/{messages-DfnSbN512.mjs → messages-CwvHO8gp2.mjs} +60 -1
  239. package/dist/{chunks/messages-DjSuzS2m2.mjs → messages-D4dovFzY2.mjs} +60 -1
  240. package/dist/{messages-BkNVOuvO2.mjs → messages-D9qgYMU82.mjs} +60 -1
  241. package/dist/{chunks/messages-D8qYNZ_T.mjs → messages-DGAWjKQZ.mjs} +60 -1
  242. package/dist/{messages-GUgmAfdB.mjs → messages-DR2JBU-H.mjs} +60 -1
  243. package/dist/{messages-iJKNW8hW2.mjs → messages-Da1woCgt2.mjs} +60 -1
  244. package/dist/{chunks/messages-DgSRzW-Y.mjs → messages-DbE-riR52.mjs} +60 -1
  245. package/dist/{chunks/messages-8vGF8iWb.mjs → messages-DcQNeoPB.mjs} +60 -1
  246. package/dist/{messages-C2pz0mJs2.mjs → messages-Dq_RdEny2.mjs} +60 -1
  247. package/dist/{chunks/messages-Vdmc6CaN.mjs → messages-Grhv5SE_.mjs} +60 -1
  248. package/dist/{messages-CX2ioEBc2.mjs → messages-HVgCKIww2.mjs} +60 -1
  249. package/dist/{messages-C9XTx39w2.mjs → messages-KyJQtOkh2.mjs} +60 -1
  250. package/dist/{messages-DPzZM5FG.mjs → messages-L4sYfXpM.mjs} +60 -1
  251. package/dist/{chunks/messages-Ced9OY9X.mjs → messages-P5B61L1J2.mjs} +60 -1
  252. package/dist/{chunks/messages-m_zk_AR3.mjs → messages-RXQKVFCJ.mjs} +60 -1
  253. package/dist/{chunks/messages-B94JmzMj.mjs → messages-UJx6PvCL.mjs} +60 -1
  254. package/dist/{chunks/messages-D1gz17wt.mjs → messages-VIQ8vjvS.mjs} +60 -1
  255. package/dist/{chunks/messages-BClegbPD.mjs → messages-bN4Zmk2m.mjs} +60 -1
  256. package/dist/{chunks/messages-DuOkV5T_.mjs → messages-fAEKzdUq.mjs} +60 -1
  257. package/dist/{chunks/messages-Cn0B5LU1.mjs → messages-gTUy3xjb.mjs} +60 -1
  258. package/dist/{chunks/messages-n1T_9w-Z.mjs → messages-hGop1gbF.mjs} +60 -1
  259. package/dist/{chunks/messages-DFUn1PHK2.mjs → messages-jQsl7cga2.mjs} +60 -1
  260. package/dist/{chunks/messages-h43rfIyt2.mjs → messages-jsrzDVZy2.mjs} +60 -1
  261. package/dist/{chunks/messages-BXmg4Rer2.mjs → messages-lnxRz5rM.mjs} +60 -1
  262. package/dist/{chunks/messages-CkRbSW3z2.mjs → messages-wmS6Z2m82.mjs} +60 -1
  263. package/dist/{messages-2jeEK-EB.mjs → messages-yuNINyS1.mjs} +60 -1
  264. package/dist/{messages-CsHwUgSZ.mjs → messages-zOl6jpOa.mjs} +60 -1
  265. package/dist/react.cjs +1 -1
  266. package/dist/react.mjs +1 -1
  267. package/dist/tools.cjs +1 -1
  268. package/dist/tools.mjs +3 -3
  269. package/dist/vendor.LICENSE.txt +395 -1
  270. package/package.json +3 -1
  271. package/src/components/i18n/locales/am/messages.json +60 -1
  272. package/src/components/i18n/locales/ar/messages.json +60 -1
  273. package/src/components/i18n/locales/az/messages.json +60 -1
  274. package/src/components/i18n/locales/bg/messages.json +60 -1
  275. package/src/components/i18n/locales/bn/messages.json +60 -1
  276. package/src/components/i18n/locales/bs/messages.json +60 -1
  277. package/src/components/i18n/locales/cs/messages.json +60 -1
  278. package/src/components/i18n/locales/da/messages.json +60 -1
  279. package/src/components/i18n/locales/de/messages.json +60 -1
  280. package/src/components/i18n/locales/dv/messages.json +60 -1
  281. package/src/components/i18n/locales/el/messages.json +60 -1
  282. package/src/components/i18n/locales/en/messages.json +59 -0
  283. package/src/components/i18n/locales/es/messages.json +60 -1
  284. package/src/components/i18n/locales/et/messages.json +60 -1
  285. package/src/components/i18n/locales/fa/messages.json +60 -1
  286. package/src/components/i18n/locales/fi/messages.json +60 -1
  287. package/src/components/i18n/locales/fil/messages.json +60 -1
  288. package/src/components/i18n/locales/fr/messages.json +60 -1
  289. package/src/components/i18n/locales/gu/messages.json +60 -1
  290. package/src/components/i18n/locales/he/messages.json +60 -1
  291. package/src/components/i18n/locales/hi/messages.json +60 -1
  292. package/src/components/i18n/locales/hr/messages.json +60 -1
  293. package/src/components/i18n/locales/hu/messages.json +60 -1
  294. package/src/components/i18n/locales/hy/messages.json +60 -1
  295. package/src/components/i18n/locales/id/messages.json +60 -1
  296. package/src/components/i18n/locales/it/messages.json +60 -1
  297. package/src/components/i18n/locales/ja/messages.json +60 -1
  298. package/src/components/i18n/locales/ka/messages.json +60 -1
  299. package/src/components/i18n/locales/km/messages.json +60 -1
  300. package/src/components/i18n/locales/kn/messages.json +60 -1
  301. package/src/components/i18n/locales/ko/messages.json +60 -1
  302. package/src/components/i18n/locales/ku/messages.json +60 -1
  303. package/src/components/i18n/locales/lo/messages.json +60 -1
  304. package/src/components/i18n/locales/lt/messages.json +60 -1
  305. package/src/components/i18n/locales/lv/messages.json +60 -1
  306. package/src/components/i18n/locales/mk/messages.json +60 -1
  307. package/src/components/i18n/locales/ml/messages.json +60 -1
  308. package/src/components/i18n/locales/mn/messages.json +60 -1
  309. package/src/components/i18n/locales/mr/messages.json +60 -1
  310. package/src/components/i18n/locales/ms/messages.json +60 -1
  311. package/src/components/i18n/locales/my/messages.json +60 -1
  312. package/src/components/i18n/locales/ne/messages.json +60 -1
  313. package/src/components/i18n/locales/nl/messages.json +60 -1
  314. package/src/components/i18n/locales/no/messages.json +60 -1
  315. package/src/components/i18n/locales/pa/messages.json +60 -1
  316. package/src/components/i18n/locales/pl/messages.json +60 -1
  317. package/src/components/i18n/locales/ps/messages.json +60 -1
  318. package/src/components/i18n/locales/pt/messages.json +60 -1
  319. package/src/components/i18n/locales/ro/messages.json +60 -1
  320. package/src/components/i18n/locales/ru/messages.json +60 -1
  321. package/src/components/i18n/locales/sd/messages.json +60 -1
  322. package/src/components/i18n/locales/si/messages.json +60 -1
  323. package/src/components/i18n/locales/sk/messages.json +60 -1
  324. package/src/components/i18n/locales/sl/messages.json +60 -1
  325. package/src/components/i18n/locales/sq/messages.json +60 -1
  326. package/src/components/i18n/locales/sr/messages.json +60 -1
  327. package/src/components/i18n/locales/sv/messages.json +60 -1
  328. package/src/components/i18n/locales/sw/messages.json +60 -1
  329. package/src/components/i18n/locales/ta/messages.json +60 -1
  330. package/src/components/i18n/locales/te/messages.json +60 -1
  331. package/src/components/i18n/locales/th/messages.json +60 -1
  332. package/src/components/i18n/locales/tr/messages.json +60 -1
  333. package/src/components/i18n/locales/ug/messages.json +60 -1
  334. package/src/components/i18n/locales/uk/messages.json +60 -1
  335. package/src/components/i18n/locales/ur/messages.json +60 -1
  336. package/src/components/i18n/locales/vi/messages.json +60 -1
  337. package/src/components/i18n/locales/yi/messages.json +60 -1
  338. package/src/components/i18n/locales/zh/messages.json +60 -1
  339. package/src/components/icons/index.ts +106 -0
  340. package/src/components/modules/paste/handlers/pattern-handler.ts +4 -7
  341. package/src/components/utils/format-bytes.ts +15 -0
  342. package/src/components/utils/max-size.ts +36 -0
  343. package/src/components/utils/media-empty-state.ts +4 -13
  344. package/src/components/utils/mime-match.ts +22 -0
  345. package/src/components/utils/upload-error-message.ts +43 -0
  346. package/src/styles/audio.css +528 -0
  347. package/src/styles/colors.css +31 -0
  348. package/src/styles/keyframes.css +8 -0
  349. package/src/styles/main.css +3 -0
  350. package/src/styles/resize-cue.css +26 -0
  351. package/src/styles/video.css +1221 -0
  352. package/src/tools/audio/constants.ts +21 -0
  353. package/src/tools/audio/controls.ts +416 -0
  354. package/src/tools/audio/empty-state.ts +45 -0
  355. package/src/tools/audio/i18n.ts +13 -0
  356. package/src/tools/audio/index.ts +482 -0
  357. package/src/tools/audio/metadata.ts +56 -0
  358. package/src/tools/audio/ui.ts +104 -0
  359. package/src/tools/audio/uploader.ts +76 -0
  360. package/src/tools/audio/waveform.ts +171 -0
  361. package/src/tools/file/constants.ts +5 -3
  362. package/src/tools/file/index.ts +45 -4
  363. package/src/tools/file/uploader.ts +5 -2
  364. package/src/tools/image/constants.ts +3 -8
  365. package/src/tools/image/converted-uploader.ts +30 -0
  366. package/src/tools/image/gif-to-webm.ts +170 -0
  367. package/src/tools/image/index.ts +125 -3
  368. package/src/tools/image/resizer.ts +39 -6
  369. package/src/tools/image/uploader.ts +4 -2
  370. package/src/tools/image/uploading-state.ts +2 -1
  371. package/src/tools/index.ts +4 -0
  372. package/src/tools/video/constants.ts +19 -0
  373. package/src/tools/video/controls.ts +1448 -0
  374. package/src/tools/video/empty-state.ts +45 -0
  375. package/src/tools/video/i18n.ts +13 -0
  376. package/src/tools/video/index.ts +521 -0
  377. package/src/tools/video/ui.ts +83 -0
  378. package/src/tools/video/uploader.ts +76 -0
  379. package/types/configs/blok-config.d.ts +2 -9
  380. package/types/tools/audio.d.ts +40 -0
  381. package/types/tools/file.d.ts +9 -3
  382. package/types/tools/image.d.ts +15 -3
  383. package/types/tools/max-size.d.ts +12 -0
  384. package/types/tools/video.d.ts +75 -0
  385. package/types/tools-entry.d.ts +9 -0
  386. package/dist/chunks/constants-B2Lcd7Kk.cjs +0 -539
  387. package/dist/chunks/lightweight-i18n-Clk37huC.cjs +0 -1
  388. package/dist/chunks/messages-04T5j1ww2.cjs +0 -1
  389. package/dist/chunks/messages-0OyEWZDW.cjs +0 -1
  390. package/dist/chunks/messages-3iHkF7Vy.cjs +0 -1
  391. package/dist/chunks/messages-98gouyMa.cjs +0 -1
  392. package/dist/chunks/messages-BAgSlZpS.cjs +0 -1
  393. package/dist/chunks/messages-BJ7clJXu2.cjs +0 -1
  394. package/dist/chunks/messages-BPYQEADI.cjs +0 -1
  395. package/dist/chunks/messages-BSxgqWqe.cjs +0 -1
  396. package/dist/chunks/messages-BdjiMHzU2.cjs +0 -1
  397. package/dist/chunks/messages-Br3ERe172.cjs +0 -1
  398. package/dist/chunks/messages-BtEDKVO7.cjs +0 -1
  399. package/dist/chunks/messages-BtevAuQS2.cjs +0 -1
  400. package/dist/chunks/messages-C6Xc3L-B2.cjs +0 -1
  401. package/dist/chunks/messages-CEquPedm.cjs +0 -1
  402. package/dist/chunks/messages-CFo-pG-t2.cjs +0 -1
  403. package/dist/chunks/messages-CXlSU8cQ2.cjs +0 -1
  404. package/dist/chunks/messages-Cf8u0aln2.cjs +0 -1
  405. package/dist/chunks/messages-Cg6qicee.cjs +0 -1
  406. package/dist/chunks/messages-CgGwGZs22.cjs +0 -1
  407. package/dist/chunks/messages-Cgg1HHSo.cjs +0 -1
  408. package/dist/chunks/messages-Ck6jEhXV.cjs +0 -1
  409. package/dist/chunks/messages-Cx1kdFH_2.cjs +0 -1
  410. package/dist/chunks/messages-DNYtMplL2.cjs +0 -1
  411. package/dist/chunks/messages-DOBcfgRF.cjs +0 -1
  412. package/dist/chunks/messages-DWeyV2N3.cjs +0 -1
  413. package/dist/chunks/messages-DkINYHo4.cjs +0 -1
  414. package/dist/chunks/messages-DsWTIuli2.cjs +0 -1
  415. package/dist/chunks/messages-JLj0J5so.cjs +0 -1
  416. package/dist/chunks/messages-o3omNKfH.cjs +0 -1
  417. package/dist/chunks/messages-p-1X5oFM2.cjs +0 -1
  418. package/dist/chunks/messages-poLdFEEs2.cjs +0 -1
  419. package/dist/chunks/messages-px_8gpHT.cjs +0 -1
  420. package/dist/chunks/messages-vdupz5T0.cjs +0 -1
  421. package/dist/chunks/tools-DiTb45BS.cjs +0 -208
  422. /package/dist/chunks/{am-B37aLxvu.cjs → am-Dc8fykoi.cjs} +0 -0
  423. /package/dist/chunks/{am-D7yfVqJS.mjs → am-DyT_H_W5.mjs} +0 -0
  424. /package/dist/chunks/{ar-ySo_KDqd.cjs → ar-B4htcHv2.cjs} +0 -0
  425. /package/dist/chunks/{ar-D00SixXA.mjs → ar-DxcVoX26.mjs} +0 -0
  426. /package/dist/chunks/{az-nCoWuGBd.cjs → az-CddDVVCC.cjs} +0 -0
  427. /package/dist/chunks/{az-BmIwKcoq.mjs → az-Ck_jWtwp.mjs} +0 -0
  428. /package/dist/chunks/{bg-BKB8_J3v.cjs → bg-BExJFlqx.cjs} +0 -0
  429. /package/dist/chunks/{bg-BTZaB21W.mjs → bg-C4_DlJ7m.mjs} +0 -0
  430. /package/dist/chunks/{bn-BQiBKtpR.cjs → bn-B3CWOlDr.cjs} +0 -0
  431. /package/dist/chunks/{bn-BVpf0XL6.mjs → bn-D0PWjX6h.mjs} +0 -0
  432. /package/dist/chunks/{bs-BSz4cPth.mjs → bs-BjqCqh8B.mjs} +0 -0
  433. /package/dist/chunks/{bs-D_lekdEb.cjs → bs-BylFYMjB.cjs} +0 -0
  434. /package/dist/chunks/{cs-Dv8Jg_Fa.cjs → cs-BzXww59F.cjs} +0 -0
  435. /package/dist/chunks/{cs-p5s4GudH.mjs → cs-R_vXAqRw.mjs} +0 -0
  436. /package/dist/chunks/{da-D33rjz-t.cjs → da-Be_YGjP-.cjs} +0 -0
  437. /package/dist/chunks/{da-BqJa8BMd.mjs → da-BuzQWEfl.mjs} +0 -0
  438. /package/dist/chunks/{de-BDDktkfI.mjs → de-BuXrJCQB.mjs} +0 -0
  439. /package/dist/chunks/{de-I8YFq0Ej.cjs → de-CuXVxRU3.cjs} +0 -0
  440. /package/dist/chunks/{el-BInM0nQo.cjs → el-CkLmGPX-.cjs} +0 -0
  441. /package/dist/chunks/{el-R63G08P0.mjs → el-d_XP5H44.mjs} +0 -0
  442. /package/dist/chunks/{es-Cj_AHhb9.cjs → es-CpevBSzX.cjs} +0 -0
  443. /package/dist/chunks/{es-BleH_dHg.mjs → es-D79FXk9q.mjs} +0 -0
  444. /package/dist/chunks/{et-BuISCVFl.mjs → et-BmawyEOM.mjs} +0 -0
  445. /package/dist/chunks/{et-BkMzN_qG.cjs → et-Dm53D0Mw.cjs} +0 -0
  446. /package/dist/chunks/{fa-C3VQIfEJ.cjs → fa-BLZQhg44.cjs} +0 -0
  447. /package/dist/chunks/{fa-CI9f3My0.mjs → fa-Cyzee-uD.mjs} +0 -0
  448. /package/dist/chunks/{fi-p8xxtchQ.cjs → fi-CktzJP0P.cjs} +0 -0
  449. /package/dist/chunks/{fi-C0_Jyps9.mjs → fi-zVk232gP.mjs} +0 -0
  450. /package/dist/chunks/{fil-DC8VTmfd.cjs → fil-BGEDSfA3.cjs} +0 -0
  451. /package/dist/chunks/{fil-BZsJ4YZG.mjs → fil-DQcS9VcY.mjs} +0 -0
  452. /package/dist/chunks/{fr-BjeioA2N.mjs → fr-CUoxzxMy.mjs} +0 -0
  453. /package/dist/chunks/{fr-Cbstr5ii.cjs → fr-DRFIW1vC.cjs} +0 -0
  454. /package/dist/chunks/{gu-CNi9WnhQ.mjs → gu-BSL13JVA.mjs} +0 -0
  455. /package/dist/chunks/{gu-DpPoUPem.cjs → gu-DCZgQPh1.cjs} +0 -0
  456. /package/dist/chunks/{he-bU_Id5XQ.mjs → he-B4fsDXlD.mjs} +0 -0
  457. /package/dist/chunks/{he-Rlv-PVKK.cjs → he-CrJki_kT.cjs} +0 -0
  458. /package/dist/chunks/{hi-CfLaLKZL.cjs → hi-B7MYHNXb.cjs} +0 -0
  459. /package/dist/chunks/{hi-CYYjJgoQ.mjs → hi-Df_jRvP-.mjs} +0 -0
  460. /package/dist/chunks/{hr-B6eFd_4M.cjs → hr-CHeiPUjb.cjs} +0 -0
  461. /package/dist/chunks/{hr-CerKCstu.mjs → hr-DC4ZNI8T.mjs} +0 -0
  462. /package/dist/chunks/{hu-DNYoHMic.mjs → hu-ClC3NxqC.mjs} +0 -0
  463. /package/dist/chunks/{hu-DQcisouf.cjs → hu-x4Ga7znM.cjs} +0 -0
  464. /package/dist/chunks/{hy-x9QOWTT6.cjs → hy-dXGxcAjA.cjs} +0 -0
  465. /package/dist/chunks/{hy-N0XBqVv_.mjs → hy-fpToCZeQ.mjs} +0 -0
  466. /package/dist/chunks/{id-G7ASv812.cjs → id-BETj6SOy.cjs} +0 -0
  467. /package/dist/chunks/{id-dmUIQB07.mjs → id-zXVZ_-tD.mjs} +0 -0
  468. /package/dist/chunks/{it-DXDwm7Aj.cjs → it-CblE5NNx.cjs} +0 -0
  469. /package/dist/chunks/{it-G9Rg2LaN.mjs → it-Cp7EdTdT.mjs} +0 -0
  470. /package/dist/chunks/{ja-DHMurrnk.cjs → ja-D4CP2G3w.cjs} +0 -0
  471. /package/dist/chunks/{ja-C1Nou_k5.mjs → ja-DoaPxTyV.mjs} +0 -0
  472. /package/dist/chunks/{ka-P0_q1_oW.cjs → ka-C6DxbxxH.cjs} +0 -0
  473. /package/dist/chunks/{ka-9rtmTdhq.mjs → ka-CwoyhuWu.mjs} +0 -0
  474. /package/dist/chunks/{km-DedsOdPY.cjs → km-BdZJI-qn.cjs} +0 -0
  475. /package/dist/chunks/{km-T8J0lGcC.mjs → km-D8jrJ9sv.mjs} +0 -0
  476. /package/dist/chunks/{kn-CAGP6H3x.cjs → kn-DsGMDyW7.cjs} +0 -0
  477. /package/dist/chunks/{kn-CMb5Cv2d.mjs → kn-IsuZc30u.mjs} +0 -0
  478. /package/dist/chunks/{ko-3D0kPtnu.cjs → ko-CFVvGmVE.cjs} +0 -0
  479. /package/dist/chunks/{ko-DulVmkjC.mjs → ko-DxAtBe72.mjs} +0 -0
  480. /package/dist/chunks/{ku-BYzD3GnU.cjs → ku-B-43xPpS.cjs} +0 -0
  481. /package/dist/chunks/{ku-C5mlSVfC.mjs → ku-Da-1BcEg.mjs} +0 -0
  482. /package/dist/chunks/{lo-D9ixPNJD.cjs → lo-DtVyNkq4.cjs} +0 -0
  483. /package/dist/chunks/{lo-Cw2hfj84.mjs → lo-p9PUOxXA.mjs} +0 -0
  484. /package/dist/chunks/{lt-CzfEJdVd.cjs → lt-BaHJn9M4.cjs} +0 -0
  485. /package/dist/chunks/{lt-Ceg9NAdI.mjs → lt-C4lGuzQq.mjs} +0 -0
  486. /package/dist/chunks/{lv-3CXzQoic.mjs → lv-B5Cp4JEf.mjs} +0 -0
  487. /package/dist/chunks/{lv-DWyBbTHI.cjs → lv-BHXmLxXV.cjs} +0 -0
  488. /package/dist/chunks/{mk-CEbNT0Oe.mjs → mk-B5rDdPUj.mjs} +0 -0
  489. /package/dist/chunks/{mk-Anl5AUSU.cjs → mk-BhwKijB_.cjs} +0 -0
  490. /package/dist/chunks/{ml-B1QmnbTX.cjs → ml-DxZv3Mzc.cjs} +0 -0
  491. /package/dist/chunks/{ml-DaF_zn1h.mjs → ml-gamedfCk.mjs} +0 -0
  492. /package/dist/chunks/{mn-DLpgZmIl.mjs → mn-BbhhPusH.mjs} +0 -0
  493. /package/dist/chunks/{mn-DM3AWPQI.cjs → mn-Bzi4YTMA.cjs} +0 -0
  494. /package/dist/chunks/{mr-CPCMiBsx.cjs → mr-BENatxZg.cjs} +0 -0
  495. /package/dist/chunks/{mr-C-d3CWSD.mjs → mr-DO_kNyu7.mjs} +0 -0
  496. /package/dist/chunks/{ms-BKg5zJ6g.cjs → ms-BVop2DJc.cjs} +0 -0
  497. /package/dist/chunks/{ms-D3Zil5Dz.mjs → ms-eIjFVRpo.mjs} +0 -0
  498. /package/dist/chunks/{my-HzQdQq6H.mjs → my-nf0gvOOX.mjs} +0 -0
  499. /package/dist/chunks/{my-BhrbZPAE.cjs → my-qLePPAWv.cjs} +0 -0
  500. /package/dist/chunks/{ne-Dw6kUPkS.mjs → ne-DOaubYly.mjs} +0 -0
  501. /package/dist/chunks/{ne-BsEUv3Vp.cjs → ne-DfryA0M8.cjs} +0 -0
  502. /package/dist/chunks/{nl-C1jFx32v.cjs → nl-BehqWHBh.cjs} +0 -0
  503. /package/dist/chunks/{nl-D8QQ6wmJ.mjs → nl-VHkGK6MK.mjs} +0 -0
  504. /package/dist/chunks/{no-BWEOGeAo.cjs → no-CR9Fxz1X.cjs} +0 -0
  505. /package/dist/chunks/{no-Rg2uuKdV.mjs → no-CdtSCHJr.mjs} +0 -0
  506. /package/dist/chunks/{notifier-BOB8o7IG.cjs → notifier-CFYHvVe5.cjs} +0 -0
  507. /package/dist/chunks/{notifier-CEnelp-K.mjs → notifier-DJ3Shryh.mjs} +0 -0
  508. /package/dist/chunks/{pa-BitCteAA.cjs → pa-DgC4LF8q.cjs} +0 -0
  509. /package/dist/chunks/{pa-BSwIZvA0.mjs → pa-TMcUvGQV.mjs} +0 -0
  510. /package/dist/chunks/{pl-FhXomIGp.mjs → pl-BfQYJ9y_.mjs} +0 -0
  511. /package/dist/chunks/{pl-CbCrHaA6.cjs → pl-a2nheY_J.cjs} +0 -0
  512. /package/dist/chunks/{prism-bash-CZ6DBzIk.mjs → prism-bash-D4zr_u8t.mjs} +0 -0
  513. /package/dist/chunks/{prism-bash-qitAYJtY.cjs → prism-bash-DDQ2u01V.cjs} +0 -0
  514. /package/dist/chunks/{prism-c-nnJdAhPL.mjs → prism-c-CVyw1BOu.mjs} +0 -0
  515. /package/dist/chunks/{prism-c-BLyB6e2K.cjs → prism-c-DfVjTtJG.cjs} +0 -0
  516. /package/dist/chunks/{prism-cpp-DYNCFS3K.mjs → prism-cpp-CrBJjuu5.mjs} +0 -0
  517. /package/dist/chunks/{prism-cpp-OSmmdLuG.cjs → prism-cpp-DqxJDZfM.cjs} +0 -0
  518. /package/dist/chunks/{prism-csharp-16T9Ewqf.cjs → prism-csharp-BbJ6Sp-b.cjs} +0 -0
  519. /package/dist/chunks/{prism-csharp-Dxs2I4ua.mjs → prism-csharp-lrMxvYpL.mjs} +0 -0
  520. /package/dist/chunks/{prism-css-DwTbu-Ar.mjs → prism-css-VQTID_HR.mjs} +0 -0
  521. /package/dist/chunks/{prism-css-CMFNwvrI.cjs → prism-css-w2kan9uc.cjs} +0 -0
  522. /package/dist/chunks/{prism-dart-DX2YtTGt.cjs → prism-dart-B374T6OY.cjs} +0 -0
  523. /package/dist/chunks/{prism-dart-Cqhjl8Zt.mjs → prism-dart-Q-9Z_W9B.mjs} +0 -0
  524. /package/dist/chunks/{prism-docker-CF7dhvYh.mjs → prism-docker-DWAQ3dDD.mjs} +0 -0
  525. /package/dist/chunks/{prism-docker-CR4lKITl.cjs → prism-docker-DsFNc9i3.cjs} +0 -0
  526. /package/dist/chunks/{prism-go-DUV4QMTT.cjs → prism-go-C4e52XbO.cjs} +0 -0
  527. /package/dist/chunks/{prism-go-h9KLdAE9.mjs → prism-go-CrXe2RS9.mjs} +0 -0
  528. /package/dist/chunks/{prism-graphql-CaH0gD6e.mjs → prism-graphql-BG5mfdhd.mjs} +0 -0
  529. /package/dist/chunks/{prism-graphql-Cw4U0rOD.cjs → prism-graphql-DzWE15JS.cjs} +0 -0
  530. /package/dist/chunks/{prism-java-BpQ0ReAC.cjs → prism-java-Bth7ny8U.cjs} +0 -0
  531. /package/dist/chunks/{prism-java-DvKEtgSw.mjs → prism-java-_m72Vn1f.mjs} +0 -0
  532. /package/dist/chunks/{prism-javascript-D2ecWeeN.mjs → prism-javascript-B74it_3Q.mjs} +0 -0
  533. /package/dist/chunks/{prism-javascript-ELk9U7yv.cjs → prism-javascript-CZHuhUqG.cjs} +0 -0
  534. /package/dist/chunks/{prism-json-BdNUnMGb.cjs → prism-json-C7yjuPaa.cjs} +0 -0
  535. /package/dist/chunks/{prism-json-eqh92QZC.mjs → prism-json-CFsf0S_6.mjs} +0 -0
  536. /package/dist/chunks/{prism-kotlin-22Gr2SxK.mjs → prism-kotlin-BTT9anu1.mjs} +0 -0
  537. /package/dist/chunks/{prism-kotlin-WNUAhuoa.cjs → prism-kotlin-BwlhXHxp.cjs} +0 -0
  538. /package/dist/chunks/{prism-latex-DKge5vOJ.mjs → prism-latex-CL8zDJwm.mjs} +0 -0
  539. /package/dist/chunks/{prism-latex-BtyYjHKE.cjs → prism-latex-dRhujmiF.cjs} +0 -0
  540. /package/dist/chunks/{prism-lua-DhVb-IBs.cjs → prism-lua-CC8iHZy0.cjs} +0 -0
  541. /package/dist/chunks/{prism-lua-BySMQWvB.mjs → prism-lua-D6JJ7p-A.mjs} +0 -0
  542. /package/dist/chunks/{prism-markdown-Bvv1_ifb.mjs → prism-markdown-D6D8BprH.mjs} +0 -0
  543. /package/dist/chunks/{prism-markdown-DonI20ta.cjs → prism-markdown-DMW4QHo8.cjs} +0 -0
  544. /package/dist/chunks/{prism-markup-DaGlO8wQ.cjs → prism-markup-DmQlWhRx.cjs} +0 -0
  545. /package/dist/chunks/{prism-markup-DPDFrSBO.mjs → prism-markup-fK-1ADZ0.mjs} +0 -0
  546. /package/dist/chunks/{prism-markup-templating-DKZ_F63l.cjs → prism-markup-templating-CKDQaPgk.cjs} +0 -0
  547. /package/dist/chunks/{prism-markup-templating-B1u1wroF.mjs → prism-markup-templating-DfRjv0mn.mjs} +0 -0
  548. /package/dist/chunks/{prism-php-V_A4SMVC.cjs → prism-php-BJVLLh_W.cjs} +0 -0
  549. /package/dist/chunks/{prism-php-CjjweiQK.mjs → prism-php-DffX-wRi.mjs} +0 -0
  550. /package/dist/chunks/{prism-python-6eBEySe7.mjs → prism-python-2BrUkjbB.mjs} +0 -0
  551. /package/dist/chunks/{prism-python-DLqiSiAQ.cjs → prism-python-Bhf5rXub.cjs} +0 -0
  552. /package/dist/chunks/{prism-r-uOZv1a7d.mjs → prism-r-CU9se1Na.mjs} +0 -0
  553. /package/dist/chunks/{prism-r-zh9-I3-j.cjs → prism-r-ChFoLzAP.cjs} +0 -0
  554. /package/dist/chunks/{prism-ruby-M4mhoFF5.cjs → prism-ruby-BvGZJs6t.cjs} +0 -0
  555. /package/dist/chunks/{prism-ruby-Cr-3Y89S.mjs → prism-ruby-DuQ4syPd.mjs} +0 -0
  556. /package/dist/chunks/{prism-rust-g2dmV4wL.cjs → prism-rust-6eFXbDzh.cjs} +0 -0
  557. /package/dist/chunks/{prism-rust-DxlMe9N8.mjs → prism-rust-DRurCx4W.mjs} +0 -0
  558. /package/dist/chunks/{prism-scala-byYaK-Hs.mjs → prism-scala-CU8N2Vpe.mjs} +0 -0
  559. /package/dist/chunks/{prism-scala-DdSRpf_v.cjs → prism-scala-De4Tbjij.cjs} +0 -0
  560. /package/dist/chunks/{prism-sql-W4S9Ag3H.mjs → prism-sql-Au3VVcw1.mjs} +0 -0
  561. /package/dist/chunks/{prism-sql-BjDuRopl.cjs → prism-sql-_JMPMWu-.cjs} +0 -0
  562. /package/dist/chunks/{prism-swift-KjqbhTlS.mjs → prism-swift-B-r5qNUT.mjs} +0 -0
  563. /package/dist/chunks/{prism-swift-CqOmCgZp.cjs → prism-swift-DdWKYFH_.cjs} +0 -0
  564. /package/dist/chunks/{prism-typescript-CjqcJxVT.mjs → prism-typescript-BKj96rmj.mjs} +0 -0
  565. /package/dist/chunks/{prism-typescript-DGlZWX5K.cjs → prism-typescript-DYxN8s4t.cjs} +0 -0
  566. /package/dist/chunks/{prism-yaml-W11WcDBZ.mjs → prism-yaml-Bk31kvSd.mjs} +0 -0
  567. /package/dist/chunks/{prism-yaml-HqOYDhYZ.cjs → prism-yaml-CAlRa1Lr.cjs} +0 -0
  568. /package/dist/chunks/{ps-BoBtbrB6.mjs → ps-Dv4lWz5A.mjs} +0 -0
  569. /package/dist/chunks/{ps-4sPZuv3g.cjs → ps-f5JFPQUh.cjs} +0 -0
  570. /package/dist/chunks/{pt-BYA5NOw_.mjs → pt-CtgGcY6X.mjs} +0 -0
  571. /package/dist/chunks/{pt-CSzjho-V.cjs → pt-I7qQ_R8a.cjs} +0 -0
  572. /package/dist/chunks/{ro-C9tN3AFF.cjs → ro-BNo9EVkV.cjs} +0 -0
  573. /package/dist/chunks/{ro-mtobtMpD.mjs → ro-Dxs4TSRR.mjs} +0 -0
  574. /package/dist/chunks/{ru-B791LPq3.mjs → ru-B5A2vGqQ.mjs} +0 -0
  575. /package/dist/chunks/{ru-BYPO5wNO.cjs → ru-Q0YDL_7B.cjs} +0 -0
  576. /package/dist/chunks/{sd-BWuglgs_.cjs → sd-56aE3AgX.cjs} +0 -0
  577. /package/dist/chunks/{sd-C8ngG92I.mjs → sd-DcBvM0yY.mjs} +0 -0
  578. /package/dist/chunks/{si-IX2P_DGB.cjs → si-B1k5DPe9.cjs} +0 -0
  579. /package/dist/chunks/{si-C_q8DxVt.mjs → si-JTOFsZCj.mjs} +0 -0
  580. /package/dist/chunks/{sk-HJJlM9uq.mjs → sk-B0LtwsAp.mjs} +0 -0
  581. /package/dist/chunks/{sk-CxtyIOlr.cjs → sk-DKWs0Fly.cjs} +0 -0
  582. /package/dist/chunks/{sl-CPjYG80u.cjs → sl-3aOunask.cjs} +0 -0
  583. /package/dist/chunks/{sl-kB1f5rPn.mjs → sl-CE_B7j6P.mjs} +0 -0
  584. /package/dist/chunks/{sq-Do6UyHn9.cjs → sq-BjtxgRqp.cjs} +0 -0
  585. /package/dist/chunks/{sq-CD0W0D6z.mjs → sq-DG9X-8jF.mjs} +0 -0
  586. /package/dist/chunks/{sr-BcyT-MWS.cjs → sr-DLHLW9qM.cjs} +0 -0
  587. /package/dist/chunks/{sr-lLJu9TsT.mjs → sr-LJKaTtNM.mjs} +0 -0
  588. /package/dist/chunks/{sv-C3GL-a0k.mjs → sv-Cm3jSTt-.mjs} +0 -0
  589. /package/dist/chunks/{sv-Bsz7ersx.cjs → sv-DJ6Kywac.cjs} +0 -0
  590. /package/dist/chunks/{sw-CUElHZxL.cjs → sw-BnvydNkI.cjs} +0 -0
  591. /package/dist/chunks/{sw-D6-DZ14-.mjs → sw-C2rm3bwF.mjs} +0 -0
  592. /package/dist/chunks/{ta-BZy78kBk.mjs → ta-5k36G0kU.mjs} +0 -0
  593. /package/dist/chunks/{ta-D0DQba-y.cjs → ta-e_T5Y_TH.cjs} +0 -0
  594. /package/dist/chunks/{te-DPMvJyXg.cjs → te-DJd9mdke.cjs} +0 -0
  595. /package/dist/chunks/{te-vigCVKdg.mjs → te-Qw6ZgfXC.mjs} +0 -0
  596. /package/dist/chunks/{th-DtcrIt9J.cjs → th-BFvK-kez.cjs} +0 -0
  597. /package/dist/chunks/{th-CGc0RLWB.mjs → th-DFCnkeU5.mjs} +0 -0
  598. /package/dist/chunks/{tr-BrEFaVNA.cjs → tr-Bio2iyuW.cjs} +0 -0
  599. /package/dist/chunks/{tr-Cgkf5aJo.mjs → tr-QoYDqZZE.mjs} +0 -0
  600. /package/dist/chunks/{ug-BVK7qBs4.mjs → ug-CYVvHjDo.mjs} +0 -0
  601. /package/dist/chunks/{ug-CqZXfhXi.cjs → ug-_E9uEBC5.cjs} +0 -0
  602. /package/dist/chunks/{uk-DgReWEge.cjs → uk-CiihPsrk.cjs} +0 -0
  603. /package/dist/chunks/{uk-CSPaCalw.mjs → uk-KrD9Hdx7.mjs} +0 -0
  604. /package/dist/chunks/{ur-ByrwJnY1.cjs → ur-B9A13pT4.cjs} +0 -0
  605. /package/dist/chunks/{ur-VpFFsATs.mjs → ur-Bgtl4YGa.mjs} +0 -0
  606. /package/dist/chunks/{vi-CWQtvATS.mjs → vi-CwW9u4Ww.mjs} +0 -0
  607. /package/dist/chunks/{vi-lUD3w7gP.cjs → vi-l243K5Tb.cjs} +0 -0
  608. /package/dist/chunks/{zh-akJj2cdF.mjs → zh-BdCF4Hao.mjs} +0 -0
  609. /package/dist/chunks/{zh-fSp1qOne.cjs → zh-DPZR_81P.cjs} +0 -0
@@ -0,0 +1,482 @@
1
+ import type {
2
+ API,
3
+ BlockAPI,
4
+ BlockTool,
5
+ BlockToolConstructorOptions,
6
+ FilePasteEvent,
7
+ PasteConfig,
8
+ PasteEvent,
9
+ PatternPasteEvent,
10
+ ToolboxConfig,
11
+ } from '../../../types';
12
+ import type { MenuConfig } from '../../../types/tools/menu-config';
13
+ import type { AudioAlignment, AudioConfig, AudioData } from '../../../types/tools/audio';
14
+ import {
15
+ IconAlignCenter,
16
+ IconAlignLeft,
17
+ IconAlignRight,
18
+ IconCaption,
19
+ IconCopy,
20
+ IconDownload,
21
+ IconMusic,
22
+ IconPlayerLoop,
23
+ IconReplace,
24
+ } from '../../components/icons';
25
+ import { renderUploadingState, type UploadingStateElement } from '../image/uploading-state';
26
+ import { DEFAULT_CAPTION_PLACEHOLDER, URL_PATTERN } from './constants';
27
+ import { renderEmptyState, type EmptyStateElement } from './empty-state';
28
+ import { tr } from './i18n';
29
+ import { renderCaptionRow, renderNowPlaying } from './ui';
30
+ import { attachControls, type ControlsHandle } from './controls';
31
+ import { attachWaveform, decodePeaks, type WaveformHandle } from './waveform';
32
+ import { readTrackMetadata, resolveCover } from './metadata';
33
+ import { Uploader, AudioUploadError, type UploadResult } from './uploader';
34
+ import { uploadErrorMessage } from '../../components/utils/upload-error-message';
35
+ import { pickDisplayMaxSize } from '../../components/utils/max-size';
36
+
37
+ type ToolState = 'EMPTY' | 'LOADING' | 'RENDERED' | 'ERROR';
38
+
39
+ export class AudioTool implements BlockTool {
40
+ private readonly api: API;
41
+ private readonly block: BlockAPI;
42
+ private readonly config: AudioConfig;
43
+ private readonly uploader: Uploader;
44
+ private data: AudioData;
45
+ private readOnly: boolean;
46
+ private root: HTMLElement | null = null;
47
+ private state: ToolState;
48
+ private uploadingEl: UploadingStateElement | null = null;
49
+ private lastFileName: string | null = null;
50
+ private errorMessage: string | null = null;
51
+ private lastSource: { kind: 'file'; file: File } | { kind: 'url'; url: string } | null = null;
52
+ private controlsHandle: ControlsHandle | null = null;
53
+ private waveformHandle: WaveformHandle | null = null;
54
+ private destroyed = false;
55
+
56
+ constructor(options: BlockToolConstructorOptions<AudioData, AudioConfig>) {
57
+ this.api = options.api;
58
+ this.block = options.block;
59
+ this.config = options.config ?? {};
60
+ this.readOnly = options.readOnly;
61
+ this.data = { ...options.data, url: options.data?.url ?? '' };
62
+ this.state = this.data.url ? 'RENDERED' : 'EMPTY';
63
+ this.uploader = new Uploader(this.config);
64
+ }
65
+
66
+ public render(): HTMLElement {
67
+ const root = document.createElement('div');
68
+ root.setAttribute('data-blok-tool', 'audio');
69
+ this.root = root;
70
+ this.renderState();
71
+ return root;
72
+ }
73
+
74
+ public save(_block?: HTMLElement): AudioData {
75
+ const out: AudioData = { url: this.data.url };
76
+ if (this.data.caption !== undefined) out.caption = this.data.caption;
77
+ if (this.data.captionVisible !== undefined) out.captionVisible = this.data.captionVisible;
78
+ if (this.data.title !== undefined) out.title = this.data.title;
79
+ if (this.data.artist !== undefined) out.artist = this.data.artist;
80
+ if (this.data.coverUrl !== undefined) out.coverUrl = this.data.coverUrl;
81
+ if (this.data.loop) out.loop = true;
82
+ if (this.data.width !== undefined) out.width = this.data.width;
83
+ if (this.data.alignment !== undefined) out.alignment = this.data.alignment;
84
+ if (this.data.fileName !== undefined) out.fileName = this.data.fileName;
85
+ if (this.data.mimeType !== undefined) out.mimeType = this.data.mimeType;
86
+ if (this.data.duration !== undefined) out.duration = this.data.duration;
87
+ if (this.data.peaks !== undefined) out.peaks = this.data.peaks;
88
+ return out;
89
+ }
90
+
91
+ public validate(data: AudioData): boolean {
92
+ return typeof data.url === 'string' && data.url.length > 0;
93
+ }
94
+
95
+ public static get toolbox(): ToolboxConfig {
96
+ return {
97
+ icon: IconMusic,
98
+ titleKey: 'audio',
99
+ searchTerms: ['audio', 'music', 'sound', 'song', 'mp3', 'track', 'media'],
100
+ };
101
+ }
102
+
103
+ public static get isReadOnlySupported(): boolean {
104
+ return true;
105
+ }
106
+
107
+ public static get pasteConfig(): PasteConfig {
108
+ return {
109
+ patterns: { audio: URL_PATTERN },
110
+ files: { mimeTypes: ['audio/*'] },
111
+ };
112
+ }
113
+
114
+ public onPaste(event: PasteEvent): void {
115
+ if (event.type === 'pattern') {
116
+ this.applyResult({ url: (event as PatternPasteEvent).detail.data });
117
+ return;
118
+ }
119
+ if (event.type === 'file') {
120
+ this.startUpload((event as FilePasteEvent).detail.file);
121
+ }
122
+ }
123
+
124
+ public getToolbarAnchorElement(): HTMLElement | undefined {
125
+ return this.root?.querySelector<HTMLElement>('[data-role="audio-figure"]') ?? undefined;
126
+ }
127
+
128
+ public setReadOnly(state: boolean): void {
129
+ this.readOnly = state;
130
+ this.renderState();
131
+ }
132
+
133
+ public renderSettings(): MenuConfig {
134
+ const i18n = this.api.i18n;
135
+ const current: AudioAlignment = this.data.alignment ?? 'center';
136
+ const captionVisible = this.data.captionVisible !== false;
137
+ const alignments: { value: AudioAlignment; title: string; icon: string }[] = [
138
+ { value: 'left', title: tr(i18n, 'tools.audio.alignmentLeft', 'Align left'), icon: IconAlignLeft },
139
+ { value: 'center', title: tr(i18n, 'tools.audio.alignmentCenter', 'Align center'), icon: IconAlignCenter },
140
+ { value: 'right', title: tr(i18n, 'tools.audio.alignmentRight', 'Align right'), icon: IconAlignRight },
141
+ ];
142
+ const alignIcon = alignments.find((a) => a.value === current)?.icon ?? alignments[1].icon;
143
+
144
+ return [
145
+ {
146
+ icon: alignIcon,
147
+ title: tr(i18n, 'tools.audio.alignment', 'Alignment'),
148
+ name: 'audio-alignment',
149
+ children: {
150
+ items: alignments.map((a) => ({
151
+ icon: a.icon,
152
+ title: a.title,
153
+ name: `audio-alignment-${a.value}`,
154
+ isActive: current === a.value,
155
+ closeOnActivate: true,
156
+ onActivate: (): void => this.setAlignment(a.value),
157
+ })),
158
+ },
159
+ },
160
+ {
161
+ icon: IconCaption,
162
+ title: tr(i18n, 'tools.audio.caption', 'Caption'),
163
+ name: 'audio-caption',
164
+ isActive: captionVisible,
165
+ closeOnActivate: true,
166
+ onActivate: (): void => this.toggleCaption(),
167
+ },
168
+ {
169
+ icon: IconPlayerLoop,
170
+ title: tr(i18n, 'tools.audio.loop', 'Loop'),
171
+ name: 'audio-loop',
172
+ isActive: this.data.loop === true,
173
+ closeOnActivate: true,
174
+ onActivate: (): void => this.toggleLoop(),
175
+ },
176
+ {
177
+ icon: IconReplace,
178
+ title: tr(i18n, 'tools.audio.replace', 'Replace audio'),
179
+ name: 'audio-replace',
180
+ closeOnActivate: true,
181
+ onActivate: (): void => this.transitionToEmpty(),
182
+ },
183
+ {
184
+ icon: IconDownload,
185
+ title: tr(i18n, 'tools.audio.download', 'Download'),
186
+ name: 'audio-download',
187
+ closeOnActivate: true,
188
+ onActivate: (): void => this.download(),
189
+ },
190
+ {
191
+ icon: IconCopy,
192
+ title: tr(i18n, 'tools.audio.copyUrl', 'Copy URL'),
193
+ name: 'audio-copy-url',
194
+ closeOnActivate: true,
195
+ onActivate: (): void => this.copyUrl(),
196
+ },
197
+ ];
198
+ }
199
+
200
+ public removed(): void {
201
+ this.destroyed = true;
202
+ this.controlsHandle?.destroy();
203
+ this.controlsHandle = null;
204
+ this.waveformHandle?.destroy();
205
+ this.waveformHandle = null;
206
+ if (this.data.url.startsWith('blob:')) {
207
+ URL.revokeObjectURL(this.data.url);
208
+ }
209
+ }
210
+
211
+ private startUpload(file: File): void {
212
+ this.lastFileName = file.name;
213
+ this.lastSource = { kind: 'file', file };
214
+ this.state = 'LOADING';
215
+ this.renderState();
216
+ void this.uploader
217
+ .handleFile(file, { onProgress: (p) => this.uploadingEl?.setProgress(p) })
218
+ .then((result) => this.applyResult(result, file))
219
+ .catch((err) => this.applyError(err));
220
+ }
221
+
222
+ private startUrl(url: string): void {
223
+ this.lastFileName = null;
224
+ this.lastSource = { kind: 'url', url };
225
+ this.state = 'LOADING';
226
+ this.renderState();
227
+ void this.uploader
228
+ .handleUrl(url, { onProgress: (p) => this.uploadingEl?.setProgress(p) })
229
+ .then((result) => this.applyResult(result))
230
+ .catch((err) => this.applyError(err));
231
+ }
232
+
233
+ private applyResult(result: UploadResult, file?: File): void {
234
+ this.data = {
235
+ ...this.data,
236
+ url: result.url,
237
+ fileName: result.fileName ?? this.lastFileName ?? this.data.fileName,
238
+ mimeType: file?.type || this.data.mimeType,
239
+ };
240
+ this.errorMessage = null;
241
+ this.state = 'RENDERED';
242
+ this.renderState();
243
+ this.block.dispatchChange();
244
+
245
+ // Asynchronous enrichment from a real File upload (not URL paste).
246
+ if (file) {
247
+ // Metadata: title, artist, cover
248
+ void readTrackMetadata(file)
249
+ .then(async (meta) => {
250
+ if (this.destroyed) return;
251
+ const dirty = { value: false };
252
+ if (meta.title) { this.data.title = meta.title; dirty.value = true; }
253
+ if (meta.artist) { this.data.artist = meta.artist; dirty.value = true; }
254
+ if (meta.cover) {
255
+ const coverUrl = await resolveCover(meta.cover, this.config.uploader).catch(() => undefined);
256
+ if (coverUrl) { this.data.coverUrl = coverUrl; dirty.value = true; }
257
+ }
258
+ if (this.destroyed) return;
259
+ if (dirty.value) {
260
+ this.renderState();
261
+ this.block.dispatchChange();
262
+ }
263
+ })
264
+ .catch(() => { /* leave player working without metadata */ });
265
+
266
+ // Waveform peaks + duration
267
+ void decodePeaks(file)
268
+ .then((decoded) => {
269
+ if (this.destroyed) return;
270
+ if (decoded && decoded.peaks.length) {
271
+ this.data.peaks = decoded.peaks;
272
+ this.data.duration = decoded.duration;
273
+ this.renderState();
274
+ this.block.dispatchChange();
275
+ }
276
+ })
277
+ .catch(() => { /* leave player working without waveform */ });
278
+ }
279
+ }
280
+
281
+ private applyError(err?: unknown): void {
282
+ this.errorMessage = err instanceof AudioUploadError
283
+ ? uploadErrorMessage(err, (key) => this.api.i18n.t(key), {
284
+ tooLarge: 'tools.audio.errorFileTooLarge',
285
+ generic: 'tools.audio.errorUploadFailed',
286
+ })
287
+ : null;
288
+ this.state = 'ERROR';
289
+ this.renderState();
290
+ }
291
+
292
+ private syncRootAttributes(): void {
293
+ if (!this.root) return;
294
+ const r = this.root;
295
+ r.setAttribute('data-state', this.state.toLowerCase());
296
+ r.setAttribute('data-align', this.data.alignment ?? 'center');
297
+ r.setAttribute('data-caption', this.data.captionVisible === false ? 'off' : 'on');
298
+ }
299
+
300
+ private renderState(): void {
301
+ if (!this.root) return;
302
+ this.controlsHandle?.destroy();
303
+ this.controlsHandle = null;
304
+ this.waveformHandle?.destroy();
305
+ this.waveformHandle = null;
306
+ this.root.replaceChildren();
307
+ this.uploadingEl = null;
308
+ this.syncRootAttributes();
309
+
310
+ if (this.state === 'EMPTY') {
311
+ this.renderEmpty();
312
+ return;
313
+ }
314
+ if (this.state === 'LOADING') {
315
+ this.renderLoading();
316
+ return;
317
+ }
318
+ if (this.state === 'ERROR') {
319
+ this.renderError();
320
+ return;
321
+ }
322
+ this.renderRendered();
323
+ }
324
+
325
+ private renderEmpty(): void {
326
+ if (!this.root) return;
327
+ const el: EmptyStateElement = renderEmptyState({
328
+ onFile: (file) => this.startUpload(file),
329
+ onUrl: (url) => this.startUrl(url),
330
+ acceptTypes: this.config.types,
331
+ maxSize: pickDisplayMaxSize(this.config.maxSize),
332
+ i18n: this.api.i18n,
333
+ });
334
+ this.root.appendChild(el);
335
+ }
336
+
337
+ private renderLoading(): void {
338
+ if (!this.root) return;
339
+ this.uploadingEl = renderUploadingState({
340
+ fileName: this.lastFileName ?? tr(this.api.i18n, 'tools.audio.uploading', 'Uploading…'),
341
+ onCancel: () => this.transitionToEmpty(),
342
+ i18n: this.api.i18n,
343
+ });
344
+ this.root.appendChild(this.uploadingEl);
345
+ }
346
+
347
+ private renderError(): void {
348
+ if (!this.root) return;
349
+ const wrap = document.createElement('div');
350
+ wrap.className = 'blok-audio-error-state';
351
+ wrap.setAttribute('data-role', 'audio-error');
352
+
353
+ const message = document.createElement('span');
354
+ message.textContent = this.errorMessage ?? tr(this.api.i18n, 'tools.audio.errorUploadFailed', 'Upload failed');
355
+
356
+ const retry = document.createElement('button');
357
+ retry.type = 'button';
358
+ retry.className = 'blok-audio-retry';
359
+ retry.setAttribute('data-action', 'replace');
360
+ retry.textContent = tr(this.api.i18n, 'tools.audio.errorReplace', 'Replace');
361
+ retry.addEventListener('click', () => this.transitionToEmpty());
362
+
363
+ wrap.append(message, retry);
364
+ this.root.appendChild(wrap);
365
+ }
366
+
367
+ private renderRendered(): void {
368
+ if (!this.root) return;
369
+ const titlePlaceholder = tr(this.api.i18n, 'tools.audio.titlePlaceholder', 'Track title');
370
+ const artistPlaceholder = tr(this.api.i18n, 'tools.audio.artistPlaceholder', 'Artist');
371
+
372
+ const { figure, audio, waveformMount, title, artist, body } = renderNowPlaying(this.data, {
373
+ editable: !this.readOnly,
374
+ titlePlaceholder,
375
+ artistPlaceholder,
376
+ });
377
+
378
+ // Waveform (if peaks are available)
379
+ if (this.data.peaks?.length) {
380
+ this.waveformHandle = attachWaveform({ mount: waveformMount, media: audio, peaks: this.data.peaks });
381
+ }
382
+
383
+ // Transport controls — appended into the right-column body (under waveform)
384
+ this.controlsHandle = attachControls({
385
+ media: audio,
386
+ figure,
387
+ data: this.data,
388
+ onLoopChange: (loop) => {
389
+ this.data.loop = loop || undefined;
390
+ this.block.dispatchChange();
391
+ },
392
+ });
393
+ body.appendChild(this.controlsHandle.element);
394
+
395
+ // Caption row — outside body, below the card
396
+ const placeholder = this.config.captionPlaceholder ?? DEFAULT_CAPTION_PLACEHOLDER;
397
+ const captionVisible = this.data.captionVisible !== false;
398
+ if (captionVisible || !this.readOnly) {
399
+ figure.appendChild(renderCaptionRow({
400
+ value: this.data.caption ?? '',
401
+ placeholder,
402
+ editable: !this.readOnly,
403
+ }));
404
+ }
405
+
406
+ // Wire title/artist blur handlers
407
+ title.addEventListener('blur', () => {
408
+ const next = title.textContent ?? '';
409
+ if (next !== this.data.title) {
410
+ this.data.title = next || undefined;
411
+ this.block.dispatchChange();
412
+ }
413
+ });
414
+ artist.addEventListener('blur', () => {
415
+ const next = artist.textContent ?? '';
416
+ if (next !== this.data.artist) {
417
+ this.data.artist = next || undefined;
418
+ this.block.dispatchChange();
419
+ }
420
+ });
421
+
422
+ // Wire caption blur handler
423
+ const captionEl = figure.querySelector<HTMLElement>('[data-role="audio-caption"]');
424
+ if (captionEl) {
425
+ captionEl.addEventListener('blur', () => {
426
+ const next = captionEl.textContent ?? '';
427
+ if (next !== this.data.caption) {
428
+ this.data.caption = next || undefined;
429
+ this.block.dispatchChange();
430
+ }
431
+ });
432
+ }
433
+
434
+ this.root.appendChild(figure);
435
+ }
436
+
437
+ private setAlignment(next: AudioAlignment): void {
438
+ if (this.data.alignment === next) return;
439
+ this.data.alignment = next;
440
+ this.block.dispatchChange();
441
+ this.renderState();
442
+ }
443
+
444
+ private toggleCaption(): void {
445
+ this.data.captionVisible = this.data.captionVisible === false;
446
+ this.block.dispatchChange();
447
+ this.renderState();
448
+ }
449
+
450
+ private toggleLoop(): void {
451
+ this.data.loop = this.data.loop !== true ? true : undefined;
452
+ this.block.dispatchChange();
453
+ this.renderState();
454
+ }
455
+
456
+ private transitionToEmpty(): void {
457
+ this.data = { ...this.data, url: '' };
458
+ this.state = 'EMPTY';
459
+ this.lastSource = null;
460
+ this.lastFileName = null;
461
+ this.renderState();
462
+ this.block.dispatchChange();
463
+ }
464
+
465
+ private download(): void {
466
+ const a = document.createElement('a');
467
+ a.href = this.data.url;
468
+ a.download = this.data.fileName ?? '';
469
+ a.target = '_blank';
470
+ a.rel = 'noopener';
471
+ document.body.appendChild(a);
472
+ a.click();
473
+ a.remove();
474
+ }
475
+
476
+ private copyUrl(): void {
477
+ const clip = navigator.clipboard;
478
+ if (clip && typeof clip.writeText === 'function') {
479
+ void clip.writeText(this.data.url);
480
+ }
481
+ }
482
+ }
@@ -0,0 +1,56 @@
1
+ import type { AudioUploader } from '../../../types/tools/audio';
2
+ import { COVER_DATA_URL_CAP_BYTES } from './constants';
3
+
4
+ export interface RawPicture {
5
+ data: Uint8Array;
6
+ format?: string;
7
+ }
8
+ export interface RawTags {
9
+ common?: { title?: string; artist?: string; picture?: RawPicture[] };
10
+ }
11
+ export interface TrackMeta {
12
+ title?: string;
13
+ artist?: string;
14
+ cover?: { data: Uint8Array; mimeType: string };
15
+ }
16
+
17
+ export function mapMetadata(raw: RawTags): TrackMeta {
18
+ const common = raw.common ?? {};
19
+ const meta: TrackMeta = {};
20
+ if (common.title) meta.title = common.title;
21
+ if (common.artist) meta.artist = common.artist;
22
+ const pic = common.picture?.[0];
23
+ if (pic) meta.cover = { data: pic.data, mimeType: pic.format ?? 'image/jpeg' };
24
+ return meta;
25
+ }
26
+
27
+ function toBase64(bytes: Uint8Array): string {
28
+ return btoa(Array.from(bytes, (b) => String.fromCharCode(b)).join(''));
29
+ }
30
+
31
+ export async function resolveCover(
32
+ cover: { data: Uint8Array; mimeType: string },
33
+ uploader?: AudioUploader,
34
+ ): Promise<string | undefined> {
35
+ if (uploader?.uploadByFile) {
36
+ const file = new File([new Uint8Array(cover.data)], 'cover', { type: cover.mimeType });
37
+ const res = await uploader.uploadByFile(file);
38
+ return res.url;
39
+ }
40
+ if (cover.data.byteLength <= COVER_DATA_URL_CAP_BYTES) {
41
+ return `data:${cover.mimeType};base64,${toBase64(cover.data)}`;
42
+ }
43
+ return undefined;
44
+ }
45
+
46
+ export async function readTrackMetadata(file: File): Promise<TrackMeta> {
47
+ try {
48
+ const mm = await import('music-metadata');
49
+ const buf = new Uint8Array(await file.arrayBuffer());
50
+ // parseBuffer(uint8Array, fileInfo?: IFileInfo | string) — passing mimeType string is valid
51
+ const parsed = await mm.parseBuffer(buf, file.type);
52
+ return mapMetadata(parsed as RawTags);
53
+ } catch {
54
+ return {};
55
+ }
56
+ }
@@ -0,0 +1,104 @@
1
+ import { IconMusic } from '../../components/icons';
2
+ import type { AudioData } from '../../../types/tools/audio';
3
+
4
+ export interface NowPlayingOptions {
5
+ editable: boolean;
6
+ titlePlaceholder?: string;
7
+ artistPlaceholder?: string;
8
+ }
9
+
10
+ export interface NowPlayingElements {
11
+ figure: HTMLElement;
12
+ audio: HTMLAudioElement;
13
+ cover: HTMLElement;
14
+ body: HTMLElement;
15
+ waveformMount: HTMLElement;
16
+ title: HTMLElement;
17
+ artist: HTMLElement;
18
+ }
19
+
20
+ function editableLine(role: string, value: string | undefined, editable: boolean, placeholder?: string): HTMLElement {
21
+ const el = document.createElement('div');
22
+ el.setAttribute('data-role', role);
23
+ el.setAttribute('contenteditable', editable ? 'true' : 'false');
24
+ if (placeholder) el.setAttribute('data-placeholder', placeholder);
25
+ el.textContent = value ?? '';
26
+ return el;
27
+ }
28
+
29
+ export function renderNowPlaying(data: AudioData, opts: NowPlayingOptions): NowPlayingElements {
30
+ const figure = document.createElement('figure');
31
+ figure.className = 'blok-audio-inner';
32
+ figure.setAttribute('data-role', 'audio-figure');
33
+ figure.style.margin = '0';
34
+
35
+ const cover = document.createElement('div');
36
+ cover.className = 'blok-audio-cover';
37
+ cover.setAttribute('data-role', 'audio-cover');
38
+ if (data.coverUrl) {
39
+ const img = document.createElement('img');
40
+ img.src = data.coverUrl;
41
+ img.alt = '';
42
+ cover.appendChild(img);
43
+ } else {
44
+ const placeholder = document.createElement('span');
45
+ placeholder.className = 'blok-audio-cover__placeholder';
46
+ placeholder.setAttribute('aria-hidden', 'true');
47
+ placeholder.innerHTML = IconMusic;
48
+ cover.appendChild(placeholder);
49
+ }
50
+
51
+ // Decorative "now playing" equalizer — a dark badge of dancing bars pinned to
52
+ // the cover. CSS reveals + animates it only while the figure is playing
53
+ // (driven by the [data-playing] attribute the controls toggle).
54
+ const eq = document.createElement('span');
55
+ eq.className = 'blok-audio-eq';
56
+ eq.setAttribute('data-role', 'audio-eq');
57
+ eq.setAttribute('aria-hidden', 'true');
58
+ ['a', 'b', 'c'].forEach(() => {
59
+ const bar = document.createElement('span');
60
+ bar.className = 'blok-audio-eq__bar';
61
+ eq.appendChild(bar);
62
+ });
63
+ cover.appendChild(eq);
64
+
65
+ const title = editableLine('audio-title', data.title, opts.editable, opts.titlePlaceholder);
66
+ title.className = 'blok-audio-title';
67
+ const artist = editableLine('audio-artist', data.artist, opts.editable, opts.artistPlaceholder);
68
+ artist.className = 'blok-audio-artist';
69
+
70
+ const waveformMount = document.createElement('div');
71
+ waveformMount.className = 'blok-audio-waveform';
72
+ waveformMount.setAttribute('data-role', 'audio-waveform');
73
+
74
+ const body = document.createElement('div');
75
+ body.className = 'blok-audio-body';
76
+ body.setAttribute('data-role', 'audio-body');
77
+ body.append(title, artist, waveformMount);
78
+
79
+ const audio = document.createElement('audio');
80
+ audio.setAttribute('data-role', 'audio-media');
81
+ audio.setAttribute('preload', 'metadata');
82
+ audio.src = data.url;
83
+ audio.tabIndex = 0;
84
+ if (data.loop) audio.loop = true;
85
+
86
+ figure.append(cover, body, audio);
87
+ return { figure, audio, cover, body, waveformMount, title, artist };
88
+ }
89
+
90
+ export interface CaptionRowOptions {
91
+ value: string;
92
+ placeholder: string;
93
+ editable: boolean;
94
+ }
95
+
96
+ export function renderCaptionRow(opts: CaptionRowOptions): HTMLElement {
97
+ const row = document.createElement('div');
98
+ row.className = 'blok-audio-caption-row';
99
+ row.setAttribute('data-role', 'audio-caption-row');
100
+ const cap = editableLine('audio-caption', opts.value, opts.editable, opts.placeholder);
101
+ cap.className = 'blok-audio-caption';
102
+ row.appendChild(cap);
103
+ return row;
104
+ }