@jackuait/blok 0.17.0 → 0.19.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 (592) hide show
  1. package/dist/blok.cjs +1 -1
  2. package/dist/blok.iife.js +5 -5
  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-BPd65xOj.cjs → blok-BosfCfPX.cjs} +4 -4
  44. package/dist/chunks/{blok-D4ApwnD7.mjs → blok-CXB-exXU.mjs} +99 -75
  45. package/dist/chunks/{constants-DObdf8NU.mjs → constants-BmCvHbkL.mjs} +2 -1
  46. package/dist/chunks/{constants-C3wBsvmH.cjs → constants-ChsAFZ8F.cjs} +1 -1
  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-CNLosgId.cjs → i18next-loader-BBPMegxc.cjs} +1 -1
  52. package/dist/chunks/{i18next-loader-BMhspWFn.mjs → i18next-loader-K-ir8UKk.mjs} +1 -1
  53. package/dist/chunks/{lightweight-i18n-Ck1HlVxq.mjs → lightweight-i18n-DJpMke7a.mjs} +27 -0
  54. package/dist/chunks/lightweight-i18n-LFW8S8u-.cjs +1 -0
  55. package/dist/chunks/{messages-1H2SY5H1.mjs → messages-3jkCmB_A.mjs} +28 -1
  56. package/dist/{messages-CSf1g9n_.mjs → chunks/messages-5339ApgH.mjs} +28 -1
  57. package/dist/{messages-BlInN8XP2.mjs → chunks/messages-7LWW3BVh.mjs} +28 -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-hhT3Vii-.mjs → messages-B01D7aHY.mjs} +28 -1
  62. package/dist/chunks/{messages-CbdaJSfC2.mjs → messages-B2iaIrIu.mjs} +28 -1
  63. package/dist/chunks/messages-B6794_2J.cjs +1 -0
  64. package/dist/chunks/{messages-B0o3rVBB.cjs → messages-B6dbtt1c.cjs} +1 -1
  65. package/dist/chunks/{messages-BlOVJtaj.cjs → messages-B6yMdb3B.cjs} +1 -1
  66. package/dist/chunks/{messages-D5CeQW1e2.cjs → messages-B7st3eF_.cjs} +1 -1
  67. package/dist/chunks/{messages-CEZ528TO2.cjs → messages-BHCepNsI.cjs} +1 -1
  68. package/dist/chunks/{messages-CrwZs1Gq.cjs → messages-BHdKd7pH.cjs} +1 -1
  69. package/dist/{messages-Dc1aAz5V.mjs → chunks/messages-BO-L5oN9.mjs} +28 -1
  70. package/dist/{messages-BhGHyHKC2.mjs → chunks/messages-BRTWvTAP.mjs} +28 -1
  71. package/dist/chunks/{messages-BMNmXaC8.mjs → messages-BUvlOqll.mjs} +28 -1
  72. package/dist/chunks/messages-BV22YIZ_.cjs +1 -0
  73. package/dist/chunks/messages-BXp_U3uS.cjs +1 -0
  74. package/dist/{messages-CLkbvdRh2.mjs → chunks/messages-BYCHzM7F.mjs} +28 -1
  75. package/dist/chunks/messages-B_cHWyWC.cjs +1 -0
  76. package/dist/{messages-B95smO_C.mjs → chunks/messages-B_d857cA.mjs} +28 -1
  77. package/dist/chunks/messages-BaVZgTrw.cjs +1 -0
  78. package/dist/chunks/{messages-BQUzqXIO.mjs → messages-Bb80Csl3.mjs} +28 -1
  79. package/dist/{messages-BH5AKf_i2.mjs → chunks/messages-BbZz_Anm.mjs} +28 -1
  80. package/dist/chunks/{messages-Dna-8bQq.mjs → messages-BdL8bmTL.mjs} +28 -1
  81. package/dist/chunks/{messages-CMFcaa9C.mjs → messages-BeS9EOEO.mjs} +28 -1
  82. package/dist/chunks/{messages-BQOx3XGd.cjs → messages-BjYhwRk7.cjs} +1 -1
  83. package/dist/chunks/{messages-79WWudxY.cjs → messages-BkgBVEiE.cjs} +1 -1
  84. package/dist/{messages-B5xy5hCa.mjs → chunks/messages-Bmq--WTx.mjs} +28 -1
  85. package/dist/{messages-BLslMhf-.mjs → chunks/messages-Bp0LdGKj.mjs} +28 -1
  86. package/dist/chunks/{messages-BaWaLwcn2.mjs → messages-BpMWMH9_.mjs} +28 -1
  87. package/dist/chunks/{messages-_ECIn1VC2.cjs → messages-BsTzdfZF.cjs} +1 -1
  88. package/dist/chunks/{messages-Dl6VC9Q9.cjs → messages-BveiGA2x.cjs} +1 -1
  89. package/dist/{messages-DFDw0nkI.mjs → chunks/messages-BwOUSDJR.mjs} +28 -1
  90. package/dist/chunks/messages-ByNR9m9W.cjs +1 -0
  91. package/dist/chunks/{messages-CrFIbrXr2.mjs → messages-Byn9-dhb2.mjs} +28 -1
  92. package/dist/chunks/{messages-B4BvJtlu.mjs → messages-C0swL9CY.mjs} +28 -1
  93. package/dist/chunks/{messages-3B44ZmLZ.cjs → messages-C2ptZOWh.cjs} +1 -1
  94. package/dist/chunks/{messages-CpcZgGYg.mjs → messages-C3rGCBi_.mjs} +28 -1
  95. package/dist/{messages-BvwVDbII.mjs → chunks/messages-C8_r3iTR2.mjs} +28 -1
  96. package/dist/{messages-STUXoPH72.mjs → chunks/messages-CATH_uz1.mjs} +28 -1
  97. package/dist/chunks/{messages-DeXUZcFn2.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-Cgph4q9d.cjs → messages-CH9SBR-i.cjs} +1 -1
  101. package/dist/chunks/{messages-X90YfYzG2.mjs → messages-CI2W7P-j.mjs} +28 -1
  102. package/dist/{messages-Bumbqs6s.mjs → chunks/messages-CIBYzzFy.mjs} +28 -1
  103. package/dist/chunks/{messages-BE6rW2R-.cjs → messages-CJFSq8Fl.cjs} +1 -1
  104. package/dist/chunks/{messages-Dlc1DdZ22.cjs → messages-CM8uUnPx.cjs} +1 -1
  105. package/dist/chunks/{messages-cYjlWqco.cjs → messages-COx3hDcP.cjs} +1 -1
  106. package/dist/chunks/messages-CQT8TtiF.cjs +1 -0
  107. package/dist/chunks/{messages-Byntrl2c.mjs → messages-CRUb9o5k.mjs} +28 -1
  108. package/dist/chunks/messages-CT8djlV6.cjs +1 -0
  109. package/dist/chunks/{messages-k4Do3gkF.mjs → messages-CUPup5e3.mjs} +28 -1
  110. package/dist/chunks/{messages-BfWGa4V82.cjs → messages-CVrOxu3J.cjs} +1 -1
  111. package/dist/chunks/messages-CWFSMzug2.cjs +1 -0
  112. package/dist/{messages-DaKjx7Gh.mjs → chunks/messages-CX0tJpOb.mjs} +28 -1
  113. package/dist/chunks/{messages-BChCPw99.mjs → messages-CXk-iM-i.mjs} +28 -1
  114. package/dist/chunks/{messages-8uD5ctYP.cjs → messages-CZJZ-au3.cjs} +1 -1
  115. package/dist/chunks/messages-CZddldga.cjs +1 -0
  116. package/dist/chunks/{messages-0ZOxg81Y.mjs → messages-Ca9zIrBo.mjs} +28 -1
  117. package/dist/chunks/{messages-BFcq7wsx.mjs → messages-CbyVDo8y.mjs} +28 -1
  118. package/dist/chunks/{messages-C3fAHxfE2.cjs → messages-CcsM8Q7g.cjs} +1 -1
  119. package/dist/chunks/{messages-C_s-wv1r2.mjs → messages-CeIzWL_4.mjs} +28 -1
  120. package/dist/chunks/{messages-DBPkzBZO2.mjs → messages-CeLv1whu2.mjs} +28 -1
  121. package/dist/chunks/messages-Ciq5_PsP.cjs +1 -0
  122. package/dist/{messages-CRL2ecWR.mjs → chunks/messages-CjCn5IsF.mjs} +28 -1
  123. package/dist/chunks/messages-CjfEt9bg.cjs +1 -0
  124. package/dist/{messages-DKoeDmZV2.mjs → chunks/messages-Ck1-ddbo.mjs} +28 -1
  125. package/dist/chunks/{messages-C79Ef9MU.mjs → messages-CkosWGGH.mjs} +28 -1
  126. package/dist/chunks/{messages-oLqnmqJf2.mjs → messages-Cl_pM31G.mjs} +28 -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-CO4J7Nns.cjs → messages-CuMtymEs.cjs} +1 -1
  130. package/dist/{messages-B6J8l1aF.mjs → chunks/messages-Cvg_uTfy.mjs} +28 -1
  131. package/dist/chunks/messages-Cy-2_lIA.cjs +1 -0
  132. package/dist/{messages-DvIPbDsq.mjs → chunks/messages-D-QWtvWg.mjs} +28 -1
  133. package/dist/chunks/{messages-CV3U2Vsm.mjs → messages-D-p-omWy.mjs} +28 -1
  134. package/dist/{messages-bCZW7LiC.mjs → chunks/messages-D-s4_vnU.mjs} +28 -1
  135. package/dist/chunks/messages-D41fO84y.cjs +1 -0
  136. package/dist/chunks/{messages-FIgYAomz2.mjs → messages-D4u2PSQw.mjs} +28 -1
  137. package/dist/chunks/messages-D7H9JUDr.cjs +1 -0
  138. package/dist/chunks/{messages-CpZneXUI.cjs → messages-D7sU-NqL.cjs} +1 -1
  139. package/dist/chunks/{messages-BGoJHXUk2.cjs → messages-DCwrXfck.cjs} +1 -1
  140. package/dist/chunks/{messages-dp4NwDVM.mjs → messages-DDJkNbJy.mjs} +28 -1
  141. package/dist/{messages-Dy3mYP_n.mjs → chunks/messages-DDX6I6MX.mjs} +28 -1
  142. package/dist/chunks/messages-DEg5FAg1.cjs +1 -0
  143. package/dist/chunks/{messages-B_lkWkPQ.cjs → messages-DFHNw6PQ.cjs} +1 -1
  144. package/dist/chunks/{messages-DZwozMZD2.mjs → messages-DHv7knYB.mjs} +28 -1
  145. package/dist/chunks/{messages-YhmR1nl02.cjs → messages-DIFwztFo.cjs} +1 -1
  146. package/dist/chunks/{messages-BjFB8sow.cjs → messages-DIetNXTx.cjs} +1 -1
  147. package/dist/{messages-D_ql7LL-2.mjs → chunks/messages-DNtAzacv.mjs} +28 -1
  148. package/dist/chunks/messages-DOqJ6ogK.cjs +1 -0
  149. package/dist/chunks/messages-DQJcAz4s.cjs +1 -0
  150. package/dist/chunks/{messages-C93gDUHr.mjs → messages-DQfi2DoY.mjs} +28 -1
  151. package/dist/chunks/{messages-61uWTg1y.mjs → messages-DQr7bXMD.mjs} +28 -1
  152. package/dist/chunks/messages-DT-JnTnw.cjs +1 -0
  153. package/dist/chunks/{messages-CpbireNX.cjs → messages-DUWCkLYR.cjs} +1 -1
  154. package/dist/chunks/{messages-BXvKhyQH.cjs → messages-Da8yFc7l.cjs} +1 -1
  155. package/dist/{messages-ByntluqZ.mjs → chunks/messages-DgF8OkNr.mjs} +28 -1
  156. package/dist/chunks/{messages-DtTgOx9a.mjs → messages-DiODNXET.mjs} +28 -1
  157. package/dist/{messages-BBb_hXxm.mjs → chunks/messages-DjZoCJ00.mjs} +28 -1
  158. package/dist/chunks/messages-DjrfovG0.cjs +1 -0
  159. package/dist/chunks/messages-DmjccFHq.cjs +1 -0
  160. package/dist/chunks/{messages-sLVwrcar.cjs → messages-DpNmnBjK.cjs} +1 -1
  161. package/dist/chunks/messages-DtaPHADA.cjs +1 -0
  162. package/dist/chunks/{messages-BFGgLdIA2.mjs → messages-DuD4ut1b.mjs} +28 -1
  163. package/dist/chunks/{messages-DKJ5CX9h2.mjs → messages-DuHFGMCJ.mjs} +28 -1
  164. package/dist/{messages-B7E1zFAv.mjs → chunks/messages-Dwl878eS.mjs} +28 -1
  165. package/dist/chunks/{messages-5Rp1xyL4.cjs → messages-ETJ7tQ9O.cjs} +1 -1
  166. package/dist/chunks/messages-EsX3eikv.cjs +1 -0
  167. package/dist/chunks/{messages-BK32XCpH.mjs → messages-HJnG9r2l.mjs} +28 -1
  168. package/dist/chunks/{messages-DjU1jbKf.cjs → messages-Hfo6uCIC.cjs} +1 -1
  169. package/dist/chunks/{messages-Ywb6VdfO2.cjs → messages-IqNWRaNS.cjs} +1 -1
  170. package/dist/{messages-CQ6A0zI9.mjs → chunks/messages-MPe9FjYe.mjs} +28 -1
  171. package/dist/chunks/messages-NJAjMFXd.cjs +1 -0
  172. package/dist/{messages-BctWdAZP2.mjs → chunks/messages-QCaF3d92.mjs} +28 -1
  173. package/dist/chunks/messages-SozFksSf.cjs +1 -0
  174. package/dist/chunks/messages-UXS3zL9A2.cjs +1 -0
  175. package/dist/chunks/{messages-3iZ6jJ6e.cjs → messages-VeyvtTce.cjs} +1 -1
  176. package/dist/chunks/{messages--uPFKcl3.mjs → messages-Xh-c7d4C.mjs} +28 -1
  177. package/dist/chunks/{messages-l0nKmGOV.cjs → messages-Z4LYgfWc.cjs} +1 -1
  178. package/dist/{messages-CQnz6pXD2.mjs → chunks/messages-ZMG7qQ3D.mjs} +28 -1
  179. package/dist/chunks/{messages-R2RH1RLt.mjs → messages-cSBZ5qVe.mjs} +28 -1
  180. package/dist/chunks/{messages-DvxZjb5g2.cjs → messages-gh5G15J1.cjs} +1 -1
  181. package/dist/{messages-BqFRlEJE2.mjs → chunks/messages-jEbEE90_.mjs} +28 -1
  182. package/dist/{messages-CqtZ_gtb.mjs → chunks/messages-kqnzps-X.mjs} +28 -1
  183. package/dist/chunks/{messages-LW9Kd-vn.mjs → messages-m-A6ArIM.mjs} +28 -1
  184. package/dist/chunks/{messages-CEUDK26P2.mjs → messages-t26x8wxB.mjs} +28 -1
  185. package/dist/chunks/{messages-DKjhx7Y3.cjs → messages-tR0BdeVG.cjs} +1 -1
  186. package/dist/{messages-Vfl9lWod.mjs → chunks/messages-typO_i_k.mjs} +28 -1
  187. package/dist/{messages-Co2GV7rA2.mjs → chunks/messages-ypIHI9Fr.mjs} +28 -1
  188. package/dist/chunks/{messages-DR5DyRRY2.mjs → messages-zPUQsksJ.mjs} +28 -1
  189. package/dist/chunks/{tools-CM6aPuR4.mjs → tools-BdoYHyV0.mjs} +2625 -1873
  190. package/dist/chunks/tools-DmEzyrn3.cjs +208 -0
  191. package/dist/chunks/types-BNsalfLy.cjs +1 -0
  192. package/dist/chunks/types-gj36fzRQ.mjs +28 -0
  193. package/dist/full.cjs +1 -1
  194. package/dist/full.mjs +10 -10
  195. package/dist/locales.mjs +94 -67
  196. package/dist/{messages-aPBlKHzr.mjs → messages-4drvqPN8.mjs} +28 -1
  197. package/dist/{chunks/messages-BIQ2VT8X2.mjs → messages-8__-vX3U.mjs} +28 -1
  198. package/dist/{chunks/messages-C3B8l3Hy.mjs → messages-Ao2vCNAH2.mjs} +28 -1
  199. package/dist/{messages-B0Gc0lBw.mjs → messages-B13GEFFu.mjs} +28 -1
  200. package/dist/{messages-CxK_Vgra.mjs → messages-B2YnZIU2.mjs} +28 -1
  201. package/dist/{messages-AK_9q2yu.mjs → messages-BI5B9bxE.mjs} +28 -1
  202. package/dist/{chunks/messages-Db_L5RNl.mjs → messages-BIgvPd6I2.mjs} +28 -1
  203. package/dist/{chunks/messages-BwxzN2q3.mjs → messages-BKG0QHVl.mjs} +28 -1
  204. package/dist/{messages-un7M6YZC2.mjs → messages-BKGg4XYm2.mjs} +28 -1
  205. package/dist/{messages-DZlYqaxx.mjs → messages-BOWDzfkH.mjs} +28 -1
  206. package/dist/{chunks/messages-C56BTPcC.mjs → messages-BQaiScU1.mjs} +28 -1
  207. package/dist/{messages-B5THTOwb2.mjs → messages-BQhHthxq2.mjs} +28 -1
  208. package/dist/{messages-CCgDqF-e.mjs → messages-BRLWpOnP.mjs} +28 -1
  209. package/dist/{messages-C8QB980F2.mjs → messages-BarhGl2S2.mjs} +28 -1
  210. package/dist/{messages-BPsdJnwT.mjs → messages-BgPDPIkO.mjs} +28 -1
  211. package/dist/{messages-BTrok9K8.mjs → messages-BlvF3pot.mjs} +28 -1
  212. package/dist/{chunks/messages-ZPOc6IQC.mjs → messages-Bmu3rJwO.mjs} +28 -1
  213. package/dist/{chunks/messages-BQEh67Mi2.mjs → messages-BpwhHkFb2.mjs} +28 -1
  214. package/dist/{messages-DlxBkSUv.mjs → messages-BvutXmgt.mjs} +28 -1
  215. package/dist/{chunks/messages-D4UnR6e52.mjs → messages-BwCgJUdq.mjs} +28 -1
  216. package/dist/{chunks/messages-Ccng4hJ2.mjs → messages-C5IE9mXm.mjs} +28 -1
  217. package/dist/{messages-DLKTwtBI.mjs → messages-C6R0bzW5.mjs} +28 -1
  218. package/dist/{chunks/messages-9gvi5jul.mjs → messages-C9Kq8259.mjs} +28 -1
  219. package/dist/{messages-YPF71WjJ.mjs → messages-CAnOyxrm.mjs} +28 -1
  220. package/dist/{chunks/messages-D0_Mxuh62.mjs → messages-CDueJTe8.mjs} +28 -1
  221. package/dist/{chunks/messages-BNuGVAEy.mjs → messages-CEGqNXnP.mjs} +28 -1
  222. package/dist/{messages-CQotju8u2.mjs → messages-CF5MeYEt2.mjs} +28 -1
  223. package/dist/{messages-CCdDP2DE.mjs → messages-CGiVoFTi.mjs} +28 -1
  224. package/dist/{messages-DoahmNMI2.mjs → messages-CQzOV7VE2.mjs} +28 -1
  225. package/dist/{messages-D08TSj5Q.mjs → messages-CUFac9Qe.mjs} +28 -1
  226. package/dist/{messages-Bt5Sbl952.mjs → messages-CUcUO5bC2.mjs} +28 -1
  227. package/dist/{messages-DpbHfnge.mjs → messages-CcF4SO9W.mjs} +28 -1
  228. package/dist/{messages-B87GXoqt.mjs → messages-CeqpzGl9.mjs} +28 -1
  229. package/dist/{chunks/messages-DFA5OVrs2.mjs → messages-Cg6a88Bb2.mjs} +28 -1
  230. package/dist/{messages-CYuTyoK6.mjs → messages-Ch-SytN8.mjs} +28 -1
  231. package/dist/{messages-Bwese2OQ.mjs → messages-Cn3uvFq3.mjs} +28 -1
  232. package/dist/{messages-Da09byG42.mjs → messages-CqZgsrVP2.mjs} +28 -1
  233. package/dist/{messages-DrwEVbKk2.mjs → messages-CskLLTiG2.mjs} +28 -1
  234. package/dist/{chunks/messages-Bvge__AJ2.mjs → messages-CusWGsl42.mjs} +28 -1
  235. package/dist/{messages-C-ytN6Dz2.mjs → messages-Cvq2EFPT2.mjs} +28 -1
  236. package/dist/{messages-DQaDNQat2.mjs → messages-CwvHO8gp2.mjs} +28 -1
  237. package/dist/{chunks/messages-D3kC7iDa2.mjs → messages-D4dovFzY2.mjs} +28 -1
  238. package/dist/{chunks/messages-BKSDnjOs.mjs → messages-D9qgYMU82.mjs} +28 -1
  239. package/dist/{messages-BDJfFuXR.mjs → messages-DGAWjKQZ.mjs} +28 -1
  240. package/dist/{chunks/messages-Bgzyr5Lh.mjs → messages-DR2JBU-H.mjs} +28 -1
  241. package/dist/{messages-1ZSVxDYN2.mjs → messages-Da1woCgt2.mjs} +28 -1
  242. package/dist/{messages-B9h-mKVO2.mjs → messages-DbE-riR52.mjs} +28 -1
  243. package/dist/{chunks/messages-BGaAuDRS.mjs → messages-DcQNeoPB.mjs} +28 -1
  244. package/dist/{messages-C-8BMvSp2.mjs → messages-Dq_RdEny2.mjs} +28 -1
  245. package/dist/{messages-Bx5KWmyJ.mjs → messages-Grhv5SE_.mjs} +28 -1
  246. package/dist/{chunks/messages-BIHeeP7X2.mjs → messages-HVgCKIww2.mjs} +28 -1
  247. package/dist/{messages-kjO2WeG-2.mjs → messages-KyJQtOkh2.mjs} +28 -1
  248. package/dist/{chunks/messages-CqhQuuRo2.mjs → messages-L4sYfXpM.mjs} +28 -1
  249. package/dist/{chunks/messages-CHx6m_Bo.mjs → messages-P5B61L1J2.mjs} +28 -1
  250. package/dist/{messages-DrjZz7u9.mjs → messages-RXQKVFCJ.mjs} +28 -1
  251. package/dist/{chunks/messages-DWjHAdb3.mjs → messages-UJx6PvCL.mjs} +28 -1
  252. package/dist/{chunks/messages-DkqiXPS7.mjs → messages-VIQ8vjvS.mjs} +28 -1
  253. package/dist/{chunks/messages-CYOersvL.mjs → messages-bN4Zmk2m.mjs} +28 -1
  254. package/dist/{chunks/messages-BTKPcoLu.mjs → messages-fAEKzdUq.mjs} +28 -1
  255. package/dist/{chunks/messages-DYsO5SIA.mjs → messages-gTUy3xjb.mjs} +28 -1
  256. package/dist/{chunks/messages-BnW_Fwro.mjs → messages-hGop1gbF.mjs} +28 -1
  257. package/dist/{chunks/messages-yGQn67fw2.mjs → messages-jQsl7cga2.mjs} +28 -1
  258. package/dist/{chunks/messages-Duj8jpve2.mjs → messages-jsrzDVZy2.mjs} +28 -1
  259. package/dist/{chunks/messages-C6vijVZv2.mjs → messages-lnxRz5rM.mjs} +28 -1
  260. package/dist/{messages-CRhhyqEy2.mjs → messages-wmS6Z2m82.mjs} +28 -1
  261. package/dist/{chunks/messages-D1q601Wg.mjs → messages-yuNINyS1.mjs} +28 -1
  262. package/dist/{messages-Bn19MGza.mjs → messages-zOl6jpOa.mjs} +28 -1
  263. package/dist/react.cjs +1 -1
  264. package/dist/react.mjs +1 -1
  265. package/dist/tools.cjs +1 -1
  266. package/dist/tools.mjs +3 -3
  267. package/dist/vendor.LICENSE.txt +360 -1
  268. package/package.json +2 -1
  269. package/src/blok.ts +43 -1
  270. package/src/components/constants/data-attributes.ts +2 -0
  271. package/src/components/i18n/locales/am/messages.json +28 -1
  272. package/src/components/i18n/locales/ar/messages.json +28 -1
  273. package/src/components/i18n/locales/az/messages.json +28 -1
  274. package/src/components/i18n/locales/bg/messages.json +28 -1
  275. package/src/components/i18n/locales/bn/messages.json +28 -1
  276. package/src/components/i18n/locales/bs/messages.json +28 -1
  277. package/src/components/i18n/locales/cs/messages.json +28 -1
  278. package/src/components/i18n/locales/da/messages.json +28 -1
  279. package/src/components/i18n/locales/de/messages.json +28 -1
  280. package/src/components/i18n/locales/dv/messages.json +28 -1
  281. package/src/components/i18n/locales/el/messages.json +28 -1
  282. package/src/components/i18n/locales/en/messages.json +27 -0
  283. package/src/components/i18n/locales/es/messages.json +28 -1
  284. package/src/components/i18n/locales/et/messages.json +28 -1
  285. package/src/components/i18n/locales/fa/messages.json +28 -1
  286. package/src/components/i18n/locales/fi/messages.json +28 -1
  287. package/src/components/i18n/locales/fil/messages.json +28 -1
  288. package/src/components/i18n/locales/fr/messages.json +28 -1
  289. package/src/components/i18n/locales/gu/messages.json +28 -1
  290. package/src/components/i18n/locales/he/messages.json +28 -1
  291. package/src/components/i18n/locales/hi/messages.json +28 -1
  292. package/src/components/i18n/locales/hr/messages.json +28 -1
  293. package/src/components/i18n/locales/hu/messages.json +28 -1
  294. package/src/components/i18n/locales/hy/messages.json +28 -1
  295. package/src/components/i18n/locales/id/messages.json +28 -1
  296. package/src/components/i18n/locales/it/messages.json +28 -1
  297. package/src/components/i18n/locales/ja/messages.json +28 -1
  298. package/src/components/i18n/locales/ka/messages.json +28 -1
  299. package/src/components/i18n/locales/km/messages.json +28 -1
  300. package/src/components/i18n/locales/kn/messages.json +28 -1
  301. package/src/components/i18n/locales/ko/messages.json +28 -1
  302. package/src/components/i18n/locales/ku/messages.json +28 -1
  303. package/src/components/i18n/locales/lo/messages.json +28 -1
  304. package/src/components/i18n/locales/lt/messages.json +28 -1
  305. package/src/components/i18n/locales/lv/messages.json +28 -1
  306. package/src/components/i18n/locales/mk/messages.json +28 -1
  307. package/src/components/i18n/locales/ml/messages.json +28 -1
  308. package/src/components/i18n/locales/mn/messages.json +28 -1
  309. package/src/components/i18n/locales/mr/messages.json +28 -1
  310. package/src/components/i18n/locales/ms/messages.json +28 -1
  311. package/src/components/i18n/locales/my/messages.json +28 -1
  312. package/src/components/i18n/locales/ne/messages.json +28 -1
  313. package/src/components/i18n/locales/nl/messages.json +28 -1
  314. package/src/components/i18n/locales/no/messages.json +28 -1
  315. package/src/components/i18n/locales/pa/messages.json +28 -1
  316. package/src/components/i18n/locales/pl/messages.json +28 -1
  317. package/src/components/i18n/locales/ps/messages.json +28 -1
  318. package/src/components/i18n/locales/pt/messages.json +28 -1
  319. package/src/components/i18n/locales/ro/messages.json +28 -1
  320. package/src/components/i18n/locales/ru/messages.json +28 -1
  321. package/src/components/i18n/locales/sd/messages.json +28 -1
  322. package/src/components/i18n/locales/si/messages.json +28 -1
  323. package/src/components/i18n/locales/sk/messages.json +28 -1
  324. package/src/components/i18n/locales/sl/messages.json +28 -1
  325. package/src/components/i18n/locales/sq/messages.json +28 -1
  326. package/src/components/i18n/locales/sr/messages.json +28 -1
  327. package/src/components/i18n/locales/sv/messages.json +28 -1
  328. package/src/components/i18n/locales/sw/messages.json +28 -1
  329. package/src/components/i18n/locales/ta/messages.json +28 -1
  330. package/src/components/i18n/locales/te/messages.json +28 -1
  331. package/src/components/i18n/locales/th/messages.json +28 -1
  332. package/src/components/i18n/locales/tr/messages.json +28 -1
  333. package/src/components/i18n/locales/ug/messages.json +28 -1
  334. package/src/components/i18n/locales/uk/messages.json +28 -1
  335. package/src/components/i18n/locales/ur/messages.json +28 -1
  336. package/src/components/i18n/locales/vi/messages.json +28 -1
  337. package/src/components/i18n/locales/yi/messages.json +28 -1
  338. package/src/components/i18n/locales/zh/messages.json +28 -1
  339. package/src/components/modules/ui.ts +30 -0
  340. package/src/components/utils/media-empty-state.ts +3 -2
  341. package/src/components/utils/mime-match.ts +22 -0
  342. package/src/styles/audio.css +531 -0
  343. package/src/styles/main.css +12 -0
  344. package/src/tools/audio/constants.ts +21 -0
  345. package/src/tools/audio/controls.ts +416 -0
  346. package/src/tools/audio/empty-state.ts +45 -0
  347. package/src/tools/audio/i18n.ts +13 -0
  348. package/src/tools/audio/index.ts +482 -0
  349. package/src/tools/audio/liveliness.ts +136 -0
  350. package/src/tools/audio/metadata.ts +56 -0
  351. package/src/tools/audio/ui.ts +104 -0
  352. package/src/tools/audio/uploader.ts +76 -0
  353. package/src/tools/audio/waveform.ts +277 -0
  354. package/src/tools/file/constants.ts +2 -3
  355. package/src/tools/image/constants.ts +2 -7
  356. package/src/tools/image/uploader.ts +2 -1
  357. package/src/tools/index.ts +2 -0
  358. package/src/tools/video/constants.ts +2 -5
  359. package/src/tools/video/uploader.ts +2 -1
  360. package/types/api/index.d.ts +1 -0
  361. package/types/api/width.d.ts +31 -0
  362. package/types/data-attributes.d.ts +1 -0
  363. package/types/index.d.ts +5 -0
  364. package/types/tools/audio.d.ts +40 -0
  365. package/types/tools/image.d.ts +4 -1
  366. package/types/tools/video.d.ts +4 -1
  367. package/types/tools-entry.d.ts +9 -0
  368. package/dist/chunks/lightweight-i18n-ByswFbdt.cjs +0 -1
  369. package/dist/chunks/messages-1bAMgAsO.cjs +0 -1
  370. package/dist/chunks/messages-5Vbzn-DL2.cjs +0 -1
  371. package/dist/chunks/messages-6lqZ4lhc2.cjs +0 -1
  372. package/dist/chunks/messages-795D2ldP2.cjs +0 -1
  373. package/dist/chunks/messages-B1h0nDQW.cjs +0 -1
  374. package/dist/chunks/messages-B37vUkBi.cjs +0 -1
  375. package/dist/chunks/messages-BDs_gdD_.cjs +0 -1
  376. package/dist/chunks/messages-BXgTHDIw.cjs +0 -1
  377. package/dist/chunks/messages-BYW-U0iT.cjs +0 -1
  378. package/dist/chunks/messages-BeTQxvmX2.cjs +0 -1
  379. package/dist/chunks/messages-Bjmg_8lv2.cjs +0 -1
  380. package/dist/chunks/messages-Bpvja9xW2.cjs +0 -1
  381. package/dist/chunks/messages-BtMQ6v_L.cjs +0 -1
  382. package/dist/chunks/messages-BvChjyuU2.cjs +0 -1
  383. package/dist/chunks/messages-CAix8jdZ.cjs +0 -1
  384. package/dist/chunks/messages-CKiWXTe1.cjs +0 -1
  385. package/dist/chunks/messages-COTP4ZJ_2.cjs +0 -1
  386. package/dist/chunks/messages-Cp7wFDrY2.cjs +0 -1
  387. package/dist/chunks/messages-D8UH8jc6.cjs +0 -1
  388. package/dist/chunks/messages-DAmOTPVW2.cjs +0 -1
  389. package/dist/chunks/messages-DEduQerF.cjs +0 -1
  390. package/dist/chunks/messages-DHah-frn.cjs +0 -1
  391. package/dist/chunks/messages-DI1ZLPxM.cjs +0 -1
  392. package/dist/chunks/messages-Dgp7Wk4H.cjs +0 -1
  393. package/dist/chunks/messages-DhnCZQEY.cjs +0 -1
  394. package/dist/chunks/messages-Dz8AmvFq.cjs +0 -1
  395. package/dist/chunks/messages-DzarYc1J2.cjs +0 -1
  396. package/dist/chunks/messages-FM0KHIkQ2.cjs +0 -1
  397. package/dist/chunks/messages-JsmKjXPZ.cjs +0 -1
  398. package/dist/chunks/messages-RWVOHsZu.cjs +0 -1
  399. package/dist/chunks/messages-iwzDjgrP.cjs +0 -1
  400. package/dist/chunks/messages-l7DqwqOu2.cjs +0 -1
  401. package/dist/chunks/messages-zkunMjZf2.cjs +0 -1
  402. package/dist/chunks/tools-kfoXLTzY.cjs +0 -208
  403. /package/dist/chunks/{am-BA02TqF9.cjs → am-Dc8fykoi.cjs} +0 -0
  404. /package/dist/chunks/{am-C9_6r8HY.mjs → am-DyT_H_W5.mjs} +0 -0
  405. /package/dist/chunks/{ar-CB4IsGCa.cjs → ar-B4htcHv2.cjs} +0 -0
  406. /package/dist/chunks/{ar-BM96nSXF.mjs → ar-DxcVoX26.mjs} +0 -0
  407. /package/dist/chunks/{az-FykE_aDi.cjs → az-CddDVVCC.cjs} +0 -0
  408. /package/dist/chunks/{az-DnZSY5ok.mjs → az-Ck_jWtwp.mjs} +0 -0
  409. /package/dist/chunks/{bg-D6r90gqH.cjs → bg-BExJFlqx.cjs} +0 -0
  410. /package/dist/chunks/{bg-BplUvPeX.mjs → bg-C4_DlJ7m.mjs} +0 -0
  411. /package/dist/chunks/{bn-B7w2dbK4.cjs → bn-B3CWOlDr.cjs} +0 -0
  412. /package/dist/chunks/{bn-CdP9lnfr.mjs → bn-D0PWjX6h.mjs} +0 -0
  413. /package/dist/chunks/{bs-BtX-qLsk.mjs → bs-BjqCqh8B.mjs} +0 -0
  414. /package/dist/chunks/{bs-DztHHorM.cjs → bs-BylFYMjB.cjs} +0 -0
  415. /package/dist/chunks/{cs-CLMsCdIt.cjs → cs-BzXww59F.cjs} +0 -0
  416. /package/dist/chunks/{cs-NcDYS-aU.mjs → cs-R_vXAqRw.mjs} +0 -0
  417. /package/dist/chunks/{da-sJ7EsHcO.cjs → da-Be_YGjP-.cjs} +0 -0
  418. /package/dist/chunks/{da-ANg6gK3-.mjs → da-BuzQWEfl.mjs} +0 -0
  419. /package/dist/chunks/{de-CTxvRxuE.mjs → de-BuXrJCQB.mjs} +0 -0
  420. /package/dist/chunks/{de-CxMqLKhy.cjs → de-CuXVxRU3.cjs} +0 -0
  421. /package/dist/chunks/{el-Bg6QXLt5.cjs → el-CkLmGPX-.cjs} +0 -0
  422. /package/dist/chunks/{el-CgOoJaXB.mjs → el-d_XP5H44.mjs} +0 -0
  423. /package/dist/chunks/{es-7zUbslPJ.cjs → es-CpevBSzX.cjs} +0 -0
  424. /package/dist/chunks/{es-D5YDFRu-.mjs → es-D79FXk9q.mjs} +0 -0
  425. /package/dist/chunks/{et-57a7ees8.mjs → et-BmawyEOM.mjs} +0 -0
  426. /package/dist/chunks/{et-D_rhRdDD.cjs → et-Dm53D0Mw.cjs} +0 -0
  427. /package/dist/chunks/{fa-JBr2zsfI.cjs → fa-BLZQhg44.cjs} +0 -0
  428. /package/dist/chunks/{fa-Dp_BXnBP.mjs → fa-Cyzee-uD.mjs} +0 -0
  429. /package/dist/chunks/{fi-DjbYN6MA.cjs → fi-CktzJP0P.cjs} +0 -0
  430. /package/dist/chunks/{fi-at45xjOS.mjs → fi-zVk232gP.mjs} +0 -0
  431. /package/dist/chunks/{fil-dcVBIQoi.cjs → fil-BGEDSfA3.cjs} +0 -0
  432. /package/dist/chunks/{fil-D_HT2vGt.mjs → fil-DQcS9VcY.mjs} +0 -0
  433. /package/dist/chunks/{fr-ByR9PLTE.mjs → fr-CUoxzxMy.mjs} +0 -0
  434. /package/dist/chunks/{fr-Ch4zj1rM.cjs → fr-DRFIW1vC.cjs} +0 -0
  435. /package/dist/chunks/{gu-CvfPvH3Y.mjs → gu-BSL13JVA.mjs} +0 -0
  436. /package/dist/chunks/{gu-CoLW5Saq.cjs → gu-DCZgQPh1.cjs} +0 -0
  437. /package/dist/chunks/{he-Bmqypvkq.mjs → he-B4fsDXlD.mjs} +0 -0
  438. /package/dist/chunks/{he-2wS2DK0D.cjs → he-CrJki_kT.cjs} +0 -0
  439. /package/dist/chunks/{hi-f4gshON3.cjs → hi-B7MYHNXb.cjs} +0 -0
  440. /package/dist/chunks/{hi-DbcN0x64.mjs → hi-Df_jRvP-.mjs} +0 -0
  441. /package/dist/chunks/{hr-DMExeWwd.cjs → hr-CHeiPUjb.cjs} +0 -0
  442. /package/dist/chunks/{hr-D5mydeyn.mjs → hr-DC4ZNI8T.mjs} +0 -0
  443. /package/dist/chunks/{hu-DVCPn8un.mjs → hu-ClC3NxqC.mjs} +0 -0
  444. /package/dist/chunks/{hu-COmlHkse.cjs → hu-x4Ga7znM.cjs} +0 -0
  445. /package/dist/chunks/{hy-BoBSSiJc.cjs → hy-dXGxcAjA.cjs} +0 -0
  446. /package/dist/chunks/{hy-CP6oqcK_.mjs → hy-fpToCZeQ.mjs} +0 -0
  447. /package/dist/chunks/{id-Dk2AQ6-R.cjs → id-BETj6SOy.cjs} +0 -0
  448. /package/dist/chunks/{id-COwan-Bb.mjs → id-zXVZ_-tD.mjs} +0 -0
  449. /package/dist/chunks/{it-BCmU3zOg.cjs → it-CblE5NNx.cjs} +0 -0
  450. /package/dist/chunks/{it-DJqN-zLs.mjs → it-Cp7EdTdT.mjs} +0 -0
  451. /package/dist/chunks/{ja-DcMqJvnV.cjs → ja-D4CP2G3w.cjs} +0 -0
  452. /package/dist/chunks/{ja-CvoLNAXS.mjs → ja-DoaPxTyV.mjs} +0 -0
  453. /package/dist/chunks/{ka-BdyjQFkv.cjs → ka-C6DxbxxH.cjs} +0 -0
  454. /package/dist/chunks/{ka-BsqbDXqr.mjs → ka-CwoyhuWu.mjs} +0 -0
  455. /package/dist/chunks/{km-BShH0mB9.cjs → km-BdZJI-qn.cjs} +0 -0
  456. /package/dist/chunks/{km-C9FxSKv0.mjs → km-D8jrJ9sv.mjs} +0 -0
  457. /package/dist/chunks/{kn-bNx6e6NK.cjs → kn-DsGMDyW7.cjs} +0 -0
  458. /package/dist/chunks/{kn-BKTm-E-A.mjs → kn-IsuZc30u.mjs} +0 -0
  459. /package/dist/chunks/{ko-LmGjEODJ.cjs → ko-CFVvGmVE.cjs} +0 -0
  460. /package/dist/chunks/{ko-BLEDr4t_.mjs → ko-DxAtBe72.mjs} +0 -0
  461. /package/dist/chunks/{ku-BekLwcHQ.cjs → ku-B-43xPpS.cjs} +0 -0
  462. /package/dist/chunks/{ku-DGpIv9vX.mjs → ku-Da-1BcEg.mjs} +0 -0
  463. /package/dist/chunks/{lo-YgZPFD63.cjs → lo-DtVyNkq4.cjs} +0 -0
  464. /package/dist/chunks/{lo-C3wsS73b.mjs → lo-p9PUOxXA.mjs} +0 -0
  465. /package/dist/chunks/{lt-CIvBJk2h.cjs → lt-BaHJn9M4.cjs} +0 -0
  466. /package/dist/chunks/{lt-DWWjfR4Z.mjs → lt-C4lGuzQq.mjs} +0 -0
  467. /package/dist/chunks/{lv-D4nb-9oK.mjs → lv-B5Cp4JEf.mjs} +0 -0
  468. /package/dist/chunks/{lv-B6Djmvjl.cjs → lv-BHXmLxXV.cjs} +0 -0
  469. /package/dist/chunks/{mk-BPUvDORf.mjs → mk-B5rDdPUj.mjs} +0 -0
  470. /package/dist/chunks/{mk-Ck56Emvp.cjs → mk-BhwKijB_.cjs} +0 -0
  471. /package/dist/chunks/{ml-DsibsgSA.cjs → ml-DxZv3Mzc.cjs} +0 -0
  472. /package/dist/chunks/{ml-qo0n1JHs.mjs → ml-gamedfCk.mjs} +0 -0
  473. /package/dist/chunks/{mn-BAQnLAOv.mjs → mn-BbhhPusH.mjs} +0 -0
  474. /package/dist/chunks/{mn-Db0fVNYE.cjs → mn-Bzi4YTMA.cjs} +0 -0
  475. /package/dist/chunks/{mr-BTz5VL4u.cjs → mr-BENatxZg.cjs} +0 -0
  476. /package/dist/chunks/{mr-CFEPrQYy.mjs → mr-DO_kNyu7.mjs} +0 -0
  477. /package/dist/chunks/{ms-ItzWfmiu.cjs → ms-BVop2DJc.cjs} +0 -0
  478. /package/dist/chunks/{ms-C9p2_6EB.mjs → ms-eIjFVRpo.mjs} +0 -0
  479. /package/dist/chunks/{my-BQhcHK_d.mjs → my-nf0gvOOX.mjs} +0 -0
  480. /package/dist/chunks/{my-Bq1EPoFX.cjs → my-qLePPAWv.cjs} +0 -0
  481. /package/dist/chunks/{ne-Cf4GpHyI.mjs → ne-DOaubYly.mjs} +0 -0
  482. /package/dist/chunks/{ne-Mog3kAWt.cjs → ne-DfryA0M8.cjs} +0 -0
  483. /package/dist/chunks/{nl-Do9Y1u3F.cjs → nl-BehqWHBh.cjs} +0 -0
  484. /package/dist/chunks/{nl-7DE7AKK5.mjs → nl-VHkGK6MK.mjs} +0 -0
  485. /package/dist/chunks/{no-DNuo9wW6.cjs → no-CR9Fxz1X.cjs} +0 -0
  486. /package/dist/chunks/{no-J4jj2fW7.mjs → no-CdtSCHJr.mjs} +0 -0
  487. /package/dist/chunks/{notifier-BW5H3Ctc.cjs → notifier-CFYHvVe5.cjs} +0 -0
  488. /package/dist/chunks/{notifier-BDNwSr07.mjs → notifier-DJ3Shryh.mjs} +0 -0
  489. /package/dist/chunks/{pa-BVCDv2EV.cjs → pa-DgC4LF8q.cjs} +0 -0
  490. /package/dist/chunks/{pa-DMuUOUxa.mjs → pa-TMcUvGQV.mjs} +0 -0
  491. /package/dist/chunks/{pl-DIZm5XzV.mjs → pl-BfQYJ9y_.mjs} +0 -0
  492. /package/dist/chunks/{pl-Ct8v4d8V.cjs → pl-a2nheY_J.cjs} +0 -0
  493. /package/dist/chunks/{prism-bash-CZ6DBzIk.mjs → prism-bash-D4zr_u8t.mjs} +0 -0
  494. /package/dist/chunks/{prism-bash-qitAYJtY.cjs → prism-bash-DDQ2u01V.cjs} +0 -0
  495. /package/dist/chunks/{prism-c-nnJdAhPL.mjs → prism-c-CVyw1BOu.mjs} +0 -0
  496. /package/dist/chunks/{prism-c-BLyB6e2K.cjs → prism-c-DfVjTtJG.cjs} +0 -0
  497. /package/dist/chunks/{prism-cpp-DYNCFS3K.mjs → prism-cpp-CrBJjuu5.mjs} +0 -0
  498. /package/dist/chunks/{prism-cpp-OSmmdLuG.cjs → prism-cpp-DqxJDZfM.cjs} +0 -0
  499. /package/dist/chunks/{prism-csharp-16T9Ewqf.cjs → prism-csharp-BbJ6Sp-b.cjs} +0 -0
  500. /package/dist/chunks/{prism-csharp-Dxs2I4ua.mjs → prism-csharp-lrMxvYpL.mjs} +0 -0
  501. /package/dist/chunks/{prism-css-DwTbu-Ar.mjs → prism-css-VQTID_HR.mjs} +0 -0
  502. /package/dist/chunks/{prism-css-CMFNwvrI.cjs → prism-css-w2kan9uc.cjs} +0 -0
  503. /package/dist/chunks/{prism-dart-DX2YtTGt.cjs → prism-dart-B374T6OY.cjs} +0 -0
  504. /package/dist/chunks/{prism-dart-Cqhjl8Zt.mjs → prism-dart-Q-9Z_W9B.mjs} +0 -0
  505. /package/dist/chunks/{prism-docker-CF7dhvYh.mjs → prism-docker-DWAQ3dDD.mjs} +0 -0
  506. /package/dist/chunks/{prism-docker-CR4lKITl.cjs → prism-docker-DsFNc9i3.cjs} +0 -0
  507. /package/dist/chunks/{prism-go-DUV4QMTT.cjs → prism-go-C4e52XbO.cjs} +0 -0
  508. /package/dist/chunks/{prism-go-h9KLdAE9.mjs → prism-go-CrXe2RS9.mjs} +0 -0
  509. /package/dist/chunks/{prism-graphql-CaH0gD6e.mjs → prism-graphql-BG5mfdhd.mjs} +0 -0
  510. /package/dist/chunks/{prism-graphql-Cw4U0rOD.cjs → prism-graphql-DzWE15JS.cjs} +0 -0
  511. /package/dist/chunks/{prism-java-BpQ0ReAC.cjs → prism-java-Bth7ny8U.cjs} +0 -0
  512. /package/dist/chunks/{prism-java-DvKEtgSw.mjs → prism-java-_m72Vn1f.mjs} +0 -0
  513. /package/dist/chunks/{prism-javascript-D2ecWeeN.mjs → prism-javascript-B74it_3Q.mjs} +0 -0
  514. /package/dist/chunks/{prism-javascript-ELk9U7yv.cjs → prism-javascript-CZHuhUqG.cjs} +0 -0
  515. /package/dist/chunks/{prism-json-BdNUnMGb.cjs → prism-json-C7yjuPaa.cjs} +0 -0
  516. /package/dist/chunks/{prism-json-eqh92QZC.mjs → prism-json-CFsf0S_6.mjs} +0 -0
  517. /package/dist/chunks/{prism-kotlin-22Gr2SxK.mjs → prism-kotlin-BTT9anu1.mjs} +0 -0
  518. /package/dist/chunks/{prism-kotlin-WNUAhuoa.cjs → prism-kotlin-BwlhXHxp.cjs} +0 -0
  519. /package/dist/chunks/{prism-latex-DKge5vOJ.mjs → prism-latex-CL8zDJwm.mjs} +0 -0
  520. /package/dist/chunks/{prism-latex-BtyYjHKE.cjs → prism-latex-dRhujmiF.cjs} +0 -0
  521. /package/dist/chunks/{prism-lua-DhVb-IBs.cjs → prism-lua-CC8iHZy0.cjs} +0 -0
  522. /package/dist/chunks/{prism-lua-BySMQWvB.mjs → prism-lua-D6JJ7p-A.mjs} +0 -0
  523. /package/dist/chunks/{prism-markdown-Bvv1_ifb.mjs → prism-markdown-D6D8BprH.mjs} +0 -0
  524. /package/dist/chunks/{prism-markdown-DonI20ta.cjs → prism-markdown-DMW4QHo8.cjs} +0 -0
  525. /package/dist/chunks/{prism-markup-DaGlO8wQ.cjs → prism-markup-DmQlWhRx.cjs} +0 -0
  526. /package/dist/chunks/{prism-markup-DPDFrSBO.mjs → prism-markup-fK-1ADZ0.mjs} +0 -0
  527. /package/dist/chunks/{prism-markup-templating-DKZ_F63l.cjs → prism-markup-templating-CKDQaPgk.cjs} +0 -0
  528. /package/dist/chunks/{prism-markup-templating-B1u1wroF.mjs → prism-markup-templating-DfRjv0mn.mjs} +0 -0
  529. /package/dist/chunks/{prism-php-V_A4SMVC.cjs → prism-php-BJVLLh_W.cjs} +0 -0
  530. /package/dist/chunks/{prism-php-CjjweiQK.mjs → prism-php-DffX-wRi.mjs} +0 -0
  531. /package/dist/chunks/{prism-python-6eBEySe7.mjs → prism-python-2BrUkjbB.mjs} +0 -0
  532. /package/dist/chunks/{prism-python-DLqiSiAQ.cjs → prism-python-Bhf5rXub.cjs} +0 -0
  533. /package/dist/chunks/{prism-r-uOZv1a7d.mjs → prism-r-CU9se1Na.mjs} +0 -0
  534. /package/dist/chunks/{prism-r-zh9-I3-j.cjs → prism-r-ChFoLzAP.cjs} +0 -0
  535. /package/dist/chunks/{prism-ruby-M4mhoFF5.cjs → prism-ruby-BvGZJs6t.cjs} +0 -0
  536. /package/dist/chunks/{prism-ruby-Cr-3Y89S.mjs → prism-ruby-DuQ4syPd.mjs} +0 -0
  537. /package/dist/chunks/{prism-rust-g2dmV4wL.cjs → prism-rust-6eFXbDzh.cjs} +0 -0
  538. /package/dist/chunks/{prism-rust-DxlMe9N8.mjs → prism-rust-DRurCx4W.mjs} +0 -0
  539. /package/dist/chunks/{prism-scala-byYaK-Hs.mjs → prism-scala-CU8N2Vpe.mjs} +0 -0
  540. /package/dist/chunks/{prism-scala-DdSRpf_v.cjs → prism-scala-De4Tbjij.cjs} +0 -0
  541. /package/dist/chunks/{prism-sql-W4S9Ag3H.mjs → prism-sql-Au3VVcw1.mjs} +0 -0
  542. /package/dist/chunks/{prism-sql-BjDuRopl.cjs → prism-sql-_JMPMWu-.cjs} +0 -0
  543. /package/dist/chunks/{prism-swift-KjqbhTlS.mjs → prism-swift-B-r5qNUT.mjs} +0 -0
  544. /package/dist/chunks/{prism-swift-CqOmCgZp.cjs → prism-swift-DdWKYFH_.cjs} +0 -0
  545. /package/dist/chunks/{prism-typescript-CjqcJxVT.mjs → prism-typescript-BKj96rmj.mjs} +0 -0
  546. /package/dist/chunks/{prism-typescript-DGlZWX5K.cjs → prism-typescript-DYxN8s4t.cjs} +0 -0
  547. /package/dist/chunks/{prism-yaml-W11WcDBZ.mjs → prism-yaml-Bk31kvSd.mjs} +0 -0
  548. /package/dist/chunks/{prism-yaml-HqOYDhYZ.cjs → prism-yaml-CAlRa1Lr.cjs} +0 -0
  549. /package/dist/chunks/{ps-X3--6pS3.mjs → ps-Dv4lWz5A.mjs} +0 -0
  550. /package/dist/chunks/{ps-DT4DAHOy.cjs → ps-f5JFPQUh.cjs} +0 -0
  551. /package/dist/chunks/{pt-BMT2BIpj.mjs → pt-CtgGcY6X.mjs} +0 -0
  552. /package/dist/chunks/{pt-Dwe6Dinw.cjs → pt-I7qQ_R8a.cjs} +0 -0
  553. /package/dist/chunks/{ro-CoHEUo3b.cjs → ro-BNo9EVkV.cjs} +0 -0
  554. /package/dist/chunks/{ro-Ndh2J4Fv.mjs → ro-Dxs4TSRR.mjs} +0 -0
  555. /package/dist/chunks/{ru-DEoON4H0.mjs → ru-B5A2vGqQ.mjs} +0 -0
  556. /package/dist/chunks/{ru-Pmgo28Kt.cjs → ru-Q0YDL_7B.cjs} +0 -0
  557. /package/dist/chunks/{sd-DxSmw84d.cjs → sd-56aE3AgX.cjs} +0 -0
  558. /package/dist/chunks/{sd-B46KwBlt.mjs → sd-DcBvM0yY.mjs} +0 -0
  559. /package/dist/chunks/{si-attpuQg-.cjs → si-B1k5DPe9.cjs} +0 -0
  560. /package/dist/chunks/{si-CEX6-_X4.mjs → si-JTOFsZCj.mjs} +0 -0
  561. /package/dist/chunks/{sk-Crsvi9aQ.mjs → sk-B0LtwsAp.mjs} +0 -0
  562. /package/dist/chunks/{sk-CvkpO0ti.cjs → sk-DKWs0Fly.cjs} +0 -0
  563. /package/dist/chunks/{sl-BT19lhkA.cjs → sl-3aOunask.cjs} +0 -0
  564. /package/dist/chunks/{sl-Cqe1IKhE.mjs → sl-CE_B7j6P.mjs} +0 -0
  565. /package/dist/chunks/{sq-rY2-arjV.cjs → sq-BjtxgRqp.cjs} +0 -0
  566. /package/dist/chunks/{sq-BOQb1hx9.mjs → sq-DG9X-8jF.mjs} +0 -0
  567. /package/dist/chunks/{sr-jnkxoHkR.cjs → sr-DLHLW9qM.cjs} +0 -0
  568. /package/dist/chunks/{sr-WVqhi-MV.mjs → sr-LJKaTtNM.mjs} +0 -0
  569. /package/dist/chunks/{sv-cjssSK3x.mjs → sv-Cm3jSTt-.mjs} +0 -0
  570. /package/dist/chunks/{sv-BiWSYdw7.cjs → sv-DJ6Kywac.cjs} +0 -0
  571. /package/dist/chunks/{sw-DFyk62c4.cjs → sw-BnvydNkI.cjs} +0 -0
  572. /package/dist/chunks/{sw-BNNAgQNn.mjs → sw-C2rm3bwF.mjs} +0 -0
  573. /package/dist/chunks/{ta-jg4mBsL9.mjs → ta-5k36G0kU.mjs} +0 -0
  574. /package/dist/chunks/{ta-DowDx1bh.cjs → ta-e_T5Y_TH.cjs} +0 -0
  575. /package/dist/chunks/{te-G0buJU1V.cjs → te-DJd9mdke.cjs} +0 -0
  576. /package/dist/chunks/{te-BiLupA2T.mjs → te-Qw6ZgfXC.mjs} +0 -0
  577. /package/dist/chunks/{th-DsjA6OWh.cjs → th-BFvK-kez.cjs} +0 -0
  578. /package/dist/chunks/{th-Dtb_u833.mjs → th-DFCnkeU5.mjs} +0 -0
  579. /package/dist/chunks/{tr-DN1xdxQn.cjs → tr-Bio2iyuW.cjs} +0 -0
  580. /package/dist/chunks/{tr-01MbT9-l.mjs → tr-QoYDqZZE.mjs} +0 -0
  581. /package/dist/chunks/{ug-BFlA2VRZ.mjs → ug-CYVvHjDo.mjs} +0 -0
  582. /package/dist/chunks/{ug-DEJ9cNGH.cjs → ug-_E9uEBC5.cjs} +0 -0
  583. /package/dist/chunks/{uk-Bv6aB1Nd.cjs → uk-CiihPsrk.cjs} +0 -0
  584. /package/dist/chunks/{uk-DY7rBPyo.mjs → uk-KrD9Hdx7.mjs} +0 -0
  585. /package/dist/chunks/{ur-C3CFfx9s.cjs → ur-B9A13pT4.cjs} +0 -0
  586. /package/dist/chunks/{ur-DHfULZeF.mjs → ur-Bgtl4YGa.mjs} +0 -0
  587. /package/dist/chunks/{vi-BFuaq2Tk.mjs → vi-CwW9u4Ww.mjs} +0 -0
  588. /package/dist/chunks/{vi-DQrrRkmq.cjs → vi-l243K5Tb.cjs} +0 -0
  589. /package/dist/chunks/{webm-muxer-CC98PYSV.cjs → webm-muxer-BEeYNPIp.cjs} +0 -0
  590. /package/dist/chunks/{webm-muxer-CUUz719e.mjs → webm-muxer-Doy8JtlV.mjs} +0 -0
  591. /package/dist/chunks/{zh-BGpl7x7W.mjs → zh-BdCF4Hao.mjs} +0 -0
  592. /package/dist/chunks/{zh-5rdSdLkR.cjs → zh-DPZR_81P.cjs} +0 -0
@@ -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
+ }
@@ -0,0 +1,76 @@
1
+ import type { AudioConfig } from '../../../types/tools/audio';
2
+ import { resolveMaxSize } from '../../components/utils/max-size';
3
+ import { matchesMime } from '../../components/utils/mime-match';
4
+ import { DEFAULT_MAX_SIZE, DEFAULT_MIME_TYPES } from './constants';
5
+
6
+ export interface UploadResult {
7
+ url: string;
8
+ fileName?: string;
9
+ }
10
+
11
+ export interface UploadOptions {
12
+ onProgress?: (percent: number) => void;
13
+ }
14
+
15
+ export class AudioUploadError extends Error {
16
+ public readonly detail?: string;
17
+
18
+ constructor(public readonly code: string, detail?: string) {
19
+ super(detail ? `${code}: ${detail}` : code);
20
+ this.name = 'AudioUploadError';
21
+ this.detail = detail;
22
+ }
23
+ }
24
+
25
+ function parseUrl(raw: string): URL | null {
26
+ try {
27
+ return new URL(raw);
28
+ } catch {
29
+ return null;
30
+ }
31
+ }
32
+
33
+ export class Uploader {
34
+ constructor(private readonly config: AudioConfig) {}
35
+
36
+ public async handleUrl(raw: string, options: UploadOptions = {}): Promise<UploadResult> {
37
+ this.validateUrl(raw);
38
+ if (this.config.uploader?.uploadByUrl) {
39
+ return this.config.uploader.uploadByUrl(raw, { onProgress: options.onProgress });
40
+ }
41
+
42
+ return { url: raw };
43
+ }
44
+
45
+ public async handleFile(file: File, options: UploadOptions = {}): Promise<UploadResult> {
46
+ this.validateFile(file);
47
+ if (this.config.uploader?.uploadByFile) {
48
+ return this.config.uploader.uploadByFile(file, { onProgress: options.onProgress });
49
+ }
50
+
51
+ return { url: URL.createObjectURL(file), fileName: file.name };
52
+ }
53
+
54
+ private validateUrl(raw: string): void {
55
+ const parsed = parseUrl(raw);
56
+
57
+ if (!parsed) {
58
+ throw new AudioUploadError('INVALID_URL', raw);
59
+ }
60
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
61
+ throw new AudioUploadError('INVALID_URL', parsed.protocol);
62
+ }
63
+ }
64
+
65
+ private validateFile(file: File): void {
66
+ const types = this.config.types ?? [...DEFAULT_MIME_TYPES];
67
+ const maxSize = resolveMaxSize(this.config.maxSize, file.type, DEFAULT_MAX_SIZE);
68
+
69
+ if (file.type && !matchesMime(file.type, types)) {
70
+ throw new AudioUploadError('UNSUPPORTED_TYPE', file.type);
71
+ }
72
+ if (file.size > maxSize) {
73
+ throw new AudioUploadError('FILE_TOO_LARGE', `${file.size} > ${maxSize}`);
74
+ }
75
+ }
76
+ }
@@ -0,0 +1,277 @@
1
+ import { WAVEFORM_BUCKETS } from './constants';
2
+ import { liveAmplitude, headColorBlend, entranceEase } from './liveliness';
3
+
4
+ /**
5
+ * Reduce raw mono samples to `buckets` peak values normalized to 0..1.
6
+ * Each bucket holds the max absolute amplitude across its slice; the whole
7
+ * array is then divided by the global max so the loudest bucket is 1.
8
+ */
9
+
10
+ function bucketPeak(channel: Float32Array, start: number, end: number): number {
11
+ return channel.slice(start, end).reduce((max, v) => Math.max(max, Math.abs(v)), 0);
12
+ }
13
+
14
+ export function computePeaks(channel: Float32Array, buckets = WAVEFORM_BUCKETS): number[] {
15
+ if (channel.length === 0) return new Array<number>(buckets).fill(0);
16
+
17
+ const step = channel.length / buckets;
18
+ const out = Array.from({ length: buckets }, (_, b) => {
19
+ const start = Math.floor(b * step);
20
+ const end = Math.min(channel.length, Math.floor((b + 1) * step));
21
+ return bucketPeak(channel, start, end);
22
+ });
23
+
24
+ const globalMax = Math.max(0, ...out);
25
+ if (globalMax <= 0) return out;
26
+ return out.map((v) => v / globalMax);
27
+ }
28
+
29
+ interface ChannelSource {
30
+ numberOfChannels: number;
31
+ length: number;
32
+ getChannelData(ch: number): Float32Array;
33
+ }
34
+
35
+ /** Average all channels into one mono track, then reduce to peaks. */
36
+ export function peaksFromAudioBuffer(buffer: ChannelSource, buckets = WAVEFORM_BUCKETS): number[] {
37
+ const { numberOfChannels, length } = buffer;
38
+ if (numberOfChannels <= 1) return computePeaks(buffer.getChannelData(0), buckets);
39
+
40
+ const mono = new Float32Array(length);
41
+ Array.from({ length: numberOfChannels }, (_, ch) => buffer.getChannelData(ch)).forEach((data) => {
42
+ data.forEach((v, i) => { mono[i] += v / numberOfChannels; });
43
+ });
44
+ return computePeaks(mono, buckets);
45
+ }
46
+
47
+ export function ratioFromPointer(clientX: number, rect: { left: number; width: number }): number {
48
+ if (rect.width <= 0) return 0;
49
+ const r = (clientX - rect.left) / rect.width;
50
+ return Math.min(1, Math.max(0, r));
51
+ }
52
+
53
+ type AudioContextCtor = typeof AudioContext;
54
+
55
+ function getAudioContextCtor(): AudioContextCtor | null {
56
+ const w = globalThis as unknown as {
57
+ AudioContext?: AudioContextCtor;
58
+ webkitAudioContext?: AudioContextCtor;
59
+ };
60
+ return w.AudioContext ?? w.webkitAudioContext ?? null;
61
+ }
62
+
63
+ export interface DecodedAudio {
64
+ peaks: number[];
65
+ duration: number;
66
+ }
67
+
68
+ export async function decodePeaks(file: File): Promise<DecodedAudio | null> {
69
+ const Ctor = getAudioContextCtor();
70
+ if (!Ctor) return null;
71
+ try {
72
+ const ctx = new Ctor();
73
+ try {
74
+ const buffer = await ctx.decodeAudioData(await file.arrayBuffer());
75
+ return { peaks: peaksFromAudioBuffer(buffer), duration: buffer.duration };
76
+ } finally {
77
+ void ctx.close();
78
+ }
79
+ } catch {
80
+ return null;
81
+ }
82
+ }
83
+
84
+ export interface WaveformHandle {
85
+ destroy(): void;
86
+ }
87
+
88
+ export function attachWaveform(opts: {
89
+ mount: HTMLElement;
90
+ media: HTMLAudioElement;
91
+ peaks: number[];
92
+ }): WaveformHandle {
93
+ const { mount, media, peaks } = opts;
94
+ const canvas = document.createElement('canvas');
95
+ canvas.setAttribute('data-role', 'audio-waveform-canvas');
96
+ canvas.className = 'blok-audio-waveform__canvas';
97
+ mount.appendChild(canvas);
98
+
99
+ const prefersReducedMotion = (): boolean =>
100
+ globalThis.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;
101
+
102
+ // Animation state. `playing` is true between play and pause/ended and pins the
103
+ // boost energy at full. On pause we keep the loop alive briefly with `settling`
104
+ // so the bars glide back to their resting peaks (energy ramps 1→0) instead of
105
+ // snapping. `energy` reflects the current boost multiplier.
106
+ const SETTLE_MS = 420;
107
+ // The comet-head colour blooms in over ENTRANCE_MS each time playback starts.
108
+ const ENTRANCE_MS = 650;
109
+ const anim = { playing: false, settling: false, settleStart: 0, entranceStart: 0, rafId: 0 };
110
+
111
+ const energyAt = (now: number): number => {
112
+ if (anim.playing) return 1;
113
+ if (!anim.settling) return 0;
114
+ return Math.min(1, Math.max(0, 1 - (now - anim.settleStart) / SETTLE_MS));
115
+ };
116
+
117
+ const entranceAt = (now: number): number => entranceEase((now - anim.entranceStart) / ENTRANCE_MS);
118
+
119
+ const draw = (now: number): void => {
120
+ const rect = canvas.getBoundingClientRect();
121
+ if (rect.width <= 0 || rect.height <= 0) return;
122
+ const dpr = globalThis.devicePixelRatio || 1;
123
+ const targetW = Math.round(rect.width * dpr);
124
+ const targetH = Math.round(rect.height * dpr);
125
+ // Resizing the backing store clears it; only pay that cost when the box
126
+ // actually changed (every frame of the loop would otherwise reallocate).
127
+ if (canvas.width !== targetW || canvas.height !== targetH) {
128
+ canvas.width = targetW;
129
+ canvas.height = targetH;
130
+ }
131
+ const ctx = canvas.getContext('2d');
132
+ if (!ctx) return;
133
+ ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
134
+ ctx.clearRect(0, 0, rect.width, rect.height);
135
+
136
+ const played = media.duration ? media.currentTime / media.duration : 0;
137
+ const playheadIndex = played * peaks.length;
138
+ const reduced = prefersReducedMotion();
139
+ const timeSeconds = now / 1000;
140
+ const energy = reduced ? 0 : energyAt(now);
141
+ const live = energy > 0;
142
+ const entrance = live ? entranceAt(now) : 0;
143
+
144
+ const slot = rect.width / peaks.length;
145
+ const gap = Math.min(2, slot * 0.34);
146
+ const barW = Math.max(1, slot - gap);
147
+ const radius = Math.min(barW / 2, 2);
148
+ const styles = getComputedStyle(canvas);
149
+ const playedColor = styles.getPropertyValue('--blok-audio-bar-played').trim() || '#222';
150
+ const baseColor = styles.getPropertyValue('--blok-audio-bar').trim() || '#ccc';
151
+ const headColor = styles.getPropertyValue('--blok-audio-bar-head').trim() || playedColor;
152
+
153
+ const paintBar = (x: number, y: number, h: number): void => {
154
+ if (typeof ctx.roundRect === 'function') {
155
+ ctx.beginPath();
156
+ ctx.roundRect(x, y, barW, h, radius);
157
+ ctx.fill();
158
+ } else {
159
+ ctx.fillRect(x, y, barW, h);
160
+ }
161
+ };
162
+
163
+ peaks.forEach((peak, i) => {
164
+ const amp = live
165
+ ? liveAmplitude({ basePeak: peak, index: i, playheadIndex, timeSeconds, reduced, energy })
166
+ : peak;
167
+ const h = Math.max(2, amp * rect.height * 0.92);
168
+ const x = i * slot;
169
+ const y = (rect.height - h) / 2;
170
+ ctx.fillStyle = i < playheadIndex ? playedColor : baseColor;
171
+ paintBar(x, y, h);
172
+
173
+ // Comet-head colour shift — overlay the head tint, its alpha ramping in
174
+ // with the entrance and fading out on the settle (energy).
175
+ if (live) {
176
+ const blend = headColorBlend({ distance: i - playheadIndex, energy, entrance });
177
+ if (blend > 0.001) {
178
+ ctx.save();
179
+ ctx.globalAlpha = Math.min(1, blend);
180
+ ctx.fillStyle = headColor;
181
+ paintBar(x, y, h);
182
+ ctx.restore();
183
+ }
184
+ }
185
+ });
186
+ };
187
+
188
+ const setSeekVar = (): void => {
189
+ mount.style.setProperty(
190
+ '--blok-audio-seek-pct',
191
+ String(media.duration ? (media.currentTime / media.duration) * 100 : 0),
192
+ );
193
+ };
194
+
195
+ const loop = (now: number): void => {
196
+ draw(now);
197
+ // Keep looping while playing, or while the post-pause settle still has energy.
198
+ const keepGoing = anim.playing || (anim.settling && energyAt(now) > 0);
199
+ if (keepGoing) {
200
+ anim.rafId = requestAnimationFrame(loop);
201
+ } else {
202
+ anim.settling = false;
203
+ anim.rafId = 0;
204
+ }
205
+ };
206
+
207
+ const onPlay = (): void => {
208
+ setSeekVar();
209
+ anim.playing = true;
210
+ anim.settling = false;
211
+ // Restart the head-colour entrance so it blooms in on every play.
212
+ anim.entranceStart = globalThis.performance?.now?.() ?? 0;
213
+ // No continuous loop under reduced motion — timeupdate alone advances the
214
+ // played boundary, with no dancing bars.
215
+ if (!anim.rafId && !prefersReducedMotion()) anim.rafId = requestAnimationFrame(loop);
216
+ };
217
+ const onStop = (): void => {
218
+ // Hand off to the settle ramp so the bars glide down rather than snap. Under
219
+ // reduced motion there's no loop/boost to settle, so just stop.
220
+ if (anim.playing && !prefersReducedMotion()) {
221
+ anim.playing = false;
222
+ anim.settling = true;
223
+ anim.settleStart = globalThis.performance?.now?.() ?? 0;
224
+ if (!anim.rafId) anim.rafId = requestAnimationFrame(loop);
225
+ } else {
226
+ anim.playing = false;
227
+ anim.settling = false;
228
+ if (anim.rafId) { cancelAnimationFrame(anim.rafId); anim.rafId = 0; }
229
+ draw(0);
230
+ }
231
+ };
232
+
233
+ // Keeps the played boundary + seek var current while paused-seeking or when
234
+ // the continuous loop is off (reduced motion). The loop owns drawing while it
235
+ // runs, so skip the redundant paint then.
236
+ const onTime = (): void => {
237
+ setSeekVar();
238
+ if (!anim.rafId) draw(0);
239
+ };
240
+
241
+ const seek = (clientX: number): void => {
242
+ if (!media.duration) return;
243
+ media.currentTime = ratioFromPointer(clientX, canvas.getBoundingClientRect()) * media.duration;
244
+ setSeekVar();
245
+ if (!anim.rafId) draw(0);
246
+ };
247
+ const drag = { active: false };
248
+ const onDown = (e: PointerEvent): void => { drag.active = true; seek(e.clientX); };
249
+ const onMove = (e: PointerEvent): void => { if (drag.active) seek(e.clientX); };
250
+ const onUp = (): void => { drag.active = false; };
251
+
252
+ canvas.addEventListener('pointerdown', onDown);
253
+ globalThis.addEventListener('pointermove', onMove);
254
+ globalThis.addEventListener('pointerup', onUp);
255
+ media.addEventListener('play', onPlay);
256
+ media.addEventListener('pause', onStop);
257
+ media.addEventListener('ended', onStop);
258
+ media.addEventListener('timeupdate', onTime);
259
+ media.addEventListener('loadedmetadata', onTime);
260
+ draw(0);
261
+
262
+ return {
263
+ destroy(): void {
264
+ if (anim.rafId) cancelAnimationFrame(anim.rafId);
265
+ anim.playing = false;
266
+ canvas.removeEventListener('pointerdown', onDown);
267
+ globalThis.removeEventListener('pointermove', onMove);
268
+ globalThis.removeEventListener('pointerup', onUp);
269
+ media.removeEventListener('play', onPlay);
270
+ media.removeEventListener('pause', onStop);
271
+ media.removeEventListener('ended', onStop);
272
+ media.removeEventListener('timeupdate', onTime);
273
+ media.removeEventListener('loadedmetadata', onTime);
274
+ canvas.remove();
275
+ },
276
+ };
277
+ }
@@ -1,8 +1,7 @@
1
- /** Non-image MIME prefixes claimed for paste/drop routing. Image files stay with the Image tool. */
1
+ /** Non-image MIME prefixes claimed for paste/drop routing. Image files stay with the Image tool. Audio files route to the Audio tool. */
2
2
  export const PASTE_MIME_TYPES = [
3
3
  'application/*',
4
4
  'text/*',
5
- 'audio/*',
6
5
  'video/*',
7
6
  'font/*',
8
7
  'model/*',
@@ -13,7 +12,7 @@ export const PASTE_EXTENSIONS = [
13
12
  'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx',
14
13
  'zip', 'rar', '7z', 'gz', 'tar',
15
14
  'csv', 'txt', 'rtf', 'md', 'json',
16
- 'mp3', 'wav', 'ogg', 'mp4', 'mov', 'avi', 'mkv',
15
+ 'mp4', 'mov', 'avi', 'mkv',
17
16
  ] as const;
18
17
 
19
18
  /** Default upload ceiling (bytes) when the consumer does not configure `maxSize`. */
@@ -1,10 +1,5 @@
1
- export const DEFAULT_MIME_TYPES = [
2
- 'image/jpeg',
3
- 'image/png',
4
- 'image/gif',
5
- 'image/webp',
6
- 'image/svg+xml',
7
- ] as const;
1
+ // Accept any image type by default; consumers restrict via the `types` config.
2
+ export const DEFAULT_MIME_TYPES = ['image/*'] as const;
8
3
 
9
4
  export const DEFAULT_MAX_SIZE = 30 * 1024 * 1024; // 30 MiB
10
5
 
@@ -1,5 +1,6 @@
1
1
  import type { ImageConfig } from '../../../types/tools/image';
2
2
  import { resolveMaxSize } from '../../components/utils/max-size';
3
+ import { matchesMime } from '../../components/utils/mime-match';
3
4
  import { DEFAULT_MAX_SIZE, DEFAULT_MIME_TYPES } from './constants';
4
5
  import { ImageError } from './errors';
5
6
 
@@ -90,7 +91,7 @@ export class Uploader {
90
91
  const types = this.config.types ?? [...DEFAULT_MIME_TYPES];
91
92
  const maxSize = resolveMaxSize(this.config.maxSize, file.type, DEFAULT_MAX_SIZE);
92
93
 
93
- if (!types.includes(file.type)) {
94
+ if (!matchesMime(file.type, types)) {
94
95
  throw new ImageError('UNSUPPORTED_TYPE', file.type || 'unknown');
95
96
  }
96
97
  if (file.size > maxSize) {
@@ -33,6 +33,7 @@ export { Quote } from './quote';
33
33
  export { CodeTool as Code } from './code';
34
34
  export { ImageTool as Image } from './image';
35
35
  export { FileTool as File } from './file';
36
+ export { AudioTool as Audio } from './audio';
36
37
  export { VideoTool as Video } from './video';
37
38
  export { ColumnList } from './column-list';
38
39
  export { Column } from './column';
@@ -66,6 +67,7 @@ export const defaultBlockTools = {
66
67
  code: { inlineToolbar: false },
67
68
  image: {},
68
69
  file: {},
70
+ audio: {},
69
71
  video: {},
70
72
  column_list: {},
71
73
  column: {},
@@ -1,8 +1,5 @@
1
- export const DEFAULT_MIME_TYPES = [
2
- 'video/mp4',
3
- 'video/webm',
4
- 'video/ogg',
5
- ] as const;
1
+ // Accept any video type by default; consumers restrict via the `types` config.
2
+ export const DEFAULT_MIME_TYPES = ['video/*'] as const;
6
3
 
7
4
  export const DEFAULT_MAX_SIZE = 100 * 1024 * 1024; // 100 MiB
8
5
 
@@ -1,5 +1,6 @@
1
1
  import type { VideoConfig } from '../../../types/tools/video';
2
2
  import { resolveMaxSize } from '../../components/utils/max-size';
3
+ import { matchesMime } from '../../components/utils/mime-match';
3
4
  import { DEFAULT_MAX_SIZE, DEFAULT_MIME_TYPES } from './constants';
4
5
 
5
6
  export interface UploadResult {
@@ -65,7 +66,7 @@ export class Uploader {
65
66
  const types = this.config.types ?? [...DEFAULT_MIME_TYPES];
66
67
  const maxSize = resolveMaxSize(this.config.maxSize, file.type, DEFAULT_MAX_SIZE);
67
68
 
68
- if (file.type && !types.includes(file.type)) {
69
+ if (file.type && !matchesMime(file.type, types)) {
69
70
  throw new VideoUploadError('UNSUPPORTED_TYPE', file.type);
70
71
  }
71
72
  if (file.size > maxSize) {
@@ -18,3 +18,4 @@ export * from './ui';
18
18
  export * from './tools';
19
19
 
20
20
  export * from './theme';
21
+ export * from './width';
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Editor content width mode.
3
+ *
4
+ * - `'narrow'` — content is constrained to the default `--max-width-content` (the default).
5
+ * - `'full'` — content max-width constraint is removed so it fills its container.
6
+ */
7
+ export type EditorWidth = 'full' | 'narrow';
8
+
9
+ /**
10
+ * Describes Blok's width API for controlling the editor content width mode.
11
+ */
12
+ export interface Width {
13
+ /**
14
+ * Returns the current editor content width mode.
15
+ *
16
+ * @returns {EditorWidth} the active mode (defaults to `'narrow'`)
17
+ */
18
+ get(): EditorWidth;
19
+
20
+ /**
21
+ * Sets the editor content width mode.
22
+ *
23
+ * @param {EditorWidth} value - the mode to apply
24
+ */
25
+ set(value: EditorWidth): void;
26
+
27
+ /**
28
+ * Toggles the editor content width mode between `'narrow'` and `'full'`.
29
+ */
30
+ toggle(): void;
31
+ }
@@ -28,6 +28,7 @@ export const DATA_ATTR: {
28
28
 
29
29
  // Editor Modes
30
30
  readonly rtl: 'data-blok-rtl';
31
+ readonly width: 'data-blok-width';
31
32
 
32
33
  // Drag and Drop
33
34
  readonly dragging: 'data-blok-dragging';
package/types/index.d.ts CHANGED
@@ -33,6 +33,7 @@ import {
33
33
  Theme,
34
34
  ThemeMode,
35
35
  ResolvedTheme,
36
+ Width,
36
37
  } from './api';
37
38
 
38
39
  import { OutputData } from './data-formats';
@@ -129,6 +130,8 @@ export {
129
130
  Theme,
130
131
  ThemeMode,
131
132
  ResolvedTheme,
133
+ Width,
134
+ EditorWidth,
132
135
  } from './api';
133
136
  export {
134
137
  BlockMutationType,
@@ -212,6 +215,7 @@ export class Blok {
212
215
 
213
216
  public blocks: Blocks;
214
217
  public caret: Caret;
218
+ public history: History;
215
219
  public sanitizer: Sanitizer;
216
220
  public saver: Saver;
217
221
  public selection: Selection;
@@ -221,6 +225,7 @@ export class Blok {
221
225
  public tooltip: Tooltip;
222
226
  public readOnly: ReadOnly;
223
227
  public theme: Theme;
228
+ public width: Width;
224
229
  constructor(configuration?: BlokConfig|string);
225
230
 
226
231
  /**
@@ -0,0 +1,40 @@
1
+ import { BlockToolData } from './block-tool-data';
2
+ import { MaxSizeConfig } from './max-size';
3
+
4
+ export type AudioAlignment = 'left' | 'center' | 'right';
5
+
6
+ export interface AudioData extends BlockToolData {
7
+ url: string;
8
+ caption?: string;
9
+ captionVisible?: boolean;
10
+ title?: string;
11
+ artist?: string;
12
+ coverUrl?: string;
13
+ loop?: boolean;
14
+ width?: number;
15
+ alignment?: AudioAlignment;
16
+ fileName?: string;
17
+ mimeType?: string;
18
+ duration?: number;
19
+ peaks?: number[];
20
+ }
21
+
22
+ export interface AudioUploadContext {
23
+ onProgress?(percent: number): void;
24
+ }
25
+
26
+ export interface AudioUploader {
27
+ uploadByFile?(file: File, ctx?: AudioUploadContext): Promise<{ url: string; fileName?: string }>;
28
+ uploadByUrl?(url: string, ctx?: AudioUploadContext): Promise<{ url: string }>;
29
+ }
30
+
31
+ export interface AudioConfig {
32
+ uploader?: AudioUploader;
33
+ /**
34
+ * Accepted MIME types. Entries may be exact (`audio/mpeg`) or family wildcards
35
+ * (`audio/*`). Default: `['audio/*']` — any audio type.
36
+ */
37
+ types?: string[];
38
+ maxSize?: MaxSizeConfig;
39
+ captionPlaceholder?: string;
40
+ }
@@ -78,7 +78,10 @@ export interface ImageUploader {
78
78
  */
79
79
  export interface ImageConfig {
80
80
  uploader?: ImageUploader;
81
- /** Accepted MIME types. Default: image/jpeg, image/png, image/gif, image/webp, image/svg+xml */
81
+ /**
82
+ * Accepted MIME types. Entries may be exact (`image/png`) or family wildcards
83
+ * (`image/*`). Default: `['image/*']` — any image type.
84
+ */
82
85
  types?: string[];
83
86
  /**
84
87
  * Max upload size. A number caps every type (bytes); an object caps per MIME