@saooti/octopus-sdk 42.2.1 → 42.2.2
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.
- package/dist/{AdvancedSearch-fO5eaqLJ.mjs → AdvancedSearch-C4segSRv.mjs} +6 -6
- package/dist/AdvancedSearch-C4segSRv.mjs.map +1 -0
- package/dist/AdvancedSearch-DD9tnLCw.mjs.map +1 -0
- package/dist/{CategoryFilter-Cu2a0YE9.mjs → CategoryFilter-CpplEC8n.mjs} +5 -5
- package/dist/CategoryFilter-CpplEC8n.mjs.map +1 -0
- package/dist/CategoryFilter-cbQR_ySd.mjs.map +1 -0
- package/dist/{CategoryList-DkxZDrO5.mjs → CategoryList-BTabY3vQ.mjs} +2 -2
- package/dist/CategoryList-BTabY3vQ.mjs.map +1 -0
- package/dist/CategoryList-DHEJoaez.mjs.map +1 -0
- package/dist/CategoryPage-BbsCC3Wr.mjs.map +1 -0
- package/dist/CategoryPage-BxvUmThb.mjs.map +1 -0
- package/dist/{CategoryPage-3HFz1i7_.mjs → CategoryPage-D755GvQZ.mjs} +3 -3
- package/dist/CategoryPage-D755GvQZ.mjs.map +1 -0
- package/dist/CategoryPage-DDBJ2krs.mjs.map +1 -0
- package/dist/CategoryPage-DRCYjOqG.mjs.map +1 -0
- package/dist/ChapteringModal-CSQqCWIk.mjs.map +1 -0
- package/dist/ChapteringModal-Dt8Rsauh.mjs.map +1 -0
- package/dist/{ChapteringModal-C-rdkbSz.mjs → ChapteringModal-ei6ZqVJU.mjs} +2 -2
- package/dist/ChapteringModal-ei6ZqVJU.mjs.map +1 -0
- package/dist/CheckIdentityModal-CNFVJVB_.mjs.map +1 -0
- package/dist/{CheckIdentityModal-N9h8yvhC.mjs → CheckIdentityModal-cpMOuJGv.mjs} +3 -3
- package/dist/CheckIdentityModal-cpMOuJGv.mjs.map +1 -0
- package/dist/ClipboardModal-2ZGF38VB.mjs.map +1 -0
- package/dist/{ClipboardModal-CnieIOJr.mjs → ClipboardModal-DzCUqSph.mjs} +2 -2
- package/dist/ClipboardModal-DzCUqSph.mjs.map +1 -0
- package/dist/CommentInput-CV46HJN8.mjs.map +1 -0
- package/dist/{CommentInput-CEioyN7X.mjs → CommentInput-D_p03L68.mjs} +6 -6
- package/dist/CommentInput-D_p03L68.mjs.map +1 -0
- package/dist/CommentInput-DwRbD74k.mjs.map +1 -0
- package/dist/CommentItem-B6_XUaFR.mjs.map +1 -0
- package/dist/CommentItem-CbbmwVXB.mjs.map +1 -0
- package/dist/CommentItem-DfKKazY0.mjs.map +1 -0
- package/dist/CommentItem-JRjSLmui.mjs.map +1 -0
- package/dist/{CommentItem-BefuRoxQ.mjs → CommentItem-MFN0JNW1.mjs} +8 -8
- package/dist/CommentItem-MFN0JNW1.mjs.map +1 -0
- package/dist/{CommentList-BsPwzqkf.mjs → CommentList-BkKy5ftL.mjs} +3 -3
- package/dist/CommentList-BkKy5ftL.mjs.map +1 -0
- package/dist/CommentList-BrP71Ug4.mjs.map +1 -0
- package/dist/CommentList-Ng_YXr74.mjs.map +1 -0
- package/dist/CommentList-tKA7NFHM.mjs.map +1 -0
- package/dist/CommentList-yarlxaXg.mjs.map +1 -0
- package/dist/{CommentMoreActions-C86aqy8M.mjs → CommentMoreActions-CBSvuOGJ.mjs} +5 -5
- package/dist/CommentMoreActions-CBSvuOGJ.mjs.map +1 -0
- package/dist/CommentMoreActions-D7guBdA7.mjs.map +1 -0
- package/dist/CommentName-frCHmngc.mjs.map +1 -0
- package/dist/{CommentName-DT1QyPi3.mjs → CommentName-zTMSdG4d.mjs} +3 -3
- package/dist/CommentName-zTMSdG4d.mjs.map +1 -0
- package/dist/{CommentParentInfo-9Fe-3e6c.mjs → CommentParentInfo-CRTYPb8P.mjs} +2 -2
- package/dist/CommentParentInfo-CRTYPb8P.mjs.map +1 -0
- package/dist/CommentParentInfo-D8qquB6k.mjs.map +1 -0
- package/dist/CommentParentInfo-DC4Q6wNO.mjs.map +1 -0
- package/dist/CommentParentInfo-temUvqNv.mjs.map +1 -0
- package/dist/{CommentPlayer-CiWQM64Y.mjs → CommentPlayer-BMuLmZdI.mjs} +3 -3
- package/dist/CommentPlayer-BMuLmZdI.mjs.map +1 -0
- package/dist/CommentPlayer-BPA_lEoE.mjs.map +1 -0
- package/dist/CommentPlayer-CUNi1Lxv.mjs.map +1 -0
- package/dist/{CommentSection-Be38YIkC.mjs → CommentSection-B91sHMDT.mjs} +5 -5
- package/dist/CommentSection-B91sHMDT.mjs.map +1 -0
- package/dist/CommentSection-CpYd7i8U.mjs.map +1 -0
- package/dist/CommentSection-CrqweNX4.mjs.map +1 -0
- package/dist/CommentSection-G8rMWPrM.mjs.map +1 -0
- package/dist/CommentSection-xjY6h7nn.mjs.map +1 -0
- package/dist/CommentStore-9WWuGwIj.mjs.map +1 -0
- package/dist/{CommentStore-Dv7j94Uo.mjs → CommentStore-ClU882RI.mjs} +2 -2
- package/dist/CommentStore-ClU882RI.mjs.map +1 -0
- package/dist/ContractPreviewModal-C4_20E99.mjs.map +1 -0
- package/dist/{ContractPreviewModal-CPT6bDpJ.mjs → ContractPreviewModal-Dn5MeLFo.mjs} +2 -2
- package/dist/ContractPreviewModal-Dn5MeLFo.mjs.map +1 -0
- package/dist/{DownloadPodcastButton-6D8qNAkT.mjs → DownloadPodcastButton-BI_sZWcJ.mjs} +3 -3
- package/dist/DownloadPodcastButton-BI_sZWcJ.mjs.map +1 -0
- package/dist/DownloadPodcastButton-CSRcg8Nl.mjs.map +1 -0
- package/dist/EditCommentModal-KAP1l9RK.mjs.map +1 -0
- package/dist/{EditCommentModal-aAcjhc0v.mjs → EditCommentModal-RbVMVDOp.mjs} +2 -2
- package/dist/EditCommentModal-RbVMVDOp.mjs.map +1 -0
- package/dist/{EmissionGroupChooser-Djt1IZg7.mjs → EmissionGroupChooser-BXqM4iXP.mjs} +2 -2
- package/dist/EmissionGroupChooser-BXqM4iXP.mjs.map +1 -0
- package/dist/EmissionGroupChooser-CO1WBOUi.mjs.map +1 -0
- package/dist/EmissionInlineList-B-r4eI3D.mjs.map +1 -0
- package/dist/{EmissionInlineList-BcrKpW8S.mjs → EmissionInlineList-Cy1lbYKY.mjs} +6 -6
- package/dist/EmissionInlineList-Cy1lbYKY.mjs.map +1 -0
- package/dist/EmissionInlineList-IKPyjBTQ.mjs.map +1 -0
- package/dist/EmissionItem-982WkWkg.mjs.map +1 -0
- package/dist/EmissionItem-B8q9hnN5.mjs.map +1 -0
- package/dist/{EmissionItem-DfkPRcPz.mjs → EmissionItem-BwXm3nNx.mjs} +5 -5
- package/dist/EmissionItem-BwXm3nNx.mjs.map +1 -0
- package/dist/EmissionItem-ZDlQ7B9S.mjs.map +1 -0
- package/dist/{EmissionList-DSuGp0JO.mjs → EmissionList-C8OxrndH.mjs} +6 -6
- package/dist/EmissionList-C8OxrndH.mjs.map +1 -0
- package/dist/EmissionList-C9-UUWMV.mjs.map +1 -0
- package/dist/EmissionList-Dk9xS4s_.mjs.map +1 -0
- package/dist/EmissionList-nrY7ASws.mjs.map +1 -0
- package/dist/EmissionList-vH4NX1NW.mjs.map +1 -0
- package/dist/EmissionPage-BHAPlZw-.mjs.map +1 -0
- package/dist/EmissionPage-B_2JalGG.mjs.map +1 -0
- package/dist/EmissionPage-D4PjyZzN.mjs.map +1 -0
- package/dist/EmissionPage-HGPCRuZD.mjs.map +1 -0
- package/dist/{EmissionPage-Bo9fK8HE.mjs → EmissionPage-nCNIiWCo.mjs} +25 -18
- package/dist/EmissionPage-nCNIiWCo.mjs.map +1 -0
- package/dist/EmissionPlayerItem-B_wRzikv.mjs.map +1 -0
- package/dist/{EmissionPlayerItem-D21OrPmm.mjs → EmissionPlayerItem-Degbnz9F.mjs} +5 -5
- package/dist/EmissionPlayerItem-Degbnz9F.mjs.map +1 -0
- package/dist/EmissionPlayerItem-Dkd0o1ee.mjs.map +1 -0
- package/dist/EmissionPresentationItem-BQ7HhOlC.mjs.map +1 -0
- package/dist/{EmissionPresentationItem-CwDIBurH.mjs → EmissionPresentationItem-CwBGPIgz.mjs} +2 -2
- package/dist/EmissionPresentationItem-CwBGPIgz.mjs.map +1 -0
- package/dist/{EmissionPresentationList-CASI5laP.mjs → EmissionPresentationList-BKI5mQdw.mjs} +4 -4
- package/dist/EmissionPresentationList-BKI5mQdw.mjs.map +1 -0
- package/dist/EmissionPresentationList-CLli23rs.mjs.map +1 -0
- package/dist/EmissionsPage-CO2xgVOR.mjs.map +1 -0
- package/dist/{EmissionsPage-Bw8Qtzlk.mjs → EmissionsPage-Cj7su56Z.mjs} +5 -5
- package/dist/EmissionsPage-Cj7su56Z.mjs.map +1 -0
- package/dist/EmissionsPage-DJdy0re_.mjs.map +1 -0
- package/dist/EmissionsPage-DR9r7_gH.mjs.map +1 -0
- package/dist/EmissionsPage-OVNfLKFu.mjs.map +1 -0
- package/dist/Error403Page-Ch535DfU.mjs.map +1 -0
- package/dist/{Error403Page-nTYCHwTi.mjs → Error403Page-DW2kK8ZZ.mjs} +2 -2
- package/dist/Error403Page-DW2kK8ZZ.mjs.map +1 -0
- package/dist/FooterGarSection-B76j-WZS.mjs.map +1 -0
- package/dist/{FooterGarSection-Cod8Key5.mjs → FooterGarSection-DVdF5RFq.mjs} +4 -4
- package/dist/FooterGarSection-DVdF5RFq.mjs.map +1 -0
- package/dist/FooterSection-BQiO-D1p.mjs.map +1 -0
- package/dist/{FooterSection-4WXBZj7c.mjs → FooterSection-CpYI9OGH.mjs} +5 -5
- package/dist/FooterSection-CpYI9OGH.mjs.map +1 -0
- package/dist/{HomeDropdown-CVe7yF6Y.mjs → HomeDropdown-D7FezAO8.mjs} +3 -3
- package/dist/HomeDropdown-D7FezAO8.mjs.map +1 -0
- package/dist/HomeDropdown-DQoMvBgU.mjs.map +1 -0
- package/dist/HomePage-BWs_az04.mjs.map +1 -0
- package/dist/HomePage-CMPKjRFA.mjs.map +1 -0
- package/dist/HomePage-CsXaeTCW.mjs.map +1 -0
- package/dist/HomePage-NH7OxpA_.mjs.map +1 -0
- package/dist/{HomePage-DupmOw6F.mjs → HomePage-vo6At2bL.mjs} +4 -4
- package/dist/HomePage-vo6At2bL.mjs.map +1 -0
- package/dist/{PodcastRubriqueList-BeTq7IRu.mjs → InlineRubriqueList-3ZVN9GJk.mjs} +14 -12
- package/dist/InlineRubriqueList-3ZVN9GJk.mjs.map +1 -0
- package/dist/InlineRubriqueList-D03VCzg8.mjs.map +1 -0
- package/dist/LikeSection-DtthHZj6.mjs.map +1 -0
- package/dist/{LikeSection-DAid96g9.mjs → LikeSection-jKjhnj88.mjs} +4 -4
- package/dist/LikeSection-jKjhnj88.mjs.map +1 -0
- package/dist/{ListPaginate-C9saxru9.mjs → ListPaginate-BXNnw_I8.mjs} +3 -3
- package/dist/ListPaginate-BXNnw_I8.mjs.map +1 -0
- package/dist/ListPaginate-COsL4t78.mjs.map +1 -0
- package/dist/ListPaginate-JuC0L113.mjs.map +1 -0
- package/dist/LiveHorizontalList-CFs9mGYs.mjs.map +1 -0
- package/dist/LiveHorizontalList-CWBQkS78.mjs.map +1 -0
- package/dist/LiveHorizontalList-DwPVmnvH.mjs.map +1 -0
- package/dist/LiveHorizontalList-jducN58c.mjs.map +1 -0
- package/dist/{LiveHorizontalList-OArlzudf.mjs → LiveHorizontalList-wgXkgFLv.mjs} +4 -4
- package/dist/LiveHorizontalList-wgXkgFLv.mjs.map +1 -0
- package/dist/LiveList-Bp-feBp9.mjs.map +1 -0
- package/dist/LiveList-ByyCyWUl.mjs.map +1 -0
- package/dist/{LiveList-EqIo_cye.mjs → LiveList-CA5n6VeN.mjs} +6 -6
- package/dist/LiveList-CA5n6VeN.mjs.map +1 -0
- package/dist/LiveList-Cah5VFun.mjs.map +1 -0
- package/dist/LiveList-DTAnN32j.mjs.map +1 -0
- package/dist/LivesPage-CNPMz3xS.mjs.map +1 -0
- package/dist/{LivesPage-BmHiBN8A.mjs → LivesPage-CTjXgU-Y.mjs} +5 -5
- package/dist/LivesPage-CTjXgU-Y.mjs.map +1 -0
- package/dist/LivesPage-CdhWyikV.mjs.map +1 -0
- package/dist/LivesPage-CwvFSl6G.mjs.map +1 -0
- package/dist/LivesPage-DyIfBEPX.mjs.map +1 -0
- package/dist/{MapPage-DcXKTGGh.mjs → MapPage-C_nGG0_5.mjs} +3 -3
- package/dist/MapPage-C_nGG0_5.mjs.map +1 -0
- package/dist/MapPage-DXV40zWN.mjs.map +1 -0
- package/dist/{MobileMenu-C0IYBWwF.mjs → MobileMenu-C95GAIm0.mjs} +4 -4
- package/dist/MobileMenu-C95GAIm0.mjs.map +1 -0
- package/dist/MobileMenu-CfHqWqsL.mjs.map +1 -0
- package/dist/NewsletterModal-4Lei4Y59.mjs.map +1 -0
- package/dist/{NewsletterModal-BzlUlz3P.mjs → NewsletterModal-B6ky7DBC.mjs} +2 -2
- package/dist/NewsletterModal-B6ky7DBC.mjs.map +1 -0
- package/dist/OrganisationChooser-BufDZsSd.mjs.map +1 -0
- package/dist/{OrganisationChooser-Bm4zqqCH.mjs → OrganisationChooser-CA0_LiTH.mjs} +3 -3
- package/dist/OrganisationChooser-CA0_LiTH.mjs.map +1 -0
- package/dist/{OrganisationChooserLight-BQ9B91mO.mjs → OrganisationChooserLight-BwG5mNdW.mjs} +2 -2
- package/dist/OrganisationChooserLight-BwG5mNdW.mjs.map +1 -0
- package/dist/OrganisationChooserLight-C2oGlc9Z.mjs.map +1 -0
- package/dist/{PageNotFound-BVQ8M8sO.mjs → PageNotFound-BHpjyNDo.mjs} +3 -3
- package/dist/PageNotFound-BHpjyNDo.mjs.map +1 -0
- package/dist/PageNotFound-IMnfLZqX.mjs.map +1 -0
- package/dist/{ParticipantInlineList-BQtQZFW1.mjs → ParticipantInlineList-A8UwjE4m.mjs} +5 -5
- package/dist/ParticipantInlineList-A8UwjE4m.mjs.map +1 -0
- package/dist/ParticipantInlineList-BpVOpEBm.mjs.map +1 -0
- package/dist/ParticipantInlineList-C5jWxedt.mjs.map +1 -0
- package/dist/ParticipantInlineList-C78uhskc.mjs.map +1 -0
- package/dist/ParticipantItem--Wv16z3V.mjs.map +1 -0
- package/dist/ParticipantItem-B3k4mf2V.mjs.map +1 -0
- package/dist/ParticipantItem-DAPOMGZD.mjs.map +1 -0
- package/dist/{ParticipantItem-EDPkxTT-.mjs → ParticipantItem-Szz8WXI6.mjs} +4 -4
- package/dist/ParticipantItem-Szz8WXI6.mjs.map +1 -0
- package/dist/ParticipantPage-BbKUwNKL.mjs.map +1 -0
- package/dist/ParticipantPage-Byq-9aCQ.mjs.map +1 -0
- package/dist/ParticipantPage-D4RVBlE-.mjs.map +1 -0
- package/dist/ParticipantPage-DfLxuZf-.mjs.map +1 -0
- package/dist/{ParticipantPage-BF-s1oof.mjs → ParticipantPage-y3OoBod8.mjs} +9 -9
- package/dist/ParticipantPage-y3OoBod8.mjs.map +1 -0
- package/dist/{ParticipantsPage-Bzt8Hxah.mjs → ParticipantsPage--BxmzVwz.mjs} +7 -7
- package/dist/ParticipantsPage--BxmzVwz.mjs.map +1 -0
- package/dist/ParticipantsPage-BEPHaCy5.mjs.map +1 -0
- package/dist/ParticipantsPage-BlQavFT6.mjs.map +1 -0
- package/dist/ParticipantsPage-D8ja25F9.mjs.map +1 -0
- package/dist/ParticipantsPage-R8LVrDFY.mjs.map +1 -0
- package/dist/{PlayerAnonymousModal-CbrqO1hs.mjs → PlayerAnonymousModal-BGPpTBPW.mjs} +3 -3
- package/dist/PlayerAnonymousModal-BGPpTBPW.mjs.map +1 -0
- package/dist/PlayerAnonymousModal-BW239BiA.mjs.map +1 -0
- package/dist/PlayerCompact-BFC95d7Y.mjs.map +1 -0
- package/dist/PlayerCompact-C-WCTFZN.mjs.map +1 -0
- package/dist/{PlayerCompact-BtKfz384.mjs → PlayerCompact-DnJns8S2.mjs} +4 -4
- package/dist/PlayerCompact-DnJns8S2.mjs.map +1 -0
- package/dist/PlayerComponent-B8AGq9pg.mjs.map +1 -0
- package/dist/{PlayerComponent-CxNkDcFc.mjs → PlayerComponent-BRBrXVjI.mjs} +27 -39
- package/dist/PlayerComponent-BRBrXVjI.mjs.map +1 -0
- package/dist/PlayerComponent-BbvNS7sy.mjs.map +1 -0
- package/dist/PlayerComponent-By_JAwx_.mjs.map +1 -0
- package/dist/PlayerComponent-C425OWjX.mjs.map +1 -0
- package/dist/PlayerComponent-C5PNQ3TW.mjs.map +1 -0
- package/dist/PlayerComponent-Cnk_vePj.mjs.map +1 -0
- package/dist/PlayerComponent-CovfufPB.mjs.map +1 -0
- package/dist/PlayerComponent-DC4jQIwE.mjs.map +1 -0
- package/dist/PlayerComponent-DEUmVv0M.mjs.map +1 -0
- package/dist/PlayerComponent-DOXY0vL0.mjs.map +1 -0
- package/dist/PlayerComponent-DajZbHv7.mjs.map +1 -0
- package/dist/PlayerComponent-DejSC061.mjs.map +1 -0
- package/dist/PlayerComponent-p7W2UNk6.mjs.map +1 -0
- package/dist/PlayerLarge-3zzN7qom.mjs.map +1 -0
- package/dist/{PlayerLarge-BH6BLQxk.mjs → PlayerLarge-B97rRmrJ.mjs} +12 -10
- package/dist/PlayerLarge-B97rRmrJ.mjs.map +1 -0
- package/dist/PlayerLarge-BzwrEgVR.mjs.map +1 -0
- package/dist/PlayerLarge-CLOwDO6Q.mjs.map +1 -0
- package/dist/PlayerLarge-Chv7pMOU.mjs.map +1 -0
- package/dist/PlayerLarge-CkWGaDiY.mjs.map +1 -0
- package/dist/PlayerLarge-D0NMzCRi.mjs.map +1 -0
- package/dist/PlayerLarge-D3obSnYt.mjs.map +1 -0
- package/dist/PlayerLarge-DLGXpE3K.mjs.map +1 -0
- package/dist/PlayerLarge-QtUrqNm5.mjs.map +1 -0
- package/dist/PlayerLarge-juuY9yOX.mjs.map +1 -0
- package/dist/PlayerLarge-n7zyM6b_.mjs.map +1 -0
- package/dist/PlayerLarge-o4FVk0QB.mjs.map +1 -0
- package/dist/PlayerLarge-tMW3v2La.mjs.map +1 -0
- package/dist/PlayerPlayButton-CTu0337E.mjs.map +1 -0
- package/dist/PlayerPlayButton-CfJWIpoP.mjs.map +1 -0
- package/dist/{PlayerPlayButton-DT2OdqnI.mjs → PlayerPlayButton-zKdHGzFr.mjs} +5 -5
- package/dist/PlayerPlayButton-zKdHGzFr.mjs.map +1 -0
- package/dist/{PlayerProgressBar-CSYnPjZb.mjs → PlayerProgressBar-BG5NG596.mjs} +4 -4
- package/dist/PlayerProgressBar-BG5NG596.mjs.map +1 -0
- package/dist/PlayerProgressBar-Cjv8JVY2.mjs.map +1 -0
- package/dist/PlayerProgressBar-Co0_YEF3.mjs.map +1 -0
- package/dist/PlayerStore-B-L2PQ_b.mjs.map +1 -0
- package/dist/PlayerStore-C2XzSrF5.mjs.map +1 -0
- package/dist/{PlayerStore-DukkcHI_.mjs → PlayerStore-vYmnOEA_.mjs} +3 -3
- package/dist/PlayerStore-vYmnOEA_.mjs.map +1 -0
- package/dist/PlayerVideo-DD6NaGkU.mjs.map +1 -0
- package/dist/{PlayerVideo-_Uz00K_T.mjs → PlayerVideo-Ds0oYeTC.mjs} +5 -5
- package/dist/PlayerVideo-Ds0oYeTC.mjs.map +1 -0
- package/dist/PlayerVideo-cYHZOYMv.mjs.map +1 -0
- package/dist/PlayerVideoDigiteka-BPJdJNEB.mjs.map +1 -0
- package/dist/{PlayerVideoDigiteka-CjfuxXBF.mjs → PlayerVideoDigiteka-C7xb0ndg.mjs} +3 -3
- package/dist/PlayerVideoDigiteka-C7xb0ndg.mjs.map +1 -0
- package/dist/PlayerVideoDigiteka-oqtYXqYK.mjs.map +1 -0
- package/dist/PlayerVideoHls-CB4psqbz.mjs.map +1 -0
- package/dist/{PlayerVideoHls-Dms7iTSo.mjs → PlayerVideoHls-xSNqzBEw.mjs} +4 -4
- package/dist/PlayerVideoHls-xSNqzBEw.mjs.map +1 -0
- package/dist/PlayerVideoHls-zNbegJFp.mjs.map +1 -0
- package/dist/PlaylistPage-BUj1Lzfp.mjs.map +1 -0
- package/dist/PlaylistPage-BhcJkM15.mjs.map +1 -0
- package/dist/PlaylistPage-BsHMB2nn.mjs.map +1 -0
- package/dist/{PlaylistPage-CQX0LhXn.mjs → PlaylistPage-D4mcAo00.mjs} +12 -12
- package/dist/PlaylistPage-D4mcAo00.mjs.map +1 -0
- package/dist/PlaylistPage-DjAgejp8.mjs.map +1 -0
- package/dist/PlaylistsPage-B3V5-WT9.mjs.map +1 -0
- package/dist/PlaylistsPage-DSjvWTw5.mjs.map +1 -0
- package/dist/{PlaylistsPage-Bd-u4qlc.mjs → PlaylistsPage-Dr6HKHf8.mjs} +7 -7
- package/dist/PlaylistsPage-Dr6HKHf8.mjs.map +1 -0
- package/dist/PodcastFilterList-C-8AF1Dn.mjs.map +1 -0
- package/dist/{PodcastFilterList-DkH6bqv_.mjs → PodcastFilterList-CYwPiGko.mjs} +3 -3
- package/dist/PodcastFilterList-CYwPiGko.mjs.map +1 -0
- package/dist/PodcastFilterList-C_d1SyTB.mjs.map +1 -0
- package/dist/PodcastFilterList-ClMsIUaO.mjs.map +1 -0
- package/dist/PodcastFilterList-DBS0kvW6.mjs.map +1 -0
- package/dist/PodcastImage-B8o3T5zK.mjs.map +1 -0
- package/dist/{PodcastImage-BtxcPlrh.mjs → PodcastImage-Bs1lpubL.mjs} +4 -4
- package/dist/PodcastImage-Bs1lpubL.mjs.map +1 -0
- package/dist/PodcastImage-DBB5689n.mjs.map +1 -0
- package/dist/PodcastImage-DNLZH0dY.mjs.map +1 -0
- package/dist/PodcastImage-DrV8oxG8.mjs.map +1 -0
- package/dist/{PodcastInlineList-CVWfH5np.mjs → PodcastInlineList-B7-2QswT.mjs} +2 -2
- package/dist/PodcastInlineList-B7-2QswT.mjs.map +1 -0
- package/dist/PodcastInlineList-BVMV6Wvd.mjs.map +1 -0
- package/dist/PodcastInlineList-BXPpF0YD.mjs.map +1 -0
- package/dist/PodcastInlineList-CLjO1SpD.mjs.map +1 -0
- package/dist/PodcastInlineList-Cf5YF0j9.mjs.map +1 -0
- package/dist/PodcastInlineListTemplate-BX0tXOFx.mjs.map +1 -0
- package/dist/{PodcastInlineListTemplate-BWw1Ix-7.mjs → PodcastInlineListTemplate-DCWn3r7s.mjs} +4 -4
- package/dist/PodcastInlineListTemplate-DCWn3r7s.mjs.map +1 -0
- package/dist/PodcastIsPlaying-BG1_FgVX.mjs.map +1 -0
- package/dist/{PodcastIsPlaying-B7YVeSyB.mjs → PodcastIsPlaying-BsObdQGR.mjs} +2 -2
- package/dist/PodcastIsPlaying-BsObdQGR.mjs.map +1 -0
- package/dist/PodcastIsPlaying-Csd-C2jr.mjs.map +1 -0
- package/dist/PodcastItem-CGmEwYT4.mjs.map +1 -0
- package/dist/PodcastItem-CN6gwARQ.mjs.map +1 -0
- package/dist/PodcastItem-CdLjZKxf.mjs.map +1 -0
- package/dist/PodcastItem-D1MwHzhE.mjs.map +1 -0
- package/dist/{PodcastItem-CFk8MX9D.mjs → PodcastItem-_8ErwIDG.mjs} +7 -7
- package/dist/PodcastItem-_8ErwIDG.mjs.map +1 -0
- package/dist/PodcastList-BXla7F3u.mjs.map +1 -0
- package/dist/PodcastList-BqE8dwdc.mjs.map +1 -0
- package/dist/PodcastList-BvC6iOS6.mjs.map +1 -0
- package/dist/PodcastList-CRwA-s7F.mjs.map +1 -0
- package/dist/PodcastList-CVFr9WNS.mjs.map +1 -0
- package/dist/PodcastList-DZKxDulS.mjs.map +1 -0
- package/dist/{PodcastList-BLXPFjvL.mjs → PodcastList-DgLQjL0d.mjs} +6 -6
- package/dist/PodcastList-DgLQjL0d.mjs.map +1 -0
- package/dist/{PodcastList-c0Iwzakm.mjs → PodcastList-DhKeiBbv.mjs} +5 -5
- package/dist/PodcastList-DhKeiBbv.mjs.map +1 -0
- package/dist/PodcastList-Dtq6kEG4.mjs.map +1 -0
- package/dist/PodcastList-Dx-mo7Wo.mjs.map +1 -0
- package/dist/{PodcastPage-C_d9FaS7.mjs → PodcastPage-C5OCwW8q.mjs} +23 -23
- package/dist/PodcastPage-C5OCwW8q.mjs.map +1 -0
- package/dist/PodcastPage-CsVqOGWc.mjs.map +1 -0
- package/dist/PodcastPage-DQInD9ry.mjs.map +1 -0
- package/dist/PodcastPage-Dka9GEzi.mjs.map +1 -0
- package/dist/PodcastPage-acKIH0vO.mjs.map +1 -0
- package/dist/PodcastPlayBar-AgtR8Ia9.mjs.map +1 -0
- package/dist/PodcastPlayBar-D7CyLEM4.mjs.map +1 -0
- package/dist/{PodcastPlayBar-WjGn_KlZ.mjs → PodcastPlayBar-DC5HCx76.mjs} +4 -4
- package/dist/PodcastPlayBar-DC5HCx76.mjs.map +1 -0
- package/dist/PodcastPlayBasicButton-DHYxw3NX.mjs.map +1 -0
- package/dist/{PodcastPlayBasicButton-BNKlqhGR.mjs → PodcastPlayBasicButton-PJHza4d_.mjs} +2 -2
- package/dist/PodcastPlayBasicButton-PJHza4d_.mjs.map +1 -0
- package/dist/PodcastPlayBasicButton-gK82n3YL.mjs.map +1 -0
- package/dist/{PodcastPlayButton-B9hWbPEk.mjs → PodcastPlayButton-1eaXWTlG.mjs} +4 -4
- package/dist/PodcastPlayButton-1eaXWTlG.mjs.map +1 -0
- package/dist/PodcastPlayButton-Bosq5ozq.mjs.map +1 -0
- package/dist/PodcastPlayButton-DIQi57Oh.mjs.map +1 -0
- package/dist/PodcastPlayButton-DcjbCnlT.mjs.map +1 -0
- package/dist/PodcastPlayButton-DgSCyhrd.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-C0HZum5z.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-CSziI2j4.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-CvX2rauY.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-H_rnCHag.mjs.map +1 -0
- package/dist/{PodcastPlaylistInlineList-_csxbYAx.mjs → PodcastPlaylistInlineList-XTbhC8OJ.mjs} +5 -5
- package/dist/PodcastPlaylistInlineList-XTbhC8OJ.mjs.map +1 -0
- package/dist/{PodcastPresentationList-BD8XmnW0.mjs → PodcastPresentationList-BUl5Rq83.mjs} +5 -5
- package/dist/PodcastPresentationList-BUl5Rq83.mjs.map +1 -0
- package/dist/PodcastPresentationList-BvkEDbtG.mjs.map +1 -0
- package/dist/PodcastPresentationList-C0n-xr5w.mjs.map +1 -0
- package/dist/PodcastPresentationList-CnrMkINf.mjs.map +1 -0
- package/dist/PodcastPresentationList-DC-Oi_eK.mjs.map +1 -0
- package/dist/PodcastProgressBar-CP-0ptRF.mjs.map +1 -0
- package/dist/{PodcastProgressBar-B3XOeeJx.mjs → PodcastProgressBar-VG-mRcpi.mjs} +4 -4
- package/dist/PodcastProgressBar-VG-mRcpi.mjs.map +1 -0
- package/dist/PodcastProgressBar-jY43GoFx.mjs.map +1 -0
- package/dist/PodcastRawTranscript-BAu-dt2V.mjs.map +1 -0
- package/dist/{PodcastRawTranscript-D0Nm7jGM.mjs → PodcastRawTranscript-Bf6f5yNd.mjs} +3 -3
- package/dist/PodcastRawTranscript-Bf6f5yNd.mjs.map +1 -0
- package/dist/{PodcastSwiperList-DJ0O3dqM.mjs → PodcastSwiperList-BhulNkN-.mjs} +5 -5
- package/dist/PodcastSwiperList-BhulNkN-.mjs.map +1 -0
- package/dist/PodcastSwiperList-CGeumBPj.mjs.map +1 -0
- package/dist/PodcastSwiperList-CzUkS6M6.mjs.map +1 -0
- package/dist/PodcastSwiperList-DLKOAjUS.mjs.map +1 -0
- package/dist/PodcastSwiperList-DaTHwrHm.mjs.map +1 -0
- package/dist/PodcastmakerHeader-BZT-U0KX.mjs.map +1 -0
- package/dist/{PodcastmakerHeader-DAATtOG_.mjs → PodcastmakerHeader-Df0g2dCr.mjs} +2 -2
- package/dist/PodcastmakerHeader-Df0g2dCr.mjs.map +1 -0
- package/dist/PodcastsPage-B-Qzlif0.mjs.map +1 -0
- package/dist/PodcastsPage-BoK55Z9G.mjs.map +1 -0
- package/dist/PodcastsPage-CTzbr2VD.mjs.map +1 -0
- package/dist/{PodcastsPage-ZhEVoMp1.mjs → PodcastsPage-DSJUPRZE.mjs} +5 -5
- package/dist/PodcastsPage-DSJUPRZE.mjs.map +1 -0
- package/dist/PodcastsPage-Jg_jAix6.mjs.map +1 -0
- package/dist/{ProductorSearch-xs0kzX_E.mjs → ProductorSearch-BTj9gIOs.mjs} +3 -3
- package/dist/ProductorSearch-BTj9gIOs.mjs.map +1 -0
- package/dist/ProductorSearch-ziDbxrDd.mjs.map +1 -0
- package/dist/ProgressBar-BOq9RfZ2.mjs.map +1 -0
- package/dist/{ProgressBar-0DSoUTwB.mjs → ProgressBar-BVc0_6Lv.mjs} +2 -2
- package/dist/ProgressBar-BVc0_6Lv.mjs.map +1 -0
- package/dist/ProgressBar-Cgt2PqnO.mjs.map +1 -0
- package/dist/QrCode-DNiPIFIA.mjs.map +1 -0
- package/dist/{QrCode-CUP2O18d.mjs → QrCode-MCv4t_Bn.mjs} +2 -2
- package/dist/QrCode-MCv4t_Bn.mjs.map +1 -0
- package/dist/{QrCodeModal-DXBCuki7.mjs → QrCodeModal-Be8E0JlC.mjs} +2 -2
- package/dist/QrCodeModal-Be8E0JlC.mjs.map +1 -0
- package/dist/QrCodeModal-DYDKLLuw.mjs.map +1 -0
- package/dist/RadioCurrently-BJOmCSby.mjs.map +1 -0
- package/dist/RadioCurrently-CZePLInZ.mjs.map +1 -0
- package/dist/{RadioCurrently-D5M81oIX.mjs → RadioCurrently-DWySwV64.mjs} +4 -4
- package/dist/RadioCurrently-DWySwV64.mjs.map +1 -0
- package/dist/RadioHistory-7EGvEAMx.mjs.map +1 -0
- package/dist/RadioHistory-BdMa013x.mjs.map +1 -0
- package/dist/{RadioHistory-BgOve4jk.mjs → RadioHistory-DlQFZYp2.mjs} +3 -3
- package/dist/RadioHistory-DlQFZYp2.mjs.map +1 -0
- package/dist/{RadioImage-CUTRr3DL.mjs → RadioImage-BIe2KpG_.mjs} +5 -5
- package/dist/RadioImage-BIe2KpG_.mjs.map +1 -0
- package/dist/RadioImage-CXFZXN1N.mjs.map +1 -0
- package/dist/RadioImage-CpJmuc8a.mjs.map +1 -0
- package/dist/{RadioList-CwzOFHc1.mjs → RadioList-B23gsiEF.mjs} +5 -5
- package/dist/RadioList-B23gsiEF.mjs.map +1 -0
- package/dist/RadioList-BwzgNcMO.mjs.map +1 -0
- package/dist/RadioList-KvAacjmD.mjs.map +1 -0
- package/dist/RadioPage-CM_4A1AQ.mjs.map +1 -0
- package/dist/RadioPage-DkBL81mI.mjs.map +1 -0
- package/dist/{RadioPage-DVflzCV-.mjs → RadioPage-Jg2kmtna.mjs} +11 -11
- package/dist/RadioPage-Jg2kmtna.mjs.map +1 -0
- package/dist/{RadioPlanning-CJ7Qqyhs.mjs → RadioPlanning-2aWTnbZb.mjs} +3 -3
- package/dist/RadioPlanning-2aWTnbZb.mjs.map +1 -0
- package/dist/RadioPlanning-DHxcBVQo.mjs.map +1 -0
- package/dist/RadioProgressBar-BHAawrHe.mjs.map +1 -0
- package/dist/RadioProgressBar-CPjLAoPB.mjs.map +1 -0
- package/dist/{RadioProgressBar-BmJbzzQA.mjs → RadioProgressBar-yIz1oI5d.mjs} +2 -2
- package/dist/RadioProgressBar-yIz1oI5d.mjs.map +1 -0
- package/dist/RecaptchaModal-DKugsU7h.mjs.map +1 -0
- package/dist/{RecaptchaModal-DX9rAHUg.mjs → RecaptchaModal-dfMCfebx.mjs} +2 -2
- package/dist/RecaptchaModal-dfMCfebx.mjs.map +1 -0
- package/dist/ReportAbuseModal-Bxr7NTvH.mjs.map +1 -0
- package/dist/{ReportAbuseModal-CYCRaFAY.mjs → ReportAbuseModal-DZKRbYXJ.mjs} +4 -4
- package/dist/ReportAbuseModal-DZKRbYXJ.mjs.map +1 -0
- package/dist/RightsIndicator-BgW0q3af.mjs.map +1 -0
- package/dist/RightsIndicator-BtzqiPWc.mjs.map +1 -0
- package/dist/{RightsIndicator-qIU4_wiF.mjs → RightsIndicator-D5I3DOfO.mjs} +2 -2
- package/dist/RightsIndicator-D5I3DOfO.mjs.map +1 -0
- package/dist/RightsIndicator-NOZ05rEh.mjs.map +1 -0
- package/dist/RightsWrapper-Cv41FXNO.mjs.map +1 -0
- package/dist/{RightsWrapper-Cs6prZ3E.mjs → RightsWrapper-HasUbnny.mjs} +3 -3
- package/dist/RightsWrapper-HasUbnny.mjs.map +1 -0
- package/dist/{RubriqueFilter-OA_DJKL1.mjs → RubriqueFilter-3SPVH4nT.mjs} +3 -3
- package/dist/RubriqueFilter-3SPVH4nT.mjs.map +1 -0
- package/dist/RubriqueFilter-B_F2fyA0.mjs.map +1 -0
- package/dist/RubriqueList-CalsqgcR.mjs.map +1 -0
- package/dist/{RubriqueList-B94NM5yi.mjs → RubriqueList-TnVM2-Ry.mjs} +3 -3
- package/dist/RubriqueList-TnVM2-Ry.mjs.map +1 -0
- package/dist/RubriquePage-BhneK7GY.mjs.map +1 -0
- package/dist/RubriquePage-CPV9lztT.mjs.map +1 -0
- package/dist/{RubriquePage-DyusiBmp.mjs → RubriquePage-D223TaA2.mjs} +5 -5
- package/dist/RubriquePage-D223TaA2.mjs.map +1 -0
- package/dist/RubriquePage-DriBVVmv.mjs.map +1 -0
- package/dist/RubriquePage-x_tOmQCH.mjs.map +1 -0
- package/dist/SearchPage-B-KDO-5r.mjs.map +1 -0
- package/dist/{SearchPage-BGOBGS4j.mjs → SearchPage-BH1gYkHn.mjs} +3 -3
- package/dist/SearchPage-BH1gYkHn.mjs.map +1 -0
- package/dist/SearchPage-CXOoJF_2.mjs.map +1 -0
- package/dist/SearchPage-DyX_tEm5.mjs.map +1 -0
- package/dist/SearchPage-IvX74fSJ.mjs.map +1 -0
- package/dist/{ShareAnonymous-Chfdzzra.mjs → ShareAnonymous-4UxjKrIe.mjs} +6 -6
- package/dist/ShareAnonymous-4UxjKrIe.mjs.map +1 -0
- package/dist/ShareAnonymous-C4xPMrgf.mjs.map +1 -0
- package/dist/{ShareModalPlayer-CLY_JFFD.mjs → ShareModalPlayer-B0wPlpdU.mjs} +2 -2
- package/dist/ShareModalPlayer-B0wPlpdU.mjs.map +1 -0
- package/dist/ShareModalPlayer-CEvDV-I_.mjs.map +1 -0
- package/dist/ShareNewsletter-Bno5t4ay.mjs.map +1 -0
- package/dist/{ShareNewsletter-B4dn4-jA.mjs → ShareNewsletter-Cf9w-I6c.mjs} +2 -2
- package/dist/ShareNewsletter-Cf9w-I6c.mjs.map +1 -0
- package/dist/SharePlayer-BLqYnywl.mjs.map +1 -0
- package/dist/{SharePlayer-wHDYsWYd.mjs → SharePlayer-Oy1pWckd.mjs} +4 -4
- package/dist/SharePlayer-Oy1pWckd.mjs.map +1 -0
- package/dist/{SharePlayerRadio-D3LXD_gK.mjs → SharePlayerRadio-CI6glNuI.mjs} +3 -3
- package/dist/SharePlayerRadio-CI6glNuI.mjs.map +1 -0
- package/dist/SharePlayerRadio-c_HFTupz.mjs.map +1 -0
- package/dist/SharePlayerTypes-Dkmmw2We.mjs.map +1 -0
- package/dist/{SharePlayerTypes-eYSeVl-W.mjs → SharePlayerTypes-cUgCFZ65.mjs} +2 -2
- package/dist/SharePlayerTypes-cUgCFZ65.mjs.map +1 -0
- package/dist/{ShareSocialsButtons-iHtSoQ3K.mjs → ShareSocialsButtons-BYsXc2Jr.mjs} +2 -2
- package/dist/ShareSocialsButtons-BYsXc2Jr.mjs.map +1 -0
- package/dist/ShareSocialsButtons-DZLZc1c6.mjs.map +1 -0
- package/dist/SimpleLayout-BCsUQENG.mjs.map +1 -0
- package/dist/SimpleLayout-BGKNHHjx.mjs.map +1 -0
- package/dist/SimpleLayout-BHIdltFB.mjs.map +1 -0
- package/dist/SimpleLayout-BKkwQmN6.mjs.map +1 -0
- package/dist/SimpleLayout-BORx9hRX.mjs.map +1 -0
- package/dist/{SimpleLayout-Bk74CAAr.mjs → SimpleLayout-BTJyAJO6.mjs} +3 -3
- package/dist/SimpleLayout-BTJyAJO6.mjs.map +1 -0
- package/dist/SimpleLayout-BvOAauzs.mjs.map +1 -0
- package/dist/SimpleLayout-C3xekYgM.mjs.map +1 -0
- package/dist/SimpleLayout-C4xNk0R4.mjs.map +1 -0
- package/dist/SimpleLayout-CDcsE-Be.mjs.map +1 -0
- package/dist/SimpleLayout-D3M_c1Eu.mjs.map +1 -0
- package/dist/SimpleLayout-DJgC3LcZ.mjs.map +1 -0
- package/dist/SimpleLayout-DkvEZxow.mjs.map +1 -0
- package/dist/SimpleLayout-gtbBGlVV.mjs.map +1 -0
- package/dist/SmartLinkPage-BF8hfaWZ.mjs.map +1 -0
- package/dist/{SmartLinkPage-DbuQT8GM.mjs → SmartLinkPage-DQljzYa-.mjs} +5 -5
- package/dist/SmartLinkPage-DQljzYa-.mjs.map +1 -0
- package/dist/SmartLinkPage-DmlqwhYP.mjs.map +1 -0
- package/dist/SubscribeButtons-DO4MRuDr.mjs.map +1 -0
- package/dist/{SubscribeButtons-rnonTVzT.mjs → SubscribeButtons-lAAMYQCm.mjs} +3 -3
- package/dist/SubscribeButtons-lAAMYQCm.mjs.map +1 -0
- package/dist/{SwiperList-C1v0T1wx.mjs → SwiperList-C51H-enh.mjs} +2 -2
- package/dist/SwiperList-C51H-enh.mjs.map +1 -0
- package/dist/SwiperList-Dsq1MFX6.mjs.map +1 -0
- package/dist/TagList-B5C9zojs.mjs.map +1 -0
- package/dist/{TagList-VeuYS_zJ.mjs → TagList-D3Bn2fIn.mjs} +2 -2
- package/dist/TagList-D3Bn2fIn.mjs.map +1 -0
- package/dist/TagPage-B71pZpRY.mjs.map +1 -0
- package/dist/{TagPage-Bd81QJHn.mjs → TagPage-Brw9iL1F.mjs} +4 -4
- package/dist/TagPage-Brw9iL1F.mjs.map +1 -0
- package/dist/TagPage-CWRyUZkD.mjs.map +1 -0
- package/dist/TagPage-DFo25ZeP.mjs.map +1 -0
- package/dist/TagPage-sI917OpV.mjs.map +1 -0
- package/dist/TopBar-CaCA8kOs.mjs.map +1 -0
- package/dist/{TopBar-CZVp2T7C.mjs → TopBar-DIdhyJi_.mjs} +7 -7
- package/dist/TopBar-DIdhyJi_.mjs.map +1 -0
- package/dist/{UserButtonContent-DmNyGmWr.mjs → UserButtonContent-D13cVA34.mjs} +7 -7
- package/dist/UserButtonContent-D13cVA34.mjs.map +1 -0
- package/dist/UserButtonContent-DMKyXEmF.mjs.map +1 -0
- package/dist/{VideoModuleBox-yJZpgCw6.mjs → VideoModuleBox-CFQmvPrA.mjs} +2 -2
- package/dist/VideoModuleBox-CFQmvPrA.mjs.map +1 -0
- package/dist/VideoModuleBox-DsBLAMrh.mjs.map +1 -0
- package/dist/VideoPage-CfJeWV-R.mjs.map +1 -0
- package/dist/VideoPage-CnIZYz-k.mjs.map +1 -0
- package/dist/VideoPage-D6UNKt2D.mjs.map +1 -0
- package/dist/{VideoPage-y6G4Y2Zi.mjs → VideoPage-DU9dJviO.mjs} +10 -10
- package/dist/VideoPage-DU9dJviO.mjs.map +1 -0
- package/dist/VideoPage-OIb28KAS.mjs.map +1 -0
- package/dist/classicApi-C70YSK8J.mjs.map +1 -0
- package/dist/classicApi-DuzZv1Wk.mjs.map +1 -1
- package/dist/{classicApi-CkDHWZG1.mjs → classicApi-xjOqAovv.mjs} +11 -8
- package/dist/classicApi-xjOqAovv.mjs.map +1 -0
- package/dist/downloadHelper-C4q0i5xN.mjs.map +1 -0
- package/dist/{downloadHelper-DLdkblYN.mjs → downloadHelper-DY3fF3dA.mjs} +2 -2
- package/dist/downloadHelper-DY3fF3dA.mjs.map +1 -0
- package/dist/index.mjs +102 -97
- package/dist/index.mjs.map +1 -1
- package/dist/tests.mjs +2 -2
- package/dist/{useAdvancedParamInit-B7G2Mvjv.mjs → useAdvancedParamInit-CCprE3H2.mjs} +6 -6
- package/dist/useAdvancedParamInit-CCprE3H2.mjs.map +1 -0
- package/dist/useAdvancedParamInit-CT8CdPFW.mjs.map +1 -0
- package/dist/useDayjs-BPXVSBns.mjs.map +1 -0
- package/dist/{useDayjs-C3cnTiDW.mjs → useDayjs-DPVjvJPN.mjs} +2 -2
- package/dist/useDayjs-DPVjvJPN.mjs.map +1 -0
- package/dist/useErrorHandler-BxQT9ZGf.mjs.map +1 -0
- package/dist/{useErrorHandler-DtLjD9t_.mjs → useErrorHandler-D3XVxUh6.mjs} +2 -2
- package/dist/useErrorHandler-D3XVxUh6.mjs.map +1 -0
- package/dist/{useImageProxy-Bj0cOCct.mjs → useImageProxy-BdQJmj4a.mjs} +2 -2
- package/dist/useImageProxy-BdQJmj4a.mjs.map +1 -0
- package/dist/useImageProxy-DROuweGY.mjs.map +1 -0
- package/dist/{useOrgaComputed-BLSpEDfb.mjs → useOrgaComputed-B2Bq0VBT.mjs} +2 -2
- package/dist/useOrgaComputed-B2Bq0VBT.mjs.map +1 -0
- package/dist/useOrgaComputed-CGomgs0r.mjs.map +1 -0
- package/dist/{usePlayerLogicProgress-75G9QMg_.mjs → usePlayerLogicProgress-DcHbYGOR.mjs} +3 -3
- package/dist/usePlayerLogicProgress-DcHbYGOR.mjs.map +1 -0
- package/dist/usePlayerLogicProgress-Dchl5sUO.mjs.map +1 -0
- package/dist/usePlayerLogicProgress-lqnQ5qNd.mjs.map +1 -0
- package/dist/{usePodcastView-BftS642h.mjs → usePodcastView-BDZ6CGQj.mjs} +4 -4
- package/dist/usePodcastView-BDZ6CGQj.mjs.map +1 -0
- package/dist/usePodcastView-CI5le-WW.mjs.map +1 -0
- package/dist/usePresentationItem-Cw9fBYUi.mjs.map +1 -0
- package/dist/{usePresentationItem-CNXIk-Sf.mjs → usePresentationItem-UwAuhVqo.mjs} +4 -4
- package/dist/usePresentationItem-UwAuhVqo.mjs.map +1 -0
- package/dist/useRights-D8CLzCMH.mjs.map +1 -0
- package/dist/{useRights-Co0TgD8y.mjs → useRights-DSZ-5pFg.mjs} +2 -2
- package/dist/useRights-DSZ-5pFg.mjs.map +1 -0
- package/dist/{useRubriquesFilterComputed-VsdTUNL6.mjs → useRubriquesFilterComputed-BkDeXTf-.mjs} +2 -2
- package/dist/useRubriquesFilterComputed-BkDeXTf-.mjs.map +1 -0
- package/dist/useRubriquesFilterComputed-Bkre15fg.mjs.map +1 -0
- package/dist/useRubriquesFilterParam-BmE8v1fS.mjs.map +1 -0
- package/dist/{useRubriquesFilterParam--x07HEw1.mjs → useRubriquesFilterParam-Delgf48y.mjs} +2 -2
- package/dist/useRubriquesFilterParam-Delgf48y.mjs.map +1 -0
- package/dist/{useSharePlatforms-CSSRTkTG.mjs → useSharePlatforms-07n3JYu2.mjs} +3 -3
- package/dist/useSharePlatforms-07n3JYu2.mjs.map +1 -0
- package/dist/useSharePlatforms-B_3OwBFv.mjs.map +1 -0
- package/dist/{useSimplePageParam-ClaGQ9yj.mjs → useSimplePageParam-CsY_ie3c.mjs} +2 -2
- package/dist/useSimplePageParam-CsY_ie3c.mjs.map +1 -0
- package/dist/useSimplePageParam-ki2VyM-X.mjs.map +1 -0
- package/dist/{useTranslation-BNshNMQT.mjs → useTranslation-ChEasnl9.mjs} +25 -8
- package/dist/useTranslation-ChEasnl9.mjs.map +1 -0
- package/dist/useTranslation-D0R0BSx9.mjs.map +1 -0
- package/dist/usefetchRadioData-BPmkztGC.mjs.map +1 -0
- package/dist/{usefetchRadioData-C2cwiaCP.mjs → usefetchRadioData-CkrAfN1c.mjs} +2 -2
- package/dist/usefetchRadioData-CkrAfN1c.mjs.map +1 -0
- package/package.json +1 -1
- package/src/components/composable/player/usePlayerLive.ts +8 -7
- package/src/stores/AuthStore.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastPlayBar-D7CyLEM4.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastPlayBar.vue","../src/components/display/podcasts/PodcastPlayBar.vue"],"sourcesContent":["<template>\n <div class=\"d-flex align-items-center\">\n <PodcastPlayBasicButton v-if=\"displayButonPlay\" :podcast=\"podcast\"/>\n <div class=\"d-flex align-items-center podcast-play-bar flex-grow-1\">\n <div class=\"me-2\">\n {{ playedTime }}\n </div>\n <div class=\"position-relative flex-grow-1\">\n <ProgressBar\n :main-progress=\"percentProgress\"\n class=\"medium\"\n @mouseup=\"seekTo\"\n />\n </div>\n <div class=\"ms-2\">\n {{ totalTime }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ProgressBar from \"../../misc/ProgressBar.vue\";\nimport DurationHelper from \"../../../helper/durationHelper\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed, defineAsyncComponent } from \"vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nconst PodcastPlayBasicButton = defineAsyncComponent(() => import(\"./PodcastPlayBasicButton.vue\"));\n\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n displayButonPlay:{ default: false, type: Boolean },\n})\n\n//Composables\nconst playerStore = usePlayerStore();\n\n//Computed\nconst percentProgress = computed(() => {\n if (props.podcast?.podcastId !== playerStore.playerPodcast?.podcastId) {\n return 0;\n }\n return !playerStore.playerElapsed ? 0 : playerStore.playerElapsed * 100;\n});\nconst playedTime = computed(() => {\n if (props.podcast?.podcastId === playerStore.playerPodcast?.podcastId) {\n if (\n playerStore.playerElapsed &&\n playerStore.playerElapsed > 0 &&\n playerStore.playerTotal &&\n playerStore.playerTotal > 0\n ) {\n return DurationHelper.formatDuration(\n Math.round(playerStore.playerElapsed * playerStore.playerTotal),\n );\n }\n }\n return \"00:00\";\n});\nconst totalTime = computed(() => DurationHelper.formatDuration(Math.round(props.podcast.duration / 1000)));\n\n//Methods\nfunction seekTo(event: MouseEvent): void {\n if (\n !playerStore.playerPodcast ||\n props.podcast?.podcastId !== playerStore.playerPodcast.podcastId\n ) {\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 playerStore.playerUpdateSeekTime(playerStore.playerTotal * percentPosition);\n}\n</script>","<template>\n <div class=\"d-flex align-items-center\">\n <PodcastPlayBasicButton v-if=\"displayButonPlay\" :podcast=\"podcast\"/>\n <div class=\"d-flex align-items-center podcast-play-bar flex-grow-1\">\n <div class=\"me-2\">\n {{ playedTime }}\n </div>\n <div class=\"position-relative flex-grow-1\">\n <ProgressBar\n :main-progress=\"percentProgress\"\n class=\"medium\"\n @mouseup=\"seekTo\"\n />\n </div>\n <div class=\"ms-2\">\n {{ totalTime }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ProgressBar from \"../../misc/ProgressBar.vue\";\nimport DurationHelper from \"../../../helper/durationHelper\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed, defineAsyncComponent } from \"vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nconst PodcastPlayBasicButton = defineAsyncComponent(() => import(\"./PodcastPlayBasicButton.vue\"));\n\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n displayButonPlay:{ default: false, type: Boolean },\n})\n\n//Composables\nconst playerStore = usePlayerStore();\n\n//Computed\nconst percentProgress = computed(() => {\n if (props.podcast?.podcastId !== playerStore.playerPodcast?.podcastId) {\n return 0;\n }\n return !playerStore.playerElapsed ? 0 : playerStore.playerElapsed * 100;\n});\nconst playedTime = computed(() => {\n if (props.podcast?.podcastId === playerStore.playerPodcast?.podcastId) {\n if (\n playerStore.playerElapsed &&\n playerStore.playerElapsed > 0 &&\n playerStore.playerTotal &&\n playerStore.playerTotal > 0\n ) {\n return DurationHelper.formatDuration(\n Math.round(playerStore.playerElapsed * playerStore.playerTotal),\n );\n }\n }\n return \"00:00\";\n});\nconst totalTime = computed(() => DurationHelper.formatDuration(Math.round(props.podcast.duration / 1000)));\n\n//Methods\nfunction seekTo(event: MouseEvent): void {\n if (\n !playerStore.playerPodcast ||\n props.podcast?.podcastId !== playerStore.playerPodcast.podcastId\n ) {\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 playerStore.playerUpdateSeekTime(playerStore.playerTotal * percentPosition);\n}\n</script>"],"mappings":";;;;;;;;;;;;;;;;;;;EA2BA,MAAM,yBAAyB,2BAA2B,OAAO,wCAA+B;EAIhG,MAAM,QAAQ;EAMd,MAAM,cAAc,eAAe;EAGnC,MAAM,kBAAkB,eAAe;GACrC,IAAI,MAAM,SAAS,cAAc,YAAY,eAAe,WAC1D,OAAO;GAET,OAAO,CAAC,YAAY,gBAAgB,IAAI,YAAY,gBAAgB;EACtE,CAAC;EACD,MAAM,aAAa,eAAe;GAChC,IAAI,MAAM,SAAS,cAAc,YAAY,eAAe;QAExD,YAAY,iBACZ,YAAY,gBAAgB,KAC5B,YAAY,eACZ,YAAY,cAAc,GAE1B,OAAO,uBAAe,eACpB,KAAK,MAAM,YAAY,gBAAgB,YAAY,WAAW,CAChE;GAAA;GAGJ,OAAO;EACT,CAAC;EACD,MAAM,YAAY,eAAe,uBAAe,eAAe,KAAK,MAAM,MAAM,QAAQ,WAAW,GAAI,CAAC,CAAC;EAGzG,SAAS,OAAO,OAAyB;GACvC,IACE,CAAC,YAAY,iBACb,MAAM,SAAS,cAAc,YAAY,cAAc,WAEvD;GAEF,MAAM,OAAQ,MAAM,cAA0B,sBAAsB;GACpE,MAAM,WAAY,MAAM,cAA0B;GAElD,MAAM,mBADI,MAAM,UAAU,KAAK,QACH;GAC5B,YAAY,qBAAqB,YAAY,cAAc,eAAe;EAC5E;;;;;;;;;;;;;;;;;;;;mBC3EO,OAAM,4BAA2B;mBAE/B,OAAM,yDAAwD;mBAC5D,OAAM,OAAM;mBAGZ,OAAM,gCAA+B;mBAOrC,OAAM,OAAM;;qBAbrB,mBAiBM,OAjBN,YAiBM,CAhB0B,OAAA,oBAAA,UAAA,GAA9B,YAAoE,OAAA,2BAAA;;EAAnB,SAAS,OAAA;+DAC1D,mBAcM,OAdN,YAcM;EAbJ,mBAEM,OAFN,YAEM,gBADD,OAAA,UAAU,GAAA,CAAA;EAEf,mBAMM,OANN,YAMM,CALJ,YAIE,OAAA,gBAAA;GAHC,iBAAe,OAAA;GAChB,OAAM;GACL,WAAS,OAAA;;EAGd,mBAEM,OAFN,YAEM,gBADD,OAAA,SAAS,GAAA,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BOaGB7Aw.mjs";
|
|
2
|
-
import { n as usePlayerStore, r as durationHelper_default } from "./PlayerStore-
|
|
3
|
-
import { t as ProgressBar_default } from "./ProgressBar-
|
|
2
|
+
import { n as usePlayerStore, r as durationHelper_default } from "./PlayerStore-vYmnOEA_.mjs";
|
|
3
|
+
import { t as ProgressBar_default } from "./ProgressBar-BVc0_6Lv.mjs";
|
|
4
4
|
import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineAsyncComponent, defineComponent, openBlock, toDisplayString } from "vue";
|
|
5
5
|
//#region src/components/display/podcasts/PodcastPlayBar.vue?vue&type=script&setup=true&lang.ts
|
|
6
6
|
var PodcastPlayBar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
@@ -17,7 +17,7 @@ var PodcastPlayBar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
|
|
|
17
17
|
},
|
|
18
18
|
setup(__props, { expose: __expose }) {
|
|
19
19
|
__expose();
|
|
20
|
-
const PodcastPlayBasicButton = defineAsyncComponent(() => import("./PodcastPlayBasicButton-
|
|
20
|
+
const PodcastPlayBasicButton = defineAsyncComponent(() => import("./PodcastPlayBasicButton-PJHza4d_.mjs"));
|
|
21
21
|
const props = __props;
|
|
22
22
|
const playerStore = usePlayerStore();
|
|
23
23
|
const percentProgress = computed(() => {
|
|
@@ -80,4 +80,4 @@ var PodcastPlayBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(Pod
|
|
|
80
80
|
//#endregion
|
|
81
81
|
export { PodcastPlayBar_default as default };
|
|
82
82
|
|
|
83
|
-
//# sourceMappingURL=PodcastPlayBar-
|
|
83
|
+
//# sourceMappingURL=PodcastPlayBar-DC5HCx76.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastPlayBar-DC5HCx76.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastPlayBar.vue","../src/components/display/podcasts/PodcastPlayBar.vue"],"sourcesContent":["<template>\n <div class=\"d-flex align-items-center\">\n <PodcastPlayBasicButton v-if=\"displayButonPlay\" :podcast=\"podcast\"/>\n <div class=\"d-flex align-items-center podcast-play-bar flex-grow-1\">\n <div class=\"me-2\">\n {{ playedTime }}\n </div>\n <div class=\"position-relative flex-grow-1\">\n <ProgressBar\n :main-progress=\"percentProgress\"\n class=\"medium\"\n @mouseup=\"seekTo\"\n />\n </div>\n <div class=\"ms-2\">\n {{ totalTime }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ProgressBar from \"../../misc/ProgressBar.vue\";\nimport DurationHelper from \"../../../helper/durationHelper\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed, defineAsyncComponent } from \"vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nconst PodcastPlayBasicButton = defineAsyncComponent(() => import(\"./PodcastPlayBasicButton.vue\"));\n\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n displayButonPlay:{ default: false, type: Boolean },\n})\n\n//Composables\nconst playerStore = usePlayerStore();\n\n//Computed\nconst percentProgress = computed(() => {\n if (props.podcast?.podcastId !== playerStore.playerPodcast?.podcastId) {\n return 0;\n }\n return !playerStore.playerElapsed ? 0 : playerStore.playerElapsed * 100;\n});\nconst playedTime = computed(() => {\n if (props.podcast?.podcastId === playerStore.playerPodcast?.podcastId) {\n if (\n playerStore.playerElapsed &&\n playerStore.playerElapsed > 0 &&\n playerStore.playerTotal &&\n playerStore.playerTotal > 0\n ) {\n return DurationHelper.formatDuration(\n Math.round(playerStore.playerElapsed * playerStore.playerTotal),\n );\n }\n }\n return \"00:00\";\n});\nconst totalTime = computed(() => DurationHelper.formatDuration(Math.round(props.podcast.duration / 1000)));\n\n//Methods\nfunction seekTo(event: MouseEvent): void {\n if (\n !playerStore.playerPodcast ||\n props.podcast?.podcastId !== playerStore.playerPodcast.podcastId\n ) {\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 playerStore.playerUpdateSeekTime(playerStore.playerTotal * percentPosition);\n}\n</script>","<template>\n <div class=\"d-flex align-items-center\">\n <PodcastPlayBasicButton v-if=\"displayButonPlay\" :podcast=\"podcast\"/>\n <div class=\"d-flex align-items-center podcast-play-bar flex-grow-1\">\n <div class=\"me-2\">\n {{ playedTime }}\n </div>\n <div class=\"position-relative flex-grow-1\">\n <ProgressBar\n :main-progress=\"percentProgress\"\n class=\"medium\"\n @mouseup=\"seekTo\"\n />\n </div>\n <div class=\"ms-2\">\n {{ totalTime }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ProgressBar from \"../../misc/ProgressBar.vue\";\nimport DurationHelper from \"../../../helper/durationHelper\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed, defineAsyncComponent } from \"vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nconst PodcastPlayBasicButton = defineAsyncComponent(() => import(\"./PodcastPlayBasicButton.vue\"));\n\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n displayButonPlay:{ default: false, type: Boolean },\n})\n\n//Composables\nconst playerStore = usePlayerStore();\n\n//Computed\nconst percentProgress = computed(() => {\n if (props.podcast?.podcastId !== playerStore.playerPodcast?.podcastId) {\n return 0;\n }\n return !playerStore.playerElapsed ? 0 : playerStore.playerElapsed * 100;\n});\nconst playedTime = computed(() => {\n if (props.podcast?.podcastId === playerStore.playerPodcast?.podcastId) {\n if (\n playerStore.playerElapsed &&\n playerStore.playerElapsed > 0 &&\n playerStore.playerTotal &&\n playerStore.playerTotal > 0\n ) {\n return DurationHelper.formatDuration(\n Math.round(playerStore.playerElapsed * playerStore.playerTotal),\n );\n }\n }\n return \"00:00\";\n});\nconst totalTime = computed(() => DurationHelper.formatDuration(Math.round(props.podcast.duration / 1000)));\n\n//Methods\nfunction seekTo(event: MouseEvent): void {\n if (\n !playerStore.playerPodcast ||\n props.podcast?.podcastId !== playerStore.playerPodcast.podcastId\n ) {\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 playerStore.playerUpdateSeekTime(playerStore.playerTotal * percentPosition);\n}\n</script>"],"mappings":";;;;;;;;;;;;;;;;;;;EA2BA,MAAM,yBAAyB,2BAA2B,OAAO,wCAA+B;EAIhG,MAAM,QAAQ;EAMd,MAAM,cAAc,eAAe;EAGnC,MAAM,kBAAkB,eAAe;GACrC,IAAI,MAAM,SAAS,cAAc,YAAY,eAAe,WAC1D,OAAO;GAET,OAAO,CAAC,YAAY,gBAAgB,IAAI,YAAY,gBAAgB;EACtE,CAAC;EACD,MAAM,aAAa,eAAe;GAChC,IAAI,MAAM,SAAS,cAAc,YAAY,eAAe;QAExD,YAAY,iBACZ,YAAY,gBAAgB,KAC5B,YAAY,eACZ,YAAY,cAAc,GAE1B,OAAO,uBAAe,eACpB,KAAK,MAAM,YAAY,gBAAgB,YAAY,WAAW,CAChE;GAAA;GAGJ,OAAO;EACT,CAAC;EACD,MAAM,YAAY,eAAe,uBAAe,eAAe,KAAK,MAAM,MAAM,QAAQ,WAAW,GAAI,CAAC,CAAC;EAGzG,SAAS,OAAO,OAAyB;GACvC,IACE,CAAC,YAAY,iBACb,MAAM,SAAS,cAAc,YAAY,cAAc,WAEvD;GAEF,MAAM,OAAQ,MAAM,cAA0B,sBAAsB;GACpE,MAAM,WAAY,MAAM,cAA0B;GAElD,MAAM,mBADI,MAAM,UAAU,KAAK,QACH;GAC5B,YAAY,qBAAqB,YAAY,cAAc,eAAe;EAC5E;;;;;;;;;;;;;;;;;;;;mBC3EO,OAAM,4BAA2B;mBAE/B,OAAM,yDAAwD;mBAC5D,OAAM,OAAM;mBAGZ,OAAM,gCAA+B;mBAOrC,OAAM,OAAM;;qBAbrB,mBAiBM,OAjBN,YAiBM,CAhB0B,OAAA,oBAAA,UAAA,GAA9B,YAAoE,OAAA,2BAAA;;EAAnB,SAAS,OAAA;+DAC1D,mBAcM,OAdN,YAcM;EAbJ,mBAEM,OAFN,YAEM,gBADD,OAAA,UAAU,GAAA,CAAA;EAEf,mBAMM,OANN,YAMM,CALJ,YAIE,OAAA,gBAAA;GAHC,iBAAe,OAAA;GAChB,OAAM;GACL,WAAS,OAAA;;EAGd,mBAEM,OAFN,YAEM,gBADD,OAAA,SAAS,GAAA,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastPlayBasicButton-DHYxw3NX.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastPlayBasicButton.vue","../src/components/display/podcasts/PodcastPlayBasicButton.vue"],"sourcesContent":["<template>\n <button\n class=\"btn play-button-box bg-primary\"\n @click=\"clickBtn(podcast)\"\n >\n <PlayIcon v-if=\"btnPlay\" class=\"text-light\" :title=\"t('Play')\" />\n <PauseIcon v-else class=\"text-light\" :title=\"t('Pause')\" />\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport PlayIcon from \"vue-material-design-icons/Play.vue\";\nimport PauseIcon from \"vue-material-design-icons/Pause.vue\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed } from \"vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n})\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\n\n//Computed\nconst btnPlay = computed(() => playerStore.playerPodcast !== props.podcast || (playerStore.playerPodcast === props.podcast && 'PAUSED' === playerStore.playerStatus));\n\n\n//Methods\nfunction clickBtn(podcast: Podcast){\n if(btnPlay.value){\n play(podcast);\n return;\n }\n pause();\n}\nfunction play(podcast: Podcast): void {\n if (podcast === playerStore.playerPodcast) {\n playerStore.playerChangeStatus(false);\n } else {\n playerStore.playerPlay(podcast);\n }\n}\nfunction pause(): void {\n playerStore.playerChangeStatus(true);\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../style/playButton\";\n</style>","<template>\n <button\n class=\"btn play-button-box bg-primary\"\n @click=\"clickBtn(podcast)\"\n >\n <PlayIcon v-if=\"btnPlay\" class=\"text-light\" :title=\"t('Play')\" />\n <PauseIcon v-else class=\"text-light\" :title=\"t('Pause')\" />\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport PlayIcon from \"vue-material-design-icons/Play.vue\";\nimport PauseIcon from \"vue-material-design-icons/Pause.vue\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed } from \"vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n})\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\n\n//Computed\nconst btnPlay = computed(() => playerStore.playerPodcast !== props.podcast || (playerStore.playerPodcast === props.podcast && 'PAUSED' === playerStore.playerStatus));\n\n\n//Methods\nfunction clickBtn(podcast: Podcast){\n if(btnPlay.value){\n play(podcast);\n return;\n }\n pause();\n}\nfunction play(podcast: Podcast): void {\n if (podcast === playerStore.playerPodcast) {\n playerStore.playerChangeStatus(false);\n } else {\n playerStore.playerPlay(podcast);\n }\n}\nfunction pause(): void {\n playerStore.playerChangeStatus(true);\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../style/playButton\";\n</style>"],"mappings":";;;;;;;;;;;;;;;EAoBA,MAAM,QAAQ;EAKd,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,cAAc,eAAe;EAGnC,MAAM,UAAU,eAAe,YAAY,kBAAkB,MAAM,WAAY,YAAY,kBAAkB,MAAM,WAAW,aAAa,YAAY,YAAa;EAIpK,SAAS,SAAS,SAAiB;GACjC,IAAG,QAAQ,OAAM;IACf,KAAK,OAAO;IACZ;GACF;GACA,MAAM;EACR;EACA,SAAS,KAAK,SAAwB;GACpC,IAAI,YAAY,YAAY,eAC1B,YAAY,mBAAmB,KAAK;QAEpC,YAAY,WAAW,OAAO;EAElC;EACA,SAAS,QAAc;GACrB,YAAY,mBAAmB,IAAI;EACrC;;;;;;;;;;;;;;;;;;;;;;qBChDE,mBAMS,UAAA;EALP,OAAM;EACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,SAAS,OAAA,OAAO;KAER,OAAA,WAAA,UAAA,GAAhB,YAAiE,OAAA,aAAA;;EAAxC,OAAM;EAAc,OAAO,OAAA,EAAC,MAAA;yCACrD,YAA2D,OAAA,cAAA;;EAAzC,OAAM;EAAc,OAAO,OAAA,EAAC,OAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BOaGB7Aw.mjs";
|
|
2
|
-
import { n as usePlayerStore } from "./PlayerStore-
|
|
2
|
+
import { n as usePlayerStore } from "./PlayerStore-vYmnOEA_.mjs";
|
|
3
3
|
import { computed, createBlock, createElementBlock, defineComponent, openBlock } from "vue";
|
|
4
4
|
import { useI18n } from "vue-i18n";
|
|
5
5
|
import PlayIcon from "vue-material-design-icons/Play.vue";
|
|
@@ -69,4 +69,4 @@ var PodcastPlayBasicButton_default = /*#__PURE__*/ _plugin_vue_export_helper_def
|
|
|
69
69
|
//#endregion
|
|
70
70
|
export { PodcastPlayBasicButton_default as default };
|
|
71
71
|
|
|
72
|
-
//# sourceMappingURL=PodcastPlayBasicButton-
|
|
72
|
+
//# sourceMappingURL=PodcastPlayBasicButton-PJHza4d_.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastPlayBasicButton-PJHza4d_.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastPlayBasicButton.vue","../src/components/display/podcasts/PodcastPlayBasicButton.vue"],"sourcesContent":["<template>\n <button\n class=\"btn play-button-box bg-primary\"\n @click=\"clickBtn(podcast)\"\n >\n <PlayIcon v-if=\"btnPlay\" class=\"text-light\" :title=\"t('Play')\" />\n <PauseIcon v-else class=\"text-light\" :title=\"t('Pause')\" />\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport PlayIcon from \"vue-material-design-icons/Play.vue\";\nimport PauseIcon from \"vue-material-design-icons/Pause.vue\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed } from \"vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n})\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\n\n//Computed\nconst btnPlay = computed(() => playerStore.playerPodcast !== props.podcast || (playerStore.playerPodcast === props.podcast && 'PAUSED' === playerStore.playerStatus));\n\n\n//Methods\nfunction clickBtn(podcast: Podcast){\n if(btnPlay.value){\n play(podcast);\n return;\n }\n pause();\n}\nfunction play(podcast: Podcast): void {\n if (podcast === playerStore.playerPodcast) {\n playerStore.playerChangeStatus(false);\n } else {\n playerStore.playerPlay(podcast);\n }\n}\nfunction pause(): void {\n playerStore.playerChangeStatus(true);\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../style/playButton\";\n</style>","<template>\n <button\n class=\"btn play-button-box bg-primary\"\n @click=\"clickBtn(podcast)\"\n >\n <PlayIcon v-if=\"btnPlay\" class=\"text-light\" :title=\"t('Play')\" />\n <PauseIcon v-else class=\"text-light\" :title=\"t('Pause')\" />\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport PlayIcon from \"vue-material-design-icons/Play.vue\";\nimport PauseIcon from \"vue-material-design-icons/Pause.vue\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed } from \"vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n})\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\n\n//Computed\nconst btnPlay = computed(() => playerStore.playerPodcast !== props.podcast || (playerStore.playerPodcast === props.podcast && 'PAUSED' === playerStore.playerStatus));\n\n\n//Methods\nfunction clickBtn(podcast: Podcast){\n if(btnPlay.value){\n play(podcast);\n return;\n }\n pause();\n}\nfunction play(podcast: Podcast): void {\n if (podcast === playerStore.playerPodcast) {\n playerStore.playerChangeStatus(false);\n } else {\n playerStore.playerPlay(podcast);\n }\n}\nfunction pause(): void {\n playerStore.playerChangeStatus(true);\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../style/playButton\";\n</style>"],"mappings":";;;;;;;;;;;;;;;EAoBA,MAAM,QAAQ;EAKd,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,cAAc,eAAe;EAGnC,MAAM,UAAU,eAAe,YAAY,kBAAkB,MAAM,WAAY,YAAY,kBAAkB,MAAM,WAAW,aAAa,YAAY,YAAa;EAIpK,SAAS,SAAS,SAAiB;GACjC,IAAG,QAAQ,OAAM;IACf,KAAK,OAAO;IACZ;GACF;GACA,MAAM;EACR;EACA,SAAS,KAAK,SAAwB;GACpC,IAAI,YAAY,YAAY,eAC1B,YAAY,mBAAmB,KAAK;QAEpC,YAAY,WAAW,OAAO;EAElC;EACA,SAAS,QAAc;GACrB,YAAY,mBAAmB,IAAI;EACrC;;;;;;;;;;;;;;;;;;;;;;qBChDE,mBAMS,UAAA;EALP,OAAM;EACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,SAAS,OAAA,OAAO;KAER,OAAA,WAAA,UAAA,GAAhB,YAAiE,OAAA,aAAA;;EAAxC,OAAM;EAAc,OAAO,OAAA,EAAC,MAAA;yCACrD,YAA2D,OAAA,cAAA;;EAAzC,OAAM;EAAc,OAAO,OAAA,EAAC,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastPlayBasicButton-gK82n3YL.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastPlayBasicButton.vue","../src/components/display/podcasts/PodcastPlayBasicButton.vue"],"sourcesContent":["<template>\n <button\n class=\"btn play-button-box bg-primary\"\n @click=\"clickBtn(podcast)\"\n >\n <PlayIcon v-if=\"btnPlay\" class=\"text-light\" :title=\"t('Play')\" />\n <PauseIcon v-else class=\"text-light\" :title=\"t('Pause')\" />\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport PlayIcon from \"vue-material-design-icons/Play.vue\";\nimport PauseIcon from \"vue-material-design-icons/Pause.vue\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed } from \"vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n})\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\n\n//Computed\nconst btnPlay = computed(() => playerStore.playerPodcast !== props.podcast || (playerStore.playerPodcast === props.podcast && 'PAUSED' === playerStore.playerStatus));\n\n\n//Methods\nfunction clickBtn(podcast: Podcast){\n if(btnPlay.value){\n play(podcast);\n return;\n }\n pause();\n}\nfunction play(podcast: Podcast): void {\n if (podcast === playerStore.playerPodcast) {\n playerStore.playerChangeStatus(false);\n } else {\n playerStore.playerPlay(podcast);\n }\n}\nfunction pause(): void {\n playerStore.playerChangeStatus(true);\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../style/playButton\";\n</style>","<template>\n <button\n class=\"btn play-button-box bg-primary\"\n @click=\"clickBtn(podcast)\"\n >\n <PlayIcon v-if=\"btnPlay\" class=\"text-light\" :title=\"t('Play')\" />\n <PauseIcon v-else class=\"text-light\" :title=\"t('Pause')\" />\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport PlayIcon from \"vue-material-design-icons/Play.vue\";\nimport PauseIcon from \"vue-material-design-icons/Pause.vue\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { computed } from \"vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n})\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\n\n//Computed\nconst btnPlay = computed(() => playerStore.playerPodcast !== props.podcast || (playerStore.playerPodcast === props.podcast && 'PAUSED' === playerStore.playerStatus));\n\n\n//Methods\nfunction clickBtn(podcast: Podcast){\n if(btnPlay.value){\n play(podcast);\n return;\n }\n pause();\n}\nfunction play(podcast: Podcast): void {\n if (podcast === playerStore.playerPodcast) {\n playerStore.playerChangeStatus(false);\n } else {\n playerStore.playerPlay(podcast);\n }\n}\nfunction pause(): void {\n playerStore.playerChangeStatus(true);\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../style/playButton\";\n</style>"],"mappings":";;;;;;;;;;;;;;;EAoBA,MAAM,QAAQ;EAKd,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,cAAc,eAAe;EAGnC,MAAM,UAAU,eAAe,YAAY,kBAAkB,MAAM,WAAY,YAAY,kBAAkB,MAAM,WAAW,aAAa,YAAY,YAAa;EAIpK,SAAS,SAAS,SAAiB;GACjC,IAAG,QAAQ,OAAM;IACf,KAAK,OAAO;IACZ;GACF;GACA,MAAM;EACR;EACA,SAAS,KAAK,SAAwB;GACpC,IAAI,YAAY,YAAY,eAC1B,YAAY,mBAAmB,KAAK;QAEpC,YAAY,WAAW,OAAO;EAElC;EACA,SAAS,QAAc;GACrB,YAAY,mBAAmB,IAAI;EACrC;;;;;;;;;;;;;;;;;;;;;;qBChDE,mBAMS,UAAA;EALP,OAAM;EACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,SAAS,OAAA,OAAO;KAER,OAAA,WAAA,UAAA,GAAhB,YAAiE,OAAA,aAAA;;EAAxC,OAAM;EAAc,OAAO,OAAA,EAAC,MAAA;yCACrD,YAA2D,OAAA,cAAA;;EAAzC,OAAM;EAAc,OAAO,OAAA,EAAC,OAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
2
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BOaGB7Aw.mjs";
|
|
3
|
-
import { A as state, m as podcastApi } from "./classicApi-
|
|
3
|
+
import { A as state, m as podcastApi } from "./classicApi-xjOqAovv.mjs";
|
|
4
4
|
import { t as useResizePhone } from "./useResizePhone-CpfFUmfV.mjs";
|
|
5
|
-
import { n as usePlayerStore, r as durationHelper_default } from "./PlayerStore-
|
|
5
|
+
import { n as usePlayerStore, r as durationHelper_default } from "./PlayerStore-vYmnOEA_.mjs";
|
|
6
6
|
import { t as PodcastProcessingStatus } from "./podcast-Da9L7I5Q.mjs";
|
|
7
7
|
import { t as PlayVideoIcon_default } from "./PlayVideoIcon-CQJTc1O7.mjs";
|
|
8
8
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineAsyncComponent, defineComponent, normalizeClass, openBlock, ref, resolveDynamicComponent, toDisplayString, withModifiers } from "vue";
|
|
@@ -46,7 +46,7 @@ var PodcastPlayButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*
|
|
|
46
46
|
setup(__props, { expose: __expose }) {
|
|
47
47
|
__expose();
|
|
48
48
|
dayjs.extend(duration);
|
|
49
|
-
const PodcastIsPlaying = defineAsyncComponent(() => import("./PodcastIsPlaying-
|
|
49
|
+
const PodcastIsPlaying = defineAsyncComponent(() => import("./PodcastIsPlaying-BsObdQGR.mjs"));
|
|
50
50
|
const props = __props;
|
|
51
51
|
const hoverType = ref("");
|
|
52
52
|
const { t } = useI18n();
|
|
@@ -233,4 +233,4 @@ var PodcastPlayButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(
|
|
|
233
233
|
//#endregion
|
|
234
234
|
export { PodcastPlayButton_exports as n, PodcastPlayButton_default as t };
|
|
235
235
|
|
|
236
|
-
//# sourceMappingURL=PodcastPlayButton-
|
|
236
|
+
//# sourceMappingURL=PodcastPlayButton-1eaXWTlG.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastPlayButton-1eaXWTlG.mjs","names":[],"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":"PodcastPlayButton-Bosq5ozq.mjs","names":[],"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuGA,MAAM,OAAO,QAAQ;EACrB,MAAM,mBAAmB,2BAA2B,OAAO,kCAAyB;EAGpF,MAAM,QAAQ;EAWd,MAAM,YAAY,IAAI,EAAE;EAGxB,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,cAAc,eAAe;EACnC,MAAM,SAAS,UAAU;EACzB,MAAM,EAAE,YAAY,eAAe;EAGnC,MAAM,iBAAiB,eAAe;GACpC,OACG,MAAM,iBAAiB,cAAc,SAAS,QAAQ,KACrD,wBAAiB,kBAAkB,MAAM,QAAQ,oBAClD,WAAW,MAAM,WAAW,KAAA,MAAc,MAAM,QAAQ,OAAO,WAC/D,aAAa,MAAM,WAAW,KAAA,MAAc,MAAM,QAAQ;EAE/D,CAAC;EACD,MAAM,cAAc,eAAe;GACjC,OACE,KAAA,MAAc,MAAM,mBACpB,WAAW,MAAM,gBAAgB,SAAS,KAC1C,YAAY,YAAY,iBAAiB,MAAM,gBAAgB;EAEnE,CAAC;EACD,MAAM,iBAAiB,eAAe;GACpC,OACE,YAAY,eAAe,cAAc,MAAM,QAAQ,aACvD,YAAY;EAEhB,CAAC;EACD,MAAM,qBAAqB,eAAe,KAAA,MAAc,MAAM,mBAAmB,oBAAoB,KAAK;EAC1G,MAAM,sBAAsB,eAAe;GACzC,OACE,KAAA,MAAc,MAAM,SAAS,gBAC7B,MAAM,MAAM,QAAQ,gBACpB,wBAAiB,kBAAkB,MAAM,QAAQ;EAErD,CAAC;EACD,MAAM,wBAAwB,eAAe;GAC3C,OACE,KAAA,MAAc,MAAM,WACpB,UAAU,MAAM,QAAQ,SACxB,KAAA,MAAc,MAAM,QAAQ,aAAa,cACzC,MAAM,QAAQ,aAAa;EAE/B,CAAC;;EAGD,MAAM,eAAe,eAAe;GAClC,IAAI,QAAQ,OACV,OAAO;QACF,IAAI,UAAU,UAAU,SAC7B,OAAO;QAEP,OAAO;EAEX,CAAC;;EAGD,MAAM,qBAAqB,eAAe;GACxC,OAEE,CAAC,mBAAmB,SACpB,wBAAiB,YAAY,MAAM,QAAQ;EAE/C,CAAC;EAED,MAAM,gBAAgB,eAAe;GACnC,OAAO,MAAM,gBAAgB,QAAQ,EACnC,sBAAsB,SACtB,CAAC,mBAAmB,SACpB,wBAAiB,YAAY,MAAM,QAAQ,qBACvC,wBAAiB,eAAe,MAAM,QAAQ,oBAAoB,MAAM;EAChF,CAAC;EAED,MAAM,WAAW,eAAe;GAC9B,IAAI,mBAAmB,OACrB,OAAO;GAGT,IAAI,wBAAiB,UAAU,MAAM,QAAQ,oBAAoB,MAAM,iBAAiB;IACtF,IAAI,CAAC,MAAM,QAAQ,OACjB,OAAO;IAGT,IACE,CAAC,MAAM,QAAQ,aAAa,cAC5B,MAAM,QAAQ,aAAa,MAE3B,OAAO;IAGT,OAAO;GACT;GAEA,IACE,wBAAiB,YAAY,MAAM,QAAQ,oBAC3C,wBAAiB,eAAe,MAAM,QAAQ,kBAE9C,OAAO;GAGT,IAAI,wBAAiB,cAAc,MAAM,QAAQ,kBAC/C,OAAO;GAGT,OAAO;EACT,CAAC;;EAGD,MAAM,cAAc,eAAe;GACjC,IAAI,mBAAmB,OACrB,OAAO,EAAE,gCAAgC;GAG3C,IAAI,wBAAiB,UAAU,MAAM,QAAQ,oBAAoB,MAAM,iBAAiB;IACtF,IAAI,CAAC,MAAM,QAAQ,OACjB,OAAO,EAAE,qBAAqB;IAEhC,IACE,CAAC,MAAM,QAAQ,aAAa,cAC5B,MAAM,QAAQ,aAAa,MAE3B,OAAO,EAAE,2BAA2B;IAEtC,OAAO,EAAE,oBAAoB;GAC/B;GACA,IACE,wBAAiB,YAAY,MAAM,QAAQ,oBAC3C,wBAAiB,eAAe,MAAM,QAAQ,kBAE9C,OAAO,EAAE,oBAAoB;GAE/B,IAAI,wBAAiB,cAAc,MAAM,QAAQ,kBAC/C,OAAO,EAAE,6BAA6B;GAGxC,OAAO,EAAE,kBAAkB;EAC7B,CAAC;EAED,MAAM,gBAAgB,eAAe;GACnC,OACE,KAAA,MAAc,MAAM,mBACpB,OAAO,MAAM,gBAAgB,iBAC5B,gBAAgB,MAAM,gBAAgB,UACrC,cAAc,MAAM,gBAAgB;EAE1C,CAAC;EACD,MAAM,iBAAiB,eAAe;GACpC,OAAO,uBAAe,eACpB,KAAK,MAAM,MAAM,QAAQ,WAAW,GAAI,CAC1C;EACF,CAAC;EACD,MAAM,cAAc,eAAe;GACjC,IAAI,CAAC,MAAM,WAAW,MAAM,QAAQ,YAAY,GAC9C,OAAO;GAET,OAAO,MAAM,SAAS,EAAE,cAAc,MAAM,QAAQ,SAAS,CAAC,EAAE,YAAY;EAC9E,CAAC;EAGD,eAAe,KAAK,SAAiC;GACnD,IAAI,mBAAmB,OACrB;GAEF,IAAI,eAAe,SAAS,YAAY,YAAY,aAAa;IAC/D,YAAY,mBAAmB,cAAc,YAAY,YAAY;IACrE;GACF;GACA,IAAI,WAAW,MAAM,OAAO,aAAa;IACvC,OAAO,KAAK,qBAAqB,MAAM,QAAQ,SAAS;IACxD;GACF;GAEA,IAAI,UAAqC,MAAM;GAC/C,IAAI,WAAW,EAAE,WAAW,MAAM,UAChC,UAAU,MAAM,WAAW,IAAI,MAAM,QAAQ,SAAS;GAGxD,IAAI,CAAC,cAAc,OACjB,YAAY,WAAW,SAAS,OAAO;QAEvC,YAAY,WACV;IACE,GAAG;IACH,cAAc,MAAM,iBAAiB;IACrC,eAAe,MAAM,iBAAiB;GACxC,GACA,OACF;EAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CC1SM,OAAM;;;;;;;;CAqDF,OAAM;;;SA1DL,OAAA,YAAY,OAAA,iBAAA,UAAA,GADrB,mBA0EM,OAAA;;EAxEH,OAAK,eAAA;GAAA,uBAA2B,OAAA;GAAa,cAAgB,OAAA;EAAkB,CAAA;KAGxE,OAAA,iBAAA,UAAA,GADR,mBAKM,OALN,YAKM,gBADD,OAAA,WAAW,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA,GAGhB,mBA8DM,OAAA,EA7DJ,OAAK,eAAA,CAAC,sBACE,OAAA,cAAW,yBAAA,EAAA,CAAA,EAAA,GAAA,CAAA,CAEF,OAAA,sBAAA,UAAA,GAAjB,mBAmDW,UAAA,EAAA,KAAA,EAAA,GAAA;EAlDT,mBAmBS,UAAA;GAlBP,OAAM;GACL,OAAO,OAAA,iBAAgB,OAAA,EAAC,OAAA,IAAY,OAAA,EAAC,MAAA;GACrC,cAAU,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,YAAS;GACrB,cAAU,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,YAAS;GACrB,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAU,OAAA,KAAI,KAAA,GAAA,CAAA,SAAA,CAAA;;IAGX,OAAA,kBAAmB,OAAA,kBAAkB,OAAA,YAAY,eAAA,UAAA,GAD1D,YAGE,OAAA,aAAA;;IADC,MAAM,OAAA;;GAEe,OAAA,kBAAc,CAAK,OAAA,YAAY,eAAA,UAAA,GAAvD,YAAsE,OAAA,qBAAA,EAAA,KAAA,EAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;IAE7D,OAAA,kBAAA,UAAA,GADT,mBAMO,QAAA;;IAJL,OAAM;IACL,UAAU,OAAA;sBAER,OAAA,cAAc,GAAA,GAAA,UAAA,KAAA,mBAAA,QAAA,IAAA;;EAIb,OAAA,kBAAA,UAAA,GADR,mBAmBS,UAAA;;GAjBN,OAAO,OAAA,EAAC,OAAA;GACR,UAAU,OAAA,YAAY;GACtB,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAU,OAAA,KAAI,IAAA,GAAA,CAAA,SAAA,CAAA;GACnB,cAAU,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,YAAS;GACrB,cAAU,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,YAAS;MAEE,OAAA,kBAAkB,OAAA,YAAY,eAAA,UAAA,GAAtD,YAAqE,OAAA,qBAAA,EAAA,KAAA,EAAA,CAAA,MAAA,UAAA,GACrE,YAGE,OAAA,kBAAA;;GADC,MAAI,YAAc,OAAA,YAAS,KAAA;0BAE9B,mBAKO,QAAA;GAJL,OAAM;GACL,UAAU,OAAA;qBAER,OAAA,cAAc,GAAA,GAAA,UAAA,CAAA,GAAA,IAAA,UAAA,KAAA,mBAAA,QAAA,IAAA;EAKb,OAAA,iBAAA,UAAA,GADR,mBAQM,OARN,YAQM,EAAA,UAAA,GAJJ,YAGE,wBAFK,OAAA,QAAQ,GAAA,EACZ,MAAM,GAAE,CAAA,EAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;yBAIf,YAKE,wBAJK,OAAA,QAAQ,GAAA;;EAEZ,MAAM;EACN,OAAO,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastPlayButton-DIQi57Oh.mjs","names":[],"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":"PodcastPlayButton-DcjbCnlT.mjs","names":[],"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":"PodcastPlayButton-DgSCyhrd.mjs","names":[],"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-C0HZum5z.mjs","names":[],"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;;;;;;;;;;;;;;;;;;;;;;;;;;QCtGU,OAAA,WAAO,CAAM,OAAA,WAAO,MAAU,OAAA,YAAY,UAAA,UAAA,GADlD,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,eAAW,cAIlB,CAHF,YAGE,OAAA,mBAAA;GAFA,OAAM;GACL,gBAAc,OAAA,UAAU,OAAA,EAAC,sBAAA,IAA2B,KAAA;kCAG9C,OAAA,WAAA,UAAA,GADT,YAWa,OAAA,eAAA;;GATV,eAAa,OAAA;GACb,sBAAoB,OAAA;;GAEV,cAAY,SAInB,EAJuB,aAAM,CAC/B,YAGE,OAAA,gBAAA;IAFA,OAAM;IACL,SAAS"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastPlaylistInlineList-CSziI2j4.mjs","names":[],"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;;;;;;;;;;;;;;;;;;;;;;;;;;QCtGU,OAAA,WAAO,CAAM,OAAA,WAAO,MAAU,OAAA,YAAY,UAAA,UAAA,GADlD,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,eAAW,cAIlB,CAHF,YAGE,OAAA,mBAAA;GAFA,OAAM;GACL,gBAAc,OAAA,UAAU,OAAA,EAAC,sBAAA,IAA2B,KAAA;kCAG9C,OAAA,WAAA,UAAA,GADT,YAWa,OAAA,eAAA;;GATV,eAAa,OAAA;GACb,sBAAoB,OAAA;;GAEV,cAAY,SAInB,EAJuB,aAAM,CAC/B,YAGE,OAAA,gBAAA;IAFA,OAAM;IACL,SAAS"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastPlaylistInlineList-CvX2rauY.mjs","names":[],"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;;;;;;;;;;;;;;;;;;;;;;;;;;QCtGU,OAAA,WAAO,CAAM,OAAA,WAAO,MAAU,OAAA,YAAY,UAAA,UAAA,GADlD,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,eAAW,cAIlB,CAHF,YAGE,OAAA,mBAAA;GAFA,OAAM;GACL,gBAAc,OAAA,UAAU,OAAA,EAAC,sBAAA,IAA2B,KAAA;kCAG9C,OAAA,WAAA,UAAA,GADT,YAWa,OAAA,eAAA;;GATV,eAAa,OAAA;GACb,sBAAoB,OAAA;;GAEV,cAAY,SAInB,EAJuB,aAAM,CAC/B,YAGE,OAAA,gBAAA;IAFA,OAAM;IACL,SAAS"}
|