@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 +1 @@
1
- {"version":3,"file":"PipHost-BueqKsmJ.js","sources":["../../src/views/editor/pip-timer/PipTimer.tsx","../../src/views/editor/pip-timer/PipHost.tsx"],"sourcesContent":["import { ViewSettings } from 'ontime-types';\n\nimport { FitText } from '../../../common/components/fit-text/FitText';\nimport MultiPartProgressBar from '../../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport { useTimerSocket } from '../../../common/hooks/useSocket';\nimport { cx } from '../../../common/utils/styleUtils';\nimport { getFormattedTimer, getTimerByType } from '../../common/viewUtils';\nimport {\n getEstimatedFontSize,\n getIsPlaying,\n getSecondaryDisplay,\n getShowMessage,\n getShowModifiers,\n getShowProgressBar,\n getTotalTime,\n} from '../../timer/timer.utils';\nimport { getTimerColour } from '../../utils/presentation.utils';\n\nimport './PipTimer.scss';\n\ninterface PipTimerProps {\n viewSettings: ViewSettings;\n}\n\nexport function PipTimer({ viewSettings }: PipTimerProps) {\n const { eventNow, message, time, clock, timerTypeNow, countToEndNow, auxTimer } = useTimerSocket();\n\n // gather modifiers\n const showOverlay = getShowMessage(message.timer);\n const { showFinished, showWarning, showDanger } = getShowModifiers(\n timerTypeNow,\n countToEndNow,\n time.phase,\n false,\n '',\n false,\n );\n const isPlaying = getIsPlaying(time.playback);\n const showProgressBar = getShowProgressBar(timerTypeNow);\n\n // gather timer data\n const totalTime = getTotalTime(time.duration, time.addedTime);\n const stageTimer = getTimerByType(false, timerTypeNow, clock, time, timerTypeNow);\n const display = getFormattedTimer(stageTimer, timerTypeNow, 'min', {\n removeSeconds: false,\n removeLeadingZero: false,\n });\n\n const currentAux = (() => {\n if (message.timer.secondarySource === 'aux1') {\n return auxTimer.aux1;\n }\n if (message.timer.secondarySource === 'aux2') {\n return auxTimer.aux2;\n }\n if (message.timer.secondarySource === 'aux3') {\n return auxTimer.aux3;\n }\n return null;\n })();\n\n const secondaryContent = getSecondaryDisplay(message, currentAux, 'min', false, true, false);\n\n // gather presentation styles\n const resolvedTimerColour = getTimerColour(viewSettings, undefined, showWarning, showDanger);\n const timerFontSize = getEstimatedFontSize(display, secondaryContent);\n const userStyles = {\n ...(resolvedTimerColour && { '--timer-colour': resolvedTimerColour }),\n };\n\n return (\n <div className={cx(['pip-timer', showFinished && 'pip-timer--finished'])} style={userStyles}>\n <div className={cx(['message-overlay', showOverlay && 'message-overlay--active'])}>\n <FitText mode='multi' min={12} max={256} className={cx(['message', message.timer.blink && 'blink'])}>\n {message.timer.text}\n </FitText>\n </div>\n\n <div className='timer-container'>\n <div\n className={cx(['timer', !isPlaying && 'timer--paused', showFinished && 'timer--finished'])}\n style={{ fontSize: `${timerFontSize}vw` }}\n data-phase={time.phase}\n >\n {display}\n </div>\n <div className={cx(['secondary', !secondaryContent && 'secondary--hidden'])}>\n <FitText mode='multi' min={12} max={256}>\n {secondaryContent}\n </FitText>\n </div>\n </div>\n\n {showProgressBar && (\n <MultiPartProgressBar\n className={cx(['progress-container', !isPlaying && 'progress-container--paused'])}\n now={time.current}\n complete={totalTime}\n normalColor={viewSettings.normalColor}\n warning={eventNow?.timeWarning}\n warningColor={viewSettings.warningColor}\n danger={eventNow?.timeDanger}\n dangerColor={viewSettings.dangerColor}\n hideOvertime={!showFinished}\n />\n )}\n </div>\n );\n}\n","import { createRoot } from 'react-dom/client';\nimport { ErrorBoundary } from '@sentry/react';\n\nimport { CornerPipButton } from '../../../common/components/editor-utils/EditorUtils';\nimport useViewSettings from '../../../common/hooks-query/useViewSettings';\n\nimport { PipTimer } from './PipTimer';\n\nexport default function PipTimerHost() {\n const { data, status } = useViewSettings();\n\n const openPictureInPicture = async () => {\n if (window.documentPictureInPicture.window) {\n return;\n }\n\n let pipWindow: Window;\n try {\n pipWindow = await window.documentPictureInPicture.requestWindow();\n } catch (err) {\n console.error('Failed to open Picture-in-Picture:', err);\n return;\n }\n\n [...document.styleSheets].forEach((sheet) => {\n try {\n if (sheet.href) {\n const link = pipWindow.document.createElement('link');\n link.rel = 'stylesheet';\n link.href = sheet.href;\n pipWindow.document.head.appendChild(link);\n } else if (sheet.cssRules) {\n const style = pipWindow.document.createElement('style');\n style.textContent = [...sheet.cssRules].map((rule) => rule.cssText).join('');\n pipWindow.document.head.appendChild(style);\n }\n } catch (e) {\n console.warn('Stylesheet copy blocked:', e);\n }\n });\n\n const pipDiv = pipWindow.document.createElement('div');\n pipDiv.setAttribute('id', 'pip-root');\n pipDiv.style.height = '100vh';\n pipWindow.document.body.append(pipDiv);\n\n const pipRoot = createRoot(pipWindow.document.getElementById('pip-root') as Element, {\n onCaughtError: (err, _errInfo) => console.error(err),\n onUncaughtError: (err, _errInfo) => console.error(err),\n onRecoverableError: (err, _errInfo) => console.error(err),\n });\n\n pipWindow.addEventListener('pagehide', () => {\n pipRoot.unmount();\n });\n\n pipRoot.render(\n <ErrorBoundary>\n <PipTimer viewSettings={data} />\n </ErrorBoundary>,\n );\n };\n\n return <CornerPipButton onClick={status === 'success' ? openPictureInPicture : undefined} />;\n}\n"],"names":["PipTimer","viewSettings","eventNow","message","time","clock","timerTypeNow","countToEndNow","auxTimer","useTimerSocket","showOverlay","getShowMessage","timer","showFinished","showWarning","showDanger","getShowModifiers","phase","isPlaying","getIsPlaying","playback","showProgressBar","getShowProgressBar","totalTime","getTotalTime","duration","addedTime","stageTimer","getTimerByType","display","getFormattedTimer","removeSeconds","removeLeadingZero","currentAux","secondarySource","aux1","aux2","aux3","secondaryContent","getSecondaryDisplay","resolvedTimerColour","getTimerColour","undefined","timerFontSize","getEstimatedFontSize","userStyles","jsxs","cx","jsx","FitText","blink","text","fontSize","MultiPartProgressBar","current","normalColor","timeWarning","warningColor","timeDanger","dangerColor","PipTimerHost","data","status","useViewSettings","openPictureInPicture","window","documentPictureInPicture","pipWindow","requestWindow","err","error","document","styleSheets","forEach","sheet","href","link","createElement","rel","head","appendChild","cssRules","style","textContent","map","rule","cssText","join","e","warn","pipDiv","setAttribute","height","body","append","pipRoot","createRoot","getElementById","onCaughtError","_errInfo","console","onUncaughtError","onRecoverableError","addEventListener","unmount","render","ErrorBoundary","CornerPipButton"],"mappings":"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"}
1
+ {"version":3,"file":"PipHost-Dz2oy7XG.js","sources":["../../src/views/editor/pip-timer/PipTimer.tsx","../../src/views/editor/pip-timer/PipHost.tsx"],"sourcesContent":["import { ViewSettings } from 'ontime-types';\n\nimport { FitText } from '../../../common/components/fit-text/FitText';\nimport MultiPartProgressBar from '../../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport { useTimerSocket } from '../../../common/hooks/useSocket';\nimport { cx } from '../../../common/utils/styleUtils';\nimport { getFormattedTimer, getTimerByType } from '../../common/viewUtils';\nimport {\n getEstimatedFontSize,\n getIsPlaying,\n getSecondaryDisplay,\n getShowMessage,\n getShowModifiers,\n getShowProgressBar,\n getTotalTime,\n} from '../../timer/timer.utils';\nimport { getTimerColour } from '../../utils/presentation.utils';\n\nimport './PipTimer.scss';\n\ninterface PipTimerProps {\n viewSettings: ViewSettings;\n}\n\nexport function PipTimer({ viewSettings }: PipTimerProps) {\n const { eventNow, message, time, clock, timerTypeNow, countToEndNow, auxTimer } = useTimerSocket();\n\n // gather modifiers\n const showOverlay = getShowMessage(message.timer);\n const { showFinished, showWarning, showDanger } = getShowModifiers(\n timerTypeNow,\n countToEndNow,\n time.phase,\n false,\n '',\n false,\n );\n const isPlaying = getIsPlaying(time.playback);\n const showProgressBar = getShowProgressBar(timerTypeNow);\n\n // gather timer data\n const totalTime = getTotalTime(time.duration, time.addedTime);\n const stageTimer = getTimerByType(false, timerTypeNow, clock, time, timerTypeNow);\n const display = getFormattedTimer(stageTimer, timerTypeNow, 'min', {\n removeSeconds: false,\n removeLeadingZero: false,\n });\n\n const currentAux = (() => {\n if (message.timer.secondarySource === 'aux1') {\n return auxTimer.aux1;\n }\n if (message.timer.secondarySource === 'aux2') {\n return auxTimer.aux2;\n }\n if (message.timer.secondarySource === 'aux3') {\n return auxTimer.aux3;\n }\n return null;\n })();\n\n const secondaryContent = getSecondaryDisplay(message, currentAux, 'min', false, true, false);\n\n // gather presentation styles\n const resolvedTimerColour = getTimerColour(viewSettings, undefined, showWarning, showDanger);\n const timerFontSize = getEstimatedFontSize(display, secondaryContent);\n const userStyles = {\n ...(resolvedTimerColour && { '--timer-colour': resolvedTimerColour }),\n };\n\n return (\n <div className={cx(['pip-timer', showFinished && 'pip-timer--finished'])} style={userStyles}>\n <div className={cx(['message-overlay', showOverlay && 'message-overlay--active'])}>\n <FitText mode='multi' min={12} max={256} className={cx(['message', message.timer.blink && 'blink'])}>\n {message.timer.text}\n </FitText>\n </div>\n\n <div className='timer-container'>\n <div\n className={cx(['timer', !isPlaying && 'timer--paused', showFinished && 'timer--finished'])}\n style={{ fontSize: `${timerFontSize}vw` }}\n data-phase={time.phase}\n >\n {display}\n </div>\n <div className={cx(['secondary', !secondaryContent && 'secondary--hidden'])}>\n <FitText mode='multi' min={12} max={256}>\n {secondaryContent}\n </FitText>\n </div>\n </div>\n\n {showProgressBar && (\n <MultiPartProgressBar\n className={cx(['progress-container', !isPlaying && 'progress-container--paused'])}\n now={time.current}\n complete={totalTime}\n normalColor={viewSettings.normalColor}\n warning={eventNow?.timeWarning}\n warningColor={viewSettings.warningColor}\n danger={eventNow?.timeDanger}\n dangerColor={viewSettings.dangerColor}\n hideOvertime={!showFinished}\n />\n )}\n </div>\n );\n}\n","import { createRoot } from 'react-dom/client';\nimport { ErrorBoundary } from '@sentry/react';\n\nimport { CornerPipButton } from '../../../common/components/editor-utils/EditorUtils';\nimport useViewSettings from '../../../common/hooks-query/useViewSettings';\n\nimport { PipTimer } from './PipTimer';\n\nexport default function PipTimerHost() {\n const { data, status } = useViewSettings();\n\n const openPictureInPicture = async () => {\n if (window.documentPictureInPicture.window) {\n return;\n }\n\n let pipWindow: Window;\n try {\n pipWindow = await window.documentPictureInPicture.requestWindow();\n } catch (err) {\n console.error('Failed to open Picture-in-Picture:', err);\n return;\n }\n\n [...document.styleSheets].forEach((sheet) => {\n try {\n if (sheet.href) {\n const link = pipWindow.document.createElement('link');\n link.rel = 'stylesheet';\n link.href = sheet.href;\n pipWindow.document.head.appendChild(link);\n } else if (sheet.cssRules) {\n const style = pipWindow.document.createElement('style');\n style.textContent = [...sheet.cssRules].map((rule) => rule.cssText).join('');\n pipWindow.document.head.appendChild(style);\n }\n } catch (e) {\n console.warn('Stylesheet copy blocked:', e);\n }\n });\n\n const pipDiv = pipWindow.document.createElement('div');\n pipDiv.setAttribute('id', 'pip-root');\n pipDiv.style.height = '100vh';\n pipWindow.document.body.append(pipDiv);\n\n const pipRoot = createRoot(pipWindow.document.getElementById('pip-root') as Element, {\n onCaughtError: (err, _errInfo) => console.error(err),\n onUncaughtError: (err, _errInfo) => console.error(err),\n onRecoverableError: (err, _errInfo) => console.error(err),\n });\n\n pipWindow.addEventListener('pagehide', () => {\n pipRoot.unmount();\n });\n\n pipRoot.render(\n <ErrorBoundary>\n <PipTimer viewSettings={data} />\n </ErrorBoundary>,\n );\n };\n\n return <CornerPipButton onClick={status === 'success' ? openPictureInPicture : undefined} />;\n}\n"],"names":["PipTimer","viewSettings","eventNow","message","time","clock","timerTypeNow","countToEndNow","auxTimer","useTimerSocket","showOverlay","getShowMessage","timer","showFinished","showWarning","showDanger","getShowModifiers","phase","isPlaying","getIsPlaying","playback","showProgressBar","getShowProgressBar","totalTime","getTotalTime","duration","addedTime","stageTimer","getTimerByType","display","getFormattedTimer","removeSeconds","removeLeadingZero","currentAux","secondarySource","aux1","aux2","aux3","secondaryContent","getSecondaryDisplay","resolvedTimerColour","getTimerColour","undefined","timerFontSize","getEstimatedFontSize","userStyles","jsxs","cx","jsx","FitText","blink","text","fontSize","MultiPartProgressBar","current","normalColor","timeWarning","warningColor","timeDanger","dangerColor","PipTimerHost","data","status","useViewSettings","openPictureInPicture","window","documentPictureInPicture","pipWindow","requestWindow","err","error","document","styleSheets","forEach","sheet","href","link","createElement","rel","head","appendChild","cssRules","style","textContent","map","rule","cssText","join","e","warn","pipDiv","setAttribute","height","body","append","pipRoot","createRoot","getElementById","onCaughtError","_errInfo","console","onUncaughtError","onRecoverableError","addEventListener","unmount","render","ErrorBoundary","CornerPipButton"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{j as e,ac as f}from"./vendor-dQa48psh.js";import{u as m,L as u,d as j,O as o}from"./index-DYkg-xOk.js";import{E as l}from"./EmptyPage-CcO33dlE.js";import{V as x}from"./ViewLogo-CHqiH4C0.js";import{V as a}from"./ViewParamsEditor-BHIK3qtx.js";import{u as _}from"./useWindowTitle-Cl1AVD9_.js";import{u as h}from"./useProjectData-DdITd09M.js";import"./SwatchPicker-DPyJv7aS.js";import"./viewUtils-rcOl1-o8.js";import"./Select-B3zdv0Ng.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new s.Error().stack;r&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[r]="a2812b94-5c27-4f42-92d5-b4da83da3a44",s._sentryDebugIdIdentifier="sentry-dbid-a2812b94-5c27-4f42-92d5-b4da83da3a44")}catch{}})();function g(){const s=m(t=>t.mirror),{data:r,status:n}=h();return{data:{projectData:r,isMirrored:s},status:n}}function L(){const{data:s,status:r}=g();return _("Project info"),r==="pending"?e.jsx(u,{}):r==="error"?e.jsx(l,{text:"There was an error fetching data, please refresh the page."}):e.jsx(v,{...s})}function v({projectData:s,isMirrored:r}){const{getLocalizedString:n}=j();return!s||Object.values(s).every(i=>!i||i&&Array.isArray(i)&&i.length===0)?e.jsxs(e.Fragment,{children:[e.jsx(a,{target:o.ProjectInfo,viewOptions:[]}),e.jsx(l,{text:n("common.no_data")}),";"]}):e.jsxs("div",{className:`project ${r?"mirror":""}`,"data-testid":"project-view",children:[e.jsx(a,{target:o.ProjectInfo,viewOptions:[]}),s.logo&&e.jsx(x,{name:s.logo,className:"logo"}),e.jsxs("div",{className:"info",children:[s.title&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.title")}),e.jsx("div",{className:"info__value",children:s.title})]}),s.description&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.description")}),e.jsx("div",{className:"info__value",children:s.description})]}),s.info&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.info")}),e.jsx("div",{className:"info__value",children:s.info})]}),s.url&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.url")}),e.jsxs("a",{href:s.url,target:"_blank",rel:"noreferrer",className:"info__value link",children:[s.url," ",e.jsx(f,{style:{fontSize:"1em"}})]})]}),s.custom.map((i,d)=>{const c=!!i.url;return e.jsxs("div",{className:"info__custom",children:[c&&e.jsx("div",{className:"info__image-container",children:e.jsx("img",{className:"info__image",src:i.url,loading:"lazy"})}),e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:i.title}),e.jsx("div",{className:"info__value",children:i.value})]})]},`${i.title}-${d}`)})]})]})}export{L as default};
2
- //# sourceMappingURL=ProjectInfo-DiD9lzzx.js.map
1
+ import{j as e,ac as f}from"./vendor-BKUJ0_Du.js";import{u as m,L as u,d as j,O as o}from"./index-Dm-4OTmY.js";import{E as l}from"./EmptyPage-CYVrjOvI.js";import{V as x}from"./ViewLogo-2I7w5Yms.js";import{V as a}from"./ViewParamsEditor-BX2RM8sx.js";import{u as _}from"./useWindowTitle-DM8dIp8L.js";import{u as h}from"./useProjectData-C110zIXC.js";import"./SwatchPicker-Ckpchvjo.js";import"./viewUtils-29a3Mmiu.js";import"./Select-BnGTAeXJ.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new s.Error().stack;r&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[r]="a2812b94-5c27-4f42-92d5-b4da83da3a44",s._sentryDebugIdIdentifier="sentry-dbid-a2812b94-5c27-4f42-92d5-b4da83da3a44")}catch{}})();function g(){const s=m(t=>t.mirror),{data:r,status:n}=h();return{data:{projectData:r,isMirrored:s},status:n}}function L(){const{data:s,status:r}=g();return _("Project info"),r==="pending"?e.jsx(u,{}):r==="error"?e.jsx(l,{text:"There was an error fetching data, please refresh the page."}):e.jsx(v,{...s})}function v({projectData:s,isMirrored:r}){const{getLocalizedString:n}=j();return!s||Object.values(s).every(i=>!i||i&&Array.isArray(i)&&i.length===0)?e.jsxs(e.Fragment,{children:[e.jsx(a,{target:o.ProjectInfo,viewOptions:[]}),e.jsx(l,{text:n("common.no_data")}),";"]}):e.jsxs("div",{className:`project ${r?"mirror":""}`,"data-testid":"project-view",children:[e.jsx(a,{target:o.ProjectInfo,viewOptions:[]}),s.logo&&e.jsx(x,{name:s.logo,className:"logo"}),e.jsxs("div",{className:"info",children:[s.title&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.title")}),e.jsx("div",{className:"info__value",children:s.title})]}),s.description&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.description")}),e.jsx("div",{className:"info__value",children:s.description})]}),s.info&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.info")}),e.jsx("div",{className:"info__value",children:s.info})]}),s.url&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.url")}),e.jsxs("a",{href:s.url,target:"_blank",rel:"noreferrer",className:"info__value link",children:[s.url," ",e.jsx(f,{style:{fontSize:"1em"}})]})]}),s.custom.map((i,d)=>{const c=!!i.url;return e.jsxs("div",{className:"info__custom",children:[c&&e.jsx("div",{className:"info__image-container",children:e.jsx("img",{className:"info__image",src:i.url,loading:"lazy"})}),e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:i.title}),e.jsx("div",{className:"info__value",children:i.value})]})]},`${i.title}-${d}`)})]})]})}export{L as default};
2
+ //# sourceMappingURL=ProjectInfo-BR_7Hp5u.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectInfo-DiD9lzzx.js","sources":["../../src/views/project-info/useProjectInfoData.ts","../../src/views/project-info/ProjectInfo.tsx"],"sourcesContent":["import { ProjectData } from 'ontime-types';\n\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport { useViewOptionsStore } from '../../common/stores/viewOptions';\nimport { ViewData } from '../utils/viewLoader.utils';\n\nexport interface ProjectInfoData {\n projectData: ProjectData;\n isMirrored: boolean;\n}\n\nexport function useProjectInfoData(): ViewData<ProjectInfoData> {\n // persisted app state\n const isMirrored = useViewOptionsStore((state) => state.mirror);\n\n // HTTP API data\n const { data: projectData, status: projectDataStatus } = useProjectData();\n\n return {\n data: {\n projectData,\n isMirrored,\n },\n status: projectDataStatus,\n };\n}\n","import { IoOpenOutline } from 'react-icons/io5';\nimport { OntimeView } from 'ontime-types';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport ViewLogo from '../../common/components/view-logo/ViewLogo';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { useTranslation } from '../../translation/TranslationProvider';\nimport Loader from '../common/loader/Loader';\n\nimport { ProjectInfoData, useProjectInfoData } from './useProjectInfoData';\n\nimport './ProjectInfo.scss';\n\nexport default function ProjectInfoLoader() {\n const { data, status } = useProjectInfoData();\n\n useWindowTitle('Project info');\n\n if (status === 'pending') {\n return <Loader />;\n }\n\n if (status === 'error') {\n return <EmptyPage text='There was an error fetching data, please refresh the page.' />;\n }\n\n return <ProjectInfo {...data} />;\n}\n\nfunction ProjectInfo({ projectData, isMirrored }: ProjectInfoData) {\n const { getLocalizedString } = useTranslation();\n\n /**\n * Check if there is data to show at all\n * We need a special check for the project fields which can be an empty array\n */\n const isEmpty =\n !projectData ||\n Object.values(projectData).every((value) => !value || (value && Array.isArray(value) && value.length === 0));\n if (isEmpty) {\n return (\n <>\n <ViewParamsEditor target={OntimeView.ProjectInfo} viewOptions={[]} />\n <EmptyPage text={getLocalizedString('common.no_data')} />;\n </>\n );\n }\n\n return (\n <div className={`project ${isMirrored ? 'mirror' : ''}`} data-testid='project-view'>\n <ViewParamsEditor target={OntimeView.ProjectInfo} viewOptions={[]} />\n {projectData.logo && <ViewLogo name={projectData.logo} className='logo' />}\n <div className='info'>\n {projectData.title && (\n <div>\n <div className='info__label'>{getLocalizedString('project.title')}</div>\n <div className='info__value'>{projectData.title}</div>\n </div>\n )}\n {projectData.description && (\n <div>\n <div className='info__label'>{getLocalizedString('project.description')}</div>\n <div className='info__value'>{projectData.description}</div>\n </div>\n )}\n {projectData.info && (\n <div>\n <div className='info__label'>{getLocalizedString('project.info')}</div>\n <div className='info__value'>{projectData.info}</div>\n </div>\n )}\n {projectData.url && (\n <div>\n <div className='info__label'>{getLocalizedString('project.url')}</div>\n <a href={projectData.url} target='_blank' rel='noreferrer' className='info__value link'>\n {projectData.url} <IoOpenOutline style={{ fontSize: '1em' }} />\n </a>\n </div>\n )}\n {projectData.custom.map((info, idx) => {\n const hasUrl = Boolean(info.url);\n return (\n <div key={`${info.title}-${idx}`} className='info__custom'>\n {hasUrl && (\n <div className='info__image-container'>\n <img className='info__image' src={info.url} loading='lazy' />\n </div>\n )}\n <div>\n <div className='info__label'>{info.title}</div>\n <div className='info__value'>{info.value}</div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"],"names":["useProjectInfoData","isMirrored","useViewOptionsStore","state","mirror","data","projectData","status","projectDataStatus","useProjectData","ProjectInfoLoader","useWindowTitle","Loader","jsx","EmptyPage","ProjectInfo","getLocalizedString","useTranslation","Object","values","every","value","Array","isArray","length","jsxs","Fragment","ViewParamsEditor","OntimeView","logo","ViewLogo","title","description","info","url","IoOpenOutline","fontSize","custom","map","idx","hasUrl","Boolean"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectInfo-BR_7Hp5u.js","sources":["../../src/views/project-info/useProjectInfoData.ts","../../src/views/project-info/ProjectInfo.tsx"],"sourcesContent":["import { ProjectData } from 'ontime-types';\n\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport { useViewOptionsStore } from '../../common/stores/viewOptions';\nimport { ViewData } from '../utils/viewLoader.utils';\n\nexport interface ProjectInfoData {\n projectData: ProjectData;\n isMirrored: boolean;\n}\n\nexport function useProjectInfoData(): ViewData<ProjectInfoData> {\n // persisted app state\n const isMirrored = useViewOptionsStore((state) => state.mirror);\n\n // HTTP API data\n const { data: projectData, status: projectDataStatus } = useProjectData();\n\n return {\n data: {\n projectData,\n isMirrored,\n },\n status: projectDataStatus,\n };\n}\n","import { IoOpenOutline } from 'react-icons/io5';\nimport { OntimeView } from 'ontime-types';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport ViewLogo from '../../common/components/view-logo/ViewLogo';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { useTranslation } from '../../translation/TranslationProvider';\nimport Loader from '../common/loader/Loader';\n\nimport { ProjectInfoData, useProjectInfoData } from './useProjectInfoData';\n\nimport './ProjectInfo.scss';\n\nexport default function ProjectInfoLoader() {\n const { data, status } = useProjectInfoData();\n\n useWindowTitle('Project info');\n\n if (status === 'pending') {\n return <Loader />;\n }\n\n if (status === 'error') {\n return <EmptyPage text='There was an error fetching data, please refresh the page.' />;\n }\n\n return <ProjectInfo {...data} />;\n}\n\nfunction ProjectInfo({ projectData, isMirrored }: ProjectInfoData) {\n const { getLocalizedString } = useTranslation();\n\n /**\n * Check if there is data to show at all\n * We need a special check for the project fields which can be an empty array\n */\n const isEmpty =\n !projectData ||\n Object.values(projectData).every((value) => !value || (value && Array.isArray(value) && value.length === 0));\n if (isEmpty) {\n return (\n <>\n <ViewParamsEditor target={OntimeView.ProjectInfo} viewOptions={[]} />\n <EmptyPage text={getLocalizedString('common.no_data')} />;\n </>\n );\n }\n\n return (\n <div className={`project ${isMirrored ? 'mirror' : ''}`} data-testid='project-view'>\n <ViewParamsEditor target={OntimeView.ProjectInfo} viewOptions={[]} />\n {projectData.logo && <ViewLogo name={projectData.logo} className='logo' />}\n <div className='info'>\n {projectData.title && (\n <div>\n <div className='info__label'>{getLocalizedString('project.title')}</div>\n <div className='info__value'>{projectData.title}</div>\n </div>\n )}\n {projectData.description && (\n <div>\n <div className='info__label'>{getLocalizedString('project.description')}</div>\n <div className='info__value'>{projectData.description}</div>\n </div>\n )}\n {projectData.info && (\n <div>\n <div className='info__label'>{getLocalizedString('project.info')}</div>\n <div className='info__value'>{projectData.info}</div>\n </div>\n )}\n {projectData.url && (\n <div>\n <div className='info__label'>{getLocalizedString('project.url')}</div>\n <a href={projectData.url} target='_blank' rel='noreferrer' className='info__value link'>\n {projectData.url} <IoOpenOutline style={{ fontSize: '1em' }} />\n </a>\n </div>\n )}\n {projectData.custom.map((info, idx) => {\n const hasUrl = Boolean(info.url);\n return (\n <div key={`${info.title}-${idx}`} className='info__custom'>\n {hasUrl && (\n <div className='info__image-container'>\n <img className='info__image' src={info.url} loading='lazy' />\n </div>\n )}\n <div>\n <div className='info__label'>{info.title}</div>\n <div className='info__value'>{info.value}</div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"],"names":["useProjectInfoData","isMirrored","useViewOptionsStore","state","mirror","data","projectData","status","projectDataStatus","useProjectData","ProjectInfoLoader","useWindowTitle","Loader","jsx","EmptyPage","ProjectInfo","getLocalizedString","useTranslation","Object","values","every","value","Array","isArray","length","jsxs","Fragment","ViewParamsEditor","OntimeView","logo","ViewLogo","title","description","info","url","IoOpenOutline","fontSize","custom","map","idx","hasUrl","Boolean"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{h as l,j as t,A as f}from"./vendor-dQa48psh.js";import{e as h,ah as p,ak as b,bR as g,U as x}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]="e2b27f50-5d33-4a5f-805e-dc15ca8efc3a",e._sentryDebugIdIdentifier="sentry-dbid-e2b27f50-5d33-4a5f-805e-dc15ca8efc3a")}catch{}})();const y="_container_o8th0_17",_="_pin_o8th0_27",m="_pinFailed_o8th0_51",c={container:y,pin:_,pinFailed:m};function v({permission:e,handleValidation:a}){const[s,o]=l.useState(""),[i,r]=l.useState(!1),u=()=>{a(s)||(r(!0),o(""))},d=n=>{o(n),i&&r(!1)};return t.jsxs("div",{className:c.container,children:[`Ontime ${e}`,t.jsxs("form",{onSubmit:n=>{n.preventDefault(),u()},className:h([c.pin,i&&c.pinFailed]),children:[t.jsx(p,{type:"password",maxLength:4,height:"large",value:s,onChange:n=>d(n.target.value)}),t.jsx(b,{type:"submit",variant:"primary","aria-label":"Enter",children:t.jsx(f,{})})]})]})}function w({permission:e,children:a}){const{editorAuth:s,operatorAuth:o,validate:i}=l.useContext(g),r=l.useCallback(d=>i(d,e),[e,i]);return x||(e==="editor"?s:e==="operator"?o:!1)?t.jsx(t.Fragment,{children:a}):t.jsx(v,{permission:e,handleValidation:r})}export{w as P};
2
- //# sourceMappingURL=ProtectRoute-CcDK6JVA.js.map
1
+ import{h as l,j as t,A as f}from"./vendor-BKUJ0_Du.js";import{e as h,ah as p,ak as b,bV as g,U as x}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]="8cc1f795-9a1d-4861-82a8-ba198e0be9e5",e._sentryDebugIdIdentifier="sentry-dbid-8cc1f795-9a1d-4861-82a8-ba198e0be9e5")}catch{}})();const y="_container_o8th0_17",_="_pin_o8th0_27",m="_pinFailed_o8th0_51",c={container:y,pin:_,pinFailed:m};function v({permission:e,handleValidation:a}){const[s,o]=l.useState(""),[i,r]=l.useState(!1),u=()=>{a(s)||(r(!0),o(""))},d=n=>{o(n),i&&r(!1)};return t.jsxs("div",{className:c.container,children:[`Ontime ${e}`,t.jsxs("form",{onSubmit:n=>{n.preventDefault(),u()},className:h([c.pin,i&&c.pinFailed]),children:[t.jsx(p,{type:"password",maxLength:4,height:"large",value:s,onChange:n=>d(n.target.value)}),t.jsx(b,{type:"submit",variant:"primary","aria-label":"Enter",children:t.jsx(f,{})})]})]})}function w({permission:e,children:a}){const{editorAuth:s,operatorAuth:o,validate:i}=l.useContext(g),r=l.useCallback(d=>i(d,e),[e,i]);return x||(e==="editor"?s:e==="operator"?o:!1)?t.jsx(t.Fragment,{children:a}):t.jsx(v,{permission:e,handleValidation:r})}export{w as P};
2
+ //# sourceMappingURL=ProtectRoute-Bxq6q7ba.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProtectRoute-CcDK6JVA.js","sources":["../../src/common/components/protect-route/PinPage.tsx","../../src/common/components/protect-route/ProtectRoute.tsx"],"sourcesContent":["import { PropsWithChildren, useState } from 'react';\nimport { IoCheckmark } from 'react-icons/io5';\n\nimport { cx } from '../../utils/styleUtils';\nimport IconButton from '../buttons/IconButton';\nimport Input from '../input/input/Input';\n\nimport style from './PinPage.module.scss';\n\ninterface PinPageProps {\n permission: 'editor' | 'operator';\n handleValidation: (pin: string) => boolean;\n}\n\nexport default function PinPage({ permission, handleValidation }: PropsWithChildren<PinPageProps>) {\n const [pin, setPin] = useState('');\n const [failed, setFailed] = useState(false);\n\n const validate = () => {\n const isValid = handleValidation(pin);\n if (!isValid) {\n setFailed(true);\n setPin('');\n }\n };\n\n const handleInputChange = (value: string) => {\n setPin(value);\n if (failed) setFailed(false);\n };\n\n return (\n <div className={style.container}>\n {`Ontime ${permission}`}\n <form\n onSubmit={(event) => {\n event.preventDefault();\n validate();\n }}\n className={cx([style.pin, failed && style.pinFailed])}\n >\n <Input\n type='password'\n maxLength={4}\n height='large'\n value={pin}\n onChange={(e) => handleInputChange(e.target.value)}\n />\n <IconButton type='submit' variant='primary' aria-label='Enter'>\n <IoCheckmark />\n </IconButton>\n </form>\n </div>\n );\n}\n","import { PropsWithChildren, useCallback, useContext } from 'react';\n\nimport { isLocalhost } from '../../../externals';\nimport { AppContext } from '../../context/AppContext';\n\nimport PinPage from './PinPage';\n\ninterface ProtectRouteProps {\n permission: 'editor' | 'operator';\n}\n\nexport default function ProtectRoute({ permission, children }: PropsWithChildren<ProtectRouteProps>) {\n const { editorAuth, operatorAuth, validate } = useContext(AppContext);\n\n const handleValidation = useCallback(\n (pin: string) => {\n return validate(pin, permission);\n },\n [permission, validate],\n );\n\n const hasRelevantAuth = () => {\n if (permission === 'editor') {\n return editorAuth;\n }\n if (permission === 'operator') {\n return operatorAuth;\n }\n return false;\n };\n\n if (isLocalhost || hasRelevantAuth()) {\n // eslint-disable-next-line react/jsx-no-useless-fragment -- trying to make typescript happy\n return <>{children}</>;\n }\n\n return <PinPage permission={permission} handleValidation={handleValidation} />;\n}\n"],"names":["PinPage","permission","handleValidation","pin","setPin","useState","failed","setFailed","validate","handleInputChange","value","jsxs","style","container","event","preventDefault","cx","pinFailed","jsx","Input","e","target","IconButton","IoCheckmark","ProtectRoute","children","editorAuth","operatorAuth","useContext","AppContext","useCallback","isLocalhost"],"mappings":"kkBAcA,SAAwBA,EAAQ,CAAEC,WAAAA,EAAYC,iBAAAA,CAAkD,EAAG,CACjG,KAAM,CAACC,EAAKC,CAAM,EAAIC,EAAAA,SAAS,EAAE,EAC3B,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAAS,EAAK,EAEpCG,EAAWA,IAAM,CACLN,EAAiBC,CAAG,IAElCI,EAAU,EAAI,EACdH,EAAO,EAAE,EAEb,EAEMK,EAAqBC,GAAkB,CAC3CN,EAAOM,CAAK,EACRJ,KAAkB,EAAK,CAC7B,EAEA,OACGK,EAAAA,KAAA,MAAA,CAAI,UAAWC,EAAMC,UACnB,SAAA,CAAA,UAAUZ,CAAU,GACrBU,EAAAA,KAAC,OACC,CAAA,SAAqBG,GAAA,CACnBA,EAAMC,eAAe,EACZP,EAAA,CAAA,EAEX,UAAWQ,EAAG,CAACJ,EAAMT,IAAKG,GAAUM,EAAMK,SAAS,CAAC,EAEpD,SAAA,CAAAC,EAAA,IAACC,EACC,CAAA,KAAK,WACL,UAAW,EACX,OAAO,QACP,MAAOhB,EACP,SAAiBM,GAAAA,EAAkBW,EAAEC,OAAOX,KAAK,EAAE,EAErDQ,EAAAA,IAACI,EAAW,CAAA,KAAK,SAAS,QAAQ,UAAU,aAAW,QACrD,SAACJ,EAAA,IAAAK,EAAA,CAAW,CAAA,CACd,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAEJ,CC3CA,SAAwBC,EAAa,CAAEvB,WAAAA,EAAYwB,SAAAA,CAA+C,EAAG,CAC7F,KAAA,CAAEC,WAAAA,EAAYC,aAAAA,EAAcnB,SAAAA,CAAAA,EAAaoB,EAAAA,WAAWC,CAAU,EAE9D3B,EAAmB4B,cACtB3B,GACQK,EAASL,EAAKF,CAAU,EAEjC,CAACA,EAAYO,CAAQ,CACvB,EAYIuB,OAAAA,IATE9B,IAAe,SACVyB,EAELzB,IAAe,WACV0B,EAEF,sBAKGF,SAAAA,EAAS,EAGdP,EAAA,IAAClB,EAAQ,CAAA,WAAAC,EAAwB,iBAAAC,CAAsC,CAAA,CAChF"}
1
+ {"version":3,"file":"ProtectRoute-Bxq6q7ba.js","sources":["../../src/common/components/protect-route/PinPage.tsx","../../src/common/components/protect-route/ProtectRoute.tsx"],"sourcesContent":["import { PropsWithChildren, useState } from 'react';\nimport { IoCheckmark } from 'react-icons/io5';\n\nimport { cx } from '../../utils/styleUtils';\nimport IconButton from '../buttons/IconButton';\nimport Input from '../input/input/Input';\n\nimport style from './PinPage.module.scss';\n\ninterface PinPageProps {\n permission: 'editor' | 'operator';\n handleValidation: (pin: string) => boolean;\n}\n\nexport default function PinPage({ permission, handleValidation }: PropsWithChildren<PinPageProps>) {\n const [pin, setPin] = useState('');\n const [failed, setFailed] = useState(false);\n\n const validate = () => {\n const isValid = handleValidation(pin);\n if (!isValid) {\n setFailed(true);\n setPin('');\n }\n };\n\n const handleInputChange = (value: string) => {\n setPin(value);\n if (failed) setFailed(false);\n };\n\n return (\n <div className={style.container}>\n {`Ontime ${permission}`}\n <form\n onSubmit={(event) => {\n event.preventDefault();\n validate();\n }}\n className={cx([style.pin, failed && style.pinFailed])}\n >\n <Input\n type='password'\n maxLength={4}\n height='large'\n value={pin}\n onChange={(e) => handleInputChange(e.target.value)}\n />\n <IconButton type='submit' variant='primary' aria-label='Enter'>\n <IoCheckmark />\n </IconButton>\n </form>\n </div>\n );\n}\n","import { PropsWithChildren, useCallback, useContext } from 'react';\n\nimport { isLocalhost } from '../../../externals';\nimport { AppContext } from '../../context/AppContext';\n\nimport PinPage from './PinPage';\n\ninterface ProtectRouteProps {\n permission: 'editor' | 'operator';\n}\n\nexport default function ProtectRoute({ permission, children }: PropsWithChildren<ProtectRouteProps>) {\n const { editorAuth, operatorAuth, validate } = useContext(AppContext);\n\n const handleValidation = useCallback(\n (pin: string) => {\n return validate(pin, permission);\n },\n [permission, validate],\n );\n\n const hasRelevantAuth = () => {\n if (permission === 'editor') {\n return editorAuth;\n }\n if (permission === 'operator') {\n return operatorAuth;\n }\n return false;\n };\n\n if (isLocalhost || hasRelevantAuth()) {\n // eslint-disable-next-line react/jsx-no-useless-fragment -- trying to make typescript happy\n return <>{children}</>;\n }\n\n return <PinPage permission={permission} handleValidation={handleValidation} />;\n}\n"],"names":["PinPage","permission","handleValidation","pin","setPin","useState","failed","setFailed","validate","handleInputChange","value","jsxs","style","container","event","preventDefault","cx","pinFailed","jsx","Input","e","target","IconButton","IoCheckmark","ProtectRoute","children","editorAuth","operatorAuth","useContext","AppContext","useCallback","isLocalhost"],"mappings":"kkBAcA,SAAwBA,EAAQ,CAAEC,WAAAA,EAAYC,iBAAAA,CAAkD,EAAG,CACjG,KAAM,CAACC,EAAKC,CAAM,EAAIC,EAAAA,SAAS,EAAE,EAC3B,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAAS,EAAK,EAEpCG,EAAWA,IAAM,CACLN,EAAiBC,CAAG,IAElCI,EAAU,EAAI,EACdH,EAAO,EAAE,EAEb,EAEMK,EAAqBC,GAAkB,CAC3CN,EAAOM,CAAK,EACRJ,KAAkB,EAAK,CAC7B,EAEA,OACGK,EAAAA,KAAA,MAAA,CAAI,UAAWC,EAAMC,UACnB,SAAA,CAAA,UAAUZ,CAAU,GACrBU,EAAAA,KAAC,OACC,CAAA,SAAqBG,GAAA,CACnBA,EAAMC,eAAe,EACZP,EAAA,CAAA,EAEX,UAAWQ,EAAG,CAACJ,EAAMT,IAAKG,GAAUM,EAAMK,SAAS,CAAC,EAEpD,SAAA,CAAAC,EAAA,IAACC,EACC,CAAA,KAAK,WACL,UAAW,EACX,OAAO,QACP,MAAOhB,EACP,SAAiBM,GAAAA,EAAkBW,EAAEC,OAAOX,KAAK,EAAE,EAErDQ,EAAAA,IAACI,EAAW,CAAA,KAAK,SAAS,QAAQ,UAAU,aAAW,QACrD,SAACJ,EAAA,IAAAK,EAAA,CAAW,CAAA,CACd,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAEJ,CC3CA,SAAwBC,EAAa,CAAEvB,WAAAA,EAAYwB,SAAAA,CAA+C,EAAG,CAC7F,KAAA,CAAEC,WAAAA,EAAYC,aAAAA,EAAcnB,SAAAA,CAAAA,EAAaoB,EAAAA,WAAWC,CAAU,EAE9D3B,EAAmB4B,cACtB3B,GACQK,EAASL,EAAKF,CAAU,EAEjC,CAACA,EAAYO,CAAQ,CACvB,EAYIuB,OAAAA,IATE9B,IAAe,SACVyB,EAELzB,IAAe,WACV0B,EAEF,sBAKGF,SAAAA,EAAS,EAGdP,EAAA,IAAClB,EAAQ,CAAA,WAAAC,EAAwB,iBAAAC,CAAsC,CAAA,CAChF"}
@@ -0,0 +1,2 @@
1
+ import{o as C,h as n,j as e,aG as b,C as j,I as v}from"./vendor-BKUJ0_Du.js";import{P as w}from"./ProtectRoute-Bxq6q7ba.js";import{a as E,bb as y,P as M,bc as O,b6 as m,bd as p,be as P,ba as T,ak as S}from"./index-Dm-4OTmY.js";import{u as I,m as W,C as _,a as k,E as D,b as F}from"./CuesheetTable-B5LQVh5m.js";import{u as A}from"./DelayIndicator-DKS6mZdB.js";import{u as $}from"./useWindowTitle-DM8dIp8L.js";import{T as f,O as g,a as L,M as N,C as R}from"./TimeElements-CYIgGk0T.js";import{O as h,T as z}from"./OverviewWrapper-B2i8d3rt.js";import{M as B}from"./MultiPartProgressBar-W2a-JWPY.js";import{E as V}from"./EmptyPage-CYVrjOvI.js";import{u as G}from"./useCustomFields-BBE4LBBr.js";import"./useEventSelection-Bpbu89c7.js";import"./SwatchPicker-Ckpchvjo.js";import"./Select-BnGTAeXJ.js";import"./useRundown-DAo6huE4.js";import"./EditorUtils-BLcTuWz1.js";import"./TimeInput-Cwl9vLWA.js";import"./parseUserTime-sZbEBi61.js";import"./validateEvent-GnPt-e9-.js";import"./Tooltip-DZJ7u9gm.js";import"./offset-VthsmtrO.js";import"./editorSettings-_x6YKRfR.js";import"./rundownUtils-CXZRD6yP.js";import"./SuperscriptPeriod-EEedc9rG.js";/* empty css */import"./playbackstate-Dl_ZJABT.js";import"./useProjectData-C110zIXC.js";import"./getProgress-ZUTmCn_v.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new s.Error().stack;r&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[r]="37ed73f6-c625-4ce2-8f10-7dfe734754ba",s._sentryDebugIdIdentifier="sentry-dbid-37ed73f6-c625-4ce2-8f10-7dfe734754ba")}catch{}})();function H(){const{width:s}=C();return n.useMemo(()=>s<800,[s])}const K=n.memo(q);function q({children:s}){return H()?e.jsx(J,{children:s}):e.jsx(Q,{children:s})}function J({children:s}){return e.jsxs(h,{navElements:s,children:[e.jsx(f,{}),e.jsx(g,{})]})}function Q({children:s}){return e.jsxs(h,{navElements:s,children:[e.jsx(z,{}),e.jsx(L,{shouldFormat:!0}),e.jsx(f,{}),e.jsx(g,{}),e.jsx(N,{}),e.jsx(R,{shouldFormat:!0})]})}const U="_progressOverride_av4z0_17",X={progressOverride:U};function Y(){const{data:s}=E(),{current:r,duration:o,timeWarning:t,timeDanger:i}=y();return e.jsx(B,{now:r,complete:o,normalColor:s.normalColor,warning:t,warningColor:s.warningColor,danger:i,dangerColor:s.dangerColor,className:X.progressOverride,ignoreCssOverride:!0})}const Z=n.memo(ee);function ee(){const{data:s,status:r}=G(),o=I(a=>a.setPermissions),t=n.use(M);n.useEffect(()=>{var a,l,d;if(t){const u=((a=t.options)==null?void 0:a.write)==="full";o({canChangeMode:((l=t.options)==null?void 0:l.write)!=="-",canCreateEntries:u,canEditEntries:u,canFlag:u||!!((d=t.options)!=null&&d.write.includes("flag")),canShare:!1})}else o({canChangeMode:!0,canCreateEntries:!0,canEditEntries:!0,canFlag:!0,canShare:O==="rw"})},[t,o]);const[i]=b({key:t?`${t.alias}${p.cuesheetMode}`:p.cuesheetMode,defaultValue:t?m.Run:m.Edit}),c=n.useMemo(()=>W(s,i,t),[s,i,t]),x=!s||r==="pending";return e.jsx(_,{columns:c,children:x?e.jsx(V,{text:"Loading..."}):e.jsx(k,{columns:c,cuesheetMode:i})})}const se="_tableWrapper_h9gr1_17",te={tableWrapper:se};function re(){const[s,r]=j(),o=A();$("Cuesheet");const t=P();return e.jsxs(D,{actions:o,children:[e.jsx(T,{isOpen:s,onClose:r.close}),e.jsx(F,{}),e.jsxs("div",{className:te.tableWrapper,"data-testid":"cuesheet",children:[e.jsx(K,{children:!t&&e.jsx(S,{"aria-label":"Toggle navigation",variant:"subtle-white",size:"xlarge",onClick:r.open,children:e.jsx(v,{})})}),e.jsx(Y,{}),e.jsx(Z,{})]})]})}function _e(){return e.jsx(w,{permission:"operator",children:e.jsx(re,{})})}export{_e as default};
2
+ //# sourceMappingURL=ProtectedCuesheet-C7AqD2dy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProtectedCuesheet-D19INqhI.js","sources":["../../src/common/hooks/useIsMobileScreen.ts","../../src/features/overview/CuesheetOverview.tsx","../../src/views/cuesheet/cuesheet-progress/CuesheetProgress.tsx","../../src/views/cuesheet/CuesheetTableWrapper.tsx","../../src/views/cuesheet/CuesheetPage.tsx","../../src/views/cuesheet/ProtectedCuesheet.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useViewportSize } from '@mantine/hooks';\n\nexport function useIsMobileScreen(): boolean {\n const { width } = useViewportSize();\n\n return useMemo(() => width < 800, [width]);\n}\n","import { memo, PropsWithChildren } from 'react';\n\nimport { useIsMobileScreen } from '../../common/hooks/useIsMobileScreen';\n\nimport {\n ClockOverview,\n MetadataTimes,\n OffsetOverview,\n StartTimesRuntime,\n TimerOverview,\n} from './composite/TimeElements';\nimport TitleOverview from './composite/TitleOverview';\nimport { OverviewWrapper } from './OverviewWrapper';\n\nexport default memo(CuesheetOverview);\nfunction CuesheetOverview({ children }: PropsWithChildren) {\n const isMobileScreen = useIsMobileScreen();\n\n if (isMobileScreen) {\n return <CuesheetMobile>{children}</CuesheetMobile>;\n }\n return <CuesheetDesktop>{children}</CuesheetDesktop>;\n}\n\nfunction CuesheetMobile({ children }: PropsWithChildren) {\n return (\n <OverviewWrapper navElements={children}>\n <TimerOverview />\n <OffsetOverview />\n </OverviewWrapper>\n );\n}\n\nfunction CuesheetDesktop({ children }: PropsWithChildren) {\n return (\n <OverviewWrapper navElements={children}>\n <TitleOverview />\n <StartTimesRuntime shouldFormat />\n <TimerOverview />\n <OffsetOverview />\n <MetadataTimes />\n <ClockOverview shouldFormat />\n </OverviewWrapper>\n );\n}\n","import MultiPartProgressBar from '../../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport { useProgressData } from '../../../common/hooks/useSocket';\nimport useViewSettings from '../../../common/hooks-query/useViewSettings';\n\nimport styles from './CuesheetProgress.module.scss';\n\nexport default function CuesheetProgress() {\n const { data } = useViewSettings();\n const { current, duration, timeWarning, timeDanger } = useProgressData();\n\n return (\n <MultiPartProgressBar\n now={current}\n complete={duration}\n normalColor={data.normalColor}\n warning={timeWarning}\n warningColor={data.warningColor}\n danger={timeDanger}\n dangerColor={data.dangerColor}\n className={styles.progressOverride}\n ignoreCssOverride\n />\n );\n}\n","import { memo, use, useEffect, useMemo } from 'react';\nimport { useSessionStorage } from '@mantine/hooks';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport { sessionScope } from '../../externals';\nimport { AppMode, sessionKeys } from '../../ontimeConfig';\n\nimport CuesheetDnd from './cuesheet-dnd/CuesheetDnd';\nimport { makeCuesheetColumns } from './cuesheet-table/cuesheet-table-elements/cuesheetColsFactory';\nimport CuesheetTable from './cuesheet-table/CuesheetTable';\nimport { useCuesheetPermissions } from './useTablePermissions';\n\nexport default memo(CuesheetTableWrapper);\nfunction CuesheetTableWrapper() {\n const { data: customFields, status: customFieldStatus } = useCustomFields();\n const setPermissions = useCuesheetPermissions((state) => state.setPermissions);\n const preset = use(PresetContext);\n\n // set permissions based on preset\n useEffect(() => {\n if (preset) {\n const fullWrite = preset.options?.write === 'full';\n setPermissions({\n canChangeMode: preset.options?.write !== '-',\n canCreateEntries: fullWrite,\n canEditEntries: fullWrite,\n canFlag: fullWrite || Boolean(preset.options?.write.includes('flag')),\n canShare: false, // TODO: should be sessionScope === 'rw' when we have granular scopes\n });\n } else {\n setPermissions({\n canChangeMode: true,\n canCreateEntries: true,\n canEditEntries: true,\n canFlag: true,\n canShare: sessionScope === 'rw',\n });\n }\n }, [preset, setPermissions]);\n\n const [cuesheetMode] = useSessionStorage({\n key: preset ? `${preset.alias}${sessionKeys.cuesheetMode}` : sessionKeys.cuesheetMode,\n defaultValue: preset ? AppMode.Run : AppMode.Edit,\n });\n\n const columns = useMemo(\n () => makeCuesheetColumns(customFields, cuesheetMode, preset),\n [customFields, cuesheetMode, preset],\n );\n\n const isLoading = !customFields || customFieldStatus === 'pending';\n\n return (\n <CuesheetDnd columns={columns}>\n {isLoading ? <EmptyPage text='Loading...' /> : <CuesheetTable columns={columns} cuesheetMode={cuesheetMode} />}\n </CuesheetDnd>\n );\n}\n","import { IoApps } from 'react-icons/io5';\nimport { useDisclosure } from '@mantine/hooks';\n\nimport IconButton from '../../common/components/buttons/IconButton';\nimport NavigationMenu from '../../common/components/navigation-menu/NavigationMenu';\nimport { EntryActionsProvider } from '../../common/context/EntryActionsContext';\nimport { useEntryActions } from '../../common/hooks/useEntryAction';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { getIsNavigationLocked } from '../../externals';\nimport CuesheetOverview from '../../features/overview/CuesheetOverview';\n\nimport EntryEditModal from './cuesheet-edit-modal/EntryEditModal';\nimport CuesheetProgress from './cuesheet-progress/CuesheetProgress';\nimport CuesheetTableWrapper from './CuesheetTableWrapper';\n\nimport styles from './CuesheetPage.module.scss';\n\nexport default function CuesheetPage() {\n const [isMenuOpen, menuHandler] = useDisclosure();\n const entryActions = useEntryActions();\n\n useWindowTitle('Cuesheet');\n\n const isLocked = getIsNavigationLocked();\n\n return (\n <EntryActionsProvider actions={entryActions}>\n <NavigationMenu isOpen={isMenuOpen} onClose={menuHandler.close} />\n <EntryEditModal />\n <div className={styles.tableWrapper} data-testid='cuesheet'>\n <CuesheetOverview>\n {!isLocked && (\n <IconButton aria-label='Toggle navigation' variant='subtle-white' size='xlarge' onClick={menuHandler.open}>\n <IoApps />\n </IconButton>\n )}\n </CuesheetOverview>\n <CuesheetProgress />\n <CuesheetTableWrapper />\n </div>\n </EntryActionsProvider>\n );\n}\n","import ProtectRoute from '../../common/components/protect-route/ProtectRoute';\n\nimport CuesheetPage from './CuesheetPage';\n\nexport default function ProtectedCuesheet() {\n return (\n <ProtectRoute permission='operator'>\n <CuesheetPage />\n </ProtectRoute>\n );\n}\n"],"names":["useIsMobileScreen","width","useViewportSize","useMemo","memo","CuesheetOverview","children","jsx","CuesheetMobile","CuesheetDesktop","jsxs","OverviewWrapper","TimerOverview","OffsetOverview","TitleOverview","StartTimesRuntime","MetadataTimes","ClockOverview","CuesheetProgress","data","useViewSettings","current","duration","timeWarning","timeDanger","useProgressData","MultiPartProgressBar","normalColor","warningColor","dangerColor","styles","progressOverride","CuesheetTableWrapper","customFields","status","customFieldStatus","useCustomFields","setPermissions","useCuesheetPermissions","state","preset","use","PresetContext","useEffect","fullWrite","options","write","canChangeMode","canCreateEntries","canEditEntries","canFlag","Boolean","includes","canShare","sessionScope","cuesheetMode","useSessionStorage","key","alias","sessionKeys","defaultValue","AppMode","Run","Edit","columns","makeCuesheetColumns","isLoading","CuesheetDnd","EmptyPage","CuesheetTable","CuesheetPage","isMenuOpen","menuHandler","useDisclosure","entryActions","useEntryActions","useWindowTitle","isLocked","getIsNavigationLocked","EntryActionsProvider","NavigationMenu","close","EntryEditModal","tableWrapper","IconButton","open","IoApps","ProtectedCuesheet","ProtectRoute"],"mappings":"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"}
1
+ {"version":3,"file":"ProtectedCuesheet-C7AqD2dy.js","sources":["../../src/common/hooks/useIsMobileScreen.ts","../../src/features/overview/CuesheetOverview.tsx","../../src/views/cuesheet/cuesheet-progress/CuesheetProgress.tsx","../../src/views/cuesheet/CuesheetTableWrapper.tsx","../../src/views/cuesheet/CuesheetPage.tsx","../../src/views/cuesheet/ProtectedCuesheet.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useViewportSize } from '@mantine/hooks';\n\nexport function useIsMobileScreen(): boolean {\n const { width } = useViewportSize();\n\n return useMemo(() => width < 800, [width]);\n}\n","import { memo, PropsWithChildren } from 'react';\n\nimport { useIsMobileScreen } from '../../common/hooks/useIsMobileScreen';\n\nimport {\n ClockOverview,\n MetadataTimes,\n OffsetOverview,\n StartTimesRuntime,\n TimerOverview,\n} from './composite/TimeElements';\nimport TitleOverview from './composite/TitleOverview';\nimport { OverviewWrapper } from './OverviewWrapper';\n\nexport default memo(CuesheetOverview);\nfunction CuesheetOverview({ children }: PropsWithChildren) {\n const isMobileScreen = useIsMobileScreen();\n\n if (isMobileScreen) {\n return <CuesheetMobile>{children}</CuesheetMobile>;\n }\n return <CuesheetDesktop>{children}</CuesheetDesktop>;\n}\n\nfunction CuesheetMobile({ children }: PropsWithChildren) {\n return (\n <OverviewWrapper navElements={children}>\n <TimerOverview />\n <OffsetOverview />\n </OverviewWrapper>\n );\n}\n\nfunction CuesheetDesktop({ children }: PropsWithChildren) {\n return (\n <OverviewWrapper navElements={children}>\n <TitleOverview />\n <StartTimesRuntime shouldFormat />\n <TimerOverview />\n <OffsetOverview />\n <MetadataTimes />\n <ClockOverview shouldFormat />\n </OverviewWrapper>\n );\n}\n","import MultiPartProgressBar from '../../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport { useProgressData } from '../../../common/hooks/useSocket';\nimport useViewSettings from '../../../common/hooks-query/useViewSettings';\n\nimport styles from './CuesheetProgress.module.scss';\n\nexport default function CuesheetProgress() {\n const { data } = useViewSettings();\n const { current, duration, timeWarning, timeDanger } = useProgressData();\n\n return (\n <MultiPartProgressBar\n now={current}\n complete={duration}\n normalColor={data.normalColor}\n warning={timeWarning}\n warningColor={data.warningColor}\n danger={timeDanger}\n dangerColor={data.dangerColor}\n className={styles.progressOverride}\n ignoreCssOverride\n />\n );\n}\n","import { memo, use, useEffect, useMemo } from 'react';\nimport { useSessionStorage } from '@mantine/hooks';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport { sessionScope } from '../../externals';\nimport { AppMode, sessionKeys } from '../../ontimeConfig';\n\nimport CuesheetDnd from './cuesheet-dnd/CuesheetDnd';\nimport { makeCuesheetColumns } from './cuesheet-table/cuesheet-table-elements/cuesheetColsFactory';\nimport CuesheetTable from './cuesheet-table/CuesheetTable';\nimport { useCuesheetPermissions } from './useTablePermissions';\n\nexport default memo(CuesheetTableWrapper);\nfunction CuesheetTableWrapper() {\n const { data: customFields, status: customFieldStatus } = useCustomFields();\n const setPermissions = useCuesheetPermissions((state) => state.setPermissions);\n const preset = use(PresetContext);\n\n // set permissions based on preset\n useEffect(() => {\n if (preset) {\n const fullWrite = preset.options?.write === 'full';\n setPermissions({\n canChangeMode: preset.options?.write !== '-',\n canCreateEntries: fullWrite,\n canEditEntries: fullWrite,\n canFlag: fullWrite || Boolean(preset.options?.write.includes('flag')),\n canShare: false, // TODO: should be sessionScope === 'rw' when we have granular scopes\n });\n } else {\n setPermissions({\n canChangeMode: true,\n canCreateEntries: true,\n canEditEntries: true,\n canFlag: true,\n canShare: sessionScope === 'rw',\n });\n }\n }, [preset, setPermissions]);\n\n const [cuesheetMode] = useSessionStorage({\n key: preset ? `${preset.alias}${sessionKeys.cuesheetMode}` : sessionKeys.cuesheetMode,\n defaultValue: preset ? AppMode.Run : AppMode.Edit,\n });\n\n const columns = useMemo(\n () => makeCuesheetColumns(customFields, cuesheetMode, preset),\n [customFields, cuesheetMode, preset],\n );\n\n const isLoading = !customFields || customFieldStatus === 'pending';\n\n return (\n <CuesheetDnd columns={columns}>\n {isLoading ? <EmptyPage text='Loading...' /> : <CuesheetTable columns={columns} cuesheetMode={cuesheetMode} />}\n </CuesheetDnd>\n );\n}\n","import { IoApps } from 'react-icons/io5';\nimport { useDisclosure } from '@mantine/hooks';\n\nimport IconButton from '../../common/components/buttons/IconButton';\nimport NavigationMenu from '../../common/components/navigation-menu/NavigationMenu';\nimport { EntryActionsProvider } from '../../common/context/EntryActionsContext';\nimport { useEntryActions } from '../../common/hooks/useEntryAction';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { getIsNavigationLocked } from '../../externals';\nimport CuesheetOverview from '../../features/overview/CuesheetOverview';\n\nimport EntryEditModal from './cuesheet-edit-modal/EntryEditModal';\nimport CuesheetProgress from './cuesheet-progress/CuesheetProgress';\nimport CuesheetTableWrapper from './CuesheetTableWrapper';\n\nimport styles from './CuesheetPage.module.scss';\n\nexport default function CuesheetPage() {\n const [isMenuOpen, menuHandler] = useDisclosure();\n const entryActions = useEntryActions();\n\n useWindowTitle('Cuesheet');\n\n const isLocked = getIsNavigationLocked();\n\n return (\n <EntryActionsProvider actions={entryActions}>\n <NavigationMenu isOpen={isMenuOpen} onClose={menuHandler.close} />\n <EntryEditModal />\n <div className={styles.tableWrapper} data-testid='cuesheet'>\n <CuesheetOverview>\n {!isLocked && (\n <IconButton aria-label='Toggle navigation' variant='subtle-white' size='xlarge' onClick={menuHandler.open}>\n <IoApps />\n </IconButton>\n )}\n </CuesheetOverview>\n <CuesheetProgress />\n <CuesheetTableWrapper />\n </div>\n </EntryActionsProvider>\n );\n}\n","import ProtectRoute from '../../common/components/protect-route/ProtectRoute';\n\nimport CuesheetPage from './CuesheetPage';\n\nexport default function ProtectedCuesheet() {\n return (\n <ProtectRoute permission='operator'>\n <CuesheetPage />\n </ProtectRoute>\n );\n}\n"],"names":["useIsMobileScreen","width","useViewportSize","useMemo","memo","CuesheetOverview","children","jsx","CuesheetMobile","CuesheetDesktop","jsxs","OverviewWrapper","TimerOverview","OffsetOverview","TitleOverview","StartTimesRuntime","MetadataTimes","ClockOverview","CuesheetProgress","data","useViewSettings","current","duration","timeWarning","timeDanger","useProgressData","MultiPartProgressBar","normalColor","warningColor","dangerColor","styles","progressOverride","CuesheetTableWrapper","customFields","status","customFieldStatus","useCustomFields","setPermissions","useCuesheetPermissions","state","preset","use","PresetContext","useEffect","fullWrite","options","write","canChangeMode","canCreateEntries","canEditEntries","canFlag","Boolean","includes","canShare","sessionScope","cuesheetMode","useSessionStorage","key","alias","sessionKeys","defaultValue","AppMode","Run","Edit","columns","makeCuesheetColumns","isLoading","CuesheetDnd","EmptyPage","CuesheetTable","CuesheetPage","isMenuOpen","menuHandler","useDisclosure","entryActions","useEntryActions","useWindowTitle","isLocked","getIsNavigationLocked","EntryActionsProvider","NavigationMenu","close","EntryEditModal","tableWrapper","IconButton","open","IoApps","ProtectedCuesheet","ProtectRoute"],"mappings":"0lDAGO,SAASA,GAA6B,CACrC,KAAA,CAAEC,MAAAA,GAAUC,EAAgB,EAElC,OAAOC,UAAQ,IAAMF,EAAQ,IAAK,CAACA,CAAK,CAAC,CAC3C,CCOA,MAAeG,EAAAA,EAAAA,KAAKC,CAAgB,EACpC,SAASA,EAAiB,CAAEC,SAAAA,CAA4B,EAAG,CAGzD,OAFuBN,EAAkB,EAGhCO,MAACC,GAAgBF,SAAAA,EAAS,EAE5BC,MAACE,GAAiBH,SAAAA,EAAS,CACpC,CAEA,SAASE,EAAe,CAAEF,SAAAA,CAA4B,EAAG,CAErD,OAAAI,EAAA,KAACC,EAAgB,CAAA,YAAaL,EAC5B,SAAA,CAAAC,EAAA,IAACK,EAAa,EAAA,QACbC,EAAc,CAAA,CAAA,CAAA,EACjB,CAEJ,CAEA,SAASJ,EAAgB,CAAEH,SAAAA,CAA4B,EAAG,CAEtD,OAAAI,EAAA,KAACC,EAAgB,CAAA,YAAaL,EAC5B,SAAA,CAAAC,EAAA,IAACO,EAAa,EAAA,EACdP,EAAAA,IAACQ,EAAkB,CAAA,aAAY,EAAA,CAAA,QAC9BH,EAAa,EAAA,QACbC,EAAc,EAAA,QACdG,EAAa,EAAA,EACdT,EAAAA,IAACU,EAAc,CAAA,aAAY,EAAA,CAAA,CAAA,EAC7B,CAEJ,6DCtCA,SAAwBC,GAAmB,CACnC,KAAA,CAAEC,KAAAA,GAASC,EAAgB,EAC3B,CAAEC,QAAAA,EAASC,SAAAA,EAAUC,YAAAA,EAAaC,WAAAA,GAAeC,EAAgB,EAGrE,OAAAlB,MAACmB,GACC,IAAKL,EACL,SAAUC,EACV,YAAaH,EAAKQ,YAClB,QAASJ,EACT,aAAcJ,EAAKS,aACnB,OAAQJ,EACR,YAAaL,EAAKU,YAClB,UAAWC,EAAOC,iBAClB,kBAAiB,EACjB,CAAA,CAEN,CCTA,MAAe3B,EAAAA,EAAAA,KAAK4B,EAAoB,EACxC,SAASA,IAAuB,CACxB,KAAA,CAAEb,KAAMc,EAAcC,OAAQC,GAAsBC,EAAgB,EACpEC,EAAiBC,EAAkCC,GAAAA,EAAMF,cAAc,EACvEG,EAASC,MAAIC,CAAa,EAGhCC,EAAAA,UAAU,IAAM,WACd,GAAIH,EAAQ,CACJI,MAAAA,IAAYJ,EAAAA,EAAOK,UAAPL,YAAAA,EAAgBM,SAAU,OAC7BT,EAAA,CACbU,gBAAeP,EAAAA,EAAOK,UAAPL,YAAAA,EAAgBM,SAAU,IACzCE,iBAAkBJ,EAClBK,eAAgBL,EAChBM,QAASN,GAAaO,IAAQX,EAAAA,EAAOK,UAAPL,MAAAA,EAAgBM,MAAMM,SAAS,SAC7DC,SAAU,EAAA,CACX,CAAA,MAEchB,EAAA,CACbU,cAAe,GACfC,iBAAkB,GAClBC,eAAgB,GAChBC,QAAS,GACTG,SAAUC,IAAiB,IAAA,CAC5B,CACH,EACC,CAACd,EAAQH,CAAc,CAAC,EAErB,KAAA,CAACkB,CAAY,EAAIC,EAAkB,CACvCC,IAAKjB,EAAS,GAAGA,EAAOkB,KAAK,GAAGC,EAAYJ,YAAY,GAAKI,EAAYJ,aACzEK,aAAcpB,EAASqB,EAAQC,IAAMD,EAAQE,IAAAA,CAC9C,EAEKC,EAAU7D,EAAAA,QACd,IAAM8D,EAAoBhC,EAAcsB,EAAcf,CAAM,EAC5D,CAACP,EAAcsB,EAAcf,CAAM,CACrC,EAEM0B,EAAY,CAACjC,GAAgBE,IAAsB,UAEzD,OACG5B,EAAAA,IAAA4D,EAAA,CAAY,QAAAH,EACVE,SAAAA,EAAa3D,EAAA,IAAA6D,EAAA,CAAU,KAAK,YAAA,CAAY,EAAM7D,MAAC8D,EAAc,CAAA,QAAAL,EAAkB,aAAAT,CAA8B,CAAA,EAChH,CAEJ,wDC1CA,SAAwBe,IAAe,CACrC,KAAM,CAACC,EAAYC,CAAW,EAAIC,EAAc,EAC1CC,EAAeC,EAAgB,EAErCC,EAAe,UAAU,EAEzB,MAAMC,EAAWC,EAAsB,EAGrC,OAAApE,EAAA,KAACqE,EAAqB,CAAA,QAASL,EAC7B,SAAA,CAAAnE,EAAA,IAACyE,EAAe,CAAA,OAAQT,EAAY,QAASC,EAAYS,MAAM,QAC9DC,EAAc,EAAA,SACd,MAAI,CAAA,UAAWpD,GAAOqD,aAAc,cAAY,WAC/C,SAAA,CAAA5E,EAAAA,IAACF,GACE,SAACwE,CAAAA,GACCtE,MAAA6E,EAAA,CAAW,aAAW,oBAAoB,QAAQ,eAAe,KAAK,SAAS,QAASZ,EAAYa,KACnG,SAAC9E,EAAA,IAAA+E,EAAA,CAAA,CAAM,CACT,CAAA,EAEJ,QACCpE,EAAgB,EAAA,QAChBc,EAAoB,CAAA,CAAA,CAAA,CACvB,CAAA,CAAA,EACF,CAEJ,CCtCA,SAAwBuD,IAAoB,CAC1C,aACGC,EAAa,CAAA,WAAW,WACvB,SAAAjF,MAAC+D,IAAY,CAAA,EACf,CAEJ"}