@getontime/cli 4.4.0 → 4.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/client/assets/{Backstage-ScLTYJAt.js → Backstage-BdrcXNr9.js} +2 -2
  2. package/client/assets/Backstage-BdrcXNr9.js.br +0 -0
  3. package/client/assets/Backstage-BdrcXNr9.js.gz +0 -0
  4. package/client/assets/{Backstage-ScLTYJAt.js.map → Backstage-BdrcXNr9.js.map} +1 -1
  5. package/client/assets/{Countdown-DA_Lph2k.js → Countdown-DQM2ppPg.js} +2 -2
  6. package/client/assets/Countdown-DQM2ppPg.js.br +0 -0
  7. package/client/assets/Countdown-DQM2ppPg.js.gz +0 -0
  8. package/client/assets/{Countdown-DA_Lph2k.js.map → Countdown-DQM2ppPg.js.map} +1 -1
  9. package/client/assets/{CuesheetTable-C7hP6tMi.js → CuesheetTable-B5LQVh5m.js} +2 -2
  10. package/client/assets/CuesheetTable-B5LQVh5m.js.br +0 -0
  11. package/client/assets/CuesheetTable-B5LQVh5m.js.gz +0 -0
  12. package/client/assets/{CuesheetTable-C7hP6tMi.js.map → CuesheetTable-B5LQVh5m.js.map} +1 -1
  13. package/client/assets/CustomTranslationModal-CML7Vsot.js +2 -0
  14. package/client/assets/CustomTranslationModal-CML7Vsot.js.br +0 -0
  15. package/client/assets/CustomTranslationModal-CML7Vsot.js.gz +0 -0
  16. package/client/assets/{CustomTranslationModal-0ROtCxPC.js.map → CustomTranslationModal-CML7Vsot.js.map} +1 -1
  17. package/client/assets/DelayIndicator-DKS6mZdB.js +2 -0
  18. package/client/assets/DelayIndicator-DKS6mZdB.js.br +0 -0
  19. package/client/assets/DelayIndicator-DKS6mZdB.js.gz +0 -0
  20. package/client/assets/DelayIndicator-DKS6mZdB.js.map +1 -0
  21. package/client/assets/{EditorFeatureWrapper-B_KH_YqU.js → EditorFeatureWrapper-C1vLQxiy.js} +2 -2
  22. package/client/assets/EditorFeatureWrapper-C1vLQxiy.js.br +0 -0
  23. package/client/assets/EditorFeatureWrapper-C1vLQxiy.js.gz +0 -0
  24. package/client/assets/{EditorFeatureWrapper-B_KH_YqU.js.map → EditorFeatureWrapper-C1vLQxiy.js.map} +1 -1
  25. package/client/assets/{EditorUtils-BxN0w0-D.js → EditorUtils-BLcTuWz1.js} +2 -2
  26. package/client/assets/EditorUtils-BLcTuWz1.js.br +0 -0
  27. package/client/assets/EditorUtils-BLcTuWz1.js.gz +0 -0
  28. package/client/assets/{EditorUtils-BxN0w0-D.js.map → EditorUtils-BLcTuWz1.js.map} +1 -1
  29. package/client/assets/{EmptyPage-CcO33dlE.js → EmptyPage-CYVrjOvI.js} +2 -2
  30. package/client/assets/EmptyPage-CYVrjOvI.js.br +0 -0
  31. package/client/assets/EmptyPage-CYVrjOvI.js.gz +0 -0
  32. package/client/assets/{EmptyPage-CcO33dlE.js.map → EmptyPage-CYVrjOvI.js.map} +1 -1
  33. package/client/assets/{FollowButton-DJCtYYXt.js → FollowButton-DcSbb4R_.js} +2 -2
  34. package/client/assets/FollowButton-DcSbb4R_.js.br +0 -0
  35. package/client/assets/FollowButton-DcSbb4R_.js.gz +0 -0
  36. package/client/assets/{FollowButton-DJCtYYXt.js.map → FollowButton-DcSbb4R_.js.map} +1 -1
  37. package/client/assets/{MessageControlExport-DGo2ZNMw.js → MessageControlExport-BgT9JaXk.js} +3 -3
  38. package/client/assets/MessageControlExport-BgT9JaXk.js.br +0 -0
  39. package/client/assets/MessageControlExport-BgT9JaXk.js.gz +0 -0
  40. package/client/assets/{MessageControlExport-DGo2ZNMw.js.map → MessageControlExport-BgT9JaXk.js.map} +1 -1
  41. package/client/assets/{MultiPartProgressBar-IIU35-x9.js → MultiPartProgressBar-W2a-JWPY.js} +2 -2
  42. package/client/assets/MultiPartProgressBar-W2a-JWPY.js.br +0 -0
  43. package/client/assets/MultiPartProgressBar-W2a-JWPY.js.gz +0 -0
  44. package/client/assets/{MultiPartProgressBar-IIU35-x9.js.map → MultiPartProgressBar-W2a-JWPY.js.map} +1 -1
  45. package/client/assets/{OperatorExport-C-KafSVE.js → OperatorExport-CbWojpp6.js} +2 -2
  46. package/client/assets/OperatorExport-CbWojpp6.js.br +0 -0
  47. package/client/assets/OperatorExport-CbWojpp6.js.gz +0 -0
  48. package/client/assets/{OperatorExport-C-KafSVE.js.map → OperatorExport-CbWojpp6.js.map} +1 -1
  49. package/client/assets/{OverviewWrapper-B6AeBRb6.js → OverviewWrapper-B2i8d3rt.js} +2 -2
  50. package/client/assets/OverviewWrapper-B2i8d3rt.js.br +0 -0
  51. package/client/assets/OverviewWrapper-B2i8d3rt.js.gz +0 -0
  52. package/client/assets/{OverviewWrapper-B6AeBRb6.js.map → OverviewWrapper-B2i8d3rt.js.map} +1 -1
  53. package/client/assets/{PipHost-BueqKsmJ.js → PipHost-Dz2oy7XG.js} +2 -2
  54. package/client/assets/PipHost-Dz2oy7XG.js.br +0 -0
  55. package/client/assets/PipHost-Dz2oy7XG.js.gz +0 -0
  56. package/client/assets/{PipHost-BueqKsmJ.js.map → PipHost-Dz2oy7XG.js.map} +1 -1
  57. package/client/assets/{ProjectInfo-DiD9lzzx.js → ProjectInfo-BR_7Hp5u.js} +2 -2
  58. package/client/assets/ProjectInfo-BR_7Hp5u.js.br +0 -0
  59. package/client/assets/ProjectInfo-BR_7Hp5u.js.gz +0 -0
  60. package/client/assets/{ProjectInfo-DiD9lzzx.js.map → ProjectInfo-BR_7Hp5u.js.map} +1 -1
  61. package/client/assets/{ProtectRoute-CcDK6JVA.js → ProtectRoute-Bxq6q7ba.js} +2 -2
  62. package/client/assets/ProtectRoute-Bxq6q7ba.js.br +0 -0
  63. package/client/assets/ProtectRoute-Bxq6q7ba.js.gz +0 -0
  64. package/client/assets/{ProtectRoute-CcDK6JVA.js.map → ProtectRoute-Bxq6q7ba.js.map} +1 -1
  65. package/client/assets/ProtectedCuesheet-C7AqD2dy.js +2 -0
  66. package/client/assets/ProtectedCuesheet-C7AqD2dy.js.br +0 -0
  67. package/client/assets/ProtectedCuesheet-C7AqD2dy.js.gz +0 -0
  68. package/client/assets/{ProtectedCuesheet-D19INqhI.js.map → ProtectedCuesheet-C7AqD2dy.js.map} +1 -1
  69. package/client/assets/ProtectedEditor-CsfvVyOU.js +3 -0
  70. package/client/assets/ProtectedEditor-CsfvVyOU.js.br +0 -0
  71. package/client/assets/ProtectedEditor-CsfvVyOU.js.gz +0 -0
  72. package/client/assets/ProtectedEditor-CsfvVyOU.js.map +1 -0
  73. package/client/assets/RundownExport-25orDQIW.js +2 -0
  74. package/client/assets/RundownExport-25orDQIW.js.br +0 -0
  75. package/client/assets/RundownExport-25orDQIW.js.gz +0 -0
  76. package/client/assets/RundownExport-25orDQIW.js.map +1 -0
  77. package/client/assets/RundownExport-CzaSrbaj.css +1 -0
  78. package/client/assets/RundownExport-CzaSrbaj.css.br +0 -0
  79. package/client/assets/RundownExport-CzaSrbaj.css.gz +0 -0
  80. package/client/assets/Select-BnGTAeXJ.js +2 -0
  81. package/client/assets/Select-BnGTAeXJ.js.br +0 -0
  82. package/client/assets/Select-BnGTAeXJ.js.gz +0 -0
  83. package/client/assets/{Select-B3zdv0Ng.js.map → Select-BnGTAeXJ.js.map} +1 -1
  84. package/client/assets/{Studio-DS_uXtgn.js → Studio-BK2Klo_K.js} +2 -2
  85. package/client/assets/Studio-BK2Klo_K.js.br +0 -0
  86. package/client/assets/Studio-BK2Klo_K.js.gz +0 -0
  87. package/client/assets/{Studio-DS_uXtgn.js.map → Studio-BK2Klo_K.js.map} +1 -1
  88. package/client/assets/StyleEditor-DIHQ1PUV.js +2 -0
  89. package/client/assets/StyleEditor-DIHQ1PUV.js.br +0 -0
  90. package/client/assets/StyleEditor-DIHQ1PUV.js.gz +0 -0
  91. package/client/assets/{StyleEditor-DcyJgmAF.js.map → StyleEditor-DIHQ1PUV.js.map} +1 -1
  92. package/client/assets/{SuperscriptPeriod-DswX2aei.js → SuperscriptPeriod-EEedc9rG.js} +2 -2
  93. package/client/assets/SuperscriptPeriod-EEedc9rG.js.br +0 -0
  94. package/client/assets/SuperscriptPeriod-EEedc9rG.js.gz +0 -0
  95. package/client/assets/{SuperscriptPeriod-DswX2aei.js.map → SuperscriptPeriod-EEedc9rG.js.map} +1 -1
  96. package/client/assets/{SuperscriptTime-COS4JWHJ.js → SuperscriptTime-BVanhNvd.js} +2 -2
  97. package/client/assets/SuperscriptTime-BVanhNvd.js.br +0 -0
  98. package/client/assets/SuperscriptTime-BVanhNvd.js.gz +0 -0
  99. package/client/assets/{SuperscriptTime-COS4JWHJ.js.map → SuperscriptTime-BVanhNvd.js.map} +1 -1
  100. package/client/assets/SwatchPicker-Ckpchvjo.js +2 -0
  101. package/client/assets/SwatchPicker-Ckpchvjo.js.br +0 -0
  102. package/client/assets/SwatchPicker-Ckpchvjo.js.gz +0 -0
  103. package/client/assets/{SwatchPicker-DPyJv7aS.js.map → SwatchPicker-Ckpchvjo.js.map} +1 -1
  104. package/client/assets/TimeElements-CYIgGk0T.js +2 -0
  105. package/client/assets/TimeElements-CYIgGk0T.js.br +0 -0
  106. package/client/assets/TimeElements-CYIgGk0T.js.gz +0 -0
  107. package/client/assets/{TimeElements-8rNLGU60.js.map → TimeElements-CYIgGk0T.js.map} +1 -1
  108. package/client/assets/{TimeInput-OX4LMRQl.js → TimeInput-Cwl9vLWA.js} +2 -2
  109. package/client/assets/TimeInput-Cwl9vLWA.js.br +0 -0
  110. package/client/assets/TimeInput-Cwl9vLWA.js.gz +0 -0
  111. package/client/assets/{TimeInput-OX4LMRQl.js.map → TimeInput-Cwl9vLWA.js.map} +1 -1
  112. package/client/assets/{TimelinePage-7kRpUl6P.js → TimelinePage-D4QNdk-Z.js} +2 -2
  113. package/client/assets/TimelinePage-D4QNdk-Z.js.br +0 -0
  114. package/client/assets/TimelinePage-D4QNdk-Z.js.gz +0 -0
  115. package/client/assets/{TimelinePage-7kRpUl6P.js.map → TimelinePage-D4QNdk-Z.js.map} +1 -1
  116. package/client/assets/{Timer-Bg9pVhup.js → Timer-BJQKNHfo.js} +2 -2
  117. package/client/assets/Timer-BJQKNHfo.js.br +0 -0
  118. package/client/assets/Timer-BJQKNHfo.js.gz +0 -0
  119. package/client/assets/{Timer-Bg9pVhup.js.map → Timer-BJQKNHfo.js.map} +1 -1
  120. package/client/assets/TimerControlExport-Ba1vifNg.js +2 -0
  121. package/client/assets/TimerControlExport-Ba1vifNg.js.br +0 -0
  122. package/client/assets/TimerControlExport-Ba1vifNg.js.gz +0 -0
  123. package/client/assets/{TimerControlExport-BNfZ99Im.js.map → TimerControlExport-Ba1vifNg.js.map} +1 -1
  124. package/client/assets/TimerDisplay-tVcUk9j3.js +2 -0
  125. package/client/assets/TimerDisplay-tVcUk9j3.js.br +0 -0
  126. package/client/assets/TimerDisplay-tVcUk9j3.js.gz +0 -0
  127. package/client/assets/{TimerDisplay-DQQ7sMDc.js.map → TimerDisplay-tVcUk9j3.js.map} +1 -1
  128. package/client/assets/{TitleCard-De0WhlN2.js → TitleCard-BNjv58eq.js} +2 -2
  129. package/client/assets/TitleCard-BNjv58eq.js.br +0 -0
  130. package/client/assets/TitleCard-BNjv58eq.js.gz +0 -0
  131. package/client/assets/{TitleCard-De0WhlN2.js.map → TitleCard-BNjv58eq.js.map} +1 -1
  132. package/client/assets/Tooltip-DZJ7u9gm.js +2 -0
  133. package/client/assets/Tooltip-DZJ7u9gm.js.br +4 -0
  134. package/client/assets/Tooltip-DZJ7u9gm.js.gz +0 -0
  135. package/client/assets/{Tooltip-B4PEP32j.js.map → Tooltip-DZJ7u9gm.js.map} +1 -1
  136. package/client/assets/{ViewLogo-CHqiH4C0.js → ViewLogo-2I7w5Yms.js} +2 -2
  137. package/client/assets/ViewLogo-2I7w5Yms.js.br +0 -0
  138. package/client/assets/ViewLogo-2I7w5Yms.js.gz +0 -0
  139. package/client/assets/{ViewLogo-CHqiH4C0.js.map → ViewLogo-2I7w5Yms.js.map} +1 -1
  140. package/client/assets/{ViewParamsEditor-BHIK3qtx.js → ViewParamsEditor-BX2RM8sx.js} +2 -2
  141. package/client/assets/ViewParamsEditor-BX2RM8sx.js.br +0 -0
  142. package/client/assets/ViewParamsEditor-BX2RM8sx.js.gz +0 -0
  143. package/client/assets/{ViewParamsEditor-BHIK3qtx.js.map → ViewParamsEditor-BX2RM8sx.js.map} +1 -1
  144. package/client/assets/{editorSettings-VcitNPq1.js → editorSettings-_x6YKRfR.js} +2 -2
  145. package/client/assets/editorSettings-_x6YKRfR.js.br +6 -0
  146. package/client/assets/editorSettings-_x6YKRfR.js.gz +0 -0
  147. package/client/assets/{editorSettings-VcitNPq1.js.map → editorSettings-_x6YKRfR.js.map} +1 -1
  148. package/client/assets/{getProgress-mRMYlU96.js → getProgress-ZUTmCn_v.js} +2 -2
  149. package/client/assets/getProgress-ZUTmCn_v.js.br +0 -0
  150. package/client/assets/getProgress-ZUTmCn_v.js.gz +0 -0
  151. package/client/assets/{getProgress-mRMYlU96.js.map → getProgress-ZUTmCn_v.js.map} +1 -1
  152. package/client/assets/index-Dm-4OTmY.js +3 -0
  153. package/client/assets/index-Dm-4OTmY.js.br +0 -0
  154. package/client/assets/index-Dm-4OTmY.js.gz +0 -0
  155. package/client/assets/index-Dm-4OTmY.js.map +1 -0
  156. package/client/assets/{offset-Bs6CY1IK.js → offset-VthsmtrO.js} +2 -2
  157. package/client/assets/offset-VthsmtrO.js.br +0 -0
  158. package/client/assets/offset-VthsmtrO.js.gz +0 -0
  159. package/client/assets/{offset-Bs6CY1IK.js.map → offset-VthsmtrO.js.map} +1 -1
  160. package/client/assets/{parseUserTime-CI7s8pYc.js → parseUserTime-sZbEBi61.js} +2 -2
  161. package/client/assets/parseUserTime-sZbEBi61.js.br +0 -0
  162. package/client/assets/parseUserTime-sZbEBi61.js.gz +0 -0
  163. package/client/assets/{parseUserTime-CI7s8pYc.js.map → parseUserTime-sZbEBi61.js.map} +1 -1
  164. package/client/assets/{playbackstate-DisgQbHM.js → playbackstate-Dl_ZJABT.js} +2 -2
  165. package/client/assets/playbackstate-Dl_ZJABT.js.br +0 -0
  166. package/client/assets/playbackstate-Dl_ZJABT.js.gz +0 -0
  167. package/client/assets/{playbackstate-DisgQbHM.js.map → playbackstate-Dl_ZJABT.js.map} +1 -1
  168. package/client/assets/{presentation.utils-Bv3PuMWv.js → presentation.utils-Z61KykAH.js} +2 -2
  169. package/client/assets/presentation.utils-Z61KykAH.js.br +0 -0
  170. package/client/assets/presentation.utils-Z61KykAH.js.gz +0 -0
  171. package/client/assets/{presentation.utils-Bv3PuMWv.js.map → presentation.utils-Z61KykAH.js.map} +1 -1
  172. package/client/assets/rundownUtils-CXZRD6yP.js +2 -0
  173. package/client/assets/rundownUtils-CXZRD6yP.js.br +0 -0
  174. package/client/assets/rundownUtils-CXZRD6yP.js.gz +0 -0
  175. package/client/assets/rundownUtils-CXZRD6yP.js.map +1 -0
  176. package/client/assets/timer.utils-B4bvsns3.js +2 -0
  177. package/client/assets/timer.utils-B4bvsns3.js.br +0 -0
  178. package/client/assets/timer.utils-B4bvsns3.js.gz +0 -0
  179. package/client/assets/{timer.utils-P25ngopd.js.map → timer.utils-B4bvsns3.js.map} +1 -1
  180. package/client/assets/useCustomFields-BBE4LBBr.js +2 -0
  181. package/client/assets/useCustomFields-BBE4LBBr.js.br +0 -0
  182. package/client/assets/useCustomFields-BBE4LBBr.js.gz +0 -0
  183. package/client/assets/useCustomFields-BBE4LBBr.js.map +1 -0
  184. package/client/assets/useEventSelection-Bpbu89c7.js +2 -0
  185. package/client/assets/useEventSelection-Bpbu89c7.js.br +0 -0
  186. package/client/assets/useEventSelection-Bpbu89c7.js.gz +0 -0
  187. package/client/assets/useEventSelection-Bpbu89c7.js.map +1 -0
  188. package/client/assets/useProjectData-C110zIXC.js +2 -0
  189. package/client/assets/useProjectData-C110zIXC.js.br +0 -0
  190. package/client/assets/useProjectData-C110zIXC.js.gz +0 -0
  191. package/client/assets/useProjectData-C110zIXC.js.map +1 -0
  192. package/client/assets/useReport-DqSBq4MG.js +2 -0
  193. package/client/assets/useReport-DqSBq4MG.js.br +0 -0
  194. package/client/assets/useReport-DqSBq4MG.js.gz +0 -0
  195. package/client/assets/useReport-DqSBq4MG.js.map +1 -0
  196. package/client/assets/useRundown-DAo6huE4.js +2 -0
  197. package/client/assets/useRundown-DAo6huE4.js.br +0 -0
  198. package/client/assets/useRundown-DAo6huE4.js.gz +0 -0
  199. package/client/assets/useRundown-DAo6huE4.js.map +1 -0
  200. package/client/assets/{useSelectAndRevealEntry-CzSIOtzH.js → useSelectAndRevealEntry-DTg0hmxA.js} +2 -2
  201. package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.br +0 -0
  202. package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.gz +0 -0
  203. package/client/assets/{useSelectAndRevealEntry-CzSIOtzH.js.map → useSelectAndRevealEntry-DTg0hmxA.js.map} +1 -1
  204. package/client/assets/{useWindowTitle-Cl1AVD9_.js → useWindowTitle-DM8dIp8L.js} +2 -2
  205. package/client/assets/useWindowTitle-DM8dIp8L.js.br +0 -0
  206. package/client/assets/useWindowTitle-DM8dIp8L.js.gz +0 -0
  207. package/client/assets/{useWindowTitle-Cl1AVD9_.js.map → useWindowTitle-DM8dIp8L.js.map} +1 -1
  208. package/client/assets/validateEvent-GnPt-e9-.js +2 -0
  209. package/client/assets/validateEvent-GnPt-e9-.js.br +0 -0
  210. package/client/assets/validateEvent-GnPt-e9-.js.gz +0 -0
  211. package/client/assets/{validateEvent-DhFtLvz_.js.map → validateEvent-GnPt-e9-.js.map} +1 -1
  212. package/client/assets/{vendor-dQa48psh.js → vendor-BKUJ0_Du.js} +12 -12
  213. package/client/assets/vendor-BKUJ0_Du.js.br +0 -0
  214. package/client/assets/vendor-BKUJ0_Du.js.gz +0 -0
  215. package/client/assets/{vendor-dQa48psh.js.map → vendor-BKUJ0_Du.js.map} +1 -1
  216. package/client/assets/{viewLoader.utils-ndDejZHN.js → viewLoader.utils-4lL4PiNI.js} +2 -2
  217. package/client/assets/viewLoader.utils-4lL4PiNI.js.br +0 -0
  218. package/client/assets/viewLoader.utils-4lL4PiNI.js.gz +0 -0
  219. package/client/assets/{viewLoader.utils-ndDejZHN.js.map → viewLoader.utils-4lL4PiNI.js.map} +1 -1
  220. package/client/assets/{viewUtils-rcOl1-o8.js → viewUtils-29a3Mmiu.js} +2 -2
  221. package/client/assets/viewUtils-29a3Mmiu.js.br +0 -0
  222. package/client/assets/viewUtils-29a3Mmiu.js.gz +0 -0
  223. package/client/assets/{viewUtils-rcOl1-o8.js.map → viewUtils-29a3Mmiu.js.map} +1 -1
  224. package/client/index.html +2 -2
  225. package/package.json +1 -1
  226. package/server/index.cjs +87 -87
  227. package/client/assets/Backstage-ScLTYJAt.js.br +0 -0
  228. package/client/assets/Backstage-ScLTYJAt.js.gz +0 -0
  229. package/client/assets/Countdown-DA_Lph2k.js.br +0 -0
  230. package/client/assets/Countdown-DA_Lph2k.js.gz +0 -0
  231. package/client/assets/CuesheetTable-C7hP6tMi.js.br +0 -0
  232. package/client/assets/CuesheetTable-C7hP6tMi.js.gz +0 -0
  233. package/client/assets/CustomTranslationModal-0ROtCxPC.js +0 -2
  234. package/client/assets/CustomTranslationModal-0ROtCxPC.js.br +0 -0
  235. package/client/assets/CustomTranslationModal-0ROtCxPC.js.gz +0 -0
  236. package/client/assets/DelayIndicator-OEjcqoIx.js +0 -2
  237. package/client/assets/DelayIndicator-OEjcqoIx.js.br +0 -0
  238. package/client/assets/DelayIndicator-OEjcqoIx.js.gz +0 -0
  239. package/client/assets/DelayIndicator-OEjcqoIx.js.map +0 -1
  240. package/client/assets/EditorFeatureWrapper-B_KH_YqU.js.br +0 -0
  241. package/client/assets/EditorFeatureWrapper-B_KH_YqU.js.gz +0 -0
  242. package/client/assets/EditorUtils-BxN0w0-D.js.br +0 -0
  243. package/client/assets/EditorUtils-BxN0w0-D.js.gz +0 -0
  244. package/client/assets/EmptyPage-CcO33dlE.js.br +0 -0
  245. package/client/assets/EmptyPage-CcO33dlE.js.gz +0 -0
  246. package/client/assets/FollowButton-DJCtYYXt.js.br +0 -0
  247. package/client/assets/FollowButton-DJCtYYXt.js.gz +0 -0
  248. package/client/assets/MessageControlExport-DGo2ZNMw.js.br +0 -0
  249. package/client/assets/MessageControlExport-DGo2ZNMw.js.gz +0 -0
  250. package/client/assets/MultiPartProgressBar-IIU35-x9.js.br +0 -0
  251. package/client/assets/MultiPartProgressBar-IIU35-x9.js.gz +0 -0
  252. package/client/assets/OperatorExport-C-KafSVE.js.br +0 -0
  253. package/client/assets/OperatorExport-C-KafSVE.js.gz +0 -0
  254. package/client/assets/OverviewWrapper-B6AeBRb6.js.br +0 -0
  255. package/client/assets/OverviewWrapper-B6AeBRb6.js.gz +0 -0
  256. package/client/assets/PipHost-BueqKsmJ.js.br +0 -0
  257. package/client/assets/PipHost-BueqKsmJ.js.gz +0 -0
  258. package/client/assets/ProjectInfo-DiD9lzzx.js.br +0 -0
  259. package/client/assets/ProjectInfo-DiD9lzzx.js.gz +0 -0
  260. package/client/assets/ProtectRoute-CcDK6JVA.js.br +0 -0
  261. package/client/assets/ProtectRoute-CcDK6JVA.js.gz +0 -0
  262. package/client/assets/ProtectedCuesheet-D19INqhI.js +0 -2
  263. package/client/assets/ProtectedCuesheet-D19INqhI.js.br +0 -0
  264. package/client/assets/ProtectedCuesheet-D19INqhI.js.gz +0 -0
  265. package/client/assets/ProtectedEditor-BVabJfIz.js +0 -3
  266. package/client/assets/ProtectedEditor-BVabJfIz.js.br +0 -0
  267. package/client/assets/ProtectedEditor-BVabJfIz.js.gz +0 -0
  268. package/client/assets/ProtectedEditor-BVabJfIz.js.map +0 -1
  269. package/client/assets/RundownEntry-C5kdIHbb.js +0 -2
  270. package/client/assets/RundownEntry-C5kdIHbb.js.br +0 -0
  271. package/client/assets/RundownEntry-C5kdIHbb.js.gz +0 -0
  272. package/client/assets/RundownEntry-C5kdIHbb.js.map +0 -1
  273. package/client/assets/RundownEntry-jE09YkV2.css +0 -1
  274. package/client/assets/RundownEntry-jE09YkV2.css.br +0 -0
  275. package/client/assets/RundownEntry-jE09YkV2.css.gz +0 -0
  276. package/client/assets/RundownExport-BFn7H24P.css +0 -1
  277. package/client/assets/RundownExport-BFn7H24P.css.br +0 -0
  278. package/client/assets/RundownExport-BFn7H24P.css.gz +0 -0
  279. package/client/assets/RundownExport-DhzzqPCD.js +0 -3
  280. package/client/assets/RundownExport-DhzzqPCD.js.br +0 -0
  281. package/client/assets/RundownExport-DhzzqPCD.js.gz +0 -0
  282. package/client/assets/RundownExport-DhzzqPCD.js.map +0 -1
  283. package/client/assets/Select-B3zdv0Ng.js +0 -2
  284. package/client/assets/Select-B3zdv0Ng.js.br +0 -0
  285. package/client/assets/Select-B3zdv0Ng.js.gz +0 -0
  286. package/client/assets/Studio-DS_uXtgn.js.br +0 -0
  287. package/client/assets/Studio-DS_uXtgn.js.gz +0 -0
  288. package/client/assets/StyleEditor-DcyJgmAF.js +0 -2
  289. package/client/assets/StyleEditor-DcyJgmAF.js.br +0 -0
  290. package/client/assets/StyleEditor-DcyJgmAF.js.gz +0 -0
  291. package/client/assets/SuperscriptPeriod-DswX2aei.js.br +0 -0
  292. package/client/assets/SuperscriptPeriod-DswX2aei.js.gz +0 -0
  293. package/client/assets/SuperscriptTime-COS4JWHJ.js.br +0 -0
  294. package/client/assets/SuperscriptTime-COS4JWHJ.js.gz +0 -0
  295. package/client/assets/SwatchPicker-DPyJv7aS.js +0 -2
  296. package/client/assets/SwatchPicker-DPyJv7aS.js.br +0 -0
  297. package/client/assets/SwatchPicker-DPyJv7aS.js.gz +0 -0
  298. package/client/assets/TimeElements-8rNLGU60.js +0 -2
  299. package/client/assets/TimeElements-8rNLGU60.js.br +0 -0
  300. package/client/assets/TimeElements-8rNLGU60.js.gz +0 -0
  301. package/client/assets/TimeInput-OX4LMRQl.js.br +0 -0
  302. package/client/assets/TimeInput-OX4LMRQl.js.gz +0 -0
  303. package/client/assets/TimelinePage-7kRpUl6P.js.br +0 -0
  304. package/client/assets/TimelinePage-7kRpUl6P.js.gz +0 -0
  305. package/client/assets/Timer-Bg9pVhup.js.br +0 -0
  306. package/client/assets/Timer-Bg9pVhup.js.gz +0 -0
  307. package/client/assets/TimerControlExport-BNfZ99Im.js +0 -2
  308. package/client/assets/TimerControlExport-BNfZ99Im.js.br +0 -0
  309. package/client/assets/TimerControlExport-BNfZ99Im.js.gz +0 -0
  310. package/client/assets/TimerDisplay-DQQ7sMDc.js +0 -2
  311. package/client/assets/TimerDisplay-DQQ7sMDc.js.br +0 -0
  312. package/client/assets/TimerDisplay-DQQ7sMDc.js.gz +0 -0
  313. package/client/assets/TitleCard-De0WhlN2.js.br +0 -0
  314. package/client/assets/TitleCard-De0WhlN2.js.gz +0 -0
  315. package/client/assets/Tooltip-B4PEP32j.js +0 -2
  316. package/client/assets/Tooltip-B4PEP32j.js.br +0 -0
  317. package/client/assets/Tooltip-B4PEP32j.js.gz +0 -0
  318. package/client/assets/ViewLogo-CHqiH4C0.js.br +0 -0
  319. package/client/assets/ViewLogo-CHqiH4C0.js.gz +0 -0
  320. package/client/assets/ViewParamsEditor-BHIK3qtx.js.br +0 -0
  321. package/client/assets/ViewParamsEditor-BHIK3qtx.js.gz +0 -0
  322. package/client/assets/editorSettings-VcitNPq1.js.br +0 -0
  323. package/client/assets/editorSettings-VcitNPq1.js.gz +0 -0
  324. package/client/assets/getProgress-mRMYlU96.js.br +0 -0
  325. package/client/assets/getProgress-mRMYlU96.js.gz +0 -0
  326. package/client/assets/index-DYkg-xOk.js +0 -3
  327. package/client/assets/index-DYkg-xOk.js.br +0 -0
  328. package/client/assets/index-DYkg-xOk.js.gz +0 -0
  329. package/client/assets/index-DYkg-xOk.js.map +0 -1
  330. package/client/assets/offset-Bs6CY1IK.js.br +0 -3
  331. package/client/assets/offset-Bs6CY1IK.js.gz +0 -0
  332. package/client/assets/parseUserTime-CI7s8pYc.js.br +0 -0
  333. package/client/assets/parseUserTime-CI7s8pYc.js.gz +0 -0
  334. package/client/assets/playbackstate-DisgQbHM.js.br +0 -0
  335. package/client/assets/playbackstate-DisgQbHM.js.gz +0 -0
  336. package/client/assets/presentation.utils-Bv3PuMWv.js.br +0 -0
  337. package/client/assets/presentation.utils-Bv3PuMWv.js.gz +0 -0
  338. package/client/assets/rundownUtils-CJxEqFha.js +0 -2
  339. package/client/assets/rundownUtils-CJxEqFha.js.br +0 -0
  340. package/client/assets/rundownUtils-CJxEqFha.js.gz +0 -0
  341. package/client/assets/rundownUtils-CJxEqFha.js.map +0 -1
  342. package/client/assets/timer.utils-P25ngopd.js +0 -2
  343. package/client/assets/timer.utils-P25ngopd.js.br +0 -0
  344. package/client/assets/timer.utils-P25ngopd.js.gz +0 -0
  345. package/client/assets/useCustomFields-DUYgd-E7.js +0 -2
  346. package/client/assets/useCustomFields-DUYgd-E7.js.br +0 -0
  347. package/client/assets/useCustomFields-DUYgd-E7.js.gz +0 -0
  348. package/client/assets/useCustomFields-DUYgd-E7.js.map +0 -1
  349. package/client/assets/useEventSelection-R7JdgAzy.js +0 -2
  350. package/client/assets/useEventSelection-R7JdgAzy.js.br +0 -0
  351. package/client/assets/useEventSelection-R7JdgAzy.js.gz +0 -0
  352. package/client/assets/useEventSelection-R7JdgAzy.js.map +0 -1
  353. package/client/assets/useProjectData-DdITd09M.js +0 -2
  354. package/client/assets/useProjectData-DdITd09M.js.br +0 -0
  355. package/client/assets/useProjectData-DdITd09M.js.gz +0 -0
  356. package/client/assets/useProjectData-DdITd09M.js.map +0 -1
  357. package/client/assets/useReport-CR0k0b85.js +0 -2
  358. package/client/assets/useReport-CR0k0b85.js.br +0 -0
  359. package/client/assets/useReport-CR0k0b85.js.gz +0 -0
  360. package/client/assets/useReport-CR0k0b85.js.map +0 -1
  361. package/client/assets/useRundown-CR9Ah1Fa.js +0 -2
  362. package/client/assets/useRundown-CR9Ah1Fa.js.br +0 -0
  363. package/client/assets/useRundown-CR9Ah1Fa.js.gz +0 -0
  364. package/client/assets/useRundown-CR9Ah1Fa.js.map +0 -1
  365. package/client/assets/useSelectAndRevealEntry-CzSIOtzH.js.br +0 -0
  366. package/client/assets/useSelectAndRevealEntry-CzSIOtzH.js.gz +0 -0
  367. package/client/assets/useWindowTitle-Cl1AVD9_.js.br +0 -0
  368. package/client/assets/useWindowTitle-Cl1AVD9_.js.gz +0 -0
  369. package/client/assets/validateEvent-DhFtLvz_.js +0 -2
  370. package/client/assets/validateEvent-DhFtLvz_.js.br +0 -0
  371. package/client/assets/validateEvent-DhFtLvz_.js.gz +0 -0
  372. package/client/assets/vendor-dQa48psh.js.br +0 -0
  373. package/client/assets/vendor-dQa48psh.js.gz +0 -0
  374. package/client/assets/viewLoader.utils-ndDejZHN.js.br +0 -0
  375. package/client/assets/viewLoader.utils-ndDejZHN.js.gz +0 -0
  376. package/client/assets/viewUtils-rcOl1-o8.js.br +0 -0
  377. package/client/assets/viewUtils-rcOl1-o8.js.gz +0 -0
@@ -1,2 +1,2 @@
1
- import{x as t,r,m as i}from"./index-DYkg-xOk.js";import"./vendor-dQa48psh.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ae43b062-a1cb-469a-9062-0929317fbf5f",e._sentryDebugIdIdentifier="sentry-dbid-ae43b062-a1cb-469a-9062-0929317fbf5f")}catch{}})();function d(e){if(e===null)return t;let n="";return e<0&&(n+="-"),e>0&&(n+="+"),n+=r(i(Math.abs(e))),n}function l(e){return e===null?"muted":e===0?null:e>0?"over":"under"}export{d as a,l as g};
2
- //# sourceMappingURL=offset-Bs6CY1IK.js.map
1
+ import{x as t,r,m as i}from"./index-Dm-4OTmY.js";import"./vendor-BKUJ0_Du.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ae43b062-a1cb-469a-9062-0929317fbf5f",e._sentryDebugIdIdentifier="sentry-dbid-ae43b062-a1cb-469a-9062-0929317fbf5f")}catch{}})();function d(e){if(e===null)return t;let n="";return e<0&&(n+="-"),e>0&&(n+="+"),n+=r(i(Math.abs(e))),n}function l(e){return e===null?"muted":e===0?null:e>0?"over":"under"}export{d as a,l as g};
2
+ //# sourceMappingURL=offset-VthsmtrO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"offset-Bs6CY1IK.js","sources":["../../src/common/utils/offset.ts"],"sourcesContent":["import { MaybeNumber } from 'ontime-types';\nimport { millisToString, removeLeadingZero } from 'ontime-utils';\n\nimport { enDash } from './styleUtils';\n\n/**\n * Formats offset text\n */\nexport function getOffsetText(offset: MaybeNumber): string {\n if (offset === null) {\n return enDash;\n }\n\n let offsetText = '';\n if (offset < 0) offsetText += '-';\n if (offset > 0) offsetText += '+';\n offsetText += removeLeadingZero(millisToString(Math.abs(offset)));\n return offsetText;\n}\n\nexport function getOffsetState(offset: MaybeNumber): 'over' | 'under' | 'muted' | null {\n if (offset === null) return 'muted';\n if (offset === 0) return null;\n // a positive value means that we are in over time aka behind schedule\n return offset > 0 ? 'over' : 'under';\n}\n"],"names":["getOffsetText","offset","enDash","offsetText","removeLeadingZero","millisToString","Math","abs","getOffsetState"],"mappings":"waAQO,SAASA,EAAcC,EAA6B,CACzD,GAAIA,IAAW,KACNC,OAAAA,EAGT,IAAIC,EAAa,GACbF,OAAAA,EAAS,IAAiBE,GAAA,KAC1BF,EAAS,IAAiBE,GAAA,KAC9BA,GAAcC,EAAkBC,EAAeC,KAAKC,IAAIN,CAAM,CAAC,CAAC,EACzDE,CACT,CAEO,SAASK,EAAeP,EAAwD,CACjFA,OAAAA,IAAW,KAAa,QACxBA,IAAW,EAAU,KAElBA,EAAS,EAAI,OAAS,OAC/B"}
1
+ {"version":3,"file":"offset-VthsmtrO.js","sources":["../../src/common/utils/offset.ts"],"sourcesContent":["import { MaybeNumber } from 'ontime-types';\nimport { millisToString, removeLeadingZero } from 'ontime-utils';\n\nimport { enDash } from './styleUtils';\n\n/**\n * Formats offset text\n */\nexport function getOffsetText(offset: MaybeNumber): string {\n if (offset === null) {\n return enDash;\n }\n\n let offsetText = '';\n if (offset < 0) offsetText += '-';\n if (offset > 0) offsetText += '+';\n offsetText += removeLeadingZero(millisToString(Math.abs(offset)));\n return offsetText;\n}\n\nexport function getOffsetState(offset: MaybeNumber): 'over' | 'under' | 'muted' | null {\n if (offset === null) return 'muted';\n if (offset === 0) return null;\n // a positive value means that we are in over time aka behind schedule\n return offset > 0 ? 'over' : 'under';\n}\n"],"names":["getOffsetText","offset","enDash","offsetText","removeLeadingZero","millisToString","Math","abs","getOffsetState"],"mappings":"waAQO,SAASA,EAAcC,EAA6B,CACzD,GAAIA,IAAW,KACNC,OAAAA,EAGT,IAAIC,EAAa,GACbF,OAAAA,EAAS,IAAiBE,GAAA,KAC1BF,EAAS,IAAiBE,GAAA,KAC9BA,GAAcC,EAAkBC,EAAeC,KAAKC,IAAIN,CAAM,CAAC,CAAC,EACzDE,CACT,CAEO,SAASK,EAAeP,EAAwD,CACjFA,OAAAA,IAAW,KAAa,QACxBA,IAAW,EAAU,KAElBA,EAAS,EAAI,OAAS,OAC/B"}
@@ -1,2 +1,2 @@
1
- import{I as o,M as u,b7 as b}from"./index-DYkg-xOk.js";import"./vendor-dQa48psh.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new s.Error().stack;e&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[e]="fed0545a-cb88-42d0-86c9-4c9f26d90f24",s._sentryDebugIdIdentifier="sentry-dbid-fed0545a-cb88-42d0-86c9-4c9f26d90f24")}catch{}})();function P(s){const{isAM:e,isPM:f,value:r}=I(s.toLowerCase()),n=m(r);if(n!==null)return n;const a=/[\s,:.]+/,[t,l,M]=r.split(a);let d=0,h=f;if(t!=null&&l!=null&&M!=null){let c=i(t);c===12&&(e&&(c=0),h=!1),d=c*o,d+=i(l)*u,d+=i(M)*b}else if(t!=null&&l==null&&M==null){const{inferredMillis:c,addAM:g}=p(t,e,f);d=c,h=g<12&&f}else if(t!=null&&l!=null&&M==null){let c=i(t);c===12&&(e&&(c=0),h=!1),d=c*o,d+=i(l)*u}return h&&(d+=12*o),d}function p(s,e,f){const r=s.length;let n=0,a=0;if(r===1)f||e?(n=i(s)*o,e&&(a=n)):n=i(s)*u;else if(r===2)f||e?(s==="12"&&e?n=0:n=i(s)*o,(e||s==="12")&&(a=12)):n=i(s)*u;else if(r===3)n=i(s[0])*o+i(s.substring(1))*u;else if(r===4)n=i(s.substring(0,2))*o+i(s.substring(2))*u;else if(r>=5){const t=i(s.substring(0,2)),l=i(s.substring(2,4)),M=i(s.substring(4));n=t*o+l*u+M*b}return{inferredMillis:n,addAM:a}}function m(s){const e=/(\d+)h(?:(\d+)(?!s))?/i.exec(s),f=e?i(e[1]):0,r=e!=null&&e[2]?i(e[2]):0,n=/(\d+)m/i.exec(s),a=n?i(n[1]):r,t=/(\d+)s/i.exec(s),l=t?i(t[1]):0;return e||n||t?f*o+a*u+l*b:null}function I(s){return s.endsWith("pm")?{isAM:!1,isPM:!0,value:s.slice(0,-2)}:s.endsWith("p")?{isAM:!1,isPM:!0,value:s.slice(0,-1)}:s.endsWith("am")?{isAM:!0,isPM:!1,value:s.slice(0,-2)}:s.endsWith("a")?{isAM:!0,isPM:!1,value:s.slice(0,-1)}:{isAM:!1,isPM:!1,value:s}}function i(s){const e=Number(s);return isNaN(e)?0:Math.abs(e)}export{P as p};
2
- //# sourceMappingURL=parseUserTime-CI7s8pYc.js.map
1
+ import{I as o,M as u,b8 as b}from"./index-Dm-4OTmY.js";import"./vendor-BKUJ0_Du.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new s.Error().stack;e&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[e]="1d2c9980-6fe1-47c9-82cf-7d7683796d3f",s._sentryDebugIdIdentifier="sentry-dbid-1d2c9980-6fe1-47c9-82cf-7d7683796d3f")}catch{}})();function P(s){const{isAM:e,isPM:f,value:r}=I(s.toLowerCase()),n=m(r);if(n!==null)return n;const a=/[\s,:.]+/,[t,l,M]=r.split(a);let d=0,h=f;if(t!=null&&l!=null&&M!=null){let c=i(t);c===12&&(e&&(c=0),h=!1),d=c*o,d+=i(l)*u,d+=i(M)*b}else if(t!=null&&l==null&&M==null){const{inferredMillis:c,addAM:g}=p(t,e,f);d=c,h=g<12&&f}else if(t!=null&&l!=null&&M==null){let c=i(t);c===12&&(e&&(c=0),h=!1),d=c*o,d+=i(l)*u}return h&&(d+=12*o),d}function p(s,e,f){const r=s.length;let n=0,a=0;if(r===1)f||e?(n=i(s)*o,e&&(a=n)):n=i(s)*u;else if(r===2)f||e?(s==="12"&&e?n=0:n=i(s)*o,(e||s==="12")&&(a=12)):n=i(s)*u;else if(r===3)n=i(s[0])*o+i(s.substring(1))*u;else if(r===4)n=i(s.substring(0,2))*o+i(s.substring(2))*u;else if(r>=5){const t=i(s.substring(0,2)),l=i(s.substring(2,4)),M=i(s.substring(4));n=t*o+l*u+M*b}return{inferredMillis:n,addAM:a}}function m(s){const e=/(\d+)h(?:(\d+)(?!s))?/i.exec(s),f=e?i(e[1]):0,r=e!=null&&e[2]?i(e[2]):0,n=/(\d+)m/i.exec(s),a=n?i(n[1]):r,t=/(\d+)s/i.exec(s),l=t?i(t[1]):0;return e||n||t?f*o+a*u+l*b:null}function I(s){return s.endsWith("pm")?{isAM:!1,isPM:!0,value:s.slice(0,-2)}:s.endsWith("p")?{isAM:!1,isPM:!0,value:s.slice(0,-1)}:s.endsWith("am")?{isAM:!0,isPM:!1,value:s.slice(0,-2)}:s.endsWith("a")?{isAM:!0,isPM:!1,value:s.slice(0,-1)}:{isAM:!1,isPM:!1,value:s}}function i(s){const e=Number(s);return isNaN(e)?0:Math.abs(e)}export{P as p};
2
+ //# sourceMappingURL=parseUserTime-sZbEBi61.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseUserTime-CI7s8pYc.js","sources":["../../../../packages/utils/src/date-utils/parseUserTime.ts"],"sourcesContent":["import { MILLIS_PER_HOUR, MILLIS_PER_MINUTE, MILLIS_PER_SECOND } from './conversionUtils.js';\n\n/**\n * @description Parses a user given time string to a value in milliseconds\n * @param {string} value - time string\n * @returns {number} - value in milliseconds\n */\nexport function parseUserTime(value: string): number {\n const { isAM, isPM, value: parsingValue } = checkAmPm(value.toLowerCase());\n const maybeMillisFromMatchers = checkMatchers(parsingValue);\n if (maybeMillisFromMatchers !== null) {\n return maybeMillisFromMatchers;\n }\n\n // split string at known separators : , .\n const separatorRegex = /[\\s,:.]+/;\n const [first, second, third] = parsingValue.split(separatorRegex);\n\n let millis = 0;\n let addTwelve = isPM;\n\n if (first != null && second != null && third != null) {\n // if string has three sections, treat as [hours] [minutes] [seconds]\n let hours = parse(first);\n if (hours === 12) {\n if (isAM) {\n hours = 0;\n }\n addTwelve = false;\n }\n millis = hours * MILLIS_PER_HOUR;\n millis += parse(second) * MILLIS_PER_MINUTE;\n millis += parse(third) * MILLIS_PER_SECOND;\n } else if (first != null && second == null && third == null) {\n // we only have one section, infer separators\n const { inferredMillis, addAM } = inferSeparators(first, isAM, isPM);\n millis = inferredMillis;\n addTwelve = addAM < 12 && isPM;\n } else if (first != null && second != null && third == null) {\n // if string has two sections, treat as [hours] [minutes]\n let hours = parse(first);\n if (hours === 12) {\n if (isAM) {\n hours = 0;\n }\n addTwelve = false;\n }\n millis = hours * MILLIS_PER_HOUR;\n millis += parse(second) * MILLIS_PER_MINUTE;\n }\n\n if (addTwelve) {\n millis += 12 * MILLIS_PER_HOUR;\n }\n\n return millis;\n}\n\n/**\n * @description Utility function to infer separators from a whole string\n * @param {string} value\n * @param {boolean} isAM\n * @param {boolean} isPM\n */\nfunction inferSeparators(value: string, isAM: boolean, isPM: boolean) {\n const length = value.length;\n let inferredMillis = 0;\n let addAM = 0;\n\n if (length === 1) {\n if (isPM || isAM) {\n inferredMillis = parse(value) * MILLIS_PER_HOUR;\n if (isAM) {\n // this ensures we dont add 12 hours in the end\n addAM = inferredMillis;\n }\n } else {\n inferredMillis = parse(value) * MILLIS_PER_MINUTE;\n }\n } else if (length === 2) {\n if (isPM || isAM) {\n if (value === '12' && isAM) {\n inferredMillis = 0;\n } else {\n inferredMillis = parse(value) * MILLIS_PER_HOUR;\n }\n\n if (isAM || value === '12') {\n // this ensures we dont add 12 hours in the end\n addAM = 12;\n }\n } else {\n inferredMillis = parse(value) * MILLIS_PER_MINUTE;\n }\n } else if (length === 3) {\n inferredMillis = parse(value[0]) * MILLIS_PER_HOUR + parse(value.substring(1)) * MILLIS_PER_MINUTE;\n } else if (length === 4) {\n inferredMillis = parse(value.substring(0, 2)) * MILLIS_PER_HOUR + parse(value.substring(2)) * MILLIS_PER_MINUTE;\n } else if (length >= 5) {\n const hours = parse(value.substring(0, 2));\n const minutes = parse(value.substring(2, 4));\n const seconds = parse(value.substring(4));\n inferredMillis = hours * MILLIS_PER_HOUR + minutes * MILLIS_PER_MINUTE + seconds * MILLIS_PER_SECOND;\n }\n return { inferredMillis, addAM };\n}\n\n/**\n * @description Utility function to check if a string contain h / m / s indicators\n * @param {string} value\n */\nfunction checkMatchers(value: string): number | null {\n // match hours with any digits after, but don't match digits that are part of seconds\n const hoursMatch = /(\\d+)h(?:(\\d+)(?!s))?/i.exec(value);\n const hoursMatchValue = hoursMatch ? parse(hoursMatch[1]) : 0;\n // if there's a number after 'h' without a unit and it's not followed by 's', treat it as minutes\n const implicitMinutesValue = hoursMatch?.[2] ? parse(hoursMatch[2]) : 0;\n\n const minutesMatch = /(\\d+)m/i.exec(value);\n // only use implicit minutes if there's no explicit minutes match\n const minutesMatchValue = minutesMatch ? parse(minutesMatch[1]) : implicitMinutesValue;\n\n const secondsMatch = /(\\d+)s/i.exec(value);\n const secondsMatchValue = secondsMatch ? parse(secondsMatch[1]) : 0;\n\n if (hoursMatch || minutesMatch || secondsMatch) {\n return (\n hoursMatchValue * MILLIS_PER_HOUR + minutesMatchValue * MILLIS_PER_MINUTE + secondsMatchValue * MILLIS_PER_SECOND\n );\n }\n return null;\n}\n\n/**\n * @description Utility function to check if a string contain am/pm indicators\n * @description expects the value to be lowercased\n * @param {string} value\n * @returns {Object}\n * @returns {boolean} result.isAM - Whether we parsed an AM indicator\n * @returns {boolean} result.isPM - Whether we parsed a PM indicator\n * @returns {string} result.value - The original string with AM/PM indicator removed\n */\nfunction checkAmPm(value: string): { isAM: boolean; isPM: boolean; value: string } {\n if (value.endsWith('pm')) {\n return { isAM: false, isPM: true, value: value.slice(0, -2) };\n }\n\n if (value.endsWith('p')) {\n return { isAM: false, isPM: true, value: value.slice(0, -1) };\n }\n\n if (value.endsWith('am')) {\n return { isAM: true, isPM: false, value: value.slice(0, -2) };\n }\n\n if (value.endsWith('a')) {\n return { isAM: true, isPM: false, value: value.slice(0, -1) };\n }\n\n return { isAM: false, isPM: false, value };\n}\n\n/**\n * @description safe parse string to int\n * @param {string} valueAsString\n * @return {number}\n */\nfunction parse(valueAsString: string): number {\n const parsed = Number(valueAsString);\n if (isNaN(parsed)) {\n return 0;\n }\n return Math.abs(parsed);\n}\n"],"names":["parseUserTime","value","isAM","isPM","parsingValue","checkAmPm","toLowerCase","maybeMillisFromMatchers","checkMatchers","separatorRegex","first","second","third","split","millis","addTwelve","hours","parse","MILLIS_PER_HOUR","MILLIS_PER_MINUTE","MILLIS_PER_SECOND","inferredMillis","addAM","inferSeparators","length","substring","minutes","seconds","hoursMatch","exec","hoursMatchValue","implicitMinutesValue","minutesMatch","minutesMatchValue","secondsMatch","secondsMatchValue","endsWith","slice","valueAsString","parsed","Number","isNaN","Math","abs"],"mappings":"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"}
1
+ {"version":3,"file":"parseUserTime-sZbEBi61.js","sources":["../../../../packages/utils/src/date-utils/parseUserTime.ts"],"sourcesContent":["import { MILLIS_PER_HOUR, MILLIS_PER_MINUTE, MILLIS_PER_SECOND } from './conversionUtils.js';\n\n/**\n * @description Parses a user given time string to a value in milliseconds\n * @param {string} value - time string\n * @returns {number} - value in milliseconds\n */\nexport function parseUserTime(value: string): number {\n const { isAM, isPM, value: parsingValue } = checkAmPm(value.toLowerCase());\n const maybeMillisFromMatchers = checkMatchers(parsingValue);\n if (maybeMillisFromMatchers !== null) {\n return maybeMillisFromMatchers;\n }\n\n // split string at known separators : , .\n const separatorRegex = /[\\s,:.]+/;\n const [first, second, third] = parsingValue.split(separatorRegex);\n\n let millis = 0;\n let addTwelve = isPM;\n\n if (first != null && second != null && third != null) {\n // if string has three sections, treat as [hours] [minutes] [seconds]\n let hours = parse(first);\n if (hours === 12) {\n if (isAM) {\n hours = 0;\n }\n addTwelve = false;\n }\n millis = hours * MILLIS_PER_HOUR;\n millis += parse(second) * MILLIS_PER_MINUTE;\n millis += parse(third) * MILLIS_PER_SECOND;\n } else if (first != null && second == null && third == null) {\n // we only have one section, infer separators\n const { inferredMillis, addAM } = inferSeparators(first, isAM, isPM);\n millis = inferredMillis;\n addTwelve = addAM < 12 && isPM;\n } else if (first != null && second != null && third == null) {\n // if string has two sections, treat as [hours] [minutes]\n let hours = parse(first);\n if (hours === 12) {\n if (isAM) {\n hours = 0;\n }\n addTwelve = false;\n }\n millis = hours * MILLIS_PER_HOUR;\n millis += parse(second) * MILLIS_PER_MINUTE;\n }\n\n if (addTwelve) {\n millis += 12 * MILLIS_PER_HOUR;\n }\n\n return millis;\n}\n\n/**\n * @description Utility function to infer separators from a whole string\n * @param {string} value\n * @param {boolean} isAM\n * @param {boolean} isPM\n */\nfunction inferSeparators(value: string, isAM: boolean, isPM: boolean) {\n const length = value.length;\n let inferredMillis = 0;\n let addAM = 0;\n\n if (length === 1) {\n if (isPM || isAM) {\n inferredMillis = parse(value) * MILLIS_PER_HOUR;\n if (isAM) {\n // this ensures we dont add 12 hours in the end\n addAM = inferredMillis;\n }\n } else {\n inferredMillis = parse(value) * MILLIS_PER_MINUTE;\n }\n } else if (length === 2) {\n if (isPM || isAM) {\n if (value === '12' && isAM) {\n inferredMillis = 0;\n } else {\n inferredMillis = parse(value) * MILLIS_PER_HOUR;\n }\n\n if (isAM || value === '12') {\n // this ensures we dont add 12 hours in the end\n addAM = 12;\n }\n } else {\n inferredMillis = parse(value) * MILLIS_PER_MINUTE;\n }\n } else if (length === 3) {\n inferredMillis = parse(value[0]) * MILLIS_PER_HOUR + parse(value.substring(1)) * MILLIS_PER_MINUTE;\n } else if (length === 4) {\n inferredMillis = parse(value.substring(0, 2)) * MILLIS_PER_HOUR + parse(value.substring(2)) * MILLIS_PER_MINUTE;\n } else if (length >= 5) {\n const hours = parse(value.substring(0, 2));\n const minutes = parse(value.substring(2, 4));\n const seconds = parse(value.substring(4));\n inferredMillis = hours * MILLIS_PER_HOUR + minutes * MILLIS_PER_MINUTE + seconds * MILLIS_PER_SECOND;\n }\n return { inferredMillis, addAM };\n}\n\n/**\n * @description Utility function to check if a string contain h / m / s indicators\n * @param {string} value\n */\nfunction checkMatchers(value: string): number | null {\n // match hours with any digits after, but don't match digits that are part of seconds\n const hoursMatch = /(\\d+)h(?:(\\d+)(?!s))?/i.exec(value);\n const hoursMatchValue = hoursMatch ? parse(hoursMatch[1]) : 0;\n // if there's a number after 'h' without a unit and it's not followed by 's', treat it as minutes\n const implicitMinutesValue = hoursMatch?.[2] ? parse(hoursMatch[2]) : 0;\n\n const minutesMatch = /(\\d+)m/i.exec(value);\n // only use implicit minutes if there's no explicit minutes match\n const minutesMatchValue = minutesMatch ? parse(minutesMatch[1]) : implicitMinutesValue;\n\n const secondsMatch = /(\\d+)s/i.exec(value);\n const secondsMatchValue = secondsMatch ? parse(secondsMatch[1]) : 0;\n\n if (hoursMatch || minutesMatch || secondsMatch) {\n return (\n hoursMatchValue * MILLIS_PER_HOUR + minutesMatchValue * MILLIS_PER_MINUTE + secondsMatchValue * MILLIS_PER_SECOND\n );\n }\n return null;\n}\n\n/**\n * @description Utility function to check if a string contain am/pm indicators\n * @description expects the value to be lowercased\n * @param {string} value\n * @returns {Object}\n * @returns {boolean} result.isAM - Whether we parsed an AM indicator\n * @returns {boolean} result.isPM - Whether we parsed a PM indicator\n * @returns {string} result.value - The original string with AM/PM indicator removed\n */\nfunction checkAmPm(value: string): { isAM: boolean; isPM: boolean; value: string } {\n if (value.endsWith('pm')) {\n return { isAM: false, isPM: true, value: value.slice(0, -2) };\n }\n\n if (value.endsWith('p')) {\n return { isAM: false, isPM: true, value: value.slice(0, -1) };\n }\n\n if (value.endsWith('am')) {\n return { isAM: true, isPM: false, value: value.slice(0, -2) };\n }\n\n if (value.endsWith('a')) {\n return { isAM: true, isPM: false, value: value.slice(0, -1) };\n }\n\n return { isAM: false, isPM: false, value };\n}\n\n/**\n * @description safe parse string to int\n * @param {string} valueAsString\n * @return {number}\n */\nfunction parse(valueAsString: string): number {\n const parsed = Number(valueAsString);\n if (isNaN(parsed)) {\n return 0;\n }\n return Math.abs(parsed);\n}\n"],"names":["parseUserTime","value","isAM","isPM","parsingValue","checkAmPm","toLowerCase","maybeMillisFromMatchers","checkMatchers","separatorRegex","first","second","third","split","millis","addTwelve","hours","parse","MILLIS_PER_HOUR","MILLIS_PER_MINUTE","MILLIS_PER_SECOND","inferredMillis","addAM","inferSeparators","length","substring","minutes","seconds","hoursMatch","exec","hoursMatchValue","implicitMinutesValue","minutesMatch","minutesMatchValue","secondsMatch","secondsMatchValue","endsWith","slice","valueAsString","parsed","Number","isNaN","Math","abs"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import"./vendor-dQa48psh.js";import{h as d}from"./index-DYkg-xOk.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new e.Error().stack;a&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[a]="c3dd2455-175d-4b86-9a69-48ba65f5aa3c",e._sentryDebugIdIdentifier="sentry-dbid-c3dd2455-175d-4b86-9a69-48ba65f5aa3c")}catch{}})();function r(e){return e===d.Play||e===d.Pause||e===d.Roll}export{r as i};
2
- //# sourceMappingURL=playbackstate-DisgQbHM.js.map
1
+ import"./vendor-BKUJ0_Du.js";import{h as d}from"./index-Dm-4OTmY.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new e.Error().stack;a&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[a]="c3dd2455-175d-4b86-9a69-48ba65f5aa3c",e._sentryDebugIdIdentifier="sentry-dbid-c3dd2455-175d-4b86-9a69-48ba65f5aa3c")}catch{}})();function r(e){return e===d.Play||e===d.Pause||e===d.Roll}export{r as i};
2
+ //# sourceMappingURL=playbackstate-Dl_ZJABT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"playbackstate-DisgQbHM.js","sources":["../../../../packages/utils/src/playback-utils/playbackstate.ts"],"sourcesContent":["import { Playback } from 'ontime-types';\n\n/**\n * Utility checks whether the playback is considered to be active\n * @param state\n * @returns\n */\nexport function isPlaybackActive(state: Playback): boolean {\n return state === Playback.Play || state === Playback.Pause || state === Playback.Roll;\n}\n"],"names":["isPlaybackActive","state","Playback","Play","Pause","Roll"],"mappings":"+ZAOO,SAASA,EAAiBC,EAA0B,CACzD,OAAOA,IAAUC,EAASC,MAAQF,IAAUC,EAASE,OAASH,IAAUC,EAASG,IACnF"}
1
+ {"version":3,"file":"playbackstate-Dl_ZJABT.js","sources":["../../../../packages/utils/src/playback-utils/playbackstate.ts"],"sourcesContent":["import { Playback } from 'ontime-types';\n\n/**\n * Utility checks whether the playback is considered to be active\n * @param state\n * @returns\n */\nexport function isPlaybackActive(state: Playback): boolean {\n return state === Playback.Play || state === Playback.Pause || state === Playback.Roll;\n}\n"],"names":["isPlaybackActive","state","Playback","Play","Pause","Roll"],"mappings":"+ZAOO,SAASA,EAAiBC,EAA0B,CACzD,OAAOA,IAAUC,EAASC,MAAQF,IAAUC,EAASE,OAASH,IAAUC,EAASG,IACnF"}
@@ -1,2 +1,2 @@
1
- import"./vendor-dQa48psh.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new e.Error().stack;r&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[r]="a093213b-6fe4-4c44-8290-167b0bc050c8",e._sentryDebugIdIdentifier="sentry-dbid-a093213b-6fe4-4c44-8290-167b0bc050c8")}catch{}})();function f(e,r,n,o){return n?e.warningColor:o?e.dangerColor:r||e.normalColor}export{f as g};
2
- //# sourceMappingURL=presentation.utils-Bv3PuMWv.js.map
1
+ import"./vendor-BKUJ0_Du.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new e.Error().stack;r&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[r]="a093213b-6fe4-4c44-8290-167b0bc050c8",e._sentryDebugIdIdentifier="sentry-dbid-a093213b-6fe4-4c44-8290-167b0bc050c8")}catch{}})();function f(e,r,n,o){return n?e.warningColor:o?e.dangerColor:r||e.normalColor}export{f as g};
2
+ //# sourceMappingURL=presentation.utils-Z61KykAH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"presentation.utils-Bv3PuMWv.js","sources":["../../src/views/utils/presentation.utils.ts"],"sourcesContent":["import { ViewSettings } from 'ontime-types';\n\n/**\n * Which colour should the timer have at a given moment\n */\nexport function getTimerColour(\n viewSettings: ViewSettings,\n timerColour: string | undefined,\n showWarning: boolean,\n showDanger: boolean,\n) {\n if (showWarning) return viewSettings.warningColor;\n if (showDanger) return viewSettings.dangerColor;\n return timerColour || viewSettings.normalColor;\n}\n"],"names":["getTimerColour","viewSettings","timerColour","showWarning","showDanger","warningColor","dangerColor","normalColor"],"mappings":"uXAKO,SAASA,EACdC,EACAC,EACAC,EACAC,EACA,CACID,OAAAA,EAAoBF,EAAaI,aACjCD,EAAmBH,EAAaK,YAC7BJ,GAAeD,EAAaM,WACrC"}
1
+ {"version":3,"file":"presentation.utils-Z61KykAH.js","sources":["../../src/views/utils/presentation.utils.ts"],"sourcesContent":["import { ViewSettings } from 'ontime-types';\n\n/**\n * Which colour should the timer have at a given moment\n */\nexport function getTimerColour(\n viewSettings: ViewSettings,\n timerColour: string | undefined,\n showWarning: boolean,\n showDanger: boolean,\n) {\n if (showWarning) return viewSettings.warningColor;\n if (showDanger) return viewSettings.dangerColor;\n return timerColour || viewSettings.normalColor;\n}\n"],"names":["getTimerColour","viewSettings","timerColour","showWarning","showDanger","warningColor","dangerColor","normalColor"],"mappings":"uXAKO,SAASA,EACdC,EACAC,EACAC,EACAC,EACA,CACID,OAAAA,EAAoBF,EAAaI,aACjCD,EAAmBH,EAAaK,YAC7BJ,GAAeD,EAAaM,WACrC"}
@@ -0,0 +1,2 @@
1
+ import"./vendor-BKUJ0_Du.js";import"./index-Dm-4OTmY.js";import{i as d,b as o,j as u}from"./useRundown-DAo6huE4.js";(function(){try{var n=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new n.Error().stack;t&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[t]="716f2163-2372-4fcf-9df6-e38ce46de87e",n._sentryDebugIdIdentifier="sentry-dbid-716f2163-2372-4fcf-9df6-e38ce46de87e")}catch{}})();function f(n,t,e){const i=[...e];return n===0?i.unshift(t):n>=i.length?i.push(t):i.splice(n,0,t),i}function E(n,t,e){if(t===e)return n;const i=[...n],[r]=i.splice(t,1);return i.splice(e,0,r),i}function a(n,t){if(!t.length)return null;const e=t[0];return n[e]??null}function I(n){for(let t=0;t<n.length;t++){const e=n[t];if(d(e)&&o(e))return{firstEvent:e,firstIndex:t}}return{firstEvent:null,firstIndex:null}}function c(n,t){const e=t.at(-1);return e===void 0?null:n[e]??null}function h(n){if(n.length<1)return{lastEvent:null,lastIndex:null};for(let t=n.length-1;t>=0;t--){const e=n[t];if(d(e)&&o(e))return{lastEvent:e,lastIndex:t}}return{lastEvent:null,lastIndex:null}}function b(n,t,e){if(e===null){const r=a(n,t);return{entry:r,index:r?0:null}}const i=t.findIndex(r=>r===e);if(i!==-1&&i+1<t.length){const r=i+1,l=t[r];return{entry:n[l],index:r}}return{entry:null,index:null}}function N(n,t){const e=n.findIndex(i=>i.id===t);if(e<0)return{nextEvent:null,nextIndex:null};for(let i=e+1;i<n.length;i++){const r=n[i];if(d(r))return{nextEvent:r,nextIndex:i}}return{nextEvent:null,nextIndex:null}}function O(n,t,e){if(e===null){const r=c(n,t);return{entry:r,index:r?t.length-1:null}}const i=t.findIndex(r=>r===e);if(i!==-1&&i-1>=0){const r=i-1,l=t[r];return{entry:n[l],index:r}}return{entry:null,index:null}}function x(n,t){for(let e=0;e<t.length;e++){const i=t[e],r=n[i];if(u(r))return{entry:r,index:e}}return{entry:null,index:null}}function g(n,t){for(let e=t.length-1;e>=0;e--){const i=t[e],r=n[i];if(u(r))return{entry:r,index:e}}return{entry:null,index:null}}const v=(n,t)=>{const e={...t,id:n.id,timeStart:n.timeStart,timeEnd:n.timeEnd,duration:n.duration,linkStart:n.linkStart,parent:n.parent,delay:n.delay,gap:n.gap,dayOffset:n.dayOffset,revision:n.revision},i={...n,id:t.id,timeStart:t.timeStart,timeEnd:t.timeEnd,duration:t.duration,linkStart:t.linkStart,parent:t.parent,delay:t.delay,gap:t.gap,dayOffset:t.dayOffset,revision:t.revision};return[e,i]};function S(n,t){return n.find(e=>e.id===t)}function k(n,t,e){if(e===null)return g(n,t);let i=!1;for(let r=t.length-1;r>=0;r--){const l=t[r];if(!i&&l===e){i=!0;continue}const s=n[l];if(i&&u(s))return{entry:s,index:r}}return{entry:null,index:null}}function F(n,t,e){if(e===null)return x(n,t);let i=!1;for(let r=0;r<t.length;r++){const l=t[r];if(!i&&l===e){i=!0;continue}const s=n[l];if(i&&u(s))return{entry:s,index:r}}return{entry:null,index:null}}function D(n,t,e,i){if(e)return e;if(!i)return null;const r=t?t.entries:n.order;if(!r||r.length===0)return null;const l=r.findIndex(s=>s===i);return l<1?null:r[l-1]}function G(n,t){if(t.parent)return t.parent;const e=t.after??t.before;if(!e)return null;const i=n.entries[e];return i&&"parent"in i&&i.parent?i.parent:null}function L(n,t,e,i){if(i)if("parent"in t&&(t.parent=i.id),e){const r=i.entries.indexOf(e)+1,l=n.flatOrder.indexOf(e)+1;i.entries=f(r,t.id,i.entries),n.flatOrder=f(l,t.id,n.flatOrder)}else{i.entries=f(0,t.id,i.entries);const r=n.flatOrder.indexOf(i.id)+1;n.flatOrder=f(r,t.id,n.flatOrder)}else if(e){const r=n.order.indexOf(e)+1,l=n.flatOrder.indexOf(e)+1;n.order=f(r,t.id,n.order),n.flatOrder=f(l,t.id,n.flatOrder)}else n.order=f(0,t.id,n.order),n.flatOrder=f(0,t.id,n.flatOrder);return n.entries[t.id]=t,t}export{N as a,I as b,h as c,O as d,k as e,F as f,S as g,b as h,G as i,D as j,L as k,E as r,v as s};
2
+ //# sourceMappingURL=rundownUtils-CXZRD6yP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rundownUtils-CXZRD6yP.js","sources":["../../../../packages/utils/src/common/arrayUtils.ts","../../../../packages/utils/src/rundown-utils/rundownUtils.ts"],"sourcesContent":["/**\n * Inserts an item in an array at a given index\n * @param index\n * @param item\n * @param array\n */\nexport function insertAtIndex<T>(index: number, item: T, array: T[]): T[] {\n const modifiedArray = [...array];\n\n // Insert at beginning\n if (index === 0) {\n modifiedArray.unshift(item);\n }\n\n // insert at end\n else if (index >= modifiedArray.length) {\n modifiedArray.push(item);\n }\n\n // insert in the middle\n else {\n modifiedArray.splice(index, 0, item);\n }\n\n return modifiedArray;\n}\n\n/**\n * Inserts an array into another one of the same type at a given index\n */\nexport function mergeAtIndex<T>(index: number, newArray: T[], currentArray: T[]): T[] {\n // Insert at beginning\n if (index === 0) {\n return [...newArray, ...currentArray];\n }\n\n // insert at end\n else if (index >= currentArray.length) {\n return [...currentArray, ...newArray];\n }\n\n // insert in the middle\n return currentArray.toSpliced(index, 0, ...newArray);\n}\n\n/**\n * Deletes array element at a given index\n * @param index\n * @param array\n */\nexport function deleteAtIndex<T>(index: number, array: T[]) {\n return array.filter((_, i) => i !== index);\n}\n\n/**\n * Reorders two objects in an array\n */\nexport function reorderArray<T>(array: T[], fromIndex: number, toIndex: number): T[] {\n if (fromIndex === toIndex) {\n return array; // No change needed, return the original array\n }\n\n const modifiedArray = [...array];\n\n // delete in from\n const [reorderedItem] = modifiedArray.splice(fromIndex, 1);\n\n // reinsert item at to\n modifiedArray.splice(toIndex, 0, reorderedItem);\n return modifiedArray;\n}\n","import type {\n EntryId,\n OntimeEntry,\n OntimeEvent,\n OntimeGroup,\n PlayableEvent,\n Rundown,\n RundownEntries,\n} from 'ontime-types';\nimport { isOntimeEvent, isOntimeGroup, isPlayableEvent } from 'ontime-types';\n\nimport { insertAtIndex } from '../common/arrayUtils.js';\n\ntype IndexAndEntry = { entry: OntimeEntry | null; index: number | null };\ntype GroupIndexAndEntry = { entry: OntimeGroup | null; index: number | null };\n\n/**\n * Gets first event in a normalised rundown, if it exists\n */\nexport function getFirstNormal(entries: RundownEntries, order: EntryId[]): OntimeEntry | null {\n if (!order.length) {\n return null;\n }\n const eventId = order[0];\n return entries[eventId] ?? null;\n}\n\n/**\n * Gets first scheduled event in rundown, if it exists\n */\nexport function getFirstEvent(rundown: OntimeEntry[]): {\n firstEvent: PlayableEvent | null;\n firstIndex: number | null;\n} {\n for (let i = 0; i < rundown.length; i++) {\n const firstEvent = rundown[i];\n if (isOntimeEvent(firstEvent) && isPlayableEvent(firstEvent)) {\n return { firstEvent, firstIndex: i };\n }\n }\n return { firstEvent: null, firstIndex: null };\n}\n\n/**\n * Gets first scheduled event in a normalised rundown, if it exists\n */\nexport function getFirstEventNormal(\n rundown: RundownEntries,\n order: EntryId[],\n): {\n firstEvent: PlayableEvent | null;\n firstIndex: number | null;\n} {\n for (let i = 0; i < order.length; i++) {\n const firstId = order[i];\n const firstEvent = rundown[firstId];\n if (isOntimeEvent(firstEvent) && isPlayableEvent(firstEvent)) {\n return { firstEvent, firstIndex: i };\n }\n }\n return { firstEvent: null, firstIndex: null };\n}\n\n/**\n * Gets last event in a normalised rundown, if it exists\n */\nexport function getLastNormal(entries: RundownEntries, order: EntryId[]): OntimeEntry | null {\n const lastId = order.at(-1);\n if (lastId === undefined) {\n return null;\n }\n return entries[lastId] ?? null;\n}\n\n/**\n * Gets last scheduled event in rundown, if it exists\n */\nexport function getLastEvent(rundown: OntimeEntry[]): {\n lastEvent: PlayableEvent | null;\n lastIndex: number | null;\n} {\n if (rundown.length < 1) {\n return { lastEvent: null, lastIndex: null };\n }\n\n for (let i = rundown.length - 1; i >= 0; i--) {\n const lastEvent = rundown[i];\n if (isOntimeEvent(lastEvent) && isPlayableEvent(lastEvent)) {\n return { lastEvent, lastIndex: i };\n }\n }\n return { lastEvent: null, lastIndex: null };\n}\n\n/**\n * Gets last scheduled event in a normalised rundown, if it exists\n */\nexport function getLastEventNormal(\n rundown: RundownEntries,\n order: EntryId[],\n): {\n lastEvent: OntimeEvent | null;\n lastIndex: number | null;\n} {\n if (order.length < 1) {\n return { lastEvent: null, lastIndex: null };\n }\n\n for (let i = order.length - 1; i >= 0; i--) {\n const lastId = order[i];\n const lastEvent = rundown[lastId];\n if (isOntimeEvent(lastEvent) && !lastEvent.skip) {\n return { lastEvent, lastIndex: i };\n }\n }\n return { lastEvent: null, lastIndex: null };\n}\n\n/**\n * Gets next entry in rundown, if it exists\n */\nexport function getNextNormal(rundown: RundownEntries, flatOrder: EntryId[], currentId: EntryId | null): IndexAndEntry {\n if (currentId === null) {\n const entry = getFirstNormal(rundown, flatOrder);\n return { entry, index: entry ? 0 : null };\n }\n\n const currentIndex = flatOrder.findIndex((id) => id === currentId);\n if (currentIndex !== -1 && currentIndex + 1 < flatOrder.length) {\n const index = currentIndex + 1;\n const nextId = flatOrder[index];\n const entry = rundown[nextId];\n return { entry, index };\n }\n return { entry: null, index: null };\n}\n\n/**\n * Gets next scheduled event in rundown, if it exists\n */\nexport function getNextEvent(\n rundown: OntimeEntry[],\n currentId: EntryId,\n): { nextEvent: OntimeEvent | null; nextIndex: number | null } {\n const index = rundown.findIndex((entry) => entry.id === currentId);\n if (index < 0) {\n return { nextEvent: null, nextIndex: null };\n }\n\n for (let i = index + 1; i < rundown.length; i++) {\n const nextEvent = rundown[i];\n if (isOntimeEvent(nextEvent)) {\n return { nextEvent, nextIndex: i };\n }\n }\n return { nextEvent: null, nextIndex: null };\n}\n\n/**\n * Gets next scheduled event in a normalised rundown, if it exists\n */\nexport function getNextEventNormal(\n entries: RundownEntries,\n order: EntryId[],\n currentId: EntryId,\n): { nextEvent: OntimeEvent | null; nextIndex: number | null } {\n const index = order.findIndex((entryId) => entryId === currentId);\n if (index < 0) {\n return { nextEvent: null, nextIndex: null };\n }\n\n for (let i = index + 1; i < order.length; i++) {\n const nextId = order[i];\n const nextEvent = entries[nextId];\n if (isOntimeEvent(nextEvent)) {\n return { nextEvent, nextIndex: i };\n }\n }\n return { nextEvent: null, nextIndex: null };\n}\n\n/**\n * Gets previous entry in a normalised rundown, if it exists\n */\nexport function getPreviousNormal(\n entries: RundownEntries,\n flatOrder: EntryId[],\n currentId: EntryId | null,\n): IndexAndEntry {\n if (currentId === null) {\n const entry = getLastNormal(entries, flatOrder);\n return { entry, index: entry ? flatOrder.length - 1 : null };\n }\n\n const currentIndex = flatOrder.findIndex((id) => id === currentId);\n if (currentIndex !== -1 && currentIndex - 1 >= 0) {\n const index = currentIndex - 1;\n const previousId = flatOrder[index];\n const entry = entries[previousId];\n return { entry, index };\n }\n return { entry: null, index: null };\n}\n\n/**\n * Gets first group in a normalised rundown, if it exists\n */\nexport function getFirstGroupNormal(entries: RundownEntries, flatOrder: EntryId[]): GroupIndexAndEntry {\n for (let index = 0; index < flatOrder.length; index++) {\n const id = flatOrder[index];\n const entry = entries[id];\n if (isOntimeGroup(entry)) {\n return { entry, index };\n }\n }\n return { entry: null, index: null };\n}\n\n/**\n * Gets last group in a normalised rundown, if it exists\n */\nexport function getLastGroupNormal(entries: RundownEntries, flatOrder: EntryId[]): GroupIndexAndEntry {\n for (let index = flatOrder.length - 1; index >= 0; index--) {\n const id = flatOrder[index];\n const entry = entries[id];\n if (isOntimeGroup(entry)) {\n return { entry, index };\n }\n }\n return { entry: null, index: null };\n}\n\n/**\n * Gets previous scheduled event in a normalised rundown, if it exists\n */\nexport function getPreviousEventNormal(\n entries: RundownEntries,\n order: EntryId[],\n currentId: EntryId,\n): { previousEvent: OntimeEvent | null; previousIndex: number | null } {\n const index = order.findIndex((entryId) => entryId === currentId);\n if (index < 0) {\n return { previousEvent: null, previousIndex: null };\n }\n for (let i = index - 1; i >= 0; i--) {\n const previousId = order[i];\n const previousEvent = entries[previousId];\n if (isOntimeEvent(previousEvent)) {\n return { previousEvent, previousIndex: i };\n }\n }\n return { previousEvent: null, previousIndex: null };\n}\n\n/**\n * @description swaps two OntimeEvents in the rundown\n */\nexport const swapEventData = (eventA: OntimeEvent, eventB: OntimeEvent): [newA: OntimeEvent, newB: OntimeEvent] => {\n const newA = {\n ...eventB,\n // events keep the ID\n id: eventA.id,\n // events keep the schedule\n timeStart: eventA.timeStart,\n timeEnd: eventA.timeEnd,\n duration: eventA.duration,\n linkStart: eventA.linkStart,\n parent: eventA.parent,\n // keep schedule metadata\n delay: eventA.delay,\n gap: eventA.gap,\n dayOffset: eventA.dayOffset,\n // keep revision number\n revision: eventA.revision,\n };\n\n const newB = {\n ...eventA,\n // events keep the ID\n id: eventB.id,\n // events keep the schedule\n timeStart: eventB.timeStart,\n timeEnd: eventB.timeEnd,\n duration: eventB.duration,\n linkStart: eventB.linkStart,\n parent: eventB.parent,\n // keep schedule metadata\n delay: eventB.delay,\n gap: eventB.gap,\n dayOffset: eventB.dayOffset,\n // keep revision number\n revision: eventB.revision,\n };\n\n return [newA, newB];\n};\n\nexport function getEventWithId(rundown: OntimeEntry[], id: EntryId): OntimeEntry | undefined {\n return rundown.find((event) => event.id === id);\n}\n\n/**\n * Gets relevant group element for a given ID\n */\nexport function getPreviousGroupNormal(\n rundown: RundownEntries,\n flatOrder: EntryId[],\n currentId: EntryId | null,\n): IndexAndEntry {\n if (currentId === null) {\n return getLastGroupNormal(rundown, flatOrder);\n }\n\n let foundCurrentEvent = false;\n // Iterate backwards through the rundown to find the current event\n for (let index = flatOrder.length - 1; index >= 0; index--) {\n const id = flatOrder[index];\n if (!foundCurrentEvent && id === currentId) {\n // set the flag when the current event is found\n foundCurrentEvent = true;\n continue;\n }\n // the first group before the current event is the relevant one\n const entry = rundown[id];\n if (foundCurrentEvent && isOntimeGroup(entry)) {\n return { entry, index };\n }\n }\n // no groups exist before current event\n return { entry: null, index: null };\n}\n\n/**\n * Gets next group element for a given ID\n */\nexport function getNextGroupNormal(\n rundown: RundownEntries,\n flatOrder: EntryId[],\n currentId: EntryId | null,\n): IndexAndEntry {\n if (currentId === null) {\n return getFirstGroupNormal(rundown, flatOrder);\n }\n\n let foundCurrentEvent = false;\n // Iterate backwards through the rundown to find the current event\n for (let index = 0; index < flatOrder.length; index++) {\n const id = flatOrder[index];\n if (!foundCurrentEvent && id === currentId) {\n // set the flag when the current event is found\n foundCurrentEvent = true;\n continue;\n }\n // the first group before the current event is the relevant one\n const entry = rundown[id];\n if (foundCurrentEvent && isOntimeGroup(entry)) {\n return { entry, index };\n }\n }\n // no groups exist before current event\n return { entry: null, index: null };\n}\n\n/**\n * Receives an insertion order and returns the reference to an entry ID\n * after which we will insert the new entry\n */\nexport function getInsertAfterId(\n rundown: Rundown,\n parent: OntimeGroup | null,\n afterId?: EntryId,\n beforeId?: EntryId,\n): EntryId | null {\n if (afterId) return afterId;\n if (!beforeId) return null;\n\n const insertionList = parent ? parent.entries : rundown.order;\n if (!insertionList || insertionList.length === 0) return null;\n\n const atIndex = insertionList.findIndex((id) => id === beforeId);\n if (atIndex < 1) return null;\n return insertionList[atIndex - 1];\n}\n\ntype ResolveInsertParentOptions = {\n parent?: EntryId | null;\n after?: EntryId;\n before?: EntryId;\n};\n\n/**\n * Resolves the parent ID for an insertion.\n * Uses explicit parent first, then infers from sibling references.\n */\nexport function resolveInsertParent(rundown: Rundown, options: ResolveInsertParentOptions): EntryId | null {\n if (options.parent) {\n return options.parent;\n }\n\n const referenceId = options.after ?? options.before;\n if (!referenceId) return null;\n\n const maybeSibling = rundown.entries[referenceId];\n if (maybeSibling && 'parent' in maybeSibling && maybeSibling.parent) {\n return maybeSibling.parent;\n }\n\n return null;\n}\n\n/**\n * Add entry to rundown, mutates the rundown in place.\n * Handles the following cases:\n * - 1a. add entry in group, after a given entry\n * - 1b. add entry in group, at the beginning (right after the group header)\n * - 2a. add entry to the rundown, after a given entry\n * - 2b. add entry to the rundown, at the beginning\n */\nexport function addToRundown(\n rundown: Rundown,\n entry: OntimeEntry,\n afterId: EntryId | null,\n parent: OntimeGroup | null,\n): OntimeEntry {\n if (parent) {\n // 1. inserting an entry inside a group\n\n // assign the parent reference on the entry\n if ('parent' in entry) {\n entry.parent = parent.id;\n }\n\n if (afterId) {\n // 1a. insert after a given entry within the group\n const atEventsIndex = parent.entries.indexOf(afterId) + 1;\n const atFlatIndex = rundown.flatOrder.indexOf(afterId) + 1;\n parent.entries = insertAtIndex(atEventsIndex, entry.id, parent.entries);\n rundown.flatOrder = insertAtIndex(atFlatIndex, entry.id, rundown.flatOrder);\n } else {\n // 1b. insert at the beginning of the group (right after the group header in flatOrder)\n parent.entries = insertAtIndex(0, entry.id, parent.entries);\n const atFlatIndex = rundown.flatOrder.indexOf(parent.id) + 1;\n rundown.flatOrder = insertAtIndex(atFlatIndex, entry.id, rundown.flatOrder);\n }\n } else {\n // 2. inserting an entry at top level\n if (afterId) {\n // 2a. insert after a given entry\n const atOrderIndex = rundown.order.indexOf(afterId) + 1;\n const atFlatIndex = rundown.flatOrder.indexOf(afterId) + 1;\n rundown.order = insertAtIndex(atOrderIndex, entry.id, rundown.order);\n rundown.flatOrder = insertAtIndex(atFlatIndex, entry.id, rundown.flatOrder);\n } else {\n // 2b. insert at the beginning\n rundown.order = insertAtIndex(0, entry.id, rundown.order);\n rundown.flatOrder = insertAtIndex(0, entry.id, rundown.flatOrder);\n }\n }\n\n // either way, we register the entry in the entries map\n rundown.entries[entry.id] = entry;\n return entry;\n}\n"],"names":["insertAtIndex","index","item","array","modifiedArray","unshift","length","push","splice","reorderArray","fromIndex","toIndex","reorderedItem","getFirstNormal","entries","order","eventId","getFirstEvent","rundown","i","firstEvent","isOntimeEvent","isPlayableEvent","firstIndex","getLastNormal","lastId","at","undefined","getLastEvent","lastEvent","lastIndex","getNextNormal","flatOrder","currentId","entry","currentIndex","findIndex","id","nextId","getNextEvent","nextEvent","nextIndex","getPreviousNormal","previousId","getFirstGroupNormal","isOntimeGroup","getLastGroupNormal","swapEventData","eventA","eventB","newA","timeStart","timeEnd","duration","linkStart","parent","delay","gap","dayOffset","revision","newB","getEventWithId","find","event","getPreviousGroupNormal","foundCurrentEvent","getNextGroupNormal","getInsertAfterId","afterId","beforeId","insertionList","atIndex","resolveInsertParent","options","referenceId","after","before","maybeSibling","addToRundown","atEventsIndex","indexOf","atFlatIndex","atOrderIndex"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{h as g,j as v}from"./vendor-BKUJ0_Du.js";import{T as u,y as d,h as w}from"./index-Dm-4OTmY.js";import{b as c,a as x}from"./viewUtils-29a3Mmiu.js";import{i as S}from"./playbackstate-Dl_ZJABT.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="64a39729-db6e-4371-b9d1-f07ea4e4b468",e._sentryDebugIdIdentifier="sentry-dbid-64a39729-db6e-4371-b9d1-f07ea4e4b468")}catch{}})();const p=(e,n,t)=>{for(;e<n;){const o=Math.floor((e+n)/2);if(o===e)break;t(o)?e=o:n=o}return e};function C({children:e,mode:n="multi",min:t=16,max:o=256,...s}){const i=g.useRef(null),l=g.useCallback(()=>{const r=i.current;return r?r.scrollHeight>r.clientHeight||r.scrollWidth>r.clientWidth:!1},[]),a=g.useCallback(()=>{const r=i.current;if(!r)return;const f=r.style.visibility;r.style.visibility="hidden";const h=p(t,o+1,y=>(r.style.fontSize=`${y}px`,!l()));r.style.fontSize=`${h}px`,r.style.visibility=f},[l,t,o]);return g.useEffect(()=>{const r=i.current;if(!r)return;a();const f=new ResizeObserver(a);return f.observe(r),()=>f.disconnect()},[e,n,a]),v.jsx("div",{ref:i,style:{whiteSpace:n==="single"?"nowrap":"normal"},...s,children:e})}function F(e){return e.text!==""&&e.visible}function z(e){return e===w.Play||e===w.Roll}function E(e,n){return(e??0)+(n??0)}function P(e){return e!==u.None&&e!==u.Clock}function k(e){return e!==u.Clock}const b={4:28,5:28,6:25,8:18,9:18};function I(e,n){const t=e.length;let o=100/(t-1)*1.25;return b[t]&&(o=b[t]),n&&(o*=.6),o}function W(e,n,t,o,s,i){return i?{showEndMessage:!1,showFinished:!1,showWarning:!1,showDanger:!1}:e===u.CountDown||n?{showEndMessage:t===d.Overtime&&o&&s!=="",showFinished:t===d.Overtime,showWarning:t===d.Warning,showDanger:t===d.Danger}:{showEndMessage:!1,showFinished:!1,showWarning:!1,showDanger:!1}}function B(e,n,t,o,s,i){if(!i){if(e.timer.secondarySource==="aux1"||e.timer.secondarySource==="aux2"||e.timer.secondarySource==="aux3")return x(n,u.CountDown,t,{removeSeconds:o,removeLeadingZero:s});if(e.timer.secondarySource==="secondary"&&e.secondary)return e.secondary}}function O(e,n,t,o,s,i,l){if(s===w.Stop)return{showNow:!1,nowMain:void 0,nowSecondary:void 0,showNext:!1,nextMain:void 0,nextSecondary:void 0};const a=S(s)&&i!==d.Pending,r=a?c(e,t??"title"):void 0,f=a?c(e,o,l):void 0,h=a?c(n,t??"title"):c(e,t??"title"),y=a?c(n,o,l):c(e,o,l);return{showNow:t!=="none"&&(!!r||!!f),nowMain:r,nowSecondary:f,showNext:t!=="none"&&(!!h||!!y),nextMain:h,nextSecondary:y}}export{C as F,W as a,z as b,k as c,P as d,O as e,E as f,F as g,B as h,I as i};
2
+ //# sourceMappingURL=timer.utils-B4bvsns3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timer.utils-P25ngopd.js","sources":["../../src/common/components/fit-text/fitText.utils.ts","../../src/common/components/fit-text/FitText.tsx","../../src/views/timer/timer.utils.ts"],"sourcesContent":["/**\n * @param low inclusive, must be true on predicate function\n * @param high exclusive,\n * @param predicate predicate function\n */\nexport const bsearch = (low: number, high: number, predicate: (mid: number) => boolean): number => {\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (mid === low) break;\n\n if (predicate(mid)) {\n low = mid;\n } else {\n high = mid;\n }\n }\n return low;\n};\n","/**\n * Copied from\n * https://github.com/namhong2001/react-textfit/blob/master/index.tsx\n */\n\nimport { HTMLAttributes, PropsWithChildren, useCallback, useEffect, useRef } from 'react';\n\nimport { bsearch } from './fitText.utils';\n\ninterface FitTextProps extends HTMLAttributes<HTMLDivElement> {\n mode?: 'single' | 'multi';\n min?: number; // inclusive\n max?: number; // inclusive\n}\n\nexport function FitText({\n children,\n mode = 'multi',\n min = 16,\n max = 256,\n ...elementProps\n}: PropsWithChildren<FitTextProps>) {\n const ref = useRef<HTMLDivElement>(null);\n\n const isOverflown = useCallback(() => {\n const el = ref.current;\n if (!el) return false;\n return el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth;\n }, []);\n\n const setFontSize = useCallback(() => {\n const el = ref.current;\n if (!el) return;\n\n const originVisibility = el.style.visibility;\n\n el.style.visibility = 'hidden';\n const fontSize = bsearch(min, max + 1, (mid) => {\n el.style.fontSize = `${mid}px`;\n return !isOverflown();\n });\n el.style.fontSize = `${fontSize}px`;\n el.style.visibility = originVisibility;\n }, [isOverflown, min, max]);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n setFontSize();\n const observer = new ResizeObserver(setFontSize);\n observer.observe(el);\n\n return () => observer.disconnect();\n }, [children, mode, setFontSize]);\n\n return (\n <div\n ref={ref}\n style={{\n whiteSpace: mode === 'single' ? 'nowrap' : 'normal',\n }}\n {...elementProps}\n >\n {children}\n </div>\n );\n}\n","import {\n MaybeNumber,\n MessageState,\n OntimeEvent,\n Playback,\n RundownEntries,\n TimerMessage,\n TimerPhase,\n TimerType,\n} from 'ontime-types';\nimport { isPlaybackActive } from 'ontime-utils';\n\nimport { getFormattedTimer, getPropertyValue } from '../common/viewUtils';\n\n/**\n * Whether a message should be shown\n */\nexport function getShowMessage(message: TimerMessage): boolean {\n return message.text !== '' && message.visible;\n}\n\n/**\n * Whether the playback is playing\n */\nexport function getIsPlaying(playback: Playback): boolean {\n return playback === Playback.Play || playback === Playback.Roll;\n}\n\n/**\n * Gets the total time from the duration and added time of an event\n */\nexport function getTotalTime(duration: MaybeNumber, addedTime: MaybeNumber): number {\n return (duration ?? 0) + (addedTime ?? 0);\n}\n\n/**\n * Whether the progress bar should be shown for this timer type\n */\nexport function getShowProgressBar(timerType: TimerType) {\n return timerType !== TimerType.None && timerType !== TimerType.Clock;\n}\n\n/**\n * Whether the clock should be shown with this timer type\n */\nexport function getShowClock(timerType: TimerType) {\n return timerType !== TimerType.Clock;\n}\n\nconst fontSizeMap: { [key: number]: number } = {\n 4: 28, // 9:01\n 5: 28, // -9:01, 10:01, 9 min\n 6: 25, // -10:01, 10 min\n 8: 18, // 23:01:01\n 9: 18, // -23:01:01\n};\n\n/**\n * Finds a font size that fits the timer in the screen\n * Unfortunately hand tweaked\n */\nexport function getEstimatedFontSize(stageTimer: string, secondaryContent?: string): number {\n const stageTimerCharacters = stageTimer.length;\n let timerFontSize = (100 / (stageTimerCharacters - 1)) * 1.25;\n\n if (fontSizeMap[stageTimerCharacters]) {\n timerFontSize = fontSizeMap[stageTimerCharacters];\n }\n\n // we need to shrink the timer if the external is going to be there\n // this number has been tweaked to fit in a landscape mobile screen\n if (secondaryContent) {\n timerFontSize *= 0.6;\n }\n\n return timerFontSize;\n}\n\n/**\n * which, if any, modifier should be shown at any time\n */\nexport function getShowModifiers(\n timerType: TimerType,\n countToEnd: boolean,\n phase: TimerPhase,\n freezeOvertime: boolean,\n freezeMessage: string,\n hidePhase: boolean,\n) {\n if (hidePhase) {\n return {\n showEndMessage: false,\n showFinished: false,\n showWarning: false,\n showDanger: false,\n };\n }\n\n const showModifiers = timerType === TimerType.CountDown || countToEnd;\n if (!showModifiers) {\n return {\n showEndMessage: false,\n showFinished: false,\n showWarning: false,\n showDanger: false,\n };\n }\n\n return {\n showEndMessage: phase === TimerPhase.Overtime && freezeOvertime && freezeMessage !== '',\n showFinished: phase === TimerPhase.Overtime,\n showWarning: phase === TimerPhase.Warning,\n showDanger: phase === TimerPhase.Danger,\n };\n}\n\n/**\n * What, if anything, should be displayed in the secondary field\n */\nexport function getSecondaryDisplay(\n message: MessageState,\n currentAux: MaybeNumber,\n localisedMinutes: string,\n removeSeconds: boolean,\n removeLeadingZero: boolean,\n hideSecondary: boolean,\n): string | undefined {\n if (hideSecondary) {\n return;\n }\n if (\n message.timer.secondarySource === 'aux1' ||\n message.timer.secondarySource === 'aux2' ||\n message.timer.secondarySource === 'aux3'\n ) {\n return getFormattedTimer(currentAux, TimerType.CountDown, localisedMinutes, {\n removeSeconds,\n removeLeadingZero,\n });\n }\n if (message.timer.secondarySource === 'secondary' && message.secondary) {\n return message.secondary;\n }\n return;\n}\n\n/**\n * What should we be showing in the cards?\n */\nexport function getCardData(\n eventNow: OntimeEvent | null,\n eventNext: OntimeEvent | null,\n mainSource: keyof OntimeEvent | null | 'none',\n secondarySource: keyof OntimeEvent | null | 'none',\n playback: Playback,\n phase: TimerPhase,\n entries: RundownEntries,\n) {\n if (playback === Playback.Stop) {\n return {\n showNow: false,\n nowMain: undefined,\n nowSecondary: undefined,\n showNext: false,\n nextMain: undefined,\n nextSecondary: undefined,\n };\n }\n\n // pending roll timers would be classified as active\n const hasActiveTimer = isPlaybackActive(playback) && phase !== TimerPhase.Pending;\n\n // if we are loaded, we show the upcoming event as next\n const nowMain = hasActiveTimer ? getPropertyValue(eventNow, mainSource ?? 'title') : undefined;\n const nowSecondary = hasActiveTimer ? getPropertyValue(eventNow, secondarySource, entries) : undefined;\n const nextMain = hasActiveTimer\n ? getPropertyValue(eventNext, mainSource ?? 'title')\n : getPropertyValue(eventNow, mainSource ?? 'title');\n const nextSecondary = hasActiveTimer\n ? getPropertyValue(eventNext, secondarySource, entries)\n : getPropertyValue(eventNow, secondarySource, entries);\n\n return {\n showNow: mainSource !== 'none' || Boolean(nowSecondary),\n nowMain,\n nowSecondary,\n showNext: mainSource !== 'none' || Boolean(nextSecondary),\n nextMain,\n nextSecondary,\n };\n}\n"],"names":["bsearch","low","high","predicate","mid","Math","floor","FitText","children","mode","min","max","elementProps","ref","useRef","isOverflown","useCallback","el","current","scrollHeight","clientHeight","scrollWidth","clientWidth","setFontSize","originVisibility","style","visibility","fontSize","useEffect","observer","ResizeObserver","observe","disconnect","jsx","whiteSpace","getShowMessage","message","text","visible","getIsPlaying","playback","Playback","Play","Roll","getTotalTime","duration","addedTime","getShowProgressBar","timerType","TimerType","None","Clock","getShowClock","fontSizeMap","getEstimatedFontSize","stageTimer","secondaryContent","stageTimerCharacters","length","timerFontSize","getShowModifiers","countToEnd","phase","freezeOvertime","freezeMessage","hidePhase","showEndMessage","showFinished","showWarning","showDanger","CountDown","TimerPhase","Overtime","Warning","Danger","getSecondaryDisplay","currentAux","localisedMinutes","removeSeconds","removeLeadingZero","hideSecondary","timer","secondarySource","getFormattedTimer","secondary","getCardData","eventNow","eventNext","mainSource","entries","Stop","showNow","nowMain","undefined","nowSecondary","showNext","nextMain","nextSecondary","hasActiveTimer","isPlaybackActive","Pending","getPropertyValue","Boolean"],"mappings":"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"}
1
+ {"version":3,"file":"timer.utils-B4bvsns3.js","sources":["../../src/common/components/fit-text/fitText.utils.ts","../../src/common/components/fit-text/FitText.tsx","../../src/views/timer/timer.utils.ts"],"sourcesContent":["/**\n * @param low inclusive, must be true on predicate function\n * @param high exclusive,\n * @param predicate predicate function\n */\nexport const bsearch = (low: number, high: number, predicate: (mid: number) => boolean): number => {\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (mid === low) break;\n\n if (predicate(mid)) {\n low = mid;\n } else {\n high = mid;\n }\n }\n return low;\n};\n","/**\n * Copied from\n * https://github.com/namhong2001/react-textfit/blob/master/index.tsx\n */\n\nimport { HTMLAttributes, PropsWithChildren, useCallback, useEffect, useRef } from 'react';\n\nimport { bsearch } from './fitText.utils';\n\ninterface FitTextProps extends HTMLAttributes<HTMLDivElement> {\n mode?: 'single' | 'multi';\n min?: number; // inclusive\n max?: number; // inclusive\n}\n\nexport function FitText({\n children,\n mode = 'multi',\n min = 16,\n max = 256,\n ...elementProps\n}: PropsWithChildren<FitTextProps>) {\n const ref = useRef<HTMLDivElement>(null);\n\n const isOverflown = useCallback(() => {\n const el = ref.current;\n if (!el) return false;\n return el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth;\n }, []);\n\n const setFontSize = useCallback(() => {\n const el = ref.current;\n if (!el) return;\n\n const originVisibility = el.style.visibility;\n\n el.style.visibility = 'hidden';\n const fontSize = bsearch(min, max + 1, (mid) => {\n el.style.fontSize = `${mid}px`;\n return !isOverflown();\n });\n el.style.fontSize = `${fontSize}px`;\n el.style.visibility = originVisibility;\n }, [isOverflown, min, max]);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n setFontSize();\n const observer = new ResizeObserver(setFontSize);\n observer.observe(el);\n\n return () => observer.disconnect();\n }, [children, mode, setFontSize]);\n\n return (\n <div\n ref={ref}\n style={{\n whiteSpace: mode === 'single' ? 'nowrap' : 'normal',\n }}\n {...elementProps}\n >\n {children}\n </div>\n );\n}\n","import {\n MaybeNumber,\n MessageState,\n OntimeEvent,\n Playback,\n RundownEntries,\n TimerMessage,\n TimerPhase,\n TimerType,\n} from 'ontime-types';\nimport { isPlaybackActive } from 'ontime-utils';\n\nimport { getFormattedTimer, getPropertyValue } from '../common/viewUtils';\n\n/**\n * Whether a message should be shown\n */\nexport function getShowMessage(message: TimerMessage): boolean {\n return message.text !== '' && message.visible;\n}\n\n/**\n * Whether the playback is playing\n */\nexport function getIsPlaying(playback: Playback): boolean {\n return playback === Playback.Play || playback === Playback.Roll;\n}\n\n/**\n * Gets the total time from the duration and added time of an event\n */\nexport function getTotalTime(duration: MaybeNumber, addedTime: MaybeNumber): number {\n return (duration ?? 0) + (addedTime ?? 0);\n}\n\n/**\n * Whether the progress bar should be shown for this timer type\n */\nexport function getShowProgressBar(timerType: TimerType) {\n return timerType !== TimerType.None && timerType !== TimerType.Clock;\n}\n\n/**\n * Whether the clock should be shown with this timer type\n */\nexport function getShowClock(timerType: TimerType) {\n return timerType !== TimerType.Clock;\n}\n\nconst fontSizeMap: { [key: number]: number } = {\n 4: 28, // 9:01\n 5: 28, // -9:01, 10:01, 9 min\n 6: 25, // -10:01, 10 min\n 8: 18, // 23:01:01\n 9: 18, // -23:01:01\n};\n\n/**\n * Finds a font size that fits the timer in the screen\n * Unfortunately hand tweaked\n */\nexport function getEstimatedFontSize(stageTimer: string, secondaryContent?: string): number {\n const stageTimerCharacters = stageTimer.length;\n let timerFontSize = (100 / (stageTimerCharacters - 1)) * 1.25;\n\n if (fontSizeMap[stageTimerCharacters]) {\n timerFontSize = fontSizeMap[stageTimerCharacters];\n }\n\n // we need to shrink the timer if the external is going to be there\n // this number has been tweaked to fit in a landscape mobile screen\n if (secondaryContent) {\n timerFontSize *= 0.6;\n }\n\n return timerFontSize;\n}\n\n/**\n * which, if any, modifier should be shown at any time\n */\nexport function getShowModifiers(\n timerType: TimerType,\n countToEnd: boolean,\n phase: TimerPhase,\n freezeOvertime: boolean,\n freezeMessage: string,\n hidePhase: boolean,\n) {\n if (hidePhase) {\n return {\n showEndMessage: false,\n showFinished: false,\n showWarning: false,\n showDanger: false,\n };\n }\n\n const showModifiers = timerType === TimerType.CountDown || countToEnd;\n if (!showModifiers) {\n return {\n showEndMessage: false,\n showFinished: false,\n showWarning: false,\n showDanger: false,\n };\n }\n\n return {\n showEndMessage: phase === TimerPhase.Overtime && freezeOvertime && freezeMessage !== '',\n showFinished: phase === TimerPhase.Overtime,\n showWarning: phase === TimerPhase.Warning,\n showDanger: phase === TimerPhase.Danger,\n };\n}\n\n/**\n * What, if anything, should be displayed in the secondary field\n */\nexport function getSecondaryDisplay(\n message: MessageState,\n currentAux: MaybeNumber,\n localisedMinutes: string,\n removeSeconds: boolean,\n removeLeadingZero: boolean,\n hideSecondary: boolean,\n): string | undefined {\n if (hideSecondary) {\n return;\n }\n if (\n message.timer.secondarySource === 'aux1' ||\n message.timer.secondarySource === 'aux2' ||\n message.timer.secondarySource === 'aux3'\n ) {\n return getFormattedTimer(currentAux, TimerType.CountDown, localisedMinutes, {\n removeSeconds,\n removeLeadingZero,\n });\n }\n if (message.timer.secondarySource === 'secondary' && message.secondary) {\n return message.secondary;\n }\n return;\n}\n\n/**\n * What should we be showing in the cards?\n */\nexport function getCardData(\n eventNow: OntimeEvent | null,\n eventNext: OntimeEvent | null,\n mainSource: keyof OntimeEvent | null | 'none',\n secondarySource: keyof OntimeEvent | null | 'none',\n playback: Playback,\n phase: TimerPhase,\n entries: RundownEntries,\n) {\n if (playback === Playback.Stop) {\n return {\n showNow: false,\n nowMain: undefined,\n nowSecondary: undefined,\n showNext: false,\n nextMain: undefined,\n nextSecondary: undefined,\n };\n }\n\n // pending roll timers would be classified as active\n const hasActiveTimer = isPlaybackActive(playback) && phase !== TimerPhase.Pending;\n\n // if we are loaded, we show the upcoming event as next\n const nowMain = hasActiveTimer ? getPropertyValue(eventNow, mainSource ?? 'title') : undefined;\n const nowSecondary = hasActiveTimer ? getPropertyValue(eventNow, secondarySource, entries) : undefined;\n const nextMain = hasActiveTimer\n ? getPropertyValue(eventNext, mainSource ?? 'title')\n : getPropertyValue(eventNow, mainSource ?? 'title');\n const nextSecondary = hasActiveTimer\n ? getPropertyValue(eventNext, secondarySource, entries)\n : getPropertyValue(eventNow, secondarySource, entries);\n\n return {\n showNow: mainSource !== 'none' && (Boolean(nowMain) || Boolean(nowSecondary)),\n nowMain,\n nowSecondary,\n showNext: mainSource !== 'none' && (Boolean(nextMain) || Boolean(nextSecondary)),\n nextMain,\n nextSecondary,\n };\n}\n"],"names":["bsearch","low","high","predicate","mid","Math","floor","FitText","children","mode","min","max","elementProps","ref","useRef","isOverflown","useCallback","el","current","scrollHeight","clientHeight","scrollWidth","clientWidth","setFontSize","originVisibility","style","visibility","fontSize","useEffect","observer","ResizeObserver","observe","disconnect","jsx","whiteSpace","getShowMessage","message","text","visible","getIsPlaying","playback","Playback","Play","Roll","getTotalTime","duration","addedTime","getShowProgressBar","timerType","TimerType","None","Clock","getShowClock","fontSizeMap","getEstimatedFontSize","stageTimer","secondaryContent","stageTimerCharacters","length","timerFontSize","getShowModifiers","countToEnd","phase","freezeOvertime","freezeMessage","hidePhase","showEndMessage","showFinished","showWarning","showDanger","CountDown","TimerPhase","Overtime","Warning","Danger","getSecondaryDisplay","currentAux","localisedMinutes","removeSeconds","removeLeadingZero","hideSecondary","timer","secondarySource","getFormattedTimer","secondary","getCardData","eventNow","eventNext","mainSource","entries","Stop","showNow","nowMain","undefined","nowSecondary","showNext","nextMain","nextSecondary","hasActiveTimer","isPlaybackActive","Pending","getPropertyValue","Boolean"],"mappings":"miBAKO,MAAMA,EAAUA,CAACC,EAAaC,EAAcC,IAAgD,CACjG,KAAOF,EAAMC,GAAM,CACjB,MAAME,EAAMC,KAAKC,OAAOL,EAAMC,GAAQ,CAAC,EACvC,GAAIE,IAAQH,EAAK,MAEbE,EAAUC,CAAG,EACTA,EAAAA,EAECA,EAAAA,CACT,CAEKH,OAAAA,CACT,ECFO,SAASM,EAAQ,CACtBC,SAAAA,EACAC,KAAAA,EAAO,QACPC,IAAAA,EAAM,GACNC,IAAAA,EAAM,IACN,GAAGC,CAC4B,EAAG,CAC5BC,MAAAA,EAAMC,SAAuB,IAAI,EAEjCC,EAAcC,EAAAA,YAAY,IAAM,CACpC,MAAMC,EAAKJ,EAAIK,QACX,OAACD,EACEA,EAAGE,aAAeF,EAAGG,cAAgBH,EAAGI,YAAcJ,EAAGK,YADhD,EAElB,EAAG,EAAE,EAECC,EAAcP,EAAAA,YAAY,IAAM,CACpC,MAAMC,EAAKJ,EAAIK,QACf,GAAI,CAACD,EAAI,OAEHO,MAAAA,EAAmBP,EAAGQ,MAAMC,WAElCT,EAAGQ,MAAMC,WAAa,SACtB,MAAMC,EAAW3B,EAAQU,EAAKC,EAAM,EAAYP,IAC3CqB,EAAAA,MAAME,SAAW,GAAGvB,CAAG,KACnB,CAACW,EAAY,EACrB,EACEU,EAAAA,MAAME,SAAW,GAAGA,CAAQ,KAC/BV,EAAGQ,MAAMC,WAAaF,CACrB,EAAA,CAACT,EAAaL,EAAKC,CAAG,CAAC,EAE1BiB,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMX,EAAKJ,EAAIK,QACf,GAAI,CAACD,EAAI,OAEGM,EAAA,EACNM,MAAAA,EAAW,IAAIC,eAAeP,CAAW,EAC/CM,OAAAA,EAASE,QAAQd,CAAE,EAEZ,IAAMY,EAASG,WAAW,CAChC,EAAA,CAACxB,EAAUC,EAAMc,CAAW,CAAC,EAG9BU,MAAC,MACC,CAAA,IAAApB,EACA,MAAO,CACLqB,WAAYzB,IAAS,SAAW,SAAW,QAAA,EAEzCG,GAAAA,EAEHJ,SAAAA,EACH,CAEJ,CClDO,SAAS2B,EAAeC,EAAgC,CACtDA,OAAAA,EAAQC,OAAS,IAAMD,EAAQE,OACxC,CAKO,SAASC,EAAaC,EAA6B,CACxD,OAAOA,IAAaC,EAASC,MAAQF,IAAaC,EAASE,IAC7D,CAKgBC,SAAAA,EAAaC,EAAuBC,EAAgC,CAC1ED,OAAAA,GAAY,IAAMC,GAAa,EACzC,CAKO,SAASC,EAAmBC,EAAsB,CACvD,OAAOA,IAAcC,EAAUC,MAAQF,IAAcC,EAAUE,KACjE,CAKO,SAASC,EAAaJ,EAAsB,CACjD,OAAOA,IAAcC,EAAUE,KACjC,CAEA,MAAME,EAAyC,CAC7C,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,EACL,EAMgBC,SAAAA,EAAqBC,EAAoBC,EAAmC,CAC1F,MAAMC,EAAuBF,EAAWG,OACpCC,IAAAA,EAAiB,KAAOF,EAAuB,GAAM,KAErDJ,OAAAA,EAAYI,CAAoB,IAClCE,EAAgBN,EAAYI,CAAoB,GAK9CD,IACeG,GAAA,IAGZA,CACT,CAKO,SAASC,EACdZ,EACAa,EACAC,EACAC,EACAC,EACAC,EACA,CACA,OAAIA,EACK,CACLC,eAAgB,GAChBC,aAAc,GACdC,YAAa,GACbC,WAAY,EACd,EAGoBrB,IAAcC,EAAUqB,WAAaT,EAUpD,CACLK,eAAgBJ,IAAUS,EAAWC,UAAYT,GAAkBC,IAAkB,GACrFG,aAAcL,IAAUS,EAAWC,SACnCJ,YAAaN,IAAUS,EAAWE,QAClCJ,WAAYP,IAAUS,EAAWG,MACnC,EAbS,CACLR,eAAgB,GAChBC,aAAc,GACdC,YAAa,GACbC,WAAY,EACd,CASJ,CAKO,SAASM,EACdvC,EACAwC,EACAC,EACAC,EACAC,EACAC,EACoB,CACpB,GAAIA,CAAAA,EAIF5C,IAAAA,EAAQ6C,MAAMC,kBAAoB,QAClC9C,EAAQ6C,MAAMC,kBAAoB,QAClC9C,EAAQ6C,MAAMC,kBAAoB,OAElC,OAAOC,EAAkBP,EAAY3B,EAAUqB,UAAWO,EAAkB,CAC1EC,cAAAA,EACAC,kBAAAA,CAAAA,CACD,EAEH,GAAI3C,EAAQ6C,MAAMC,kBAAoB,aAAe9C,EAAQgD,UAC3D,OAAOhD,EAAQgD,UAGnB,CAKO,SAASC,EACdC,EACAC,EACAC,EACAN,EACA1C,EACAsB,EACA2B,EACA,CACIjD,GAAAA,IAAaC,EAASiD,KACjB,MAAA,CACLC,QAAS,GACTC,QAASC,OACTC,aAAcD,OACdE,SAAU,GACVC,SAAUH,OACVI,cAAeJ,MACjB,EAIF,MAAMK,EAAiBC,EAAiB3D,CAAQ,GAAKsB,IAAUS,EAAW6B,QAGpER,EAAUM,EAAiBG,EAAiBf,EAAUE,GAAc,OAAO,EAAIK,OAC/EC,EAAeI,EAAiBG,EAAiBf,EAAUJ,EAAiBO,CAAO,EAAII,OACvFG,EAAWE,EACbG,EAAiBd,EAAWC,GAAc,OAAO,EACjDa,EAAiBf,EAAUE,GAAc,OAAO,EAC9CS,EAAgBC,EAClBG,EAAiBd,EAAWL,EAAiBO,CAAO,EACpDY,EAAiBf,EAAUJ,EAAiBO,CAAO,EAEhD,MAAA,CACLE,QAASH,IAAe,SAAWc,EAAQV,GAAYU,EAAQR,GAC/DF,QAAAA,EACAE,aAAAA,EACAC,SAAUP,IAAe,SAAWc,EAAQN,GAAaM,EAAQL,GACjED,SAAAA,EACAC,cAAAA,CACF,CACF"}
@@ -0,0 +1,2 @@
1
+ import{a,k as o}from"./vendor-BKUJ0_Du.js";import{ay as i,aH as c,aB as f}from"./index-Dm-4OTmY.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="c3058b16-c93c-46fa-a981-99818bf053f3",e._sentryDebugIdIdentifier="sentry-dbid-c3058b16-c93c-46fa-a981-99818bf053f3")}catch{}})();const s=`${i}/custom-fields`;async function l(e){return(await a.get(s,{signal:e==null?void 0:e.signal})).data}async function p(e){return(await a.post(s,{...e})).data}async function h(e,t){return(await a.put(`${s}/${e}`,{...t})).data}async function w(e){return(await a.delete(`${s}/${e}`)).data}const y={};function F(){const{data:e,status:t,isFetching:r,isError:u,refetch:d}=o({queryKey:f,queryFn:({signal:n})=>l({signal:n}),placeholderData:(n,b)=>n,refetchInterval:c});return{data:e??y,status:t,isFetching:r,isError:u,refetch:d}}export{w as d,h as e,p,F as u};
2
+ //# sourceMappingURL=useCustomFields-BBE4LBBr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCustomFields-BBE4LBBr.js","sources":["../../src/common/api/customFields.ts","../../src/common/hooks-query/useCustomFields.ts"],"sourcesContent":["import axios from 'axios';\nimport { CustomField, CustomFieldKey, CustomFields } from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\nimport type { RequestOptions } from './requestOptions';\n\nconst customFieldsPath = `${apiEntryUrl}/custom-fields`;\n\n/**\n * Requests list of known custom fields\n */\nexport async function getCustomFields(options?: RequestOptions): Promise<CustomFields> {\n const res = await axios.get(customFieldsPath, { signal: options?.signal });\n return res.data;\n}\n\n/**\n * Sets list of known custom fields\n */\nexport async function postCustomField(newField: CustomField): Promise<CustomFields> {\n const res = await axios.post(customFieldsPath, { ...newField });\n return res.data;\n}\n\n/**\n * Edits single custom field\n */\nexport async function editCustomField(key: CustomFieldKey, newField: CustomField): Promise<CustomFields> {\n const res = await axios.put(`${customFieldsPath}/${key}`, { ...newField });\n return res.data;\n}\n\n/**\n * Deletes single custom field\n */\nexport async function deleteCustomField(key: CustomFieldKey): Promise<CustomFields> {\n const res = await axios.delete(`${customFieldsPath}/${key}`);\n return res.data;\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { CustomFields } from 'ontime-types';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { CUSTOM_FIELDS } from '../api/constants';\nimport { getCustomFields } from '../api/customFields';\n\nconst placeholder: CustomFields = {};\n\nexport default function useCustomFields() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: CUSTOM_FIELDS,\n queryFn: ({ signal }) => getCustomFields({ signal }),\n placeholderData: (previousData, _previousQuery) => previousData,\n refetchInterval: queryRefetchIntervalSlow,\n });\n\n return { data: data ?? placeholder, status, isFetching, isError, refetch };\n}\n"],"names":["customFieldsPath","apiEntryUrl","getCustomFields","options","axios","get","signal","data","postCustomField","newField","post","editCustomField","key","put","deleteCustomField","delete","placeholder","useCustomFields","status","isFetching","isError","refetch","useQuery","queryKey","CUSTOM_FIELDS","queryFn","placeholderData","previousData","_previousQuery","refetchInterval","queryRefetchIntervalSlow"],"mappings":"8bAMA,MAAMA,EAAmB,GAAGC,CAAW,iBAKvC,eAAsBC,EAAgBC,EAAiD,CAErF,OADY,MAAMC,EAAMC,IAAIL,EAAkB,CAAEM,OAAQH,GAAAA,YAAAA,EAASG,MAAAA,CAAQ,GAC9DC,IACb,CAKA,eAAsBC,EAAgBC,EAA8C,CAElF,OADY,MAAML,EAAMM,KAAKV,EAAkB,CAAE,GAAGS,CAAAA,CAAU,GACnDF,IACb,CAKsBI,eAAAA,EAAgBC,EAAqBH,EAA8C,CAEvG,OADY,MAAML,EAAMS,IAAI,GAAGb,CAAgB,IAAIY,CAAG,GAAI,CAAE,GAAGH,CAAAA,CAAU,GAC9DF,IACb,CAKA,eAAsBO,EAAkBF,EAA4C,CAElF,OADY,MAAMR,EAAMW,OAAO,GAAGf,CAAgB,IAAIY,CAAG,EAAE,GAChDL,IACb,CC/BA,MAAMS,EAA4B,CAAC,EAEnC,SAAwBC,GAAkB,CAClC,KAAA,CAAEV,KAAAA,EAAMW,OAAAA,EAAQC,WAAAA,EAAYC,QAAAA,EAASC,QAAAA,GAAYC,EAAS,CAC9DC,SAAUC,EACVC,QAASA,CAAC,CAAEnB,OAAAA,KAAaJ,EAAgB,CAAEI,OAAAA,CAAAA,CAAQ,EACnDoB,gBAAiBA,CAACC,EAAcC,IAAmBD,EACnDE,gBAAiBC,CAAAA,CAClB,EAEM,MAAA,CAAEvB,KAAMA,GAAQS,EAAaE,OAAAA,EAAQC,WAAAA,EAAYC,QAAAA,EAASC,QAAAA,CAAQ,CAC3E"}
@@ -0,0 +1,2 @@
1
+ import{a as x,k as be,j as e,b8 as ve,b9 as ge,ba as xe,f as le,bB as je,h as p,ad as ye,ab as _e,bj as we,bM as ie,bN as oe,bO as ce,bP as de,bQ as ue,bR as he,bS as fe,D as Ce,q as ke,s as Se,t as Ne,v as Ie}from"./vendor-BKUJ0_Du.js";import{ay as Ee,aH as $e,bH as Oe,e as pe,aj as De,ag as N,at as I,bI as q,bC as Re,as as Me,O as S,ab as Pe,ae as Fe,Z as Y,af as D,ah as Ae,Y as Ue,a9 as Te,B as We,$ as Le,ap as ze,bJ as Z,bK as J,ai as Be,an as qe,aw as Ge,ak as He,bL as X,aA as ee}from"./index-Dm-4OTmY.js";import{S as E,I as Qe,s as L,b as Ke}from"./SwatchPicker-Ckpchvjo.js";import{S as te}from"./Select-BnGTAeXJ.js";import{u as Ve}from"./useCustomFields-BBE4LBBr.js";import{i as se}from"./useRundown-DAo6huE4.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new t.Error().stack;n&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[n]="3de16bdc-356f-4d0b-b33f-5c61ab596bed",t._sentryDebugIdIdentifier="sentry-dbid-3de16bdc-356f-4d0b-b33f-5c61ab596bed")}catch{}})();const j=`${Ee}/automations`;async function Ye(t){return(await x.get(j,{signal:t==null?void 0:t.signal})).data}async function Tt(t){return(await x.post(j,t)).data}async function Wt(t){return(await x.post(`${j}/trigger`,t)).data}async function Lt(t,n){return(await x.put(`${j}/trigger/${t}`,n)).data}function zt(t){return x.delete(`${j}/trigger/${t}`)}async function Bt(t){return(await x.post(`${j}/automation`,t)).data}async function qt(t,n){return(await x.put(`${j}/automation/${t}`,n)).data}function Gt(t){return x.delete(`${j}/automation/${t}`)}function Ht(t){return x.post(`${j}/test`,t)}const Ze={enabledAutomations:!1,enabledOscIn:!1,oscPortIn:8888,triggers:[],automations:{}};function Qt(){const{data:t,status:n,isFetching:a,isError:s,refetch:r}=be({queryKey:Oe,queryFn:({signal:l})=>Ye({signal:l}),placeholderData:(l,d)=>l,refetchInterval:$e});return{data:t??Ze,status:n,isFetching:a,isError:s,refetch:r}}const Kt=/^\d+$/,Vt=/^https?:\/\//,Yt=/^[a-z0-9]+$/i,Je=/^[a-zA-Z0-9_-]*$/,Xe="_tag_1hjkh_17",et={tag:Xe};function Zt({className:t,children:n}){return e.jsx("span",{className:`${et.tag} ${t||""}`,children:n})}const tt="_blink_1cc8f_1",st="_fourtyfive_1cc8f_13",at="_radioGroup_1cc8f_17",nt="_item_1cc8f_23",rt="_horizontal_1cc8f_28",lt="_vertical_1cc8f_35",it="_radio_1cc8f_17",ot="_indicator_1cc8f_73",A={blink:tt,fourtyfive:st,radioGroup:at,item:nt,horizontal:rt,vertical:lt,radio:it,indicator:ot};function ae({items:t,className:n,orientation:a="vertical",onValueChange:s,...r}){return e.jsx(ve,{onValueChange:l=>s==null?void 0:s(l),className:pe([A.radioGroup,A[a],n]),...r,children:t.map(l=>e.jsxs("label",{className:A.item,children:[e.jsx(ge,{value:l.value.toString(),className:A.radio,children:e.jsx(xe,{className:A.indicator})}),l.label]},l.value.toString()))})}const ne={hideTableSeconds:!1,hideIndexColumn:!1,showDelayedTimes:!1,hideDelays:!1},Jt=le()(je(t=>({...ne,setOption:(n,a)=>t(s=>({...s,[n]:a})),toggleOption:n=>t(a=>({...a,[n]:!a[n]})),resetOptions:()=>t(ne)}),{name:"cuesheet-options"})),W=[{value:"flag",label:"Flag"},{value:"cue",label:"Cue"},{value:"title",label:"Title"},{value:"timeStart",label:"Time start"},{value:"timeEnd",label:"Time end"},{value:"duration",label:"Duration"},{value:"note",label:"Note"}];function ct(t){return Object.entries(t).map(([n,a])=>({value:`custom-${n}`,label:a.label}))}const dt="_twoCols_1wch9_17",ut="_grid_1wch9_23",G={twoCols:dt,grid:ut};function ht({readRef:t,writeRef:n}){const{data:a}=Ve(),s=p.useMemo(()=>ct(a),[a]),[r,l]=p.useState("full"),[d,y]=p.useState("full"),[f,m]=p.useState(()=>{const i={};return[...W,...s].forEach(c=>{i[c.value]=!0}),i}),[v,_]=p.useState(()=>{const i={};return[...W,...s].forEach(c=>{i[c.value]=!0}),i}),M=i=>{l(i),m(c=>{const b={...c};return Object.keys(b).forEach(g=>{b[g]=!0}),b})},P=i=>{i==="full"&&l("full"),y(i),m(c=>{const b={...c};return _(g=>{const $={...g};return[...W,...s].forEach(F=>{b[F.value]=!0,$[F.value]=!0}),$}),b})},u=(i,c,b)=>{c==="read"?m(g=>({...g,[i]:b})):_(g=>({...g,[i]:b}))},w=()=>r==="full"||d==="full"?"full":Object.entries(f).filter(([i,c])=>c).map(([i])=>i).join(","),z=()=>d==="full"?"full":Object.entries(v).filter(([i,c])=>c).map(([i])=>i).join(",");return e.jsxs(De,{children:[e.jsx("input",{name:"read",hidden:!0,readOnly:!0,ref:t,value:w()||"-"}),e.jsx("input",{name:"write",hidden:!0,readOnly:!0,ref:n,value:z()||"-"}),e.jsxs("div",{children:[e.jsx(N,{title:"Access mode",description:"Which parts of the data will the link give access to"}),e.jsxs("div",{children:[e.jsx(ae,{value:d,onValueChange:P,orientation:"horizontal",items:[{value:"full",label:"Full write (edit all existing and future columns)"},{value:"custom",label:"Custom write"}]}),e.jsx(ae,{value:r,onValueChange:M,orientation:"horizontal",disabled:d==="full",items:[{value:"full",label:"Full read (view all existing and future columns)"},{value:"custom",label:"Custom read"}]})]})]}),e.jsxs("div",{className:G.twoCols,children:[e.jsxs("div",{className:G.grid,children:[e.jsx(I,{children:"Ontime columns"}),e.jsx(I,{children:"Read"}),e.jsx(I,{children:"Write"}),W.map(i=>e.jsxs(p.Fragment,{children:[e.jsx("div",{children:i.label}),e.jsx(E,{checked:!!f[i.value],onCheckedChange:c=>u(i.value,"read",c),disabled:r==="full"||d==="full","data-testid":`read-${i.value}`}),e.jsx(E,{checked:!!v[i.value],onCheckedChange:c=>u(i.value,"write",c),disabled:d==="full","data-testid":`write-${i.value}`})]},i.value))]}),s.length>0&&e.jsxs("div",{className:G.grid,children:[e.jsx(I,{children:"Custom fields"}),e.jsx(I,{children:"Read"}),e.jsx(I,{children:"Write"}),s.map(i=>e.jsxs(p.Fragment,{children:[i.label,e.jsx(E,{checked:!!f[i.value],onCheckedChange:c=>u(i.value,"read",c),disabled:r==="full"||d==="full","data-testid":`read-${i.value}`}),e.jsx(E,{checked:!!v[i.value],onCheckedChange:c=>u(i.value,"write",c),disabled:d==="full","data-testid":`write-${i.value}`})]},i.value))]})]})]})}const ft="_qrCode_1989f_17",pt="_column_1989f_23",mt="_copiableLink_1989f_32",bt="_shareInline_1989f_39",vt="_end_1989f_45",R={qrCode:ft,column:pt,copiableLink:mt,shareInline:bt,end:vt};function gt({hostOptions:t,pathOptions:n,presets:a,isLockedToView:s}){var Q,K;const[r,l]=p.useState("pending"),[d,y]=p.useState(q),f=p.useRef(null),m=p.useRef(null),v=p.useRef(`cuesheet-${Re()}`),{addPreset:_}=Me(),{handleSubmit:M,setError:P,watch:u,setValue:w,reset:z,register:i,formState:{errors:c,isDirty:b}}=ye({mode:"onChange",defaultValues:{baseUrl:q,path:s?n[0].value:S.Timer,authenticate:!1,lockConfig:!1,lockNav:!1}}),g=async(o,O)=>{if(O.read==="-")throw new Error("Cannot create a share with no read permissions");return(await _({target:S.Cuesheet,enabled:!0,alias:o,search:"",options:{read:O.read,write:O.write}})).find(T=>T.alias===o)},$=async o=>{var O,B,T;try{if(l("loading"),o.path===S.Cuesheet){const C=await g(o.alias,{read:((O=f.current)==null?void 0:O.value)??"full",write:((B=m.current)==null?void 0:B.value)??"full"});if(!C)throw new Error("Failed to create URL preset for Cuesheet");const k=await Z({baseUrl:o.baseUrl,path:o.path,authenticate:o.authenticate,lockConfig:o.lockConfig,lockNav:o.lockNav,preset:C.alias});await J(k),y(k)}else{const C=o.path.startsWith("preset-")?o.path.replace("preset-",""):void 0,k=C?(T=a.find(me=>me.alias===C))==null?void 0:T.target:o.path;if(!k)throw new Error(`Could not resolve preset: ${k}`);const V=await Z({baseUrl:o.baseUrl,path:k,authenticate:o.authenticate,lockConfig:o.lockConfig,lockNav:o.lockNav,preset:C});await J(V),y(V)}z(o,{keepValues:!0,keepDirty:!1}),l("success")}catch(C){const k=Be(C);P("root",{message:k}),l("error")}},F=b||r!=="success";return e.jsxs("form",{onSubmit:M($),onKeyDown:o=>Pe(o),children:[!s&&e.jsx(Qe,{children:"You can generate a link to share with your team or to use in automation (such as companion)."}),e.jsxs("div",{className:R.shareInline,children:[e.jsxs("div",{className:R.column,children:[e.jsxs(Fe,{children:[Y?e.jsx("input",{hidden:!0,readOnly:!0,name:"baseUrl",value:q}):e.jsxs(D,{children:[e.jsx(N,{title:"Host IP",description:`Which IP address will be used${Y?" (not applicable in Ontime Cloud)":""}`}),e.jsx(te,{options:t,value:u("baseUrl"),onValueChange:o=>{o!==null&&w("baseUrl",o)}})]}),s?e.jsx("input",{type:"hidden",value:u("path")}):e.jsxs(D,{children:[e.jsx(N,{title:"Ontime view",description:"Which view or preset will the link point to"}),e.jsx(te,{options:n,value:u("path"),onValueChange:o=>{o!==null&&w("path",o,{shouldDirty:!0})}})]}),u("path")===S.Cuesheet&&e.jsxs(e.Fragment,{children:[e.jsxs(D,{children:[e.jsx(N,{title:"Preset alias",description:"The name of the preset we will create to hold this options",error:(Q=c.alias)==null?void 0:Q.message}),e.jsx(Ae,{defaultValue:v.current,...i("alias",{required:"Alias cannot be empty and must be unique",pattern:{value:Je,message:"Field can only contain URL safe characters (a-z, 0-9, _ and -)"}})})]}),e.jsx(ht,{readRef:f,writeRef:m})]}),e.jsxs(D,{children:[e.jsx(N,{title:"Lock navigation",description:"Whether to hide the navigation menu"}),e.jsx(E,{size:"large",name:"lockNav","data-testid":"lockNav",checked:u("lockNav"),onCheckedChange:o=>w("lockNav",o,{shouldDirty:!0}),disabled:u("lockConfig")})]}),u("path")!==S.Cuesheet&&e.jsxs(D,{children:[e.jsx(N,{title:"Lock configuration",description:"Whether to hide the configuration panel (also hides navigation)"}),e.jsx(E,{size:"large",name:"lockConfig","data-testid":"lockConfig",checked:u("lockConfig"),onCheckedChange:o=>{o&&w("lockNav",o,{shouldDirty:!0}),w("lockConfig",o,{shouldDirty:!0})}})]}),e.jsxs(D,{children:[e.jsx(N,{title:"Authenticate",description:"Whether the URL should be pre-authenticated"}),e.jsx(E,{size:"large",name:"authenticate","data-testid":"authenticate",checked:u("authenticate"),onCheckedChange:o=>w("authenticate",o,{shouldDirty:!0})})]})]}),e.jsx(Ue,{children:(K=c.root)==null?void 0:K.message}),e.jsx(Te,{align:"end",className:R.end,children:e.jsx(We,{type:"submit",variant:F?"primary":"subtle",loading:r==="loading",children:F?"Create share link":"Link copied to clipboard!"})})]}),e.jsxs(Le,{className:R.column,children:[e.jsx(I,{children:"Share this link"}),e.jsx(_e,{size:172,value:d,className:R.qrCode}),e.jsx("div",{className:R.copiableLink,"data-testid":"copy-link",children:d}),e.jsx(ze,{copyValue:d,children:"Copy link"})]})]})]})}function Xt({lockedPath:t}){const{data:n}=qe(),{data:a}=Ge({skip:t===void 0}),s=p.useMemo(()=>n.networkInterfaces.map(l=>({value:`http://${l.address}:${n.serverPort}`,label:`${l.name} - ${l.address}`})),[n.networkInterfaces,n.serverPort]),r=p.useMemo(()=>t?[{value:t.value,label:t.label}]:[{value:S.Timer,label:"Timer"},{value:S.Cuesheet,label:"Cuesheet"},{value:S.Operator,label:"Operator"},{value:"<<companion>>",label:"Companion"},...a.map(l=>({value:`preset-${l.alias}`,label:`URL Preset: ${l.alias}`}))],[t,a]);return e.jsx(gt,{hostOptions:s,pathOptions:r,presets:a,isLockedToView:!!t})}function xt({color:t,isSelected:n,onClick:a}){const s=l=>{a==null||a(t),l.preventDefault(),l.stopPropagation()},r=pe([L.swatch,n&&L.selected,a&&L.selectable]);return t?e.jsx("div",{className:r,style:{backgroundColor:`${t}`},onClick:s}):e.jsx("div",{className:r,onClick:s,children:e.jsx(we,{})})}const re=["","#FFCC78","#FFAB33","#77C785","#339E4E","#779BE7","#3E75E8","#FF7878","#ED3333","#A790F5","#8064E1","#9d9d9d","#ececec"];function es(t){const{value:n,name:a,handleChange:s}=t,r=p.useCallback(l=>{l!==n&&s(a,l)},[s,a,n]);return e.jsxs("div",{className:L.list,children:[re.map(l=>e.jsx(xt,{color:l,onClick:r,isSelected:n===l},l)),e.jsx(Ke,{color:n,onChange:r,isSelected:!re.includes(n)})]})}const jt="_positioner_1yic5_17",yt="_popup_1yic5_21",_t="_item_1yic5_39",wt="_content_1yic5_80",Ct="_label_1yic5_86",kt="_description_1yic5_93",St="_shortcut_1yic5_99",Nt="_separator_1yic5_105",h={positioner:jt,popup:yt,item:_t,content:wt,label:Ct,description:kt,shortcut:St,separator:Nt};function ts({items:t,children:n,...a}){return e.jsxs(ie,{children:[e.jsx(oe,{...a,children:n}),e.jsx(ce,{children:e.jsx(de,{className:h.positioner,align:"start",sideOffset:8,children:e.jsx(ue,{className:h.popup,children:t.map((s,r)=>s.type==="divider"?e.jsx(he,{className:h.separator},r):e.jsxs(fe,{className:h.item,onClick:s.onClick,disabled:s.disabled,"data-type":s.type,children:[e.jsxs("span",{className:h.content,children:[e.jsxs("span",{className:h.label,children:[s.icon&&e.jsx(s.icon,{}),s.label]}),s.description&&e.jsx("span",{className:h.description,children:s.description})]}),s.shortcut&&e.jsx("span",{className:h.shortcut,children:s.shortcut})]},r))})})})]})}function ss({items:t,isOpen:n,position:a,onClose:s}){return e.jsxs(ie,{open:n,onOpenChange:r=>{r||s()},children:[e.jsx(oe,{style:{position:"fixed",left:a.x,top:a.y},"aria-hidden":!0}),e.jsx(ce,{children:e.jsx(de,{className:h.positioner,align:"start",sideOffset:8,alignOffset:8,children:e.jsx(ue,{className:h.popup,children:t.map((r,l)=>r.type==="divider"?e.jsx(he,{className:h.separator},l):e.jsxs(fe,{className:h.item,onClick:r.onClick,disabled:r.disabled,children:[e.jsxs("span",{className:h.content,children:[e.jsxs("span",{className:h.label,children:[r.icon&&e.jsx(r.icon,{}),r.label]}),r.description&&e.jsx("span",{className:h.description,children:r.description})]}),r.shortcut&&e.jsx("span",{className:h.shortcut,children:r.shortcut})]},l))})})})]})}const It="_modal_4rabb_17",Et="_backdrop_4rabb_34",$t="_title_4rabb_44",Ot="_body_4rabb_53",Dt="_footer_4rabb_61",U={modal:It,backdrop:Et,title:$t,body:Ot,footer:Dt};function as({isOpen:t,title:n,showCloseButton:a,showBackdrop:s,bodyElements:r,footerElements:l,onClose:d}){return e.jsx(Ce,{open:t,onOpenChange:y=>{y||d()},disablePointerDismissal:!0,children:e.jsxs(ke,{children:[s&&e.jsx(Se,{className:U.backdrop}),e.jsxs(Ne,{className:U.modal,children:[e.jsxs("div",{className:U.title,children:[n,a&&e.jsx(He,{variant:"subtle-white",onClick:d,children:e.jsx(Ie,{})})]}),e.jsx("div",{className:U.body,children:r}),e.jsx("div",{className:U.footer,children:l})]})]})})}function H(){const t=navigator.userAgent.toLowerCase();return t.includes("macintosh")||t.includes("mac os")}const ns=H()?"Option":"Alt",rs=H()?"Cmd":"Ctrl",ls=le()((t,n)=>({selectedEvents:new Set,anchoredIndex:null,cursor:null,entryMode:null,scrollHandler:null,setSingleEntrySelection:({id:a})=>{t({selectedEvents:new Set([a]),anchoredIndex:null,cursor:a,entryMode:"single"})},setSelectedEvents:({id:a,index:s,selectMode:r})=>{const{selectedEvents:l,anchoredIndex:d,entryMode:y}=n();if(y==="single")return t({selectedEvents:new Set([a]),anchoredIndex:s,cursor:a,entryMode:"event"});if(r==="click")return t({selectedEvents:new Set([a]),anchoredIndex:s,cursor:a,entryMode:"event"});if(r==="ctrl"){const f=X.getQueryData(ee);if(!f)return;if(!l.has(a))return t({selectedEvents:l.add(a),anchoredIndex:s,cursor:a,entryMode:"event"});l.delete(a);const m=f.order.findIndex((v,_)=>_>s&&se(f.entries[v])&&l.has(v));return t({selectedEvents:l,anchoredIndex:m<0?f.order.length-1:m,entryMode:"event"})}if(r==="shift"){const f=X.getQueryData(ee);if(!f)return;const m=[];f.flatOrder.forEach(P=>{const u=f.entries[P];se(u)&&m.push(u.id)});const v=d===null?0:Math.min(d,s),_=d===null?s:Math.max(d,s+1),M=m.slice(v,_);return t({selectedEvents:new Set([...l,...M]),anchoredIndex:s,entryMode:"event"})}},clearSelectedEvents:()=>t({selectedEvents:new Set,anchoredIndex:null,cursor:null,entryMode:null}),clearMultiSelect:()=>{const{selectedEvents:a}=n(),[s]=a;t({selectedEvents:new Set(s?[s]:[]),anchoredIndex:null,entryMode:null})},unselect:a=>{const{entryMode:s,selectedEvents:r}=n();r.delete(a),t({selectedEvents:r,entryMode:r.size===0?null:s})},setScrollHandler:a=>t({scrollHandler:a}),scrollToEntry:a=>{const s=n().scrollHandler;s&&s(a)}}));function is(t){return H()&&t.metaKey||t.ctrlKey?"ctrl":t.shiftKey?"shift":"click"}export{ts as D,Xt as G,as as M,ss as P,ae as R,es as S,Zt as T,qt as a,Bt as b,Lt as c,Gt as d,Tt as e,Wt as f,zt as g,Je as h,Kt as i,xt as j,Yt as k,ls as l,rs as m,ns as n,is as o,Jt as p,Vt as s,Ht as t,Qt as u};
2
+ //# sourceMappingURL=useEventSelection-Bpbu89c7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEventSelection-Bpbu89c7.js","sources":["../../src/common/api/automation.ts","../../src/common/models/AutomationSettings.ts","../../src/common/hooks-query/useAutomationSettings.ts","../../src/common/utils/regex.ts","../../src/common/components/tag/Tag.tsx","../../src/common/components/radio-group/RadioGroup.tsx","../../src/views/cuesheet/cuesheet.options.ts","../../src/features/sharing/composite/CuesheetLinkOptions.tsx","../../src/features/sharing/GenerateLinkForm.tsx","../../src/features/sharing/GenerateLinkFormExport.tsx","../../src/common/components/input/colour-input/Swatch.tsx","../../src/common/components/input/colour-input/SwatchSelect.tsx","../../src/common/components/dropdown-menu/DropdownMenu.tsx","../../src/common/components/modal/Modal.tsx","../../src/common/utils/deviceUtils.ts","../../src/features/rundown/useEventSelection.ts"],"sourcesContent":["import axios from 'axios';\nimport type {\n Automation,\n AutomationDTO,\n AutomationOutput,\n AutomationSettings,\n Trigger,\n TriggerDTO,\n} from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\nimport type { RequestOptions } from './requestOptions';\n\nconst automationsPath = `${apiEntryUrl}/automations`;\n\n/**\n * HTTP request to get the automations settings\n */\nexport async function getAutomationSettings(options?: RequestOptions): Promise<AutomationSettings> {\n const res = await axios.get(automationsPath, { signal: options?.signal });\n return res.data;\n}\n\n/**\n * HTTP request to edit the automations settings\n */\nexport async function editAutomationSettings(\n automationSettings: Partial<AutomationSettings>,\n): Promise<AutomationSettings> {\n const res = await axios.post(automationsPath, automationSettings);\n return res.data;\n}\n\n/**\n * HTTP request to create a new automation trigger\n */\nexport async function addTrigger(trigger: TriggerDTO): Promise<Trigger> {\n const res = await axios.post(`${automationsPath}/trigger`, trigger);\n return res.data;\n}\n\n/**\n * HTTP request to update an automation trigger\n */\nexport async function editTrigger(id: string, trigger: Trigger): Promise<Trigger> {\n const res = await axios.put(`${automationsPath}/trigger/${id}`, trigger);\n return res.data;\n}\n\n/**\n * HTTP request to delete an automation trigger\n */\nexport function deleteTrigger(id: string): Promise<void> {\n return axios.delete(`${automationsPath}/trigger/${id}`);\n}\n\n/**\n * HTTP request to create a new automation\n */\nexport async function addAutomation(automation: AutomationDTO): Promise<Automation> {\n const res = await axios.post(`${automationsPath}/automation`, automation);\n return res.data;\n}\n\n/**\n * HTTP request to update a automation\n */\nexport async function editAutomation(id: string, automation: Automation): Promise<Automation> {\n const res = await axios.put(`${automationsPath}/automation/${id}`, automation);\n return res.data;\n}\n\n/**\n * HTTP request to delete a automation\n */\nexport function deleteAutomation(id: string): Promise<void> {\n return axios.delete(`${automationsPath}/automation/${id}`);\n}\n\n/**\n * HTTP request to test automation output\n * The return is irrelevant as we care for the resolution of the promise\n */\nexport function testOutput(output: AutomationOutput): Promise<void> {\n return axios.post(`${automationsPath}/test`, output);\n}\n","import { AutomationSettings } from 'ontime-types';\n\nexport const automationPlaceholderSettings: AutomationSettings = {\n enabledAutomations: false,\n enabledOscIn: false,\n oscPortIn: 8888,\n triggers: [],\n automations: {},\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { getAutomationSettings } from '../api/automation';\nimport { AUTOMATION } from '../api/constants';\nimport { automationPlaceholderSettings } from '../models/AutomationSettings';\n\nexport default function useAutomationSettings() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: AUTOMATION,\n queryFn: ({ signal }) => getAutomationSettings({ signal }),\n placeholderData: (previousData, _previousQuery) => previousData,\n refetchInterval: queryRefetchIntervalSlow,\n });\n\n return { data: data ?? automationPlaceholderSettings, status, isFetching, isError, refetch };\n}\n","/**\n * Simple regex patterns for common use cases\n * mostly used in form validation\n */\n\nexport const isOnlyNumbers = /^\\d+$/;\nexport const isIPAddress = /^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$/;\nexport const startsWithHttp = /^https?:\\/\\//;\nexport const startsWithSlash = /^\\//;\nexport const isAlphanumeric = /^[a-z0-9]+$/i;\nexport const isASCII = /^[ -~]+$/; //https://catonmat.net/my-favorite-regex\nexport const isASCIIorEmpty = /^$|^[ -~]+$/; //https://catonmat.net/my-favorite-regex\nexport const isNotEmpty = /\\S/;\nexport const isUrlSafe = /^[a-zA-Z0-9_-]*$/; // https://stackoverflow.com/questions/24419067/validate-a-string-to-be-url-safe-using-regex\n","import { PropsWithChildren } from 'react';\n\nimport style from './Tag.module.scss';\n\ninterface TagProps {\n className?: string;\n}\n\nexport default function Tag({ className, children }: PropsWithChildren<TagProps>) {\n return <span className={`${style.tag} ${className || ''}`}>{children}</span>;\n}\n","import { Radio } from '@base-ui/react/radio';\nimport { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport style from './RadioGroup.module.scss';\n\ninterface RadioGroupProps<T extends string | number | boolean> extends Omit<BaseRadioGroup.Props, 'onValueChange'> {\n items: {\n value: T;\n label: string;\n }[];\n onValueChange?: (value: T) => void;\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport default function RadioGroup<T extends string | number | boolean>({\n items,\n className,\n orientation = 'vertical',\n onValueChange,\n ...elementProps\n}: RadioGroupProps<T>) {\n return (\n <BaseRadioGroup\n onValueChange={(value) => onValueChange?.(value as T)}\n className={cx([style.radioGroup, style[orientation], className])}\n {...elementProps}\n >\n {items.map((item) => (\n <label className={style.item} key={item.value.toString()}>\n <Radio.Root value={item.value.toString()} className={style.radio}>\n <Radio.Indicator className={style.indicator} />\n </Radio.Root>\n {item.label}\n </label>\n ))}\n </BaseRadioGroup>\n );\n}\n","import { CustomFields } from 'ontime-types';\nimport { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\ntype OptionValues = {\n hideTableSeconds: boolean;\n hideIndexColumn: boolean;\n showDelayedTimes: boolean;\n hideDelays: boolean;\n};\n\nconst defaultOptions: OptionValues = {\n hideTableSeconds: false,\n hideIndexColumn: false,\n showDelayedTimes: false,\n hideDelays: false,\n};\n\nexport type CuesheetOptionKeys = keyof OptionValues;\n\nexport interface CuesheetOptions extends OptionValues {\n setOption: <K extends CuesheetOptionKeys>(key: K, value: OptionValues[K]) => void;\n toggleOption: (key: CuesheetOptionKeys) => void;\n resetOptions: () => void;\n}\n\nexport const usePersistedCuesheetOptions = create<CuesheetOptions>()(\n persist(\n (set) => {\n return {\n ...defaultOptions,\n setOption: (key, value) => set((state) => ({ ...state, [key]: value })),\n toggleOption: (key) => set((state) => ({ ...state, [key]: !state[key] })),\n resetOptions: () => set(defaultOptions),\n };\n },\n {\n name: 'cuesheet-options',\n },\n ),\n);\n\nexport const cuesheetDefaultColumns = [\n { value: 'flag', label: 'Flag' },\n { value: 'cue', label: 'Cue' },\n { value: 'title', label: 'Title' },\n { value: 'timeStart', label: 'Time start' },\n { value: 'timeEnd', label: 'Time end' },\n { value: 'duration', label: 'Duration' },\n { value: 'note', label: 'Note' },\n];\n\nexport function makeCuesheetCustomColumns(customFields: CustomFields) {\n return Object.entries(customFields).map(([key, field]) => {\n return {\n value: `custom-${key}`,\n label: field.label,\n };\n });\n}\n","import { Fragment, RefObject, useMemo, useState } from 'react';\n\nimport RadioGroup from '../../../common/components/radio-group/RadioGroup';\nimport Switch from '../../../common/components/switch/Switch';\nimport useCustomFields from '../../../common/hooks-query/useCustomFields';\nimport { cuesheetDefaultColumns, makeCuesheetCustomColumns } from '../../../views/cuesheet/cuesheet.options';\nimport * as Panel from '../../app-settings/panel-utils/PanelUtils';\n\nimport style from './CuesheetLinkOptions.module.scss';\n\ntype AccessMode = 'full' | 'custom';\n\ninterface CuesheetLinkOptionsProps {\n readRef?: RefObject<HTMLInputElement | null>;\n writeRef?: RefObject<HTMLInputElement | null>;\n}\n\nexport default function CuesheetLinkOptions({ readRef, writeRef }: CuesheetLinkOptionsProps) {\n const { data } = useCustomFields();\n const customFieldColumns = useMemo(() => makeCuesheetCustomColumns(data), [data]);\n\n const [readPermissions, setReadPermissions] = useState<AccessMode>('full');\n const [writePermissions, setWritePermissions] = useState<AccessMode>('full');\n\n const [readSwitches, setReadSwitches] = useState<Record<string, boolean>>(() => {\n const initialState: Record<string, boolean> = {};\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n initialState[column.value] = true;\n });\n return initialState;\n });\n\n const [writeSwitches, setWriteSwitches] = useState<Record<string, boolean>>(() => {\n const initialState: Record<string, boolean> = {};\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n initialState[column.value] = true;\n });\n return initialState;\n });\n\n const handleReadModeChange = (value: AccessMode) => {\n setReadPermissions(value);\n\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches };\n Object.keys(updatedReadSwitches).forEach((key) => {\n updatedReadSwitches[key] = true;\n });\n return updatedReadSwitches;\n });\n };\n\n const handleWriteModeChange = (value: AccessMode) => {\n if (value === 'full') {\n setReadPermissions('full');\n }\n setWritePermissions(value);\n\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches };\n setWriteSwitches((prevWriteSwitches) => {\n const updatedWriteSwitches = { ...prevWriteSwitches };\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n updatedReadSwitches[column.value] = true;\n updatedWriteSwitches[column.value] = true;\n });\n return updatedWriteSwitches;\n });\n return updatedReadSwitches;\n });\n };\n\n const handleSwitchChange = (key: string, type: 'read' | 'write', value: boolean) => {\n if (type === 'read') {\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches, [key]: value };\n return updatedReadSwitches;\n });\n } else {\n setWriteSwitches((prevWriteSwitches) => {\n const updatedWriteSwitches = { ...prevWriteSwitches, [key]: value };\n return updatedWriteSwitches;\n });\n }\n };\n\n const getReadPermissions = () => {\n if (readPermissions === 'full' || writePermissions === 'full') {\n return 'full';\n }\n\n return Object.entries(readSwitches)\n .filter(([_, value]) => value)\n .map(([key]) => key)\n .join(',');\n };\n\n const getWritePermissions = () => {\n if (writePermissions === 'full') {\n return 'full';\n }\n\n return Object.entries(writeSwitches)\n .filter(([_, value]) => value)\n .map(([key]) => key)\n .join(',');\n };\n\n return (\n <Panel.Indent>\n <input name='read' hidden readOnly ref={readRef} value={getReadPermissions() || '-'} />\n <input name='write' hidden readOnly ref={writeRef} value={getWritePermissions() || '-'} />\n <div>\n <Panel.Field title='Access mode' description='Which parts of the data will the link give access to' />\n <div>\n <RadioGroup\n value={writePermissions}\n onValueChange={handleWriteModeChange}\n orientation='horizontal'\n items={[\n { value: 'full', label: 'Full write (edit all existing and future columns)' },\n { value: 'custom', label: 'Custom write' },\n ]}\n />\n <RadioGroup\n value={readPermissions}\n onValueChange={handleReadModeChange}\n orientation='horizontal'\n disabled={writePermissions === 'full'}\n items={[\n { value: 'full', label: 'Full read (view all existing and future columns)' },\n { value: 'custom', label: 'Custom read' },\n ]}\n />\n </div>\n </div>\n <div className={style.twoCols}>\n <div className={style.grid}>\n <Panel.Description>Ontime columns</Panel.Description>\n <Panel.Description>Read</Panel.Description>\n <Panel.Description>Write</Panel.Description>\n {cuesheetDefaultColumns.map((column) => (\n <Fragment key={column.value}>\n <div>{column.label}</div>\n <Switch\n checked={Boolean(readSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'read', value)}\n disabled={readPermissions === 'full' || writePermissions === 'full'}\n data-testid={`read-${column.value}`}\n />\n <Switch\n checked={Boolean(writeSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'write', value)}\n disabled={writePermissions === 'full'}\n data-testid={`write-${column.value}`}\n />\n </Fragment>\n ))}\n </div>\n {customFieldColumns.length > 0 && (\n <div className={style.grid}>\n <Panel.Description>Custom fields</Panel.Description>\n <Panel.Description>Read</Panel.Description>\n <Panel.Description>Write</Panel.Description>\n {customFieldColumns.map((column) => (\n <Fragment key={column.value}>\n {column.label}\n <Switch\n checked={Boolean(readSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'read', value)}\n disabled={readPermissions === 'full' || writePermissions === 'full'}\n data-testid={`read-${column.value}`}\n />\n <Switch\n checked={Boolean(writeSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'write', value)}\n disabled={writePermissions === 'full'}\n data-testid={`write-${column.value}`}\n />\n </Fragment>\n ))}\n </div>\n )}\n </div>\n </Panel.Indent>\n );\n}\n","import { useRef, useState } from 'react';\nimport { FieldErrors, useForm } from 'react-hook-form';\nimport QRCode from 'react-qr-code';\nimport { OntimeView, URLPreset } from 'ontime-types';\nimport { generateId } from 'ontime-utils';\n\nimport { generateUrl } from '../../common/api/session';\nimport { maybeAxiosError } from '../../common/api/utils';\nimport Button from '../../common/components/buttons/Button';\nimport CopyTag from '../../common/components/copy-tag/CopyTag';\nimport Info from '../../common/components/info/Info';\nimport Input from '../../common/components/input/input/Input';\nimport Select from '../../common/components/select/Select';\nimport Switch from '../../common/components/switch/Switch';\nimport { useUpdateUrlPreset } from '../../common/hooks-query/useUrlPresets';\nimport { safeCopyToClipboard } from '../../common/utils/copyToClipboard';\nimport { preventEscape } from '../../common/utils/keyEvent';\nimport { isUrlSafe } from '../../common/utils/regex';\nimport { isOntimeCloud, serverURL } from '../../externals';\nimport * as Panel from '../app-settings/panel-utils/PanelUtils';\n\nimport CuesheetLinkOptions from './composite/CuesheetLinkOptions';\n\nimport style from './GenerateLinkForm.module.scss';\n\ninterface GenerateLinkFormProps {\n hostOptions: { value: string; label: string }[];\n pathOptions: { value: OntimeView | string; label: string }[];\n presets: URLPreset[];\n isLockedToView?: boolean;\n}\n\ntype GenericLinkOptions = {\n baseUrl: string;\n path: OntimeView | string; // we use empty string for Companion view\n authenticate: boolean;\n lockConfig: boolean;\n lockNav: boolean;\n};\n\ntype CuesheetLinkOptions = GenericLinkOptions & {\n path: OntimeView.Cuesheet;\n\n alias: string;\n options: {\n read?: string;\n write?: string;\n };\n};\n\ntype GenerateLinkFormOptions = GenericLinkOptions | CuesheetLinkOptions;\n\ntype GenerateLinkState = 'pending' | 'loading' | 'success' | 'error';\n\nexport default function GenerateLinkForm({ hostOptions, pathOptions, presets, isLockedToView }: GenerateLinkFormProps) {\n const [formState, setFormState] = useState<GenerateLinkState>('pending');\n const [url, setUrl] = useState(serverURL);\n const cuesheetReadRef = useRef<HTMLInputElement>(null);\n const cuesheetWriteRef = useRef<HTMLInputElement>(null);\n const generatedAlias = useRef<string>(`cuesheet-${generateId()}`);\n\n const { addPreset } = useUpdateUrlPreset();\n\n const {\n handleSubmit,\n setError,\n watch,\n setValue,\n reset,\n register,\n formState: { errors, isDirty },\n } = useForm<GenerateLinkFormOptions>({\n mode: 'onChange',\n defaultValues: {\n baseUrl: serverURL,\n path: isLockedToView ? pathOptions[0].value : OntimeView.Timer,\n authenticate: false,\n lockConfig: false,\n lockNav: false,\n },\n });\n\n /**\n * If the user is generating a link to the cuesheet we gather extra options\n * The extra options are saved into a URL preset which we then request a share link for\n */\n const createPresetFromOptions = async (\n alias: string,\n options: Required<CuesheetLinkOptions['options']>,\n ): Promise<URLPreset | undefined> => {\n if (options.read === '-') {\n throw new Error('Cannot create a share with no read permissions');\n }\n const presets = await addPreset({\n target: OntimeView.Cuesheet,\n enabled: true,\n alias,\n search: '',\n options: {\n read: options.read,\n write: options.write,\n },\n });\n return presets.find((preset) => preset.alias === alias);\n };\n\n const onSubmit = async (options: GenerateLinkFormOptions) => {\n try {\n setFormState('loading');\n if (options.path === OntimeView.Cuesheet) {\n const urlPreset = await createPresetFromOptions((options as CuesheetLinkOptions).alias, {\n read: cuesheetReadRef.current?.value ?? 'full',\n write: cuesheetWriteRef.current?.value ?? 'full',\n });\n\n if (!urlPreset) {\n throw new Error('Failed to create URL preset for Cuesheet');\n }\n\n const url = await generateUrl({\n baseUrl: options.baseUrl,\n path: options.path,\n authenticate: options.authenticate,\n lockConfig: options.lockConfig,\n lockNav: options.lockNav,\n preset: urlPreset.alias,\n });\n await safeCopyToClipboard(url);\n setUrl(url);\n } else {\n const presetPath = options.path.startsWith('preset-') ? options.path.replace('preset-', '') : undefined;\n const path = presetPath ? presets.find((preset) => preset.alias === presetPath)?.target : options.path;\n if (!path) {\n throw new Error(`Could not resolve preset: ${path}`);\n }\n\n const url = await generateUrl({\n baseUrl: options.baseUrl,\n path,\n authenticate: options.authenticate,\n lockConfig: options.lockConfig,\n lockNav: options.lockNav,\n preset: presetPath,\n });\n\n await safeCopyToClipboard(url);\n setUrl(url);\n }\n reset(options, {\n keepValues: true,\n keepDirty: false,\n });\n setFormState('success');\n } catch (error) {\n const message = maybeAxiosError(error);\n setError('root', { message });\n setFormState('error');\n }\n };\n\n const canSubmit = isDirty || formState !== 'success';\n\n return (\n <form onSubmit={handleSubmit(onSubmit)} onKeyDown={(event) => preventEscape(event)}>\n {!isLockedToView && (\n <Info>You can generate a link to share with your team or to use in automation (such as companion).</Info>\n )}\n <div className={style.shareInline}>\n <div className={style.column}>\n <Panel.ListGroup>\n {isOntimeCloud ? (\n <input hidden readOnly name='baseUrl' value={serverURL} />\n ) : (\n <Panel.ListItem>\n <Panel.Field\n title='Host IP'\n description={`Which IP address will be used${isOntimeCloud ? ' (not applicable in Ontime Cloud)' : ''}`}\n />\n <Select\n options={hostOptions}\n value={watch('baseUrl')}\n onValueChange={(value: string | null) => {\n if (value === null) return;\n setValue('baseUrl', value);\n }}\n />\n </Panel.ListItem>\n )}\n {isLockedToView ? (\n <input type='hidden' value={watch('path')} />\n ) : (\n <Panel.ListItem>\n <Panel.Field title='Ontime view' description='Which view or preset will the link point to' />\n <Select\n options={pathOptions}\n value={watch('path')}\n onValueChange={(value: OntimeView | string | null) => {\n if (value === null) return;\n setValue('path', value, { shouldDirty: true });\n }}\n />\n </Panel.ListItem>\n )}\n\n {watch('path') === OntimeView.Cuesheet && (\n <>\n <Panel.ListItem>\n <Panel.Field\n title='Preset alias'\n description='The name of the preset we will create to hold this options'\n error={(errors as FieldErrors<CuesheetLinkOptions>).alias?.message}\n />\n <Input\n defaultValue={generatedAlias.current}\n {...register('alias', {\n required: 'Alias cannot be empty and must be unique',\n pattern: {\n value: isUrlSafe,\n message: 'Field can only contain URL safe characters (a-z, 0-9, _ and -)',\n },\n })}\n />\n </Panel.ListItem>\n <CuesheetLinkOptions readRef={cuesheetReadRef} writeRef={cuesheetWriteRef} />\n </>\n )}\n\n <Panel.ListItem>\n <Panel.Field title='Lock navigation' description='Whether to hide the navigation menu' />\n <Switch\n size='large'\n name='lockNav'\n data-testid='lockNav'\n checked={watch('lockNav')}\n onCheckedChange={(checked) => setValue('lockNav', checked, { shouldDirty: true })}\n disabled={watch('lockConfig')}\n />\n </Panel.ListItem>\n {watch('path') !== OntimeView.Cuesheet && (\n <Panel.ListItem>\n <Panel.Field\n title='Lock configuration'\n description='Whether to hide the configuration panel (also hides navigation)'\n />\n <Switch\n size='large'\n name='lockConfig'\n data-testid='lockConfig'\n checked={watch('lockConfig')}\n onCheckedChange={(checked) => {\n if (checked) {\n setValue('lockNav', checked, { shouldDirty: true });\n }\n setValue('lockConfig', checked, { shouldDirty: true });\n }}\n />\n </Panel.ListItem>\n )}\n <Panel.ListItem>\n <Panel.Field title='Authenticate' description='Whether the URL should be pre-authenticated' />\n <Switch\n size='large'\n name='authenticate'\n data-testid='authenticate'\n checked={watch('authenticate')}\n onCheckedChange={(checked) => setValue('authenticate', checked, { shouldDirty: true })}\n />\n </Panel.ListItem>\n </Panel.ListGroup>\n <Panel.Error>{errors.root?.message}</Panel.Error>\n <Panel.InlineElements align='end' className={style.end}>\n <Button type='submit' variant={canSubmit ? 'primary' : 'subtle'} loading={formState === 'loading'}>\n {canSubmit ? 'Create share link' : 'Link copied to clipboard!'}\n </Button>\n </Panel.InlineElements>\n </div>\n <Panel.Section className={style.column}>\n <Panel.Description>Share this link</Panel.Description>\n <QRCode size={172} value={url} className={style.qrCode} />\n <div className={style.copiableLink} data-testid='copy-link'>\n {url}\n </div>\n <CopyTag copyValue={url}>Copy link</CopyTag>\n </Panel.Section>\n </div>\n </form>\n );\n}\n","import { useMemo } from 'react';\nimport { OntimeView } from 'ontime-types';\n\nimport useInfo from '../../common/hooks-query/useInfo';\nimport useUrlPresets from '../../common/hooks-query/useUrlPresets';\n\nimport GenerateLinkForm from './GenerateLinkForm';\n\ninterface GenerateLinkFormExportProps {\n lockedPath?: { value: OntimeView; label: string };\n}\n\nexport default function GenerateLinkFormExport({ lockedPath }: GenerateLinkFormExportProps) {\n const { data: infoData } = useInfo();\n const { data: urlPresetData } = useUrlPresets({ skip: lockedPath === undefined });\n\n /**\n * hostOptions are only used for local networks\n * the NIF address is a local IP address: 192.168.x.x or 10.x.x.x\n * We need to inject the port and protocol to create a valid URL\n * eg: http://192.168.x.x:port\n */\n const hostOptions = useMemo(() => {\n return infoData.networkInterfaces.map((nif) => ({\n value: `http://${nif.address}:${infoData.serverPort}`,\n label: `${nif.name} - ${nif.address}`,\n }));\n }, [infoData.networkInterfaces, infoData.serverPort]);\n\n const pathOptions = useMemo(() => {\n if (lockedPath) {\n return [{ value: lockedPath.value, label: lockedPath.label }];\n }\n return [\n { value: OntimeView.Timer, label: 'Timer' },\n { value: OntimeView.Cuesheet, label: 'Cuesheet' },\n { value: OntimeView.Operator, label: 'Operator' },\n { value: '<<companion>>', label: 'Companion' },\n ...urlPresetData.map((preset) => ({\n value: `preset-${preset.alias}`,\n label: `URL Preset: ${preset.alias}`,\n })),\n ];\n }, [lockedPath, urlPresetData]);\n\n return (\n <GenerateLinkForm\n hostOptions={hostOptions}\n pathOptions={pathOptions}\n presets={urlPresetData}\n isLockedToView={Boolean(lockedPath)}\n />\n );\n}\n","import { MouseEvent } from 'react';\nimport { IoBan } from 'react-icons/io5';\n\nimport { cx } from '../../../utils/styleUtils';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface SwatchProps {\n color: string;\n onClick?: (color: string) => void;\n isSelected?: boolean;\n}\n\nexport default function Swatch({ color, isSelected, onClick }: SwatchProps) {\n const handleClick = (event: MouseEvent) => {\n onClick?.(color);\n event.preventDefault();\n event.stopPropagation();\n };\n\n const classes = cx([style.swatch, isSelected && style.selected, onClick && style.selectable]);\n\n if (!color) {\n return (\n <div className={classes} onClick={handleClick}>\n <IoBan />\n </div>\n );\n }\n return <div className={classes} style={{ backgroundColor: `${color}` }} onClick={handleClick} />;\n}\n","import { useCallback } from 'react';\n\nimport Swatch from './Swatch';\nimport SwatchPicker from './SwatchPicker';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface ColourInputProps {\n value: string;\n name: 'colour';\n handleChange: (newValue: 'colour', name: string) => void;\n}\n\nconst colours = [\n '',\n '#FFCC78', // $orange-400\n '#FFAB33', // $orange-600\n '#77C785', // $green-400\n '#339E4E', // $green-600\n '#779BE7', // $blue-400\n '#3E75E8', // $blue-600\n '#FF7878', // $red-400\n '#ED3333', // $red-600\n '#A790F5', // $violet-400\n '#8064E1', // $violet-600\n '#9d9d9d', // $gray-500\n '#ececec', // $gray-100\n];\n\nexport default function SwatchSelect(props: ColourInputProps) {\n const { value, name, handleChange } = props;\n\n const setColour = useCallback(\n (newValue: string) => {\n if (newValue !== value) {\n handleChange(name, newValue);\n }\n },\n [handleChange, name, value],\n );\n\n return (\n <div className={style.list}>\n {colours.map((colour) => (\n <Swatch key={colour} color={colour} onClick={setColour} isSelected={value === colour} />\n ))}\n <SwatchPicker color={value} onChange={setColour} isSelected={!colours.includes(value)} />\n </div>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { IconType } from 'react-icons';\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\n\nimport style from './DropdownMenu.module.scss';\n\ntype DropdownMenuItemDivider = { type: 'divider' };\ntype DropdownMenuItem = {\n type: 'item' | 'destructive';\n label: string;\n description?: string;\n icon?: IconType;\n disabled?: boolean;\n onClick: () => void;\n shortcut?: string;\n};\n\nexport type DropdownMenuOption = DropdownMenuItemDivider | DropdownMenuItem;\n\ninterface DropdownMenuProps extends BaseMenu.Trigger.Props {\n items: DropdownMenuOption[];\n}\n\nexport function DropdownMenu({ items, children, ...triggerProps }: PropsWithChildren<DropdownMenuProps>) {\n return (\n <BaseMenu.Root>\n <BaseMenu.Trigger {...triggerProps}>{children}</BaseMenu.Trigger>\n <BaseMenu.Portal>\n <BaseMenu.Positioner className={style.positioner} align='start' sideOffset={8}>\n <BaseMenu.Popup className={style.popup}>\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return <BaseMenu.Separator key={index} className={style.separator} />;\n }\n return (\n <BaseMenu.Item\n key={index}\n className={style.item}\n onClick={item.onClick}\n disabled={item.disabled}\n data-type={item.type}\n >\n <span className={style.content}>\n <span className={style.label}>\n {item.icon && <item.icon />}\n {item.label}\n </span>\n {item.description && <span className={style.description}>{item.description}</span>}\n </span>\n {item.shortcut && <span className={style.shortcut}>{item.shortcut}</span>}\n </BaseMenu.Item>\n );\n })}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n\ninterface PositionedDropdownMenuProps {\n items: Array<DropdownMenuItemDivider | DropdownMenuItem>;\n isOpen: boolean;\n onClose: () => void;\n position: { x: number; y: number };\n}\n\nexport function PositionedDropdownMenu({ items, isOpen, position, onClose }: PositionedDropdownMenuProps) {\n return (\n <BaseMenu.Root\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) onClose();\n }}\n >\n <BaseMenu.Trigger style={{ position: 'fixed', left: position.x, top: position.y }} aria-hidden />\n <BaseMenu.Portal>\n <BaseMenu.Positioner className={style.positioner} align='start' sideOffset={8} alignOffset={8}>\n <BaseMenu.Popup className={style.popup}>\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return <BaseMenu.Separator key={index} className={style.separator} />;\n }\n return (\n <BaseMenu.Item key={index} className={style.item} onClick={item.onClick} disabled={item.disabled}>\n <span className={style.content}>\n <span className={style.label}>\n {item.icon && <item.icon />}\n {item.label}\n </span>\n {item.description && <span className={style.description}>{item.description}</span>}\n </span>\n {item.shortcut && <span className={style.shortcut}>{item.shortcut}</span>}\n </BaseMenu.Item>\n );\n })}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n","import type { ReactNode } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\n\nimport IconButton from '../buttons/IconButton';\n\nimport style from './Modal.module.scss';\n\ninterface ModalProps {\n isOpen: boolean;\n title?: string;\n showCloseButton?: boolean;\n showBackdrop?: boolean;\n bodyElements: ReactNode;\n footerElements?: ReactNode;\n onClose: () => void;\n}\n\nexport default function Modal({\n isOpen,\n title,\n showCloseButton,\n showBackdrop,\n bodyElements,\n footerElements,\n onClose,\n}: ModalProps) {\n return (\n <BaseDialog.Root\n open={isOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) onClose();\n }}\n disablePointerDismissal\n >\n <BaseDialog.Portal>\n {showBackdrop && <BaseDialog.Backdrop className={style.backdrop} />}\n <BaseDialog.Popup className={style.modal}>\n <div className={style.title}>\n {title}\n {showCloseButton && (\n <IconButton variant='subtle-white' onClick={onClose}>\n <IoClose />\n </IconButton>\n )}\n </div>\n <div className={style.body}>{bodyElements}</div>\n <div className={style.footer}>{footerElements}</div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n","export function isMacOS() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('macintosh') || userAgent.includes('mac os');\n}\n\nexport const deviceAlt = isMacOS() ? 'Option' : 'Alt';\n\nexport const deviceMod = isMacOS() ? 'Cmd' : 'Ctrl';\n","import { MouseEvent } from 'react';\nimport { EntryId, isOntimeEvent, MaybeNumber, Rundown } from 'ontime-types';\nimport { create } from 'zustand';\n\nimport { RUNDOWN } from '../../common/api/constants';\nimport { ontimeQueryClient } from '../../common/queryClient';\nimport { isMacOS } from '../../common/utils/deviceUtils';\n\nexport type SelectionMode = 'shift' | 'click' | 'ctrl';\n\ninterface EventSelectionStore {\n selectedEvents: Set<EntryId>;\n anchoredIndex: MaybeNumber;\n cursor: EntryId | null;\n entryMode: 'event' | 'single' | null;\n scrollHandler: ((id: EntryId) => void) | null;\n setSingleEntrySelection: (selectionArgs: { id: EntryId }) => void;\n setSelectedEvents: (selectionArgs: { id: EntryId; index: number; selectMode: SelectionMode }) => void;\n clearSelectedEvents: () => void;\n clearMultiSelect: () => void;\n unselect: (id: EntryId) => void;\n setScrollHandler: (handler: ((id: EntryId) => void) | null) => void;\n scrollToEntry: (id: EntryId) => void;\n}\n\n/**\n * Keeps track of the selected entries and selection mode\n * Provides methods to update the selection based on user interactions\n */\nexport const useEventSelection = create<EventSelectionStore>()((set, get) => ({\n selectedEvents: new Set(),\n anchoredIndex: null,\n cursor: null,\n entryMode: null,\n scrollHandler: null,\n setSingleEntrySelection: ({ id }) => {\n set({ selectedEvents: new Set([id]), anchoredIndex: null, cursor: id, entryMode: 'single' });\n },\n setSelectedEvents: ({ id, index, selectMode }) => {\n const { selectedEvents, anchoredIndex, entryMode } = get();\n\n // if we are in single mode, we replace the selection and change the mode\n if (entryMode === 'single') {\n return set({ selectedEvents: new Set([id]), anchoredIndex: index, cursor: id, entryMode: 'event' });\n }\n\n // on click, we replace selection with event\n if (selectMode === 'click') {\n return set({ selectedEvents: new Set([id]), anchoredIndex: index, cursor: id, entryMode: 'event' });\n }\n\n // on ctrl + click, we toggle the selection of that event\n if (selectMode === 'ctrl') {\n const rundownData = ontimeQueryClient.getQueryData<Rundown>(RUNDOWN);\n if (!rundownData) return;\n\n // if it doesnt exist, simply add to the list and set an anchor\n if (!selectedEvents.has(id)) {\n return set({\n selectedEvents: selectedEvents.add(id),\n anchoredIndex: index,\n cursor: id,\n entryMode: 'event',\n });\n }\n\n // if event is already selected, we remove it from selection\n // and set the anchor to the event after\n selectedEvents.delete(id);\n\n const nextIndex = rundownData.order.findIndex(\n (eventId, i) => i > index && isOntimeEvent(rundownData.entries[eventId]) && selectedEvents.has(eventId),\n );\n\n // if we didnt find anything after, set the anchor to the last event\n return set({\n selectedEvents,\n anchoredIndex: nextIndex < 0 ? rundownData.order.length - 1 : nextIndex,\n entryMode: 'event',\n });\n }\n\n // on shift + click, we select a range of events up to the clicked event\n if (selectMode === 'shift') {\n const rundownData = ontimeQueryClient.getQueryData<Rundown>(RUNDOWN);\n if (!rundownData) return;\n\n // get list of rundown with only ontime events\n const eventIds: EntryId[] = [];\n rundownData.flatOrder.forEach((eventId) => {\n const event = rundownData.entries[eventId];\n if (isOntimeEvent(event)) {\n eventIds.push(event.id);\n }\n });\n\n const start = anchoredIndex === null ? 0 : Math.min(anchoredIndex, index);\n const end = anchoredIndex === null ? index : Math.max(anchoredIndex, index + 1);\n\n // create new set with range of ids from start to end\n const selectedEventIds = eventIds.slice(start, end);\n\n return set({\n selectedEvents: new Set([...selectedEvents, ...selectedEventIds]),\n anchoredIndex: index,\n entryMode: 'event',\n });\n }\n },\n clearSelectedEvents: () => set({ selectedEvents: new Set(), anchoredIndex: null, cursor: null, entryMode: null }),\n clearMultiSelect: () => {\n const { selectedEvents } = get();\n const [firstSelected] = selectedEvents;\n set({\n selectedEvents: new Set(firstSelected ? [firstSelected] : []),\n anchoredIndex: null,\n entryMode: null,\n });\n },\n unselect: (id: string) => {\n const { entryMode, selectedEvents } = get();\n selectedEvents.delete(id);\n set({\n selectedEvents,\n entryMode: selectedEvents.size === 0 ? null : entryMode,\n });\n },\n // Sets the scroll handler for programmatic scrolling to entries\n setScrollHandler: (handler) => set({ scrollHandler: handler }),\n // Scrolls to the specified entry using the registered scroll handler\n scrollToEntry: (id: EntryId) => {\n const handler = get().scrollHandler;\n if (handler) {\n handler(id);\n }\n },\n}));\n\nexport function getSelectionMode(event: MouseEvent): SelectionMode {\n if ((isMacOS() && event.metaKey) || event.ctrlKey) {\n return 'ctrl';\n }\n\n if (event.shiftKey) {\n return 'shift';\n }\n\n return 'click';\n}\n"],"names":["automationsPath","apiEntryUrl","getAutomationSettings","options","axios","get","signal","data","editAutomationSettings","automationSettings","post","addTrigger","trigger","editTrigger","id","put","deleteTrigger","delete","addAutomation","automation","editAutomation","deleteAutomation","testOutput","output","automationPlaceholderSettings","enabledAutomations","enabledOscIn","oscPortIn","triggers","automations","useAutomationSettings","status","isFetching","isError","refetch","useQuery","queryKey","AUTOMATION","queryFn","placeholderData","previousData","_previousQuery","refetchInterval","queryRefetchIntervalSlow","isOnlyNumbers","startsWithHttp","isAlphanumeric","isUrlSafe","Tag","className","children","jsx","style","tag","RadioGroup","items","orientation","onValueChange","elementProps","BaseRadioGroup","value","cx","radioGroup","map","item","jsxs","Radio.Root","toString","radio","Radio.Indicator","indicator","label","defaultOptions","hideTableSeconds","hideIndexColumn","showDelayedTimes","hideDelays","usePersistedCuesheetOptions","create","persist","set","setOption","key","state","toggleOption","resetOptions","name","cuesheetDefaultColumns","makeCuesheetCustomColumns","customFields","Object","entries","field","CuesheetLinkOptions","readRef","writeRef","useCustomFields","customFieldColumns","useMemo","readPermissions","setReadPermissions","useState","writePermissions","setWritePermissions","readSwitches","setReadSwitches","initialState","forEach","column","writeSwitches","setWriteSwitches","handleReadModeChange","prevReadSwitches","updatedReadSwitches","keys","handleWriteModeChange","prevWriteSwitches","updatedWriteSwitches","handleSwitchChange","type","getReadPermissions","filter","_","join","getWritePermissions","Panel.Indent","Panel.Field","twoCols","grid","Panel.Description","Fragment","Switch","Boolean","length","GenerateLinkForm","hostOptions","pathOptions","presets","isLockedToView","formState","setFormState","url","setUrl","serverURL","cuesheetReadRef","useRef","cuesheetWriteRef","generatedAlias","generateId","addPreset","useUpdateUrlPreset","handleSubmit","setError","watch","setValue","reset","register","errors","isDirty","useForm","mode","defaultValues","baseUrl","path","OntimeView","Timer","authenticate","lockConfig","lockNav","createPresetFromOptions","alias","read","Error","target","Cuesheet","enabled","search","write","find","preset","onSubmit","urlPreset","current","generateUrl","safeCopyToClipboard","presetPath","startsWith","replace","undefined","keepValues","keepDirty","error","message","maybeAxiosError","canSubmit","event","preventEscape","Info","shareInline","Panel.ListGroup","isOntimeCloud","Panel.ListItem","Select","shouldDirty","Input","required","pattern","checked","Panel.Error","root","Panel.InlineElements","end","Button","Panel.Section","QRCode","qrCode","copiableLink","CopyTag","GenerateLinkFormExport","lockedPath","infoData","useInfo","urlPresetData","useUrlPresets","skip","networkInterfaces","nif","address","serverPort","Operator","Swatch","color","isSelected","onClick","handleClick","preventDefault","stopPropagation","classes","swatch","selected","selectable","backgroundColor","IoBan","colours","SwatchSelect","props","handleChange","setColour","useCallback","newValue","list","colour","SwatchPicker","includes","DropdownMenu","triggerProps","BaseMenu.Root","BaseMenu.Trigger","BaseMenu.Portal","BaseMenu.Positioner","positioner","BaseMenu.Popup","popup","index","BaseMenu.Separator","separator","BaseMenu.Item","disabled","content","icon","description","shortcut","PositionedDropdownMenu","isOpen","position","onClose","open","left","x","top","y","Modal","title","showCloseButton","showBackdrop","bodyElements","footerElements","BaseDialog.Root","BaseDialog.Portal","BaseDialog.Backdrop","backdrop","BaseDialog.Popup","modal","IconButton","IoClose","body","footer","isMacOS","userAgent","navigator","toLowerCase","deviceAlt","deviceMod","useEventSelection","selectedEvents","Set","anchoredIndex","cursor","entryMode","scrollHandler","setSingleEntrySelection","setSelectedEvents","selectMode","rundownData","ontimeQueryClient","getQueryData","RUNDOWN","has","add","nextIndex","order","findIndex","eventId","i","isOntimeEvent","eventIds","flatOrder","push","start","Math","min","max","selectedEventIds","slice","clearSelectedEvents","clearMultiSelect","firstSelected","unselect","size","setScrollHandler","handler","scrollToEntry","getSelectionMode","metaKey","ctrlKey","shiftKey"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{a as n,k as c,O as d,P as l}from"./vendor-BKUJ0_Du.js";import{ay as f,az as y,aR as o,aH as g}from"./index-Dm-4OTmY.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="1162ea55-dab1-46e1-8922-5422e45894e0",e._sentryDebugIdIdentifier="sentry-dbid-1162ea55-dab1-46e1-8922-5422e45894e0")}catch{}})();const s=`${f}/project`;async function p(e){return(await n.get(s,{signal:e==null?void 0:e.signal,timeout:e==null?void 0:e.timeout})).data}async function m(e){return n.post(s,e)}async function j(e){const t=new FormData;return t.append("image",e),await n.post(`${s}/upload`,t,{timeout:y.longTimeout,headers:{"Content-Type":"multipart/form-data"}})}const D={title:"",description:"",url:"",info:"",logo:null,custom:[]};function w(){const{data:e,status:t,isFetching:a,isError:u,refetch:i}=c({queryKey:o,queryFn:({signal:r})=>p({signal:r}),placeholderData:(r,b)=>r,refetchInterval:g});return{data:e??D,status:t,isFetching:a,isError:u,refetch:i}}function I(){const e=d(),t=l({mutationFn:m,onSuccess:a=>{e.setQueryData(o,a)}});return{updateProjectData:t.mutateAsync,isMutating:t.isPending,isMutatingError:t.isError}}export{I as a,j as b,w as u};
2
+ //# sourceMappingURL=useProjectData-C110zIXC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProjectData-C110zIXC.js","sources":["../../src/common/api/project.ts","../../src/common/models/ProjectData.ts","../../src/common/hooks-query/useProjectData.ts"],"sourcesContent":["import axios, { AxiosResponse } from 'axios';\nimport { ProjectData, ProjectLogoResponse } from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\nimport type { RequestOptions } from './requestOptions';\nimport { axiosConfig } from './requestTimeouts';\n\nconst projectPath = `${apiEntryUrl}/project`;\n\n/**\n * HTTP request to fetch project data\n */\nexport async function getProjectData(options?: RequestOptions): Promise<ProjectData> {\n const res = await axios.get(projectPath, {\n signal: options?.signal,\n timeout: options?.timeout,\n });\n return res.data;\n}\n\n/**\n * HTTP request to mutate project data\n */\nexport async function postProjectData(data: ProjectData): Promise<AxiosResponse<ProjectData>> {\n return axios.post(projectPath, data);\n}\n\n/**\n * HTTP request to upload a project logo\n */\nexport async function uploadProjectLogo(file: File): Promise<AxiosResponse<ProjectLogoResponse>> {\n const formData = new FormData();\n formData.append('image', file);\n const response = await axios.post(`${projectPath}/upload`, formData, {\n timeout: axiosConfig.longTimeout,\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n\n return response;\n}\n","import { ProjectData } from 'ontime-types';\n\nexport const projectDataPlaceholder: ProjectData = {\n title: '',\n description: '',\n url: '',\n info: '',\n logo: null,\n custom: [],\n};\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { PROJECT_DATA } from '../api/constants';\nimport { getProjectData, postProjectData } from '../api/project';\nimport { projectDataPlaceholder } from '../models/ProjectData';\n\nexport default function useProjectData() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: PROJECT_DATA,\n queryFn: ({ signal }) => getProjectData({ signal }),\n placeholderData: (previousData, _previousQuery) => previousData,\n refetchInterval: queryRefetchIntervalSlow,\n });\n\n return { data: data ?? projectDataPlaceholder, status, isFetching, isError, refetch };\n}\n\nexport function useUpdateProjectData() {\n const queryClient = useQueryClient();\n\n const updateFn = useMutation({\n mutationFn: postProjectData,\n onSuccess: (newProjectData) => {\n queryClient.setQueryData(PROJECT_DATA, newProjectData);\n },\n });\n\n return {\n updateProjectData: updateFn.mutateAsync,\n isMutating: updateFn.isPending,\n isMutatingError: updateFn.isError,\n };\n}\n"],"names":["projectPath","apiEntryUrl","getProjectData","options","axios","get","signal","timeout","data","postProjectData","post","uploadProjectLogo","file","formData","FormData","append","axiosConfig","longTimeout","headers","projectDataPlaceholder","title","description","url","info","logo","custom","useProjectData","status","isFetching","isError","refetch","useQuery","queryKey","PROJECT_DATA","queryFn","placeholderData","previousData","_previousQuery","refetchInterval","queryRefetchIntervalSlow","useUpdateProjectData","queryClient","useQueryClient","updateFn","useMutation","mutationFn","onSuccess","newProjectData","setQueryData","updateProjectData","mutateAsync","isMutating","isPending","isMutatingError"],"mappings":"ydAOA,MAAMA,EAAc,GAAGC,CAAW,WAKlC,eAAsBC,EAAeC,EAAgD,CAKnF,OAJY,MAAMC,EAAMC,IAAIL,EAAa,CACvCM,OAAQH,GAAAA,YAAAA,EAASG,OACjBC,QAASJ,GAAAA,YAAAA,EAASI,OAAAA,CACnB,GACUC,IACb,CAKA,eAAsBC,EAAgBD,EAAwD,CACrFJ,OAAAA,EAAMM,KAAKV,EAAaQ,CAAI,CACrC,CAKA,eAAsBG,EAAkBC,EAAyD,CACzFC,MAAAA,EAAW,IAAIC,SACZC,OAAAA,EAAAA,OAAO,QAASH,CAAI,EACZ,MAAMR,EAAMM,KAAK,GAAGV,CAAW,UAAWa,EAAU,CACnEN,QAASS,EAAYC,YACrBC,QAAS,CACP,eAAgB,qBAAA,CAClB,CACD,CAGH,CCvCO,MAAMC,EAAsC,CACjDC,MAAO,GACPC,YAAa,GACbC,IAAK,GACLC,KAAM,GACNC,KAAM,KACNC,OAAQ,CAAA,CACV,ECFA,SAAwBC,GAAiB,CACjC,KAAA,CAAElB,KAAAA,EAAMmB,OAAAA,EAAQC,WAAAA,EAAYC,QAAAA,EAASC,QAAAA,GAAYC,EAAS,CAC9DC,SAAUC,EACVC,QAASA,CAAC,CAAE5B,OAAAA,KAAaJ,EAAe,CAAEI,OAAAA,CAAAA,CAAQ,EAClD6B,gBAAiBA,CAACC,EAAcC,IAAmBD,EACnDE,gBAAiBC,CAAAA,CAClB,EAEM,MAAA,CAAE/B,KAAMA,GAAQW,EAAwBQ,OAAAA,EAAQC,WAAAA,EAAYC,QAAAA,EAASC,QAAAA,CAAQ,CACtF,CAEO,SAASU,GAAuB,CACrC,MAAMC,EAAcC,EAAe,EAE7BC,EAAWC,EAAY,CAC3BC,WAAYpC,EACZqC,UAA+BC,GAAA,CACjBC,EAAAA,aAAaf,EAAcc,CAAc,CAAA,CACvD,CACD,EAEM,MAAA,CACLE,kBAAmBN,EAASO,YAC5BC,WAAYR,EAASS,UACrBC,gBAAiBV,EAASd,OAC5B,CACF"}
@@ -0,0 +1,2 @@
1
+ import{a as r,k as d}from"./vendor-BKUJ0_Du.js";import{ay as i,bL as l,bP as n,I as u}from"./index-Dm-4OTmY.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new e.Error().stack;a&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[a]="7e0197f6-b639-4a30-8529-d80fea71c42a",e._sentryDebugIdIdentifier="sentry-dbid-7e0197f6-b639-4a30-8529-d80fea71c42a")}catch{}})();const s=`${i}/report`;async function o(e){return(await r.get(s,{signal:e==null?void 0:e.signal})).data}async function b(){await r.delete(`${s}/all`),await l.invalidateQueries({queryKey:n})}function g(){const{data:e,refetch:a}=d({queryKey:n,queryFn:({signal:t})=>o({signal:t}),placeholderData:(t,f)=>t,staleTime:u});return{data:e??{},refetch:a}}export{b as d,g as u};
2
+ //# sourceMappingURL=useReport-DqSBq4MG.js.map