@saooti/octopus-sdk 42.3.0 → 42.3.1

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 (615) hide show
  1. package/dist/{AdvancedSearch-DEh3iiuK.mjs → AdvancedSearch-BTbYmlMm.mjs} +8 -8
  2. package/dist/AdvancedSearch-C6BJzvGT.mjs.map +1 -0
  3. package/dist/AdvancedSearch-ChnJq71j.mjs.map +1 -0
  4. package/dist/AdvancedSearch-ChtUj3vS.mjs.map +1 -0
  5. package/dist/AdvancedSearch-D-9o5KzI.mjs.map +1 -0
  6. package/dist/AdvancedSearch-DH5YTENK.mjs.map +1 -0
  7. package/dist/AdvancedSearch-DN3WFduh.mjs.map +1 -0
  8. package/dist/AdvancedSearch-EpYd6K3d.mjs.map +1 -0
  9. package/dist/AdvancedSearch-PRJyRSID.mjs.map +1 -0
  10. package/dist/AdvancedSearch-_E2nwQ-A.mjs.map +1 -0
  11. package/dist/AdvancedSearch-cLjakm-6.mjs.map +1 -0
  12. package/dist/AdvancedSearch-k-fQfSBk.mjs.map +1 -0
  13. package/dist/AdvancedSearch-zFJq-WlO.mjs.map +1 -0
  14. package/dist/CategoryChooser-CSUjIA0D.mjs.map +1 -0
  15. package/dist/{CategoryChooser-CeF4n-nw.mjs → CategoryChooser-fAUMJNHu.mjs} +1 -1
  16. package/dist/CategoryFilter-B0S_nCvS.mjs.map +1 -0
  17. package/dist/CategoryFilter-BVrLO_pV.mjs.map +1 -0
  18. package/dist/{CategoryFilter-Djmal5bY.mjs → CategoryFilter-CsYCvEnz.mjs} +3 -3
  19. package/dist/CategoryFilter-DVwCpHLx.mjs.map +1 -0
  20. package/dist/CategoryList-B_9GG6Z9.mjs.map +1 -0
  21. package/dist/{CategoryList-Dksp79Lm.mjs → CategoryList-CDoIfrDw.mjs} +2 -2
  22. package/dist/CategoryList-CUae_phb.mjs.map +1 -0
  23. package/dist/CategoryList-DxR0fpKd.mjs.map +1 -0
  24. package/dist/CategoryPage-C7aKDtgs.mjs.map +1 -0
  25. package/dist/{CategoryPage-DC8fMny_.mjs → CategoryPage-Cl5Yuxnu.mjs} +2 -2
  26. package/dist/CategoryPage-DlnAp05t.mjs.map +1 -0
  27. package/dist/CategoryPage-Dlq5XQBS.mjs.map +1 -0
  28. package/dist/{CategorySearchFilter-KVYBscdd.mjs → CategorySearchFilter-Cce5zxZB.mjs} +1 -1
  29. package/dist/CategorySearchFilter-EULpSE2e.mjs.map +1 -0
  30. package/dist/ChapteringModal-BplEGZj2.mjs.map +1 -0
  31. package/dist/ChapteringModal-C9yuW_IU.mjs.map +1 -0
  32. package/dist/{ChapteringModal-Be9FF1yz.mjs → ChapteringModal-DiiVSG7s.mjs} +1 -1
  33. package/dist/{CheckIdentityModal-nMszYOsW.mjs → CheckIdentityModal-BrnYeGdk.mjs} +3 -3
  34. package/dist/CheckIdentityModal-BtGdsv2v.mjs.map +1 -0
  35. package/dist/CheckIdentityModal-CpRO7ehH.mjs.map +1 -0
  36. package/dist/CheckIdentityModal-Cry9ra4J.mjs.map +1 -0
  37. package/dist/ClassicDatePicker--q1yYb-S.mjs.map +1 -0
  38. package/dist/ClassicDatePicker-4ouU5ov9.mjs.map +1 -0
  39. package/dist/ClassicDatePicker-B8bI9QfF.mjs.map +1 -0
  40. package/dist/ClassicDatePicker-BTJWityQ.mjs +186 -0
  41. package/dist/ClassicDatePicker-CChR9LBd.mjs.map +1 -0
  42. package/dist/ClassicDatePicker-CopJVkF0.mjs.map +1 -0
  43. package/dist/ClassicDatePicker-DgcJCevR.mjs.map +1 -0
  44. package/dist/ClassicDatePicker-NxGNQxHE.mjs.map +1 -0
  45. package/dist/ClassicDatePicker-dgdGXcRk.mjs.map +1 -0
  46. package/dist/{ClassicEmojiPicker-B4TAlZvo.mjs → ClassicEmojiPicker-C0gm-DA2.mjs} +1 -1
  47. package/dist/ClassicEmojiPicker-CJZD8H7L.mjs.map +1 -0
  48. package/dist/{ClassicHelpButton-DT7T8tMe.mjs → ClassicHelpButton-BnRLmYuh.mjs} +1 -1
  49. package/dist/ClassicHelpButton-Qb4AwvWI.mjs.map +1 -0
  50. package/dist/{ClassicInputText-DJ5kURGM.mjs → ClassicInputText-YsntJkHk.mjs} +1 -1
  51. package/dist/ClassicInputText-npkVSUoH.mjs.map +1 -0
  52. package/dist/ClassicMultiselect-2I2K-o4R.mjs.map +1 -0
  53. package/dist/{ClassicMultiselect-CDHdJjjV.mjs → ClassicMultiselect-C0yzVQ8Y.mjs} +1 -1
  54. package/dist/{ClassicNotifications-DEpVRRHg.mjs → ClassicNotifications-8CVfGSqL.mjs} +1 -1
  55. package/dist/ClassicNotifications-BFQ-R6kO.mjs.map +1 -0
  56. package/dist/ClassicNotifications-DR0PM1Xp.mjs.map +1 -0
  57. package/dist/{ClassicPopover-DWR50Nxi.mjs → ClassicPopover-BUb-1WMB.mjs} +1 -1
  58. package/dist/ClassicPopover-BhMY2SMo.mjs.map +1 -0
  59. package/dist/ClipboardModal-B_SZ6jDk.mjs.map +1 -0
  60. package/dist/{ClipboardModal-BUKwZYOf.mjs → ClipboardModal-ByVXPcKD.mjs} +1 -1
  61. package/dist/ClipboardModal-DjrZQRtY.mjs.map +1 -0
  62. package/dist/{CommentInput-US8ZtNj1.mjs → CommentInput-CrRstzua.mjs} +4 -4
  63. package/dist/CommentInput-DPMj47uE.mjs.map +1 -0
  64. package/dist/CommentInput-DbhOyi7c.mjs.map +1 -0
  65. package/dist/CommentInput-I97yysBW.mjs.map +1 -0
  66. package/dist/CommentItem-AItzrTBi.mjs.map +1 -0
  67. package/dist/CommentItem-B7vvJwZI.mjs.map +1 -0
  68. package/dist/{CommentItem-CqWZPmbj.mjs → CommentItem-BYU67TIu.mjs} +4 -4
  69. package/dist/CommentItem-CvNbH7Hf.mjs.map +1 -0
  70. package/dist/CommentList-BTyyCcX4.mjs.map +1 -0
  71. package/dist/CommentList-CWrf45Di.mjs.map +1 -0
  72. package/dist/CommentList-DP6wk4PD.mjs.map +1 -0
  73. package/dist/{CommentList-CSYpqgNM.mjs → CommentList-snIIudVC.mjs} +2 -2
  74. package/dist/CommentMoreActions-BNajG7wk.mjs.map +1 -0
  75. package/dist/CommentMoreActions-C1l4Y_HY.mjs.map +1 -0
  76. package/dist/CommentMoreActions-DPbJnEEV.mjs.map +1 -0
  77. package/dist/{CommentMoreActions-T5RN6BGq.mjs → CommentMoreActions-y202UxL5.mjs} +3 -3
  78. package/dist/{CommentName-DslRo9jg.mjs → CommentName-CHBlEM7I.mjs} +3 -3
  79. package/dist/CommentName-D5HN8bGE.mjs.map +1 -0
  80. package/dist/CommentName-DMom_kwo.mjs.map +1 -0
  81. package/dist/CommentName-OJrxjSxu.mjs.map +1 -0
  82. package/dist/CommentParentInfo-DWVF5Ewh.mjs.map +1 -0
  83. package/dist/CommentParentInfo-Do3IlO95.mjs.map +1 -0
  84. package/dist/{CommentParentInfo-DMX3nkCb.mjs → CommentParentInfo-DoEeaQGU.mjs} +2 -2
  85. package/dist/CommentParentInfo-DqHfDpKs.mjs.map +1 -0
  86. package/dist/{CommentPlayer-D3JEVPKX.mjs → CommentPlayer-B4MXG-gG.mjs} +2 -2
  87. package/dist/CommentPlayer-B67saxPf.mjs.map +1 -0
  88. package/dist/CommentPlayer-BUtEvkoV.mjs.map +1 -0
  89. package/dist/CommentSection-BIZMRePu.mjs.map +1 -0
  90. package/dist/CommentSection-CSehg6MD.mjs.map +1 -0
  91. package/dist/{CommentSection-Brn0VQcc.mjs → CommentSection-DZf04NxT.mjs} +3 -3
  92. package/dist/CommentSection-MDKioQWf.mjs.map +1 -0
  93. package/dist/CommentStore-BBm8MjxW.mjs.map +1 -0
  94. package/dist/{CommentStore-hPTYaDGr.mjs → CommentStore-CysGkBHp.mjs} +8 -8
  95. package/dist/CommentStore-F5MVSrDw.mjs.map +1 -0
  96. package/dist/ContractPreviewModal-CFSkXgB4.mjs.map +1 -0
  97. package/dist/ContractPreviewModal-CKL6Rb_V.mjs.map +1 -0
  98. package/dist/{ContractPreviewModal-48Je4Wuy.mjs → ContractPreviewModal-Dd-1KasR.mjs} +2 -2
  99. package/dist/DateFilter-BwYSwGc-.mjs.map +1 -0
  100. package/dist/DateFilter-CGTz76bp.mjs.map +1 -0
  101. package/dist/DateFilter-CfeYepTO.mjs.map +1 -0
  102. package/dist/{DateFilter-DztHuPm8.mjs → DateFilter-Cnb_S8Up.mjs} +1 -1
  103. package/dist/DateFilter-DFw66D2V.mjs.map +1 -0
  104. package/dist/DateFilter-DMOUMeCh.mjs.map +1 -0
  105. package/dist/DateFilter-DdbvVu9Q.mjs.map +1 -0
  106. package/dist/DateFilter-Dr1nRuvZ.mjs.map +1 -0
  107. package/dist/DateFilter-QGaXHkcu.mjs.map +1 -0
  108. package/dist/{DownloadPodcastButton-BYWuLoNg.mjs → DownloadPodcastButton-6HtR84aE.mjs} +2 -2
  109. package/dist/DownloadPodcastButton-D2qeKDPT.mjs.map +1 -0
  110. package/dist/DownloadPodcastButton-Tr_Y4qMu.mjs.map +1 -0
  111. package/dist/{EditCommentModal-DacFxzLx.mjs → EditCommentModal-BQ03B6LC.mjs} +2 -2
  112. package/dist/EditCommentModal-BZitN0Ir.mjs.map +1 -0
  113. package/dist/EditCommentModal-CcmCx_My.mjs.map +1 -0
  114. package/dist/EditCommentModal-sj0yXd7-.mjs.map +1 -0
  115. package/dist/EmissionGroupChooser--428fdeK.mjs.map +1 -0
  116. package/dist/EmissionGroupChooser-BJCKekKM.mjs.map +1 -0
  117. package/dist/EmissionGroupChooser-ByqGmsGw.mjs.map +1 -0
  118. package/dist/EmissionGroupChooser-Cb3CF0uc.mjs.map +1 -0
  119. package/dist/EmissionGroupChooser-D4vMQH8g.mjs.map +1 -0
  120. package/dist/{EmissionGroupChooser-KmzQjp7d.mjs → EmissionGroupChooser-De_IpEhW.mjs} +2 -2
  121. package/dist/EmissionInlineList-CdHQBjfR.mjs.map +1 -0
  122. package/dist/EmissionInlineList-CnA0d_k2.mjs.map +1 -0
  123. package/dist/EmissionInlineList-DLUvPBNl.mjs.map +1 -0
  124. package/dist/{EmissionInlineList-BoEIAbLu.mjs → EmissionInlineList-dlb4gUOP.mjs} +5 -5
  125. package/dist/EmissionItem-B39oFnXF.mjs.map +1 -0
  126. package/dist/EmissionItem-BkPLFhAo.mjs.map +1 -0
  127. package/dist/EmissionItem-CjAUdLb7.mjs.map +1 -0
  128. package/dist/{EmissionItem-BeQWw-UT.mjs → EmissionItem-Dm_IGNkw.mjs} +4 -4
  129. package/dist/EmissionList-B0UntYdC.mjs.map +1 -0
  130. package/dist/EmissionList-BQSI4xbi.mjs.map +1 -0
  131. package/dist/{EmissionList-DB7O1nj5.mjs → EmissionList-C4JEYLyK.mjs} +4 -4
  132. package/dist/EmissionList-C7lQBdlW.mjs.map +1 -0
  133. package/dist/EmissionPage-BF6s2ySo.mjs.map +1 -0
  134. package/dist/EmissionPage-B_-nDP5x.mjs.map +1 -0
  135. package/dist/EmissionPage-C-ESprrZ.mjs.map +1 -0
  136. package/dist/{EmissionPage-CNYJ1Puo.mjs → EmissionPage-C4XUdzzm.mjs} +10 -10
  137. package/dist/EmissionPage-CPXcNHGS.mjs.map +1 -0
  138. package/dist/EmissionPage-EMgXCVhK.mjs.map +1 -0
  139. package/dist/EmissionPage-mXbUqOh9.mjs.map +1 -0
  140. package/dist/{EmissionPlayerItem-S_yqupad.mjs → EmissionPlayerItem-BLIdolRe.mjs} +3 -3
  141. package/dist/EmissionPlayerItem-C27zJBhY.mjs.map +1 -0
  142. package/dist/EmissionPlayerItem-C3fkgEaL.mjs.map +1 -0
  143. package/dist/EmissionPlayerItem-DxXG20G1.mjs.map +1 -0
  144. package/dist/EmissionPresentationItem-BNnDSWGQ.mjs.map +1 -0
  145. package/dist/EmissionPresentationItem-BeETY65I.mjs.map +1 -0
  146. package/dist/{EmissionPresentationItem-kJgKN7Ju.mjs → EmissionPresentationItem-DYDwfqwp.mjs} +1 -1
  147. package/dist/EmissionPresentationList-BD7rIUok.mjs.map +1 -0
  148. package/dist/EmissionPresentationList-CGMyY_iu.mjs.map +1 -0
  149. package/dist/{EmissionPresentationList-Bg9X3CJP.mjs → EmissionPresentationList-Cxi7QnIs.mjs} +3 -3
  150. package/dist/EmissionsPage-4To0aRBA.mjs.map +1 -0
  151. package/dist/{EmissionsPage-BLpGH_PR.mjs → EmissionsPage-B0bXLncg.mjs} +5 -5
  152. package/dist/EmissionsPage-BIspB5uq.mjs.map +1 -0
  153. package/dist/EmissionsPage-BhUjdpEu.mjs.map +1 -0
  154. package/dist/EmissionsPage-Bn1R_ipo.mjs.map +1 -0
  155. package/dist/EmissionsPage-CNXwdJuV.mjs.map +1 -0
  156. package/dist/EmissionsPage-CPmhIbFf.mjs.map +1 -0
  157. package/dist/EmissionsPage-Cgzvn2h8.mjs.map +1 -0
  158. package/dist/EmissionsPage-D09zTpGb.mjs.map +1 -0
  159. package/dist/EmissionsPage-Dl7qaQT1.mjs.map +1 -0
  160. package/dist/EmissionsPage-DyleZtu_.mjs.map +1 -0
  161. package/dist/EmissionsPage-OVpc7k1Z.mjs.map +1 -0
  162. package/dist/EmissionsPage-wjKBLFM6.mjs.map +1 -0
  163. package/dist/Error403Page-B6Q7ijY3.mjs.map +1 -0
  164. package/dist/Error403Page-DF08mgCL.mjs.map +1 -0
  165. package/dist/{Error403Page-BB69doEn.mjs → Error403Page-DVmC5AOd.mjs} +2 -2
  166. package/dist/FooterGarSection-BWahCyz0.mjs.map +1 -0
  167. package/dist/{FooterGarSection-B9nsnpfF.mjs → FooterGarSection-BqPggI3o.mjs} +3 -3
  168. package/dist/FooterGarSection-CN8ZfO7e.mjs.map +1 -0
  169. package/dist/FooterSection-BOjr1LRb.mjs.map +1 -0
  170. package/dist/{FooterSection-DdGtlbk-.mjs → FooterSection-C5FEIJlU.mjs} +11 -11
  171. package/dist/FooterSection-nVRzKSYN.mjs.map +1 -0
  172. package/dist/HomeDropdown-3fl_xltN.mjs.map +1 -0
  173. package/dist/HomeDropdown-DGNkJhG2.mjs.map +1 -0
  174. package/dist/{HomeDropdown-BqwwLStt.mjs → HomeDropdown-Fx6kQAuH.mjs} +3 -3
  175. package/dist/HomeDropdown-PvmOUzYb.mjs.map +1 -0
  176. package/dist/{HomePage-JOUAKKfP.mjs → HomePage-7PT7HmHs.mjs} +3 -3
  177. package/dist/HomePage-D0Pbu_h1.mjs.map +1 -0
  178. package/dist/HomePage-D6_D1f33.mjs.map +1 -0
  179. package/dist/HomePage-ry0NfX1M.mjs.map +1 -0
  180. package/dist/InlineRubriqueList-BdpS1pVc.mjs.map +1 -0
  181. package/dist/InlineRubriqueList-BlcjQ4wR.mjs.map +1 -0
  182. package/dist/{InlineRubriqueList-BzcHKvM4.mjs → InlineRubriqueList-ezgexR-O.mjs} +1 -1
  183. package/dist/{LikeSection-MmbHMunb.mjs → LikeSection-CGu4yOCr.mjs} +3 -3
  184. package/dist/LikeSection-Cqj4y7qZ.mjs.map +1 -0
  185. package/dist/LikeSection-D95IMsZE.mjs.map +1 -0
  186. package/dist/LikeSection-HJla-zgI.mjs.map +1 -0
  187. package/dist/{ListPaginate-5uRK_QKJ.mjs → ListPaginate-BPdnBcpe.mjs} +2 -2
  188. package/dist/ListPaginate-DYzRnp-2.mjs.map +1 -0
  189. package/dist/ListPaginate-DyR7HLIc.mjs.map +1 -0
  190. package/dist/LiveHorizontalList-Bqe351Ut.mjs.map +1 -0
  191. package/dist/{LiveHorizontalList-CpoIRd4C.mjs → LiveHorizontalList-Bs-Rz5Ws.mjs} +3 -3
  192. package/dist/LiveHorizontalList-CaujYMT3.mjs.map +1 -0
  193. package/dist/LiveHorizontalList-DhsOZPT3.mjs.map +1 -0
  194. package/dist/{LiveList-DYFBrNgg.mjs → LiveList-BVOEnAEc.mjs} +5 -5
  195. package/dist/LiveList-DMB3FxUM.mjs.map +1 -0
  196. package/dist/LiveList-DOi4GV1x.mjs.map +1 -0
  197. package/dist/LiveList-Dh1mJVs7.mjs.map +1 -0
  198. package/dist/LivesPage-BvDLscOE.mjs.map +1 -0
  199. package/dist/{LivesPage-FSkmBdVw.mjs → LivesPage-DG5VY4HF.mjs} +2 -2
  200. package/dist/LivesPage-DmSlg7iH.mjs.map +1 -0
  201. package/dist/LivesPage-yy_5pI8R.mjs.map +1 -0
  202. package/dist/MapPage-3n-rigBK.mjs.map +1 -0
  203. package/dist/MapPage-5GwE8Z4E.mjs.map +1 -0
  204. package/dist/{MapPage-DpBt2gWF.mjs → MapPage-bIe2a9O1.mjs} +2 -2
  205. package/dist/MobileMenu-BSos17v3.mjs.map +1 -0
  206. package/dist/{MobileMenu-CjNMfHUP.mjs → MobileMenu-BZ5nOrYw.mjs} +5 -5
  207. package/dist/MobileMenu-C6W37oJg.mjs.map +1 -0
  208. package/dist/MobileMenu-K0rNwrW1.mjs.map +1 -0
  209. package/dist/NewsletterModal-CFGXBtID.mjs.map +1 -0
  210. package/dist/NewsletterModal-CZNwpCK5.mjs.map +1 -0
  211. package/dist/{NewsletterModal-BurqHTFc.mjs → NewsletterModal-DZk0mSVC.mjs} +1 -1
  212. package/dist/OctopusMultiselect-CFUGyzeM.mjs.map +1 -0
  213. package/dist/OctopusMultiselect-Cn1lqbQo.mjs.map +1 -0
  214. package/dist/OctopusMultiselect-esu8BY0J.mjs.map +1 -0
  215. package/dist/{OctopusMultiselect-C8qljiaH.mjs → OctopusMultiselect-noQPQMZQ.mjs} +7 -5
  216. package/dist/OrganisationChooser-BKfXLT4G.mjs.map +1 -0
  217. package/dist/{OrganisationChooser-Dx-OT7MW.mjs → OrganisationChooser-C48cWqbY.mjs} +3 -3
  218. package/dist/OrganisationChooser-PpO7MD7f.mjs.map +1 -0
  219. package/dist/OrganisationChooser-Y_jO6oXv.mjs.map +1 -0
  220. package/dist/{OrganisationChooserLight-BF5fT5pV.mjs → OrganisationChooserLight-Bcltbv-v.mjs} +1 -1
  221. package/dist/OrganisationChooserLight-Dh7wMH40.mjs.map +1 -0
  222. package/dist/OrganisationChooserLight-Dx_rkvpP.mjs.map +1 -0
  223. package/dist/PageNotFound-DeW-K_hL.mjs.map +1 -0
  224. package/dist/{PageNotFound-Cj-3Gv8T.mjs → PageNotFound-DogaoIFX.mjs} +2 -2
  225. package/dist/PageNotFound-gRuMWYCp.mjs.map +1 -0
  226. package/dist/ParticipantInlineList-CY_s6aJm.mjs.map +1 -0
  227. package/dist/{ParticipantInlineList-DEWqM1Io.mjs → ParticipantInlineList-D9pkOlvP.mjs} +4 -4
  228. package/dist/ParticipantInlineList-DSatB75C.mjs.map +1 -0
  229. package/dist/ParticipantItem-BG7yqRvD.mjs.map +1 -0
  230. package/dist/ParticipantItem-BTK25HID.mjs.map +1 -0
  231. package/dist/{ParticipantItem-BZAUIeSR.mjs → ParticipantItem-CbHOfVon.mjs} +3 -3
  232. package/dist/ParticipantPage-B4VnV8Yc.mjs.map +1 -0
  233. package/dist/ParticipantPage-B6Gzg6ul.mjs.map +1 -0
  234. package/dist/ParticipantPage-CNRNKTtC.mjs.map +1 -0
  235. package/dist/ParticipantPage-CpkhQjN2.mjs.map +1 -0
  236. package/dist/ParticipantPage-D61CCIqy.mjs.map +1 -0
  237. package/dist/ParticipantPage-Dh4JJCmJ.mjs.map +1 -0
  238. package/dist/{ParticipantPage-CzaHoWij.mjs → ParticipantPage-nTp2MbgB.mjs} +6 -6
  239. package/dist/{ParticipantsPage-goxJZQZZ.mjs → ParticipantsPage-Bbz9lQ_0.mjs} +6 -6
  240. package/dist/ParticipantsPage-COaQrVID.mjs.map +1 -0
  241. package/dist/ParticipantsPage-DRVVU7qp.mjs.map +1 -0
  242. package/dist/ParticipantsPage-DhKCWwKE.mjs.map +1 -0
  243. package/dist/{PlayerAnonymousModal-By96BtpA.mjs → PlayerAnonymousModal-B1iZ34O8.mjs} +2 -2
  244. package/dist/PlayerAnonymousModal-CBZStK-L.mjs.map +1 -0
  245. package/dist/PlayerAnonymousModal-Cq6-Dn49.mjs.map +1 -0
  246. package/dist/PlayerAnonymousModal-Cu2GGoAh.mjs.map +1 -0
  247. package/dist/PlayerAnonymousModal-DiXWtNmM.mjs.map +1 -0
  248. package/dist/PlayerAnonymousModal-DrQvDDym.mjs.map +1 -0
  249. package/dist/PlayerCompact-B9oeGx_g.mjs.map +1 -0
  250. package/dist/PlayerCompact-DtMginEc.mjs.map +1 -0
  251. package/dist/PlayerCompact-E8ydrdJ4.mjs.map +1 -0
  252. package/dist/{PlayerCompact-CjU8xxVH.mjs → PlayerCompact-_39FpkWo.mjs} +4 -4
  253. package/dist/PlayerComponent-4Wj5XlrS.mjs.map +1 -0
  254. package/dist/{PlayerComponent-B58O6U6i.mjs → PlayerComponent-B1RsmSf0.mjs} +47 -47
  255. package/dist/PlayerComponent-BGVzhVz9.mjs.map +1 -0
  256. package/dist/PlayerComponent-BIshvul2.mjs.map +1 -0
  257. package/dist/PlayerComponent-BO7wUL2M.mjs.map +1 -0
  258. package/dist/PlayerComponent-C222I0kT.mjs.map +1 -0
  259. package/dist/PlayerComponent-CjNZNKKz.mjs.map +1 -0
  260. package/dist/PlayerComponent-UG_c6_yr.mjs.map +1 -0
  261. package/dist/{PlayerLarge-CWL5SDzD.mjs → PlayerLarge-BxdyYLOt.mjs} +5 -5
  262. package/dist/PlayerLarge-CPUAoR9q.mjs.map +1 -0
  263. package/dist/PlayerLarge-DP7RsA83.mjs.map +1 -0
  264. package/dist/PlayerLarge-DpiFO7gk.mjs.map +1 -0
  265. package/dist/PlayerLarge-Dwtmu4gz.mjs.map +1 -0
  266. package/dist/PlayerLarge-HvRHSw4j.mjs.map +1 -0
  267. package/dist/PlayerLarge-X5uYCbyS.mjs.map +1 -0
  268. package/dist/PlayerLarge-qwr3iWSX.mjs.map +1 -0
  269. package/dist/{PlayerPlayButton-DmvV2YDi.mjs → PlayerPlayButton-BIsfgj0d.mjs} +4 -4
  270. package/dist/PlayerPlayButton-BQ4zJOrE.mjs.map +1 -0
  271. package/dist/PlayerPlayButton-kh4ZCdWh.mjs.map +1 -0
  272. package/dist/PlayerProgressBar-C-I3dk3l.mjs.map +1 -0
  273. package/dist/PlayerProgressBar-Dr-aFk7O.mjs.map +1 -0
  274. package/dist/{PlayerProgressBar-Cl_mF4nD.mjs → PlayerProgressBar-dSschgez.mjs} +2 -2
  275. package/dist/PlayerProgressBar-xc1ZFPJY.mjs.map +1 -0
  276. package/dist/PlayerStore-Aq_ukXXS.mjs.map +1 -0
  277. package/dist/PlayerStore-C_QCHbT3.mjs.map +1 -0
  278. package/dist/{PlayerStore-CKprkxa0.mjs → PlayerStore-DggKki80.mjs} +1 -1
  279. package/dist/PlayerVideo-BNfhaNUn.mjs.map +1 -0
  280. package/dist/{PlayerVideo-CVUU7nHT.mjs → PlayerVideo-BWyvKlJT.mjs} +3 -3
  281. package/dist/PlayerVideo-Bhok6qYS.mjs.map +1 -0
  282. package/dist/PlayerVideo-CN609whx.mjs.map +1 -0
  283. package/dist/PlayerVideo-DXG_PsWA.mjs.map +1 -0
  284. package/dist/PlayerVideo-DzUapxuZ.mjs.map +1 -0
  285. package/dist/PlayerVideoDigiteka-B1rRVLzy.mjs.map +1 -0
  286. package/dist/PlayerVideoDigiteka-B6qODy7b.mjs.map +1 -0
  287. package/dist/{PlayerVideoDigiteka-DZIqqN8a.mjs → PlayerVideoDigiteka-Dxx63XHI.mjs} +2 -2
  288. package/dist/PlayerVideoHls-BoAbvi2b.mjs.map +1 -0
  289. package/dist/PlayerVideoHls-BsHaaJB-.mjs.map +1 -0
  290. package/dist/PlayerVideoHls-C0ddorEn.mjs.map +1 -0
  291. package/dist/PlayerVideoHls-DBODDRmV.mjs.map +1 -0
  292. package/dist/PlayerVideoHls-DVNHm_O2.mjs.map +1 -0
  293. package/dist/{PlayerVideoHls-BirHOkZD.mjs → PlayerVideoHls-DzbyXZsQ.mjs} +9 -7
  294. package/dist/{PlaylistPage-DljbABur.mjs → PlaylistPage-BdbqXFwR.mjs} +35 -35
  295. package/dist/PlaylistPage-BgUaPJet.mjs.map +1 -0
  296. package/dist/PlaylistPage-BwF2VdGb.mjs.map +1 -0
  297. package/dist/PlaylistPage-CINwx3zE.mjs.map +1 -0
  298. package/dist/PlaylistPage-CPB647jC.mjs.map +1 -0
  299. package/dist/PlaylistPage-DDzE5GQs.mjs.map +1 -0
  300. package/dist/PlaylistPage-bm1nWKMg.mjs.map +1 -0
  301. package/dist/PlaylistsPage-BwkVSYIp.mjs.map +1 -0
  302. package/dist/PlaylistsPage-C62NUvz4.mjs.map +1 -0
  303. package/dist/{PlaylistsPage-BSW-uPWF.mjs → PlaylistsPage-D08i24b2.mjs} +13 -13
  304. package/dist/PlaylistsPage-Dvh77ql6.mjs.map +1 -0
  305. package/dist/PodcastFilterList-BBhzOM64.mjs.map +1 -0
  306. package/dist/PodcastFilterList-BKBjd36i.mjs.map +1 -0
  307. package/dist/{PodcastFilterList-YM90eN60.mjs → PodcastFilterList-CL5ebQ69.mjs} +3 -3
  308. package/dist/PodcastFilterList-D9NTYS1v.mjs.map +1 -0
  309. package/dist/{PodcastImage-BtiQlrb3.mjs → PodcastImage-BFA22TgZ.mjs} +6 -6
  310. package/dist/PodcastImage-BhQKB5te.mjs.map +1 -0
  311. package/dist/PodcastImage-CHx3bUzt.mjs.map +1 -0
  312. package/dist/PodcastInlineList-CcNd_Hbs.mjs.map +1 -0
  313. package/dist/{PodcastInlineList-B32BSFqN.mjs → PodcastInlineList-H6BxXx0A.mjs} +1 -1
  314. package/dist/PodcastInlineList-akLivgog.mjs.map +1 -0
  315. package/dist/PodcastInlineList-jI2EvXSo.mjs.map +1 -0
  316. package/dist/{PodcastInlineListTemplate-DTrS1UiG.mjs → PodcastInlineListTemplate-Chbi8aME.mjs} +3 -3
  317. package/dist/PodcastInlineListTemplate-DT9ZRs61.mjs.map +1 -0
  318. package/dist/PodcastInlineListTemplate-Dh1xF6xT.mjs.map +1 -0
  319. package/dist/PodcastIsPlaying-C0jcpBQd.mjs.map +1 -0
  320. package/dist/PodcastIsPlaying-H6P1CHAI.mjs.map +1 -0
  321. package/dist/{PodcastIsPlaying-BtmHnQi9.mjs → PodcastIsPlaying-ugHcefCy.mjs} +1 -1
  322. package/dist/{PodcastItem-TdtzApJ6.mjs → PodcastItem-Baki7W0q.mjs} +6 -6
  323. package/dist/PodcastItem-BfvK4ion.mjs.map +1 -0
  324. package/dist/PodcastItem-DEhA78z9.mjs.map +1 -0
  325. package/dist/PodcastItem-DwK_Yu1G.mjs.map +1 -0
  326. package/dist/PodcastList-B4ic6Cij.mjs.map +1 -0
  327. package/dist/PodcastList-C2R92m6S.mjs.map +1 -0
  328. package/dist/PodcastList-DWl6zz_z.mjs.map +1 -0
  329. package/dist/PodcastList-Dbt4nmKg.mjs.map +1 -0
  330. package/dist/PodcastList-KaQBRbR9.mjs.map +1 -0
  331. package/dist/{PodcastList-BAOJhQ7G.mjs → PodcastList-N_XOE-hI.mjs} +5 -5
  332. package/dist/PodcastList-d3SGLPvF.mjs.map +1 -0
  333. package/dist/{PodcastList-Bbe3yWiu.mjs → PodcastList-yjd_exFg.mjs} +4 -4
  334. package/dist/PodcastPage-B0pbZ5o_.mjs.map +1 -0
  335. package/dist/PodcastPage-BOA44Us4.mjs.map +1 -0
  336. package/dist/PodcastPage-Bs1wz-0E.mjs.map +1 -0
  337. package/dist/PodcastPage-C37Wa-qH.mjs.map +1 -0
  338. package/dist/PodcastPage-D0HYJxaK.mjs.map +1 -0
  339. package/dist/PodcastPage-D0U6-etV.mjs.map +1 -0
  340. package/dist/PodcastPage-DwMPY4po.mjs.map +1 -0
  341. package/dist/{PodcastPage-CAxub2do.mjs → PodcastPage-SUEm-Enm.mjs} +26 -26
  342. package/dist/PodcastPlayBar-Bo-W_dSK.mjs.map +1 -0
  343. package/dist/PodcastPlayBar-CBtMWlVc.mjs.map +1 -0
  344. package/dist/{PodcastPlayBar-gAEttclo.mjs → PodcastPlayBar-COU17bnm.mjs} +3 -3
  345. package/dist/PodcastPlayBar-Cpr3Ff7J.mjs.map +1 -0
  346. package/dist/PodcastPlayBasicButton-BvJPrxpI.mjs.map +1 -0
  347. package/dist/PodcastPlayBasicButton-CS5TNlmX.mjs.map +1 -0
  348. package/dist/{PodcastPlayBasicButton-7w91y2ow.mjs → PodcastPlayBasicButton-CVXhEUHB.mjs} +1 -1
  349. package/dist/{PodcastPlayButton-CQY0d6f-.mjs → PodcastPlayButton--gjzxW0o.mjs} +3 -3
  350. package/dist/PodcastPlayButton-BqvE4ZUl.mjs.map +1 -0
  351. package/dist/PodcastPlayButton-DW5Feest.mjs.map +1 -0
  352. package/dist/PodcastPlaylistInlineList-BV31HaB2.mjs.map +1 -0
  353. package/dist/PodcastPlaylistInlineList-C-WYs6aE.mjs.map +1 -0
  354. package/dist/{PodcastPlaylistInlineList-BE5L8pSP.mjs → PodcastPlaylistInlineList-DsEHaYGZ.mjs} +7 -7
  355. package/dist/PodcastPlaylistInlineList-HEdFAq1l.mjs.map +1 -0
  356. package/dist/{PodcastPresentationList-DH6Rq0Z4.mjs → PodcastPresentationList-B9vORr36.mjs} +4 -4
  357. package/dist/PodcastPresentationList-ChqvdXY0.mjs.map +1 -0
  358. package/dist/PodcastPresentationList-Dit6HvJr.mjs.map +1 -0
  359. package/dist/{PodcastProgressBar-DoeG7lDj.mjs → PodcastProgressBar-B0FwZOTT.mjs} +3 -3
  360. package/dist/PodcastProgressBar-B8ONWq-Z.mjs.map +1 -0
  361. package/dist/PodcastProgressBar-BoGtJPAa.mjs.map +1 -0
  362. package/dist/PodcastProgressBar-DTRhKzW-.mjs.map +1 -0
  363. package/dist/{PodcastRawTranscript-Cktqtbcg.mjs → PodcastRawTranscript-BiuftXu-.mjs} +2 -2
  364. package/dist/PodcastRawTranscript-C8SJcaQE.mjs.map +1 -0
  365. package/dist/PodcastRawTranscript-nfzHM0k_.mjs.map +1 -0
  366. package/dist/PodcastRawTranscript-r5pRtZDg.mjs.map +1 -0
  367. package/dist/{PodcastSwiperList-DZ26-8xy.mjs → PodcastSwiperList-BKOYhrsH.mjs} +4 -4
  368. package/dist/PodcastSwiperList-Bsg0q89o.mjs.map +1 -0
  369. package/dist/PodcastSwiperList-BxsEv7_8.mjs.map +1 -0
  370. package/dist/PodcastSwiperList-Cju5VHcH.mjs.map +1 -0
  371. package/dist/PodcastmakerHeader-6fIwE70J.mjs.map +1 -0
  372. package/dist/PodcastmakerHeader-BBPEy__r.mjs.map +1 -0
  373. package/dist/{PodcastmakerHeader-MhdOrssb.mjs → PodcastmakerHeader-CIoJwm1L.mjs} +1 -1
  374. package/dist/PodcastsPage-967SI8kL.mjs.map +1 -0
  375. package/dist/{PodcastsPage-BXjTDNhn.mjs → PodcastsPage-B5NwPMyn.mjs} +5 -5
  376. package/dist/PodcastsPage-B7j2XxPZ.mjs.map +1 -0
  377. package/dist/PodcastsPage-BOzszXpc.mjs.map +1 -0
  378. package/dist/PodcastsPage-Bw0tzWoX.mjs.map +1 -0
  379. package/dist/PodcastsPage-D3TAYJV8.mjs.map +1 -0
  380. package/dist/PodcastsPage-DJsgHs7V.mjs.map +1 -0
  381. package/dist/PodcastsPage-DKWHzNNA.mjs.map +1 -0
  382. package/dist/PodcastsPage-DONqoMkB.mjs.map +1 -0
  383. package/dist/PodcastsPage-DUcfPeLD.mjs.map +1 -0
  384. package/dist/PodcastsPage-DWBgwD6o.mjs.map +1 -0
  385. package/dist/PodcastsPage-DZO4H1Ff.mjs.map +1 -0
  386. package/dist/PodcastsPage-DhEMPqCT.mjs.map +1 -0
  387. package/dist/ProductorSearch-BgmV_RCq.mjs.map +1 -0
  388. package/dist/{ProductorSearch-Z36zTZK4.mjs → ProductorSearch-BiUEs7mG.mjs} +3 -3
  389. package/dist/ProductorSearch-C4Nv2HzS.mjs.map +1 -0
  390. package/dist/ProductorSearch-DtVe_rU9.mjs.map +1 -0
  391. package/dist/ProgressBar-BMeSiueh.mjs.map +1 -0
  392. package/dist/ProgressBar-C15ih0uL.mjs.map +1 -0
  393. package/dist/{ProgressBar-CTOa-MDz.mjs → ProgressBar-CXB5q3-H.mjs} +2 -2
  394. package/dist/ProgressBar-DAUOWol1.mjs.map +1 -0
  395. package/dist/QrCode-BYLxjhwi.mjs.map +1 -0
  396. package/dist/QrCode-CCigeTaZ.mjs +109 -0
  397. package/dist/QrCode-CaXoOjo-.mjs.map +1 -0
  398. package/dist/QrCode-CcQR60hB.mjs.map +1 -0
  399. package/dist/QrCode-S_eLVZoz.mjs.map +1 -0
  400. package/dist/QrCode-XZMMiaX5.mjs.map +1 -0
  401. package/dist/QrCodeModal-BJOu1pAV.mjs.map +1 -0
  402. package/dist/QrCodeModal-BjT-0P0w.mjs.map +1 -0
  403. package/dist/QrCodeModal-BrabSTzq.mjs.map +1 -0
  404. package/dist/QrCodeModal-CjvbRYLW.mjs.map +1 -0
  405. package/dist/{QrCodeModal-DE3juCsN.mjs → QrCodeModal-Dpw_tCQ6.mjs} +1 -1
  406. package/dist/QrCodeModal-N2fjbP4S.mjs.map +1 -0
  407. package/dist/RadioCurrently-B_b8DV2w.mjs.map +1 -0
  408. package/dist/RadioCurrently-DufvDqm1.mjs.map +1 -0
  409. package/dist/{RadioCurrently-BlAhcc9E.mjs → RadioCurrently-ysRKhxKU.mjs} +3 -3
  410. package/dist/RadioHistory-B03bYMxm.mjs.map +1 -0
  411. package/dist/{RadioHistory-C7S79sZD.mjs → RadioHistory-DjsqvRgH.mjs} +2 -2
  412. package/dist/RadioHistory-Dv4gt9TM.mjs.map +1 -0
  413. package/dist/RadioImage-BFdiGgi_.mjs.map +1 -0
  414. package/dist/{RadioImage-BTn2Lquc.mjs → RadioImage-CSseYIVb.mjs} +4 -4
  415. package/dist/RadioImage-CrtD33dM.mjs.map +1 -0
  416. package/dist/RadioList--f7RDhHJ.mjs.map +1 -0
  417. package/dist/{RadioList-BD3zNwmk.mjs → RadioList-BZFFAobk.mjs} +4 -4
  418. package/dist/RadioList-De9NQ23Q.mjs.map +1 -0
  419. package/dist/RadioPage-BK1N--Kr.mjs.map +1 -0
  420. package/dist/RadioPage-BTtNFJI2.mjs.map +1 -0
  421. package/dist/RadioPage-CcK0y_5s.mjs.map +1 -0
  422. package/dist/RadioPage-Cqas0JX6.mjs.map +1 -0
  423. package/dist/{RadioPage-Bv3oupa1.mjs → RadioPage-Cwooj0wF.mjs} +4 -4
  424. package/dist/RadioPage-DhSB0sX5.mjs.map +1 -0
  425. package/dist/RadioPage-DlahFXYC.mjs.map +1 -0
  426. package/dist/RadioPlanning-BU1E8i4t.mjs.map +1 -0
  427. package/dist/{RadioPlanning-nkv_Mb_t.mjs → RadioPlanning-BmIxuUBI.mjs} +2 -2
  428. package/dist/RadioPlanning-Bx-N-xqX.mjs.map +1 -0
  429. package/dist/RadioProgressBar-0XM3ZTGU.mjs.map +1 -0
  430. package/dist/{RadioProgressBar-B2EgCOrK.mjs → RadioProgressBar-CQRGuPpC.mjs} +1 -1
  431. package/dist/RadioProgressBar-oyeS56mV.mjs.map +1 -0
  432. package/dist/{RecaptchaModal-w-9MlZ45.mjs → RecaptchaModal-BdW4xNlX.mjs} +1 -1
  433. package/dist/RecaptchaModal-DFlFQcHs.mjs.map +1 -0
  434. package/dist/RecaptchaModal-iLQ4UYOL.mjs.map +1 -0
  435. package/dist/ReportAbuseModal-BaPt2DLK.mjs.map +1 -0
  436. package/dist/ReportAbuseModal-BdZRe29L.mjs.map +1 -0
  437. package/dist/ReportAbuseModal-CH7Y153n.mjs.map +1 -0
  438. package/dist/{ReportAbuseModal-O1K7j7NV.mjs → ReportAbuseModal-jjGeXbB9.mjs} +4 -4
  439. package/dist/RightsIndicator-4pUsBq5j.mjs.map +1 -0
  440. package/dist/RightsIndicator-BH3jm_1O.mjs.map +1 -0
  441. package/dist/{RightsIndicator-D0cSu8j2.mjs → RightsIndicator-CPzWpH5Z.mjs} +1 -1
  442. package/dist/RightsIndicator-d8ffUFIj.mjs.map +1 -0
  443. package/dist/{RightsWrapper-BUj_1bwR.mjs → RightsWrapper-BTQ8GGUi.mjs} +5 -5
  444. package/dist/RightsWrapper-C3BRHqqo.mjs.map +1 -0
  445. package/dist/RightsWrapper-DJG9Ds6c.mjs.map +1 -0
  446. package/dist/RightsWrapper-nBURBTJX.mjs.map +1 -0
  447. package/dist/{RubriqueChoice-DaTWiDbl.mjs → RubriqueChoice-C-S-veJJ.mjs} +1 -1
  448. package/dist/RubriqueChoice-DsmnrUNs.mjs.map +1 -0
  449. package/dist/{RubriqueChooser-C33LorHa.mjs → RubriqueChooser-CNGn8LcP.mjs} +1 -1
  450. package/dist/RubriqueChooser-WmzcajTt.mjs.map +1 -0
  451. package/dist/RubriqueFilter-C9C_OiF5.mjs.map +1 -0
  452. package/dist/RubriqueFilter-DDI7DjMR.mjs.map +1 -0
  453. package/dist/RubriqueFilter-_8V1n9-x.mjs.map +1 -0
  454. package/dist/{RubriqueFilter-RgardNnQ.mjs → RubriqueFilter-rxiG8Wci.mjs} +3 -3
  455. package/dist/RubriqueList-99-nWSvq.mjs.map +1 -0
  456. package/dist/RubriqueList-BiRimk17.mjs.map +1 -0
  457. package/dist/RubriqueList-H_NHILuj.mjs.map +1 -0
  458. package/dist/{RubriqueList-DA9OYqUl.mjs → RubriqueList-rJj2IycY.mjs} +4 -4
  459. package/dist/RubriquePage-6KFPBPz8.mjs.map +1 -0
  460. package/dist/{RubriquePage-xgTOce7c.mjs → RubriquePage-BNEWnk3-.mjs} +4 -4
  461. package/dist/RubriquePage-Bpt-x7IK.mjs.map +1 -0
  462. package/dist/RubriquePage-Cwz9OqLO.mjs.map +1 -0
  463. package/dist/SearchPage-BtZnj3sA.mjs.map +1 -0
  464. package/dist/SearchPage-CbbbcXxs.mjs.map +1 -0
  465. package/dist/SearchPage-DMIV2AgJ.mjs.map +1 -0
  466. package/dist/{SearchPage-C3o5RPP0.mjs → SearchPage-DsZzPoEw.mjs} +2 -2
  467. package/dist/ShareAnonymous-BeSQozvM.mjs.map +1 -0
  468. package/dist/ShareAnonymous-BgsR6Ahp.mjs.map +1 -0
  469. package/dist/ShareAnonymous-CNWR1v6X.mjs.map +1 -0
  470. package/dist/{ShareAnonymous-bOwwEjPv.mjs → ShareAnonymous-DK2rnLl1.mjs} +3 -3
  471. package/dist/ShareAnonymous-DVpKBKbi.mjs.map +1 -0
  472. package/dist/ShareAnonymous-DWArDFT0.mjs.map +1 -0
  473. package/dist/ShareAnonymous-IaVbb-rp.mjs.map +1 -0
  474. package/dist/ShareModalPlayer-BHmsvxXF.mjs.map +1 -0
  475. package/dist/{ShareModalPlayer-D2oBrSly.mjs → ShareModalPlayer-Cfnk68-U.mjs} +1 -1
  476. package/dist/ShareModalPlayer-DLBU3lsU.mjs.map +1 -0
  477. package/dist/ShareModalPlayer-O-CmDObW.mjs.map +1 -0
  478. package/dist/ShareModalPlayer-QYu8Q9ks.mjs.map +1 -0
  479. package/dist/ShareModalPlayer-Vga-96DM.mjs.map +1 -0
  480. package/dist/{ShareNewsletter-CNw1LziN.mjs → ShareNewsletter-BWIAt47D.mjs} +1 -1
  481. package/dist/ShareNewsletter-BhFk6ARk.mjs.map +1 -0
  482. package/dist/ShareNewsletter-JCO4h7rk.mjs.map +1 -0
  483. package/dist/SharePlayer-C-RgIOh1.mjs.map +1 -0
  484. package/dist/{SharePlayer-CRri0YED.mjs → SharePlayer-C0aveOwy.mjs} +2 -2
  485. package/dist/SharePlayer-CNXrUj8M.mjs.map +1 -0
  486. package/dist/SharePlayer-D0-qY2dS.mjs.map +1 -0
  487. package/dist/SharePlayer-DQoFa7iv.mjs.map +1 -0
  488. package/dist/SharePlayer-DwNl3E7o.mjs.map +1 -0
  489. package/dist/{SharePlayerRadio-DVsegQMu.mjs → SharePlayerRadio-BqaeyEls.mjs} +2 -2
  490. package/dist/SharePlayerRadio-CHvCtKdZ.mjs.map +1 -0
  491. package/dist/SharePlayerRadio-CIsy-rCC.mjs.map +1 -0
  492. package/dist/SharePlayerRadio-ChfNulnf.mjs.map +1 -0
  493. package/dist/SharePlayerRadio-DA-W-306.mjs.map +1 -0
  494. package/dist/SharePlayerRadio-DwPeLUsk.mjs.map +1 -0
  495. package/dist/SharePlayerTypes-CeMV4n10.mjs.map +1 -0
  496. package/dist/SharePlayerTypes-DdyoQZDi.mjs.map +1 -0
  497. package/dist/{SharePlayerTypes-BxkEoBSL.mjs → SharePlayerTypes-DyrqFDVJ.mjs} +1 -1
  498. package/dist/ShareSocialsButtons-BHWzJVne.mjs.map +1 -0
  499. package/dist/ShareSocialsButtons-Bjx2ONvj.mjs.map +1 -0
  500. package/dist/{ShareSocialsButtons-BJ3DqvIO.mjs → ShareSocialsButtons-PqMXhFEk.mjs} +1 -1
  501. package/dist/{SimpleLayout-BJlcQjx9.mjs → SimpleLayout-9O9FZ69Q.mjs} +2 -2
  502. package/dist/SimpleLayout-B-QSfHeQ.mjs.map +1 -0
  503. package/dist/SimpleLayout-BauUacaf.mjs.map +1 -0
  504. package/dist/SimpleLayout-C29bPtbd.mjs.map +1 -0
  505. package/dist/SimpleLayout-Cjc3Q9Mb.mjs.map +1 -0
  506. package/dist/SimpleLayout-D4sVjQGu.mjs.map +1 -0
  507. package/dist/SimpleLayout-DaoXS--3.mjs.map +1 -0
  508. package/dist/SimpleLayout-vkWEZHLi.mjs.map +1 -0
  509. package/dist/{SmartLinkPage-DpD90wc7.mjs → SmartLinkPage-6HgX8LDv.mjs} +16 -16
  510. package/dist/SmartLinkPage-BcQmox7e.mjs.map +1 -0
  511. package/dist/SmartLinkPage-M_zB_Xp1.mjs.map +1 -0
  512. package/dist/SubscribeButtons-CyGYD1B1.mjs.map +1 -0
  513. package/dist/SubscribeButtons-DjjZQfOU.mjs.map +1 -0
  514. package/dist/{SubscribeButtons-zlRDGEzS.mjs → SubscribeButtons-IpzqDGIn.mjs} +3 -3
  515. package/dist/SubscribeButtons-yA2wowFc.mjs.map +1 -0
  516. package/dist/SwiperList-BNODHhLF.mjs.map +1 -0
  517. package/dist/SwiperList-Cqklwlg9.mjs.map +1 -0
  518. package/dist/{SwiperList-BlF3rPq5.mjs → SwiperList-O8nUg87R.mjs} +1 -1
  519. package/dist/TagList-4RDriU1J.mjs.map +1 -0
  520. package/dist/TagList-B5JPfT6j.mjs.map +1 -0
  521. package/dist/TagList-DVjqXiaA.mjs.map +1 -0
  522. package/dist/{TagList-BBHyaKp-.mjs → TagList-V9fAFATL.mjs} +2 -2
  523. package/dist/TagPage-BOsz6Bot.mjs.map +1 -0
  524. package/dist/TagPage-CALmJwxW.mjs.map +1 -0
  525. package/dist/{TagPage-DLpNBBjP.mjs → TagPage-CsFwN4sE.mjs} +3 -3
  526. package/dist/TagPage-DMuxYu6y.mjs.map +1 -0
  527. package/dist/{TopBar-CLWWRgr7.mjs → TopBar-0oG6YPlW.mjs} +37 -37
  528. package/dist/TopBar-CUCBss7X.mjs.map +1 -0
  529. package/dist/TopBar-CeQQ1hgH.mjs.map +1 -0
  530. package/dist/TopBar-DdxThCLR.mjs.map +1 -0
  531. package/dist/{UserButtonContent-BR3Rlqwp.mjs → UserButtonContent--VK68UsY.mjs} +6 -6
  532. package/dist/UserButtonContent-067qGenf.mjs.map +1 -0
  533. package/dist/UserButtonContent-Dqgyrgzv.mjs.map +1 -0
  534. package/dist/VideoModuleBox-9QgBI-Q-.mjs.map +1 -0
  535. package/dist/{VideoModuleBox-DxYJVwy3.mjs → VideoModuleBox-Bcqman6a.mjs} +1 -1
  536. package/dist/VideoModuleBox-BrVK2bDZ.mjs.map +1 -0
  537. package/dist/VideoModuleBox-DWO47_bZ.mjs.map +1 -0
  538. package/dist/VideoPage-4MB4zmnA.mjs.map +1 -0
  539. package/dist/VideoPage-BDGvtr1o.mjs.map +1 -0
  540. package/dist/{VideoPage-BaeTduNB.mjs → VideoPage-BjlaP2DU.mjs} +6 -6
  541. package/dist/VideoPage-C-yjvvhl.mjs.map +1 -0
  542. package/dist/VideoPage-C0_t7XMC.mjs.map +1 -0
  543. package/dist/VideoPage-CIDpzbkb.mjs.map +1 -0
  544. package/dist/VideoPage-D2V1oXGC.mjs.map +1 -0
  545. package/dist/VideoPage-DEJSfeFy.mjs.map +1 -0
  546. package/dist/{classicApi-pmODlqv5.mjs → classicApi-CGipMqf7.mjs} +267 -256
  547. package/dist/classicApi-CW1Z-HoF.mjs.map +1 -0
  548. package/dist/classicApi-OzToKuW1.mjs.map +1 -0
  549. package/dist/{downloadHelper-BAI-eqgA.mjs → downloadHelper-C3QooCxr.mjs} +1 -1
  550. package/dist/downloadHelper-D7dUpp5l.mjs.map +1 -0
  551. package/dist/downloadHelper-DwV3Mmd3.mjs.map +1 -0
  552. package/dist/index.css +1 -1
  553. package/dist/index.mjs +183 -183
  554. package/dist/src/components/form/ClassicDatePicker.vue.d.ts +24 -14
  555. package/dist/src/components/form/OctopusMultiselect.vue.d.ts +2 -0
  556. package/dist/src/i18n.d.ts +2 -0
  557. package/dist/tests.mjs +2 -2
  558. package/dist/useAdvancedParamInit-BKw9VZ53.mjs.map +1 -0
  559. package/dist/useAdvancedParamInit-CyRmbqqe.mjs.map +1 -0
  560. package/dist/{useAdvancedParamInit-Bgvt8758.mjs → useAdvancedParamInit-D5roUdHI.mjs} +10 -10
  561. package/dist/useDayjs-BKBB00TF.mjs.map +1 -0
  562. package/dist/useDayjs-UQLGUbw5.mjs.map +1 -0
  563. package/dist/{useDayjs-DGb3L4kJ.mjs → useDayjs-VUs19G9T.mjs} +1 -1
  564. package/dist/useErrorHandler-BKN3lhJ5.mjs.map +1 -0
  565. package/dist/useErrorHandler-C3XnRTmp.mjs.map +1 -0
  566. package/dist/{useErrorHandler-D9W2BURn.mjs → useErrorHandler-x9sjDYSz.mjs} +1 -1
  567. package/dist/useImageProxy-AEcmDpvW.mjs.map +1 -0
  568. package/dist/useImageProxy-BzTG_GCn.mjs.map +1 -0
  569. package/dist/{useImageProxy-8ndy_oTo.mjs → useImageProxy-CCpDzPmQ.mjs} +1 -1
  570. package/dist/useOrgaComputed-4PduqYTq.mjs.map +1 -0
  571. package/dist/useOrgaComputed-C2n0FBbv.mjs.map +1 -0
  572. package/dist/{useOrgaComputed-CBJ5sDOm.mjs → useOrgaComputed-D81Jihm-.mjs} +2 -2
  573. package/dist/{usePlayerLogicProgress-C2L7cMdd.mjs → usePlayerLogicProgress-BybmSAcs.mjs} +2 -2
  574. package/dist/usePlayerLogicProgress-CKoCod6g.mjs.map +1 -0
  575. package/dist/usePlayerLogicProgress-DZaPRo6p.mjs.map +1 -0
  576. package/dist/usePodcastView-B-2HPFAo.mjs.map +1 -0
  577. package/dist/{usePodcastView-CoDJJr6Y.mjs → usePodcastView-CkM-n6iO.mjs} +3 -3
  578. package/dist/usePodcastView-jdYTK1cW.mjs.map +1 -0
  579. package/dist/{usePresentationItem-DZZVm3hh.mjs → usePresentationItem-CLEGZwI3.mjs} +3 -3
  580. package/dist/usePresentationItem-Com4i40U.mjs.map +1 -0
  581. package/dist/usePresentationItem-OpMean0v.mjs.map +1 -0
  582. package/dist/{useRights-DOXtpjv5.mjs → useRights-BI2tXXjR.mjs} +1 -1
  583. package/dist/useRights-Bsv9hr7w.mjs.map +1 -0
  584. package/dist/useRights-DfudFDI6.mjs.map +1 -0
  585. package/dist/{useRubriquesFilterComputed-DoUOqOrJ.mjs → useRubriquesFilterComputed-D1yqLnK4.mjs} +1 -1
  586. package/dist/useRubriquesFilterComputed-DGDJp2gc.mjs.map +1 -0
  587. package/dist/useRubriquesFilterComputed-NNE-FElk.mjs.map +1 -0
  588. package/dist/{useRubriquesFilterParam-BE8BbmAQ.mjs → useRubriquesFilterParam-2eMd5ND7.mjs} +1 -1
  589. package/dist/useRubriquesFilterParam-DE5dYl6c.mjs.map +1 -0
  590. package/dist/useRubriquesFilterParam-DXYD4G0D.mjs.map +1 -0
  591. package/dist/useSharePlatforms-CrQ8r5vT.mjs.map +1 -0
  592. package/dist/useSharePlatforms-D124fJ_v.mjs.map +1 -0
  593. package/dist/{useSharePlatforms-ZWYDJZBy.mjs → useSharePlatforms-sXgVxsL5.mjs} +5 -5
  594. package/dist/{useSimplePageParam-DFKSEyiE.mjs → useSimplePageParam-BrtYXOUt.mjs} +1 -1
  595. package/dist/useSimplePageParam-CruL7rLG.mjs.map +1 -0
  596. package/dist/useSimplePageParam-SaBaPhb8.mjs.map +1 -0
  597. package/dist/{useTranslation-Dr7KU7Y4.mjs → useTranslation-BVQwv02Q.mjs} +9 -9
  598. package/dist/useTranslation-Bf2zP_6C.mjs.map +1 -0
  599. package/dist/useTranslation-BuhzZoI8.mjs.map +1 -0
  600. package/dist/useTranslation-OWqckMEl.mjs.map +1 -0
  601. package/dist/usefetchRadioData-D01ws733.mjs.map +1 -0
  602. package/dist/usefetchRadioData-DDRPoD4s.mjs.map +1 -0
  603. package/dist/{usefetchRadioData-SLWfXkYt.mjs → usefetchRadioData-zyQNqiV3.mjs} +1 -1
  604. package/package.json +1 -1
  605. package/src/components/composable/useTranslation.ts +2 -2
  606. package/src/components/display/sharing/QrCode.vue +63 -64
  607. package/src/components/form/ClassicDatePicker.vue +32 -20
  608. package/src/components/form/OctopusMultiselect.vue +3 -4
  609. package/src/components/misc/ClassicPopover.vue +1 -1
  610. package/src/components/misc/player/video/PlayerVideoHls.vue +160 -159
  611. package/src/i18n.ts +38 -29
  612. package/tests/components/form/ClassicDatePicker.spec.ts +32 -0
  613. package/tests/components/form/OctopusMultiselect.spec.ts +5 -4
  614. package/dist/ClassicDatePicker-B7UA9CqR.mjs +0 -187
  615. package/dist/QrCode-DuScZ7PD.mjs +0 -105
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastPlayButton-DW5Feest.mjs","names":["ProcessingStatus","AlertIcon","DurationHelper","_openBlock","_createElementBlock","_normalizeClass","_toDisplayString","_createCommentVNode","_createElementVNode","_Fragment","_withModifiers","_createBlock","_resolveDynamicComponent","_sfc_main"],"sources":["../src/components/display/podcasts/PodcastPlayButton.vue","../src/components/display/podcasts/PodcastPlayButton.vue"],"sourcesContent":["<!--\n Component displaying the play button on a podcast.\n If the podcast is not available, an overlay is displayed with a message.\n-->\n<template>\n <div\n v-if=\"!hidePlay || recordingLive\"\n :class=\"{ 'img-blur-background': displayBanner, 'allow-play': classicPodcastPlay }\"\n >\n <div\n v-if=\"displayBanner\"\n class=\"live-image-status bg-dark\"\n >\n {{ textVisible }}\n </div>\n\n <div\n class=\"multi-buttons-play\"\n :class=\"justButtons ? 'play-button-relative' : ''\"\n >\n <template v-if=\"!isLiveToBeRecorded\">\n <button \n class=\"d-flex\"\n :title=\"playingPodcast? t('Pause') : t('Play')\"\n @mouseenter=\"hoverType = 'audio'\"\n @mouseleave=\"hoverType = ''\" \n @click.prevent=\"play(false)\"\n >\n <PlayIcon\n v-if=\"!playingPodcast || (playingPodcast && playerStore.playerVideo)\"\n :size=\"playIconSize\"\n />\n <PodcastIsPlaying v-if=\"playingPodcast && !playerStore.playerVideo\" />\n <time\n v-if=\"!isVideoPodcast\"\n class=\"ms-1 me-2\"\n :datetime=\"durationIso\"\n >\n {{ durationString }}\n </time>\n </button>\n <button \n v-if=\"isVideoPodcast\"\n :title=\"t('Video')\" \n :disabled=\"playerStore.playerVideo\"\n @click.prevent=\"play(true)\"\n @mouseenter=\"hoverType = 'video'\"\n @mouseleave=\"hoverType = ''\"\n >\n <PodcastIsPlaying v-if=\"playingPodcast && playerStore.playerVideo\" />\n <PlayVideoIcon\n v-else\n :size=\"'video' === hoverType ? 50 : 40\"\n />\n <time\n class=\"ms-2 me-2\"\n :datetime=\"durationIso\"\n >\n {{ durationString }}\n </time>\n </button>\n\n <div\n v-if=\"displayBanner\"\n class=\"special-icon-play-button\"\n >\n <component\n :is=\"iconName\"\n :size=\"16\"\n />\n </div>\n </template>\n <component\n :is=\"iconName\"\n v-else\n :size=\"50\"\n :title=\"textVisible\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport PlayVideoIcon from \"../../icons/PlayVideoIcon.vue\";\nimport PlayIcon from \"vue-material-design-icons/Play.vue\";\nimport ClockOutlineIcon from \"vue-material-design-icons/ClockOutline.vue\";\nimport CheckIcon from \"vue-material-design-icons/Check.vue\";\nimport TimerSandEmptyIcon from \"vue-material-design-icons/TimerSandEmpty.vue\";\nimport EyeOffOutlineIcon from \"vue-material-design-icons/EyeOffOutline.vue\";\nimport CancelIcon from \"vue-material-design-icons/Cancel.vue\";\nimport AlertIcon from \"vue-material-design-icons/Alert.vue\";\nimport DurationHelper from \"../../../helper/durationHelper\";\nimport { state } from \"../../../stores/ParamSdkStore\";\nimport { Podcast, PodcastProcessingStatus as ProcessingStatus, SimplifiedPodcast } from \"../../../stores/class/general/podcast\";\nimport { Conference } from \"@/stores/class/conference/conference\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed, defineAsyncComponent, ref } from \"vue\";\nimport dayjs from \"dayjs\";\nimport duration from \"dayjs/plugin/duration\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRouter } from \"vue-router\";\nimport { useResizePhone } from \"../../composable/useResizePhone\";\nimport { podcastApi } from \"../../../api/podcastApi\";\ndayjs.extend(duration);\nconst PodcastIsPlaying = defineAsyncComponent(() => import(\"./PodcastIsPlaying.vue\"));\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast|SimplifiedPodcast },\n hidePlay: { default: false, type: Boolean },\n fetchConference: { default: undefined, type: Object as () => Conference },\n justButtons: { default: false, type: Boolean },\n /** Indicates that the processing status of the episode may be shown */\n showProcessing: { default: false, type: Boolean }\n})\n\n\n//Data \nconst hoverType = ref(\"\");\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\nconst router = useRouter();\nconst { isPhone } = useResizePhone();\n\n//Computed\nconst isVideoPodcast = computed(() => {\n return (\n (props.fetchConference?.videoProfile?.includes(\"video_\") &&\n ProcessingStatus.ReadyToRecord === props.podcast.processingStatus) ||\n ('video' in props.podcast && undefined !== props.podcast.video?.videoId) ||\n ('videoId' in props.podcast && undefined !== props.podcast.videoId)\n );\n});\nconst playingLive = computed(() => {\n return (\n undefined !== props.fetchConference &&\n \"null\" !== props.fetchConference.toString() &&\n playerStore.playerLive?.conferenceId === props.fetchConference.conferenceId\n );\n});\nconst playingPodcast = computed(() => {\n return (\n playerStore.playerPodcast?.podcastId === props.podcast.podcastId ||\n playingLive.value\n );\n});\nconst isLiveToBeRecorded = computed(() => undefined === props.fetchConference && isLiveReadyToRecord.value);\nconst isLiveReadyToRecord = computed(() => {\n return (\n undefined !== props.podcast?.conferenceId &&\n 0 !== props.podcast.conferenceId &&\n ProcessingStatus.ReadyToRecord === props.podcast.processingStatus\n );\n});\nconst isLiveValidAndVisible = computed(() => {\n return (\n undefined !== props.podcast &&\n false !== props.podcast.valid &&\n undefined !== props.podcast.availability.visibility &&\n props.podcast.availability.visibility\n );\n});\n\n/** Size of the play icon */\nconst playIconSize = computed(() => {\n if (isPhone.value) {\n return 36;\n } else if (hoverType.value === 'audio') {\n return 50;\n } else {\n return 40;\n }\n});\n\n/** Whether the podcast can be played */\nconst classicPodcastPlay = computed(() => {\n return (\n //isLiveValidAndVisible.value &&\n !isLiveToBeRecorded.value &&\n ProcessingStatus.Planned !== props.podcast.processingStatus\n );\n});\n\nconst displayBanner = computed(() => {\n return props.justButtons !== true && !(\n isLiveValidAndVisible.value &&\n !isLiveToBeRecorded.value &&\n ProcessingStatus.Planned !== props.podcast.processingStatus\n ) || (ProcessingStatus.Processing === props.podcast.processingStatus && props.showProcessing);\n});\n\nconst iconName = computed(() => {\n if (isLiveToBeRecorded.value) {\n return ClockOutlineIcon;\n }\n\n if (ProcessingStatus.Ready === props.podcast.processingStatus || props.fetchConference) {\n if (!props.podcast.valid) {\n return CheckIcon;\n }\n\n if (\n !props.podcast.availability.visibility &&\n props.podcast.availability.date\n ) {\n return ClockOutlineIcon;\n }\n\n return EyeOffOutlineIcon;\n }\n\n if (\n ProcessingStatus.Planned === props.podcast.processingStatus ||\n ProcessingStatus.Processing === props.podcast.processingStatus\n ) {\n return TimerSandEmptyIcon;\n }\n\n if (ProcessingStatus.Cancelled === props.podcast.processingStatus) {\n return CancelIcon;\n }\n\n return AlertIcon;\n});\n\n/** The text to display when the podcast is not ready */\nconst textVisible = computed(() => {\n if (isLiveToBeRecorded.value){\n return t(\"Podcast linked to waiting live\");\n }\n \n if (ProcessingStatus.Ready === props.podcast.processingStatus || props.fetchConference) {\n if (!props.podcast.valid) {\n return t(\"Podcast to validate\");\n }\n if (\n !props.podcast.availability.visibility &&\n props.podcast.availability.date\n ){\n return t(\"Podcast publish in future\");\n }\n return t(\"Podcast no visible\");\n }\n if (\n ProcessingStatus.Planned === props.podcast.processingStatus ||\n ProcessingStatus.Processing === props.podcast.processingStatus\n ){\n return t(\"Podcast in process\");\n }\n if (ProcessingStatus.Cancelled === props.podcast.processingStatus){\n return t(\"Podcast in cancelled status\");\n }\n\n return t(\"Podcast in error\");\n});\n\nconst recordingLive = computed(() => {\n return (\n undefined !== props.fetchConference &&\n -1 !== props.fetchConference.conferenceId &&\n (\"RECORDING\" === props.fetchConference.status ||\n \"PENDING\" === props.fetchConference.status)\n );\n});\nconst durationString = computed(() => {\n return DurationHelper.formatDuration(\n Math.round(props.podcast.duration / 1000),\n );\n});\nconst durationIso = computed(() => {\n if (!props.podcast || props.podcast.duration <= 1) {\n return \"\";\n }\n return dayjs.duration({ milliseconds: props.podcast.duration }).toISOString();\n});\n\n//Methods\nasync function play(isVideo: boolean): Promise<void> {\n if (isLiveToBeRecorded.value) {\n return;\n }\n if (playingPodcast.value && isVideo === playerStore.playerVideo) {\n playerStore.playerChangeStatus(\"PLAYING\" === playerStore.playerStatus);\n return;\n }\n if (isVideo && state.player.isVideoPage) {\n router.push(\"/main/pub/video/\" + props.podcast.podcastId);\n return;\n }\n\n let podcast: Podcast|SimplifiedPodcast = props.podcast;\n if (isVideo && !('video' in props.podcast)) {\n podcast = await podcastApi.get(props.podcast.podcastId);\n }\n \n if (!recordingLive.value) {\n playerStore.playerPlay(podcast, isVideo);\n } else {\n playerStore.playerPlay(\n {\n ...podcast,\n conferenceId: props.fetchConference?.conferenceId,\n hlsIdentifier: props.fetchConference?.hlsIdentifier,\n },\n isVideo\n );\n }\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app {\n .img-blur-background{\n position: absolute;\n inset: 0;\n background-color:var(--octopus-background-transparent);\n // Allow pointer events to go through (allow click on image beneath blur)\n pointer-events: none;\n\n // Buttons intercept button events to allow start play\n &.allow-play button {\n pointer-events: all;\n }\n }\n\n .live-image-status {\n text-align: center;\n width: 100%;\n font-size: 0.6rem;\n padding: 0.2rem 0;\n color: white;\n text-transform: uppercase;\n position: absolute;\n top: 0;\n }\n\n .special-icon-play-button {\n width: 30px;\n height: 30px;\n background-color: oklch(88.97% 0.1399 89.64deg);\n color: black;\n border-radius: 50%;\n position: absolute;\n right: -15px;\n top: -20px;\n font-size: 0.9rem;\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .multi-buttons-play{\n display: flex;\n position: absolute;\n bottom: 0;\n left: 0;\n font-size: 1rem;\n color: white;\n background-color: var(--octopus-btn-play-bg);\n border-radius: var(--octopus-btn-play-radius);\n\n @media (width <= 960px) {\n font-size: 0.8rem;\n }\n\n button{\n color: var(--octopus-btn-play-fg);\n background-color: transparent;\n border: 0;\n display: flex;\n align-items: center;\n padding: 0.2rem;\n }\n }\n\n .play-button-relative.multi-buttons-play{\n position: relative;\n }\n}\n</style>\n","<!--\n Component displaying the play button on a podcast.\n If the podcast is not available, an overlay is displayed with a message.\n-->\n<template>\n <div\n v-if=\"!hidePlay || recordingLive\"\n :class=\"{ 'img-blur-background': displayBanner, 'allow-play': classicPodcastPlay }\"\n >\n <div\n v-if=\"displayBanner\"\n class=\"live-image-status bg-dark\"\n >\n {{ textVisible }}\n </div>\n\n <div\n class=\"multi-buttons-play\"\n :class=\"justButtons ? 'play-button-relative' : ''\"\n >\n <template v-if=\"!isLiveToBeRecorded\">\n <button \n class=\"d-flex\"\n :title=\"playingPodcast? t('Pause') : t('Play')\"\n @mouseenter=\"hoverType = 'audio'\"\n @mouseleave=\"hoverType = ''\" \n @click.prevent=\"play(false)\"\n >\n <PlayIcon\n v-if=\"!playingPodcast || (playingPodcast && playerStore.playerVideo)\"\n :size=\"playIconSize\"\n />\n <PodcastIsPlaying v-if=\"playingPodcast && !playerStore.playerVideo\" />\n <time\n v-if=\"!isVideoPodcast\"\n class=\"ms-1 me-2\"\n :datetime=\"durationIso\"\n >\n {{ durationString }}\n </time>\n </button>\n <button \n v-if=\"isVideoPodcast\"\n :title=\"t('Video')\" \n :disabled=\"playerStore.playerVideo\"\n @click.prevent=\"play(true)\"\n @mouseenter=\"hoverType = 'video'\"\n @mouseleave=\"hoverType = ''\"\n >\n <PodcastIsPlaying v-if=\"playingPodcast && playerStore.playerVideo\" />\n <PlayVideoIcon\n v-else\n :size=\"'video' === hoverType ? 50 : 40\"\n />\n <time\n class=\"ms-2 me-2\"\n :datetime=\"durationIso\"\n >\n {{ durationString }}\n </time>\n </button>\n\n <div\n v-if=\"displayBanner\"\n class=\"special-icon-play-button\"\n >\n <component\n :is=\"iconName\"\n :size=\"16\"\n />\n </div>\n </template>\n <component\n :is=\"iconName\"\n v-else\n :size=\"50\"\n :title=\"textVisible\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport PlayVideoIcon from \"../../icons/PlayVideoIcon.vue\";\nimport PlayIcon from \"vue-material-design-icons/Play.vue\";\nimport ClockOutlineIcon from \"vue-material-design-icons/ClockOutline.vue\";\nimport CheckIcon from \"vue-material-design-icons/Check.vue\";\nimport TimerSandEmptyIcon from \"vue-material-design-icons/TimerSandEmpty.vue\";\nimport EyeOffOutlineIcon from \"vue-material-design-icons/EyeOffOutline.vue\";\nimport CancelIcon from \"vue-material-design-icons/Cancel.vue\";\nimport AlertIcon from \"vue-material-design-icons/Alert.vue\";\nimport DurationHelper from \"../../../helper/durationHelper\";\nimport { state } from \"../../../stores/ParamSdkStore\";\nimport { Podcast, PodcastProcessingStatus as ProcessingStatus, SimplifiedPodcast } from \"../../../stores/class/general/podcast\";\nimport { Conference } from \"@/stores/class/conference/conference\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed, defineAsyncComponent, ref } from \"vue\";\nimport dayjs from \"dayjs\";\nimport duration from \"dayjs/plugin/duration\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRouter } from \"vue-router\";\nimport { useResizePhone } from \"../../composable/useResizePhone\";\nimport { podcastApi } from \"../../../api/podcastApi\";\ndayjs.extend(duration);\nconst PodcastIsPlaying = defineAsyncComponent(() => import(\"./PodcastIsPlaying.vue\"));\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast|SimplifiedPodcast },\n hidePlay: { default: false, type: Boolean },\n fetchConference: { default: undefined, type: Object as () => Conference },\n justButtons: { default: false, type: Boolean },\n /** Indicates that the processing status of the episode may be shown */\n showProcessing: { default: false, type: Boolean }\n})\n\n\n//Data \nconst hoverType = ref(\"\");\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\nconst router = useRouter();\nconst { isPhone } = useResizePhone();\n\n//Computed\nconst isVideoPodcast = computed(() => {\n return (\n (props.fetchConference?.videoProfile?.includes(\"video_\") &&\n ProcessingStatus.ReadyToRecord === props.podcast.processingStatus) ||\n ('video' in props.podcast && undefined !== props.podcast.video?.videoId) ||\n ('videoId' in props.podcast && undefined !== props.podcast.videoId)\n );\n});\nconst playingLive = computed(() => {\n return (\n undefined !== props.fetchConference &&\n \"null\" !== props.fetchConference.toString() &&\n playerStore.playerLive?.conferenceId === props.fetchConference.conferenceId\n );\n});\nconst playingPodcast = computed(() => {\n return (\n playerStore.playerPodcast?.podcastId === props.podcast.podcastId ||\n playingLive.value\n );\n});\nconst isLiveToBeRecorded = computed(() => undefined === props.fetchConference && isLiveReadyToRecord.value);\nconst isLiveReadyToRecord = computed(() => {\n return (\n undefined !== props.podcast?.conferenceId &&\n 0 !== props.podcast.conferenceId &&\n ProcessingStatus.ReadyToRecord === props.podcast.processingStatus\n );\n});\nconst isLiveValidAndVisible = computed(() => {\n return (\n undefined !== props.podcast &&\n false !== props.podcast.valid &&\n undefined !== props.podcast.availability.visibility &&\n props.podcast.availability.visibility\n );\n});\n\n/** Size of the play icon */\nconst playIconSize = computed(() => {\n if (isPhone.value) {\n return 36;\n } else if (hoverType.value === 'audio') {\n return 50;\n } else {\n return 40;\n }\n});\n\n/** Whether the podcast can be played */\nconst classicPodcastPlay = computed(() => {\n return (\n //isLiveValidAndVisible.value &&\n !isLiveToBeRecorded.value &&\n ProcessingStatus.Planned !== props.podcast.processingStatus\n );\n});\n\nconst displayBanner = computed(() => {\n return props.justButtons !== true && !(\n isLiveValidAndVisible.value &&\n !isLiveToBeRecorded.value &&\n ProcessingStatus.Planned !== props.podcast.processingStatus\n ) || (ProcessingStatus.Processing === props.podcast.processingStatus && props.showProcessing);\n});\n\nconst iconName = computed(() => {\n if (isLiveToBeRecorded.value) {\n return ClockOutlineIcon;\n }\n\n if (ProcessingStatus.Ready === props.podcast.processingStatus || props.fetchConference) {\n if (!props.podcast.valid) {\n return CheckIcon;\n }\n\n if (\n !props.podcast.availability.visibility &&\n props.podcast.availability.date\n ) {\n return ClockOutlineIcon;\n }\n\n return EyeOffOutlineIcon;\n }\n\n if (\n ProcessingStatus.Planned === props.podcast.processingStatus ||\n ProcessingStatus.Processing === props.podcast.processingStatus\n ) {\n return TimerSandEmptyIcon;\n }\n\n if (ProcessingStatus.Cancelled === props.podcast.processingStatus) {\n return CancelIcon;\n }\n\n return AlertIcon;\n});\n\n/** The text to display when the podcast is not ready */\nconst textVisible = computed(() => {\n if (isLiveToBeRecorded.value){\n return t(\"Podcast linked to waiting live\");\n }\n \n if (ProcessingStatus.Ready === props.podcast.processingStatus || props.fetchConference) {\n if (!props.podcast.valid) {\n return t(\"Podcast to validate\");\n }\n if (\n !props.podcast.availability.visibility &&\n props.podcast.availability.date\n ){\n return t(\"Podcast publish in future\");\n }\n return t(\"Podcast no visible\");\n }\n if (\n ProcessingStatus.Planned === props.podcast.processingStatus ||\n ProcessingStatus.Processing === props.podcast.processingStatus\n ){\n return t(\"Podcast in process\");\n }\n if (ProcessingStatus.Cancelled === props.podcast.processingStatus){\n return t(\"Podcast in cancelled status\");\n }\n\n return t(\"Podcast in error\");\n});\n\nconst recordingLive = computed(() => {\n return (\n undefined !== props.fetchConference &&\n -1 !== props.fetchConference.conferenceId &&\n (\"RECORDING\" === props.fetchConference.status ||\n \"PENDING\" === props.fetchConference.status)\n );\n});\nconst durationString = computed(() => {\n return DurationHelper.formatDuration(\n Math.round(props.podcast.duration / 1000),\n );\n});\nconst durationIso = computed(() => {\n if (!props.podcast || props.podcast.duration <= 1) {\n return \"\";\n }\n return dayjs.duration({ milliseconds: props.podcast.duration }).toISOString();\n});\n\n//Methods\nasync function play(isVideo: boolean): Promise<void> {\n if (isLiveToBeRecorded.value) {\n return;\n }\n if (playingPodcast.value && isVideo === playerStore.playerVideo) {\n playerStore.playerChangeStatus(\"PLAYING\" === playerStore.playerStatus);\n return;\n }\n if (isVideo && state.player.isVideoPage) {\n router.push(\"/main/pub/video/\" + props.podcast.podcastId);\n return;\n }\n\n let podcast: Podcast|SimplifiedPodcast = props.podcast;\n if (isVideo && !('video' in props.podcast)) {\n podcast = await podcastApi.get(props.podcast.podcastId);\n }\n \n if (!recordingLive.value) {\n playerStore.playerPlay(podcast, isVideo);\n } else {\n playerStore.playerPlay(\n {\n ...podcast,\n conferenceId: props.fetchConference?.conferenceId,\n hlsIdentifier: props.fetchConference?.hlsIdentifier,\n },\n isVideo\n );\n }\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app {\n .img-blur-background{\n position: absolute;\n inset: 0;\n background-color:var(--octopus-background-transparent);\n // Allow pointer events to go through (allow click on image beneath blur)\n pointer-events: none;\n\n // Buttons intercept button events to allow start play\n &.allow-play button {\n pointer-events: all;\n }\n }\n\n .live-image-status {\n text-align: center;\n width: 100%;\n font-size: 0.6rem;\n padding: 0.2rem 0;\n color: white;\n text-transform: uppercase;\n position: absolute;\n top: 0;\n }\n\n .special-icon-play-button {\n width: 30px;\n height: 30px;\n background-color: oklch(88.97% 0.1399 89.64deg);\n color: black;\n border-radius: 50%;\n position: absolute;\n right: -15px;\n top: -20px;\n font-size: 0.9rem;\n font-weight: bold;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .multi-buttons-play{\n display: flex;\n position: absolute;\n bottom: 0;\n left: 0;\n font-size: 1rem;\n color: white;\n background-color: var(--octopus-btn-play-bg);\n border-radius: var(--octopus-btn-play-radius);\n\n @media (width <= 960px) {\n font-size: 0.8rem;\n }\n\n button{\n color: var(--octopus-btn-play-fg);\n background-color: transparent;\n border: 0;\n display: flex;\n align-items: center;\n padding: 0.2rem;\n }\n }\n\n .play-button-relative.multi-buttons-play{\n position: relative;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastPlaylistInlineList-BV31HaB2.mjs","names":["_openBlock","_createBlock","_withCtx","_createVNode","_createCommentVNode","_sfc_main"],"sources":["../src/components/display/playlist/PodcastPlaylistInlineList.vue","../src/components/display/playlist/PodcastPlaylistInlineList.vue"],"sourcesContent":["<template>\n <PodcastInlineListTemplate\n v-if=\"loading || (!loading && 0 !== allPodcasts.length)\"\n :display-arrow=\"false\"\n :button-text=\"noMoreButton ? undefined : t('See more')\"\n :button-plus=\"true\"\n :title=\"playlist?.title ?? ''\"\n :href=\"'/main/pub/playlist/' + playlistId\"\n :podcast-id=\"playlistId\"\n >\n <template #list-inline>\n <ClassicLoading\n class=\"loading-size\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n />\n <SwiperList\n v-if=\"!loading\"\n :list-object=\"allPodcasts\"\n :size-item-overload=\"sizeItemOverload\"\n >\n <template #octopusSlide=\"{ option }\">\n <PodcastItem\n class=\"flex-shrink-0 item-phone-margin\"\n :podcast=\"option\"\n />\n </template>\n </SwiperList>\n </template>\n </PodcastInlineListTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport PodcastInlineListTemplate from \"../podcasts/PodcastInlineListTemplate.vue\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport SwiperList from \"../list/SwiperList.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { onMounted, Ref, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps<{\n /** ID of the playlist to display */\n playlistId: number;\n sizeItemOverload?: number;\n /** When set to true, disable display of \"see more\" button */\n noMoreButton?: boolean;\n}>();\n\n//Data \nconst loading = ref(true);\nconst totalCount = ref(0);\nconst playlist: Ref<Playlist | undefined> = ref(undefined);\nconst allPodcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\n\n//Watch\nwatch(()=>props.playlistId, () => {\n reset();\n fetchContent();\n});\n\nonMounted(()=>fetchContent())\n\n//Methods\nasync function fetchContent(): Promise<void> {\n allPodcasts.value.length = 0;\n loading.value = true;\n\n // Retrieve both playlist & content at the same time\n const [playlistData, content] = await Promise.all([\n playlistApi.get(props.playlistId),\n playlistApi.getContentFull(props.playlistId)\n ]);\n\n // Update data\n playlist.value = playlistData;\n allPodcasts.value = content;\n\n if (\n !(\n (undefined !== authStore.authOrgaId &&\n authStore.authOrgaId === playlist.value?.organisation?.id) ||\n authStore.isRoleAdmin\n )\n ) {\n allPodcasts.value = allPodcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n loading.value = false;\n}\nfunction reset(): void {\n totalCount.value = 0;\n allPodcasts.value.length = 0;\n}\n</script>\n","<template>\n <PodcastInlineListTemplate\n v-if=\"loading || (!loading && 0 !== allPodcasts.length)\"\n :display-arrow=\"false\"\n :button-text=\"noMoreButton ? undefined : t('See more')\"\n :button-plus=\"true\"\n :title=\"playlist?.title ?? ''\"\n :href=\"'/main/pub/playlist/' + playlistId\"\n :podcast-id=\"playlistId\"\n >\n <template #list-inline>\n <ClassicLoading\n class=\"loading-size\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n />\n <SwiperList\n v-if=\"!loading\"\n :list-object=\"allPodcasts\"\n :size-item-overload=\"sizeItemOverload\"\n >\n <template #octopusSlide=\"{ option }\">\n <PodcastItem\n class=\"flex-shrink-0 item-phone-margin\"\n :podcast=\"option\"\n />\n </template>\n </SwiperList>\n </template>\n </PodcastInlineListTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport PodcastInlineListTemplate from \"../podcasts/PodcastInlineListTemplate.vue\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport SwiperList from \"../list/SwiperList.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { onMounted, Ref, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps<{\n /** ID of the playlist to display */\n playlistId: number;\n sizeItemOverload?: number;\n /** When set to true, disable display of \"see more\" button */\n noMoreButton?: boolean;\n}>();\n\n//Data \nconst loading = ref(true);\nconst totalCount = ref(0);\nconst playlist: Ref<Playlist | undefined> = ref(undefined);\nconst allPodcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\n\n//Watch\nwatch(()=>props.playlistId, () => {\n reset();\n fetchContent();\n});\n\nonMounted(()=>fetchContent())\n\n//Methods\nasync function fetchContent(): Promise<void> {\n allPodcasts.value.length = 0;\n loading.value = true;\n\n // Retrieve both playlist & content at the same time\n const [playlistData, content] = await Promise.all([\n playlistApi.get(props.playlistId),\n playlistApi.getContentFull(props.playlistId)\n ]);\n\n // Update data\n playlist.value = playlistData;\n allPodcasts.value = content;\n\n if (\n !(\n (undefined !== authStore.authOrgaId &&\n authStore.authOrgaId === playlist.value?.organisation?.id) ||\n authStore.isRoleAdmin\n )\n ) {\n allPodcasts.value = allPodcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n loading.value = false;\n}\nfunction reset(): void {\n totalCount.value = 0;\n allPodcasts.value.length = 0;\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CA,MAAM,QAAQ;EASd,MAAM,UAAU,IAAI,IAAI;EACxB,MAAM,aAAa,IAAI,CAAC;EACxB,MAAM,WAAsC,IAAI,KAAA,CAAS;EACzD,MAAM,cAAmC,IAAI,CAAC,CAAC;EAG/C,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,YAAY,aAAa;EAG/B,YAAU,MAAM,kBAAkB;GAChC,MAAM;GACN,aAAa;EACf,CAAC;EAED,gBAAc,aAAa,CAAC;EAG5B,eAAe,eAA8B;GAC3C,YAAY,MAAM,SAAS;GAC3B,QAAQ,QAAQ;GAGhB,MAAM,CAAC,cAAc,WAAW,MAAM,QAAQ,IAAI,CAChD,YAAY,IAAI,MAAM,UAAU,GAChC,YAAY,eAAe,MAAM,UAAU,CAC7C,CAAC;GAGD,SAAS,QAAQ;GACjB,YAAY,QAAQ;GAEpB,IACE,EACG,KAAA,MAAc,UAAU,cACzB,UAAU,eAAe,SAAS,OAAO,cAAc,MACvD,UAAU,cAGZ,YAAY,QAAQ,YAAY,MAAM,QAAQ,MAAsB;IAClE,OACE,SAAS,MACR,CAAC,EAAE,gBAAgB,SAAS,EAAE,aAAa;GAEhD,CAAC;GAEH,QAAQ,QAAQ;EAClB;EACA,SAAS,QAAc;GACrB,WAAW,QAAQ;GACnB,YAAY,MAAM,SAAS;EAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;CCtGU,OAAA,OAAA,WAAO,CAAM,OAAA,WAAO,MAAU,OAAA,YAAY,UADlDA,UAAA,GAAAC,YA2B4B,OAAA,8BAAA;;EAzBzB,iBAAe;EACf,eAAa,OAAA,eAAe,KAAA,IAAY,OAAA,EAAC,UAAA;EACzC,eAAa;EACb,OAAO,OAAA,UAAU,SAAK;EACtB,MAAI,wBAA0B,OAAA;EAC9B,cAAY,OAAA;;EAEF,eAAWC,cAIlB,CAHFC,YAGE,OAAA,mBAAA;GAFA,OAAM;GACL,gBAAc,OAAA,UAAU,OAAA,EAAC,sBAAA,IAA2B,KAAA;EAG9C,GAAA,MAAA,GAAA,CAAA,cAAA,CAAA,GAAA,CAAA,OAAA,WADTH,UAAA,GAAAC,YAWa,OAAA,eAAA;;GATV,eAAa,OAAA;GACb,sBAAoB,OAAA;;GAEV,cAAYC,SAInB,EAJuB,aAAM,CAC/BC,YAGE,OAAA,gBAAA;IAFA,OAAM;IACL,SAAS"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastPlaylistInlineList-C-WYs6aE.mjs","names":["_openBlock","_createBlock","_withCtx","_createVNode","_createCommentVNode","_sfc_main"],"sources":["../src/components/display/playlist/PodcastPlaylistInlineList.vue","../src/components/display/playlist/PodcastPlaylistInlineList.vue"],"sourcesContent":["<template>\n <PodcastInlineListTemplate\n v-if=\"loading || (!loading && 0 !== allPodcasts.length)\"\n :display-arrow=\"false\"\n :button-text=\"noMoreButton ? undefined : t('See more')\"\n :button-plus=\"true\"\n :title=\"playlist?.title ?? ''\"\n :href=\"'/main/pub/playlist/' + playlistId\"\n :podcast-id=\"playlistId\"\n >\n <template #list-inline>\n <ClassicLoading\n class=\"loading-size\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n />\n <SwiperList\n v-if=\"!loading\"\n :list-object=\"allPodcasts\"\n :size-item-overload=\"sizeItemOverload\"\n >\n <template #octopusSlide=\"{ option }\">\n <PodcastItem\n class=\"flex-shrink-0 item-phone-margin\"\n :podcast=\"option\"\n />\n </template>\n </SwiperList>\n </template>\n </PodcastInlineListTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport PodcastInlineListTemplate from \"../podcasts/PodcastInlineListTemplate.vue\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport SwiperList from \"../list/SwiperList.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { onMounted, Ref, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps<{\n /** ID of the playlist to display */\n playlistId: number;\n sizeItemOverload?: number;\n /** When set to true, disable display of \"see more\" button */\n noMoreButton?: boolean;\n}>();\n\n//Data \nconst loading = ref(true);\nconst totalCount = ref(0);\nconst playlist: Ref<Playlist | undefined> = ref(undefined);\nconst allPodcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\n\n//Watch\nwatch(()=>props.playlistId, () => {\n reset();\n fetchContent();\n});\n\nonMounted(()=>fetchContent())\n\n//Methods\nasync function fetchContent(): Promise<void> {\n allPodcasts.value.length = 0;\n loading.value = true;\n\n // Retrieve both playlist & content at the same time\n const [playlistData, content] = await Promise.all([\n playlistApi.get(props.playlistId),\n playlistApi.getContentFull(props.playlistId)\n ]);\n\n // Update data\n playlist.value = playlistData;\n allPodcasts.value = content;\n\n if (\n !(\n (undefined !== authStore.authOrgaId &&\n authStore.authOrgaId === playlist.value?.organisation?.id) ||\n authStore.isRoleAdmin\n )\n ) {\n allPodcasts.value = allPodcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n loading.value = false;\n}\nfunction reset(): void {\n totalCount.value = 0;\n allPodcasts.value.length = 0;\n}\n</script>\n","<template>\n <PodcastInlineListTemplate\n v-if=\"loading || (!loading && 0 !== allPodcasts.length)\"\n :display-arrow=\"false\"\n :button-text=\"noMoreButton ? undefined : t('See more')\"\n :button-plus=\"true\"\n :title=\"playlist?.title ?? ''\"\n :href=\"'/main/pub/playlist/' + playlistId\"\n :podcast-id=\"playlistId\"\n >\n <template #list-inline>\n <ClassicLoading\n class=\"loading-size\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n />\n <SwiperList\n v-if=\"!loading\"\n :list-object=\"allPodcasts\"\n :size-item-overload=\"sizeItemOverload\"\n >\n <template #octopusSlide=\"{ option }\">\n <PodcastItem\n class=\"flex-shrink-0 item-phone-margin\"\n :podcast=\"option\"\n />\n </template>\n </SwiperList>\n </template>\n </PodcastInlineListTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport PodcastInlineListTemplate from \"../podcasts/PodcastInlineListTemplate.vue\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport SwiperList from \"../list/SwiperList.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { onMounted, Ref, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps<{\n /** ID of the playlist to display */\n playlistId: number;\n sizeItemOverload?: number;\n /** When set to true, disable display of \"see more\" button */\n noMoreButton?: boolean;\n}>();\n\n//Data \nconst loading = ref(true);\nconst totalCount = ref(0);\nconst playlist: Ref<Playlist | undefined> = ref(undefined);\nconst allPodcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\n\n//Watch\nwatch(()=>props.playlistId, () => {\n reset();\n fetchContent();\n});\n\nonMounted(()=>fetchContent())\n\n//Methods\nasync function fetchContent(): Promise<void> {\n allPodcasts.value.length = 0;\n loading.value = true;\n\n // Retrieve both playlist & content at the same time\n const [playlistData, content] = await Promise.all([\n playlistApi.get(props.playlistId),\n playlistApi.getContentFull(props.playlistId)\n ]);\n\n // Update data\n playlist.value = playlistData;\n allPodcasts.value = content;\n\n if (\n !(\n (undefined !== authStore.authOrgaId &&\n authStore.authOrgaId === playlist.value?.organisation?.id) ||\n authStore.isRoleAdmin\n )\n ) {\n allPodcasts.value = allPodcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n loading.value = false;\n}\nfunction reset(): void {\n totalCount.value = 0;\n allPodcasts.value.length = 0;\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CA,MAAM,QAAQ;EASd,MAAM,UAAU,IAAI,IAAI;EACxB,MAAM,aAAa,IAAI,CAAC;EACxB,MAAM,WAAsC,IAAI,KAAA,CAAS;EACzD,MAAM,cAAmC,IAAI,CAAC,CAAC;EAG/C,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,YAAY,aAAa;EAG/B,YAAU,MAAM,kBAAkB;GAChC,MAAM;GACN,aAAa;EACf,CAAC;EAED,gBAAc,aAAa,CAAC;EAG5B,eAAe,eAA8B;GAC3C,YAAY,MAAM,SAAS;GAC3B,QAAQ,QAAQ;GAGhB,MAAM,CAAC,cAAc,WAAW,MAAM,QAAQ,IAAI,CAChD,YAAY,IAAI,MAAM,UAAU,GAChC,YAAY,eAAe,MAAM,UAAU,CAC7C,CAAC;GAGD,SAAS,QAAQ;GACjB,YAAY,QAAQ;GAEpB,IACE,EACG,KAAA,MAAc,UAAU,cACzB,UAAU,eAAe,SAAS,OAAO,cAAc,MACvD,UAAU,cAGZ,YAAY,QAAQ,YAAY,MAAM,QAAQ,MAAsB;IAClE,OACE,SAAS,MACR,CAAC,EAAE,gBAAgB,SAAS,EAAE,aAAa;GAEhD,CAAC;GAEH,QAAQ,QAAQ;EAClB;EACA,SAAS,QAAc;GACrB,WAAW,QAAQ;GACnB,YAAY,MAAM,SAAS;EAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;CCtGU,OAAA,OAAA,WAAO,CAAM,OAAA,WAAO,MAAU,OAAA,YAAY,UADlDA,UAAA,GAAAC,YA2B4B,OAAA,8BAAA;;EAzBzB,iBAAe;EACf,eAAa,OAAA,eAAe,KAAA,IAAY,OAAA,EAAC,UAAA;EACzC,eAAa;EACb,OAAO,OAAA,UAAU,SAAK;EACtB,MAAI,wBAA0B,OAAA;EAC9B,cAAY,OAAA;;EAEF,eAAWC,cAIlB,CAHFC,YAGE,OAAA,mBAAA;GAFA,OAAM;GACL,gBAAc,OAAA,UAAU,OAAA,EAAC,sBAAA,IAA2B,KAAA;EAG9C,GAAA,MAAA,GAAA,CAAA,cAAA,CAAA,GAAA,CAAA,OAAA,WADTH,UAAA,GAAAC,YAWa,OAAA,eAAA;;GATV,eAAa,OAAA;GACb,sBAAoB,OAAA;;GAEV,cAAYC,SAInB,EAJuB,aAAM,CAC/BC,YAGE,OAAA,gBAAA;IAFA,OAAM;IACL,SAAS"}
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./ClassicLoading-CXfMjpyl.mjs";
2
- import { _ as t, i as n } from "./classicApi-pmODlqv5.mjs";
3
- import { t as r } from "./SwiperList-BlF3rPq5.mjs";
4
- import { t as i } from "./PodcastItem-TdtzApJ6.mjs";
5
- import { t as a } from "./PodcastInlineListTemplate-DTrS1UiG.mjs";
2
+ import { i as t, v as n } from "./classicApi-CGipMqf7.mjs";
3
+ import { t as r } from "./SwiperList-O8nUg87R.mjs";
4
+ import { t as i } from "./PodcastItem-Baki7W0q.mjs";
5
+ import { t as a } from "./PodcastInlineListTemplate-Chbi8aME.mjs";
6
6
  import { createBlock as o, createCommentVNode as s, createVNode as c, defineComponent as l, onMounted as u, openBlock as d, ref as f, unref as p, watch as m, withCtx as h } from "vue";
7
7
  import { useI18n as g } from "vue-i18n";
8
8
  //#endregion
@@ -15,14 +15,14 @@ var _ = /* @__PURE__ */ l({
15
15
  noMoreButton: { type: Boolean }
16
16
  },
17
17
  setup(l) {
18
- let _ = l, v = f(!0), y = f(0), b = f(void 0), x = f([]), { t: S } = g(), C = n();
18
+ let _ = l, v = f(!0), y = f(0), b = f(void 0), x = f([]), { t: S } = g(), C = t();
19
19
  m(() => _.playlistId, () => {
20
20
  T(), w();
21
21
  }), u(() => w());
22
22
  async function w() {
23
23
  x.value.length = 0, v.value = !0;
24
- let [e, n] = await Promise.all([t.get(_.playlistId), t.getContentFull(_.playlistId)]);
25
- b.value = e, x.value = n, C.authOrgaId !== void 0 && C.authOrgaId === b.value?.organisation?.id || C.isRoleAdmin || (x.value = x.value.filter((e) => e !== null && (!e.availability || !0 === e.availability.visibility))), v.value = !1;
24
+ let [e, t] = await Promise.all([n.get(_.playlistId), n.getContentFull(_.playlistId)]);
25
+ b.value = e, x.value = t, C.authOrgaId !== void 0 && C.authOrgaId === b.value?.organisation?.id || C.isRoleAdmin || (x.value = x.value.filter((e) => e !== null && (!e.availability || !0 === e.availability.visibility))), v.value = !1;
26
26
  }
27
27
  function T() {
28
28
  y.value = 0, x.value.length = 0;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastPlaylistInlineList-HEdFAq1l.mjs","names":["_openBlock","_createBlock","_withCtx","_createVNode","_createCommentVNode","_sfc_main"],"sources":["../src/components/display/playlist/PodcastPlaylistInlineList.vue","../src/components/display/playlist/PodcastPlaylistInlineList.vue"],"sourcesContent":["<template>\n <PodcastInlineListTemplate\n v-if=\"loading || (!loading && 0 !== allPodcasts.length)\"\n :display-arrow=\"false\"\n :button-text=\"noMoreButton ? undefined : t('See more')\"\n :button-plus=\"true\"\n :title=\"playlist?.title ?? ''\"\n :href=\"'/main/pub/playlist/' + playlistId\"\n :podcast-id=\"playlistId\"\n >\n <template #list-inline>\n <ClassicLoading\n class=\"loading-size\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n />\n <SwiperList\n v-if=\"!loading\"\n :list-object=\"allPodcasts\"\n :size-item-overload=\"sizeItemOverload\"\n >\n <template #octopusSlide=\"{ option }\">\n <PodcastItem\n class=\"flex-shrink-0 item-phone-margin\"\n :podcast=\"option\"\n />\n </template>\n </SwiperList>\n </template>\n </PodcastInlineListTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport PodcastInlineListTemplate from \"../podcasts/PodcastInlineListTemplate.vue\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport SwiperList from \"../list/SwiperList.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { onMounted, Ref, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps<{\n /** ID of the playlist to display */\n playlistId: number;\n sizeItemOverload?: number;\n /** When set to true, disable display of \"see more\" button */\n noMoreButton?: boolean;\n}>();\n\n//Data \nconst loading = ref(true);\nconst totalCount = ref(0);\nconst playlist: Ref<Playlist | undefined> = ref(undefined);\nconst allPodcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\n\n//Watch\nwatch(()=>props.playlistId, () => {\n reset();\n fetchContent();\n});\n\nonMounted(()=>fetchContent())\n\n//Methods\nasync function fetchContent(): Promise<void> {\n allPodcasts.value.length = 0;\n loading.value = true;\n\n // Retrieve both playlist & content at the same time\n const [playlistData, content] = await Promise.all([\n playlistApi.get(props.playlistId),\n playlistApi.getContentFull(props.playlistId)\n ]);\n\n // Update data\n playlist.value = playlistData;\n allPodcasts.value = content;\n\n if (\n !(\n (undefined !== authStore.authOrgaId &&\n authStore.authOrgaId === playlist.value?.organisation?.id) ||\n authStore.isRoleAdmin\n )\n ) {\n allPodcasts.value = allPodcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n loading.value = false;\n}\nfunction reset(): void {\n totalCount.value = 0;\n allPodcasts.value.length = 0;\n}\n</script>\n","<template>\n <PodcastInlineListTemplate\n v-if=\"loading || (!loading && 0 !== allPodcasts.length)\"\n :display-arrow=\"false\"\n :button-text=\"noMoreButton ? undefined : t('See more')\"\n :button-plus=\"true\"\n :title=\"playlist?.title ?? ''\"\n :href=\"'/main/pub/playlist/' + playlistId\"\n :podcast-id=\"playlistId\"\n >\n <template #list-inline>\n <ClassicLoading\n class=\"loading-size\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n />\n <SwiperList\n v-if=\"!loading\"\n :list-object=\"allPodcasts\"\n :size-item-overload=\"sizeItemOverload\"\n >\n <template #octopusSlide=\"{ option }\">\n <PodcastItem\n class=\"flex-shrink-0 item-phone-margin\"\n :podcast=\"option\"\n />\n </template>\n </SwiperList>\n </template>\n </PodcastInlineListTemplate>\n</template>\n\n<script setup lang=\"ts\">\nimport PodcastInlineListTemplate from \"../podcasts/PodcastInlineListTemplate.vue\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport SwiperList from \"../list/SwiperList.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { onMounted, Ref, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps<{\n /** ID of the playlist to display */\n playlistId: number;\n sizeItemOverload?: number;\n /** When set to true, disable display of \"see more\" button */\n noMoreButton?: boolean;\n}>();\n\n//Data \nconst loading = ref(true);\nconst totalCount = ref(0);\nconst playlist: Ref<Playlist | undefined> = ref(undefined);\nconst allPodcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\n\n//Watch\nwatch(()=>props.playlistId, () => {\n reset();\n fetchContent();\n});\n\nonMounted(()=>fetchContent())\n\n//Methods\nasync function fetchContent(): Promise<void> {\n allPodcasts.value.length = 0;\n loading.value = true;\n\n // Retrieve both playlist & content at the same time\n const [playlistData, content] = await Promise.all([\n playlistApi.get(props.playlistId),\n playlistApi.getContentFull(props.playlistId)\n ]);\n\n // Update data\n playlist.value = playlistData;\n allPodcasts.value = content;\n\n if (\n !(\n (undefined !== authStore.authOrgaId &&\n authStore.authOrgaId === playlist.value?.organisation?.id) ||\n authStore.isRoleAdmin\n )\n ) {\n allPodcasts.value = allPodcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n loading.value = false;\n}\nfunction reset(): void {\n totalCount.value = 0;\n allPodcasts.value.length = 0;\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CA,MAAM,QAAQ;EASd,MAAM,UAAU,IAAI,IAAI;EACxB,MAAM,aAAa,IAAI,CAAC;EACxB,MAAM,WAAsC,IAAI,KAAA,CAAS;EACzD,MAAM,cAAmC,IAAI,CAAC,CAAC;EAG/C,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,YAAY,aAAa;EAG/B,YAAU,MAAM,kBAAkB;GAChC,MAAM;GACN,aAAa;EACf,CAAC;EAED,gBAAc,aAAa,CAAC;EAG5B,eAAe,eAA8B;GAC3C,YAAY,MAAM,SAAS;GAC3B,QAAQ,QAAQ;GAGhB,MAAM,CAAC,cAAc,WAAW,MAAM,QAAQ,IAAI,CAChD,YAAY,IAAI,MAAM,UAAU,GAChC,YAAY,eAAe,MAAM,UAAU,CAC7C,CAAC;GAGD,SAAS,QAAQ;GACjB,YAAY,QAAQ;GAEpB,IACE,EACG,KAAA,MAAc,UAAU,cACzB,UAAU,eAAe,SAAS,OAAO,cAAc,MACvD,UAAU,cAGZ,YAAY,QAAQ,YAAY,MAAM,QAAQ,MAAsB;IAClE,OACE,SAAS,MACR,CAAC,EAAE,gBAAgB,SAAS,EAAE,aAAa;GAEhD,CAAC;GAEH,QAAQ,QAAQ;EAClB;EACA,SAAS,QAAc;GACrB,WAAW,QAAQ;GACnB,YAAY,MAAM,SAAS;EAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;CCtGU,OAAA,OAAA,WAAO,CAAM,OAAA,WAAO,MAAU,OAAA,YAAY,UADlDA,UAAA,GAAAC,YA2B4B,OAAA,8BAAA;;EAzBzB,iBAAe;EACf,eAAa,OAAA,eAAe,KAAA,IAAY,OAAA,EAAC,UAAA;EACzC,eAAa;EACb,OAAO,OAAA,UAAU,SAAK;EACtB,MAAI,wBAA0B,OAAA;EAC9B,cAAY,OAAA;;EAEF,eAAWC,cAIlB,CAHFC,YAGE,OAAA,mBAAA;GAFA,OAAM;GACL,gBAAc,OAAA,UAAU,OAAA,EAAC,sBAAA,IAA2B,KAAA;EAG9C,GAAA,MAAA,GAAA,CAAA,cAAA,CAAA,GAAA,CAAA,OAAA,WADTH,UAAA,GAAAC,YAWa,OAAA,eAAA;;GATV,eAAa,OAAA;GACb,sBAAoB,OAAA;;GAEV,cAAYC,SAInB,EAJuB,aAAM,CAC/BC,YAGE,OAAA,gBAAA;IAFA,OAAM;IACL,SAAS"}
@@ -1,11 +1,11 @@
1
1
  import { t as e } from "./ClassicLoading-CXfMjpyl.mjs";
2
- import { m as t, p as n, t as r } from "./classicApi-pmODlqv5.mjs";
2
+ import { m as t, p as n, t as r } from "./classicApi-CGipMqf7.mjs";
3
3
  import { t as i } from "./useResizePhone-4hSkK5pa.mjs";
4
- import { t as a } from "./useErrorHandler-D9W2BURn.mjs";
4
+ import { t as a } from "./useErrorHandler-x9sjDYSz.mjs";
5
5
  import { a as o } from "./podcast-BoNHyuLe.mjs";
6
- import { n as s, t as c } from "./usePresentationItem-DZZVm3hh.mjs";
6
+ import { n as s, t as c } from "./usePresentationItem-CLEGZwI3.mjs";
7
7
  import { t as l } from "./PresentationLayout-mRFZ6Bfa.mjs";
8
- import { t as u } from "./PodcastPlayButton-CQY0d6f-.mjs";
8
+ import { t as u } from "./PodcastPlayButton--gjzxW0o.mjs";
9
9
  import { createBlock as d, createVNode as f, defineComponent as p, normalizeClass as m, onMounted as h, openBlock as g, reactive as _, ref as v, unref as y, watch as b, withCtx as x } from "vue";
10
10
  //#endregion
11
11
  //#region src/components/display/podcasts/PodcastPresentationList.vue
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastPresentationList-ChqvdXY0.mjs","names":["classicApi","_openBlock","_createBlock","_withCtx","_createVNode","_normalizeClass","_sfc_main"],"sources":["../src/components/display/podcasts/PodcastPresentationList.vue","../src/components/display/podcasts/PodcastPresentationList.vue"],"sourcesContent":["<!--\n Simple component to display a few podcasts\n-->\n<template>\n <PresentationLayout\n v-if=\"!loading && !error\"\n :title=\"title\"\n :items=\"podcasts\"\n :route=\"href\"\n :button-text=\"buttonText\"\n >\n <template #item=\"{ item, first }\">\n <PresentationItem\n :class=\"!isPhone && first ? 'me-3' : ''\"\n :name=\"item.title\"\n :route=\"route(item)\"\n :image-url=\"item.imageUrl\"\n :description=\"item.description\"\n :vertical=\"!isPhone && first\"\n :tags=\"tags.get(item.podcastId)\"\n :additional-info=\"additionalInfo.get(item.podcastId)\"\n >\n <template #after-image>\n <PodcastPlayButton\n :podcast=\"item\"\n :hide-play=\"false\"\n :show-processing=\"false\"\n />\n </template>\n </PresentationItem>\n </template>\n </PresentationLayout>\n <ClassicLoading\n v-else\n :loading-text=\"loading ? $t('Loading emissions ...') : undefined\"\n :error-text=\"error ? $t(`Error`) : undefined\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport classicApi from \"../../../api/classicApi\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { Emission } from \"@/stores/class/general/emission\";\nimport { onMounted, reactive, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport {useResizePhone} from \"../../composable/useResizePhone\";\nimport { ListClassicReturn } from \"../../../stores/class/general/listReturn\";\n\nimport PresentationLayout from \"../../layouts/PresentationLayout.vue\"; \nimport { Podcast, SimplifiedPodcast, simplifiedToFull } from \"../../../stores/class/general/podcast\";\n\nimport PresentationItem from \"../../layouts/PresentationItem.vue\"; \nimport PodcastPlayButton from \"./PodcastPlayButton.vue\"; \nimport { RouteLocationRaw } from \"vue-router\";\nimport { podcastApi, PodcastSort } from \"../../../api/podcastApi\";\nimport { usePresentationItem } from \"../../composable/usePresentationItem\";\n\n//Props \nconst props = withDefaults(defineProps<{\n /**\n * ID of the organisation\n */\n organisationId?: string;\n /**\n * Title of the section\n */\n title?: string;\n /**\n * Link to the \"more\" section\n */\n href?: string;\n /**\n * Label for the \"more\" button\n */\n buttonText?: string;\n /**\n * Display podcasts exclusively from these rubriques\n */\n rubriquesId?: Array<number>;\n /**\n * Mode of retrieval for podcasts\n */\n retrievalMode?: 'by-emission'|'any';\n}>(), {\n retrievalMode: 'by-emission'\n});\n\n//Data \nconst loading = ref(true);\nconst error = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst tags = reactive(new Map<number, Array<string>>());\nconst additionalInfo = reactive(new Map<number, Array<string>>());\n \n//Composables\nconst { isPhone } = useResizePhone();\nconst { handle403 } = useErrorHandler();\nconst { tagsFor, additionalInfoFor } = usePresentationItem();\n\nonMounted(fetchNext);\n\nwatch(podcasts, async () => {\n podcasts.value.forEach(async (podcast) => {\n if (!tags.has(podcast.podcastId)) {\n const [t, i] = await Promise.all([\n tagsFor(podcast),\n additionalInfoFor(podcast)\n ]);\n tags.set(podcast.podcastId, t);\n additionalInfo.set(podcast.podcastId, i);\n }\n });\n});\n\n//Methods\nasync function fetchNext(): Promise<void> {\n loading.value = true;\n try {\n let func: () => Promise<Array<Podcast>>;\n if (props.retrievalMode === 'any') {\n func = fetchPodcasts;\n } else {\n func = fetchPodcastsByEmission;\n }\n const result = await func();\n\n // Sort podcasts by pub date so that the most recent one is focused\n podcasts.value = result.sort((p1, p2) => {\n return new Date(p2.pubDate).getTime() - new Date(p1.pubDate).getTime();\n });\n \n loading.value = false;\n } catch (errorWs) {\n console.error(errorWs);\n handle403(errorWs as AxiosError);\n error.value = true;\n }\n loading.value = false;\n}\n\nasync function fetchPodcasts(): Promise<Array<Podcast>> {\n const response = await podcastApi.searchFull({\n first: 0,\n size: 5,\n organisationId: [props.organisationId],\n sort: PodcastSort.DATE,\n rubriqueId: props.rubriquesId\n }, true);\n\n return response.result;\n}\n\nasync function fetchPodcastsByEmission(): Promise<Array<Podcast>> {\n // Retrieve latest emissions\n const emissions = await classicApi.fetchData<ListClassicReturn<Emission>>({\n api: 0,\n path: \"emission/search\",\n parameters: {\n first: 0,\n size: 5,\n organisationId: props.organisationId,\n sort: \"LAST_PODCAST_DESC\",\n rubriqueId: props.rubriquesId\n },\n specialTreatement: true\n });\n\n const promises: Array<Promise<SimplifiedPodcast>> = [];\n\n for (let i = 0; i < emissions.result.length; i++) {\n promises.push(podcastApi.search({\n first: 0,\n size: 1,\n organisationId: [props.organisationId],\n emissionId: [emissions.result[i].emissionId],\n sort: PodcastSort.DATE,\n rubriqueId: props.rubriquesId\n }, true).then(r => r.result[0]));\n }\n\n // Retrieve the podcasts for these emissions\n const data = await Promise.all(promises);\n\n return data.filter((em: SimplifiedPodcast | null) => null !== em && undefined !== em).map(p => {\n // Get emission from podcast\n const emission = emissions.result.find(e => e.emissionId === p.emissionId);\n // Create full podcast from simplified + emission\n return simplifiedToFull(p, emission.orga, emission);\n });\n}\n\nfunction route(podcast: Podcast): RouteLocationRaw {\n return {\n name: 'podcast',\n params: { podcastId: podcast.podcastId }\n }\n}\n</script>\n","<!--\n Simple component to display a few podcasts\n-->\n<template>\n <PresentationLayout\n v-if=\"!loading && !error\"\n :title=\"title\"\n :items=\"podcasts\"\n :route=\"href\"\n :button-text=\"buttonText\"\n >\n <template #item=\"{ item, first }\">\n <PresentationItem\n :class=\"!isPhone && first ? 'me-3' : ''\"\n :name=\"item.title\"\n :route=\"route(item)\"\n :image-url=\"item.imageUrl\"\n :description=\"item.description\"\n :vertical=\"!isPhone && first\"\n :tags=\"tags.get(item.podcastId)\"\n :additional-info=\"additionalInfo.get(item.podcastId)\"\n >\n <template #after-image>\n <PodcastPlayButton\n :podcast=\"item\"\n :hide-play=\"false\"\n :show-processing=\"false\"\n />\n </template>\n </PresentationItem>\n </template>\n </PresentationLayout>\n <ClassicLoading\n v-else\n :loading-text=\"loading ? $t('Loading emissions ...') : undefined\"\n :error-text=\"error ? $t(`Error`) : undefined\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport classicApi from \"../../../api/classicApi\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { Emission } from \"@/stores/class/general/emission\";\nimport { onMounted, reactive, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport {useResizePhone} from \"../../composable/useResizePhone\";\nimport { ListClassicReturn } from \"../../../stores/class/general/listReturn\";\n\nimport PresentationLayout from \"../../layouts/PresentationLayout.vue\"; \nimport { Podcast, SimplifiedPodcast, simplifiedToFull } from \"../../../stores/class/general/podcast\";\n\nimport PresentationItem from \"../../layouts/PresentationItem.vue\"; \nimport PodcastPlayButton from \"./PodcastPlayButton.vue\"; \nimport { RouteLocationRaw } from \"vue-router\";\nimport { podcastApi, PodcastSort } from \"../../../api/podcastApi\";\nimport { usePresentationItem } from \"../../composable/usePresentationItem\";\n\n//Props \nconst props = withDefaults(defineProps<{\n /**\n * ID of the organisation\n */\n organisationId?: string;\n /**\n * Title of the section\n */\n title?: string;\n /**\n * Link to the \"more\" section\n */\n href?: string;\n /**\n * Label for the \"more\" button\n */\n buttonText?: string;\n /**\n * Display podcasts exclusively from these rubriques\n */\n rubriquesId?: Array<number>;\n /**\n * Mode of retrieval for podcasts\n */\n retrievalMode?: 'by-emission'|'any';\n}>(), {\n retrievalMode: 'by-emission'\n});\n\n//Data \nconst loading = ref(true);\nconst error = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst tags = reactive(new Map<number, Array<string>>());\nconst additionalInfo = reactive(new Map<number, Array<string>>());\n \n//Composables\nconst { isPhone } = useResizePhone();\nconst { handle403 } = useErrorHandler();\nconst { tagsFor, additionalInfoFor } = usePresentationItem();\n\nonMounted(fetchNext);\n\nwatch(podcasts, async () => {\n podcasts.value.forEach(async (podcast) => {\n if (!tags.has(podcast.podcastId)) {\n const [t, i] = await Promise.all([\n tagsFor(podcast),\n additionalInfoFor(podcast)\n ]);\n tags.set(podcast.podcastId, t);\n additionalInfo.set(podcast.podcastId, i);\n }\n });\n});\n\n//Methods\nasync function fetchNext(): Promise<void> {\n loading.value = true;\n try {\n let func: () => Promise<Array<Podcast>>;\n if (props.retrievalMode === 'any') {\n func = fetchPodcasts;\n } else {\n func = fetchPodcastsByEmission;\n }\n const result = await func();\n\n // Sort podcasts by pub date so that the most recent one is focused\n podcasts.value = result.sort((p1, p2) => {\n return new Date(p2.pubDate).getTime() - new Date(p1.pubDate).getTime();\n });\n \n loading.value = false;\n } catch (errorWs) {\n console.error(errorWs);\n handle403(errorWs as AxiosError);\n error.value = true;\n }\n loading.value = false;\n}\n\nasync function fetchPodcasts(): Promise<Array<Podcast>> {\n const response = await podcastApi.searchFull({\n first: 0,\n size: 5,\n organisationId: [props.organisationId],\n sort: PodcastSort.DATE,\n rubriqueId: props.rubriquesId\n }, true);\n\n return response.result;\n}\n\nasync function fetchPodcastsByEmission(): Promise<Array<Podcast>> {\n // Retrieve latest emissions\n const emissions = await classicApi.fetchData<ListClassicReturn<Emission>>({\n api: 0,\n path: \"emission/search\",\n parameters: {\n first: 0,\n size: 5,\n organisationId: props.organisationId,\n sort: \"LAST_PODCAST_DESC\",\n rubriqueId: props.rubriquesId\n },\n specialTreatement: true\n });\n\n const promises: Array<Promise<SimplifiedPodcast>> = [];\n\n for (let i = 0; i < emissions.result.length; i++) {\n promises.push(podcastApi.search({\n first: 0,\n size: 1,\n organisationId: [props.organisationId],\n emissionId: [emissions.result[i].emissionId],\n sort: PodcastSort.DATE,\n rubriqueId: props.rubriquesId\n }, true).then(r => r.result[0]));\n }\n\n // Retrieve the podcasts for these emissions\n const data = await Promise.all(promises);\n\n return data.filter((em: SimplifiedPodcast | null) => null !== em && undefined !== em).map(p => {\n // Get emission from podcast\n const emission = emissions.result.find(e => e.emissionId === p.emissionId);\n // Create full podcast from simplified + emission\n return simplifiedToFull(p, emission.orga, emission);\n });\n}\n\nfunction route(podcast: Podcast): RouteLocationRaw {\n return {\n name: 'podcast',\n params: { podcastId: podcast.podcastId }\n }\n}\n</script>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastPresentationList-Dit6HvJr.mjs","names":["classicApi","_openBlock","_createBlock","_withCtx","_createVNode","_normalizeClass","_sfc_main"],"sources":["../src/components/display/podcasts/PodcastPresentationList.vue","../src/components/display/podcasts/PodcastPresentationList.vue"],"sourcesContent":["<!--\n Simple component to display a few podcasts\n-->\n<template>\n <PresentationLayout\n v-if=\"!loading && !error\"\n :title=\"title\"\n :items=\"podcasts\"\n :route=\"href\"\n :button-text=\"buttonText\"\n >\n <template #item=\"{ item, first }\">\n <PresentationItem\n :class=\"!isPhone && first ? 'me-3' : ''\"\n :name=\"item.title\"\n :route=\"route(item)\"\n :image-url=\"item.imageUrl\"\n :description=\"item.description\"\n :vertical=\"!isPhone && first\"\n :tags=\"tags.get(item.podcastId)\"\n :additional-info=\"additionalInfo.get(item.podcastId)\"\n >\n <template #after-image>\n <PodcastPlayButton\n :podcast=\"item\"\n :hide-play=\"false\"\n :show-processing=\"false\"\n />\n </template>\n </PresentationItem>\n </template>\n </PresentationLayout>\n <ClassicLoading\n v-else\n :loading-text=\"loading ? $t('Loading emissions ...') : undefined\"\n :error-text=\"error ? $t(`Error`) : undefined\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport classicApi from \"../../../api/classicApi\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { Emission } from \"@/stores/class/general/emission\";\nimport { onMounted, reactive, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport {useResizePhone} from \"../../composable/useResizePhone\";\nimport { ListClassicReturn } from \"../../../stores/class/general/listReturn\";\n\nimport PresentationLayout from \"../../layouts/PresentationLayout.vue\"; \nimport { Podcast, SimplifiedPodcast, simplifiedToFull } from \"../../../stores/class/general/podcast\";\n\nimport PresentationItem from \"../../layouts/PresentationItem.vue\"; \nimport PodcastPlayButton from \"./PodcastPlayButton.vue\"; \nimport { RouteLocationRaw } from \"vue-router\";\nimport { podcastApi, PodcastSort } from \"../../../api/podcastApi\";\nimport { usePresentationItem } from \"../../composable/usePresentationItem\";\n\n//Props \nconst props = withDefaults(defineProps<{\n /**\n * ID of the organisation\n */\n organisationId?: string;\n /**\n * Title of the section\n */\n title?: string;\n /**\n * Link to the \"more\" section\n */\n href?: string;\n /**\n * Label for the \"more\" button\n */\n buttonText?: string;\n /**\n * Display podcasts exclusively from these rubriques\n */\n rubriquesId?: Array<number>;\n /**\n * Mode of retrieval for podcasts\n */\n retrievalMode?: 'by-emission'|'any';\n}>(), {\n retrievalMode: 'by-emission'\n});\n\n//Data \nconst loading = ref(true);\nconst error = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst tags = reactive(new Map<number, Array<string>>());\nconst additionalInfo = reactive(new Map<number, Array<string>>());\n \n//Composables\nconst { isPhone } = useResizePhone();\nconst { handle403 } = useErrorHandler();\nconst { tagsFor, additionalInfoFor } = usePresentationItem();\n\nonMounted(fetchNext);\n\nwatch(podcasts, async () => {\n podcasts.value.forEach(async (podcast) => {\n if (!tags.has(podcast.podcastId)) {\n const [t, i] = await Promise.all([\n tagsFor(podcast),\n additionalInfoFor(podcast)\n ]);\n tags.set(podcast.podcastId, t);\n additionalInfo.set(podcast.podcastId, i);\n }\n });\n});\n\n//Methods\nasync function fetchNext(): Promise<void> {\n loading.value = true;\n try {\n let func: () => Promise<Array<Podcast>>;\n if (props.retrievalMode === 'any') {\n func = fetchPodcasts;\n } else {\n func = fetchPodcastsByEmission;\n }\n const result = await func();\n\n // Sort podcasts by pub date so that the most recent one is focused\n podcasts.value = result.sort((p1, p2) => {\n return new Date(p2.pubDate).getTime() - new Date(p1.pubDate).getTime();\n });\n \n loading.value = false;\n } catch (errorWs) {\n console.error(errorWs);\n handle403(errorWs as AxiosError);\n error.value = true;\n }\n loading.value = false;\n}\n\nasync function fetchPodcasts(): Promise<Array<Podcast>> {\n const response = await podcastApi.searchFull({\n first: 0,\n size: 5,\n organisationId: [props.organisationId],\n sort: PodcastSort.DATE,\n rubriqueId: props.rubriquesId\n }, true);\n\n return response.result;\n}\n\nasync function fetchPodcastsByEmission(): Promise<Array<Podcast>> {\n // Retrieve latest emissions\n const emissions = await classicApi.fetchData<ListClassicReturn<Emission>>({\n api: 0,\n path: \"emission/search\",\n parameters: {\n first: 0,\n size: 5,\n organisationId: props.organisationId,\n sort: \"LAST_PODCAST_DESC\",\n rubriqueId: props.rubriquesId\n },\n specialTreatement: true\n });\n\n const promises: Array<Promise<SimplifiedPodcast>> = [];\n\n for (let i = 0; i < emissions.result.length; i++) {\n promises.push(podcastApi.search({\n first: 0,\n size: 1,\n organisationId: [props.organisationId],\n emissionId: [emissions.result[i].emissionId],\n sort: PodcastSort.DATE,\n rubriqueId: props.rubriquesId\n }, true).then(r => r.result[0]));\n }\n\n // Retrieve the podcasts for these emissions\n const data = await Promise.all(promises);\n\n return data.filter((em: SimplifiedPodcast | null) => null !== em && undefined !== em).map(p => {\n // Get emission from podcast\n const emission = emissions.result.find(e => e.emissionId === p.emissionId);\n // Create full podcast from simplified + emission\n return simplifiedToFull(p, emission.orga, emission);\n });\n}\n\nfunction route(podcast: Podcast): RouteLocationRaw {\n return {\n name: 'podcast',\n params: { podcastId: podcast.podcastId }\n }\n}\n</script>\n","<!--\n Simple component to display a few podcasts\n-->\n<template>\n <PresentationLayout\n v-if=\"!loading && !error\"\n :title=\"title\"\n :items=\"podcasts\"\n :route=\"href\"\n :button-text=\"buttonText\"\n >\n <template #item=\"{ item, first }\">\n <PresentationItem\n :class=\"!isPhone && first ? 'me-3' : ''\"\n :name=\"item.title\"\n :route=\"route(item)\"\n :image-url=\"item.imageUrl\"\n :description=\"item.description\"\n :vertical=\"!isPhone && first\"\n :tags=\"tags.get(item.podcastId)\"\n :additional-info=\"additionalInfo.get(item.podcastId)\"\n >\n <template #after-image>\n <PodcastPlayButton\n :podcast=\"item\"\n :hide-play=\"false\"\n :show-processing=\"false\"\n />\n </template>\n </PresentationItem>\n </template>\n </PresentationLayout>\n <ClassicLoading\n v-else\n :loading-text=\"loading ? $t('Loading emissions ...') : undefined\"\n :error-text=\"error ? $t(`Error`) : undefined\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport classicApi from \"../../../api/classicApi\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { Emission } from \"@/stores/class/general/emission\";\nimport { onMounted, reactive, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport {useResizePhone} from \"../../composable/useResizePhone\";\nimport { ListClassicReturn } from \"../../../stores/class/general/listReturn\";\n\nimport PresentationLayout from \"../../layouts/PresentationLayout.vue\"; \nimport { Podcast, SimplifiedPodcast, simplifiedToFull } from \"../../../stores/class/general/podcast\";\n\nimport PresentationItem from \"../../layouts/PresentationItem.vue\"; \nimport PodcastPlayButton from \"./PodcastPlayButton.vue\"; \nimport { RouteLocationRaw } from \"vue-router\";\nimport { podcastApi, PodcastSort } from \"../../../api/podcastApi\";\nimport { usePresentationItem } from \"../../composable/usePresentationItem\";\n\n//Props \nconst props = withDefaults(defineProps<{\n /**\n * ID of the organisation\n */\n organisationId?: string;\n /**\n * Title of the section\n */\n title?: string;\n /**\n * Link to the \"more\" section\n */\n href?: string;\n /**\n * Label for the \"more\" button\n */\n buttonText?: string;\n /**\n * Display podcasts exclusively from these rubriques\n */\n rubriquesId?: Array<number>;\n /**\n * Mode of retrieval for podcasts\n */\n retrievalMode?: 'by-emission'|'any';\n}>(), {\n retrievalMode: 'by-emission'\n});\n\n//Data \nconst loading = ref(true);\nconst error = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst tags = reactive(new Map<number, Array<string>>());\nconst additionalInfo = reactive(new Map<number, Array<string>>());\n \n//Composables\nconst { isPhone } = useResizePhone();\nconst { handle403 } = useErrorHandler();\nconst { tagsFor, additionalInfoFor } = usePresentationItem();\n\nonMounted(fetchNext);\n\nwatch(podcasts, async () => {\n podcasts.value.forEach(async (podcast) => {\n if (!tags.has(podcast.podcastId)) {\n const [t, i] = await Promise.all([\n tagsFor(podcast),\n additionalInfoFor(podcast)\n ]);\n tags.set(podcast.podcastId, t);\n additionalInfo.set(podcast.podcastId, i);\n }\n });\n});\n\n//Methods\nasync function fetchNext(): Promise<void> {\n loading.value = true;\n try {\n let func: () => Promise<Array<Podcast>>;\n if (props.retrievalMode === 'any') {\n func = fetchPodcasts;\n } else {\n func = fetchPodcastsByEmission;\n }\n const result = await func();\n\n // Sort podcasts by pub date so that the most recent one is focused\n podcasts.value = result.sort((p1, p2) => {\n return new Date(p2.pubDate).getTime() - new Date(p1.pubDate).getTime();\n });\n \n loading.value = false;\n } catch (errorWs) {\n console.error(errorWs);\n handle403(errorWs as AxiosError);\n error.value = true;\n }\n loading.value = false;\n}\n\nasync function fetchPodcasts(): Promise<Array<Podcast>> {\n const response = await podcastApi.searchFull({\n first: 0,\n size: 5,\n organisationId: [props.organisationId],\n sort: PodcastSort.DATE,\n rubriqueId: props.rubriquesId\n }, true);\n\n return response.result;\n}\n\nasync function fetchPodcastsByEmission(): Promise<Array<Podcast>> {\n // Retrieve latest emissions\n const emissions = await classicApi.fetchData<ListClassicReturn<Emission>>({\n api: 0,\n path: \"emission/search\",\n parameters: {\n first: 0,\n size: 5,\n organisationId: props.organisationId,\n sort: \"LAST_PODCAST_DESC\",\n rubriqueId: props.rubriquesId\n },\n specialTreatement: true\n });\n\n const promises: Array<Promise<SimplifiedPodcast>> = [];\n\n for (let i = 0; i < emissions.result.length; i++) {\n promises.push(podcastApi.search({\n first: 0,\n size: 1,\n organisationId: [props.organisationId],\n emissionId: [emissions.result[i].emissionId],\n sort: PodcastSort.DATE,\n rubriqueId: props.rubriquesId\n }, true).then(r => r.result[0]));\n }\n\n // Retrieve the podcasts for these emissions\n const data = await Promise.all(promises);\n\n return data.filter((em: SimplifiedPodcast | null) => null !== em && undefined !== em).map(p => {\n // Get emission from podcast\n const emission = emissions.result.find(e => e.emissionId === p.emissionId);\n // Create full podcast from simplified + emission\n return simplifiedToFull(p, emission.orga, emission);\n });\n}\n\nfunction route(podcast: Podcast): RouteLocationRaw {\n return {\n name: 'podcast',\n params: { podcastId: podcast.podcastId }\n }\n}\n</script>\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { n as e } from "./PlayerStore-CKprkxa0.mjs";
2
- import { t } from "./ProgressBar-CTOa-MDz.mjs";
1
+ import { n as e } from "./PlayerStore-DggKki80.mjs";
2
+ import { t } from "./ProgressBar-CXB5q3-H.mjs";
3
3
  import { Fragment as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, defineAsyncComponent as s, defineComponent as c, normalizeClass as l, openBlock as u, unref as d } from "vue";
4
4
  //#endregion
5
5
  //#region src/components/misc/player/progressbar/PodcastProgressBar.vue
@@ -36,7 +36,7 @@ var f = /* @__PURE__ */ c({
36
36
  }
37
37
  },
38
38
  setup(c) {
39
- let f = s(() => import("./CommentPlayer-D3JEVPKX.mjs")), p = c, m = e(), h = r(() => m.playerElapsed ? m.playerElapsed * 100 : 0);
39
+ let f = s(() => import("./CommentPlayer-B4MXG-gG.mjs")), p = c, m = e(), h = r(() => m.playerElapsed ? m.playerElapsed * 100 : 0);
40
40
  function g(e) {
41
41
  let t = document.querySelector("#audio-player");
42
42
  if (!t || e.currentTarget === null) return;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastProgressBar-B8ONWq-Z.mjs","names":["_openBlock","_createElementBlock","_Fragment","_createBlock","_normalizeClass","_createCommentVNode","_sfc_main"],"sources":["../src/components/misc/player/progressbar/PodcastProgressBar.vue","../src/components/misc/player/progressbar/PodcastProgressBar.vue"],"sourcesContent":["<template>\n <ProgressBar\n v-if=\"!playerError\"\n :main-progress=\"percentProgress\"\n :secondary-progress=\"percentLiveProgress\"\n :alert-bar=\"displayAlertBar ? durationLivePosition : undefined\"\n :class=\"classProgress\"\n :in-player=\"true\"\n @mouseup=\"seekTo\"\n />\n <CommentPlayer v-if=\"showComments\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport ProgressBar from \"../../ProgressBar.vue\";\nimport { defineAsyncComponent, computed } from \"vue\";\nconst CommentPlayer = defineAsyncComponent(\n () => import(\"../../../display/comments/CommentPlayer.vue\"),\n);\n\n//Props \nconst props = defineProps({\n classProgress: { default: \"\", type: String },\n showComments: { default: false, type: Boolean },\n displayAlertBar: { default: false, type: Boolean },\n percentLiveProgress: { default: 0, type: Number },\n durationLivePosition: { default: 0, type: Number },\n playerError: { default: false, type: Boolean },\n listenTime: { default: 0, type: Number },\n})\n\n//Composables\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst percentProgress = computed(() => {\n if (!playerStore.playerElapsed) {\n return 0;\n }\n return playerStore.playerElapsed * 100;\n});\n\n\n//Methods\nfunction seekTo(event: MouseEvent): void {\n const audioPlayer: HTMLAudioElement | null =\n document.querySelector(\"#audio-player\");\n if (!audioPlayer || null === event.currentTarget) {\n return;\n }\n const rect = (event.currentTarget as Element).getBoundingClientRect();\n const barWidth = (event.currentTarget as Element).clientWidth;\n const x = event.clientX - rect.left;\n const percentPosition = x / barWidth;\n if (playerStore.playerLive && percentPosition * 100 >= props.percentLiveProgress) return;\n const seekTime = playerStore.playerTotal * percentPosition;\n isSeekTo(audioPlayer, seekTime);\n}\nfunction isSeekTo(audioPlayer: HTMLAudioElement, seekTime: number): void {\n if (playerStore.playerPodcast || playerStore.playerLive) {\n playerStore.playerUpdateSeekTime(seekTime);\n } else {\n audioPlayer.currentTime = seekTime;\n }\n}\n</script>\n","<template>\n <ProgressBar\n v-if=\"!playerError\"\n :main-progress=\"percentProgress\"\n :secondary-progress=\"percentLiveProgress\"\n :alert-bar=\"displayAlertBar ? durationLivePosition : undefined\"\n :class=\"classProgress\"\n :in-player=\"true\"\n @mouseup=\"seekTo\"\n />\n <CommentPlayer v-if=\"showComments\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport ProgressBar from \"../../ProgressBar.vue\";\nimport { defineAsyncComponent, computed } from \"vue\";\nconst CommentPlayer = defineAsyncComponent(\n () => import(\"../../../display/comments/CommentPlayer.vue\"),\n);\n\n//Props \nconst props = defineProps({\n classProgress: { default: \"\", type: String },\n showComments: { default: false, type: Boolean },\n displayAlertBar: { default: false, type: Boolean },\n percentLiveProgress: { default: 0, type: Number },\n durationLivePosition: { default: 0, type: Number },\n playerError: { default: false, type: Boolean },\n listenTime: { default: 0, type: Number },\n})\n\n//Composables\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst percentProgress = computed(() => {\n if (!playerStore.playerElapsed) {\n return 0;\n }\n return playerStore.playerElapsed * 100;\n});\n\n\n//Methods\nfunction seekTo(event: MouseEvent): void {\n const audioPlayer: HTMLAudioElement | null =\n document.querySelector(\"#audio-player\");\n if (!audioPlayer || null === event.currentTarget) {\n return;\n }\n const rect = (event.currentTarget as Element).getBoundingClientRect();\n const barWidth = (event.currentTarget as Element).clientWidth;\n const x = event.clientX - rect.left;\n const percentPosition = x / barWidth;\n if (playerStore.playerLive && percentPosition * 100 >= props.percentLiveProgress) return;\n const seekTime = playerStore.playerTotal * percentPosition;\n isSeekTo(audioPlayer, seekTime);\n}\nfunction isSeekTo(audioPlayer: HTMLAudioElement, seekTime: number): void {\n if (playerStore.playerPodcast || playerStore.playerLive) {\n playerStore.playerUpdateSeekTime(seekTime);\n } else {\n audioPlayer.currentTime = seekTime;\n }\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBA,MAAM,gBAAgB,2BACd,OAAO,+BACf;EAGA,MAAM,QAAQ;EAWd,MAAM,cAAc,eAAe;EAInC,MAAM,kBAAkB,eAAe;GACrC,IAAI,CAAC,YAAY,eACf,OAAO;GAET,OAAO,YAAY,gBAAgB;EACrC,CAAC;EAID,SAAS,OAAO,OAAyB;GACvC,MAAM,cACJ,SAAS,cAAc,eAAe;GACxC,IAAI,CAAC,eAAe,SAAS,MAAM,eACjC;GAEF,MAAM,OAAQ,MAAM,cAA0B,sBAAsB;GACpE,MAAM,WAAY,MAAM,cAA0B;GAElD,MAAM,mBADI,MAAM,UAAU,KAAK,QACH;GAC5B,IAAI,YAAY,cAAc,kBAAkB,OAAO,MAAM,qBAAqB;GAElF,SAAS,aADQ,YAAY,cAAc,eACb;EAChC;EACA,SAAS,SAAS,aAA+B,UAAwB;GACvE,IAAI,YAAY,iBAAiB,YAAY,YAC3C,YAAY,qBAAqB,QAAQ;QAEzC,YAAY,cAAc;EAE9B;;;;;;;;;;;;;;;;;;;;CChEW,OAAA,UAAA,GAAA,mBAAA,UAAA,MAAA,CAAA,CAAA,OAAA,eADTA,UAAA,GAAAG,YAQE,OAAA,gBAAA;;EANC,iBAAe,OAAA;EACf,sBAAoB,OAAA;EACpB,aAAW,OAAA,kBAAkB,OAAA,uBAAuB,KAAA;EACpD,OAAKC,eAAE,OAAA,aAAa;EACpB,aAAW;EACX,WAAS,OAAA;;;;;;CAES,CAAA,KAAAC,mBAAA,QAAA,IAAA,GAAA,OAAA,gBAArBL,UAAA,GAAAG,YAAqC,OAAA,kBAAA,EAAA,KAAA,EAAA,CAAA,KAAAE,mBAAA,QAAA,IAAA,CAAA,GAAA,EAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastProgressBar-BoGtJPAa.mjs","names":["_openBlock","_createElementBlock","_Fragment","_createBlock","_normalizeClass","_createCommentVNode","_sfc_main"],"sources":["../src/components/misc/player/progressbar/PodcastProgressBar.vue","../src/components/misc/player/progressbar/PodcastProgressBar.vue"],"sourcesContent":["<template>\n <ProgressBar\n v-if=\"!playerError\"\n :main-progress=\"percentProgress\"\n :secondary-progress=\"percentLiveProgress\"\n :alert-bar=\"displayAlertBar ? durationLivePosition : undefined\"\n :class=\"classProgress\"\n :in-player=\"true\"\n @mouseup=\"seekTo\"\n />\n <CommentPlayer v-if=\"showComments\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport ProgressBar from \"../../ProgressBar.vue\";\nimport { defineAsyncComponent, computed } from \"vue\";\nconst CommentPlayer = defineAsyncComponent(\n () => import(\"../../../display/comments/CommentPlayer.vue\"),\n);\n\n//Props \nconst props = defineProps({\n classProgress: { default: \"\", type: String },\n showComments: { default: false, type: Boolean },\n displayAlertBar: { default: false, type: Boolean },\n percentLiveProgress: { default: 0, type: Number },\n durationLivePosition: { default: 0, type: Number },\n playerError: { default: false, type: Boolean },\n listenTime: { default: 0, type: Number },\n})\n\n//Composables\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst percentProgress = computed(() => {\n if (!playerStore.playerElapsed) {\n return 0;\n }\n return playerStore.playerElapsed * 100;\n});\n\n\n//Methods\nfunction seekTo(event: MouseEvent): void {\n const audioPlayer: HTMLAudioElement | null =\n document.querySelector(\"#audio-player\");\n if (!audioPlayer || null === event.currentTarget) {\n return;\n }\n const rect = (event.currentTarget as Element).getBoundingClientRect();\n const barWidth = (event.currentTarget as Element).clientWidth;\n const x = event.clientX - rect.left;\n const percentPosition = x / barWidth;\n if (playerStore.playerLive && percentPosition * 100 >= props.percentLiveProgress) return;\n const seekTime = playerStore.playerTotal * percentPosition;\n isSeekTo(audioPlayer, seekTime);\n}\nfunction isSeekTo(audioPlayer: HTMLAudioElement, seekTime: number): void {\n if (playerStore.playerPodcast || playerStore.playerLive) {\n playerStore.playerUpdateSeekTime(seekTime);\n } else {\n audioPlayer.currentTime = seekTime;\n }\n}\n</script>\n","<template>\n <ProgressBar\n v-if=\"!playerError\"\n :main-progress=\"percentProgress\"\n :secondary-progress=\"percentLiveProgress\"\n :alert-bar=\"displayAlertBar ? durationLivePosition : undefined\"\n :class=\"classProgress\"\n :in-player=\"true\"\n @mouseup=\"seekTo\"\n />\n <CommentPlayer v-if=\"showComments\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport ProgressBar from \"../../ProgressBar.vue\";\nimport { defineAsyncComponent, computed } from \"vue\";\nconst CommentPlayer = defineAsyncComponent(\n () => import(\"../../../display/comments/CommentPlayer.vue\"),\n);\n\n//Props \nconst props = defineProps({\n classProgress: { default: \"\", type: String },\n showComments: { default: false, type: Boolean },\n displayAlertBar: { default: false, type: Boolean },\n percentLiveProgress: { default: 0, type: Number },\n durationLivePosition: { default: 0, type: Number },\n playerError: { default: false, type: Boolean },\n listenTime: { default: 0, type: Number },\n})\n\n//Composables\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst percentProgress = computed(() => {\n if (!playerStore.playerElapsed) {\n return 0;\n }\n return playerStore.playerElapsed * 100;\n});\n\n\n//Methods\nfunction seekTo(event: MouseEvent): void {\n const audioPlayer: HTMLAudioElement | null =\n document.querySelector(\"#audio-player\");\n if (!audioPlayer || null === event.currentTarget) {\n return;\n }\n const rect = (event.currentTarget as Element).getBoundingClientRect();\n const barWidth = (event.currentTarget as Element).clientWidth;\n const x = event.clientX - rect.left;\n const percentPosition = x / barWidth;\n if (playerStore.playerLive && percentPosition * 100 >= props.percentLiveProgress) return;\n const seekTime = playerStore.playerTotal * percentPosition;\n isSeekTo(audioPlayer, seekTime);\n}\nfunction isSeekTo(audioPlayer: HTMLAudioElement, seekTime: number): void {\n if (playerStore.playerPodcast || playerStore.playerLive) {\n playerStore.playerUpdateSeekTime(seekTime);\n } else {\n audioPlayer.currentTime = seekTime;\n }\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBA,MAAM,gBAAgB,2BACd,OAAO,+BACf;EAGA,MAAM,QAAQ;EAWd,MAAM,cAAc,eAAe;EAInC,MAAM,kBAAkB,eAAe;GACrC,IAAI,CAAC,YAAY,eACf,OAAO;GAET,OAAO,YAAY,gBAAgB;EACrC,CAAC;EAID,SAAS,OAAO,OAAyB;GACvC,MAAM,cACJ,SAAS,cAAc,eAAe;GACxC,IAAI,CAAC,eAAe,SAAS,MAAM,eACjC;GAEF,MAAM,OAAQ,MAAM,cAA0B,sBAAsB;GACpE,MAAM,WAAY,MAAM,cAA0B;GAElD,MAAM,mBADI,MAAM,UAAU,KAAK,QACH;GAC5B,IAAI,YAAY,cAAc,kBAAkB,OAAO,MAAM,qBAAqB;GAElF,SAAS,aADQ,YAAY,cAAc,eACb;EAChC;EACA,SAAS,SAAS,aAA+B,UAAwB;GACvE,IAAI,YAAY,iBAAiB,YAAY,YAC3C,YAAY,qBAAqB,QAAQ;QAEzC,YAAY,cAAc;EAE9B;;;;;;;;;;;;;;;;;;;;CChEW,OAAA,UAAA,GAAA,mBAAA,UAAA,MAAA,CAAA,CAAA,OAAA,eADTA,UAAA,GAAAG,YAQE,OAAA,gBAAA;;EANC,iBAAe,OAAA;EACf,sBAAoB,OAAA;EACpB,aAAW,OAAA,kBAAkB,OAAA,uBAAuB,KAAA;EACpD,OAAKC,eAAE,OAAA,aAAa;EACpB,aAAW;EACX,WAAS,OAAA;;;;;;CAES,CAAA,KAAAC,mBAAA,QAAA,IAAA,GAAA,OAAA,gBAArBL,UAAA,GAAAG,YAAqC,OAAA,kBAAA,EAAA,KAAA,EAAA,CAAA,KAAAE,mBAAA,QAAA,IAAA,CAAA,GAAA,EAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastProgressBar-DTRhKzW-.mjs","names":["_openBlock","_createElementBlock","_Fragment","_createBlock","_normalizeClass","_createCommentVNode","_sfc_main"],"sources":["../src/components/misc/player/progressbar/PodcastProgressBar.vue","../src/components/misc/player/progressbar/PodcastProgressBar.vue"],"sourcesContent":["<template>\n <ProgressBar\n v-if=\"!playerError\"\n :main-progress=\"percentProgress\"\n :secondary-progress=\"percentLiveProgress\"\n :alert-bar=\"displayAlertBar ? durationLivePosition : undefined\"\n :class=\"classProgress\"\n :in-player=\"true\"\n @mouseup=\"seekTo\"\n />\n <CommentPlayer v-if=\"showComments\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport ProgressBar from \"../../ProgressBar.vue\";\nimport { defineAsyncComponent, computed } from \"vue\";\nconst CommentPlayer = defineAsyncComponent(\n () => import(\"../../../display/comments/CommentPlayer.vue\"),\n);\n\n//Props \nconst props = defineProps({\n classProgress: { default: \"\", type: String },\n showComments: { default: false, type: Boolean },\n displayAlertBar: { default: false, type: Boolean },\n percentLiveProgress: { default: 0, type: Number },\n durationLivePosition: { default: 0, type: Number },\n playerError: { default: false, type: Boolean },\n listenTime: { default: 0, type: Number },\n})\n\n//Composables\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst percentProgress = computed(() => {\n if (!playerStore.playerElapsed) {\n return 0;\n }\n return playerStore.playerElapsed * 100;\n});\n\n\n//Methods\nfunction seekTo(event: MouseEvent): void {\n const audioPlayer: HTMLAudioElement | null =\n document.querySelector(\"#audio-player\");\n if (!audioPlayer || null === event.currentTarget) {\n return;\n }\n const rect = (event.currentTarget as Element).getBoundingClientRect();\n const barWidth = (event.currentTarget as Element).clientWidth;\n const x = event.clientX - rect.left;\n const percentPosition = x / barWidth;\n if (playerStore.playerLive && percentPosition * 100 >= props.percentLiveProgress) return;\n const seekTime = playerStore.playerTotal * percentPosition;\n isSeekTo(audioPlayer, seekTime);\n}\nfunction isSeekTo(audioPlayer: HTMLAudioElement, seekTime: number): void {\n if (playerStore.playerPodcast || playerStore.playerLive) {\n playerStore.playerUpdateSeekTime(seekTime);\n } else {\n audioPlayer.currentTime = seekTime;\n }\n}\n</script>\n","<template>\n <ProgressBar\n v-if=\"!playerError\"\n :main-progress=\"percentProgress\"\n :secondary-progress=\"percentLiveProgress\"\n :alert-bar=\"displayAlertBar ? durationLivePosition : undefined\"\n :class=\"classProgress\"\n :in-player=\"true\"\n @mouseup=\"seekTo\"\n />\n <CommentPlayer v-if=\"showComments\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport ProgressBar from \"../../ProgressBar.vue\";\nimport { defineAsyncComponent, computed } from \"vue\";\nconst CommentPlayer = defineAsyncComponent(\n () => import(\"../../../display/comments/CommentPlayer.vue\"),\n);\n\n//Props \nconst props = defineProps({\n classProgress: { default: \"\", type: String },\n showComments: { default: false, type: Boolean },\n displayAlertBar: { default: false, type: Boolean },\n percentLiveProgress: { default: 0, type: Number },\n durationLivePosition: { default: 0, type: Number },\n playerError: { default: false, type: Boolean },\n listenTime: { default: 0, type: Number },\n})\n\n//Composables\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst percentProgress = computed(() => {\n if (!playerStore.playerElapsed) {\n return 0;\n }\n return playerStore.playerElapsed * 100;\n});\n\n\n//Methods\nfunction seekTo(event: MouseEvent): void {\n const audioPlayer: HTMLAudioElement | null =\n document.querySelector(\"#audio-player\");\n if (!audioPlayer || null === event.currentTarget) {\n return;\n }\n const rect = (event.currentTarget as Element).getBoundingClientRect();\n const barWidth = (event.currentTarget as Element).clientWidth;\n const x = event.clientX - rect.left;\n const percentPosition = x / barWidth;\n if (playerStore.playerLive && percentPosition * 100 >= props.percentLiveProgress) return;\n const seekTime = playerStore.playerTotal * percentPosition;\n isSeekTo(audioPlayer, seekTime);\n}\nfunction isSeekTo(audioPlayer: HTMLAudioElement, seekTime: number): void {\n if (playerStore.playerPodcast || playerStore.playerLive) {\n playerStore.playerUpdateSeekTime(seekTime);\n } else {\n audioPlayer.currentTime = seekTime;\n }\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBA,MAAM,gBAAgB,2BACd,OAAO,+BACf;EAGA,MAAM,QAAQ;EAWd,MAAM,cAAc,eAAe;EAInC,MAAM,kBAAkB,eAAe;GACrC,IAAI,CAAC,YAAY,eACf,OAAO;GAET,OAAO,YAAY,gBAAgB;EACrC,CAAC;EAID,SAAS,OAAO,OAAyB;GACvC,MAAM,cACJ,SAAS,cAAc,eAAe;GACxC,IAAI,CAAC,eAAe,SAAS,MAAM,eACjC;GAEF,MAAM,OAAQ,MAAM,cAA0B,sBAAsB;GACpE,MAAM,WAAY,MAAM,cAA0B;GAElD,MAAM,mBADI,MAAM,UAAU,KAAK,QACH;GAC5B,IAAI,YAAY,cAAc,kBAAkB,OAAO,MAAM,qBAAqB;GAElF,SAAS,aADQ,YAAY,cAAc,eACb;EAChC;EACA,SAAS,SAAS,aAA+B,UAAwB;GACvE,IAAI,YAAY,iBAAiB,YAAY,YAC3C,YAAY,qBAAqB,QAAQ;QAEzC,YAAY,cAAc;EAE9B;;;;;;;;;;;;;;;;;;;;CChEW,OAAA,UAAA,GAAA,mBAAA,UAAA,MAAA,CAAA,CAAA,OAAA,eADTA,UAAA,GAAAG,YAQE,OAAA,gBAAA;;EANC,iBAAe,OAAA;EACf,sBAAoB,OAAA;EACpB,aAAW,OAAA,kBAAkB,OAAA,uBAAuB,KAAA;EACpD,OAAKC,eAAE,OAAA,aAAa;EACpB,aAAW;EACX,WAAS,OAAA;;;;;;CAES,CAAA,KAAAC,mBAAA,QAAA,IAAA,GAAA,OAAA,gBAArBL,UAAA,GAAAG,YAAqC,OAAA,kBAAA,EAAA,KAAA,EAAA,CAAA,KAAAE,mBAAA,QAAA,IAAA,CAAA,GAAA,EAAA"}
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./ClassicLoading-CXfMjpyl.mjs";
2
- import { S as t, x as n } from "./classicApi-pmODlqv5.mjs";
2
+ import { C as t, S as n } from "./classicApi-CGipMqf7.mjs";
3
3
  import { t as r } from "./ClassicSelect-BpA0jKN6.mjs";
4
4
  import { t as i } from "./_plugin-vue_export-helper-B3ysoDQm.mjs";
5
- import { t as a } from "./useTranslation-Dr7KU7Y4.mjs";
5
+ import { t as a } from "./useTranslation-BVQwv02Q.mjs";
6
6
  import { t as o } from "./cookiesHelper-5uZhLulK.mjs";
7
7
  import { Fragment as s, computed as c, createBlock as l, createCommentVNode as u, createElementBlock as d, createElementVNode as f, createTextVNode as p, createVNode as m, defineAsyncComponent as h, defineComponent as g, normalizeClass as _, openBlock as v, ref as y, toDisplayString as b, unref as x, watch as S } from "vue";
8
8
  import { useI18n as C } from "vue-i18n";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastRawTranscript-C8SJcaQE.mjs","names":["cookiesHelper","_openBlock","_createElementBlock","_createBlock","_createCommentVNode","_createElementVNode","_createVNode","_createTextVNode","_toDisplayString","_normalizeClass","_Fragment","_sfc_main"],"sources":["../src/components/display/podcasts/PodcastRawTranscript.vue","../src/components/display/podcasts/PodcastRawTranscript.vue"],"sourcesContent":["<template>\n <div>\n <AccessibilityModal\n v-if=\"isAccessibilityModal\"\n @save=\"saveAccessibility\"\n @close=\"isAccessibilityModal = false\"\n />\n <div class=\"transcription-section-buttons\">\n <button\n v-if=\"isOpen\"\n class=\"btn btn-primary m-0\"\n @click=\"isAccessibilityModal = true\"\n >\n <EyeOutlineIcon class=\"me-1\" /> {{ t('Transcript Accessibility') }}\n </button>\n\n <div\n v-if=\"isOpen && availableLanguagesOptions.length > 0\"\n class=\"language-selector\"\n >\n <span class=\"me-2\">{{ t('Transcript - Available languages') }}</span>\n <ClassicSelect\n :text-init=\"currentLanguage\"\n :is-disabled=\"!loadingDone\"\n :options=\"availableLanguagesOptions\"\n :display-label=\"false\"\n @update:text-init=\"changeLanguage\"\n />\n </div>\n \n <button\n class=\"btn btn-transcript\"\n :class=\"{ open: isOpen }\"\n @click=\"isOpen = !isOpen\"\n >\n {{ buttonText }}\n </button>\n </div>\n <div v-if=\"isOpen\" class=\"transcription-body\">\n <ClassicLoading\n :loading-text=\"!loadingDone ? t('Loading content ...') : undefined\"\n />\n <div class=\"transcription-text\">\n <template v-if=\"loadingDone && transcript?.length\">\n {{ transcript }}\n </template>\n <template v-if=\"loadingDone && !transcript?.length\">\n {{ t(\"Transcript does not yet exist for this episode\") }}\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport cookiesHelper from \"../../../helper/cookiesHelper\";\nimport EyeOutlineIcon from \"vue-material-design-icons/EyeOutline.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { computed, defineAsyncComponent, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { transcriptionApi, TranslationState } from \"../../../api/transcriptionApi\";\nimport { useTranslation } from \"../../composable/useTranslation\";\nimport ClassicSelect from \"../../form/ClassicSelect.vue\";\nconst AccessibilityModal = defineAsyncComponent(\n () => import(\"../accessibility/AccessibilityModal.vue\"),\n);\n\n//Props \nconst props = defineProps<{\n /** ID of the podcast for which to display transcription */\n podcastId: number;\n}>();\n\n//Data \nconst isOpen = ref(false);\nconst loadingDone = ref(false);\nconst isAccessibilityModal = ref(false);\nconst transcript = ref<string|undefined>(undefined);\n/** Native language of the podcast */\nconst nativeLanguage = ref('');\n/** List of languages for which a transcription exists */\nconst availableLanguages = ref<Array<string>>([]);\n/** Currently shown language */\nconst currentLanguage = ref('');\n\n//Composables\nconst { t } = useI18n();\nconst { convertSrtToPlainText, getMostRelevantLanguage } = useTranslation();\n\n//Computed\nconst buttonText = computed(() => isOpen.value? t(\"Hide transcript\"): t(\"View transcript\"));\n\nconst availableLanguagesOptions = computed(() => {\n return availableLanguages.value.map(lang => ({\n title: lang,\n value: lang\n }));\n})\n\n//Watch\nwatch(isOpen, () => {\n if (isOpen.value && !loadingDone.value) {\n if (props.podcastId) {\n fetchTranscripts();\n }\n getAccessibility();\n }\n});\n\n//Methods\nfunction getAccessibility(){\n const fontSize = cookiesHelper.getCookie(\"octopus-font-size\");\n if (null !== fontSize) {\n setCssProperty('--octopus-accessibility-font-size', fontSize);\n }\n const background = cookiesHelper.getCookie(\"octopus-background\");\n if (null !== background) {\n setCssProperty('--octopus-accessibility-background', background);\n }\n const color = cookiesHelper.getCookie(\"octopus-color\");\n if (null !== color) {\n setCssProperty('--octopus-accessibility-color', color);\n }\n}\n\nfunction setCssProperty(name: string, value: string){\n document.documentElement.style.setProperty(name,value);\n}\n\nfunction saveAccessibility(accessibility: {fontSize: number,background: string,color: string}){\n setCssProperty('--octopus-accessibility-font-size', accessibility.fontSize+'px');\n cookiesHelper.setCookie(\"octopus-font-size\", accessibility.fontSize+'px');\n setCssProperty('--octopus-accessibility-background', accessibility.background);\n cookiesHelper.setCookie(\"octopus-background\",accessibility.background);\n setCssProperty('--octopus-accessibility-color', accessibility.color);\n cookiesHelper.setCookie(\"octopus-color\",accessibility.color);\n isAccessibilityModal.value = false;\n}\n\nasync function fetchTranscripts(language?: string): Promise<void> {\n try {\n const translation = await transcriptionApi.getTranslations(props.podcastId);\n if (language === undefined) {\n const { ready, available } = await getMostRelevantLanguage(translation);\n // If available language is set, it is better than ready, so use it\n language = available ?? ready;\n }\n const srt = await transcriptionApi.getTranslation(props.podcastId, language, true);\n transcript.value = convertSrtToPlainText(srt);\n \n availableLanguages.value = translation.translations\n .filter(t => t.state === TranslationState.FINISHED)\n .map(t => t.language);\n nativeLanguage.value = translation.nativeLanguage;\n currentLanguage.value = language;\n availableLanguages.value.unshift(translation.nativeLanguage);\n\n if (!availableLanguages.value.includes(language)) {\n availableLanguages.value.push(language);\n }\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\nasync function changeLanguage(language: string): Promise<void> {\n loadingDone.value = false;\n currentLanguage.value = language;\n transcript.value = undefined;\n try {\n const srt = await transcriptionApi.getTranslation(props.podcastId, language); \n transcript.value = convertSrtToPlainText(srt);\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\n/** Force reloading */\nfunction reset(): void {\n if (isOpen.value || loadingDone.value) {\n fetchTranscripts(currentLanguage.value);\n }\n}\n\ndefineExpose({ reset });\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n --octopus-accessibility-font-size: 16px;\n --octopus-accessibility-background: var(--octopus-background);\n --octopus-accessibility-color: var(--octopus-color-text);\n\n .language-selector {\n display: flex;\n align-items: center;\n margin-left: 1rem;\n\n span {\n font-weight: 600;\n }\n }\n\n .transcription-section-buttons{\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n @media (width <= 625px) {\n flex-direction: column;\n }\n }\n .btn-transcript {\n position: relative;\n border-radius: var(--octopus-border-radius);\n overflow: hidden;\n transition: all 0.2s linear 0s;\n \n &.open{\n margin-left:auto;\n direction: rtl;\n @media (width <= 625px) {\n margin-top: 0.5rem;\n }\n }\n &:not(.open){\n margin-right: auto;\n }\n\n &:not(.open)::before,\n &.open::after {\n content: \"➤\";\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n height: 100%;\n width: 30px;\n border-radius: 0 50% 50% 0;\n background-color: var(--octopus-background-transparent);\n transform: scale(0, 1);\n transition: all 0.2s linear 0s;\n }\n\n &:not(.open)::before {\n left: 0;\n transform-origin: left center;\n }\n\n &.open::after {\n right: -30px;\n transform-origin: center left;\n }\n &:hover {\n text-indent: 30px;\n }\n\n &:not(.open):hover::before,\n &.open:hover::after {\n text-indent: 0;\n }\n\n &:not(.open):hover::before {\n transform: scale(1, 1);\n }\n\n &.open:hover::after {\n transform: scale(-1, 1);\n }\n }\n\n .transcription-body {\n font-size: var(--octopus-accessibility-font-size);\n position: relative;\n padding: 1rem;\n max-height: 250px;\n display: flex;\n justify-content: center;\n white-space: pre-wrap;\n background: var(--octopus-accessibility-background);\n color: var(--octopus-accessibility-color);\n border: 2px solid var(--octopus-border-default);\n border-radius: var(--octopus-border-radius);\n\n .transcription-text {\n overflow: hidden auto;\n }\n }\n}\n</style>\n","<template>\n <div>\n <AccessibilityModal\n v-if=\"isAccessibilityModal\"\n @save=\"saveAccessibility\"\n @close=\"isAccessibilityModal = false\"\n />\n <div class=\"transcription-section-buttons\">\n <button\n v-if=\"isOpen\"\n class=\"btn btn-primary m-0\"\n @click=\"isAccessibilityModal = true\"\n >\n <EyeOutlineIcon class=\"me-1\" /> {{ t('Transcript Accessibility') }}\n </button>\n\n <div\n v-if=\"isOpen && availableLanguagesOptions.length > 0\"\n class=\"language-selector\"\n >\n <span class=\"me-2\">{{ t('Transcript - Available languages') }}</span>\n <ClassicSelect\n :text-init=\"currentLanguage\"\n :is-disabled=\"!loadingDone\"\n :options=\"availableLanguagesOptions\"\n :display-label=\"false\"\n @update:text-init=\"changeLanguage\"\n />\n </div>\n \n <button\n class=\"btn btn-transcript\"\n :class=\"{ open: isOpen }\"\n @click=\"isOpen = !isOpen\"\n >\n {{ buttonText }}\n </button>\n </div>\n <div v-if=\"isOpen\" class=\"transcription-body\">\n <ClassicLoading\n :loading-text=\"!loadingDone ? t('Loading content ...') : undefined\"\n />\n <div class=\"transcription-text\">\n <template v-if=\"loadingDone && transcript?.length\">\n {{ transcript }}\n </template>\n <template v-if=\"loadingDone && !transcript?.length\">\n {{ t(\"Transcript does not yet exist for this episode\") }}\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport cookiesHelper from \"../../../helper/cookiesHelper\";\nimport EyeOutlineIcon from \"vue-material-design-icons/EyeOutline.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { computed, defineAsyncComponent, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { transcriptionApi, TranslationState } from \"../../../api/transcriptionApi\";\nimport { useTranslation } from \"../../composable/useTranslation\";\nimport ClassicSelect from \"../../form/ClassicSelect.vue\";\nconst AccessibilityModal = defineAsyncComponent(\n () => import(\"../accessibility/AccessibilityModal.vue\"),\n);\n\n//Props \nconst props = defineProps<{\n /** ID of the podcast for which to display transcription */\n podcastId: number;\n}>();\n\n//Data \nconst isOpen = ref(false);\nconst loadingDone = ref(false);\nconst isAccessibilityModal = ref(false);\nconst transcript = ref<string|undefined>(undefined);\n/** Native language of the podcast */\nconst nativeLanguage = ref('');\n/** List of languages for which a transcription exists */\nconst availableLanguages = ref<Array<string>>([]);\n/** Currently shown language */\nconst currentLanguage = ref('');\n\n//Composables\nconst { t } = useI18n();\nconst { convertSrtToPlainText, getMostRelevantLanguage } = useTranslation();\n\n//Computed\nconst buttonText = computed(() => isOpen.value? t(\"Hide transcript\"): t(\"View transcript\"));\n\nconst availableLanguagesOptions = computed(() => {\n return availableLanguages.value.map(lang => ({\n title: lang,\n value: lang\n }));\n})\n\n//Watch\nwatch(isOpen, () => {\n if (isOpen.value && !loadingDone.value) {\n if (props.podcastId) {\n fetchTranscripts();\n }\n getAccessibility();\n }\n});\n\n//Methods\nfunction getAccessibility(){\n const fontSize = cookiesHelper.getCookie(\"octopus-font-size\");\n if (null !== fontSize) {\n setCssProperty('--octopus-accessibility-font-size', fontSize);\n }\n const background = cookiesHelper.getCookie(\"octopus-background\");\n if (null !== background) {\n setCssProperty('--octopus-accessibility-background', background);\n }\n const color = cookiesHelper.getCookie(\"octopus-color\");\n if (null !== color) {\n setCssProperty('--octopus-accessibility-color', color);\n }\n}\n\nfunction setCssProperty(name: string, value: string){\n document.documentElement.style.setProperty(name,value);\n}\n\nfunction saveAccessibility(accessibility: {fontSize: number,background: string,color: string}){\n setCssProperty('--octopus-accessibility-font-size', accessibility.fontSize+'px');\n cookiesHelper.setCookie(\"octopus-font-size\", accessibility.fontSize+'px');\n setCssProperty('--octopus-accessibility-background', accessibility.background);\n cookiesHelper.setCookie(\"octopus-background\",accessibility.background);\n setCssProperty('--octopus-accessibility-color', accessibility.color);\n cookiesHelper.setCookie(\"octopus-color\",accessibility.color);\n isAccessibilityModal.value = false;\n}\n\nasync function fetchTranscripts(language?: string): Promise<void> {\n try {\n const translation = await transcriptionApi.getTranslations(props.podcastId);\n if (language === undefined) {\n const { ready, available } = await getMostRelevantLanguage(translation);\n // If available language is set, it is better than ready, so use it\n language = available ?? ready;\n }\n const srt = await transcriptionApi.getTranslation(props.podcastId, language, true);\n transcript.value = convertSrtToPlainText(srt);\n \n availableLanguages.value = translation.translations\n .filter(t => t.state === TranslationState.FINISHED)\n .map(t => t.language);\n nativeLanguage.value = translation.nativeLanguage;\n currentLanguage.value = language;\n availableLanguages.value.unshift(translation.nativeLanguage);\n\n if (!availableLanguages.value.includes(language)) {\n availableLanguages.value.push(language);\n }\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\nasync function changeLanguage(language: string): Promise<void> {\n loadingDone.value = false;\n currentLanguage.value = language;\n transcript.value = undefined;\n try {\n const srt = await transcriptionApi.getTranslation(props.podcastId, language); \n transcript.value = convertSrtToPlainText(srt);\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\n/** Force reloading */\nfunction reset(): void {\n if (isOpen.value || loadingDone.value) {\n fetchTranscripts(currentLanguage.value);\n }\n}\n\ndefineExpose({ reset });\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n --octopus-accessibility-font-size: 16px;\n --octopus-accessibility-background: var(--octopus-background);\n --octopus-accessibility-color: var(--octopus-color-text);\n\n .language-selector {\n display: flex;\n align-items: center;\n margin-left: 1rem;\n\n span {\n font-weight: 600;\n }\n }\n\n .transcription-section-buttons{\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n @media (width <= 625px) {\n flex-direction: column;\n }\n }\n .btn-transcript {\n position: relative;\n border-radius: var(--octopus-border-radius);\n overflow: hidden;\n transition: all 0.2s linear 0s;\n \n &.open{\n margin-left:auto;\n direction: rtl;\n @media (width <= 625px) {\n margin-top: 0.5rem;\n }\n }\n &:not(.open){\n margin-right: auto;\n }\n\n &:not(.open)::before,\n &.open::after {\n content: \"➤\";\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n height: 100%;\n width: 30px;\n border-radius: 0 50% 50% 0;\n background-color: var(--octopus-background-transparent);\n transform: scale(0, 1);\n transition: all 0.2s linear 0s;\n }\n\n &:not(.open)::before {\n left: 0;\n transform-origin: left center;\n }\n\n &.open::after {\n right: -30px;\n transform-origin: center left;\n }\n &:hover {\n text-indent: 30px;\n }\n\n &:not(.open):hover::before,\n &.open:hover::after {\n text-indent: 0;\n }\n\n &:not(.open):hover::before {\n transform: scale(1, 1);\n }\n\n &.open:hover::after {\n transform: scale(-1, 1);\n }\n }\n\n .transcription-body {\n font-size: var(--octopus-accessibility-font-size);\n position: relative;\n padding: 1rem;\n max-height: 250px;\n display: flex;\n justify-content: center;\n white-space: pre-wrap;\n background: var(--octopus-accessibility-background);\n color: var(--octopus-accessibility-color);\n border: 2px solid var(--octopus-border-default);\n border-radius: var(--octopus-border-radius);\n\n .transcription-text {\n overflow: hidden auto;\n }\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastRawTranscript-nfzHM0k_.mjs","names":["cookiesHelper","_openBlock","_createElementBlock","_createBlock","_createCommentVNode","_createElementVNode","_createVNode","_createTextVNode","_toDisplayString","_normalizeClass","_Fragment","_sfc_main"],"sources":["../src/components/display/podcasts/PodcastRawTranscript.vue","../src/components/display/podcasts/PodcastRawTranscript.vue"],"sourcesContent":["<template>\n <div>\n <AccessibilityModal\n v-if=\"isAccessibilityModal\"\n @save=\"saveAccessibility\"\n @close=\"isAccessibilityModal = false\"\n />\n <div class=\"transcription-section-buttons\">\n <button\n v-if=\"isOpen\"\n class=\"btn btn-primary m-0\"\n @click=\"isAccessibilityModal = true\"\n >\n <EyeOutlineIcon class=\"me-1\" /> {{ t('Transcript Accessibility') }}\n </button>\n\n <div\n v-if=\"isOpen && availableLanguagesOptions.length > 0\"\n class=\"language-selector\"\n >\n <span class=\"me-2\">{{ t('Transcript - Available languages') }}</span>\n <ClassicSelect\n :text-init=\"currentLanguage\"\n :is-disabled=\"!loadingDone\"\n :options=\"availableLanguagesOptions\"\n :display-label=\"false\"\n @update:text-init=\"changeLanguage\"\n />\n </div>\n \n <button\n class=\"btn btn-transcript\"\n :class=\"{ open: isOpen }\"\n @click=\"isOpen = !isOpen\"\n >\n {{ buttonText }}\n </button>\n </div>\n <div v-if=\"isOpen\" class=\"transcription-body\">\n <ClassicLoading\n :loading-text=\"!loadingDone ? t('Loading content ...') : undefined\"\n />\n <div class=\"transcription-text\">\n <template v-if=\"loadingDone && transcript?.length\">\n {{ transcript }}\n </template>\n <template v-if=\"loadingDone && !transcript?.length\">\n {{ t(\"Transcript does not yet exist for this episode\") }}\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport cookiesHelper from \"../../../helper/cookiesHelper\";\nimport EyeOutlineIcon from \"vue-material-design-icons/EyeOutline.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { computed, defineAsyncComponent, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { transcriptionApi, TranslationState } from \"../../../api/transcriptionApi\";\nimport { useTranslation } from \"../../composable/useTranslation\";\nimport ClassicSelect from \"../../form/ClassicSelect.vue\";\nconst AccessibilityModal = defineAsyncComponent(\n () => import(\"../accessibility/AccessibilityModal.vue\"),\n);\n\n//Props \nconst props = defineProps<{\n /** ID of the podcast for which to display transcription */\n podcastId: number;\n}>();\n\n//Data \nconst isOpen = ref(false);\nconst loadingDone = ref(false);\nconst isAccessibilityModal = ref(false);\nconst transcript = ref<string|undefined>(undefined);\n/** Native language of the podcast */\nconst nativeLanguage = ref('');\n/** List of languages for which a transcription exists */\nconst availableLanguages = ref<Array<string>>([]);\n/** Currently shown language */\nconst currentLanguage = ref('');\n\n//Composables\nconst { t } = useI18n();\nconst { convertSrtToPlainText, getMostRelevantLanguage } = useTranslation();\n\n//Computed\nconst buttonText = computed(() => isOpen.value? t(\"Hide transcript\"): t(\"View transcript\"));\n\nconst availableLanguagesOptions = computed(() => {\n return availableLanguages.value.map(lang => ({\n title: lang,\n value: lang\n }));\n})\n\n//Watch\nwatch(isOpen, () => {\n if (isOpen.value && !loadingDone.value) {\n if (props.podcastId) {\n fetchTranscripts();\n }\n getAccessibility();\n }\n});\n\n//Methods\nfunction getAccessibility(){\n const fontSize = cookiesHelper.getCookie(\"octopus-font-size\");\n if (null !== fontSize) {\n setCssProperty('--octopus-accessibility-font-size', fontSize);\n }\n const background = cookiesHelper.getCookie(\"octopus-background\");\n if (null !== background) {\n setCssProperty('--octopus-accessibility-background', background);\n }\n const color = cookiesHelper.getCookie(\"octopus-color\");\n if (null !== color) {\n setCssProperty('--octopus-accessibility-color', color);\n }\n}\n\nfunction setCssProperty(name: string, value: string){\n document.documentElement.style.setProperty(name,value);\n}\n\nfunction saveAccessibility(accessibility: {fontSize: number,background: string,color: string}){\n setCssProperty('--octopus-accessibility-font-size', accessibility.fontSize+'px');\n cookiesHelper.setCookie(\"octopus-font-size\", accessibility.fontSize+'px');\n setCssProperty('--octopus-accessibility-background', accessibility.background);\n cookiesHelper.setCookie(\"octopus-background\",accessibility.background);\n setCssProperty('--octopus-accessibility-color', accessibility.color);\n cookiesHelper.setCookie(\"octopus-color\",accessibility.color);\n isAccessibilityModal.value = false;\n}\n\nasync function fetchTranscripts(language?: string): Promise<void> {\n try {\n const translation = await transcriptionApi.getTranslations(props.podcastId);\n if (language === undefined) {\n const { ready, available } = await getMostRelevantLanguage(translation);\n // If available language is set, it is better than ready, so use it\n language = available ?? ready;\n }\n const srt = await transcriptionApi.getTranslation(props.podcastId, language, true);\n transcript.value = convertSrtToPlainText(srt);\n \n availableLanguages.value = translation.translations\n .filter(t => t.state === TranslationState.FINISHED)\n .map(t => t.language);\n nativeLanguage.value = translation.nativeLanguage;\n currentLanguage.value = language;\n availableLanguages.value.unshift(translation.nativeLanguage);\n\n if (!availableLanguages.value.includes(language)) {\n availableLanguages.value.push(language);\n }\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\nasync function changeLanguage(language: string): Promise<void> {\n loadingDone.value = false;\n currentLanguage.value = language;\n transcript.value = undefined;\n try {\n const srt = await transcriptionApi.getTranslation(props.podcastId, language); \n transcript.value = convertSrtToPlainText(srt);\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\n/** Force reloading */\nfunction reset(): void {\n if (isOpen.value || loadingDone.value) {\n fetchTranscripts(currentLanguage.value);\n }\n}\n\ndefineExpose({ reset });\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n --octopus-accessibility-font-size: 16px;\n --octopus-accessibility-background: var(--octopus-background);\n --octopus-accessibility-color: var(--octopus-color-text);\n\n .language-selector {\n display: flex;\n align-items: center;\n margin-left: 1rem;\n\n span {\n font-weight: 600;\n }\n }\n\n .transcription-section-buttons{\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n @media (width <= 625px) {\n flex-direction: column;\n }\n }\n .btn-transcript {\n position: relative;\n border-radius: var(--octopus-border-radius);\n overflow: hidden;\n transition: all 0.2s linear 0s;\n \n &.open{\n margin-left:auto;\n direction: rtl;\n @media (width <= 625px) {\n margin-top: 0.5rem;\n }\n }\n &:not(.open){\n margin-right: auto;\n }\n\n &:not(.open)::before,\n &.open::after {\n content: \"➤\";\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n height: 100%;\n width: 30px;\n border-radius: 0 50% 50% 0;\n background-color: var(--octopus-background-transparent);\n transform: scale(0, 1);\n transition: all 0.2s linear 0s;\n }\n\n &:not(.open)::before {\n left: 0;\n transform-origin: left center;\n }\n\n &.open::after {\n right: -30px;\n transform-origin: center left;\n }\n &:hover {\n text-indent: 30px;\n }\n\n &:not(.open):hover::before,\n &.open:hover::after {\n text-indent: 0;\n }\n\n &:not(.open):hover::before {\n transform: scale(1, 1);\n }\n\n &.open:hover::after {\n transform: scale(-1, 1);\n }\n }\n\n .transcription-body {\n font-size: var(--octopus-accessibility-font-size);\n position: relative;\n padding: 1rem;\n max-height: 250px;\n display: flex;\n justify-content: center;\n white-space: pre-wrap;\n background: var(--octopus-accessibility-background);\n color: var(--octopus-accessibility-color);\n border: 2px solid var(--octopus-border-default);\n border-radius: var(--octopus-border-radius);\n\n .transcription-text {\n overflow: hidden auto;\n }\n }\n}\n</style>\n","<template>\n <div>\n <AccessibilityModal\n v-if=\"isAccessibilityModal\"\n @save=\"saveAccessibility\"\n @close=\"isAccessibilityModal = false\"\n />\n <div class=\"transcription-section-buttons\">\n <button\n v-if=\"isOpen\"\n class=\"btn btn-primary m-0\"\n @click=\"isAccessibilityModal = true\"\n >\n <EyeOutlineIcon class=\"me-1\" /> {{ t('Transcript Accessibility') }}\n </button>\n\n <div\n v-if=\"isOpen && availableLanguagesOptions.length > 0\"\n class=\"language-selector\"\n >\n <span class=\"me-2\">{{ t('Transcript - Available languages') }}</span>\n <ClassicSelect\n :text-init=\"currentLanguage\"\n :is-disabled=\"!loadingDone\"\n :options=\"availableLanguagesOptions\"\n :display-label=\"false\"\n @update:text-init=\"changeLanguage\"\n />\n </div>\n \n <button\n class=\"btn btn-transcript\"\n :class=\"{ open: isOpen }\"\n @click=\"isOpen = !isOpen\"\n >\n {{ buttonText }}\n </button>\n </div>\n <div v-if=\"isOpen\" class=\"transcription-body\">\n <ClassicLoading\n :loading-text=\"!loadingDone ? t('Loading content ...') : undefined\"\n />\n <div class=\"transcription-text\">\n <template v-if=\"loadingDone && transcript?.length\">\n {{ transcript }}\n </template>\n <template v-if=\"loadingDone && !transcript?.length\">\n {{ t(\"Transcript does not yet exist for this episode\") }}\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport cookiesHelper from \"../../../helper/cookiesHelper\";\nimport EyeOutlineIcon from \"vue-material-design-icons/EyeOutline.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { computed, defineAsyncComponent, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { transcriptionApi, TranslationState } from \"../../../api/transcriptionApi\";\nimport { useTranslation } from \"../../composable/useTranslation\";\nimport ClassicSelect from \"../../form/ClassicSelect.vue\";\nconst AccessibilityModal = defineAsyncComponent(\n () => import(\"../accessibility/AccessibilityModal.vue\"),\n);\n\n//Props \nconst props = defineProps<{\n /** ID of the podcast for which to display transcription */\n podcastId: number;\n}>();\n\n//Data \nconst isOpen = ref(false);\nconst loadingDone = ref(false);\nconst isAccessibilityModal = ref(false);\nconst transcript = ref<string|undefined>(undefined);\n/** Native language of the podcast */\nconst nativeLanguage = ref('');\n/** List of languages for which a transcription exists */\nconst availableLanguages = ref<Array<string>>([]);\n/** Currently shown language */\nconst currentLanguage = ref('');\n\n//Composables\nconst { t } = useI18n();\nconst { convertSrtToPlainText, getMostRelevantLanguage } = useTranslation();\n\n//Computed\nconst buttonText = computed(() => isOpen.value? t(\"Hide transcript\"): t(\"View transcript\"));\n\nconst availableLanguagesOptions = computed(() => {\n return availableLanguages.value.map(lang => ({\n title: lang,\n value: lang\n }));\n})\n\n//Watch\nwatch(isOpen, () => {\n if (isOpen.value && !loadingDone.value) {\n if (props.podcastId) {\n fetchTranscripts();\n }\n getAccessibility();\n }\n});\n\n//Methods\nfunction getAccessibility(){\n const fontSize = cookiesHelper.getCookie(\"octopus-font-size\");\n if (null !== fontSize) {\n setCssProperty('--octopus-accessibility-font-size', fontSize);\n }\n const background = cookiesHelper.getCookie(\"octopus-background\");\n if (null !== background) {\n setCssProperty('--octopus-accessibility-background', background);\n }\n const color = cookiesHelper.getCookie(\"octopus-color\");\n if (null !== color) {\n setCssProperty('--octopus-accessibility-color', color);\n }\n}\n\nfunction setCssProperty(name: string, value: string){\n document.documentElement.style.setProperty(name,value);\n}\n\nfunction saveAccessibility(accessibility: {fontSize: number,background: string,color: string}){\n setCssProperty('--octopus-accessibility-font-size', accessibility.fontSize+'px');\n cookiesHelper.setCookie(\"octopus-font-size\", accessibility.fontSize+'px');\n setCssProperty('--octopus-accessibility-background', accessibility.background);\n cookiesHelper.setCookie(\"octopus-background\",accessibility.background);\n setCssProperty('--octopus-accessibility-color', accessibility.color);\n cookiesHelper.setCookie(\"octopus-color\",accessibility.color);\n isAccessibilityModal.value = false;\n}\n\nasync function fetchTranscripts(language?: string): Promise<void> {\n try {\n const translation = await transcriptionApi.getTranslations(props.podcastId);\n if (language === undefined) {\n const { ready, available } = await getMostRelevantLanguage(translation);\n // If available language is set, it is better than ready, so use it\n language = available ?? ready;\n }\n const srt = await transcriptionApi.getTranslation(props.podcastId, language, true);\n transcript.value = convertSrtToPlainText(srt);\n \n availableLanguages.value = translation.translations\n .filter(t => t.state === TranslationState.FINISHED)\n .map(t => t.language);\n nativeLanguage.value = translation.nativeLanguage;\n currentLanguage.value = language;\n availableLanguages.value.unshift(translation.nativeLanguage);\n\n if (!availableLanguages.value.includes(language)) {\n availableLanguages.value.push(language);\n }\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\nasync function changeLanguage(language: string): Promise<void> {\n loadingDone.value = false;\n currentLanguage.value = language;\n transcript.value = undefined;\n try {\n const srt = await transcriptionApi.getTranslation(props.podcastId, language); \n transcript.value = convertSrtToPlainText(srt);\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\n/** Force reloading */\nfunction reset(): void {\n if (isOpen.value || loadingDone.value) {\n fetchTranscripts(currentLanguage.value);\n }\n}\n\ndefineExpose({ reset });\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n --octopus-accessibility-font-size: 16px;\n --octopus-accessibility-background: var(--octopus-background);\n --octopus-accessibility-color: var(--octopus-color-text);\n\n .language-selector {\n display: flex;\n align-items: center;\n margin-left: 1rem;\n\n span {\n font-weight: 600;\n }\n }\n\n .transcription-section-buttons{\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n @media (width <= 625px) {\n flex-direction: column;\n }\n }\n .btn-transcript {\n position: relative;\n border-radius: var(--octopus-border-radius);\n overflow: hidden;\n transition: all 0.2s linear 0s;\n \n &.open{\n margin-left:auto;\n direction: rtl;\n @media (width <= 625px) {\n margin-top: 0.5rem;\n }\n }\n &:not(.open){\n margin-right: auto;\n }\n\n &:not(.open)::before,\n &.open::after {\n content: \"➤\";\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n height: 100%;\n width: 30px;\n border-radius: 0 50% 50% 0;\n background-color: var(--octopus-background-transparent);\n transform: scale(0, 1);\n transition: all 0.2s linear 0s;\n }\n\n &:not(.open)::before {\n left: 0;\n transform-origin: left center;\n }\n\n &.open::after {\n right: -30px;\n transform-origin: center left;\n }\n &:hover {\n text-indent: 30px;\n }\n\n &:not(.open):hover::before,\n &.open:hover::after {\n text-indent: 0;\n }\n\n &:not(.open):hover::before {\n transform: scale(1, 1);\n }\n\n &.open:hover::after {\n transform: scale(-1, 1);\n }\n }\n\n .transcription-body {\n font-size: var(--octopus-accessibility-font-size);\n position: relative;\n padding: 1rem;\n max-height: 250px;\n display: flex;\n justify-content: center;\n white-space: pre-wrap;\n background: var(--octopus-accessibility-background);\n color: var(--octopus-accessibility-color);\n border: 2px solid var(--octopus-border-default);\n border-radius: var(--octopus-border-radius);\n\n .transcription-text {\n overflow: hidden auto;\n }\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastRawTranscript-r5pRtZDg.mjs","names":["cookiesHelper","_openBlock","_createElementBlock","_createBlock","_createCommentVNode","_createElementVNode","_createVNode","_createTextVNode","_toDisplayString","_normalizeClass","_Fragment","_sfc_main"],"sources":["../src/components/display/podcasts/PodcastRawTranscript.vue","../src/components/display/podcasts/PodcastRawTranscript.vue"],"sourcesContent":["<template>\n <div>\n <AccessibilityModal\n v-if=\"isAccessibilityModal\"\n @save=\"saveAccessibility\"\n @close=\"isAccessibilityModal = false\"\n />\n <div class=\"transcription-section-buttons\">\n <button\n v-if=\"isOpen\"\n class=\"btn btn-primary m-0\"\n @click=\"isAccessibilityModal = true\"\n >\n <EyeOutlineIcon class=\"me-1\" /> {{ t('Transcript Accessibility') }}\n </button>\n\n <div\n v-if=\"isOpen && availableLanguagesOptions.length > 0\"\n class=\"language-selector\"\n >\n <span class=\"me-2\">{{ t('Transcript - Available languages') }}</span>\n <ClassicSelect\n :text-init=\"currentLanguage\"\n :is-disabled=\"!loadingDone\"\n :options=\"availableLanguagesOptions\"\n :display-label=\"false\"\n @update:text-init=\"changeLanguage\"\n />\n </div>\n \n <button\n class=\"btn btn-transcript\"\n :class=\"{ open: isOpen }\"\n @click=\"isOpen = !isOpen\"\n >\n {{ buttonText }}\n </button>\n </div>\n <div v-if=\"isOpen\" class=\"transcription-body\">\n <ClassicLoading\n :loading-text=\"!loadingDone ? t('Loading content ...') : undefined\"\n />\n <div class=\"transcription-text\">\n <template v-if=\"loadingDone && transcript?.length\">\n {{ transcript }}\n </template>\n <template v-if=\"loadingDone && !transcript?.length\">\n {{ t(\"Transcript does not yet exist for this episode\") }}\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport cookiesHelper from \"../../../helper/cookiesHelper\";\nimport EyeOutlineIcon from \"vue-material-design-icons/EyeOutline.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { computed, defineAsyncComponent, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { transcriptionApi, TranslationState } from \"../../../api/transcriptionApi\";\nimport { useTranslation } from \"../../composable/useTranslation\";\nimport ClassicSelect from \"../../form/ClassicSelect.vue\";\nconst AccessibilityModal = defineAsyncComponent(\n () => import(\"../accessibility/AccessibilityModal.vue\"),\n);\n\n//Props \nconst props = defineProps<{\n /** ID of the podcast for which to display transcription */\n podcastId: number;\n}>();\n\n//Data \nconst isOpen = ref(false);\nconst loadingDone = ref(false);\nconst isAccessibilityModal = ref(false);\nconst transcript = ref<string|undefined>(undefined);\n/** Native language of the podcast */\nconst nativeLanguage = ref('');\n/** List of languages for which a transcription exists */\nconst availableLanguages = ref<Array<string>>([]);\n/** Currently shown language */\nconst currentLanguage = ref('');\n\n//Composables\nconst { t } = useI18n();\nconst { convertSrtToPlainText, getMostRelevantLanguage } = useTranslation();\n\n//Computed\nconst buttonText = computed(() => isOpen.value? t(\"Hide transcript\"): t(\"View transcript\"));\n\nconst availableLanguagesOptions = computed(() => {\n return availableLanguages.value.map(lang => ({\n title: lang,\n value: lang\n }));\n})\n\n//Watch\nwatch(isOpen, () => {\n if (isOpen.value && !loadingDone.value) {\n if (props.podcastId) {\n fetchTranscripts();\n }\n getAccessibility();\n }\n});\n\n//Methods\nfunction getAccessibility(){\n const fontSize = cookiesHelper.getCookie(\"octopus-font-size\");\n if (null !== fontSize) {\n setCssProperty('--octopus-accessibility-font-size', fontSize);\n }\n const background = cookiesHelper.getCookie(\"octopus-background\");\n if (null !== background) {\n setCssProperty('--octopus-accessibility-background', background);\n }\n const color = cookiesHelper.getCookie(\"octopus-color\");\n if (null !== color) {\n setCssProperty('--octopus-accessibility-color', color);\n }\n}\n\nfunction setCssProperty(name: string, value: string){\n document.documentElement.style.setProperty(name,value);\n}\n\nfunction saveAccessibility(accessibility: {fontSize: number,background: string,color: string}){\n setCssProperty('--octopus-accessibility-font-size', accessibility.fontSize+'px');\n cookiesHelper.setCookie(\"octopus-font-size\", accessibility.fontSize+'px');\n setCssProperty('--octopus-accessibility-background', accessibility.background);\n cookiesHelper.setCookie(\"octopus-background\",accessibility.background);\n setCssProperty('--octopus-accessibility-color', accessibility.color);\n cookiesHelper.setCookie(\"octopus-color\",accessibility.color);\n isAccessibilityModal.value = false;\n}\n\nasync function fetchTranscripts(language?: string): Promise<void> {\n try {\n const translation = await transcriptionApi.getTranslations(props.podcastId);\n if (language === undefined) {\n const { ready, available } = await getMostRelevantLanguage(translation);\n // If available language is set, it is better than ready, so use it\n language = available ?? ready;\n }\n const srt = await transcriptionApi.getTranslation(props.podcastId, language, true);\n transcript.value = convertSrtToPlainText(srt);\n \n availableLanguages.value = translation.translations\n .filter(t => t.state === TranslationState.FINISHED)\n .map(t => t.language);\n nativeLanguage.value = translation.nativeLanguage;\n currentLanguage.value = language;\n availableLanguages.value.unshift(translation.nativeLanguage);\n\n if (!availableLanguages.value.includes(language)) {\n availableLanguages.value.push(language);\n }\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\nasync function changeLanguage(language: string): Promise<void> {\n loadingDone.value = false;\n currentLanguage.value = language;\n transcript.value = undefined;\n try {\n const srt = await transcriptionApi.getTranslation(props.podcastId, language); \n transcript.value = convertSrtToPlainText(srt);\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\n/** Force reloading */\nfunction reset(): void {\n if (isOpen.value || loadingDone.value) {\n fetchTranscripts(currentLanguage.value);\n }\n}\n\ndefineExpose({ reset });\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n --octopus-accessibility-font-size: 16px;\n --octopus-accessibility-background: var(--octopus-background);\n --octopus-accessibility-color: var(--octopus-color-text);\n\n .language-selector {\n display: flex;\n align-items: center;\n margin-left: 1rem;\n\n span {\n font-weight: 600;\n }\n }\n\n .transcription-section-buttons{\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n @media (width <= 625px) {\n flex-direction: column;\n }\n }\n .btn-transcript {\n position: relative;\n border-radius: var(--octopus-border-radius);\n overflow: hidden;\n transition: all 0.2s linear 0s;\n \n &.open{\n margin-left:auto;\n direction: rtl;\n @media (width <= 625px) {\n margin-top: 0.5rem;\n }\n }\n &:not(.open){\n margin-right: auto;\n }\n\n &:not(.open)::before,\n &.open::after {\n content: \"➤\";\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n height: 100%;\n width: 30px;\n border-radius: 0 50% 50% 0;\n background-color: var(--octopus-background-transparent);\n transform: scale(0, 1);\n transition: all 0.2s linear 0s;\n }\n\n &:not(.open)::before {\n left: 0;\n transform-origin: left center;\n }\n\n &.open::after {\n right: -30px;\n transform-origin: center left;\n }\n &:hover {\n text-indent: 30px;\n }\n\n &:not(.open):hover::before,\n &.open:hover::after {\n text-indent: 0;\n }\n\n &:not(.open):hover::before {\n transform: scale(1, 1);\n }\n\n &.open:hover::after {\n transform: scale(-1, 1);\n }\n }\n\n .transcription-body {\n font-size: var(--octopus-accessibility-font-size);\n position: relative;\n padding: 1rem;\n max-height: 250px;\n display: flex;\n justify-content: center;\n white-space: pre-wrap;\n background: var(--octopus-accessibility-background);\n color: var(--octopus-accessibility-color);\n border: 2px solid var(--octopus-border-default);\n border-radius: var(--octopus-border-radius);\n\n .transcription-text {\n overflow: hidden auto;\n }\n }\n}\n</style>\n","<template>\n <div>\n <AccessibilityModal\n v-if=\"isAccessibilityModal\"\n @save=\"saveAccessibility\"\n @close=\"isAccessibilityModal = false\"\n />\n <div class=\"transcription-section-buttons\">\n <button\n v-if=\"isOpen\"\n class=\"btn btn-primary m-0\"\n @click=\"isAccessibilityModal = true\"\n >\n <EyeOutlineIcon class=\"me-1\" /> {{ t('Transcript Accessibility') }}\n </button>\n\n <div\n v-if=\"isOpen && availableLanguagesOptions.length > 0\"\n class=\"language-selector\"\n >\n <span class=\"me-2\">{{ t('Transcript - Available languages') }}</span>\n <ClassicSelect\n :text-init=\"currentLanguage\"\n :is-disabled=\"!loadingDone\"\n :options=\"availableLanguagesOptions\"\n :display-label=\"false\"\n @update:text-init=\"changeLanguage\"\n />\n </div>\n \n <button\n class=\"btn btn-transcript\"\n :class=\"{ open: isOpen }\"\n @click=\"isOpen = !isOpen\"\n >\n {{ buttonText }}\n </button>\n </div>\n <div v-if=\"isOpen\" class=\"transcription-body\">\n <ClassicLoading\n :loading-text=\"!loadingDone ? t('Loading content ...') : undefined\"\n />\n <div class=\"transcription-text\">\n <template v-if=\"loadingDone && transcript?.length\">\n {{ transcript }}\n </template>\n <template v-if=\"loadingDone && !transcript?.length\">\n {{ t(\"Transcript does not yet exist for this episode\") }}\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport cookiesHelper from \"../../../helper/cookiesHelper\";\nimport EyeOutlineIcon from \"vue-material-design-icons/EyeOutline.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { computed, defineAsyncComponent, ref, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport { transcriptionApi, TranslationState } from \"../../../api/transcriptionApi\";\nimport { useTranslation } from \"../../composable/useTranslation\";\nimport ClassicSelect from \"../../form/ClassicSelect.vue\";\nconst AccessibilityModal = defineAsyncComponent(\n () => import(\"../accessibility/AccessibilityModal.vue\"),\n);\n\n//Props \nconst props = defineProps<{\n /** ID of the podcast for which to display transcription */\n podcastId: number;\n}>();\n\n//Data \nconst isOpen = ref(false);\nconst loadingDone = ref(false);\nconst isAccessibilityModal = ref(false);\nconst transcript = ref<string|undefined>(undefined);\n/** Native language of the podcast */\nconst nativeLanguage = ref('');\n/** List of languages for which a transcription exists */\nconst availableLanguages = ref<Array<string>>([]);\n/** Currently shown language */\nconst currentLanguage = ref('');\n\n//Composables\nconst { t } = useI18n();\nconst { convertSrtToPlainText, getMostRelevantLanguage } = useTranslation();\n\n//Computed\nconst buttonText = computed(() => isOpen.value? t(\"Hide transcript\"): t(\"View transcript\"));\n\nconst availableLanguagesOptions = computed(() => {\n return availableLanguages.value.map(lang => ({\n title: lang,\n value: lang\n }));\n})\n\n//Watch\nwatch(isOpen, () => {\n if (isOpen.value && !loadingDone.value) {\n if (props.podcastId) {\n fetchTranscripts();\n }\n getAccessibility();\n }\n});\n\n//Methods\nfunction getAccessibility(){\n const fontSize = cookiesHelper.getCookie(\"octopus-font-size\");\n if (null !== fontSize) {\n setCssProperty('--octopus-accessibility-font-size', fontSize);\n }\n const background = cookiesHelper.getCookie(\"octopus-background\");\n if (null !== background) {\n setCssProperty('--octopus-accessibility-background', background);\n }\n const color = cookiesHelper.getCookie(\"octopus-color\");\n if (null !== color) {\n setCssProperty('--octopus-accessibility-color', color);\n }\n}\n\nfunction setCssProperty(name: string, value: string){\n document.documentElement.style.setProperty(name,value);\n}\n\nfunction saveAccessibility(accessibility: {fontSize: number,background: string,color: string}){\n setCssProperty('--octopus-accessibility-font-size', accessibility.fontSize+'px');\n cookiesHelper.setCookie(\"octopus-font-size\", accessibility.fontSize+'px');\n setCssProperty('--octopus-accessibility-background', accessibility.background);\n cookiesHelper.setCookie(\"octopus-background\",accessibility.background);\n setCssProperty('--octopus-accessibility-color', accessibility.color);\n cookiesHelper.setCookie(\"octopus-color\",accessibility.color);\n isAccessibilityModal.value = false;\n}\n\nasync function fetchTranscripts(language?: string): Promise<void> {\n try {\n const translation = await transcriptionApi.getTranslations(props.podcastId);\n if (language === undefined) {\n const { ready, available } = await getMostRelevantLanguage(translation);\n // If available language is set, it is better than ready, so use it\n language = available ?? ready;\n }\n const srt = await transcriptionApi.getTranslation(props.podcastId, language, true);\n transcript.value = convertSrtToPlainText(srt);\n \n availableLanguages.value = translation.translations\n .filter(t => t.state === TranslationState.FINISHED)\n .map(t => t.language);\n nativeLanguage.value = translation.nativeLanguage;\n currentLanguage.value = language;\n availableLanguages.value.unshift(translation.nativeLanguage);\n\n if (!availableLanguages.value.includes(language)) {\n availableLanguages.value.push(language);\n }\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\nasync function changeLanguage(language: string): Promise<void> {\n loadingDone.value = false;\n currentLanguage.value = language;\n transcript.value = undefined;\n try {\n const srt = await transcriptionApi.getTranslation(props.podcastId, language); \n transcript.value = convertSrtToPlainText(srt);\n } catch (error) {\n console.error(error);\n }\n loadingDone.value = true;\n}\n\n/** Force reloading */\nfunction reset(): void {\n if (isOpen.value || loadingDone.value) {\n fetchTranscripts(currentLanguage.value);\n }\n}\n\ndefineExpose({ reset });\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n --octopus-accessibility-font-size: 16px;\n --octopus-accessibility-background: var(--octopus-background);\n --octopus-accessibility-color: var(--octopus-color-text);\n\n .language-selector {\n display: flex;\n align-items: center;\n margin-left: 1rem;\n\n span {\n font-weight: 600;\n }\n }\n\n .transcription-section-buttons{\n display: flex;\n justify-content: space-between;\n flex-wrap: wrap;\n @media (width <= 625px) {\n flex-direction: column;\n }\n }\n .btn-transcript {\n position: relative;\n border-radius: var(--octopus-border-radius);\n overflow: hidden;\n transition: all 0.2s linear 0s;\n \n &.open{\n margin-left:auto;\n direction: rtl;\n @media (width <= 625px) {\n margin-top: 0.5rem;\n }\n }\n &:not(.open){\n margin-right: auto;\n }\n\n &:not(.open)::before,\n &.open::after {\n content: \"➤\";\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n height: 100%;\n width: 30px;\n border-radius: 0 50% 50% 0;\n background-color: var(--octopus-background-transparent);\n transform: scale(0, 1);\n transition: all 0.2s linear 0s;\n }\n\n &:not(.open)::before {\n left: 0;\n transform-origin: left center;\n }\n\n &.open::after {\n right: -30px;\n transform-origin: center left;\n }\n &:hover {\n text-indent: 30px;\n }\n\n &:not(.open):hover::before,\n &.open:hover::after {\n text-indent: 0;\n }\n\n &:not(.open):hover::before {\n transform: scale(1, 1);\n }\n\n &.open:hover::after {\n transform: scale(-1, 1);\n }\n }\n\n .transcription-body {\n font-size: var(--octopus-accessibility-font-size);\n position: relative;\n padding: 1rem;\n max-height: 250px;\n display: flex;\n justify-content: center;\n white-space: pre-wrap;\n background: var(--octopus-accessibility-background);\n color: var(--octopus-accessibility-color);\n border: 2px solid var(--octopus-border-default);\n border-radius: var(--octopus-border-radius);\n\n .transcription-text {\n overflow: hidden auto;\n }\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./ClassicLoading-CXfMjpyl.mjs";
2
- import { r as t, t as n } from "./classicApi-pmODlqv5.mjs";
3
- import { t as r } from "./SwiperList-BlF3rPq5.mjs";
4
- import { t as i } from "./PodcastItem-TdtzApJ6.mjs";
5
- import { t as a } from "./PodcastInlineListTemplate-DTrS1UiG.mjs";
2
+ import { r as t, t as n } from "./classicApi-CGipMqf7.mjs";
3
+ import { t as r } from "./SwiperList-O8nUg87R.mjs";
4
+ import { t as i } from "./PodcastItem-Baki7W0q.mjs";
5
+ import { t as a } from "./PodcastInlineListTemplate-Chbi8aME.mjs";
6
6
  import { computed as o, createBlock as s, createCommentVNode as c, createVNode as l, defineComponent as u, onBeforeMount as d, openBlock as f, ref as p, unref as m, watch as h, withCtx as g } from "vue";
7
7
  import { useI18n as _ } from "vue-i18n";
8
8
  import v from "dayjs";