@saooti/octopus-sdk 42.3.0 → 42.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (615) hide show
  1. package/dist/{AdvancedSearch-DEh3iiuK.mjs → AdvancedSearch-BTbYmlMm.mjs} +8 -8
  2. package/dist/AdvancedSearch-C6BJzvGT.mjs.map +1 -0
  3. package/dist/AdvancedSearch-ChnJq71j.mjs.map +1 -0
  4. package/dist/AdvancedSearch-ChtUj3vS.mjs.map +1 -0
  5. package/dist/AdvancedSearch-D-9o5KzI.mjs.map +1 -0
  6. package/dist/AdvancedSearch-DH5YTENK.mjs.map +1 -0
  7. package/dist/AdvancedSearch-DN3WFduh.mjs.map +1 -0
  8. package/dist/AdvancedSearch-EpYd6K3d.mjs.map +1 -0
  9. package/dist/AdvancedSearch-PRJyRSID.mjs.map +1 -0
  10. package/dist/AdvancedSearch-_E2nwQ-A.mjs.map +1 -0
  11. package/dist/AdvancedSearch-cLjakm-6.mjs.map +1 -0
  12. package/dist/AdvancedSearch-k-fQfSBk.mjs.map +1 -0
  13. package/dist/AdvancedSearch-zFJq-WlO.mjs.map +1 -0
  14. package/dist/CategoryChooser-CSUjIA0D.mjs.map +1 -0
  15. package/dist/{CategoryChooser-CeF4n-nw.mjs → CategoryChooser-fAUMJNHu.mjs} +1 -1
  16. package/dist/CategoryFilter-B0S_nCvS.mjs.map +1 -0
  17. package/dist/CategoryFilter-BVrLO_pV.mjs.map +1 -0
  18. package/dist/{CategoryFilter-Djmal5bY.mjs → CategoryFilter-CsYCvEnz.mjs} +3 -3
  19. package/dist/CategoryFilter-DVwCpHLx.mjs.map +1 -0
  20. package/dist/CategoryList-B_9GG6Z9.mjs.map +1 -0
  21. package/dist/{CategoryList-Dksp79Lm.mjs → CategoryList-CDoIfrDw.mjs} +2 -2
  22. package/dist/CategoryList-CUae_phb.mjs.map +1 -0
  23. package/dist/CategoryList-DxR0fpKd.mjs.map +1 -0
  24. package/dist/CategoryPage-C7aKDtgs.mjs.map +1 -0
  25. package/dist/{CategoryPage-DC8fMny_.mjs → CategoryPage-Cl5Yuxnu.mjs} +2 -2
  26. package/dist/CategoryPage-DlnAp05t.mjs.map +1 -0
  27. package/dist/CategoryPage-Dlq5XQBS.mjs.map +1 -0
  28. package/dist/{CategorySearchFilter-KVYBscdd.mjs → CategorySearchFilter-Cce5zxZB.mjs} +1 -1
  29. package/dist/CategorySearchFilter-EULpSE2e.mjs.map +1 -0
  30. package/dist/ChapteringModal-BplEGZj2.mjs.map +1 -0
  31. package/dist/ChapteringModal-C9yuW_IU.mjs.map +1 -0
  32. package/dist/{ChapteringModal-Be9FF1yz.mjs → ChapteringModal-DiiVSG7s.mjs} +1 -1
  33. package/dist/{CheckIdentityModal-nMszYOsW.mjs → CheckIdentityModal-BrnYeGdk.mjs} +3 -3
  34. package/dist/CheckIdentityModal-BtGdsv2v.mjs.map +1 -0
  35. package/dist/CheckIdentityModal-CpRO7ehH.mjs.map +1 -0
  36. package/dist/CheckIdentityModal-Cry9ra4J.mjs.map +1 -0
  37. package/dist/ClassicDatePicker--q1yYb-S.mjs.map +1 -0
  38. package/dist/ClassicDatePicker-4ouU5ov9.mjs.map +1 -0
  39. package/dist/ClassicDatePicker-B8bI9QfF.mjs.map +1 -0
  40. package/dist/ClassicDatePicker-BTJWityQ.mjs +186 -0
  41. package/dist/ClassicDatePicker-CChR9LBd.mjs.map +1 -0
  42. package/dist/ClassicDatePicker-CopJVkF0.mjs.map +1 -0
  43. package/dist/ClassicDatePicker-DgcJCevR.mjs.map +1 -0
  44. package/dist/ClassicDatePicker-NxGNQxHE.mjs.map +1 -0
  45. package/dist/ClassicDatePicker-dgdGXcRk.mjs.map +1 -0
  46. package/dist/{ClassicEmojiPicker-B4TAlZvo.mjs → ClassicEmojiPicker-C0gm-DA2.mjs} +1 -1
  47. package/dist/ClassicEmojiPicker-CJZD8H7L.mjs.map +1 -0
  48. package/dist/{ClassicHelpButton-DT7T8tMe.mjs → ClassicHelpButton-BnRLmYuh.mjs} +1 -1
  49. package/dist/ClassicHelpButton-Qb4AwvWI.mjs.map +1 -0
  50. package/dist/{ClassicInputText-DJ5kURGM.mjs → ClassicInputText-YsntJkHk.mjs} +1 -1
  51. package/dist/ClassicInputText-npkVSUoH.mjs.map +1 -0
  52. package/dist/ClassicMultiselect-2I2K-o4R.mjs.map +1 -0
  53. package/dist/{ClassicMultiselect-CDHdJjjV.mjs → ClassicMultiselect-C0yzVQ8Y.mjs} +1 -1
  54. package/dist/{ClassicNotifications-DEpVRRHg.mjs → ClassicNotifications-8CVfGSqL.mjs} +1 -1
  55. package/dist/ClassicNotifications-BFQ-R6kO.mjs.map +1 -0
  56. package/dist/ClassicNotifications-DR0PM1Xp.mjs.map +1 -0
  57. package/dist/{ClassicPopover-DWR50Nxi.mjs → ClassicPopover-BUb-1WMB.mjs} +1 -1
  58. package/dist/ClassicPopover-BhMY2SMo.mjs.map +1 -0
  59. package/dist/ClipboardModal-B_SZ6jDk.mjs.map +1 -0
  60. package/dist/{ClipboardModal-BUKwZYOf.mjs → ClipboardModal-ByVXPcKD.mjs} +1 -1
  61. package/dist/ClipboardModal-DjrZQRtY.mjs.map +1 -0
  62. package/dist/{CommentInput-US8ZtNj1.mjs → CommentInput-CrRstzua.mjs} +4 -4
  63. package/dist/CommentInput-DPMj47uE.mjs.map +1 -0
  64. package/dist/CommentInput-DbhOyi7c.mjs.map +1 -0
  65. package/dist/CommentInput-I97yysBW.mjs.map +1 -0
  66. package/dist/CommentItem-AItzrTBi.mjs.map +1 -0
  67. package/dist/CommentItem-B7vvJwZI.mjs.map +1 -0
  68. package/dist/{CommentItem-CqWZPmbj.mjs → CommentItem-BYU67TIu.mjs} +4 -4
  69. package/dist/CommentItem-CvNbH7Hf.mjs.map +1 -0
  70. package/dist/CommentList-BTyyCcX4.mjs.map +1 -0
  71. package/dist/CommentList-CWrf45Di.mjs.map +1 -0
  72. package/dist/CommentList-DP6wk4PD.mjs.map +1 -0
  73. package/dist/{CommentList-CSYpqgNM.mjs → CommentList-snIIudVC.mjs} +2 -2
  74. package/dist/CommentMoreActions-BNajG7wk.mjs.map +1 -0
  75. package/dist/CommentMoreActions-C1l4Y_HY.mjs.map +1 -0
  76. package/dist/CommentMoreActions-DPbJnEEV.mjs.map +1 -0
  77. package/dist/{CommentMoreActions-T5RN6BGq.mjs → CommentMoreActions-y202UxL5.mjs} +3 -3
  78. package/dist/{CommentName-DslRo9jg.mjs → CommentName-CHBlEM7I.mjs} +3 -3
  79. package/dist/CommentName-D5HN8bGE.mjs.map +1 -0
  80. package/dist/CommentName-DMom_kwo.mjs.map +1 -0
  81. package/dist/CommentName-OJrxjSxu.mjs.map +1 -0
  82. package/dist/CommentParentInfo-DWVF5Ewh.mjs.map +1 -0
  83. package/dist/CommentParentInfo-Do3IlO95.mjs.map +1 -0
  84. package/dist/{CommentParentInfo-DMX3nkCb.mjs → CommentParentInfo-DoEeaQGU.mjs} +2 -2
  85. package/dist/CommentParentInfo-DqHfDpKs.mjs.map +1 -0
  86. package/dist/{CommentPlayer-D3JEVPKX.mjs → CommentPlayer-B4MXG-gG.mjs} +2 -2
  87. package/dist/CommentPlayer-B67saxPf.mjs.map +1 -0
  88. package/dist/CommentPlayer-BUtEvkoV.mjs.map +1 -0
  89. package/dist/CommentSection-BIZMRePu.mjs.map +1 -0
  90. package/dist/CommentSection-CSehg6MD.mjs.map +1 -0
  91. package/dist/{CommentSection-Brn0VQcc.mjs → CommentSection-DZf04NxT.mjs} +3 -3
  92. package/dist/CommentSection-MDKioQWf.mjs.map +1 -0
  93. package/dist/CommentStore-BBm8MjxW.mjs.map +1 -0
  94. package/dist/{CommentStore-hPTYaDGr.mjs → CommentStore-CysGkBHp.mjs} +8 -8
  95. package/dist/CommentStore-F5MVSrDw.mjs.map +1 -0
  96. package/dist/ContractPreviewModal-CFSkXgB4.mjs.map +1 -0
  97. package/dist/ContractPreviewModal-CKL6Rb_V.mjs.map +1 -0
  98. package/dist/{ContractPreviewModal-48Je4Wuy.mjs → ContractPreviewModal-Dd-1KasR.mjs} +2 -2
  99. package/dist/DateFilter-BwYSwGc-.mjs.map +1 -0
  100. package/dist/DateFilter-CGTz76bp.mjs.map +1 -0
  101. package/dist/DateFilter-CfeYepTO.mjs.map +1 -0
  102. package/dist/{DateFilter-DztHuPm8.mjs → DateFilter-Cnb_S8Up.mjs} +1 -1
  103. package/dist/DateFilter-DFw66D2V.mjs.map +1 -0
  104. package/dist/DateFilter-DMOUMeCh.mjs.map +1 -0
  105. package/dist/DateFilter-DdbvVu9Q.mjs.map +1 -0
  106. package/dist/DateFilter-Dr1nRuvZ.mjs.map +1 -0
  107. package/dist/DateFilter-QGaXHkcu.mjs.map +1 -0
  108. package/dist/{DownloadPodcastButton-BYWuLoNg.mjs → DownloadPodcastButton-6HtR84aE.mjs} +2 -2
  109. package/dist/DownloadPodcastButton-D2qeKDPT.mjs.map +1 -0
  110. package/dist/DownloadPodcastButton-Tr_Y4qMu.mjs.map +1 -0
  111. package/dist/{EditCommentModal-DacFxzLx.mjs → EditCommentModal-BQ03B6LC.mjs} +2 -2
  112. package/dist/EditCommentModal-BZitN0Ir.mjs.map +1 -0
  113. package/dist/EditCommentModal-CcmCx_My.mjs.map +1 -0
  114. package/dist/EditCommentModal-sj0yXd7-.mjs.map +1 -0
  115. package/dist/EmissionGroupChooser--428fdeK.mjs.map +1 -0
  116. package/dist/EmissionGroupChooser-BJCKekKM.mjs.map +1 -0
  117. package/dist/EmissionGroupChooser-ByqGmsGw.mjs.map +1 -0
  118. package/dist/EmissionGroupChooser-Cb3CF0uc.mjs.map +1 -0
  119. package/dist/EmissionGroupChooser-D4vMQH8g.mjs.map +1 -0
  120. package/dist/{EmissionGroupChooser-KmzQjp7d.mjs → EmissionGroupChooser-De_IpEhW.mjs} +2 -2
  121. package/dist/EmissionInlineList-CdHQBjfR.mjs.map +1 -0
  122. package/dist/EmissionInlineList-CnA0d_k2.mjs.map +1 -0
  123. package/dist/EmissionInlineList-DLUvPBNl.mjs.map +1 -0
  124. package/dist/{EmissionInlineList-BoEIAbLu.mjs → EmissionInlineList-dlb4gUOP.mjs} +5 -5
  125. package/dist/EmissionItem-B39oFnXF.mjs.map +1 -0
  126. package/dist/EmissionItem-BkPLFhAo.mjs.map +1 -0
  127. package/dist/EmissionItem-CjAUdLb7.mjs.map +1 -0
  128. package/dist/{EmissionItem-BeQWw-UT.mjs → EmissionItem-Dm_IGNkw.mjs} +4 -4
  129. package/dist/EmissionList-B0UntYdC.mjs.map +1 -0
  130. package/dist/EmissionList-BQSI4xbi.mjs.map +1 -0
  131. package/dist/{EmissionList-DB7O1nj5.mjs → EmissionList-C4JEYLyK.mjs} +4 -4
  132. package/dist/EmissionList-C7lQBdlW.mjs.map +1 -0
  133. package/dist/EmissionPage-BF6s2ySo.mjs.map +1 -0
  134. package/dist/EmissionPage-B_-nDP5x.mjs.map +1 -0
  135. package/dist/EmissionPage-C-ESprrZ.mjs.map +1 -0
  136. package/dist/{EmissionPage-CNYJ1Puo.mjs → EmissionPage-C4XUdzzm.mjs} +10 -10
  137. package/dist/EmissionPage-CPXcNHGS.mjs.map +1 -0
  138. package/dist/EmissionPage-EMgXCVhK.mjs.map +1 -0
  139. package/dist/EmissionPage-mXbUqOh9.mjs.map +1 -0
  140. package/dist/{EmissionPlayerItem-S_yqupad.mjs → EmissionPlayerItem-BLIdolRe.mjs} +3 -3
  141. package/dist/EmissionPlayerItem-C27zJBhY.mjs.map +1 -0
  142. package/dist/EmissionPlayerItem-C3fkgEaL.mjs.map +1 -0
  143. package/dist/EmissionPlayerItem-DxXG20G1.mjs.map +1 -0
  144. package/dist/EmissionPresentationItem-BNnDSWGQ.mjs.map +1 -0
  145. package/dist/EmissionPresentationItem-BeETY65I.mjs.map +1 -0
  146. package/dist/{EmissionPresentationItem-kJgKN7Ju.mjs → EmissionPresentationItem-DYDwfqwp.mjs} +1 -1
  147. package/dist/EmissionPresentationList-BD7rIUok.mjs.map +1 -0
  148. package/dist/EmissionPresentationList-CGMyY_iu.mjs.map +1 -0
  149. package/dist/{EmissionPresentationList-Bg9X3CJP.mjs → EmissionPresentationList-Cxi7QnIs.mjs} +3 -3
  150. package/dist/EmissionsPage-4To0aRBA.mjs.map +1 -0
  151. package/dist/{EmissionsPage-BLpGH_PR.mjs → EmissionsPage-B0bXLncg.mjs} +5 -5
  152. package/dist/EmissionsPage-BIspB5uq.mjs.map +1 -0
  153. package/dist/EmissionsPage-BhUjdpEu.mjs.map +1 -0
  154. package/dist/EmissionsPage-Bn1R_ipo.mjs.map +1 -0
  155. package/dist/EmissionsPage-CNXwdJuV.mjs.map +1 -0
  156. package/dist/EmissionsPage-CPmhIbFf.mjs.map +1 -0
  157. package/dist/EmissionsPage-Cgzvn2h8.mjs.map +1 -0
  158. package/dist/EmissionsPage-D09zTpGb.mjs.map +1 -0
  159. package/dist/EmissionsPage-Dl7qaQT1.mjs.map +1 -0
  160. package/dist/EmissionsPage-DyleZtu_.mjs.map +1 -0
  161. package/dist/EmissionsPage-OVpc7k1Z.mjs.map +1 -0
  162. package/dist/EmissionsPage-wjKBLFM6.mjs.map +1 -0
  163. package/dist/Error403Page-B6Q7ijY3.mjs.map +1 -0
  164. package/dist/Error403Page-DF08mgCL.mjs.map +1 -0
  165. package/dist/{Error403Page-BB69doEn.mjs → Error403Page-DVmC5AOd.mjs} +2 -2
  166. package/dist/FooterGarSection-BWahCyz0.mjs.map +1 -0
  167. package/dist/{FooterGarSection-B9nsnpfF.mjs → FooterGarSection-BqPggI3o.mjs} +3 -3
  168. package/dist/FooterGarSection-CN8ZfO7e.mjs.map +1 -0
  169. package/dist/FooterSection-BOjr1LRb.mjs.map +1 -0
  170. package/dist/{FooterSection-DdGtlbk-.mjs → FooterSection-C5FEIJlU.mjs} +11 -11
  171. package/dist/FooterSection-nVRzKSYN.mjs.map +1 -0
  172. package/dist/HomeDropdown-3fl_xltN.mjs.map +1 -0
  173. package/dist/HomeDropdown-DGNkJhG2.mjs.map +1 -0
  174. package/dist/{HomeDropdown-BqwwLStt.mjs → HomeDropdown-Fx6kQAuH.mjs} +3 -3
  175. package/dist/HomeDropdown-PvmOUzYb.mjs.map +1 -0
  176. package/dist/{HomePage-JOUAKKfP.mjs → HomePage-7PT7HmHs.mjs} +3 -3
  177. package/dist/HomePage-D0Pbu_h1.mjs.map +1 -0
  178. package/dist/HomePage-D6_D1f33.mjs.map +1 -0
  179. package/dist/HomePage-ry0NfX1M.mjs.map +1 -0
  180. package/dist/InlineRubriqueList-BdpS1pVc.mjs.map +1 -0
  181. package/dist/InlineRubriqueList-BlcjQ4wR.mjs.map +1 -0
  182. package/dist/{InlineRubriqueList-BzcHKvM4.mjs → InlineRubriqueList-ezgexR-O.mjs} +1 -1
  183. package/dist/{LikeSection-MmbHMunb.mjs → LikeSection-CGu4yOCr.mjs} +3 -3
  184. package/dist/LikeSection-Cqj4y7qZ.mjs.map +1 -0
  185. package/dist/LikeSection-D95IMsZE.mjs.map +1 -0
  186. package/dist/LikeSection-HJla-zgI.mjs.map +1 -0
  187. package/dist/{ListPaginate-5uRK_QKJ.mjs → ListPaginate-BPdnBcpe.mjs} +2 -2
  188. package/dist/ListPaginate-DYzRnp-2.mjs.map +1 -0
  189. package/dist/ListPaginate-DyR7HLIc.mjs.map +1 -0
  190. package/dist/LiveHorizontalList-Bqe351Ut.mjs.map +1 -0
  191. package/dist/{LiveHorizontalList-CpoIRd4C.mjs → LiveHorizontalList-Bs-Rz5Ws.mjs} +3 -3
  192. package/dist/LiveHorizontalList-CaujYMT3.mjs.map +1 -0
  193. package/dist/LiveHorizontalList-DhsOZPT3.mjs.map +1 -0
  194. package/dist/{LiveList-DYFBrNgg.mjs → LiveList-BVOEnAEc.mjs} +5 -5
  195. package/dist/LiveList-DMB3FxUM.mjs.map +1 -0
  196. package/dist/LiveList-DOi4GV1x.mjs.map +1 -0
  197. package/dist/LiveList-Dh1mJVs7.mjs.map +1 -0
  198. package/dist/LivesPage-BvDLscOE.mjs.map +1 -0
  199. package/dist/{LivesPage-FSkmBdVw.mjs → LivesPage-DG5VY4HF.mjs} +2 -2
  200. package/dist/LivesPage-DmSlg7iH.mjs.map +1 -0
  201. package/dist/LivesPage-yy_5pI8R.mjs.map +1 -0
  202. package/dist/MapPage-3n-rigBK.mjs.map +1 -0
  203. package/dist/MapPage-5GwE8Z4E.mjs.map +1 -0
  204. package/dist/{MapPage-DpBt2gWF.mjs → MapPage-bIe2a9O1.mjs} +2 -2
  205. package/dist/MobileMenu-BSos17v3.mjs.map +1 -0
  206. package/dist/{MobileMenu-CjNMfHUP.mjs → MobileMenu-BZ5nOrYw.mjs} +5 -5
  207. package/dist/MobileMenu-C6W37oJg.mjs.map +1 -0
  208. package/dist/MobileMenu-K0rNwrW1.mjs.map +1 -0
  209. package/dist/NewsletterModal-CFGXBtID.mjs.map +1 -0
  210. package/dist/NewsletterModal-CZNwpCK5.mjs.map +1 -0
  211. package/dist/{NewsletterModal-BurqHTFc.mjs → NewsletterModal-DZk0mSVC.mjs} +1 -1
  212. package/dist/OctopusMultiselect-CFUGyzeM.mjs.map +1 -0
  213. package/dist/OctopusMultiselect-Cn1lqbQo.mjs.map +1 -0
  214. package/dist/OctopusMultiselect-esu8BY0J.mjs.map +1 -0
  215. package/dist/{OctopusMultiselect-C8qljiaH.mjs → OctopusMultiselect-noQPQMZQ.mjs} +7 -5
  216. package/dist/OrganisationChooser-BKfXLT4G.mjs.map +1 -0
  217. package/dist/{OrganisationChooser-Dx-OT7MW.mjs → OrganisationChooser-C48cWqbY.mjs} +3 -3
  218. package/dist/OrganisationChooser-PpO7MD7f.mjs.map +1 -0
  219. package/dist/OrganisationChooser-Y_jO6oXv.mjs.map +1 -0
  220. package/dist/{OrganisationChooserLight-BF5fT5pV.mjs → OrganisationChooserLight-Bcltbv-v.mjs} +1 -1
  221. package/dist/OrganisationChooserLight-Dh7wMH40.mjs.map +1 -0
  222. package/dist/OrganisationChooserLight-Dx_rkvpP.mjs.map +1 -0
  223. package/dist/PageNotFound-DeW-K_hL.mjs.map +1 -0
  224. package/dist/{PageNotFound-Cj-3Gv8T.mjs → PageNotFound-DogaoIFX.mjs} +2 -2
  225. package/dist/PageNotFound-gRuMWYCp.mjs.map +1 -0
  226. package/dist/ParticipantInlineList-CY_s6aJm.mjs.map +1 -0
  227. package/dist/{ParticipantInlineList-DEWqM1Io.mjs → ParticipantInlineList-D9pkOlvP.mjs} +4 -4
  228. package/dist/ParticipantInlineList-DSatB75C.mjs.map +1 -0
  229. package/dist/ParticipantItem-BG7yqRvD.mjs.map +1 -0
  230. package/dist/ParticipantItem-BTK25HID.mjs.map +1 -0
  231. package/dist/{ParticipantItem-BZAUIeSR.mjs → ParticipantItem-CbHOfVon.mjs} +3 -3
  232. package/dist/ParticipantPage-B4VnV8Yc.mjs.map +1 -0
  233. package/dist/ParticipantPage-B6Gzg6ul.mjs.map +1 -0
  234. package/dist/ParticipantPage-CNRNKTtC.mjs.map +1 -0
  235. package/dist/ParticipantPage-CpkhQjN2.mjs.map +1 -0
  236. package/dist/ParticipantPage-D61CCIqy.mjs.map +1 -0
  237. package/dist/ParticipantPage-Dh4JJCmJ.mjs.map +1 -0
  238. package/dist/{ParticipantPage-CzaHoWij.mjs → ParticipantPage-nTp2MbgB.mjs} +6 -6
  239. package/dist/{ParticipantsPage-goxJZQZZ.mjs → ParticipantsPage-Bbz9lQ_0.mjs} +6 -6
  240. package/dist/ParticipantsPage-COaQrVID.mjs.map +1 -0
  241. package/dist/ParticipantsPage-DRVVU7qp.mjs.map +1 -0
  242. package/dist/ParticipantsPage-DhKCWwKE.mjs.map +1 -0
  243. package/dist/{PlayerAnonymousModal-By96BtpA.mjs → PlayerAnonymousModal-B1iZ34O8.mjs} +2 -2
  244. package/dist/PlayerAnonymousModal-CBZStK-L.mjs.map +1 -0
  245. package/dist/PlayerAnonymousModal-Cq6-Dn49.mjs.map +1 -0
  246. package/dist/PlayerAnonymousModal-Cu2GGoAh.mjs.map +1 -0
  247. package/dist/PlayerAnonymousModal-DiXWtNmM.mjs.map +1 -0
  248. package/dist/PlayerAnonymousModal-DrQvDDym.mjs.map +1 -0
  249. package/dist/PlayerCompact-B9oeGx_g.mjs.map +1 -0
  250. package/dist/PlayerCompact-DtMginEc.mjs.map +1 -0
  251. package/dist/PlayerCompact-E8ydrdJ4.mjs.map +1 -0
  252. package/dist/{PlayerCompact-CjU8xxVH.mjs → PlayerCompact-_39FpkWo.mjs} +4 -4
  253. package/dist/PlayerComponent-4Wj5XlrS.mjs.map +1 -0
  254. package/dist/{PlayerComponent-B58O6U6i.mjs → PlayerComponent-B1RsmSf0.mjs} +47 -47
  255. package/dist/PlayerComponent-BGVzhVz9.mjs.map +1 -0
  256. package/dist/PlayerComponent-BIshvul2.mjs.map +1 -0
  257. package/dist/PlayerComponent-BO7wUL2M.mjs.map +1 -0
  258. package/dist/PlayerComponent-C222I0kT.mjs.map +1 -0
  259. package/dist/PlayerComponent-CjNZNKKz.mjs.map +1 -0
  260. package/dist/PlayerComponent-UG_c6_yr.mjs.map +1 -0
  261. package/dist/{PlayerLarge-CWL5SDzD.mjs → PlayerLarge-BxdyYLOt.mjs} +5 -5
  262. package/dist/PlayerLarge-CPUAoR9q.mjs.map +1 -0
  263. package/dist/PlayerLarge-DP7RsA83.mjs.map +1 -0
  264. package/dist/PlayerLarge-DpiFO7gk.mjs.map +1 -0
  265. package/dist/PlayerLarge-Dwtmu4gz.mjs.map +1 -0
  266. package/dist/PlayerLarge-HvRHSw4j.mjs.map +1 -0
  267. package/dist/PlayerLarge-X5uYCbyS.mjs.map +1 -0
  268. package/dist/PlayerLarge-qwr3iWSX.mjs.map +1 -0
  269. package/dist/{PlayerPlayButton-DmvV2YDi.mjs → PlayerPlayButton-BIsfgj0d.mjs} +4 -4
  270. package/dist/PlayerPlayButton-BQ4zJOrE.mjs.map +1 -0
  271. package/dist/PlayerPlayButton-kh4ZCdWh.mjs.map +1 -0
  272. package/dist/PlayerProgressBar-C-I3dk3l.mjs.map +1 -0
  273. package/dist/PlayerProgressBar-Dr-aFk7O.mjs.map +1 -0
  274. package/dist/{PlayerProgressBar-Cl_mF4nD.mjs → PlayerProgressBar-dSschgez.mjs} +2 -2
  275. package/dist/PlayerProgressBar-xc1ZFPJY.mjs.map +1 -0
  276. package/dist/PlayerStore-Aq_ukXXS.mjs.map +1 -0
  277. package/dist/PlayerStore-C_QCHbT3.mjs.map +1 -0
  278. package/dist/{PlayerStore-CKprkxa0.mjs → PlayerStore-DggKki80.mjs} +1 -1
  279. package/dist/PlayerVideo-BNfhaNUn.mjs.map +1 -0
  280. package/dist/{PlayerVideo-CVUU7nHT.mjs → PlayerVideo-BWyvKlJT.mjs} +3 -3
  281. package/dist/PlayerVideo-Bhok6qYS.mjs.map +1 -0
  282. package/dist/PlayerVideo-CN609whx.mjs.map +1 -0
  283. package/dist/PlayerVideo-DXG_PsWA.mjs.map +1 -0
  284. package/dist/PlayerVideo-DzUapxuZ.mjs.map +1 -0
  285. package/dist/PlayerVideoDigiteka-B1rRVLzy.mjs.map +1 -0
  286. package/dist/PlayerVideoDigiteka-B6qODy7b.mjs.map +1 -0
  287. package/dist/{PlayerVideoDigiteka-DZIqqN8a.mjs → PlayerVideoDigiteka-Dxx63XHI.mjs} +2 -2
  288. package/dist/PlayerVideoHls-BoAbvi2b.mjs.map +1 -0
  289. package/dist/PlayerVideoHls-BsHaaJB-.mjs.map +1 -0
  290. package/dist/PlayerVideoHls-C0ddorEn.mjs.map +1 -0
  291. package/dist/PlayerVideoHls-DBODDRmV.mjs.map +1 -0
  292. package/dist/PlayerVideoHls-DVNHm_O2.mjs.map +1 -0
  293. package/dist/{PlayerVideoHls-BirHOkZD.mjs → PlayerVideoHls-DzbyXZsQ.mjs} +9 -7
  294. package/dist/{PlaylistPage-DljbABur.mjs → PlaylistPage-BdbqXFwR.mjs} +35 -35
  295. package/dist/PlaylistPage-BgUaPJet.mjs.map +1 -0
  296. package/dist/PlaylistPage-BwF2VdGb.mjs.map +1 -0
  297. package/dist/PlaylistPage-CINwx3zE.mjs.map +1 -0
  298. package/dist/PlaylistPage-CPB647jC.mjs.map +1 -0
  299. package/dist/PlaylistPage-DDzE5GQs.mjs.map +1 -0
  300. package/dist/PlaylistPage-bm1nWKMg.mjs.map +1 -0
  301. package/dist/PlaylistsPage-BwkVSYIp.mjs.map +1 -0
  302. package/dist/PlaylistsPage-C62NUvz4.mjs.map +1 -0
  303. package/dist/{PlaylistsPage-BSW-uPWF.mjs → PlaylistsPage-D08i24b2.mjs} +13 -13
  304. package/dist/PlaylistsPage-Dvh77ql6.mjs.map +1 -0
  305. package/dist/PodcastFilterList-BBhzOM64.mjs.map +1 -0
  306. package/dist/PodcastFilterList-BKBjd36i.mjs.map +1 -0
  307. package/dist/{PodcastFilterList-YM90eN60.mjs → PodcastFilterList-CL5ebQ69.mjs} +3 -3
  308. package/dist/PodcastFilterList-D9NTYS1v.mjs.map +1 -0
  309. package/dist/{PodcastImage-BtiQlrb3.mjs → PodcastImage-BFA22TgZ.mjs} +6 -6
  310. package/dist/PodcastImage-BhQKB5te.mjs.map +1 -0
  311. package/dist/PodcastImage-CHx3bUzt.mjs.map +1 -0
  312. package/dist/PodcastInlineList-CcNd_Hbs.mjs.map +1 -0
  313. package/dist/{PodcastInlineList-B32BSFqN.mjs → PodcastInlineList-H6BxXx0A.mjs} +1 -1
  314. package/dist/PodcastInlineList-akLivgog.mjs.map +1 -0
  315. package/dist/PodcastInlineList-jI2EvXSo.mjs.map +1 -0
  316. package/dist/{PodcastInlineListTemplate-DTrS1UiG.mjs → PodcastInlineListTemplate-Chbi8aME.mjs} +3 -3
  317. package/dist/PodcastInlineListTemplate-DT9ZRs61.mjs.map +1 -0
  318. package/dist/PodcastInlineListTemplate-Dh1xF6xT.mjs.map +1 -0
  319. package/dist/PodcastIsPlaying-C0jcpBQd.mjs.map +1 -0
  320. package/dist/PodcastIsPlaying-H6P1CHAI.mjs.map +1 -0
  321. package/dist/{PodcastIsPlaying-BtmHnQi9.mjs → PodcastIsPlaying-ugHcefCy.mjs} +1 -1
  322. package/dist/{PodcastItem-TdtzApJ6.mjs → PodcastItem-Baki7W0q.mjs} +6 -6
  323. package/dist/PodcastItem-BfvK4ion.mjs.map +1 -0
  324. package/dist/PodcastItem-DEhA78z9.mjs.map +1 -0
  325. package/dist/PodcastItem-DwK_Yu1G.mjs.map +1 -0
  326. package/dist/PodcastList-B4ic6Cij.mjs.map +1 -0
  327. package/dist/PodcastList-C2R92m6S.mjs.map +1 -0
  328. package/dist/PodcastList-DWl6zz_z.mjs.map +1 -0
  329. package/dist/PodcastList-Dbt4nmKg.mjs.map +1 -0
  330. package/dist/PodcastList-KaQBRbR9.mjs.map +1 -0
  331. package/dist/{PodcastList-BAOJhQ7G.mjs → PodcastList-N_XOE-hI.mjs} +5 -5
  332. package/dist/PodcastList-d3SGLPvF.mjs.map +1 -0
  333. package/dist/{PodcastList-Bbe3yWiu.mjs → PodcastList-yjd_exFg.mjs} +4 -4
  334. package/dist/PodcastPage-B0pbZ5o_.mjs.map +1 -0
  335. package/dist/PodcastPage-BOA44Us4.mjs.map +1 -0
  336. package/dist/PodcastPage-Bs1wz-0E.mjs.map +1 -0
  337. package/dist/PodcastPage-C37Wa-qH.mjs.map +1 -0
  338. package/dist/PodcastPage-D0HYJxaK.mjs.map +1 -0
  339. package/dist/PodcastPage-D0U6-etV.mjs.map +1 -0
  340. package/dist/PodcastPage-DwMPY4po.mjs.map +1 -0
  341. package/dist/{PodcastPage-CAxub2do.mjs → PodcastPage-SUEm-Enm.mjs} +26 -26
  342. package/dist/PodcastPlayBar-Bo-W_dSK.mjs.map +1 -0
  343. package/dist/PodcastPlayBar-CBtMWlVc.mjs.map +1 -0
  344. package/dist/{PodcastPlayBar-gAEttclo.mjs → PodcastPlayBar-COU17bnm.mjs} +3 -3
  345. package/dist/PodcastPlayBar-Cpr3Ff7J.mjs.map +1 -0
  346. package/dist/PodcastPlayBasicButton-BvJPrxpI.mjs.map +1 -0
  347. package/dist/PodcastPlayBasicButton-CS5TNlmX.mjs.map +1 -0
  348. package/dist/{PodcastPlayBasicButton-7w91y2ow.mjs → PodcastPlayBasicButton-CVXhEUHB.mjs} +1 -1
  349. package/dist/{PodcastPlayButton-CQY0d6f-.mjs → PodcastPlayButton--gjzxW0o.mjs} +3 -3
  350. package/dist/PodcastPlayButton-BqvE4ZUl.mjs.map +1 -0
  351. package/dist/PodcastPlayButton-DW5Feest.mjs.map +1 -0
  352. package/dist/PodcastPlaylistInlineList-BV31HaB2.mjs.map +1 -0
  353. package/dist/PodcastPlaylistInlineList-C-WYs6aE.mjs.map +1 -0
  354. package/dist/{PodcastPlaylistInlineList-BE5L8pSP.mjs → PodcastPlaylistInlineList-DsEHaYGZ.mjs} +7 -7
  355. package/dist/PodcastPlaylistInlineList-HEdFAq1l.mjs.map +1 -0
  356. package/dist/{PodcastPresentationList-DH6Rq0Z4.mjs → PodcastPresentationList-B9vORr36.mjs} +4 -4
  357. package/dist/PodcastPresentationList-ChqvdXY0.mjs.map +1 -0
  358. package/dist/PodcastPresentationList-Dit6HvJr.mjs.map +1 -0
  359. package/dist/{PodcastProgressBar-DoeG7lDj.mjs → PodcastProgressBar-B0FwZOTT.mjs} +3 -3
  360. package/dist/PodcastProgressBar-B8ONWq-Z.mjs.map +1 -0
  361. package/dist/PodcastProgressBar-BoGtJPAa.mjs.map +1 -0
  362. package/dist/PodcastProgressBar-DTRhKzW-.mjs.map +1 -0
  363. package/dist/{PodcastRawTranscript-Cktqtbcg.mjs → PodcastRawTranscript-BiuftXu-.mjs} +2 -2
  364. package/dist/PodcastRawTranscript-C8SJcaQE.mjs.map +1 -0
  365. package/dist/PodcastRawTranscript-nfzHM0k_.mjs.map +1 -0
  366. package/dist/PodcastRawTranscript-r5pRtZDg.mjs.map +1 -0
  367. package/dist/{PodcastSwiperList-DZ26-8xy.mjs → PodcastSwiperList-BKOYhrsH.mjs} +4 -4
  368. package/dist/PodcastSwiperList-Bsg0q89o.mjs.map +1 -0
  369. package/dist/PodcastSwiperList-BxsEv7_8.mjs.map +1 -0
  370. package/dist/PodcastSwiperList-Cju5VHcH.mjs.map +1 -0
  371. package/dist/PodcastmakerHeader-6fIwE70J.mjs.map +1 -0
  372. package/dist/PodcastmakerHeader-BBPEy__r.mjs.map +1 -0
  373. package/dist/{PodcastmakerHeader-MhdOrssb.mjs → PodcastmakerHeader-CIoJwm1L.mjs} +1 -1
  374. package/dist/PodcastsPage-967SI8kL.mjs.map +1 -0
  375. package/dist/{PodcastsPage-BXjTDNhn.mjs → PodcastsPage-B5NwPMyn.mjs} +5 -5
  376. package/dist/PodcastsPage-B7j2XxPZ.mjs.map +1 -0
  377. package/dist/PodcastsPage-BOzszXpc.mjs.map +1 -0
  378. package/dist/PodcastsPage-Bw0tzWoX.mjs.map +1 -0
  379. package/dist/PodcastsPage-D3TAYJV8.mjs.map +1 -0
  380. package/dist/PodcastsPage-DJsgHs7V.mjs.map +1 -0
  381. package/dist/PodcastsPage-DKWHzNNA.mjs.map +1 -0
  382. package/dist/PodcastsPage-DONqoMkB.mjs.map +1 -0
  383. package/dist/PodcastsPage-DUcfPeLD.mjs.map +1 -0
  384. package/dist/PodcastsPage-DWBgwD6o.mjs.map +1 -0
  385. package/dist/PodcastsPage-DZO4H1Ff.mjs.map +1 -0
  386. package/dist/PodcastsPage-DhEMPqCT.mjs.map +1 -0
  387. package/dist/ProductorSearch-BgmV_RCq.mjs.map +1 -0
  388. package/dist/{ProductorSearch-Z36zTZK4.mjs → ProductorSearch-BiUEs7mG.mjs} +3 -3
  389. package/dist/ProductorSearch-C4Nv2HzS.mjs.map +1 -0
  390. package/dist/ProductorSearch-DtVe_rU9.mjs.map +1 -0
  391. package/dist/ProgressBar-BMeSiueh.mjs.map +1 -0
  392. package/dist/ProgressBar-C15ih0uL.mjs.map +1 -0
  393. package/dist/{ProgressBar-CTOa-MDz.mjs → ProgressBar-CXB5q3-H.mjs} +2 -2
  394. package/dist/ProgressBar-DAUOWol1.mjs.map +1 -0
  395. package/dist/QrCode-BYLxjhwi.mjs.map +1 -0
  396. package/dist/QrCode-CCigeTaZ.mjs +109 -0
  397. package/dist/QrCode-CaXoOjo-.mjs.map +1 -0
  398. package/dist/QrCode-CcQR60hB.mjs.map +1 -0
  399. package/dist/QrCode-S_eLVZoz.mjs.map +1 -0
  400. package/dist/QrCode-XZMMiaX5.mjs.map +1 -0
  401. package/dist/QrCodeModal-BJOu1pAV.mjs.map +1 -0
  402. package/dist/QrCodeModal-BjT-0P0w.mjs.map +1 -0
  403. package/dist/QrCodeModal-BrabSTzq.mjs.map +1 -0
  404. package/dist/QrCodeModal-CjvbRYLW.mjs.map +1 -0
  405. package/dist/{QrCodeModal-DE3juCsN.mjs → QrCodeModal-Dpw_tCQ6.mjs} +1 -1
  406. package/dist/QrCodeModal-N2fjbP4S.mjs.map +1 -0
  407. package/dist/RadioCurrently-B_b8DV2w.mjs.map +1 -0
  408. package/dist/RadioCurrently-DufvDqm1.mjs.map +1 -0
  409. package/dist/{RadioCurrently-BlAhcc9E.mjs → RadioCurrently-ysRKhxKU.mjs} +3 -3
  410. package/dist/RadioHistory-B03bYMxm.mjs.map +1 -0
  411. package/dist/{RadioHistory-C7S79sZD.mjs → RadioHistory-DjsqvRgH.mjs} +2 -2
  412. package/dist/RadioHistory-Dv4gt9TM.mjs.map +1 -0
  413. package/dist/RadioImage-BFdiGgi_.mjs.map +1 -0
  414. package/dist/{RadioImage-BTn2Lquc.mjs → RadioImage-CSseYIVb.mjs} +4 -4
  415. package/dist/RadioImage-CrtD33dM.mjs.map +1 -0
  416. package/dist/RadioList--f7RDhHJ.mjs.map +1 -0
  417. package/dist/{RadioList-BD3zNwmk.mjs → RadioList-BZFFAobk.mjs} +4 -4
  418. package/dist/RadioList-De9NQ23Q.mjs.map +1 -0
  419. package/dist/RadioPage-BK1N--Kr.mjs.map +1 -0
  420. package/dist/RadioPage-BTtNFJI2.mjs.map +1 -0
  421. package/dist/RadioPage-CcK0y_5s.mjs.map +1 -0
  422. package/dist/RadioPage-Cqas0JX6.mjs.map +1 -0
  423. package/dist/{RadioPage-Bv3oupa1.mjs → RadioPage-Cwooj0wF.mjs} +4 -4
  424. package/dist/RadioPage-DhSB0sX5.mjs.map +1 -0
  425. package/dist/RadioPage-DlahFXYC.mjs.map +1 -0
  426. package/dist/RadioPlanning-BU1E8i4t.mjs.map +1 -0
  427. package/dist/{RadioPlanning-nkv_Mb_t.mjs → RadioPlanning-BmIxuUBI.mjs} +2 -2
  428. package/dist/RadioPlanning-Bx-N-xqX.mjs.map +1 -0
  429. package/dist/RadioProgressBar-0XM3ZTGU.mjs.map +1 -0
  430. package/dist/{RadioProgressBar-B2EgCOrK.mjs → RadioProgressBar-CQRGuPpC.mjs} +1 -1
  431. package/dist/RadioProgressBar-oyeS56mV.mjs.map +1 -0
  432. package/dist/{RecaptchaModal-w-9MlZ45.mjs → RecaptchaModal-BdW4xNlX.mjs} +1 -1
  433. package/dist/RecaptchaModal-DFlFQcHs.mjs.map +1 -0
  434. package/dist/RecaptchaModal-iLQ4UYOL.mjs.map +1 -0
  435. package/dist/ReportAbuseModal-BaPt2DLK.mjs.map +1 -0
  436. package/dist/ReportAbuseModal-BdZRe29L.mjs.map +1 -0
  437. package/dist/ReportAbuseModal-CH7Y153n.mjs.map +1 -0
  438. package/dist/{ReportAbuseModal-O1K7j7NV.mjs → ReportAbuseModal-jjGeXbB9.mjs} +4 -4
  439. package/dist/RightsIndicator-4pUsBq5j.mjs.map +1 -0
  440. package/dist/RightsIndicator-BH3jm_1O.mjs.map +1 -0
  441. package/dist/{RightsIndicator-D0cSu8j2.mjs → RightsIndicator-CPzWpH5Z.mjs} +1 -1
  442. package/dist/RightsIndicator-d8ffUFIj.mjs.map +1 -0
  443. package/dist/{RightsWrapper-BUj_1bwR.mjs → RightsWrapper-BTQ8GGUi.mjs} +5 -5
  444. package/dist/RightsWrapper-C3BRHqqo.mjs.map +1 -0
  445. package/dist/RightsWrapper-DJG9Ds6c.mjs.map +1 -0
  446. package/dist/RightsWrapper-nBURBTJX.mjs.map +1 -0
  447. package/dist/{RubriqueChoice-DaTWiDbl.mjs → RubriqueChoice-C-S-veJJ.mjs} +1 -1
  448. package/dist/RubriqueChoice-DsmnrUNs.mjs.map +1 -0
  449. package/dist/{RubriqueChooser-C33LorHa.mjs → RubriqueChooser-CNGn8LcP.mjs} +1 -1
  450. package/dist/RubriqueChooser-WmzcajTt.mjs.map +1 -0
  451. package/dist/RubriqueFilter-C9C_OiF5.mjs.map +1 -0
  452. package/dist/RubriqueFilter-DDI7DjMR.mjs.map +1 -0
  453. package/dist/RubriqueFilter-_8V1n9-x.mjs.map +1 -0
  454. package/dist/{RubriqueFilter-RgardNnQ.mjs → RubriqueFilter-rxiG8Wci.mjs} +3 -3
  455. package/dist/RubriqueList-99-nWSvq.mjs.map +1 -0
  456. package/dist/RubriqueList-BiRimk17.mjs.map +1 -0
  457. package/dist/RubriqueList-H_NHILuj.mjs.map +1 -0
  458. package/dist/{RubriqueList-DA9OYqUl.mjs → RubriqueList-rJj2IycY.mjs} +4 -4
  459. package/dist/RubriquePage-6KFPBPz8.mjs.map +1 -0
  460. package/dist/{RubriquePage-xgTOce7c.mjs → RubriquePage-BNEWnk3-.mjs} +4 -4
  461. package/dist/RubriquePage-Bpt-x7IK.mjs.map +1 -0
  462. package/dist/RubriquePage-Cwz9OqLO.mjs.map +1 -0
  463. package/dist/SearchPage-BtZnj3sA.mjs.map +1 -0
  464. package/dist/SearchPage-CbbbcXxs.mjs.map +1 -0
  465. package/dist/SearchPage-DMIV2AgJ.mjs.map +1 -0
  466. package/dist/{SearchPage-C3o5RPP0.mjs → SearchPage-DsZzPoEw.mjs} +2 -2
  467. package/dist/ShareAnonymous-BeSQozvM.mjs.map +1 -0
  468. package/dist/ShareAnonymous-BgsR6Ahp.mjs.map +1 -0
  469. package/dist/ShareAnonymous-CNWR1v6X.mjs.map +1 -0
  470. package/dist/{ShareAnonymous-bOwwEjPv.mjs → ShareAnonymous-DK2rnLl1.mjs} +3 -3
  471. package/dist/ShareAnonymous-DVpKBKbi.mjs.map +1 -0
  472. package/dist/ShareAnonymous-DWArDFT0.mjs.map +1 -0
  473. package/dist/ShareAnonymous-IaVbb-rp.mjs.map +1 -0
  474. package/dist/ShareModalPlayer-BHmsvxXF.mjs.map +1 -0
  475. package/dist/{ShareModalPlayer-D2oBrSly.mjs → ShareModalPlayer-Cfnk68-U.mjs} +1 -1
  476. package/dist/ShareModalPlayer-DLBU3lsU.mjs.map +1 -0
  477. package/dist/ShareModalPlayer-O-CmDObW.mjs.map +1 -0
  478. package/dist/ShareModalPlayer-QYu8Q9ks.mjs.map +1 -0
  479. package/dist/ShareModalPlayer-Vga-96DM.mjs.map +1 -0
  480. package/dist/{ShareNewsletter-CNw1LziN.mjs → ShareNewsletter-BWIAt47D.mjs} +1 -1
  481. package/dist/ShareNewsletter-BhFk6ARk.mjs.map +1 -0
  482. package/dist/ShareNewsletter-JCO4h7rk.mjs.map +1 -0
  483. package/dist/SharePlayer-C-RgIOh1.mjs.map +1 -0
  484. package/dist/{SharePlayer-CRri0YED.mjs → SharePlayer-C0aveOwy.mjs} +2 -2
  485. package/dist/SharePlayer-CNXrUj8M.mjs.map +1 -0
  486. package/dist/SharePlayer-D0-qY2dS.mjs.map +1 -0
  487. package/dist/SharePlayer-DQoFa7iv.mjs.map +1 -0
  488. package/dist/SharePlayer-DwNl3E7o.mjs.map +1 -0
  489. package/dist/{SharePlayerRadio-DVsegQMu.mjs → SharePlayerRadio-BqaeyEls.mjs} +2 -2
  490. package/dist/SharePlayerRadio-CHvCtKdZ.mjs.map +1 -0
  491. package/dist/SharePlayerRadio-CIsy-rCC.mjs.map +1 -0
  492. package/dist/SharePlayerRadio-ChfNulnf.mjs.map +1 -0
  493. package/dist/SharePlayerRadio-DA-W-306.mjs.map +1 -0
  494. package/dist/SharePlayerRadio-DwPeLUsk.mjs.map +1 -0
  495. package/dist/SharePlayerTypes-CeMV4n10.mjs.map +1 -0
  496. package/dist/SharePlayerTypes-DdyoQZDi.mjs.map +1 -0
  497. package/dist/{SharePlayerTypes-BxkEoBSL.mjs → SharePlayerTypes-DyrqFDVJ.mjs} +1 -1
  498. package/dist/ShareSocialsButtons-BHWzJVne.mjs.map +1 -0
  499. package/dist/ShareSocialsButtons-Bjx2ONvj.mjs.map +1 -0
  500. package/dist/{ShareSocialsButtons-BJ3DqvIO.mjs → ShareSocialsButtons-PqMXhFEk.mjs} +1 -1
  501. package/dist/{SimpleLayout-BJlcQjx9.mjs → SimpleLayout-9O9FZ69Q.mjs} +2 -2
  502. package/dist/SimpleLayout-B-QSfHeQ.mjs.map +1 -0
  503. package/dist/SimpleLayout-BauUacaf.mjs.map +1 -0
  504. package/dist/SimpleLayout-C29bPtbd.mjs.map +1 -0
  505. package/dist/SimpleLayout-Cjc3Q9Mb.mjs.map +1 -0
  506. package/dist/SimpleLayout-D4sVjQGu.mjs.map +1 -0
  507. package/dist/SimpleLayout-DaoXS--3.mjs.map +1 -0
  508. package/dist/SimpleLayout-vkWEZHLi.mjs.map +1 -0
  509. package/dist/{SmartLinkPage-DpD90wc7.mjs → SmartLinkPage-6HgX8LDv.mjs} +16 -16
  510. package/dist/SmartLinkPage-BcQmox7e.mjs.map +1 -0
  511. package/dist/SmartLinkPage-M_zB_Xp1.mjs.map +1 -0
  512. package/dist/SubscribeButtons-CyGYD1B1.mjs.map +1 -0
  513. package/dist/SubscribeButtons-DjjZQfOU.mjs.map +1 -0
  514. package/dist/{SubscribeButtons-zlRDGEzS.mjs → SubscribeButtons-IpzqDGIn.mjs} +3 -3
  515. package/dist/SubscribeButtons-yA2wowFc.mjs.map +1 -0
  516. package/dist/SwiperList-BNODHhLF.mjs.map +1 -0
  517. package/dist/SwiperList-Cqklwlg9.mjs.map +1 -0
  518. package/dist/{SwiperList-BlF3rPq5.mjs → SwiperList-O8nUg87R.mjs} +1 -1
  519. package/dist/TagList-4RDriU1J.mjs.map +1 -0
  520. package/dist/TagList-B5JPfT6j.mjs.map +1 -0
  521. package/dist/TagList-DVjqXiaA.mjs.map +1 -0
  522. package/dist/{TagList-BBHyaKp-.mjs → TagList-V9fAFATL.mjs} +2 -2
  523. package/dist/TagPage-BOsz6Bot.mjs.map +1 -0
  524. package/dist/TagPage-CALmJwxW.mjs.map +1 -0
  525. package/dist/{TagPage-DLpNBBjP.mjs → TagPage-CsFwN4sE.mjs} +3 -3
  526. package/dist/TagPage-DMuxYu6y.mjs.map +1 -0
  527. package/dist/{TopBar-CLWWRgr7.mjs → TopBar-0oG6YPlW.mjs} +37 -37
  528. package/dist/TopBar-CUCBss7X.mjs.map +1 -0
  529. package/dist/TopBar-CeQQ1hgH.mjs.map +1 -0
  530. package/dist/TopBar-DdxThCLR.mjs.map +1 -0
  531. package/dist/{UserButtonContent-BR3Rlqwp.mjs → UserButtonContent--VK68UsY.mjs} +6 -6
  532. package/dist/UserButtonContent-067qGenf.mjs.map +1 -0
  533. package/dist/UserButtonContent-Dqgyrgzv.mjs.map +1 -0
  534. package/dist/VideoModuleBox-9QgBI-Q-.mjs.map +1 -0
  535. package/dist/{VideoModuleBox-DxYJVwy3.mjs → VideoModuleBox-Bcqman6a.mjs} +1 -1
  536. package/dist/VideoModuleBox-BrVK2bDZ.mjs.map +1 -0
  537. package/dist/VideoModuleBox-DWO47_bZ.mjs.map +1 -0
  538. package/dist/VideoPage-4MB4zmnA.mjs.map +1 -0
  539. package/dist/VideoPage-BDGvtr1o.mjs.map +1 -0
  540. package/dist/{VideoPage-BaeTduNB.mjs → VideoPage-BjlaP2DU.mjs} +6 -6
  541. package/dist/VideoPage-C-yjvvhl.mjs.map +1 -0
  542. package/dist/VideoPage-C0_t7XMC.mjs.map +1 -0
  543. package/dist/VideoPage-CIDpzbkb.mjs.map +1 -0
  544. package/dist/VideoPage-D2V1oXGC.mjs.map +1 -0
  545. package/dist/VideoPage-DEJSfeFy.mjs.map +1 -0
  546. package/dist/{classicApi-pmODlqv5.mjs → classicApi-CGipMqf7.mjs} +267 -256
  547. package/dist/classicApi-CW1Z-HoF.mjs.map +1 -0
  548. package/dist/classicApi-OzToKuW1.mjs.map +1 -0
  549. package/dist/{downloadHelper-BAI-eqgA.mjs → downloadHelper-C3QooCxr.mjs} +1 -1
  550. package/dist/downloadHelper-D7dUpp5l.mjs.map +1 -0
  551. package/dist/downloadHelper-DwV3Mmd3.mjs.map +1 -0
  552. package/dist/index.css +1 -1
  553. package/dist/index.mjs +183 -183
  554. package/dist/src/components/form/ClassicDatePicker.vue.d.ts +24 -14
  555. package/dist/src/components/form/OctopusMultiselect.vue.d.ts +2 -0
  556. package/dist/src/i18n.d.ts +2 -0
  557. package/dist/tests.mjs +2 -2
  558. package/dist/useAdvancedParamInit-BKw9VZ53.mjs.map +1 -0
  559. package/dist/useAdvancedParamInit-CyRmbqqe.mjs.map +1 -0
  560. package/dist/{useAdvancedParamInit-Bgvt8758.mjs → useAdvancedParamInit-D5roUdHI.mjs} +10 -10
  561. package/dist/useDayjs-BKBB00TF.mjs.map +1 -0
  562. package/dist/useDayjs-UQLGUbw5.mjs.map +1 -0
  563. package/dist/{useDayjs-DGb3L4kJ.mjs → useDayjs-VUs19G9T.mjs} +1 -1
  564. package/dist/useErrorHandler-BKN3lhJ5.mjs.map +1 -0
  565. package/dist/useErrorHandler-C3XnRTmp.mjs.map +1 -0
  566. package/dist/{useErrorHandler-D9W2BURn.mjs → useErrorHandler-x9sjDYSz.mjs} +1 -1
  567. package/dist/useImageProxy-AEcmDpvW.mjs.map +1 -0
  568. package/dist/useImageProxy-BzTG_GCn.mjs.map +1 -0
  569. package/dist/{useImageProxy-8ndy_oTo.mjs → useImageProxy-CCpDzPmQ.mjs} +1 -1
  570. package/dist/useOrgaComputed-4PduqYTq.mjs.map +1 -0
  571. package/dist/useOrgaComputed-C2n0FBbv.mjs.map +1 -0
  572. package/dist/{useOrgaComputed-CBJ5sDOm.mjs → useOrgaComputed-D81Jihm-.mjs} +2 -2
  573. package/dist/{usePlayerLogicProgress-C2L7cMdd.mjs → usePlayerLogicProgress-BybmSAcs.mjs} +2 -2
  574. package/dist/usePlayerLogicProgress-CKoCod6g.mjs.map +1 -0
  575. package/dist/usePlayerLogicProgress-DZaPRo6p.mjs.map +1 -0
  576. package/dist/usePodcastView-B-2HPFAo.mjs.map +1 -0
  577. package/dist/{usePodcastView-CoDJJr6Y.mjs → usePodcastView-CkM-n6iO.mjs} +3 -3
  578. package/dist/usePodcastView-jdYTK1cW.mjs.map +1 -0
  579. package/dist/{usePresentationItem-DZZVm3hh.mjs → usePresentationItem-CLEGZwI3.mjs} +3 -3
  580. package/dist/usePresentationItem-Com4i40U.mjs.map +1 -0
  581. package/dist/usePresentationItem-OpMean0v.mjs.map +1 -0
  582. package/dist/{useRights-DOXtpjv5.mjs → useRights-BI2tXXjR.mjs} +1 -1
  583. package/dist/useRights-Bsv9hr7w.mjs.map +1 -0
  584. package/dist/useRights-DfudFDI6.mjs.map +1 -0
  585. package/dist/{useRubriquesFilterComputed-DoUOqOrJ.mjs → useRubriquesFilterComputed-D1yqLnK4.mjs} +1 -1
  586. package/dist/useRubriquesFilterComputed-DGDJp2gc.mjs.map +1 -0
  587. package/dist/useRubriquesFilterComputed-NNE-FElk.mjs.map +1 -0
  588. package/dist/{useRubriquesFilterParam-BE8BbmAQ.mjs → useRubriquesFilterParam-2eMd5ND7.mjs} +1 -1
  589. package/dist/useRubriquesFilterParam-DE5dYl6c.mjs.map +1 -0
  590. package/dist/useRubriquesFilterParam-DXYD4G0D.mjs.map +1 -0
  591. package/dist/useSharePlatforms-CrQ8r5vT.mjs.map +1 -0
  592. package/dist/useSharePlatforms-D124fJ_v.mjs.map +1 -0
  593. package/dist/{useSharePlatforms-ZWYDJZBy.mjs → useSharePlatforms-sXgVxsL5.mjs} +5 -5
  594. package/dist/{useSimplePageParam-DFKSEyiE.mjs → useSimplePageParam-BrtYXOUt.mjs} +1 -1
  595. package/dist/useSimplePageParam-CruL7rLG.mjs.map +1 -0
  596. package/dist/useSimplePageParam-SaBaPhb8.mjs.map +1 -0
  597. package/dist/{useTranslation-Dr7KU7Y4.mjs → useTranslation-BVQwv02Q.mjs} +9 -9
  598. package/dist/useTranslation-Bf2zP_6C.mjs.map +1 -0
  599. package/dist/useTranslation-BuhzZoI8.mjs.map +1 -0
  600. package/dist/useTranslation-OWqckMEl.mjs.map +1 -0
  601. package/dist/usefetchRadioData-D01ws733.mjs.map +1 -0
  602. package/dist/usefetchRadioData-DDRPoD4s.mjs.map +1 -0
  603. package/dist/{usefetchRadioData-SLWfXkYt.mjs → usefetchRadioData-zyQNqiV3.mjs} +1 -1
  604. package/package.json +1 -1
  605. package/src/components/composable/useTranslation.ts +2 -2
  606. package/src/components/display/sharing/QrCode.vue +63 -64
  607. package/src/components/form/ClassicDatePicker.vue +32 -20
  608. package/src/components/form/OctopusMultiselect.vue +3 -4
  609. package/src/components/misc/ClassicPopover.vue +1 -1
  610. package/src/components/misc/player/video/PlayerVideoHls.vue +160 -159
  611. package/src/i18n.ts +38 -29
  612. package/tests/components/form/ClassicDatePicker.spec.ts +32 -0
  613. package/tests/components/form/OctopusMultiselect.spec.ts +5 -4
  614. package/dist/ClassicDatePicker-B7UA9CqR.mjs +0 -187
  615. package/dist/QrCode-DuScZ7PD.mjs +0 -105
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioPlanning-BU1E8i4t.mjs","names":["classicApi","_resolveComponent","_resolveDirective","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","_normalizeClass","_createTextVNode","_createCommentVNode","_createVNode","_withCtx","_withDirectives","_sfc_main"],"sources":["../src/components/display/live/RadioPlanning.vue","../src/components/display/live/RadioPlanning.vue"],"sourcesContent":["<template>\n <section class=\"module-box\">\n <h2 class=\"mb-3\">\n {{ t(\"Program\") }}\n </h2>\n <div class=\"py-3\">\n <div class=\"d-flex align-items-center w-100 mb-3\">\n <button\n v-for=\"day in displayArrayDays\"\n :key=\"day.date\"\n class=\"button-date border\"\n :class=\"day.date == daySelected ? 'bg-primary' : ''\"\n @click=\"changeDate(day.date)\"\n >\n <span class=\"text-capitalize\" >{{ day.dayOfWeek }}</span>\n <time :datetime=\"day.iso\">{{ day.title }}</time>\n </button>\n </div>\n <button v-if=\"isPhone\" class=\"btn btn-primary mb-3 mx-0\" @click=\"showAllDays = !showAllDays\">\n <template v-if=\"!showAllDays\">{{ t('Show more days') }}</template>\n <template v-else>{{ t('Show fewer days') }}</template>\n </button>\n <div\n class=\"d-flex align-items-center justify-content-center border-bottom\"\n >\n <button\n v-for=\"period in periodOfDay\"\n :key=\"period.id\"\n class=\"btn btn-underline mb-2\"\n @click=\"scrollToElement('planning-period-' + period.id)\"\n >\n {{ period.title }}\n </button>\n <button class=\"btn btn-underline mb-2\" @click=\"changePeriodNow\">\n {{ t(\"Now\") }}\n </button>\n </div>\n\n <div class=\"d-flex flex-column p-3\">\n <ClassicLoading\n :loading-text=\"loading ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Error`) : undefined\"\n />\n <template v-if=\"!loading && !error\">\n <div v-if=\"!planningLength[daySelected]\" class=\"text-center\">\n {{ t(\"No programming\") }}\n </div>\n <div v-for=\"period in periodOfDay\" v-else :key=\"period.id\">\n <template v-if=\"planning[daySelected][period.id].length\">\n <div\n :id=\"'planning-period-' + period.id\"\n class=\"fw-bold my-3 pb-2 border-bottom border-primary text-primary\"\n >\n {{ period.title }}\n </div>\n <div\n v-for=\"planningItem in planning[daySelected][period.id]\"\n :id=\"\n 'planning-occurrence-' +\n planningItem.occurrenceId +\n '' +\n planningItem.liveId\n \"\n :key=\"planningItem.occurrenceId + '' + planningItem.liveId\"\n class=\"d-flex align-items-center mb-3\"\n >\n <time :datetime=\"planningItem.startDate\" class=\"program-item-date fw-bold flex-shrink-0\">\n {{ dateDisplay(planningItem.startDate) }}\n </time>\n <router-link\n class=\"d-flex align-items-center flex-nowrap text-dark\"\n :to=\"{\n name: 'podcast',\n params: { podcastId: planningItem.podcastId },\n }\"\n :title=\"t('Episode name page', { name: planningItem.title })\"\n >\n <img\n v-lazy=\"\n useProxyImageUrl(planningItem.podcastData.imageUrl, '150')\n \"\n width=\"150\"\n height=\"150\"\n class=\"m-2 program-item-img\"\n aria-hidden=\"true\"\n alt=\"\"\n \n :title=\"\n t('Episode name image', {\n name: planningItem.podcastData.title,\n })\n \"\n />\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex align-items-center mb-2\">\n <div\n v-if=\"planningItem.liveId\"\n class=\"bg-complementary text-white p-1 me-1\"\n >\n {{ t(\"Live\") }}\n </div>\n <div class=\"flex-grow-1 fw-bold\">\n {{ planningItem.podcastData.title }}\n </div>\n </div>\n </div>\n </router-link>\n </div>\n </template>\n </div>\n </template>\n </div>\n </div>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport dayjs from \"dayjs\";\nimport utc from \"dayjs/plugin/utc\";\ndayjs.extend(utc);\nimport classicApi from \"../../../api/classicApi\";\nimport {useImageProxy} from \"../../composable/useImageProxy\";\nimport {useResizePhone} from \"../../composable/useResizePhone\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { computed, nextTick, onMounted, ref, Ref } from \"vue\";\nimport { Canal } from \"@/stores/class/radio/canal\";\nimport { PlanningOccurrence } from \"@/stores/class/radio/recurrence\";\nimport { PlanningLive } from \"@/stores/class/radio/live\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n radio: { default: undefined, type: Object as () => Canal },\n})\n\n//Data \nconst planning: Ref<{\n [key: number]: {\n morning: Array<PlanningOccurrence | PlanningLive>;\n afternoon: Array<PlanningOccurrence | PlanningLive>;\n evening: Array<PlanningOccurrence | PlanningLive>;\n };\n}> = ref({});\nconst planningLength: Ref<{ [key: number]: number }> = ref({});\nconst daySelected = ref(dayjs().valueOf());\nconst arrayDays: Ref<Array<{\n title: string;\n date: number;\n dayOfWeek: string;\n iso: string;\n}>> = ref([]);\nconst loading = ref(true);\nconst error = ref(false);\nconst showAllDays = ref(false);\n\n\n//Composables\nconst { t } = useI18n();\nconst { isPhone } = useResizePhone();\nconst { useProxyImageUrl } = useImageProxy();\n\n//Computed\nconst startOfDay = computed(() => dayjs(daySelected.value).startOf(\"date\").toISOString());\nconst endOfDay = computed(() => dayjs(daySelected.value).endOf(\"date\").toISOString());\nconst periodOfDay = computed(() => {\n return [\n {\n id: \"morning\",\n title: t(\"Morning\"),\n end: dayjs(daySelected.value)\n .hour(14)\n .minute(0)\n .second(0)\n .millisecond(0),\n },\n {\n id: \"afternoon\",\n title: t(\"Afternoon\"),\n end: dayjs(daySelected.value)\n .hour(19)\n .minute(0)\n .second(0)\n .millisecond(0),\n },\n {\n id: \"evening\",\n title: t(\"Evening\"),\n end: dayjs(daySelected.value).endOf(\"date\"),\n },\n ];\n});\nconst displayArrayDays = computed(() => {\n if(isPhone && !showAllDays.value){\n return arrayDays.value.slice(6, 9);\n }\n return arrayDays.value;\n});\n\n\nonMounted(()=>{\n createArrayDays();\n fetchOccurrences();\n})\n\n\n//Mounted\nfunction scrollToElement(id: string) {\n const element = document.getElementById(id);\n if (element) {\n const yOffset = -110;\n const y =\n element.getBoundingClientRect().top + window.scrollY + yOffset;\n window.scrollTo({ top: y, behavior: \"smooth\" });\n }\n}\nfunction changePeriodNow() {\n const now = dayjs();\n if (!dayjs(daySelected.value).isSame(now, \"day\")) {\n changeDate(arrayDays.value[7].date);\n }\n nextTick(() => {\n if (!planningLength.value[daySelected.value]) {\n return;\n }\n const arrayOccurrences = Object.values(\n planning.value[daySelected.value],\n ).reduce((r, c) => r.concat(c), []);\n let selectedOccurrence = arrayOccurrences[0];\n for (const occ of arrayOccurrences) {\n selectedOccurrence = occ;\n if (dayjs(occ.endDate).isAfter(now)) {\n break;\n }\n }\n scrollToElement(\n \"planning-occurrence-\" +\n selectedOccurrence.occurrenceId +\n \"\" +\n selectedOccurrence.liveId,\n );\n });\n}\nfunction createArrayDays() {\n for (let index = -7; index < 3; index++) {\n const dayToAdd = dayjs().add(index, \"day\");\n if (0 === index) {\n daySelected.value = dayToAdd.valueOf();\n }\n arrayDays.value.push({\n title: dayToAdd.format(\"D/MM\"),\n dayOfWeek: dayToAdd.format(\"dddd\"),\n date: dayToAdd.valueOf(),\n iso: dayToAdd.format(\"MM-DD\"),\n });\n }\n}\nasync function fetchOccurrencesAndLives(): Promise<Array<PlanningOccurrence|PlanningLive>> {\n const params = {\n canalId: props.radio?.id,\n from:startOfDay.value,\n to:endOfDay.value,\n };\n let occurrences: Array<PlanningOccurrence | PlanningLive> =\n await classicApi.fetchData<Array<PlanningOccurrence>>({\n api: 14,\n path: \"planning/occurrence/list\",\n parameters: params,\n });\n const lives: Array<PlanningOccurrence> = await classicApi.fetchData<\n Array<PlanningOccurrence>\n >({\n api: 14,\n path: \"live/list\",\n parameters: params,\n });\n\n if (lives.length) {\n occurrences = occurrences.concat(lives);\n occurrences.sort((a, b) => {\n if (a.startDate > b.startDate) {\n return 1;\n }\n return b.startDate > a.startDate ? -1 : 0;\n });\n }\n return occurrences;\n}\n\nasync function fetchOccurrences(): Promise<void> {\n if (planning.value[daySelected.value]) {\n return;\n }\n planning.value[daySelected.value] = {\n morning: [],\n afternoon: [],\n evening: [],\n };\n planningLength.value[daySelected.value] = 0;\n loading.value = true;\n error.value = false;\n try {\n const occurrences = await fetchOccurrencesAndLives();\n let periodDayIndex = 0;\n for (const occ of occurrences) {\n if (!occ.podcastId) {\n continue;\n }\n if (\n !dayjs(occ.startDate).isBefore(periodOfDay.value[periodDayIndex].end)\n ) {\n periodDayIndex += 1;\n }\n\n switch (periodOfDay.value[periodDayIndex].id) {\n case \"morning\":\n planning.value[daySelected.value].morning.push(occ);\n break;\n case \"afternoon\":\n planning.value[daySelected.value].afternoon.push(occ);\n break;\n case \"evening\":\n planning.value[daySelected.value].evening.push(occ);\n break;\n default:\n break;\n }\n planningLength.value[daySelected.value] += 1;\n }\n } catch(e) {\n error.value = true;\n console.error(e);\n }\n loading.value = false;\n}\nfunction changeDate(date: number) {\n daySelected.value = date;\n fetchOccurrences();\n}\nfunction dateDisplay(date: Date): string {\n return dayjs(date).format(\"HH:mm\");\n}\n</script>\n<style lang=\"scss\">\n.octopus-app {\n .program-item-date {\n width: 100px;\n font-size: 1.1rem;\n\n @media (width <= 960px) {\n\t\t\tfont-size: 0.8rem;\n\t\t}\n }\n\n .program-item-img{\n @media (width <= 960px) {\n\t\t\twidth: 80px;\n height: 80px;\n margin: 0.5rem 0.5rem 0 0 !important;\n\t\t}\n }\n\n .button-date {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex-grow: 1;\n padding: 0.5rem;\n\n &.bg-primary{\n color: var(--octopus-color-on-primary) !important;\n }\n\n &:hover {\n background: var(--octopus-secondary);\n }\n\n @media (width <= 960px) {\n\t\t\twidth: 80px;\n\t\t}\n }\n}\n</style>\n","<template>\n <section class=\"module-box\">\n <h2 class=\"mb-3\">\n {{ t(\"Program\") }}\n </h2>\n <div class=\"py-3\">\n <div class=\"d-flex align-items-center w-100 mb-3\">\n <button\n v-for=\"day in displayArrayDays\"\n :key=\"day.date\"\n class=\"button-date border\"\n :class=\"day.date == daySelected ? 'bg-primary' : ''\"\n @click=\"changeDate(day.date)\"\n >\n <span class=\"text-capitalize\" >{{ day.dayOfWeek }}</span>\n <time :datetime=\"day.iso\">{{ day.title }}</time>\n </button>\n </div>\n <button v-if=\"isPhone\" class=\"btn btn-primary mb-3 mx-0\" @click=\"showAllDays = !showAllDays\">\n <template v-if=\"!showAllDays\">{{ t('Show more days') }}</template>\n <template v-else>{{ t('Show fewer days') }}</template>\n </button>\n <div\n class=\"d-flex align-items-center justify-content-center border-bottom\"\n >\n <button\n v-for=\"period in periodOfDay\"\n :key=\"period.id\"\n class=\"btn btn-underline mb-2\"\n @click=\"scrollToElement('planning-period-' + period.id)\"\n >\n {{ period.title }}\n </button>\n <button class=\"btn btn-underline mb-2\" @click=\"changePeriodNow\">\n {{ t(\"Now\") }}\n </button>\n </div>\n\n <div class=\"d-flex flex-column p-3\">\n <ClassicLoading\n :loading-text=\"loading ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Error`) : undefined\"\n />\n <template v-if=\"!loading && !error\">\n <div v-if=\"!planningLength[daySelected]\" class=\"text-center\">\n {{ t(\"No programming\") }}\n </div>\n <div v-for=\"period in periodOfDay\" v-else :key=\"period.id\">\n <template v-if=\"planning[daySelected][period.id].length\">\n <div\n :id=\"'planning-period-' + period.id\"\n class=\"fw-bold my-3 pb-2 border-bottom border-primary text-primary\"\n >\n {{ period.title }}\n </div>\n <div\n v-for=\"planningItem in planning[daySelected][period.id]\"\n :id=\"\n 'planning-occurrence-' +\n planningItem.occurrenceId +\n '' +\n planningItem.liveId\n \"\n :key=\"planningItem.occurrenceId + '' + planningItem.liveId\"\n class=\"d-flex align-items-center mb-3\"\n >\n <time :datetime=\"planningItem.startDate\" class=\"program-item-date fw-bold flex-shrink-0\">\n {{ dateDisplay(planningItem.startDate) }}\n </time>\n <router-link\n class=\"d-flex align-items-center flex-nowrap text-dark\"\n :to=\"{\n name: 'podcast',\n params: { podcastId: planningItem.podcastId },\n }\"\n :title=\"t('Episode name page', { name: planningItem.title })\"\n >\n <img\n v-lazy=\"\n useProxyImageUrl(planningItem.podcastData.imageUrl, '150')\n \"\n width=\"150\"\n height=\"150\"\n class=\"m-2 program-item-img\"\n aria-hidden=\"true\"\n alt=\"\"\n \n :title=\"\n t('Episode name image', {\n name: planningItem.podcastData.title,\n })\n \"\n />\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex align-items-center mb-2\">\n <div\n v-if=\"planningItem.liveId\"\n class=\"bg-complementary text-white p-1 me-1\"\n >\n {{ t(\"Live\") }}\n </div>\n <div class=\"flex-grow-1 fw-bold\">\n {{ planningItem.podcastData.title }}\n </div>\n </div>\n </div>\n </router-link>\n </div>\n </template>\n </div>\n </template>\n </div>\n </div>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport dayjs from \"dayjs\";\nimport utc from \"dayjs/plugin/utc\";\ndayjs.extend(utc);\nimport classicApi from \"../../../api/classicApi\";\nimport {useImageProxy} from \"../../composable/useImageProxy\";\nimport {useResizePhone} from \"../../composable/useResizePhone\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { computed, nextTick, onMounted, ref, Ref } from \"vue\";\nimport { Canal } from \"@/stores/class/radio/canal\";\nimport { PlanningOccurrence } from \"@/stores/class/radio/recurrence\";\nimport { PlanningLive } from \"@/stores/class/radio/live\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n radio: { default: undefined, type: Object as () => Canal },\n})\n\n//Data \nconst planning: Ref<{\n [key: number]: {\n morning: Array<PlanningOccurrence | PlanningLive>;\n afternoon: Array<PlanningOccurrence | PlanningLive>;\n evening: Array<PlanningOccurrence | PlanningLive>;\n };\n}> = ref({});\nconst planningLength: Ref<{ [key: number]: number }> = ref({});\nconst daySelected = ref(dayjs().valueOf());\nconst arrayDays: Ref<Array<{\n title: string;\n date: number;\n dayOfWeek: string;\n iso: string;\n}>> = ref([]);\nconst loading = ref(true);\nconst error = ref(false);\nconst showAllDays = ref(false);\n\n\n//Composables\nconst { t } = useI18n();\nconst { isPhone } = useResizePhone();\nconst { useProxyImageUrl } = useImageProxy();\n\n//Computed\nconst startOfDay = computed(() => dayjs(daySelected.value).startOf(\"date\").toISOString());\nconst endOfDay = computed(() => dayjs(daySelected.value).endOf(\"date\").toISOString());\nconst periodOfDay = computed(() => {\n return [\n {\n id: \"morning\",\n title: t(\"Morning\"),\n end: dayjs(daySelected.value)\n .hour(14)\n .minute(0)\n .second(0)\n .millisecond(0),\n },\n {\n id: \"afternoon\",\n title: t(\"Afternoon\"),\n end: dayjs(daySelected.value)\n .hour(19)\n .minute(0)\n .second(0)\n .millisecond(0),\n },\n {\n id: \"evening\",\n title: t(\"Evening\"),\n end: dayjs(daySelected.value).endOf(\"date\"),\n },\n ];\n});\nconst displayArrayDays = computed(() => {\n if(isPhone && !showAllDays.value){\n return arrayDays.value.slice(6, 9);\n }\n return arrayDays.value;\n});\n\n\nonMounted(()=>{\n createArrayDays();\n fetchOccurrences();\n})\n\n\n//Mounted\nfunction scrollToElement(id: string) {\n const element = document.getElementById(id);\n if (element) {\n const yOffset = -110;\n const y =\n element.getBoundingClientRect().top + window.scrollY + yOffset;\n window.scrollTo({ top: y, behavior: \"smooth\" });\n }\n}\nfunction changePeriodNow() {\n const now = dayjs();\n if (!dayjs(daySelected.value).isSame(now, \"day\")) {\n changeDate(arrayDays.value[7].date);\n }\n nextTick(() => {\n if (!planningLength.value[daySelected.value]) {\n return;\n }\n const arrayOccurrences = Object.values(\n planning.value[daySelected.value],\n ).reduce((r, c) => r.concat(c), []);\n let selectedOccurrence = arrayOccurrences[0];\n for (const occ of arrayOccurrences) {\n selectedOccurrence = occ;\n if (dayjs(occ.endDate).isAfter(now)) {\n break;\n }\n }\n scrollToElement(\n \"planning-occurrence-\" +\n selectedOccurrence.occurrenceId +\n \"\" +\n selectedOccurrence.liveId,\n );\n });\n}\nfunction createArrayDays() {\n for (let index = -7; index < 3; index++) {\n const dayToAdd = dayjs().add(index, \"day\");\n if (0 === index) {\n daySelected.value = dayToAdd.valueOf();\n }\n arrayDays.value.push({\n title: dayToAdd.format(\"D/MM\"),\n dayOfWeek: dayToAdd.format(\"dddd\"),\n date: dayToAdd.valueOf(),\n iso: dayToAdd.format(\"MM-DD\"),\n });\n }\n}\nasync function fetchOccurrencesAndLives(): Promise<Array<PlanningOccurrence|PlanningLive>> {\n const params = {\n canalId: props.radio?.id,\n from:startOfDay.value,\n to:endOfDay.value,\n };\n let occurrences: Array<PlanningOccurrence | PlanningLive> =\n await classicApi.fetchData<Array<PlanningOccurrence>>({\n api: 14,\n path: \"planning/occurrence/list\",\n parameters: params,\n });\n const lives: Array<PlanningOccurrence> = await classicApi.fetchData<\n Array<PlanningOccurrence>\n >({\n api: 14,\n path: \"live/list\",\n parameters: params,\n });\n\n if (lives.length) {\n occurrences = occurrences.concat(lives);\n occurrences.sort((a, b) => {\n if (a.startDate > b.startDate) {\n return 1;\n }\n return b.startDate > a.startDate ? -1 : 0;\n });\n }\n return occurrences;\n}\n\nasync function fetchOccurrences(): Promise<void> {\n if (planning.value[daySelected.value]) {\n return;\n }\n planning.value[daySelected.value] = {\n morning: [],\n afternoon: [],\n evening: [],\n };\n planningLength.value[daySelected.value] = 0;\n loading.value = true;\n error.value = false;\n try {\n const occurrences = await fetchOccurrencesAndLives();\n let periodDayIndex = 0;\n for (const occ of occurrences) {\n if (!occ.podcastId) {\n continue;\n }\n if (\n !dayjs(occ.startDate).isBefore(periodOfDay.value[periodDayIndex].end)\n ) {\n periodDayIndex += 1;\n }\n\n switch (periodOfDay.value[periodDayIndex].id) {\n case \"morning\":\n planning.value[daySelected.value].morning.push(occ);\n break;\n case \"afternoon\":\n planning.value[daySelected.value].afternoon.push(occ);\n break;\n case \"evening\":\n planning.value[daySelected.value].evening.push(occ);\n break;\n default:\n break;\n }\n planningLength.value[daySelected.value] += 1;\n }\n } catch(e) {\n error.value = true;\n console.error(e);\n }\n loading.value = false;\n}\nfunction changeDate(date: number) {\n daySelected.value = date;\n fetchOccurrences();\n}\nfunction dateDisplay(date: Date): string {\n return dayjs(date).format(\"HH:mm\");\n}\n</script>\n<style lang=\"scss\">\n.octopus-app {\n .program-item-date {\n width: 100px;\n font-size: 1.1rem;\n\n @media (width <= 960px) {\n\t\t\tfont-size: 0.8rem;\n\t\t}\n }\n\n .program-item-img{\n @media (width <= 960px) {\n\t\t\twidth: 80px;\n height: 80px;\n margin: 0.5rem 0.5rem 0 0 !important;\n\t\t}\n }\n\n .button-date {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex-grow: 1;\n padding: 0.5rem;\n\n &.bg-primary{\n color: var(--octopus-color-on-primary) !important;\n }\n\n &:hover {\n background: var(--octopus-secondary);\n }\n\n @media (width <= 960px) {\n\t\t\twidth: 80px;\n\t\t}\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./ClassicLoading-CXfMjpyl.mjs";
2
- import { t } from "./classicApi-pmODlqv5.mjs";
2
+ import { t } from "./classicApi-CGipMqf7.mjs";
3
3
  import { t as n } from "./useResizePhone-4hSkK5pa.mjs";
4
- import { t as r } from "./useImageProxy-8ndy_oTo.mjs";
4
+ import { t as r } from "./useImageProxy-CCpDzPmQ.mjs";
5
5
  import { Fragment as i, computed as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createTextVNode as l, createVNode as u, defineComponent as d, nextTick as f, normalizeClass as ee, onMounted as p, openBlock as m, ref as h, renderList as g, resolveComponent as _, resolveDirective as v, toDisplayString as y, unref as b, withCtx as x, withDirectives as S } from "vue";
6
6
  import { useI18n as C } from "vue-i18n";
7
7
  import w from "dayjs";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioPlanning-Bx-N-xqX.mjs","names":["classicApi","_resolveComponent","_resolveDirective","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","_normalizeClass","_createTextVNode","_createCommentVNode","_createVNode","_withCtx","_withDirectives","_sfc_main"],"sources":["../src/components/display/live/RadioPlanning.vue","../src/components/display/live/RadioPlanning.vue"],"sourcesContent":["<template>\n <section class=\"module-box\">\n <h2 class=\"mb-3\">\n {{ t(\"Program\") }}\n </h2>\n <div class=\"py-3\">\n <div class=\"d-flex align-items-center w-100 mb-3\">\n <button\n v-for=\"day in displayArrayDays\"\n :key=\"day.date\"\n class=\"button-date border\"\n :class=\"day.date == daySelected ? 'bg-primary' : ''\"\n @click=\"changeDate(day.date)\"\n >\n <span class=\"text-capitalize\" >{{ day.dayOfWeek }}</span>\n <time :datetime=\"day.iso\">{{ day.title }}</time>\n </button>\n </div>\n <button v-if=\"isPhone\" class=\"btn btn-primary mb-3 mx-0\" @click=\"showAllDays = !showAllDays\">\n <template v-if=\"!showAllDays\">{{ t('Show more days') }}</template>\n <template v-else>{{ t('Show fewer days') }}</template>\n </button>\n <div\n class=\"d-flex align-items-center justify-content-center border-bottom\"\n >\n <button\n v-for=\"period in periodOfDay\"\n :key=\"period.id\"\n class=\"btn btn-underline mb-2\"\n @click=\"scrollToElement('planning-period-' + period.id)\"\n >\n {{ period.title }}\n </button>\n <button class=\"btn btn-underline mb-2\" @click=\"changePeriodNow\">\n {{ t(\"Now\") }}\n </button>\n </div>\n\n <div class=\"d-flex flex-column p-3\">\n <ClassicLoading\n :loading-text=\"loading ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Error`) : undefined\"\n />\n <template v-if=\"!loading && !error\">\n <div v-if=\"!planningLength[daySelected]\" class=\"text-center\">\n {{ t(\"No programming\") }}\n </div>\n <div v-for=\"period in periodOfDay\" v-else :key=\"period.id\">\n <template v-if=\"planning[daySelected][period.id].length\">\n <div\n :id=\"'planning-period-' + period.id\"\n class=\"fw-bold my-3 pb-2 border-bottom border-primary text-primary\"\n >\n {{ period.title }}\n </div>\n <div\n v-for=\"planningItem in planning[daySelected][period.id]\"\n :id=\"\n 'planning-occurrence-' +\n planningItem.occurrenceId +\n '' +\n planningItem.liveId\n \"\n :key=\"planningItem.occurrenceId + '' + planningItem.liveId\"\n class=\"d-flex align-items-center mb-3\"\n >\n <time :datetime=\"planningItem.startDate\" class=\"program-item-date fw-bold flex-shrink-0\">\n {{ dateDisplay(planningItem.startDate) }}\n </time>\n <router-link\n class=\"d-flex align-items-center flex-nowrap text-dark\"\n :to=\"{\n name: 'podcast',\n params: { podcastId: planningItem.podcastId },\n }\"\n :title=\"t('Episode name page', { name: planningItem.title })\"\n >\n <img\n v-lazy=\"\n useProxyImageUrl(planningItem.podcastData.imageUrl, '150')\n \"\n width=\"150\"\n height=\"150\"\n class=\"m-2 program-item-img\"\n aria-hidden=\"true\"\n alt=\"\"\n \n :title=\"\n t('Episode name image', {\n name: planningItem.podcastData.title,\n })\n \"\n />\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex align-items-center mb-2\">\n <div\n v-if=\"planningItem.liveId\"\n class=\"bg-complementary text-white p-1 me-1\"\n >\n {{ t(\"Live\") }}\n </div>\n <div class=\"flex-grow-1 fw-bold\">\n {{ planningItem.podcastData.title }}\n </div>\n </div>\n </div>\n </router-link>\n </div>\n </template>\n </div>\n </template>\n </div>\n </div>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport dayjs from \"dayjs\";\nimport utc from \"dayjs/plugin/utc\";\ndayjs.extend(utc);\nimport classicApi from \"../../../api/classicApi\";\nimport {useImageProxy} from \"../../composable/useImageProxy\";\nimport {useResizePhone} from \"../../composable/useResizePhone\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { computed, nextTick, onMounted, ref, Ref } from \"vue\";\nimport { Canal } from \"@/stores/class/radio/canal\";\nimport { PlanningOccurrence } from \"@/stores/class/radio/recurrence\";\nimport { PlanningLive } from \"@/stores/class/radio/live\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n radio: { default: undefined, type: Object as () => Canal },\n})\n\n//Data \nconst planning: Ref<{\n [key: number]: {\n morning: Array<PlanningOccurrence | PlanningLive>;\n afternoon: Array<PlanningOccurrence | PlanningLive>;\n evening: Array<PlanningOccurrence | PlanningLive>;\n };\n}> = ref({});\nconst planningLength: Ref<{ [key: number]: number }> = ref({});\nconst daySelected = ref(dayjs().valueOf());\nconst arrayDays: Ref<Array<{\n title: string;\n date: number;\n dayOfWeek: string;\n iso: string;\n}>> = ref([]);\nconst loading = ref(true);\nconst error = ref(false);\nconst showAllDays = ref(false);\n\n\n//Composables\nconst { t } = useI18n();\nconst { isPhone } = useResizePhone();\nconst { useProxyImageUrl } = useImageProxy();\n\n//Computed\nconst startOfDay = computed(() => dayjs(daySelected.value).startOf(\"date\").toISOString());\nconst endOfDay = computed(() => dayjs(daySelected.value).endOf(\"date\").toISOString());\nconst periodOfDay = computed(() => {\n return [\n {\n id: \"morning\",\n title: t(\"Morning\"),\n end: dayjs(daySelected.value)\n .hour(14)\n .minute(0)\n .second(0)\n .millisecond(0),\n },\n {\n id: \"afternoon\",\n title: t(\"Afternoon\"),\n end: dayjs(daySelected.value)\n .hour(19)\n .minute(0)\n .second(0)\n .millisecond(0),\n },\n {\n id: \"evening\",\n title: t(\"Evening\"),\n end: dayjs(daySelected.value).endOf(\"date\"),\n },\n ];\n});\nconst displayArrayDays = computed(() => {\n if(isPhone && !showAllDays.value){\n return arrayDays.value.slice(6, 9);\n }\n return arrayDays.value;\n});\n\n\nonMounted(()=>{\n createArrayDays();\n fetchOccurrences();\n})\n\n\n//Mounted\nfunction scrollToElement(id: string) {\n const element = document.getElementById(id);\n if (element) {\n const yOffset = -110;\n const y =\n element.getBoundingClientRect().top + window.scrollY + yOffset;\n window.scrollTo({ top: y, behavior: \"smooth\" });\n }\n}\nfunction changePeriodNow() {\n const now = dayjs();\n if (!dayjs(daySelected.value).isSame(now, \"day\")) {\n changeDate(arrayDays.value[7].date);\n }\n nextTick(() => {\n if (!planningLength.value[daySelected.value]) {\n return;\n }\n const arrayOccurrences = Object.values(\n planning.value[daySelected.value],\n ).reduce((r, c) => r.concat(c), []);\n let selectedOccurrence = arrayOccurrences[0];\n for (const occ of arrayOccurrences) {\n selectedOccurrence = occ;\n if (dayjs(occ.endDate).isAfter(now)) {\n break;\n }\n }\n scrollToElement(\n \"planning-occurrence-\" +\n selectedOccurrence.occurrenceId +\n \"\" +\n selectedOccurrence.liveId,\n );\n });\n}\nfunction createArrayDays() {\n for (let index = -7; index < 3; index++) {\n const dayToAdd = dayjs().add(index, \"day\");\n if (0 === index) {\n daySelected.value = dayToAdd.valueOf();\n }\n arrayDays.value.push({\n title: dayToAdd.format(\"D/MM\"),\n dayOfWeek: dayToAdd.format(\"dddd\"),\n date: dayToAdd.valueOf(),\n iso: dayToAdd.format(\"MM-DD\"),\n });\n }\n}\nasync function fetchOccurrencesAndLives(): Promise<Array<PlanningOccurrence|PlanningLive>> {\n const params = {\n canalId: props.radio?.id,\n from:startOfDay.value,\n to:endOfDay.value,\n };\n let occurrences: Array<PlanningOccurrence | PlanningLive> =\n await classicApi.fetchData<Array<PlanningOccurrence>>({\n api: 14,\n path: \"planning/occurrence/list\",\n parameters: params,\n });\n const lives: Array<PlanningOccurrence> = await classicApi.fetchData<\n Array<PlanningOccurrence>\n >({\n api: 14,\n path: \"live/list\",\n parameters: params,\n });\n\n if (lives.length) {\n occurrences = occurrences.concat(lives);\n occurrences.sort((a, b) => {\n if (a.startDate > b.startDate) {\n return 1;\n }\n return b.startDate > a.startDate ? -1 : 0;\n });\n }\n return occurrences;\n}\n\nasync function fetchOccurrences(): Promise<void> {\n if (planning.value[daySelected.value]) {\n return;\n }\n planning.value[daySelected.value] = {\n morning: [],\n afternoon: [],\n evening: [],\n };\n planningLength.value[daySelected.value] = 0;\n loading.value = true;\n error.value = false;\n try {\n const occurrences = await fetchOccurrencesAndLives();\n let periodDayIndex = 0;\n for (const occ of occurrences) {\n if (!occ.podcastId) {\n continue;\n }\n if (\n !dayjs(occ.startDate).isBefore(periodOfDay.value[periodDayIndex].end)\n ) {\n periodDayIndex += 1;\n }\n\n switch (periodOfDay.value[periodDayIndex].id) {\n case \"morning\":\n planning.value[daySelected.value].morning.push(occ);\n break;\n case \"afternoon\":\n planning.value[daySelected.value].afternoon.push(occ);\n break;\n case \"evening\":\n planning.value[daySelected.value].evening.push(occ);\n break;\n default:\n break;\n }\n planningLength.value[daySelected.value] += 1;\n }\n } catch(e) {\n error.value = true;\n console.error(e);\n }\n loading.value = false;\n}\nfunction changeDate(date: number) {\n daySelected.value = date;\n fetchOccurrences();\n}\nfunction dateDisplay(date: Date): string {\n return dayjs(date).format(\"HH:mm\");\n}\n</script>\n<style lang=\"scss\">\n.octopus-app {\n .program-item-date {\n width: 100px;\n font-size: 1.1rem;\n\n @media (width <= 960px) {\n\t\t\tfont-size: 0.8rem;\n\t\t}\n }\n\n .program-item-img{\n @media (width <= 960px) {\n\t\t\twidth: 80px;\n height: 80px;\n margin: 0.5rem 0.5rem 0 0 !important;\n\t\t}\n }\n\n .button-date {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex-grow: 1;\n padding: 0.5rem;\n\n &.bg-primary{\n color: var(--octopus-color-on-primary) !important;\n }\n\n &:hover {\n background: var(--octopus-secondary);\n }\n\n @media (width <= 960px) {\n\t\t\twidth: 80px;\n\t\t}\n }\n}\n</style>\n","<template>\n <section class=\"module-box\">\n <h2 class=\"mb-3\">\n {{ t(\"Program\") }}\n </h2>\n <div class=\"py-3\">\n <div class=\"d-flex align-items-center w-100 mb-3\">\n <button\n v-for=\"day in displayArrayDays\"\n :key=\"day.date\"\n class=\"button-date border\"\n :class=\"day.date == daySelected ? 'bg-primary' : ''\"\n @click=\"changeDate(day.date)\"\n >\n <span class=\"text-capitalize\" >{{ day.dayOfWeek }}</span>\n <time :datetime=\"day.iso\">{{ day.title }}</time>\n </button>\n </div>\n <button v-if=\"isPhone\" class=\"btn btn-primary mb-3 mx-0\" @click=\"showAllDays = !showAllDays\">\n <template v-if=\"!showAllDays\">{{ t('Show more days') }}</template>\n <template v-else>{{ t('Show fewer days') }}</template>\n </button>\n <div\n class=\"d-flex align-items-center justify-content-center border-bottom\"\n >\n <button\n v-for=\"period in periodOfDay\"\n :key=\"period.id\"\n class=\"btn btn-underline mb-2\"\n @click=\"scrollToElement('planning-period-' + period.id)\"\n >\n {{ period.title }}\n </button>\n <button class=\"btn btn-underline mb-2\" @click=\"changePeriodNow\">\n {{ t(\"Now\") }}\n </button>\n </div>\n\n <div class=\"d-flex flex-column p-3\">\n <ClassicLoading\n :loading-text=\"loading ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Error`) : undefined\"\n />\n <template v-if=\"!loading && !error\">\n <div v-if=\"!planningLength[daySelected]\" class=\"text-center\">\n {{ t(\"No programming\") }}\n </div>\n <div v-for=\"period in periodOfDay\" v-else :key=\"period.id\">\n <template v-if=\"planning[daySelected][period.id].length\">\n <div\n :id=\"'planning-period-' + period.id\"\n class=\"fw-bold my-3 pb-2 border-bottom border-primary text-primary\"\n >\n {{ period.title }}\n </div>\n <div\n v-for=\"planningItem in planning[daySelected][period.id]\"\n :id=\"\n 'planning-occurrence-' +\n planningItem.occurrenceId +\n '' +\n planningItem.liveId\n \"\n :key=\"planningItem.occurrenceId + '' + planningItem.liveId\"\n class=\"d-flex align-items-center mb-3\"\n >\n <time :datetime=\"planningItem.startDate\" class=\"program-item-date fw-bold flex-shrink-0\">\n {{ dateDisplay(planningItem.startDate) }}\n </time>\n <router-link\n class=\"d-flex align-items-center flex-nowrap text-dark\"\n :to=\"{\n name: 'podcast',\n params: { podcastId: planningItem.podcastId },\n }\"\n :title=\"t('Episode name page', { name: planningItem.title })\"\n >\n <img\n v-lazy=\"\n useProxyImageUrl(planningItem.podcastData.imageUrl, '150')\n \"\n width=\"150\"\n height=\"150\"\n class=\"m-2 program-item-img\"\n aria-hidden=\"true\"\n alt=\"\"\n \n :title=\"\n t('Episode name image', {\n name: planningItem.podcastData.title,\n })\n \"\n />\n <div class=\"d-flex flex-column\">\n <div class=\"d-flex align-items-center mb-2\">\n <div\n v-if=\"planningItem.liveId\"\n class=\"bg-complementary text-white p-1 me-1\"\n >\n {{ t(\"Live\") }}\n </div>\n <div class=\"flex-grow-1 fw-bold\">\n {{ planningItem.podcastData.title }}\n </div>\n </div>\n </div>\n </router-link>\n </div>\n </template>\n </div>\n </template>\n </div>\n </div>\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport dayjs from \"dayjs\";\nimport utc from \"dayjs/plugin/utc\";\ndayjs.extend(utc);\nimport classicApi from \"../../../api/classicApi\";\nimport {useImageProxy} from \"../../composable/useImageProxy\";\nimport {useResizePhone} from \"../../composable/useResizePhone\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport { computed, nextTick, onMounted, ref, Ref } from \"vue\";\nimport { Canal } from \"@/stores/class/radio/canal\";\nimport { PlanningOccurrence } from \"@/stores/class/radio/recurrence\";\nimport { PlanningLive } from \"@/stores/class/radio/live\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n radio: { default: undefined, type: Object as () => Canal },\n})\n\n//Data \nconst planning: Ref<{\n [key: number]: {\n morning: Array<PlanningOccurrence | PlanningLive>;\n afternoon: Array<PlanningOccurrence | PlanningLive>;\n evening: Array<PlanningOccurrence | PlanningLive>;\n };\n}> = ref({});\nconst planningLength: Ref<{ [key: number]: number }> = ref({});\nconst daySelected = ref(dayjs().valueOf());\nconst arrayDays: Ref<Array<{\n title: string;\n date: number;\n dayOfWeek: string;\n iso: string;\n}>> = ref([]);\nconst loading = ref(true);\nconst error = ref(false);\nconst showAllDays = ref(false);\n\n\n//Composables\nconst { t } = useI18n();\nconst { isPhone } = useResizePhone();\nconst { useProxyImageUrl } = useImageProxy();\n\n//Computed\nconst startOfDay = computed(() => dayjs(daySelected.value).startOf(\"date\").toISOString());\nconst endOfDay = computed(() => dayjs(daySelected.value).endOf(\"date\").toISOString());\nconst periodOfDay = computed(() => {\n return [\n {\n id: \"morning\",\n title: t(\"Morning\"),\n end: dayjs(daySelected.value)\n .hour(14)\n .minute(0)\n .second(0)\n .millisecond(0),\n },\n {\n id: \"afternoon\",\n title: t(\"Afternoon\"),\n end: dayjs(daySelected.value)\n .hour(19)\n .minute(0)\n .second(0)\n .millisecond(0),\n },\n {\n id: \"evening\",\n title: t(\"Evening\"),\n end: dayjs(daySelected.value).endOf(\"date\"),\n },\n ];\n});\nconst displayArrayDays = computed(() => {\n if(isPhone && !showAllDays.value){\n return arrayDays.value.slice(6, 9);\n }\n return arrayDays.value;\n});\n\n\nonMounted(()=>{\n createArrayDays();\n fetchOccurrences();\n})\n\n\n//Mounted\nfunction scrollToElement(id: string) {\n const element = document.getElementById(id);\n if (element) {\n const yOffset = -110;\n const y =\n element.getBoundingClientRect().top + window.scrollY + yOffset;\n window.scrollTo({ top: y, behavior: \"smooth\" });\n }\n}\nfunction changePeriodNow() {\n const now = dayjs();\n if (!dayjs(daySelected.value).isSame(now, \"day\")) {\n changeDate(arrayDays.value[7].date);\n }\n nextTick(() => {\n if (!planningLength.value[daySelected.value]) {\n return;\n }\n const arrayOccurrences = Object.values(\n planning.value[daySelected.value],\n ).reduce((r, c) => r.concat(c), []);\n let selectedOccurrence = arrayOccurrences[0];\n for (const occ of arrayOccurrences) {\n selectedOccurrence = occ;\n if (dayjs(occ.endDate).isAfter(now)) {\n break;\n }\n }\n scrollToElement(\n \"planning-occurrence-\" +\n selectedOccurrence.occurrenceId +\n \"\" +\n selectedOccurrence.liveId,\n );\n });\n}\nfunction createArrayDays() {\n for (let index = -7; index < 3; index++) {\n const dayToAdd = dayjs().add(index, \"day\");\n if (0 === index) {\n daySelected.value = dayToAdd.valueOf();\n }\n arrayDays.value.push({\n title: dayToAdd.format(\"D/MM\"),\n dayOfWeek: dayToAdd.format(\"dddd\"),\n date: dayToAdd.valueOf(),\n iso: dayToAdd.format(\"MM-DD\"),\n });\n }\n}\nasync function fetchOccurrencesAndLives(): Promise<Array<PlanningOccurrence|PlanningLive>> {\n const params = {\n canalId: props.radio?.id,\n from:startOfDay.value,\n to:endOfDay.value,\n };\n let occurrences: Array<PlanningOccurrence | PlanningLive> =\n await classicApi.fetchData<Array<PlanningOccurrence>>({\n api: 14,\n path: \"planning/occurrence/list\",\n parameters: params,\n });\n const lives: Array<PlanningOccurrence> = await classicApi.fetchData<\n Array<PlanningOccurrence>\n >({\n api: 14,\n path: \"live/list\",\n parameters: params,\n });\n\n if (lives.length) {\n occurrences = occurrences.concat(lives);\n occurrences.sort((a, b) => {\n if (a.startDate > b.startDate) {\n return 1;\n }\n return b.startDate > a.startDate ? -1 : 0;\n });\n }\n return occurrences;\n}\n\nasync function fetchOccurrences(): Promise<void> {\n if (planning.value[daySelected.value]) {\n return;\n }\n planning.value[daySelected.value] = {\n morning: [],\n afternoon: [],\n evening: [],\n };\n planningLength.value[daySelected.value] = 0;\n loading.value = true;\n error.value = false;\n try {\n const occurrences = await fetchOccurrencesAndLives();\n let periodDayIndex = 0;\n for (const occ of occurrences) {\n if (!occ.podcastId) {\n continue;\n }\n if (\n !dayjs(occ.startDate).isBefore(periodOfDay.value[periodDayIndex].end)\n ) {\n periodDayIndex += 1;\n }\n\n switch (periodOfDay.value[periodDayIndex].id) {\n case \"morning\":\n planning.value[daySelected.value].morning.push(occ);\n break;\n case \"afternoon\":\n planning.value[daySelected.value].afternoon.push(occ);\n break;\n case \"evening\":\n planning.value[daySelected.value].evening.push(occ);\n break;\n default:\n break;\n }\n planningLength.value[daySelected.value] += 1;\n }\n } catch(e) {\n error.value = true;\n console.error(e);\n }\n loading.value = false;\n}\nfunction changeDate(date: number) {\n daySelected.value = date;\n fetchOccurrences();\n}\nfunction dateDisplay(date: Date): string {\n return dayjs(date).format(\"HH:mm\");\n}\n</script>\n<style lang=\"scss\">\n.octopus-app {\n .program-item-date {\n width: 100px;\n font-size: 1.1rem;\n\n @media (width <= 960px) {\n\t\t\tfont-size: 0.8rem;\n\t\t}\n }\n\n .program-item-img{\n @media (width <= 960px) {\n\t\t\twidth: 80px;\n height: 80px;\n margin: 0.5rem 0.5rem 0 0 !important;\n\t\t}\n }\n\n .button-date {\n display: flex;\n flex-direction: column;\n align-items: center;\n flex-grow: 1;\n padding: 0.5rem;\n\n &.bg-primary{\n color: var(--octopus-color-on-primary) !important;\n }\n\n &:hover {\n background: var(--octopus-secondary);\n }\n\n @media (width <= 960px) {\n\t\t\twidth: 80px;\n\t\t}\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioProgressBar-0XM3ZTGU.mjs","names":["_openBlock","_createElementBlock","_normalizeClass","_sfc_main"],"sources":["../src/components/misc/player/radio/RadioProgressBar.vue","../src/components/misc/player/radio/RadioProgressBar.vue"],"sourcesContent":["<template>\n <progress\n class=\"c-hand-auto mt-1\"\n min=\"0\"\n max=\"100\"\n :value=\"percentProgress\"\n :aria-label=\"t('Radio')\"\n :class=\"isAmbiance ? 'ambiance-progress' : ''\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport dayjs from \"dayjs\";\nimport { useI18n } from \"vue-i18n\";\nimport { computed, onMounted, onUnmounted, ref, Ref } from \"vue\";\n\n//Data \nconst percentInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst isAmbiance = computed(() => !playerStore.playerRadio?.podcast?.podcastId);\nconst percentProgress = computed(() => {\n if (!playerStore.playerElapsed) {\n return 0;\n }\n return playerStore.playerElapsed * 100;\n});\n\n\nonMounted(()=>handlePercentInterval())\nonUnmounted(()=>clearInterval(percentInterval.value as unknown as number))\n\n\n//Methods\nfunction handlePercentInterval(): void {\n percentInterval.value = setInterval(() => {calculatePercent();}, 1000);\n}\nfunction calculatePercent(): void {\n if (!playerStore.playerRadio?.metadata) {\n return;\n }\n const actualMilliSecondsPlayed = dayjs()\n .subtract(18, \"second\")\n .diff(dayjs(playerStore.playerRadio.metadata.startDate));\n const percentPlayed =\n actualMilliSecondsPlayed /\n (playerStore.playerRadio?.metadata.playDuration * 1000);\n playerStore.playerUpdateElapsed(\n percentPlayed,\n playerStore.playerRadio?.metadata.playDuration,\n );\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n progress {\n background-color: var(--octopus-player-progress-background-color);\n border-radius: var(--octopus-border-radius);\n accent-color: var(--octopus-player-progress-color-current);\n color: var(--octopus-player-progress-color-current);\n border: none;\n\n &::-moz-progress-bar, &::-webkit-progress-value {\n background: var(--octopus-player-progress-color-current);\n }\n }\n}\n</style>\n","<template>\n <progress\n class=\"c-hand-auto mt-1\"\n min=\"0\"\n max=\"100\"\n :value=\"percentProgress\"\n :aria-label=\"t('Radio')\"\n :class=\"isAmbiance ? 'ambiance-progress' : ''\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport dayjs from \"dayjs\";\nimport { useI18n } from \"vue-i18n\";\nimport { computed, onMounted, onUnmounted, ref, Ref } from \"vue\";\n\n//Data \nconst percentInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst isAmbiance = computed(() => !playerStore.playerRadio?.podcast?.podcastId);\nconst percentProgress = computed(() => {\n if (!playerStore.playerElapsed) {\n return 0;\n }\n return playerStore.playerElapsed * 100;\n});\n\n\nonMounted(()=>handlePercentInterval())\nonUnmounted(()=>clearInterval(percentInterval.value as unknown as number))\n\n\n//Methods\nfunction handlePercentInterval(): void {\n percentInterval.value = setInterval(() => {calculatePercent();}, 1000);\n}\nfunction calculatePercent(): void {\n if (!playerStore.playerRadio?.metadata) {\n return;\n }\n const actualMilliSecondsPlayed = dayjs()\n .subtract(18, \"second\")\n .diff(dayjs(playerStore.playerRadio.metadata.startDate));\n const percentPlayed =\n actualMilliSecondsPlayed /\n (playerStore.playerRadio?.metadata.playDuration * 1000);\n playerStore.playerUpdateElapsed(\n percentPlayed,\n playerStore.playerRadio?.metadata.playDuration,\n );\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n progress {\n background-color: var(--octopus-player-progress-background-color);\n border-radius: var(--octopus-border-radius);\n accent-color: var(--octopus-player-progress-color-current);\n color: var(--octopus-player-progress-color-current);\n border: none;\n\n &::-moz-progress-bar, &::-webkit-progress-value {\n background: var(--octopus-player-progress-color-current);\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;EAkBA,MAAM,kBAAkE,IAAI,KAAA,CAAS;EAGrF,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,cAAc,eAAe;EAInC,MAAM,aAAa,eAAe,CAAC,YAAY,aAAa,SAAS,SAAS;EAC9E,MAAM,kBAAkB,eAAe;GACrC,IAAI,CAAC,YAAY,eACf,OAAO;GAET,OAAO,YAAY,gBAAgB;EACrC,CAAC;EAGD,gBAAc,sBAAsB,CAAC;EACrC,kBAAgB,cAAc,gBAAgB,KAA0B,CAAC;EAIzE,SAAS,wBAA8B;GACrC,gBAAgB,QAAQ,kBAAkB;IAAC,iBAAiB;GAAE,GAAG,GAAI;EACvE;EACA,SAAS,mBAAyB;GAChC,IAAI,CAAC,YAAY,aAAa,UAC5B;GAKF,MAAM,gBAH2B,MAAM,CAAA,CACpC,SAAS,IAAI,QAAQ,CAAA,CACrB,KAAK,MAAM,YAAY,YAAY,SAAS,SAAS,CAEtD,KACC,YAAY,aAAa,SAAS,eAAe;GAClD,YAAY,oBACZ,eACA,YAAY,aAAa,SAAS,YACpC;EACF;;;;;;;;;;;;;;;;;;;;;CCxDE,OAAAA,UAAA,GAAAC,mBAOE,YAAA;EANA,OAAKC,eAAA,CAAC,oBAKE,OAAA,aAAU,sBAAA,EAAA,CAAA;EAJlB,KAAI;EACJ,KAAI;EACH,OAAO,OAAA;EACP,cAAY,OAAA,EAAC,OAAA"}
@@ -1,4 +1,4 @@
1
- import { n as e } from "./PlayerStore-CKprkxa0.mjs";
1
+ import { n as e } from "./PlayerStore-DggKki80.mjs";
2
2
  import { t } from "./_plugin-vue_export-helper-B3ysoDQm.mjs";
3
3
  import { computed as n, createElementBlock as r, defineComponent as i, normalizeClass as a, onMounted as o, onUnmounted as s, openBlock as c, ref as l, unref as u } from "vue";
4
4
  import { useI18n as d } from "vue-i18n";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioProgressBar-oyeS56mV.mjs","names":["_openBlock","_createElementBlock","_normalizeClass","_sfc_main"],"sources":["../src/components/misc/player/radio/RadioProgressBar.vue","../src/components/misc/player/radio/RadioProgressBar.vue"],"sourcesContent":["<template>\n <progress\n class=\"c-hand-auto mt-1\"\n min=\"0\"\n max=\"100\"\n :value=\"percentProgress\"\n :aria-label=\"t('Radio')\"\n :class=\"isAmbiance ? 'ambiance-progress' : ''\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport dayjs from \"dayjs\";\nimport { useI18n } from \"vue-i18n\";\nimport { computed, onMounted, onUnmounted, ref, Ref } from \"vue\";\n\n//Data \nconst percentInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst isAmbiance = computed(() => !playerStore.playerRadio?.podcast?.podcastId);\nconst percentProgress = computed(() => {\n if (!playerStore.playerElapsed) {\n return 0;\n }\n return playerStore.playerElapsed * 100;\n});\n\n\nonMounted(()=>handlePercentInterval())\nonUnmounted(()=>clearInterval(percentInterval.value as unknown as number))\n\n\n//Methods\nfunction handlePercentInterval(): void {\n percentInterval.value = setInterval(() => {calculatePercent();}, 1000);\n}\nfunction calculatePercent(): void {\n if (!playerStore.playerRadio?.metadata) {\n return;\n }\n const actualMilliSecondsPlayed = dayjs()\n .subtract(18, \"second\")\n .diff(dayjs(playerStore.playerRadio.metadata.startDate));\n const percentPlayed =\n actualMilliSecondsPlayed /\n (playerStore.playerRadio?.metadata.playDuration * 1000);\n playerStore.playerUpdateElapsed(\n percentPlayed,\n playerStore.playerRadio?.metadata.playDuration,\n );\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n progress {\n background-color: var(--octopus-player-progress-background-color);\n border-radius: var(--octopus-border-radius);\n accent-color: var(--octopus-player-progress-color-current);\n color: var(--octopus-player-progress-color-current);\n border: none;\n\n &::-moz-progress-bar, &::-webkit-progress-value {\n background: var(--octopus-player-progress-color-current);\n }\n }\n}\n</style>\n","<template>\n <progress\n class=\"c-hand-auto mt-1\"\n min=\"0\"\n max=\"100\"\n :value=\"percentProgress\"\n :aria-label=\"t('Radio')\"\n :class=\"isAmbiance ? 'ambiance-progress' : ''\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport dayjs from \"dayjs\";\nimport { useI18n } from \"vue-i18n\";\nimport { computed, onMounted, onUnmounted, ref, Ref } from \"vue\";\n\n//Data \nconst percentInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst isAmbiance = computed(() => !playerStore.playerRadio?.podcast?.podcastId);\nconst percentProgress = computed(() => {\n if (!playerStore.playerElapsed) {\n return 0;\n }\n return playerStore.playerElapsed * 100;\n});\n\n\nonMounted(()=>handlePercentInterval())\nonUnmounted(()=>clearInterval(percentInterval.value as unknown as number))\n\n\n//Methods\nfunction handlePercentInterval(): void {\n percentInterval.value = setInterval(() => {calculatePercent();}, 1000);\n}\nfunction calculatePercent(): void {\n if (!playerStore.playerRadio?.metadata) {\n return;\n }\n const actualMilliSecondsPlayed = dayjs()\n .subtract(18, \"second\")\n .diff(dayjs(playerStore.playerRadio.metadata.startDate));\n const percentPlayed =\n actualMilliSecondsPlayed /\n (playerStore.playerRadio?.metadata.playDuration * 1000);\n playerStore.playerUpdateElapsed(\n percentPlayed,\n playerStore.playerRadio?.metadata.playDuration,\n );\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n progress {\n background-color: var(--octopus-player-progress-background-color);\n border-radius: var(--octopus-border-radius);\n accent-color: var(--octopus-player-progress-color-current);\n color: var(--octopus-player-progress-color-current);\n border: none;\n\n &::-moz-progress-bar, &::-webkit-progress-value {\n background: var(--octopus-player-progress-color-current);\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;EAkBA,MAAM,kBAAkE,IAAI,KAAA,CAAS;EAGrF,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,cAAc,eAAe;EAInC,MAAM,aAAa,eAAe,CAAC,YAAY,aAAa,SAAS,SAAS;EAC9E,MAAM,kBAAkB,eAAe;GACrC,IAAI,CAAC,YAAY,eACf,OAAO;GAET,OAAO,YAAY,gBAAgB;EACrC,CAAC;EAGD,gBAAc,sBAAsB,CAAC;EACrC,kBAAgB,cAAc,gBAAgB,KAA0B,CAAC;EAIzE,SAAS,wBAA8B;GACrC,gBAAgB,QAAQ,kBAAkB;IAAC,iBAAiB;GAAE,GAAG,GAAI;EACvE;EACA,SAAS,mBAAyB;GAChC,IAAI,CAAC,YAAY,aAAa,UAC5B;GAKF,MAAM,gBAH2B,MAAM,CAAA,CACpC,SAAS,IAAI,QAAQ,CAAA,CACrB,KAAK,MAAM,YAAY,YAAY,SAAS,SAAS,CAEtD,KACC,YAAY,aAAa,SAAS,eAAe;GAClD,YAAY,oBACZ,eACA,YAAY,aAAa,SAAS,YACpC;EACF;;;;;;;;;;;;;;;;;;;;;CCxDE,OAAAA,UAAA,GAAAC,mBAOE,YAAA;EANA,OAAKC,eAAA,CAAC,oBAKE,OAAA,aAAU,sBAAA,EAAA,CAAA;EAJlB,KAAI;EACJ,KAAI;EACH,OAAO,OAAA;EACP,cAAY,OAAA,EAAC,OAAA"}
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./ClassicLoading-CXfMjpyl.mjs";
2
- import { A as t } from "./classicApi-pmODlqv5.mjs";
2
+ import { j as t } from "./classicApi-CGipMqf7.mjs";
3
3
  import { t as n } from "./ClassicModal-Dl2IdzXZ.mjs";
4
4
  import { t as r } from "./keys-CV5SBM1i.mjs";
5
5
  import { computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, defineComponent as l, inject as u, openBlock as d, ref as f, renderSlot as p, toDisplayString as m, unref as h, useTemplateRef as g, withCtx as _ } from "vue";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecaptchaModal-DFlFQcHs.mjs","names":["_openBlock","_createBlock","_withCtx","_createElementVNode","_toDisplayString","_renderSlot","_createElementBlock","_createCommentVNode","_sfc_main"],"sources":["../src/components/display/comments/modal/RecaptchaModal.vue","../src/components/display/comments/modal/RecaptchaModal.vue"],"sourcesContent":["<template>\n <ClassicModal\n :id-modal=\"idModal\"\n :title-modal=\"titleModal\"\n :closable=\"false\"\n @close=\"closePopup\"\n >\n <template #body>\n <div class=\"text-center text-danger\">{{ errorRecaptchaText }}</div>\n <slot v-if=\"!isInTreatment\" name=\"form\" />\n <ClassicLoading\n v-else\n :loading-text=\"\n isInTreatment && !errorText && !successText\n ? t('Loading content ...')\n : undefined\n \"\n :error-text=\"errorText\"\n />\n <div v-if=\"successText\" class=\"text-center h3\">{{ successText }}</div>\n </template>\n <template #footer>\n <button class=\"btn m-1\" @click=\"closePopup\">\n {{ t(\"Close\") }}\n </button>\n <vue-recaptcha\n v-if=\"!isVerify\"\n ref=\"invisibleRecaptcha\"\n :load-recaptcha-script=\"true\"\n size=\"invisible\"\n sitekey=\"6LfyP_4ZAAAAAPODj8nov2LvosIwcX0GYeBSungh\"\n @verify=\"handleSuccess\"\n @expired=\"handleError\"\n />\n <button\n v-if=\"!errorText && !successText\"\n class=\"btn btn-primary m-1\"\n :disabled=\"disableValidate || isInTreatment\"\n @click=\"submit\"\n >\n {{ t(\"Yes\") }}\n </button>\n </template>\n </ClassicModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { state } from \"../../../../stores/ParamSdkStore\";\nimport ClassicLoading from \"../../../form/ClassicLoading.vue\";\nimport ClassicModal from \"../../../misc/modal/ClassicModal.vue\";\nimport { CHECK_TOKEN_KEY } from \"../../../composable/keys\";\nimport { VueRecaptcha } from \"vue-recaptcha\";\nimport { computed, inject, ref, useTemplateRef } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \ndefineProps({\n idModal: { default: undefined, type: String },\n titleModal: { default: undefined, type: String },\n disableValidate: { default: false, type: Boolean },\n errorText: { default: undefined, type: String },\n successText: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"close\", \"validate\"]);\n\n//Data \nconst sendError = ref(false);\nconst isVerify = ref(false);\nconst isInTreatment = ref(false);\nconst captchRef = useTemplateRef('invisibleRecaptcha');\n\n\n//Composables\nconst { t } = useI18n();\n// checkToken is not defined in the SDK: it is resolved at runtime from the\n// consuming app's globally provided implementation (app.provide()), and\n// defaults to always-verified when the app hasn't provided one.\nconst checkToken = inject(CHECK_TOKEN_KEY, async () => true);\n\n//Computed\nconst errorRecaptchaText = computed(() =>{\n if (isCaptchaTest.value) {\n return t(\"Recaptcha not active\");\n }\n return sendError.value ? t(\"Recaptcha error\") : \"\";\n});\nconst isCaptchaTest = computed(() => state.generalParameters.isCaptchaTest as boolean);\n\n\n//Methods\nasync function handleSuccess(token: string) {\n isVerify.value = await checkToken(token);\n sendAction();\n}\nfunction handleError() {\n isVerify.value = false;\n sendError.value = true;\n}\nasync function submit(): Promise<void> {\n isInTreatment.value = true;\n if (!isVerify.value && !isCaptchaTest.value) {\n (captchRef?.value as InstanceType<typeof VueRecaptcha>).execute();\n }\n sendAction();\n}\nfunction closePopup(): void {\n emit(\"close\");\n}\nfunction sendAction(): void {\n emit(\"validate\");\n}\n</script>\n","<template>\n <ClassicModal\n :id-modal=\"idModal\"\n :title-modal=\"titleModal\"\n :closable=\"false\"\n @close=\"closePopup\"\n >\n <template #body>\n <div class=\"text-center text-danger\">{{ errorRecaptchaText }}</div>\n <slot v-if=\"!isInTreatment\" name=\"form\" />\n <ClassicLoading\n v-else\n :loading-text=\"\n isInTreatment && !errorText && !successText\n ? t('Loading content ...')\n : undefined\n \"\n :error-text=\"errorText\"\n />\n <div v-if=\"successText\" class=\"text-center h3\">{{ successText }}</div>\n </template>\n <template #footer>\n <button class=\"btn m-1\" @click=\"closePopup\">\n {{ t(\"Close\") }}\n </button>\n <vue-recaptcha\n v-if=\"!isVerify\"\n ref=\"invisibleRecaptcha\"\n :load-recaptcha-script=\"true\"\n size=\"invisible\"\n sitekey=\"6LfyP_4ZAAAAAPODj8nov2LvosIwcX0GYeBSungh\"\n @verify=\"handleSuccess\"\n @expired=\"handleError\"\n />\n <button\n v-if=\"!errorText && !successText\"\n class=\"btn btn-primary m-1\"\n :disabled=\"disableValidate || isInTreatment\"\n @click=\"submit\"\n >\n {{ t(\"Yes\") }}\n </button>\n </template>\n </ClassicModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { state } from \"../../../../stores/ParamSdkStore\";\nimport ClassicLoading from \"../../../form/ClassicLoading.vue\";\nimport ClassicModal from \"../../../misc/modal/ClassicModal.vue\";\nimport { CHECK_TOKEN_KEY } from \"../../../composable/keys\";\nimport { VueRecaptcha } from \"vue-recaptcha\";\nimport { computed, inject, ref, useTemplateRef } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \ndefineProps({\n idModal: { default: undefined, type: String },\n titleModal: { default: undefined, type: String },\n disableValidate: { default: false, type: Boolean },\n errorText: { default: undefined, type: String },\n successText: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"close\", \"validate\"]);\n\n//Data \nconst sendError = ref(false);\nconst isVerify = ref(false);\nconst isInTreatment = ref(false);\nconst captchRef = useTemplateRef('invisibleRecaptcha');\n\n\n//Composables\nconst { t } = useI18n();\n// checkToken is not defined in the SDK: it is resolved at runtime from the\n// consuming app's globally provided implementation (app.provide()), and\n// defaults to always-verified when the app hasn't provided one.\nconst checkToken = inject(CHECK_TOKEN_KEY, async () => true);\n\n//Computed\nconst errorRecaptchaText = computed(() =>{\n if (isCaptchaTest.value) {\n return t(\"Recaptcha not active\");\n }\n return sendError.value ? t(\"Recaptcha error\") : \"\";\n});\nconst isCaptchaTest = computed(() => state.generalParameters.isCaptchaTest as boolean);\n\n\n//Methods\nasync function handleSuccess(token: string) {\n isVerify.value = await checkToken(token);\n sendAction();\n}\nfunction handleError() {\n isVerify.value = false;\n sendError.value = true;\n}\nasync function submit(): Promise<void> {\n isInTreatment.value = true;\n if (!isVerify.value && !isCaptchaTest.value) {\n (captchRef?.value as InstanceType<typeof VueRecaptcha>).execute();\n }\n sendAction();\n}\nfunction closePopup(): void {\n emit(\"close\");\n}\nfunction sendAction(): void {\n emit(\"validate\");\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiEA,MAAM,OAAO;EAGb,MAAM,YAAY,IAAI,KAAK;EAC3B,MAAM,WAAW,IAAI,KAAK;EAC1B,MAAM,gBAAgB,IAAI,KAAK;EAC/B,MAAM,YAAY,eAAe,oBAAoB;EAIrD,MAAM,EAAE,MAAM,QAAQ;EAItB,MAAM,aAAa,OAAO,iBAAiB,YAAY,IAAI;EAG3D,MAAM,qBAAqB,eAAc;GACvC,IAAI,cAAc,OAChB,OAAO,EAAE,sBAAsB;GAEjC,OAAO,UAAU,QAAQ,EAAE,iBAAiB,IAAI;EAClD,CAAC;EACD,MAAM,gBAAgB,eAAe,MAAM,kBAAkB,aAAwB;EAIrF,eAAe,cAAc,OAAe;GAC1C,SAAS,QAAQ,MAAM,WAAW,KAAK;GACvC,WAAW;EACb;EACA,SAAS,cAAc;GACrB,SAAS,QAAQ;GACjB,UAAU,QAAQ;EACpB;EACA,eAAe,SAAwB;GACrC,cAAc,QAAQ;GACtB,IAAI,CAAC,SAAS,SAAS,CAAC,cAAc,OACpC,CAAC,WAAW,MAAA,CAA4C,QAAQ;GAElE,WAAW;EACb;EACA,SAAS,aAAmB;GAC1B,KAAK,OAAO;EACd;EACA,SAAS,aAAmB;GAC1B,KAAK,UAAU;EACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxGW,IAAA,aAAA,EAAA,OAAM,0BAAyB;;;CAWZ,OAAM;;;;CAlBlC,OAAAA,UAAA,GAAAC,YA0Ce,OAAA,iBAAA;EAzCZ,YAAU,OAAA;EACV,eAAa,OAAA;EACb,UAAU;EACV,SAAO,OAAA;;EAEG,MAAIC,cACsD;GAAnEC,mBAAmE,OAAnE,YAAmEC,gBAA3B,OAAA,kBAAkB,GAAA,CAAA;GAC7C,CAAA,OAAA,gBAAbC,WAA0C,KAAA,QAAA,QAAA,CAAA,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA,KAC1CL,UAAA,GAAAC,YAQE,OAAA,mBAAA;;IANC,gBAAyB,OAAA,iBAAa,CAAK,OAAA,aAAS,CAAK,OAAA,cAA0B,OAAA,EAAC,qBAAA,IAAsC,KAAA;IAK1H,cAAY,OAAA;;GAEJ,OAAA,eAAXD,UAAA,GAAAM,mBAAsE,OAAtE,YAAsEF,gBAApB,OAAA,WAAW,GAAA,CAAA,KAAAG,mBAAA,QAAA,IAAA;;EAEpD,QAAML,cAGN;GAFTC,mBAES,UAAA;IAFD,OAAM;IAAW,SAAO,OAAA;GAC3B,GAAAC,gBAAA,OAAA,EAAC,OAAA,CAAA,GAAA,CAAA;GAGG,CAAA,OAAA,YADTJ,UAAA,GAAAC,YAQE,OAAA,iBAAA;;IANA,KAAI;IACH,yBAAuB;IACxB,MAAK;IACL,SAAQ;IACP,UAAQ,OAAA;IACR,WAAS,OAAA;;GAGH,CAAA,OAAA,aAAS,CAAK,OAAA,eADvBD,UAAA,GAAAM,mBAOS,UAAA;;IALP,OAAM;IACL,UAAU,OAAA,mBAAmB,OAAA;IAC7B,SAAO,OAAA;GAEL,GAAAF,gBAAA,OAAA,EAAC,KAAA,CAAA,GAAA,GAAA,UAAA,KAAAG,mBAAA,QAAA,IAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecaptchaModal-iLQ4UYOL.mjs","names":["_openBlock","_createBlock","_withCtx","_createElementVNode","_toDisplayString","_renderSlot","_createElementBlock","_createCommentVNode","_sfc_main"],"sources":["../src/components/display/comments/modal/RecaptchaModal.vue","../src/components/display/comments/modal/RecaptchaModal.vue"],"sourcesContent":["<template>\n <ClassicModal\n :id-modal=\"idModal\"\n :title-modal=\"titleModal\"\n :closable=\"false\"\n @close=\"closePopup\"\n >\n <template #body>\n <div class=\"text-center text-danger\">{{ errorRecaptchaText }}</div>\n <slot v-if=\"!isInTreatment\" name=\"form\" />\n <ClassicLoading\n v-else\n :loading-text=\"\n isInTreatment && !errorText && !successText\n ? t('Loading content ...')\n : undefined\n \"\n :error-text=\"errorText\"\n />\n <div v-if=\"successText\" class=\"text-center h3\">{{ successText }}</div>\n </template>\n <template #footer>\n <button class=\"btn m-1\" @click=\"closePopup\">\n {{ t(\"Close\") }}\n </button>\n <vue-recaptcha\n v-if=\"!isVerify\"\n ref=\"invisibleRecaptcha\"\n :load-recaptcha-script=\"true\"\n size=\"invisible\"\n sitekey=\"6LfyP_4ZAAAAAPODj8nov2LvosIwcX0GYeBSungh\"\n @verify=\"handleSuccess\"\n @expired=\"handleError\"\n />\n <button\n v-if=\"!errorText && !successText\"\n class=\"btn btn-primary m-1\"\n :disabled=\"disableValidate || isInTreatment\"\n @click=\"submit\"\n >\n {{ t(\"Yes\") }}\n </button>\n </template>\n </ClassicModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { state } from \"../../../../stores/ParamSdkStore\";\nimport ClassicLoading from \"../../../form/ClassicLoading.vue\";\nimport ClassicModal from \"../../../misc/modal/ClassicModal.vue\";\nimport { CHECK_TOKEN_KEY } from \"../../../composable/keys\";\nimport { VueRecaptcha } from \"vue-recaptcha\";\nimport { computed, inject, ref, useTemplateRef } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \ndefineProps({\n idModal: { default: undefined, type: String },\n titleModal: { default: undefined, type: String },\n disableValidate: { default: false, type: Boolean },\n errorText: { default: undefined, type: String },\n successText: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"close\", \"validate\"]);\n\n//Data \nconst sendError = ref(false);\nconst isVerify = ref(false);\nconst isInTreatment = ref(false);\nconst captchRef = useTemplateRef('invisibleRecaptcha');\n\n\n//Composables\nconst { t } = useI18n();\n// checkToken is not defined in the SDK: it is resolved at runtime from the\n// consuming app's globally provided implementation (app.provide()), and\n// defaults to always-verified when the app hasn't provided one.\nconst checkToken = inject(CHECK_TOKEN_KEY, async () => true);\n\n//Computed\nconst errorRecaptchaText = computed(() =>{\n if (isCaptchaTest.value) {\n return t(\"Recaptcha not active\");\n }\n return sendError.value ? t(\"Recaptcha error\") : \"\";\n});\nconst isCaptchaTest = computed(() => state.generalParameters.isCaptchaTest as boolean);\n\n\n//Methods\nasync function handleSuccess(token: string) {\n isVerify.value = await checkToken(token);\n sendAction();\n}\nfunction handleError() {\n isVerify.value = false;\n sendError.value = true;\n}\nasync function submit(): Promise<void> {\n isInTreatment.value = true;\n if (!isVerify.value && !isCaptchaTest.value) {\n (captchRef?.value as InstanceType<typeof VueRecaptcha>).execute();\n }\n sendAction();\n}\nfunction closePopup(): void {\n emit(\"close\");\n}\nfunction sendAction(): void {\n emit(\"validate\");\n}\n</script>\n","<template>\n <ClassicModal\n :id-modal=\"idModal\"\n :title-modal=\"titleModal\"\n :closable=\"false\"\n @close=\"closePopup\"\n >\n <template #body>\n <div class=\"text-center text-danger\">{{ errorRecaptchaText }}</div>\n <slot v-if=\"!isInTreatment\" name=\"form\" />\n <ClassicLoading\n v-else\n :loading-text=\"\n isInTreatment && !errorText && !successText\n ? t('Loading content ...')\n : undefined\n \"\n :error-text=\"errorText\"\n />\n <div v-if=\"successText\" class=\"text-center h3\">{{ successText }}</div>\n </template>\n <template #footer>\n <button class=\"btn m-1\" @click=\"closePopup\">\n {{ t(\"Close\") }}\n </button>\n <vue-recaptcha\n v-if=\"!isVerify\"\n ref=\"invisibleRecaptcha\"\n :load-recaptcha-script=\"true\"\n size=\"invisible\"\n sitekey=\"6LfyP_4ZAAAAAPODj8nov2LvosIwcX0GYeBSungh\"\n @verify=\"handleSuccess\"\n @expired=\"handleError\"\n />\n <button\n v-if=\"!errorText && !successText\"\n class=\"btn btn-primary m-1\"\n :disabled=\"disableValidate || isInTreatment\"\n @click=\"submit\"\n >\n {{ t(\"Yes\") }}\n </button>\n </template>\n </ClassicModal>\n</template>\n\n<script setup lang=\"ts\">\nimport { state } from \"../../../../stores/ParamSdkStore\";\nimport ClassicLoading from \"../../../form/ClassicLoading.vue\";\nimport ClassicModal from \"../../../misc/modal/ClassicModal.vue\";\nimport { CHECK_TOKEN_KEY } from \"../../../composable/keys\";\nimport { VueRecaptcha } from \"vue-recaptcha\";\nimport { computed, inject, ref, useTemplateRef } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \ndefineProps({\n idModal: { default: undefined, type: String },\n titleModal: { default: undefined, type: String },\n disableValidate: { default: false, type: Boolean },\n errorText: { default: undefined, type: String },\n successText: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"close\", \"validate\"]);\n\n//Data \nconst sendError = ref(false);\nconst isVerify = ref(false);\nconst isInTreatment = ref(false);\nconst captchRef = useTemplateRef('invisibleRecaptcha');\n\n\n//Composables\nconst { t } = useI18n();\n// checkToken is not defined in the SDK: it is resolved at runtime from the\n// consuming app's globally provided implementation (app.provide()), and\n// defaults to always-verified when the app hasn't provided one.\nconst checkToken = inject(CHECK_TOKEN_KEY, async () => true);\n\n//Computed\nconst errorRecaptchaText = computed(() =>{\n if (isCaptchaTest.value) {\n return t(\"Recaptcha not active\");\n }\n return sendError.value ? t(\"Recaptcha error\") : \"\";\n});\nconst isCaptchaTest = computed(() => state.generalParameters.isCaptchaTest as boolean);\n\n\n//Methods\nasync function handleSuccess(token: string) {\n isVerify.value = await checkToken(token);\n sendAction();\n}\nfunction handleError() {\n isVerify.value = false;\n sendError.value = true;\n}\nasync function submit(): Promise<void> {\n isInTreatment.value = true;\n if (!isVerify.value && !isCaptchaTest.value) {\n (captchRef?.value as InstanceType<typeof VueRecaptcha>).execute();\n }\n sendAction();\n}\nfunction closePopup(): void {\n emit(\"close\");\n}\nfunction sendAction(): void {\n emit(\"validate\");\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiEA,MAAM,OAAO;EAGb,MAAM,YAAY,IAAI,KAAK;EAC3B,MAAM,WAAW,IAAI,KAAK;EAC1B,MAAM,gBAAgB,IAAI,KAAK;EAC/B,MAAM,YAAY,eAAe,oBAAoB;EAIrD,MAAM,EAAE,MAAM,QAAQ;EAItB,MAAM,aAAa,OAAO,iBAAiB,YAAY,IAAI;EAG3D,MAAM,qBAAqB,eAAc;GACvC,IAAI,cAAc,OAChB,OAAO,EAAE,sBAAsB;GAEjC,OAAO,UAAU,QAAQ,EAAE,iBAAiB,IAAI;EAClD,CAAC;EACD,MAAM,gBAAgB,eAAe,MAAM,kBAAkB,aAAwB;EAIrF,eAAe,cAAc,OAAe;GAC1C,SAAS,QAAQ,MAAM,WAAW,KAAK;GACvC,WAAW;EACb;EACA,SAAS,cAAc;GACrB,SAAS,QAAQ;GACjB,UAAU,QAAQ;EACpB;EACA,eAAe,SAAwB;GACrC,cAAc,QAAQ;GACtB,IAAI,CAAC,SAAS,SAAS,CAAC,cAAc,OACpC,CAAC,WAAW,MAAA,CAA4C,QAAQ;GAElE,WAAW;EACb;EACA,SAAS,aAAmB;GAC1B,KAAK,OAAO;EACd;EACA,SAAS,aAAmB;GAC1B,KAAK,UAAU;EACjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxGW,IAAA,aAAA,EAAA,OAAM,0BAAyB;;;CAWZ,OAAM;;;;CAlBlC,OAAAA,UAAA,GAAAC,YA0Ce,OAAA,iBAAA;EAzCZ,YAAU,OAAA;EACV,eAAa,OAAA;EACb,UAAU;EACV,SAAO,OAAA;;EAEG,MAAIC,cACsD;GAAnEC,mBAAmE,OAAnE,YAAmEC,gBAA3B,OAAA,kBAAkB,GAAA,CAAA;GAC7C,CAAA,OAAA,gBAAbC,WAA0C,KAAA,QAAA,QAAA,CAAA,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA,KAC1CL,UAAA,GAAAC,YAQE,OAAA,mBAAA;;IANC,gBAAyB,OAAA,iBAAa,CAAK,OAAA,aAAS,CAAK,OAAA,cAA0B,OAAA,EAAC,qBAAA,IAAsC,KAAA;IAK1H,cAAY,OAAA;;GAEJ,OAAA,eAAXD,UAAA,GAAAM,mBAAsE,OAAtE,YAAsEF,gBAApB,OAAA,WAAW,GAAA,CAAA,KAAAG,mBAAA,QAAA,IAAA;;EAEpD,QAAML,cAGN;GAFTC,mBAES,UAAA;IAFD,OAAM;IAAW,SAAO,OAAA;GAC3B,GAAAC,gBAAA,OAAA,EAAC,OAAA,CAAA,GAAA,CAAA;GAGG,CAAA,OAAA,YADTJ,UAAA,GAAAC,YAQE,OAAA,iBAAA;;IANA,KAAI;IACH,yBAAuB;IACxB,MAAK;IACL,SAAQ;IACP,UAAQ,OAAA;IACR,WAAS,OAAA;;GAGH,CAAA,OAAA,aAAS,CAAK,OAAA,eADvBD,UAAA,GAAAM,mBAOS,UAAA;;IALP,OAAM;IACL,UAAU,OAAA,mBAAmB,OAAA;IAC7B,SAAO,OAAA;GAEL,GAAAF,gBAAA,OAAA,EAAC,KAAA,CAAA,GAAA,GAAA,UAAA,KAAAG,mBAAA,QAAA,IAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportAbuseModal-BaPt2DLK.mjs","names":["classicApi","Constants","_openBlock","_createBlock","_withCtx","_createCommentVNode","_createVNode","_sfc_main"],"sources":["../src/components/display/comments/modal/ReportAbuseModal.vue","../src/components/display/comments/modal/ReportAbuseModal.vue"],"sourcesContent":["<template>\n <RecaptchaModal\n id-modal=\"report-abuse-modal\"\n :title-modal=\"t('Report abuse')\"\n :disable-validate=\"errorName || abuseDescriptionError\"\n :error-text=\"errorSendAbuse\"\n :success-text=\"successText\"\n @close=\"emit('close')\"\n @validate=\"reportAbuse\"\n >\n <template #form>\n <ClassicInputText\n v-if=\"!commentStore.commentUser?.name\"\n v-model:text-init=\"name\"\n v-model:error-variable=\"errorName\"\n input-id=\"comment-user-name\"\n focus\n :label=\"t('Let\\'s get acquainted :')\"\n :max-length=\"Constants.MAX_COMMENT_NAME\"\n :placeholder=\"t('Your name')\"\n autocomplete-type=\"name\"\n />\n <ClassicInputText\n v-model:text-init=\"abuseDescription\"\n v-model:error-variable=\"abuseDescriptionError\"\n :is-textarea=\"true\"\n input-id=\"abuse-description\"\n :label=\"t('Describe the reason for the report')\"\n :max-length=\"Constants.MAX_COMMENT\"\n :focus=\"true\"\n />\n </template>\n </RecaptchaModal>\n</template>\n\n<script setup lang=\"ts\">\nimport Constants from \"../../../../../public/config\";\nimport ClassicInputText from \"../../../form/ClassicInputText.vue\";\nimport RecaptchaModal from \"./RecaptchaModal.vue\";\nimport { Ref, ref } from \"vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport classicApi from \"../../../../api/classicApi\";\nimport {\n CommentAbuseInfo,\n CommentPodcast,\n} from \"@/stores/class/general/comment\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n comment: { default: undefined, type: Object as () => CommentPodcast },\n})\n\n//Emits\nconst emit = defineEmits([\"close\", \"update:comment\"]);\n\n//Data \nconst errorName = ref(false);\nconst name: Ref<string | undefined> = ref(undefined);\nconst abuseDescription: Ref<string | undefined> = ref(undefined);\nconst abuseDescriptionError = ref(true);\nconst errorSendAbuse: Ref<string | undefined> = ref(undefined);\nconst successText: Ref<string | undefined> = ref(undefined);\n\n\n//Composables\nconst { t } = useI18n();\nconst commentStore = useCommentStore();\n\n//Methods\nasync function reportAbuse(): Promise<void> {\n if (!commentStore.commentUser?.name) {\n commentStore.setCommentUser(name.value ?? \"\");\n }\n try {\n const abuseObject = {\n commentId: props.comment?.commentId,\n description: abuseDescription.value,\n uuid: commentStore.commentUser?.uuid,\n };\n const commentAbuseInfo = await classicApi.postData<CommentAbuseInfo>({\n api: 2,\n path: \"abuse/\",\n dataToSend: abuseObject,\n });\n emit(\"update:comment\", {\n ...props.comment,\n ...{ abuse: commentAbuseInfo.abuseCount },\n });\n successText.value = t(\"Thank you for reporting abuse\");\n } catch {\n errorSendAbuse.value = t(\n \"Error occurs while post your comment...\",\n );\n }\n}\n</script>\n","<template>\n <RecaptchaModal\n id-modal=\"report-abuse-modal\"\n :title-modal=\"t('Report abuse')\"\n :disable-validate=\"errorName || abuseDescriptionError\"\n :error-text=\"errorSendAbuse\"\n :success-text=\"successText\"\n @close=\"emit('close')\"\n @validate=\"reportAbuse\"\n >\n <template #form>\n <ClassicInputText\n v-if=\"!commentStore.commentUser?.name\"\n v-model:text-init=\"name\"\n v-model:error-variable=\"errorName\"\n input-id=\"comment-user-name\"\n focus\n :label=\"t('Let\\'s get acquainted :')\"\n :max-length=\"Constants.MAX_COMMENT_NAME\"\n :placeholder=\"t('Your name')\"\n autocomplete-type=\"name\"\n />\n <ClassicInputText\n v-model:text-init=\"abuseDescription\"\n v-model:error-variable=\"abuseDescriptionError\"\n :is-textarea=\"true\"\n input-id=\"abuse-description\"\n :label=\"t('Describe the reason for the report')\"\n :max-length=\"Constants.MAX_COMMENT\"\n :focus=\"true\"\n />\n </template>\n </RecaptchaModal>\n</template>\n\n<script setup lang=\"ts\">\nimport Constants from \"../../../../../public/config\";\nimport ClassicInputText from \"../../../form/ClassicInputText.vue\";\nimport RecaptchaModal from \"./RecaptchaModal.vue\";\nimport { Ref, ref } from \"vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport classicApi from \"../../../../api/classicApi\";\nimport {\n CommentAbuseInfo,\n CommentPodcast,\n} from \"@/stores/class/general/comment\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n comment: { default: undefined, type: Object as () => CommentPodcast },\n})\n\n//Emits\nconst emit = defineEmits([\"close\", \"update:comment\"]);\n\n//Data \nconst errorName = ref(false);\nconst name: Ref<string | undefined> = ref(undefined);\nconst abuseDescription: Ref<string | undefined> = ref(undefined);\nconst abuseDescriptionError = ref(true);\nconst errorSendAbuse: Ref<string | undefined> = ref(undefined);\nconst successText: Ref<string | undefined> = ref(undefined);\n\n\n//Composables\nconst { t } = useI18n();\nconst commentStore = useCommentStore();\n\n//Methods\nasync function reportAbuse(): Promise<void> {\n if (!commentStore.commentUser?.name) {\n commentStore.setCommentUser(name.value ?? \"\");\n }\n try {\n const abuseObject = {\n commentId: props.comment?.commentId,\n description: abuseDescription.value,\n uuid: commentStore.commentUser?.uuid,\n };\n const commentAbuseInfo = await classicApi.postData<CommentAbuseInfo>({\n api: 2,\n path: \"abuse/\",\n dataToSend: abuseObject,\n });\n emit(\"update:comment\", {\n ...props.comment,\n ...{ abuse: commentAbuseInfo.abuseCount },\n });\n successText.value = t(\"Thank you for reporting abuse\");\n } catch {\n errorSendAbuse.value = t(\n \"Error occurs while post your comment...\",\n );\n }\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAkDA,MAAM,QAAQ;EAKd,MAAM,OAAO;EAGb,MAAM,YAAY,IAAI,KAAK;EAC3B,MAAM,OAAgC,IAAI,KAAA,CAAS;EACnD,MAAM,mBAA4C,IAAI,KAAA,CAAS;EAC/D,MAAM,wBAAwB,IAAI,IAAI;EACtC,MAAM,iBAA0C,IAAI,KAAA,CAAS;EAC7D,MAAM,cAAuC,IAAI,KAAA,CAAS;EAI1D,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,eAAe,gBAAgB;EAGrC,eAAe,cAA6B;GAC1C,IAAI,CAAC,aAAa,aAAa,MAC7B,aAAa,eAAe,KAAK,SAAS,EAAE;GAE9C,IAAI;IACF,MAAM,cAAc;KAClB,WAAW,MAAM,SAAS;KAC1B,aAAa,iBAAiB;KAC9B,MAAM,aAAa,aAAa;IAClC;IACA,MAAM,mBAAmB,MAAMA,mBAAW,SAA2B;KACnE,KAAK;KACL,MAAM;KACN,YAAY;IACd,CAAC;IACD,KAAK,kBAAkB;KACrB,GAAG,MAAM;KACJ,OAAO,iBAAiB;IAC/B,CAAC;IACD,YAAY,QAAQ,EAAE,+BAA+B;GACvD,QAAQ;IACN,eAAe,QAAQ,EACrB,yCACF;GACF;EACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CC/FE,OAAAE,UAAA,GAAAC,YA+BiB,OAAA,mBAAA;EA9Bf,YAAS;EACR,eAAa,OAAA,EAAC,cAAA;EACd,oBAAkB,OAAA,aAAa,OAAA;EAC/B,cAAY,OAAA;EACZ,gBAAc,OAAA;EACd,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,KAAI,OAAA;EACX,YAAU,OAAA;;EAEA,MAAIC,cAWX,CATO,CAAA,OAAA,aAAa,aAAa,QADnCF,UAAA,GAAAC,YAUE,OAAA,qBAAA;;GARQ,aAAW,OAAA;GAAA,qBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,OAAI;GACf,kBAAgB,OAAA;GAAA,0BAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,YAAS;GACjC,YAAS;GACT,OAAA;GACC,OAAO,OAAA,EAAC,wBAAA;GACR,cAAY,OAAA,UAAU;GACtB,aAAa,OAAA,EAAC,WAAA;GACf,qBAAkB;;;;;;;EAEpB,CAAA,KAAAE,mBAAA,QAAA,IAAA,GAAAC,YAQE,OAAA,qBAAA;GAPQ,aAAW,OAAA;GAAA,qBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,mBAAgB;GAC3B,kBAAgB,OAAA;GAAA,0BAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,wBAAqB;GAC5C,eAAa;GACd,YAAS;GACR,OAAO,OAAA,EAAC,oCAAA;GACR,cAAY,OAAA,UAAU;GACtB,OAAO"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportAbuseModal-BdZRe29L.mjs","names":["classicApi","Constants","_openBlock","_createBlock","_withCtx","_createCommentVNode","_createVNode","_sfc_main"],"sources":["../src/components/display/comments/modal/ReportAbuseModal.vue","../src/components/display/comments/modal/ReportAbuseModal.vue"],"sourcesContent":["<template>\n <RecaptchaModal\n id-modal=\"report-abuse-modal\"\n :title-modal=\"t('Report abuse')\"\n :disable-validate=\"errorName || abuseDescriptionError\"\n :error-text=\"errorSendAbuse\"\n :success-text=\"successText\"\n @close=\"emit('close')\"\n @validate=\"reportAbuse\"\n >\n <template #form>\n <ClassicInputText\n v-if=\"!commentStore.commentUser?.name\"\n v-model:text-init=\"name\"\n v-model:error-variable=\"errorName\"\n input-id=\"comment-user-name\"\n focus\n :label=\"t('Let\\'s get acquainted :')\"\n :max-length=\"Constants.MAX_COMMENT_NAME\"\n :placeholder=\"t('Your name')\"\n autocomplete-type=\"name\"\n />\n <ClassicInputText\n v-model:text-init=\"abuseDescription\"\n v-model:error-variable=\"abuseDescriptionError\"\n :is-textarea=\"true\"\n input-id=\"abuse-description\"\n :label=\"t('Describe the reason for the report')\"\n :max-length=\"Constants.MAX_COMMENT\"\n :focus=\"true\"\n />\n </template>\n </RecaptchaModal>\n</template>\n\n<script setup lang=\"ts\">\nimport Constants from \"../../../../../public/config\";\nimport ClassicInputText from \"../../../form/ClassicInputText.vue\";\nimport RecaptchaModal from \"./RecaptchaModal.vue\";\nimport { Ref, ref } from \"vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport classicApi from \"../../../../api/classicApi\";\nimport {\n CommentAbuseInfo,\n CommentPodcast,\n} from \"@/stores/class/general/comment\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n comment: { default: undefined, type: Object as () => CommentPodcast },\n})\n\n//Emits\nconst emit = defineEmits([\"close\", \"update:comment\"]);\n\n//Data \nconst errorName = ref(false);\nconst name: Ref<string | undefined> = ref(undefined);\nconst abuseDescription: Ref<string | undefined> = ref(undefined);\nconst abuseDescriptionError = ref(true);\nconst errorSendAbuse: Ref<string | undefined> = ref(undefined);\nconst successText: Ref<string | undefined> = ref(undefined);\n\n\n//Composables\nconst { t } = useI18n();\nconst commentStore = useCommentStore();\n\n//Methods\nasync function reportAbuse(): Promise<void> {\n if (!commentStore.commentUser?.name) {\n commentStore.setCommentUser(name.value ?? \"\");\n }\n try {\n const abuseObject = {\n commentId: props.comment?.commentId,\n description: abuseDescription.value,\n uuid: commentStore.commentUser?.uuid,\n };\n const commentAbuseInfo = await classicApi.postData<CommentAbuseInfo>({\n api: 2,\n path: \"abuse/\",\n dataToSend: abuseObject,\n });\n emit(\"update:comment\", {\n ...props.comment,\n ...{ abuse: commentAbuseInfo.abuseCount },\n });\n successText.value = t(\"Thank you for reporting abuse\");\n } catch {\n errorSendAbuse.value = t(\n \"Error occurs while post your comment...\",\n );\n }\n}\n</script>\n","<template>\n <RecaptchaModal\n id-modal=\"report-abuse-modal\"\n :title-modal=\"t('Report abuse')\"\n :disable-validate=\"errorName || abuseDescriptionError\"\n :error-text=\"errorSendAbuse\"\n :success-text=\"successText\"\n @close=\"emit('close')\"\n @validate=\"reportAbuse\"\n >\n <template #form>\n <ClassicInputText\n v-if=\"!commentStore.commentUser?.name\"\n v-model:text-init=\"name\"\n v-model:error-variable=\"errorName\"\n input-id=\"comment-user-name\"\n focus\n :label=\"t('Let\\'s get acquainted :')\"\n :max-length=\"Constants.MAX_COMMENT_NAME\"\n :placeholder=\"t('Your name')\"\n autocomplete-type=\"name\"\n />\n <ClassicInputText\n v-model:text-init=\"abuseDescription\"\n v-model:error-variable=\"abuseDescriptionError\"\n :is-textarea=\"true\"\n input-id=\"abuse-description\"\n :label=\"t('Describe the reason for the report')\"\n :max-length=\"Constants.MAX_COMMENT\"\n :focus=\"true\"\n />\n </template>\n </RecaptchaModal>\n</template>\n\n<script setup lang=\"ts\">\nimport Constants from \"../../../../../public/config\";\nimport ClassicInputText from \"../../../form/ClassicInputText.vue\";\nimport RecaptchaModal from \"./RecaptchaModal.vue\";\nimport { Ref, ref } from \"vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport classicApi from \"../../../../api/classicApi\";\nimport {\n CommentAbuseInfo,\n CommentPodcast,\n} from \"@/stores/class/general/comment\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n comment: { default: undefined, type: Object as () => CommentPodcast },\n})\n\n//Emits\nconst emit = defineEmits([\"close\", \"update:comment\"]);\n\n//Data \nconst errorName = ref(false);\nconst name: Ref<string | undefined> = ref(undefined);\nconst abuseDescription: Ref<string | undefined> = ref(undefined);\nconst abuseDescriptionError = ref(true);\nconst errorSendAbuse: Ref<string | undefined> = ref(undefined);\nconst successText: Ref<string | undefined> = ref(undefined);\n\n\n//Composables\nconst { t } = useI18n();\nconst commentStore = useCommentStore();\n\n//Methods\nasync function reportAbuse(): Promise<void> {\n if (!commentStore.commentUser?.name) {\n commentStore.setCommentUser(name.value ?? \"\");\n }\n try {\n const abuseObject = {\n commentId: props.comment?.commentId,\n description: abuseDescription.value,\n uuid: commentStore.commentUser?.uuid,\n };\n const commentAbuseInfo = await classicApi.postData<CommentAbuseInfo>({\n api: 2,\n path: \"abuse/\",\n dataToSend: abuseObject,\n });\n emit(\"update:comment\", {\n ...props.comment,\n ...{ abuse: commentAbuseInfo.abuseCount },\n });\n successText.value = t(\"Thank you for reporting abuse\");\n } catch {\n errorSendAbuse.value = t(\n \"Error occurs while post your comment...\",\n );\n }\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAkDA,MAAM,QAAQ;EAKd,MAAM,OAAO;EAGb,MAAM,YAAY,IAAI,KAAK;EAC3B,MAAM,OAAgC,IAAI,KAAA,CAAS;EACnD,MAAM,mBAA4C,IAAI,KAAA,CAAS;EAC/D,MAAM,wBAAwB,IAAI,IAAI;EACtC,MAAM,iBAA0C,IAAI,KAAA,CAAS;EAC7D,MAAM,cAAuC,IAAI,KAAA,CAAS;EAI1D,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,eAAe,gBAAgB;EAGrC,eAAe,cAA6B;GAC1C,IAAI,CAAC,aAAa,aAAa,MAC7B,aAAa,eAAe,KAAK,SAAS,EAAE;GAE9C,IAAI;IACF,MAAM,cAAc;KAClB,WAAW,MAAM,SAAS;KAC1B,aAAa,iBAAiB;KAC9B,MAAM,aAAa,aAAa;IAClC;IACA,MAAM,mBAAmB,MAAMA,mBAAW,SAA2B;KACnE,KAAK;KACL,MAAM;KACN,YAAY;IACd,CAAC;IACD,KAAK,kBAAkB;KACrB,GAAG,MAAM;KACJ,OAAO,iBAAiB;IAC/B,CAAC;IACD,YAAY,QAAQ,EAAE,+BAA+B;GACvD,QAAQ;IACN,eAAe,QAAQ,EACrB,yCACF;GACF;EACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CC/FE,OAAAE,UAAA,GAAAC,YA+BiB,OAAA,mBAAA;EA9Bf,YAAS;EACR,eAAa,OAAA,EAAC,cAAA;EACd,oBAAkB,OAAA,aAAa,OAAA;EAC/B,cAAY,OAAA;EACZ,gBAAc,OAAA;EACd,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,KAAI,OAAA;EACX,YAAU,OAAA;;EAEA,MAAIC,cAWX,CATO,CAAA,OAAA,aAAa,aAAa,QADnCF,UAAA,GAAAC,YAUE,OAAA,qBAAA;;GARQ,aAAW,OAAA;GAAA,qBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,OAAI;GACf,kBAAgB,OAAA;GAAA,0BAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,YAAS;GACjC,YAAS;GACT,OAAA;GACC,OAAO,OAAA,EAAC,wBAAA;GACR,cAAY,OAAA,UAAU;GACtB,aAAa,OAAA,EAAC,WAAA;GACf,qBAAkB;;;;;;;EAEpB,CAAA,KAAAE,mBAAA,QAAA,IAAA,GAAAC,YAQE,OAAA,qBAAA;GAPQ,aAAW,OAAA;GAAA,qBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,mBAAgB;GAC3B,kBAAgB,OAAA;GAAA,0BAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,wBAAqB;GAC5C,eAAa;GACd,YAAS;GACR,OAAO,OAAA,EAAC,oCAAA;GACR,cAAY,OAAA,UAAU;GACtB,OAAO"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportAbuseModal-CH7Y153n.mjs","names":["classicApi","Constants","_openBlock","_createBlock","_withCtx","_createCommentVNode","_createVNode","_sfc_main"],"sources":["../src/components/display/comments/modal/ReportAbuseModal.vue","../src/components/display/comments/modal/ReportAbuseModal.vue"],"sourcesContent":["<template>\n <RecaptchaModal\n id-modal=\"report-abuse-modal\"\n :title-modal=\"t('Report abuse')\"\n :disable-validate=\"errorName || abuseDescriptionError\"\n :error-text=\"errorSendAbuse\"\n :success-text=\"successText\"\n @close=\"emit('close')\"\n @validate=\"reportAbuse\"\n >\n <template #form>\n <ClassicInputText\n v-if=\"!commentStore.commentUser?.name\"\n v-model:text-init=\"name\"\n v-model:error-variable=\"errorName\"\n input-id=\"comment-user-name\"\n focus\n :label=\"t('Let\\'s get acquainted :')\"\n :max-length=\"Constants.MAX_COMMENT_NAME\"\n :placeholder=\"t('Your name')\"\n autocomplete-type=\"name\"\n />\n <ClassicInputText\n v-model:text-init=\"abuseDescription\"\n v-model:error-variable=\"abuseDescriptionError\"\n :is-textarea=\"true\"\n input-id=\"abuse-description\"\n :label=\"t('Describe the reason for the report')\"\n :max-length=\"Constants.MAX_COMMENT\"\n :focus=\"true\"\n />\n </template>\n </RecaptchaModal>\n</template>\n\n<script setup lang=\"ts\">\nimport Constants from \"../../../../../public/config\";\nimport ClassicInputText from \"../../../form/ClassicInputText.vue\";\nimport RecaptchaModal from \"./RecaptchaModal.vue\";\nimport { Ref, ref } from \"vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport classicApi from \"../../../../api/classicApi\";\nimport {\n CommentAbuseInfo,\n CommentPodcast,\n} from \"@/stores/class/general/comment\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n comment: { default: undefined, type: Object as () => CommentPodcast },\n})\n\n//Emits\nconst emit = defineEmits([\"close\", \"update:comment\"]);\n\n//Data \nconst errorName = ref(false);\nconst name: Ref<string | undefined> = ref(undefined);\nconst abuseDescription: Ref<string | undefined> = ref(undefined);\nconst abuseDescriptionError = ref(true);\nconst errorSendAbuse: Ref<string | undefined> = ref(undefined);\nconst successText: Ref<string | undefined> = ref(undefined);\n\n\n//Composables\nconst { t } = useI18n();\nconst commentStore = useCommentStore();\n\n//Methods\nasync function reportAbuse(): Promise<void> {\n if (!commentStore.commentUser?.name) {\n commentStore.setCommentUser(name.value ?? \"\");\n }\n try {\n const abuseObject = {\n commentId: props.comment?.commentId,\n description: abuseDescription.value,\n uuid: commentStore.commentUser?.uuid,\n };\n const commentAbuseInfo = await classicApi.postData<CommentAbuseInfo>({\n api: 2,\n path: \"abuse/\",\n dataToSend: abuseObject,\n });\n emit(\"update:comment\", {\n ...props.comment,\n ...{ abuse: commentAbuseInfo.abuseCount },\n });\n successText.value = t(\"Thank you for reporting abuse\");\n } catch {\n errorSendAbuse.value = t(\n \"Error occurs while post your comment...\",\n );\n }\n}\n</script>\n","<template>\n <RecaptchaModal\n id-modal=\"report-abuse-modal\"\n :title-modal=\"t('Report abuse')\"\n :disable-validate=\"errorName || abuseDescriptionError\"\n :error-text=\"errorSendAbuse\"\n :success-text=\"successText\"\n @close=\"emit('close')\"\n @validate=\"reportAbuse\"\n >\n <template #form>\n <ClassicInputText\n v-if=\"!commentStore.commentUser?.name\"\n v-model:text-init=\"name\"\n v-model:error-variable=\"errorName\"\n input-id=\"comment-user-name\"\n focus\n :label=\"t('Let\\'s get acquainted :')\"\n :max-length=\"Constants.MAX_COMMENT_NAME\"\n :placeholder=\"t('Your name')\"\n autocomplete-type=\"name\"\n />\n <ClassicInputText\n v-model:text-init=\"abuseDescription\"\n v-model:error-variable=\"abuseDescriptionError\"\n :is-textarea=\"true\"\n input-id=\"abuse-description\"\n :label=\"t('Describe the reason for the report')\"\n :max-length=\"Constants.MAX_COMMENT\"\n :focus=\"true\"\n />\n </template>\n </RecaptchaModal>\n</template>\n\n<script setup lang=\"ts\">\nimport Constants from \"../../../../../public/config\";\nimport ClassicInputText from \"../../../form/ClassicInputText.vue\";\nimport RecaptchaModal from \"./RecaptchaModal.vue\";\nimport { Ref, ref } from \"vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport classicApi from \"../../../../api/classicApi\";\nimport {\n CommentAbuseInfo,\n CommentPodcast,\n} from \"@/stores/class/general/comment\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n comment: { default: undefined, type: Object as () => CommentPodcast },\n})\n\n//Emits\nconst emit = defineEmits([\"close\", \"update:comment\"]);\n\n//Data \nconst errorName = ref(false);\nconst name: Ref<string | undefined> = ref(undefined);\nconst abuseDescription: Ref<string | undefined> = ref(undefined);\nconst abuseDescriptionError = ref(true);\nconst errorSendAbuse: Ref<string | undefined> = ref(undefined);\nconst successText: Ref<string | undefined> = ref(undefined);\n\n\n//Composables\nconst { t } = useI18n();\nconst commentStore = useCommentStore();\n\n//Methods\nasync function reportAbuse(): Promise<void> {\n if (!commentStore.commentUser?.name) {\n commentStore.setCommentUser(name.value ?? \"\");\n }\n try {\n const abuseObject = {\n commentId: props.comment?.commentId,\n description: abuseDescription.value,\n uuid: commentStore.commentUser?.uuid,\n };\n const commentAbuseInfo = await classicApi.postData<CommentAbuseInfo>({\n api: 2,\n path: \"abuse/\",\n dataToSend: abuseObject,\n });\n emit(\"update:comment\", {\n ...props.comment,\n ...{ abuse: commentAbuseInfo.abuseCount },\n });\n successText.value = t(\"Thank you for reporting abuse\");\n } catch {\n errorSendAbuse.value = t(\n \"Error occurs while post your comment...\",\n );\n }\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAkDA,MAAM,QAAQ;EAKd,MAAM,OAAO;EAGb,MAAM,YAAY,IAAI,KAAK;EAC3B,MAAM,OAAgC,IAAI,KAAA,CAAS;EACnD,MAAM,mBAA4C,IAAI,KAAA,CAAS;EAC/D,MAAM,wBAAwB,IAAI,IAAI;EACtC,MAAM,iBAA0C,IAAI,KAAA,CAAS;EAC7D,MAAM,cAAuC,IAAI,KAAA,CAAS;EAI1D,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,eAAe,gBAAgB;EAGrC,eAAe,cAA6B;GAC1C,IAAI,CAAC,aAAa,aAAa,MAC7B,aAAa,eAAe,KAAK,SAAS,EAAE;GAE9C,IAAI;IACF,MAAM,cAAc;KAClB,WAAW,MAAM,SAAS;KAC1B,aAAa,iBAAiB;KAC9B,MAAM,aAAa,aAAa;IAClC;IACA,MAAM,mBAAmB,MAAMA,mBAAW,SAA2B;KACnE,KAAK;KACL,MAAM;KACN,YAAY;IACd,CAAC;IACD,KAAK,kBAAkB;KACrB,GAAG,MAAM;KACJ,OAAO,iBAAiB;IAC/B,CAAC;IACD,YAAY,QAAQ,EAAE,+BAA+B;GACvD,QAAQ;IACN,eAAe,QAAQ,EACrB,yCACF;GACF;EACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CC/FE,OAAAE,UAAA,GAAAC,YA+BiB,OAAA,mBAAA;EA9Bf,YAAS;EACR,eAAa,OAAA,EAAC,cAAA;EACd,oBAAkB,OAAA,aAAa,OAAA;EAC/B,cAAY,OAAA;EACZ,gBAAc,OAAA;EACd,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,KAAI,OAAA;EACX,YAAU,OAAA;;EAEA,MAAIC,cAWX,CATO,CAAA,OAAA,aAAa,aAAa,QADnCF,UAAA,GAAAC,YAUE,OAAA,qBAAA;;GARQ,aAAW,OAAA;GAAA,qBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,OAAI;GACf,kBAAgB,OAAA;GAAA,0BAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,YAAS;GACjC,YAAS;GACT,OAAA;GACC,OAAO,OAAA,EAAC,wBAAA;GACR,cAAY,OAAA,UAAU;GACtB,aAAa,OAAA,EAAC,WAAA;GACf,qBAAkB;;;;;;;EAEpB,CAAA,KAAAE,mBAAA,QAAA,IAAA,GAAAC,YAQE,OAAA,qBAAA;GAPQ,aAAW,OAAA;GAAA,qBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,mBAAgB;GAC3B,kBAAgB,OAAA;GAAA,0BAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,wBAAqB;GAC5C,eAAa;GACd,YAAS;GACR,OAAO,OAAA,EAAC,oCAAA;GACR,cAAY,OAAA,UAAU;GACtB,OAAO"}
@@ -1,8 +1,8 @@
1
- import { t as e } from "./classicApi-pmODlqv5.mjs";
2
- import { t } from "./CommentStore-hPTYaDGr.mjs";
1
+ import { t as e } from "./classicApi-CGipMqf7.mjs";
2
+ import { t } from "./CommentStore-CysGkBHp.mjs";
3
3
  import { t as n } from "./config-DMjLBcZ2.mjs";
4
- import { t as r } from "./ClassicInputText-DJ5kURGM.mjs";
5
- import { t as i } from "./RecaptchaModal-w-9MlZ45.mjs";
4
+ import { t as r } from "./ClassicInputText-YsntJkHk.mjs";
5
+ import { t as i } from "./RecaptchaModal-BdW4xNlX.mjs";
6
6
  import { createBlock as a, createCommentVNode as o, createVNode as s, defineComponent as c, openBlock as l, ref as u, unref as d, withCtx as f } from "vue";
7
7
  import { useI18n as p } from "vue-i18n";
8
8
  //#endregion
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RightsIndicator-4pUsBq5j.mjs","names":["Icons","_openBlock","_createElementBlock","_normalizeClass","_createBlock","_normalizeProps","_mergeProps","_withCtx","_createVNode","_createCommentVNode","_createElementVNode","_createTextVNode","_toDisplayString","_sfc_main"],"sources":["../src/components/display/RightsIndicator.vue","../src/components/display/RightsIndicator.vue"],"sourcesContent":["<template>\n <div\n v-if=\"displayIndicator\"\n :class=\"{ inline: inline }\"\n title=\"\"\n >\n <RightsWrapper\n v-if=\"!text\"\n v-slot=\"{ id }\"\n v-bind=\"props\"\n >\n <Icon\n :id=\"id\"\n class=\"rights-indicator-icon\"\n :class=\"{ invisible: hasAccess }\"\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n :size=\"inline ? 20 : 24\"\n />\n </RightsWrapper>\n <div aria-live=\"polite\" aria-atomic=\"true\">\n <ClassicAlert\n v-if=\"text && !hasAccess\"\n type=\"info\"\n >\n <template #icon>\n <Icon\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n />\n </template>\n {{ message }}\n </ClassicAlert>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicAlert from '../misc/ClassicAlert.vue';\nimport Icons from '@/components/icons'; \nimport RightsWrapper from './RightsWrapper.vue'; \nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\n\nconst Icon = Icons.RightsIndicator;\n\ntype PropsBase = RightsProps & {\n /** Display reason as text instead of only tooltip */\n text?: boolean;\n /** Use inline instead of block */\n inline?: boolean;\n}\n\nconst props = defineProps<PropsBase>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n</script>\n\n<style scoped lang=\"scss\">\ndiv.inline {\n display: inline;\n // Properly align text with it\n vertical-align: top;\n}\n\n.inline div {\n display: inline;\n}\n\n.inline .rights-indicator-icon {\n display: inline-flex;\n // Propertly align content\n position: relative;\n bottom: -4px;\n // Ensure it doesn't take place in the text\n height: 1px;\n}\n\n.inline .invisible {\n display: none;\n}\n\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n","<template>\n <div\n v-if=\"displayIndicator\"\n :class=\"{ inline: inline }\"\n title=\"\"\n >\n <RightsWrapper\n v-if=\"!text\"\n v-slot=\"{ id }\"\n v-bind=\"props\"\n >\n <Icon\n :id=\"id\"\n class=\"rights-indicator-icon\"\n :class=\"{ invisible: hasAccess }\"\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n :size=\"inline ? 20 : 24\"\n />\n </RightsWrapper>\n <div aria-live=\"polite\" aria-atomic=\"true\">\n <ClassicAlert\n v-if=\"text && !hasAccess\"\n type=\"info\"\n >\n <template #icon>\n <Icon\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n />\n </template>\n {{ message }}\n </ClassicAlert>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicAlert from '../misc/ClassicAlert.vue';\nimport Icons from '@/components/icons'; \nimport RightsWrapper from './RightsWrapper.vue'; \nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\n\nconst Icon = Icons.RightsIndicator;\n\ntype PropsBase = RightsProps & {\n /** Display reason as text instead of only tooltip */\n text?: boolean;\n /** Use inline instead of block */\n inline?: boolean;\n}\n\nconst props = defineProps<PropsBase>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n</script>\n\n<style scoped lang=\"scss\">\ndiv.inline {\n display: inline;\n // Properly align text with it\n vertical-align: top;\n}\n\n.inline div {\n display: inline;\n}\n\n.inline .rights-indicator-icon {\n display: inline-flex;\n // Propertly align content\n position: relative;\n bottom: -4px;\n // Ensure it doesn't take place in the text\n height: 1px;\n}\n\n.inline .invisible {\n display: none;\n}\n\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,OAAOA,cAAM;EASnB,MAAM,QAAQ;EAEd,MAAM,EAAE,kBAAkB,WAAW,YAAY,mBAAmB,KAAK;;;;;;;;;;;;;;;;;;;;;CClC5D,aAAU;CAAS,eAAY;;;CAlB9B,OAAA,OAAA,oBADVC,UAAA,GAAAC,mBAiCM,OAAA;;EA/BD,OAAKC,eAAA,EAAA,QAAY,OAAA,OAAM,CAAA;EACxB,OAAM;CAGK,GAAA,CAAA,CAAA,OAAA,QADXF,UAAA,GAAAG,YAagB,OAAA,kBAAAC,eAAAC,WAAA,EAAA,KAAA,EAAA,GAVJ,OAAA,KAAK,CAAA,GAAA;EAEb,SAAAC,SAOE,EAVQ,SAAE,CAGZC,YAOE,OAAA,SAAA;GANO;GACL,OAAKL,eAAA,CAAC,yBAAuB,EAAA,WACR,OAAA,UAAS,CAAA,CAAA;GAC9B,eAAY;GACZ,cAAW;GACV,MAAM,OAAA,SAAM,KAAA;;;;;;;CAGrB,GAAA,EAAA,KAAAM,mBAAA,QAAA,IAAA,GAAAC,mBAaM,OAbN,YAaM,CAXQ,OAAA,QAAI,CAAK,OAAA,aADnBT,UAAA,GAAAG,YAWe,OAAA,iBAAA;;EATX,MAAK;;EAEM,MAAIG,cAIT,CAHFC,YAGE,OAAA,SAAA;GAFE,eAAY;GACZ,cAAW;;EAER,SAAAD,cACX,CADWI,gBAAA,MACXC,gBAAG,OAAA,OAAO,GAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RightsIndicator-BH3jm_1O.mjs","names":["Icons","_openBlock","_createElementBlock","_normalizeClass","_createBlock","_normalizeProps","_mergeProps","_withCtx","_createVNode","_createCommentVNode","_createElementVNode","_createTextVNode","_toDisplayString","_sfc_main"],"sources":["../src/components/display/RightsIndicator.vue","../src/components/display/RightsIndicator.vue"],"sourcesContent":["<template>\n <div\n v-if=\"displayIndicator\"\n :class=\"{ inline: inline }\"\n title=\"\"\n >\n <RightsWrapper\n v-if=\"!text\"\n v-slot=\"{ id }\"\n v-bind=\"props\"\n >\n <Icon\n :id=\"id\"\n class=\"rights-indicator-icon\"\n :class=\"{ invisible: hasAccess }\"\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n :size=\"inline ? 20 : 24\"\n />\n </RightsWrapper>\n <div aria-live=\"polite\" aria-atomic=\"true\">\n <ClassicAlert\n v-if=\"text && !hasAccess\"\n type=\"info\"\n >\n <template #icon>\n <Icon\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n />\n </template>\n {{ message }}\n </ClassicAlert>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicAlert from '../misc/ClassicAlert.vue';\nimport Icons from '@/components/icons'; \nimport RightsWrapper from './RightsWrapper.vue'; \nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\n\nconst Icon = Icons.RightsIndicator;\n\ntype PropsBase = RightsProps & {\n /** Display reason as text instead of only tooltip */\n text?: boolean;\n /** Use inline instead of block */\n inline?: boolean;\n}\n\nconst props = defineProps<PropsBase>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n</script>\n\n<style scoped lang=\"scss\">\ndiv.inline {\n display: inline;\n // Properly align text with it\n vertical-align: top;\n}\n\n.inline div {\n display: inline;\n}\n\n.inline .rights-indicator-icon {\n display: inline-flex;\n // Propertly align content\n position: relative;\n bottom: -4px;\n // Ensure it doesn't take place in the text\n height: 1px;\n}\n\n.inline .invisible {\n display: none;\n}\n\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n","<template>\n <div\n v-if=\"displayIndicator\"\n :class=\"{ inline: inline }\"\n title=\"\"\n >\n <RightsWrapper\n v-if=\"!text\"\n v-slot=\"{ id }\"\n v-bind=\"props\"\n >\n <Icon\n :id=\"id\"\n class=\"rights-indicator-icon\"\n :class=\"{ invisible: hasAccess }\"\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n :size=\"inline ? 20 : 24\"\n />\n </RightsWrapper>\n <div aria-live=\"polite\" aria-atomic=\"true\">\n <ClassicAlert\n v-if=\"text && !hasAccess\"\n type=\"info\"\n >\n <template #icon>\n <Icon\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n />\n </template>\n {{ message }}\n </ClassicAlert>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicAlert from '../misc/ClassicAlert.vue';\nimport Icons from '@/components/icons'; \nimport RightsWrapper from './RightsWrapper.vue'; \nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\n\nconst Icon = Icons.RightsIndicator;\n\ntype PropsBase = RightsProps & {\n /** Display reason as text instead of only tooltip */\n text?: boolean;\n /** Use inline instead of block */\n inline?: boolean;\n}\n\nconst props = defineProps<PropsBase>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n</script>\n\n<style scoped lang=\"scss\">\ndiv.inline {\n display: inline;\n // Properly align text with it\n vertical-align: top;\n}\n\n.inline div {\n display: inline;\n}\n\n.inline .rights-indicator-icon {\n display: inline-flex;\n // Propertly align content\n position: relative;\n bottom: -4px;\n // Ensure it doesn't take place in the text\n height: 1px;\n}\n\n.inline .invisible {\n display: none;\n}\n\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,OAAOA,cAAM;EASnB,MAAM,QAAQ;EAEd,MAAM,EAAE,kBAAkB,WAAW,YAAY,mBAAmB,KAAK;;;;;;;;;;;;;;;;;;;;;CClC5D,aAAU;CAAS,eAAY;;;CAlB9B,OAAA,OAAA,oBADVC,UAAA,GAAAC,mBAiCM,OAAA;;EA/BD,OAAKC,eAAA,EAAA,QAAY,OAAA,OAAM,CAAA;EACxB,OAAM;CAGK,GAAA,CAAA,CAAA,OAAA,QADXF,UAAA,GAAAG,YAagB,OAAA,kBAAAC,eAAAC,WAAA,EAAA,KAAA,EAAA,GAVJ,OAAA,KAAK,CAAA,GAAA;EAEb,SAAAC,SAOE,EAVQ,SAAE,CAGZC,YAOE,OAAA,SAAA;GANO;GACL,OAAKL,eAAA,CAAC,yBAAuB,EAAA,WACR,OAAA,UAAS,CAAA,CAAA;GAC9B,eAAY;GACZ,cAAW;GACV,MAAM,OAAA,SAAM,KAAA;;;;;;;CAGrB,GAAA,EAAA,KAAAM,mBAAA,QAAA,IAAA,GAAAC,mBAaM,OAbN,YAaM,CAXQ,OAAA,QAAI,CAAK,OAAA,aADnBT,UAAA,GAAAG,YAWe,OAAA,iBAAA;;EATX,MAAK;;EAEM,MAAIG,cAIT,CAHFC,YAGE,OAAA,SAAA;GAFE,eAAY;GACZ,cAAW;;EAER,SAAAD,cACX,CADWI,gBAAA,MACXC,gBAAG,OAAA,OAAO,GAAA,CAAA,CAAA,CAAA"}
@@ -2,7 +2,7 @@ import { t as e } from "./rolldown-runtime-Dy4uBu1J.mjs";
2
2
  import { t } from "./_plugin-vue_export-helper-B3ysoDQm.mjs";
3
3
  import { r as n } from "./buttons-BkfxHdGj.mjs";
4
4
  import { t as r } from "./ClassicAlert-DATLZ8J1.mjs";
5
- import { r as i, t as a } from "./RightsWrapper-BUj_1bwR.mjs";
5
+ import { r as i, t as a } from "./RightsWrapper-BTQ8GGUi.mjs";
6
6
  import { createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createTextVNode as u, createVNode as d, defineComponent as f, mergeProps as p, normalizeClass as m, normalizeProps as h, openBlock as g, toDisplayString as _, unref as v, withCtx as y } from "vue";
7
7
  //#region src/components/display/RightsIndicator.vue?vue&type=script&setup=true&lang.ts
8
8
  var b = {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RightsIndicator-d8ffUFIj.mjs","names":["Icons","_openBlock","_createElementBlock","_normalizeClass","_createBlock","_normalizeProps","_mergeProps","_withCtx","_createVNode","_createCommentVNode","_createElementVNode","_createTextVNode","_toDisplayString","_sfc_main"],"sources":["../src/components/display/RightsIndicator.vue","../src/components/display/RightsIndicator.vue"],"sourcesContent":["<template>\n <div\n v-if=\"displayIndicator\"\n :class=\"{ inline: inline }\"\n title=\"\"\n >\n <RightsWrapper\n v-if=\"!text\"\n v-slot=\"{ id }\"\n v-bind=\"props\"\n >\n <Icon\n :id=\"id\"\n class=\"rights-indicator-icon\"\n :class=\"{ invisible: hasAccess }\"\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n :size=\"inline ? 20 : 24\"\n />\n </RightsWrapper>\n <div aria-live=\"polite\" aria-atomic=\"true\">\n <ClassicAlert\n v-if=\"text && !hasAccess\"\n type=\"info\"\n >\n <template #icon>\n <Icon\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n />\n </template>\n {{ message }}\n </ClassicAlert>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicAlert from '../misc/ClassicAlert.vue';\nimport Icons from '@/components/icons'; \nimport RightsWrapper from './RightsWrapper.vue'; \nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\n\nconst Icon = Icons.RightsIndicator;\n\ntype PropsBase = RightsProps & {\n /** Display reason as text instead of only tooltip */\n text?: boolean;\n /** Use inline instead of block */\n inline?: boolean;\n}\n\nconst props = defineProps<PropsBase>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n</script>\n\n<style scoped lang=\"scss\">\ndiv.inline {\n display: inline;\n // Properly align text with it\n vertical-align: top;\n}\n\n.inline div {\n display: inline;\n}\n\n.inline .rights-indicator-icon {\n display: inline-flex;\n // Propertly align content\n position: relative;\n bottom: -4px;\n // Ensure it doesn't take place in the text\n height: 1px;\n}\n\n.inline .invisible {\n display: none;\n}\n\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n","<template>\n <div\n v-if=\"displayIndicator\"\n :class=\"{ inline: inline }\"\n title=\"\"\n >\n <RightsWrapper\n v-if=\"!text\"\n v-slot=\"{ id }\"\n v-bind=\"props\"\n >\n <Icon\n :id=\"id\"\n class=\"rights-indicator-icon\"\n :class=\"{ invisible: hasAccess }\"\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n :size=\"inline ? 20 : 24\"\n />\n </RightsWrapper>\n <div aria-live=\"polite\" aria-atomic=\"true\">\n <ClassicAlert\n v-if=\"text && !hasAccess\"\n type=\"info\"\n >\n <template #icon>\n <Icon\n aria-hidden=\"true\"\n fill-color=\"var(--octopus-primary)\"\n />\n </template>\n {{ message }}\n </ClassicAlert>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicAlert from '../misc/ClassicAlert.vue';\nimport Icons from '@/components/icons'; \nimport RightsWrapper from './RightsWrapper.vue'; \nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\n\nconst Icon = Icons.RightsIndicator;\n\ntype PropsBase = RightsProps & {\n /** Display reason as text instead of only tooltip */\n text?: boolean;\n /** Use inline instead of block */\n inline?: boolean;\n}\n\nconst props = defineProps<PropsBase>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n</script>\n\n<style scoped lang=\"scss\">\ndiv.inline {\n display: inline;\n // Properly align text with it\n vertical-align: top;\n}\n\n.inline div {\n display: inline;\n}\n\n.inline .rights-indicator-icon {\n display: inline-flex;\n // Propertly align content\n position: relative;\n bottom: -4px;\n // Ensure it doesn't take place in the text\n height: 1px;\n}\n\n.inline .invisible {\n display: none;\n}\n\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,OAAOA,cAAM;EASnB,MAAM,QAAQ;EAEd,MAAM,EAAE,kBAAkB,WAAW,YAAY,mBAAmB,KAAK;;;;;;;;;;;;;;;;;;;;;CClC5D,aAAU;CAAS,eAAY;;;CAlB9B,OAAA,OAAA,oBADVC,UAAA,GAAAC,mBAiCM,OAAA;;EA/BD,OAAKC,eAAA,EAAA,QAAY,OAAA,OAAM,CAAA;EACxB,OAAM;CAGK,GAAA,CAAA,CAAA,OAAA,QADXF,UAAA,GAAAG,YAagB,OAAA,kBAAAC,eAAAC,WAAA,EAAA,KAAA,EAAA,GAVJ,OAAA,KAAK,CAAA,GAAA;EAEb,SAAAC,SAOE,EAVQ,SAAE,CAGZC,YAOE,OAAA,SAAA;GANO;GACL,OAAKL,eAAA,CAAC,yBAAuB,EAAA,WACR,OAAA,UAAS,CAAA,CAAA;GAC9B,eAAY;GACZ,cAAW;GACV,MAAM,OAAA,SAAM,KAAA;;;;;;;CAGrB,GAAA,EAAA,KAAAM,mBAAA,QAAA,IAAA,GAAAC,mBAaM,OAbN,YAaM,CAXQ,OAAA,QAAI,CAAK,OAAA,aADnBT,UAAA,GAAAG,YAWe,OAAA,iBAAA;;EATX,MAAK;;EAEM,MAAIG,cAIT,CAHFC,YAGE,OAAA,SAAA;GAFE,eAAY;GACZ,cAAW;;EAER,SAAAD,cACX,CADWI,gBAAA,MACXC,gBAAG,OAAA,OAAO,GAAA,CAAA,CAAA,CAAA"}
@@ -1,18 +1,18 @@
1
1
  import { t as e } from "./rolldown-runtime-Dy4uBu1J.mjs";
2
- import { A as t, i as n } from "./classicApi-pmODlqv5.mjs";
2
+ import { i as t, j as n } from "./classicApi-CGipMqf7.mjs";
3
3
  import { t as r } from "./_plugin-vue_export-helper-B3ysoDQm.mjs";
4
- import { n as i, t as a } from "./useRights-DOXtpjv5.mjs";
5
- import { t as o } from "./ClassicPopover-DWR50Nxi.mjs";
4
+ import { n as i, t as a } from "./useRights-BI2tXXjR.mjs";
5
+ import { t as o } from "./ClassicPopover-BUb-1WMB.mjs";
6
6
  import { computed as s, createBlock as c, createCommentVNode as l, createElementBlock as u, createTextVNode as d, defineComponent as f, getCurrentInstance as p, openBlock as m, renderSlot as h, toDisplayString as g, unref as _, withCtx as v } from "vue";
7
7
  import { useI18n as y } from "vue-i18n";
8
8
  import { storeToRefs as b } from "pinia";
9
9
  //#region src/components/composable/useRightsIndicator.ts
10
10
  var x = (e) => {
11
- let r = i(), { t: o, te: c } = y(), { isAuthenticated: l } = b(n()), u = {
11
+ let r = i(), { t: o, te: c } = y(), { isAuthenticated: l } = b(t()), u = {
12
12
  create: "Create",
13
13
  edit: "Edit",
14
14
  delete: "Delete"
15
- }, d = s(() => !t.generalParameters.podcastmaker && l.value), f = s(() => {
15
+ }, d = s(() => !n.generalParameters.podcastmaker && l.value), f = s(() => {
16
16
  let t, n;
17
17
  if ("podcast" in e && e.podcast) n = "Podcast", t = e.podcast;
18
18
  else if ("emission" in e && e.emission) n = "Emission", t = e.emission;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RightsWrapper-C3BRHqqo.mjs","names":["_openBlock","_createElementBlock","_renderSlot","_toDisplayString","_createCommentVNode","_createBlock","_withCtx","_createTextVNode","_sfc_main"],"sources":["../src/components/composable/useRightsIndicator.ts","../src/components/display/RightsWrapper.vue","../src/components/display/RightsWrapper.vue"],"sourcesContent":["import { Mix } from '../../stores/class/radio/mix';\nimport { PlaylistMedia } from '../../stores/class/radio/playlistMedia';\nimport { Podcast } from '../../stores/class/general/podcast';\nimport { Cartouchier } from '../../stores/class/cartouchier/cartouchier';\nimport { Media } from \"../../stores/class/general/media\";\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { ActionRight, useRights } from '../composable/useRights';\nimport { state } from '../../stores/ParamSdkStore';\nimport { useAuthStore } from '../../stores/AuthStore';\nimport { storeToRefs } from 'pinia';\nimport { Emission } from '@/stores/class/general/emission';\n\ntype Action = 'create'|'edit'|'delete'|'any';\n\nexport interface PropsBase {\n /** Type of action to check */\n action: Action;\n}\n\ntype NeverEntities = {\n podcast?: never;\n emission?: never;\n cartouchier?: never;\n mix?: never;\n playlistMedia?: never;\n media?: never;\n promoVideoFor?: never;\n};\n\nexport interface PropsPodcast extends PropsBase, Omit<NeverEntities, 'podcast'> {\n podcast: Podcast|boolean;\n}\nexport interface PropsEmission extends PropsBase, Omit<NeverEntities, 'emission'> {\n emission: Emission|boolean;\n}\nexport interface PropsCartouchier extends PropsBase, Omit<NeverEntities, 'cartouchier'> {\n cartouchier: Cartouchier|boolean;\n}\nexport interface PropsMix extends PropsBase, Omit<NeverEntities, 'mix'> {\n mix: Mix|boolean;\n}\nexport interface PropsPlaylistMedia extends PropsBase, Omit<NeverEntities, 'playlistMedia'> {\n playlistMedia: PlaylistMedia|boolean;\n}\nexport interface PropsMedia extends PropsBase, Omit<NeverEntities, 'media'> {\n media: Media|boolean;\n}\nexport interface PropsPromoVideo extends PropsBase, Omit<NeverEntities, 'promoVideoFor'> {\n promoVideoFor: Podcast;\n}\n\nexport type RightsProps = PropsPodcast|PropsEmission|PropsCartouchier|PropsMix|PropsPlaylistMedia|PropsMedia;\n\nexport const useRightsIndicator = (props: PropsPodcast|PropsEmission|PropsCartouchier|PropsMix|PropsPlaylistMedia|PropsMedia) => {\n const rights = useRights();\n const { t, te } = useI18n();\n const { isAuthenticated } = storeToRefs(useAuthStore());\n\n type Rights = ReturnType<typeof useRights>;\n type ActionSegment = 'Create'|'Edit'|'Delete';\n type EntitySegment = 'Podcast'|'Emission'|'Cartouchier'|'Mix'|'PlaylistMedia'|'Media'|'PromoVideo';\n type RightMethodKey = `get${ActionSegment}${EntitySegment}Right` & keyof Rights;\n type RightEntity = Podcast|Emission|Cartouchier|Mix|PlaylistMedia|Media|boolean|undefined;\n\n const actionSegmentMap: Record<Exclude<Action, 'any'>, ActionSegment> = {\n create: 'Create',\n edit: 'Edit',\n delete: 'Delete',\n };\n\n /**\n * Whether to display the indicator\n * It is not shown on podcastmaker, or for unidentified users\n */\n const displayIndicator = computed((): boolean => {\n return !state.generalParameters.podcastmaker && isAuthenticated.value;\n });\n\n /**\n * The entity on which rights are checked\n */\n const entity = computed((): [EntitySegment, RightEntity]|null => {\n let arg: RightEntity;\n let entitySegment: EntitySegment|undefined;\n\n if ('podcast' in props && props.podcast) {\n entitySegment = 'Podcast';\n arg = props.podcast;\n } else if ('emission' in props && props.emission) {\n entitySegment = 'Emission';\n arg = props.emission;\n } else if ('cartouchier' in props && props.cartouchier) {\n entitySegment = 'Cartouchier';\n arg = props.cartouchier;\n } else if ('mix' in props && props.mix) {\n entitySegment = 'Mix';\n arg = props.mix;\n } else if ('playlistMedia' in props && props.playlistMedia) {\n entitySegment = 'PlaylistMedia';\n arg = props.playlistMedia;\n } else if ('media' in props && props.media) {\n entitySegment = 'Media';\n arg = props.media;\n } else if ('promoVideoFor' in props && props.promoVideoFor) {\n entitySegment = 'PromoVideo';\n arg = props.promoVideoFor;\n } else {\n return null;\n }\n\n return [entitySegment, arg];\n });\n\n /**\n * The current rights for the given entity\n */\n const actionRight = computed((): ActionRight => {\n const data = entity.value;\n if (!data) {\n return ActionRight.DeniedNoRight;\n }\n\n const [entitySegment, arg] = data;\n\n if (props.action === 'any') {\n const checks: ActionSegment[] = typeof arg === 'object' && arg !== null\n ? ['Create', 'Edit', 'Delete']\n : ['Create'];\n\n let best = ActionRight.DeniedNoRight;\n for (const a of checks) {\n const key = `get${a}${entitySegment}Right` as RightMethodKey;\n const r = callRightMethod(key, arg);\n if (r === ActionRight.Allowed) {\n return ActionRight.Allowed;\n }\n if (r === ActionRight.DeniedNotOwner) {\n best = ActionRight.DeniedNotOwner;\n }\n }\n return best;\n }\n\n if ((props.action === 'edit' || props.action === 'delete') && typeof arg !== 'object') {\n return ActionRight.DeniedNoRight;\n }\n\n const methodName = `get${actionSegmentMap[props.action]}${entitySegment}Right` as RightMethodKey;\n return callRightMethod(methodName, arg);\n });\n\n /** Helper for calling the method on useRights */\n function callRightMethod(key: RightMethodKey, arg: unknown): ActionRight {\n return (rights[key] as (arg?: unknown) => ActionRight)(arg);\n }\n\n const hasAccess = computed((): boolean => {\n return actionRight.value === ActionRight.Allowed;\n });\n\n const message = computed((): string => {\n const entitySegment = entity.value?.[0];\n let key: string;\n let genericKey: string;\n \n switch (actionRight.value) {\n case ActionRight.Allowed:\n return '';\n\n case ActionRight.DeniedNotOwner:\n key = `RightsIndicator - ${entitySegment} - Not owner`;\n genericKey = 'Generic - Action disabled - Not owner';\n break;\n\n case ActionRight.DeniedInsufficientScope:\n key = `RightsIndicator - ${entitySegment} - Insufficient scope`;\n genericKey = 'RightsIndicator - Generic - Insufficient scope';\n break;\n\n case ActionRight.DeniedNoRight:\n key = `RightsIndicator - ${entitySegment} - Insufficient rights`;\n genericKey = 'RightsIndicator - Generic - Insufficient rights';\n break;\n\n default:\n return 'Cannot process rights';\n }\n\n if (te(key)) {\n return t(key);\n } else {\n return t(genericKey);\n }\n });\n\n return {\n displayIndicator,\n hasAccess,\n message\n }\n};\n","<template>\n <div\n v-if=\"displayIndicator\"\n >\n <slot :id=\"elementId\" :has-access=\"hasAccess\" />\n <span v-if=\"!hasAccess\" class=\"rights-visually-hidden\">{{ message }}</span>\n <ClassicPopover\n v-if=\"!hasAccess\"\n :target=\"elementId\"\n only-mouse\n >\n {{ message }}\n </ClassicPopover>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance } from 'vue';\nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\nimport ClassicPopover from '../misc/ClassicPopover.vue';\n\nconst props = defineProps<RightsProps>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n\nconst uid = getCurrentInstance()?.uid;\n/** ID of the icon for reference by the popover */\nconst elementId = computed((): string => 'rights-wrapper-' + uid);\n</script>\n\n<style scoped lang=\"scss\">\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n","<template>\n <div\n v-if=\"displayIndicator\"\n >\n <slot :id=\"elementId\" :has-access=\"hasAccess\" />\n <span v-if=\"!hasAccess\" class=\"rights-visually-hidden\">{{ message }}</span>\n <ClassicPopover\n v-if=\"!hasAccess\"\n :target=\"elementId\"\n only-mouse\n >\n {{ message }}\n </ClassicPopover>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance } from 'vue';\nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\nimport ClassicPopover from '../misc/ClassicPopover.vue';\n\nconst props = defineProps<RightsProps>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n\nconst uid = getCurrentInstance()?.uid;\n/** ID of the icon for reference by the popover */\nconst elementId = computed((): string => 'rights-wrapper-' + uid);\n</script>\n\n<style scoped lang=\"scss\">\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RightsWrapper-DJG9Ds6c.mjs","names":["_openBlock","_createElementBlock","_renderSlot","_toDisplayString","_createCommentVNode","_createBlock","_withCtx","_createTextVNode","_sfc_main"],"sources":["../src/components/composable/useRightsIndicator.ts","../src/components/display/RightsWrapper.vue","../src/components/display/RightsWrapper.vue"],"sourcesContent":["import { Mix } from '../../stores/class/radio/mix';\nimport { PlaylistMedia } from '../../stores/class/radio/playlistMedia';\nimport { Podcast } from '../../stores/class/general/podcast';\nimport { Cartouchier } from '../../stores/class/cartouchier/cartouchier';\nimport { Media } from \"../../stores/class/general/media\";\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { ActionRight, useRights } from '../composable/useRights';\nimport { state } from '../../stores/ParamSdkStore';\nimport { useAuthStore } from '../../stores/AuthStore';\nimport { storeToRefs } from 'pinia';\nimport { Emission } from '@/stores/class/general/emission';\n\ntype Action = 'create'|'edit'|'delete'|'any';\n\nexport interface PropsBase {\n /** Type of action to check */\n action: Action;\n}\n\ntype NeverEntities = {\n podcast?: never;\n emission?: never;\n cartouchier?: never;\n mix?: never;\n playlistMedia?: never;\n media?: never;\n promoVideoFor?: never;\n};\n\nexport interface PropsPodcast extends PropsBase, Omit<NeverEntities, 'podcast'> {\n podcast: Podcast|boolean;\n}\nexport interface PropsEmission extends PropsBase, Omit<NeverEntities, 'emission'> {\n emission: Emission|boolean;\n}\nexport interface PropsCartouchier extends PropsBase, Omit<NeverEntities, 'cartouchier'> {\n cartouchier: Cartouchier|boolean;\n}\nexport interface PropsMix extends PropsBase, Omit<NeverEntities, 'mix'> {\n mix: Mix|boolean;\n}\nexport interface PropsPlaylistMedia extends PropsBase, Omit<NeverEntities, 'playlistMedia'> {\n playlistMedia: PlaylistMedia|boolean;\n}\nexport interface PropsMedia extends PropsBase, Omit<NeverEntities, 'media'> {\n media: Media|boolean;\n}\nexport interface PropsPromoVideo extends PropsBase, Omit<NeverEntities, 'promoVideoFor'> {\n promoVideoFor: Podcast;\n}\n\nexport type RightsProps = PropsPodcast|PropsEmission|PropsCartouchier|PropsMix|PropsPlaylistMedia|PropsMedia;\n\nexport const useRightsIndicator = (props: PropsPodcast|PropsEmission|PropsCartouchier|PropsMix|PropsPlaylistMedia|PropsMedia) => {\n const rights = useRights();\n const { t, te } = useI18n();\n const { isAuthenticated } = storeToRefs(useAuthStore());\n\n type Rights = ReturnType<typeof useRights>;\n type ActionSegment = 'Create'|'Edit'|'Delete';\n type EntitySegment = 'Podcast'|'Emission'|'Cartouchier'|'Mix'|'PlaylistMedia'|'Media'|'PromoVideo';\n type RightMethodKey = `get${ActionSegment}${EntitySegment}Right` & keyof Rights;\n type RightEntity = Podcast|Emission|Cartouchier|Mix|PlaylistMedia|Media|boolean|undefined;\n\n const actionSegmentMap: Record<Exclude<Action, 'any'>, ActionSegment> = {\n create: 'Create',\n edit: 'Edit',\n delete: 'Delete',\n };\n\n /**\n * Whether to display the indicator\n * It is not shown on podcastmaker, or for unidentified users\n */\n const displayIndicator = computed((): boolean => {\n return !state.generalParameters.podcastmaker && isAuthenticated.value;\n });\n\n /**\n * The entity on which rights are checked\n */\n const entity = computed((): [EntitySegment, RightEntity]|null => {\n let arg: RightEntity;\n let entitySegment: EntitySegment|undefined;\n\n if ('podcast' in props && props.podcast) {\n entitySegment = 'Podcast';\n arg = props.podcast;\n } else if ('emission' in props && props.emission) {\n entitySegment = 'Emission';\n arg = props.emission;\n } else if ('cartouchier' in props && props.cartouchier) {\n entitySegment = 'Cartouchier';\n arg = props.cartouchier;\n } else if ('mix' in props && props.mix) {\n entitySegment = 'Mix';\n arg = props.mix;\n } else if ('playlistMedia' in props && props.playlistMedia) {\n entitySegment = 'PlaylistMedia';\n arg = props.playlistMedia;\n } else if ('media' in props && props.media) {\n entitySegment = 'Media';\n arg = props.media;\n } else if ('promoVideoFor' in props && props.promoVideoFor) {\n entitySegment = 'PromoVideo';\n arg = props.promoVideoFor;\n } else {\n return null;\n }\n\n return [entitySegment, arg];\n });\n\n /**\n * The current rights for the given entity\n */\n const actionRight = computed((): ActionRight => {\n const data = entity.value;\n if (!data) {\n return ActionRight.DeniedNoRight;\n }\n\n const [entitySegment, arg] = data;\n\n if (props.action === 'any') {\n const checks: ActionSegment[] = typeof arg === 'object' && arg !== null\n ? ['Create', 'Edit', 'Delete']\n : ['Create'];\n\n let best = ActionRight.DeniedNoRight;\n for (const a of checks) {\n const key = `get${a}${entitySegment}Right` as RightMethodKey;\n const r = callRightMethod(key, arg);\n if (r === ActionRight.Allowed) {\n return ActionRight.Allowed;\n }\n if (r === ActionRight.DeniedNotOwner) {\n best = ActionRight.DeniedNotOwner;\n }\n }\n return best;\n }\n\n if ((props.action === 'edit' || props.action === 'delete') && typeof arg !== 'object') {\n return ActionRight.DeniedNoRight;\n }\n\n const methodName = `get${actionSegmentMap[props.action]}${entitySegment}Right` as RightMethodKey;\n return callRightMethod(methodName, arg);\n });\n\n /** Helper for calling the method on useRights */\n function callRightMethod(key: RightMethodKey, arg: unknown): ActionRight {\n return (rights[key] as (arg?: unknown) => ActionRight)(arg);\n }\n\n const hasAccess = computed((): boolean => {\n return actionRight.value === ActionRight.Allowed;\n });\n\n const message = computed((): string => {\n const entitySegment = entity.value?.[0];\n let key: string;\n let genericKey: string;\n \n switch (actionRight.value) {\n case ActionRight.Allowed:\n return '';\n\n case ActionRight.DeniedNotOwner:\n key = `RightsIndicator - ${entitySegment} - Not owner`;\n genericKey = 'Generic - Action disabled - Not owner';\n break;\n\n case ActionRight.DeniedInsufficientScope:\n key = `RightsIndicator - ${entitySegment} - Insufficient scope`;\n genericKey = 'RightsIndicator - Generic - Insufficient scope';\n break;\n\n case ActionRight.DeniedNoRight:\n key = `RightsIndicator - ${entitySegment} - Insufficient rights`;\n genericKey = 'RightsIndicator - Generic - Insufficient rights';\n break;\n\n default:\n return 'Cannot process rights';\n }\n\n if (te(key)) {\n return t(key);\n } else {\n return t(genericKey);\n }\n });\n\n return {\n displayIndicator,\n hasAccess,\n message\n }\n};\n","<template>\n <div\n v-if=\"displayIndicator\"\n >\n <slot :id=\"elementId\" :has-access=\"hasAccess\" />\n <span v-if=\"!hasAccess\" class=\"rights-visually-hidden\">{{ message }}</span>\n <ClassicPopover\n v-if=\"!hasAccess\"\n :target=\"elementId\"\n only-mouse\n >\n {{ message }}\n </ClassicPopover>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance } from 'vue';\nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\nimport ClassicPopover from '../misc/ClassicPopover.vue';\n\nconst props = defineProps<RightsProps>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n\nconst uid = getCurrentInstance()?.uid;\n/** ID of the icon for reference by the popover */\nconst elementId = computed((): string => 'rights-wrapper-' + uid);\n</script>\n\n<style scoped lang=\"scss\">\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n","<template>\n <div\n v-if=\"displayIndicator\"\n >\n <slot :id=\"elementId\" :has-access=\"hasAccess\" />\n <span v-if=\"!hasAccess\" class=\"rights-visually-hidden\">{{ message }}</span>\n <ClassicPopover\n v-if=\"!hasAccess\"\n :target=\"elementId\"\n only-mouse\n >\n {{ message }}\n </ClassicPopover>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance } from 'vue';\nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\nimport ClassicPopover from '../misc/ClassicPopover.vue';\n\nconst props = defineProps<RightsProps>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n\nconst uid = getCurrentInstance()?.uid;\n/** ID of the icon for reference by the popover */\nconst elementId = computed((): string => 'rights-wrapper-' + uid);\n</script>\n\n<style scoped lang=\"scss\">\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RightsWrapper-nBURBTJX.mjs","names":["_openBlock","_createElementBlock","_renderSlot","_toDisplayString","_createCommentVNode","_createBlock","_withCtx","_createTextVNode","_sfc_main"],"sources":["../src/components/composable/useRightsIndicator.ts","../src/components/display/RightsWrapper.vue","../src/components/display/RightsWrapper.vue"],"sourcesContent":["import { Mix } from '../../stores/class/radio/mix';\nimport { PlaylistMedia } from '../../stores/class/radio/playlistMedia';\nimport { Podcast } from '../../stores/class/general/podcast';\nimport { Cartouchier } from '../../stores/class/cartouchier/cartouchier';\nimport { Media } from \"../../stores/class/general/media\";\nimport { computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { ActionRight, useRights } from '../composable/useRights';\nimport { state } from '../../stores/ParamSdkStore';\nimport { useAuthStore } from '../../stores/AuthStore';\nimport { storeToRefs } from 'pinia';\nimport { Emission } from '@/stores/class/general/emission';\n\ntype Action = 'create'|'edit'|'delete'|'any';\n\nexport interface PropsBase {\n /** Type of action to check */\n action: Action;\n}\n\ntype NeverEntities = {\n podcast?: never;\n emission?: never;\n cartouchier?: never;\n mix?: never;\n playlistMedia?: never;\n media?: never;\n promoVideoFor?: never;\n};\n\nexport interface PropsPodcast extends PropsBase, Omit<NeverEntities, 'podcast'> {\n podcast: Podcast|boolean;\n}\nexport interface PropsEmission extends PropsBase, Omit<NeverEntities, 'emission'> {\n emission: Emission|boolean;\n}\nexport interface PropsCartouchier extends PropsBase, Omit<NeverEntities, 'cartouchier'> {\n cartouchier: Cartouchier|boolean;\n}\nexport interface PropsMix extends PropsBase, Omit<NeverEntities, 'mix'> {\n mix: Mix|boolean;\n}\nexport interface PropsPlaylistMedia extends PropsBase, Omit<NeverEntities, 'playlistMedia'> {\n playlistMedia: PlaylistMedia|boolean;\n}\nexport interface PropsMedia extends PropsBase, Omit<NeverEntities, 'media'> {\n media: Media|boolean;\n}\nexport interface PropsPromoVideo extends PropsBase, Omit<NeverEntities, 'promoVideoFor'> {\n promoVideoFor: Podcast;\n}\n\nexport type RightsProps = PropsPodcast|PropsEmission|PropsCartouchier|PropsMix|PropsPlaylistMedia|PropsMedia;\n\nexport const useRightsIndicator = (props: PropsPodcast|PropsEmission|PropsCartouchier|PropsMix|PropsPlaylistMedia|PropsMedia) => {\n const rights = useRights();\n const { t, te } = useI18n();\n const { isAuthenticated } = storeToRefs(useAuthStore());\n\n type Rights = ReturnType<typeof useRights>;\n type ActionSegment = 'Create'|'Edit'|'Delete';\n type EntitySegment = 'Podcast'|'Emission'|'Cartouchier'|'Mix'|'PlaylistMedia'|'Media'|'PromoVideo';\n type RightMethodKey = `get${ActionSegment}${EntitySegment}Right` & keyof Rights;\n type RightEntity = Podcast|Emission|Cartouchier|Mix|PlaylistMedia|Media|boolean|undefined;\n\n const actionSegmentMap: Record<Exclude<Action, 'any'>, ActionSegment> = {\n create: 'Create',\n edit: 'Edit',\n delete: 'Delete',\n };\n\n /**\n * Whether to display the indicator\n * It is not shown on podcastmaker, or for unidentified users\n */\n const displayIndicator = computed((): boolean => {\n return !state.generalParameters.podcastmaker && isAuthenticated.value;\n });\n\n /**\n * The entity on which rights are checked\n */\n const entity = computed((): [EntitySegment, RightEntity]|null => {\n let arg: RightEntity;\n let entitySegment: EntitySegment|undefined;\n\n if ('podcast' in props && props.podcast) {\n entitySegment = 'Podcast';\n arg = props.podcast;\n } else if ('emission' in props && props.emission) {\n entitySegment = 'Emission';\n arg = props.emission;\n } else if ('cartouchier' in props && props.cartouchier) {\n entitySegment = 'Cartouchier';\n arg = props.cartouchier;\n } else if ('mix' in props && props.mix) {\n entitySegment = 'Mix';\n arg = props.mix;\n } else if ('playlistMedia' in props && props.playlistMedia) {\n entitySegment = 'PlaylistMedia';\n arg = props.playlistMedia;\n } else if ('media' in props && props.media) {\n entitySegment = 'Media';\n arg = props.media;\n } else if ('promoVideoFor' in props && props.promoVideoFor) {\n entitySegment = 'PromoVideo';\n arg = props.promoVideoFor;\n } else {\n return null;\n }\n\n return [entitySegment, arg];\n });\n\n /**\n * The current rights for the given entity\n */\n const actionRight = computed((): ActionRight => {\n const data = entity.value;\n if (!data) {\n return ActionRight.DeniedNoRight;\n }\n\n const [entitySegment, arg] = data;\n\n if (props.action === 'any') {\n const checks: ActionSegment[] = typeof arg === 'object' && arg !== null\n ? ['Create', 'Edit', 'Delete']\n : ['Create'];\n\n let best = ActionRight.DeniedNoRight;\n for (const a of checks) {\n const key = `get${a}${entitySegment}Right` as RightMethodKey;\n const r = callRightMethod(key, arg);\n if (r === ActionRight.Allowed) {\n return ActionRight.Allowed;\n }\n if (r === ActionRight.DeniedNotOwner) {\n best = ActionRight.DeniedNotOwner;\n }\n }\n return best;\n }\n\n if ((props.action === 'edit' || props.action === 'delete') && typeof arg !== 'object') {\n return ActionRight.DeniedNoRight;\n }\n\n const methodName = `get${actionSegmentMap[props.action]}${entitySegment}Right` as RightMethodKey;\n return callRightMethod(methodName, arg);\n });\n\n /** Helper for calling the method on useRights */\n function callRightMethod(key: RightMethodKey, arg: unknown): ActionRight {\n return (rights[key] as (arg?: unknown) => ActionRight)(arg);\n }\n\n const hasAccess = computed((): boolean => {\n return actionRight.value === ActionRight.Allowed;\n });\n\n const message = computed((): string => {\n const entitySegment = entity.value?.[0];\n let key: string;\n let genericKey: string;\n \n switch (actionRight.value) {\n case ActionRight.Allowed:\n return '';\n\n case ActionRight.DeniedNotOwner:\n key = `RightsIndicator - ${entitySegment} - Not owner`;\n genericKey = 'Generic - Action disabled - Not owner';\n break;\n\n case ActionRight.DeniedInsufficientScope:\n key = `RightsIndicator - ${entitySegment} - Insufficient scope`;\n genericKey = 'RightsIndicator - Generic - Insufficient scope';\n break;\n\n case ActionRight.DeniedNoRight:\n key = `RightsIndicator - ${entitySegment} - Insufficient rights`;\n genericKey = 'RightsIndicator - Generic - Insufficient rights';\n break;\n\n default:\n return 'Cannot process rights';\n }\n\n if (te(key)) {\n return t(key);\n } else {\n return t(genericKey);\n }\n });\n\n return {\n displayIndicator,\n hasAccess,\n message\n }\n};\n","<template>\n <div\n v-if=\"displayIndicator\"\n >\n <slot :id=\"elementId\" :has-access=\"hasAccess\" />\n <span v-if=\"!hasAccess\" class=\"rights-visually-hidden\">{{ message }}</span>\n <ClassicPopover\n v-if=\"!hasAccess\"\n :target=\"elementId\"\n only-mouse\n >\n {{ message }}\n </ClassicPopover>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance } from 'vue';\nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\nimport ClassicPopover from '../misc/ClassicPopover.vue';\n\nconst props = defineProps<RightsProps>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n\nconst uid = getCurrentInstance()?.uid;\n/** ID of the icon for reference by the popover */\nconst elementId = computed((): string => 'rights-wrapper-' + uid);\n</script>\n\n<style scoped lang=\"scss\">\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n","<template>\n <div\n v-if=\"displayIndicator\"\n >\n <slot :id=\"elementId\" :has-access=\"hasAccess\" />\n <span v-if=\"!hasAccess\" class=\"rights-visually-hidden\">{{ message }}</span>\n <ClassicPopover\n v-if=\"!hasAccess\"\n :target=\"elementId\"\n only-mouse\n >\n {{ message }}\n </ClassicPopover>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, getCurrentInstance } from 'vue';\nimport { RightsProps, useRightsIndicator } from '../composable/useRightsIndicator';\nimport ClassicPopover from '../misc/ClassicPopover.vue';\n\nconst props = defineProps<RightsProps>();\n\nconst { displayIndicator, hasAccess, message } = useRightsIndicator(props);\n\nconst uid = getCurrentInstance()?.uid;\n/** ID of the icon for reference by the popover */\nconst elementId = computed((): string => 'rights-wrapper-' + uid);\n</script>\n\n<style scoped lang=\"scss\">\n/** Helper class to keep the data accessible for screen readers */\n.rights-visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n</style>\n"],"mappings":";;;;;;;;;AAsDA,IAAa,sBAAsB,UAA8F;CAC7H,MAAM,SAAS,UAAU;CACzB,MAAM,EAAE,GAAG,OAAO,QAAQ;CAC1B,MAAM,EAAE,oBAAoB,YAAY,aAAa,CAAC;CAQtD,MAAM,mBAAkE;EACpE,QAAQ;EACR,MAAM;EACN,QAAQ;CACZ;;;;;CAMA,MAAM,mBAAmB,eAAwB;EAC7C,OAAO,CAAC,MAAM,kBAAkB,gBAAgB,gBAAgB;CACpE,CAAC;;;;CAKD,MAAM,SAAS,eAAkD;EAC7D,IAAI;EACJ,IAAI;EAEJ,IAAI,aAAa,SAAS,MAAM,SAAS;GACrC,gBAAgB;GAChB,MAAM,MAAM;EAChB,OAAO,IAAI,cAAc,SAAS,MAAM,UAAU;GAC9C,gBAAgB;GAChB,MAAM,MAAM;EAChB,OAAO,IAAI,iBAAiB,SAAS,MAAM,aAAa;GACpD,gBAAgB;GAChB,MAAM,MAAM;EAChB,OAAO,IAAI,SAAS,SAAS,MAAM,KAAK;GACpC,gBAAgB;GAChB,MAAM,MAAM;EAChB,OAAO,IAAI,mBAAmB,SAAS,MAAM,eAAe;GACxD,gBAAgB;GAChB,MAAM,MAAM;EAChB,OAAO,IAAI,WAAW,SAAS,MAAM,OAAO;GACxC,gBAAgB;GAChB,MAAM,MAAM;EAChB,OAAO,IAAI,mBAAmB,SAAS,MAAM,eAAe;GACxD,gBAAgB;GAChB,MAAM,MAAM;EAChB,OACI,OAAO;EAGX,OAAO,CAAC,eAAe,GAAG;CAC9B,CAAC;;;;CAKD,MAAM,cAAc,eAA4B;EAC5C,MAAM,OAAO,OAAO;EACpB,IAAI,CAAC,MACD,OAAO,YAAY;EAGvB,MAAM,CAAC,eAAe,OAAO;EAE7B,IAAI,MAAM,WAAW,OAAO;GACxB,MAAM,SAA0B,OAAO,QAAQ,YAAY,QAAQ,OAC7D;IAAC;IAAU;IAAQ;GAAQ,IAC3B,CAAC,QAAQ;GAEf,IAAI,OAAO,YAAY;GACvB,KAAK,MAAM,KAAK,QAAQ;IAEpB,MAAM,IAAI,gBAAgB,MADR,IAAI,cAAc,QACL,GAAG;IAClC,IAAI,MAAM,YAAY,SAClB,OAAO,YAAY;IAEvB,IAAI,MAAM,YAAY,gBAClB,OAAO,YAAY;GAE3B;GACA,OAAO;EACX;EAEA,KAAK,MAAM,WAAW,UAAU,MAAM,WAAW,aAAa,OAAO,QAAQ,UACzE,OAAO,YAAY;EAIvB,OAAO,gBAAgB,MADE,iBAAiB,MAAM,UAAU,cAAc,QACrC,GAAG;CAC1C,CAAC;;CAGD,SAAS,gBAAgB,KAAqB,KAA2B;EACrE,OAAQ,OAAO,IAAI,CAAoC,GAAG;CAC9D;CAyCA,OAAO;EACH;EACA,WAzCc,eAAwB;GACtC,OAAO,YAAY,UAAU,YAAY;EAC7C,CAuCI;EACA,SAtCY,eAAuB;GACnC,MAAM,gBAAgB,OAAO,QAAQ;GACrC,IAAI;GACJ,IAAI;GAEJ,QAAQ,YAAY,OAApB;IACA,KAAK,YAAY,SACb,OAAO;IAEX,KAAK,YAAY;KACb,MAAM,qBAAqB,cAAc;KACzC,aAAa;KACb;IAEJ,KAAK,YAAY;KACb,MAAM,qBAAqB,cAAc;KACzC,aAAa;KACb;IAEJ,KAAK,YAAY;KACb,MAAM,qBAAqB,cAAc;KACzC,aAAa;KACb;IAEJ,SACI,OAAO;GACX;GAEA,IAAI,GAAG,GAAG,GACN,OAAO,EAAE,GAAG;QAEZ,OAAO,EAAE,UAAU;EAE3B,CAKI;CACJ;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECpLA,MAAM,QAAQ;EAEd,MAAM,EAAE,kBAAkB,WAAW,YAAY,mBAAmB,KAAK;EAEzE,MAAM,MAAM,mBAAmB,CAAC,EAAE;;;;;;;GAEhB,WAAA,eAAuB,oBAAoB,GAAA;;;;;;;;;;;;;;;;CCtB7B,OAAM;;;CAHxB,OAAA,OAAA,oBADVA,UAAA,GAAAC,mBAYM,OAAA,YAAA;EATFC,WAAgD,KAAA,QAAA,WAAA;GAAzC,IAAI,OAAA;GAAY,WAAY,OAAA;;EACtB,CAAA,OAAA,aAAbF,UAAA,GAAAC,mBAA2E,QAA3E,YAA2EE,gBAAjB,OAAA,OAAO,GAAA,CAAA,KAAAC,mBAAA,QAAA,IAAA;EAEtD,CAAA,OAAA,aADXJ,UAAA,GAAAK,YAMiB,OAAA,mBAAA;;GAJZ,QAAQ,OAAA;GACT,cAAA;;GAEA,SAAAC,cAAa,CAAVC,gBAAAJ,gBAAA,OAAA,OAAO,GAAA,CAAA,CAAA,CAAA"}
@@ -29,7 +29,7 @@ var g = { class: "d-flex align-items-center mb-2" }, _ = { class: "ms-3 flex-shr
29
29
  "updateRubriquage"
30
30
  ],
31
31
  setup(l, { emit: v }) {
32
- let y = c(() => import("./RubriqueChooser-C33LorHa.mjs")), b = l, x = v, S = d(!1), { t: C } = m(), w = n(() => b.rubriquageDisplay.map((e) => ({
32
+ let y = c(() => import("./RubriqueChooser-CNGn8LcP.mjs")), b = l, x = v, S = d(!1), { t: C } = m(), w = n(() => b.rubriquageDisplay.map((e) => ({
33
33
  title: e.title,
34
34
  value: e.rubriquageId
35
35
  })));