@getontime/cli 4.2.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/client/assets/Backstage-WSlbFC9X.js +2 -0
  2. package/client/assets/Backstage-WSlbFC9X.js.br +0 -0
  3. package/client/assets/Backstage-WSlbFC9X.js.gz +0 -0
  4. package/client/assets/{Backstage-DG-hwPI3.js.map → Backstage-WSlbFC9X.js.map} +1 -1
  5. package/client/assets/{Countdown-C8LGl1pp.js → Countdown-B32qlxYT.js} +2 -2
  6. package/client/assets/Countdown-B32qlxYT.js.br +0 -0
  7. package/client/assets/Countdown-B32qlxYT.js.gz +0 -0
  8. package/client/assets/{Countdown-C8LGl1pp.js.map → Countdown-B32qlxYT.js.map} +1 -1
  9. package/client/assets/{CustomTranslationModal-CJ9-aDjl.js → CustomTranslationModal-CtBvokyt.js} +2 -2
  10. package/client/assets/CustomTranslationModal-CtBvokyt.js.br +0 -0
  11. package/client/assets/CustomTranslationModal-CtBvokyt.js.gz +0 -0
  12. package/client/assets/{CustomTranslationModal-CJ9-aDjl.js.map → CustomTranslationModal-CtBvokyt.js.map} +1 -1
  13. package/client/assets/DelayIndicator-BFZFpsY5.js +2 -0
  14. package/client/assets/DelayIndicator-BFZFpsY5.js.br +0 -0
  15. package/client/assets/DelayIndicator-BFZFpsY5.js.gz +0 -0
  16. package/client/assets/{DelayIndicator-F4GdgsGh.js.map → DelayIndicator-BFZFpsY5.js.map} +1 -1
  17. package/client/assets/EditorFeatureWrapper-DaMxgBMP.js +2 -0
  18. package/client/assets/EditorFeatureWrapper-DaMxgBMP.js.br +0 -0
  19. package/client/assets/EditorFeatureWrapper-DaMxgBMP.js.gz +0 -0
  20. package/client/assets/{EditorFeatureWrapper-eIpSr_UK.js.map → EditorFeatureWrapper-DaMxgBMP.js.map} +1 -1
  21. package/client/assets/EditorUtils-DoaSwWiz.js +2 -0
  22. package/client/assets/EditorUtils-DoaSwWiz.js.br +0 -0
  23. package/client/assets/EditorUtils-DoaSwWiz.js.gz +0 -0
  24. package/client/assets/{EditorUtils-Bd3J5Dvf.js.map → EditorUtils-DoaSwWiz.js.map} +1 -1
  25. package/client/assets/Empty-D1UteOYj.js +2 -0
  26. package/client/assets/Empty-D1UteOYj.js.br +0 -0
  27. package/client/assets/Empty-D1UteOYj.js.gz +0 -0
  28. package/client/assets/{Empty-C0IdV_kI.js.map → Empty-D1UteOYj.js.map} +1 -1
  29. package/client/assets/EmptyPage-DeRjpRKZ.js +2 -0
  30. package/client/assets/EmptyPage-DeRjpRKZ.js.br +0 -0
  31. package/client/assets/EmptyPage-DeRjpRKZ.js.gz +0 -0
  32. package/client/assets/{EmptyPage-Ct3d0DqJ.js.map → EmptyPage-DeRjpRKZ.js.map} +1 -1
  33. package/client/assets/FollowButton-FodezDem.js +2 -0
  34. package/client/assets/FollowButton-FodezDem.js.br +0 -0
  35. package/client/assets/FollowButton-FodezDem.js.gz +0 -0
  36. package/client/assets/{FollowButton-BG-ycRWu.js.map → FollowButton-FodezDem.js.map} +1 -1
  37. package/client/assets/{MessageControlExport-X-4dl9QT.js → MessageControlExport-CFGgiwk_.js} +3 -3
  38. package/client/assets/MessageControlExport-CFGgiwk_.js.br +0 -0
  39. package/client/assets/MessageControlExport-CFGgiwk_.js.gz +0 -0
  40. package/client/assets/MessageControlExport-CFGgiwk_.js.map +1 -0
  41. package/client/assets/{MilestoneEditor-rgBQSXVU.js → MilestoneEditor-B5BdJ5ju.js} +2 -2
  42. package/client/assets/MilestoneEditor-B5BdJ5ju.js.br +0 -0
  43. package/client/assets/MilestoneEditor-B5BdJ5ju.js.gz +0 -0
  44. package/client/assets/{MilestoneEditor-rgBQSXVU.js.map → MilestoneEditor-B5BdJ5ju.js.map} +1 -1
  45. package/client/assets/Modal-B8ZZbVMg.js +2 -0
  46. package/client/assets/Modal-B8ZZbVMg.js.br +0 -0
  47. package/client/assets/Modal-B8ZZbVMg.js.gz +0 -0
  48. package/client/assets/{Modal-Bn1bZkwb.js.map → Modal-B8ZZbVMg.js.map} +1 -1
  49. package/client/assets/{MultiPartProgressBar-Cmw-gisu.js → MultiPartProgressBar-BKHk19Hb.js} +2 -2
  50. package/client/assets/MultiPartProgressBar-BKHk19Hb.js.br +0 -0
  51. package/client/assets/MultiPartProgressBar-BKHk19Hb.js.gz +0 -0
  52. package/client/assets/{MultiPartProgressBar-Cmw-gisu.js.map → MultiPartProgressBar-BKHk19Hb.js.map} +1 -1
  53. package/client/assets/{OperatorExport-CJd8jmY4.js → OperatorExport-DQM14DsN.js} +2 -2
  54. package/client/assets/OperatorExport-DQM14DsN.js.br +0 -0
  55. package/client/assets/OperatorExport-DQM14DsN.js.gz +0 -0
  56. package/client/assets/{OperatorExport-CJd8jmY4.js.map → OperatorExport-DQM14DsN.js.map} +1 -1
  57. package/client/assets/{OverviewWrapper-1Vj3_ojX.js → OverviewWrapper-D1hUkrRi.js} +2 -2
  58. package/client/assets/OverviewWrapper-D1hUkrRi.js.br +0 -0
  59. package/client/assets/OverviewWrapper-D1hUkrRi.js.gz +0 -0
  60. package/client/assets/{OverviewWrapper-1Vj3_ojX.js.map → OverviewWrapper-D1hUkrRi.js.map} +1 -1
  61. package/client/assets/PipHost-B9-cZ8Lm.js +2 -0
  62. package/client/assets/PipHost-B9-cZ8Lm.js.br +0 -0
  63. package/client/assets/PipHost-B9-cZ8Lm.js.gz +0 -0
  64. package/client/assets/PipHost-B9-cZ8Lm.js.map +1 -0
  65. package/client/assets/PipHost-DEhjTbGT.css +1 -0
  66. package/client/assets/PipHost-DEhjTbGT.css.br +0 -0
  67. package/client/assets/PipHost-DEhjTbGT.css.gz +0 -0
  68. package/client/assets/{ProjectInfo-BduQgjcz.js → ProjectInfo-Dp1TZyBd.js} +2 -2
  69. package/client/assets/ProjectInfo-Dp1TZyBd.js.br +0 -0
  70. package/client/assets/ProjectInfo-Dp1TZyBd.js.gz +0 -0
  71. package/client/assets/{ProjectInfo-BduQgjcz.js.map → ProjectInfo-Dp1TZyBd.js.map} +1 -1
  72. package/client/assets/ProtectRoute-EejQ5o_H.js +2 -0
  73. package/client/assets/ProtectRoute-EejQ5o_H.js.br +0 -0
  74. package/client/assets/ProtectRoute-EejQ5o_H.js.gz +0 -0
  75. package/client/assets/{ProtectRoute-Ci_AIozP.js.map → ProtectRoute-EejQ5o_H.js.map} +1 -1
  76. package/client/assets/{ProtectedCuesheet-D_zdkwM-.js → ProtectedCuesheet-DvYSgueA.js} +2 -2
  77. package/client/assets/ProtectedCuesheet-DvYSgueA.js.br +0 -0
  78. package/client/assets/ProtectedCuesheet-DvYSgueA.js.gz +0 -0
  79. package/client/assets/{ProtectedCuesheet-D_zdkwM-.js.map → ProtectedCuesheet-DvYSgueA.js.map} +1 -1
  80. package/client/assets/{ProtectedEditor-CNL2ig79.js → ProtectedEditor-B0l0X3QP.js} +3 -3
  81. package/client/assets/ProtectedEditor-B0l0X3QP.js.br +0 -0
  82. package/client/assets/ProtectedEditor-B0l0X3QP.js.gz +0 -0
  83. package/client/assets/ProtectedEditor-B0l0X3QP.js.map +1 -0
  84. package/client/assets/RundownEntry-CwiStTnR.js +2 -0
  85. package/client/assets/RundownEntry-CwiStTnR.js.br +0 -0
  86. package/client/assets/RundownEntry-CwiStTnR.js.gz +0 -0
  87. package/client/assets/RundownEntry-CwiStTnR.js.map +1 -0
  88. package/client/assets/RundownExport-CCaOfHIr.js +3 -0
  89. package/client/assets/RundownExport-CCaOfHIr.js.br +0 -0
  90. package/client/assets/RundownExport-CCaOfHIr.js.gz +0 -0
  91. package/client/assets/RundownExport-CCaOfHIr.js.map +1 -0
  92. package/client/assets/Select-cHK8JrMG.js +2 -0
  93. package/client/assets/Select-cHK8JrMG.js.br +0 -0
  94. package/client/assets/Select-cHK8JrMG.js.gz +0 -0
  95. package/client/assets/{Select-B5xNi_tM.js.map → Select-cHK8JrMG.js.map} +1 -1
  96. package/client/assets/{Studio-D4hRKhJ1.js → Studio-BzwFDYzk.js} +2 -2
  97. package/client/assets/Studio-BzwFDYzk.js.br +0 -0
  98. package/client/assets/Studio-BzwFDYzk.js.gz +0 -0
  99. package/client/assets/{Studio-D4hRKhJ1.js.map → Studio-BzwFDYzk.js.map} +1 -1
  100. package/client/assets/StyleEditor-RZvkKHdf.js +2 -0
  101. package/client/assets/StyleEditor-RZvkKHdf.js.br +0 -0
  102. package/client/assets/StyleEditor-RZvkKHdf.js.gz +0 -0
  103. package/client/assets/{StyleEditor-BvcE8dkA.js.map → StyleEditor-RZvkKHdf.js.map} +1 -1
  104. package/client/assets/SuperscriptPeriod-DaZq1rr6.js +2 -0
  105. package/client/assets/SuperscriptPeriod-DaZq1rr6.js.br +0 -0
  106. package/client/assets/SuperscriptPeriod-DaZq1rr6.js.gz +0 -0
  107. package/client/assets/{SuperscriptPeriod-BmHAoSBy.js.map → SuperscriptPeriod-DaZq1rr6.js.map} +1 -1
  108. package/client/assets/SuperscriptTime-Mc0ZGBMo.js +2 -0
  109. package/client/assets/SuperscriptTime-Mc0ZGBMo.js.br +0 -0
  110. package/client/assets/SuperscriptTime-Mc0ZGBMo.js.gz +0 -0
  111. package/client/assets/{SuperscriptTime-Nou92D8X.js.map → SuperscriptTime-Mc0ZGBMo.js.map} +1 -1
  112. package/client/assets/{TimeElements-XpRwBsaa.js → TimeElements-dIvFHgcd.js} +2 -2
  113. package/client/assets/TimeElements-dIvFHgcd.js.br +0 -0
  114. package/client/assets/TimeElements-dIvFHgcd.js.gz +0 -0
  115. package/client/assets/{TimeElements-XpRwBsaa.js.map → TimeElements-dIvFHgcd.js.map} +1 -1
  116. package/client/assets/TimeInput-Duzx40TC.js +2 -0
  117. package/client/assets/TimeInput-Duzx40TC.js.br +0 -0
  118. package/client/assets/TimeInput-Duzx40TC.js.gz +0 -0
  119. package/client/assets/{TimeInput-Bu_5GlHP.js.map → TimeInput-Duzx40TC.js.map} +1 -1
  120. package/client/assets/{TimelinePage-CQqUB1KT.js → TimelinePage-C-OHrCR8.js} +2 -2
  121. package/client/assets/TimelinePage-C-OHrCR8.js.br +0 -0
  122. package/client/assets/TimelinePage-C-OHrCR8.js.gz +0 -0
  123. package/client/assets/{TimelinePage-CQqUB1KT.js.map → TimelinePage-C-OHrCR8.js.map} +1 -1
  124. package/client/assets/Timer-CGqVtVEC.js +2 -0
  125. package/client/assets/Timer-CGqVtVEC.js.br +0 -0
  126. package/client/assets/Timer-CGqVtVEC.js.gz +0 -0
  127. package/client/assets/{Timer-CIr2L3gJ.js.map → Timer-CGqVtVEC.js.map} +1 -1
  128. package/client/assets/{Timer-B7nk3TMf.css → Timer-Jjolf5Ra.css} +1 -1
  129. package/client/assets/Timer-Jjolf5Ra.css.br +0 -0
  130. package/client/assets/Timer-Jjolf5Ra.css.gz +0 -0
  131. package/client/assets/{TimerControlExport-4a3Cd9x8.js → TimerControlExport-GJn4WWdH.js} +2 -2
  132. package/client/assets/TimerControlExport-GJn4WWdH.js.br +0 -0
  133. package/client/assets/TimerControlExport-GJn4WWdH.js.gz +0 -0
  134. package/client/assets/{TimerControlExport-4a3Cd9x8.js.map → TimerControlExport-GJn4WWdH.js.map} +1 -1
  135. package/client/assets/TitleCard-BqbrUnHO.js +2 -0
  136. package/client/assets/TitleCard-BqbrUnHO.js.br +0 -0
  137. package/client/assets/TitleCard-BqbrUnHO.js.gz +0 -0
  138. package/client/assets/{TitleCard-1U35ek0D.js.map → TitleCard-BqbrUnHO.js.map} +1 -1
  139. package/client/assets/Tooltip-BQBvaIZx.js +2 -0
  140. package/client/assets/Tooltip-BQBvaIZx.js.br +0 -0
  141. package/client/assets/Tooltip-BQBvaIZx.js.gz +0 -0
  142. package/client/assets/{Tooltip-B8y25e3n.js.map → Tooltip-BQBvaIZx.js.map} +1 -1
  143. package/client/assets/ViewLogo-BdL1hUV1.js +2 -0
  144. package/client/assets/ViewLogo-BdL1hUV1.js.br +0 -0
  145. package/client/assets/ViewLogo-BdL1hUV1.js.gz +0 -0
  146. package/client/assets/{ViewLogo-BHsV7Faa.js.map → ViewLogo-BdL1hUV1.js.map} +1 -1
  147. package/client/assets/{ViewParamsEditor-BMHXOv-K.js → ViewParamsEditor-CFedpp6w.js} +2 -2
  148. package/client/assets/ViewParamsEditor-CFedpp6w.js.br +0 -0
  149. package/client/assets/ViewParamsEditor-CFedpp6w.js.gz +0 -0
  150. package/client/assets/{ViewParamsEditor-BMHXOv-K.js.map → ViewParamsEditor-CFedpp6w.js.map} +1 -1
  151. package/client/assets/dateConfig-BU1RZfIK.js +2 -0
  152. package/client/assets/dateConfig-BU1RZfIK.js.br +0 -0
  153. package/client/assets/dateConfig-BU1RZfIK.js.gz +0 -0
  154. package/client/assets/dateConfig-BU1RZfIK.js.map +1 -0
  155. package/client/assets/editorSettings-BMt-7s8I.js +2 -0
  156. package/client/assets/editorSettings-BMt-7s8I.js.br +0 -0
  157. package/client/assets/editorSettings-BMt-7s8I.js.gz +0 -0
  158. package/client/assets/{editorSettings-DH9ca-nB.js.map → editorSettings-BMt-7s8I.js.map} +1 -1
  159. package/client/assets/{getProgress-DlrSzpnf.js → getProgress-sdxPEEPi.js} +2 -2
  160. package/client/assets/getProgress-sdxPEEPi.js.br +0 -0
  161. package/client/assets/getProgress-sdxPEEPi.js.gz +0 -0
  162. package/client/assets/{getProgress-DlrSzpnf.js.map → getProgress-sdxPEEPi.js.map} +1 -1
  163. package/client/assets/index-CoGiopcb.js +3 -0
  164. package/client/assets/index-CoGiopcb.js.br +0 -0
  165. package/client/assets/index-CoGiopcb.js.gz +0 -0
  166. package/client/assets/index-CoGiopcb.js.map +1 -0
  167. package/client/assets/{offset-CLG4o744.js → offset-BS90Rks2.js} +2 -2
  168. package/client/assets/offset-BS90Rks2.js.br +0 -0
  169. package/client/assets/offset-BS90Rks2.js.gz +0 -0
  170. package/client/assets/{offset-CLG4o744.js.map → offset-BS90Rks2.js.map} +1 -1
  171. package/client/assets/parseUserTime-DZJMcfuJ.js +2 -0
  172. package/client/assets/parseUserTime-DZJMcfuJ.js.br +0 -0
  173. package/client/assets/parseUserTime-DZJMcfuJ.js.gz +0 -0
  174. package/client/assets/{parseUserTime-Cp5iWS7y.js.map → parseUserTime-DZJMcfuJ.js.map} +1 -1
  175. package/client/assets/{playbackstate-B3BKJ8cT.js → playbackstate-CWexoP3a.js} +2 -2
  176. package/client/assets/playbackstate-CWexoP3a.js.br +0 -0
  177. package/client/assets/playbackstate-CWexoP3a.js.gz +0 -0
  178. package/client/assets/{playbackstate-B3BKJ8cT.js.map → playbackstate-CWexoP3a.js.map} +1 -1
  179. package/client/assets/{presentation.utils-B-wIv_a5.js → presentation.utils-Zo5hNQje.js} +2 -2
  180. package/client/assets/presentation.utils-Zo5hNQje.js.br +0 -0
  181. package/client/assets/presentation.utils-Zo5hNQje.js.gz +0 -0
  182. package/client/assets/{presentation.utils-B-wIv_a5.js.map → presentation.utils-Zo5hNQje.js.map} +1 -1
  183. package/client/assets/rundownUtils-Dl1x6NDv.js +2 -0
  184. package/client/assets/rundownUtils-Dl1x6NDv.js.br +0 -0
  185. package/client/assets/rundownUtils-Dl1x6NDv.js.gz +0 -0
  186. package/client/assets/{rundownUtils-DJKMt8Ih.js.map → rundownUtils-Dl1x6NDv.js.map} +1 -1
  187. package/client/assets/timer.utils-BnMyVO6Z.js +2 -0
  188. package/client/assets/timer.utils-BnMyVO6Z.js.br +0 -0
  189. package/client/assets/timer.utils-BnMyVO6Z.js.gz +0 -0
  190. package/client/assets/timer.utils-BnMyVO6Z.js.map +1 -0
  191. package/client/assets/useCustomFields-CcTb-GQM.js +2 -0
  192. package/client/assets/useCustomFields-CcTb-GQM.js.br +0 -0
  193. package/client/assets/useCustomFields-CcTb-GQM.js.gz +0 -0
  194. package/client/assets/{useCustomFields-BUJkzZvM.js.map → useCustomFields-CcTb-GQM.js.map} +1 -1
  195. package/client/assets/useFollowComponent-BjhV6Uv8.js +2 -0
  196. package/client/assets/useFollowComponent-BjhV6Uv8.js.br +0 -0
  197. package/client/assets/useFollowComponent-BjhV6Uv8.js.gz +0 -0
  198. package/client/assets/{useFollowComponent-Eyo4hWVG.js.map → useFollowComponent-BjhV6Uv8.js.map} +1 -1
  199. package/client/assets/{useProjectData-DGA6K2Zs.js → useProjectData-B5mjXsMj.js} +2 -2
  200. package/client/assets/useProjectData-B5mjXsMj.js.br +0 -0
  201. package/client/assets/useProjectData-B5mjXsMj.js.gz +0 -0
  202. package/client/assets/{useProjectData-DGA6K2Zs.js.map → useProjectData-B5mjXsMj.js.map} +1 -1
  203. package/client/assets/useReport-zMbyWwpn.js +2 -0
  204. package/client/assets/useReport-zMbyWwpn.js.br +0 -0
  205. package/client/assets/useReport-zMbyWwpn.js.gz +0 -0
  206. package/client/assets/{useReport-BUCsRa2T.js.map → useReport-zMbyWwpn.js.map} +1 -1
  207. package/client/assets/useRundown-CHsh5rnl.js +2 -0
  208. package/client/assets/useRundown-CHsh5rnl.js.br +0 -0
  209. package/client/assets/useRundown-CHsh5rnl.js.gz +0 -0
  210. package/client/assets/useRundown-CHsh5rnl.js.map +1 -0
  211. package/client/assets/useWindowTitle-mLKt65i7.js +2 -0
  212. package/client/assets/useWindowTitle-mLKt65i7.js.br +0 -0
  213. package/client/assets/useWindowTitle-mLKt65i7.js.gz +0 -0
  214. package/client/assets/{useWindowTitle-DU8NlxIu.js.map → useWindowTitle-mLKt65i7.js.map} +1 -1
  215. package/client/assets/{validateEvent-3adKsP1N.js → validateEvent-CUmvjN95.js} +2 -2
  216. package/client/assets/validateEvent-CUmvjN95.js.br +0 -0
  217. package/client/assets/validateEvent-CUmvjN95.js.gz +0 -0
  218. package/client/assets/{validateEvent-3adKsP1N.js.map → validateEvent-CUmvjN95.js.map} +1 -1
  219. package/client/assets/{vendor-BoH5HFNN.js → vendor-Cdwxo8bP.js} +21 -21
  220. package/client/assets/vendor-Cdwxo8bP.js.br +0 -0
  221. package/client/assets/vendor-Cdwxo8bP.js.gz +0 -0
  222. package/client/assets/{vendor-BoH5HFNN.js.map → vendor-Cdwxo8bP.js.map} +1 -1
  223. package/client/assets/{viewLoader.utils-BPOG1xso.js → viewLoader.utils-DuXjY5zb.js} +2 -2
  224. package/client/assets/viewLoader.utils-DuXjY5zb.js.br +0 -0
  225. package/client/assets/viewLoader.utils-DuXjY5zb.js.gz +0 -0
  226. package/client/assets/{viewLoader.utils-BPOG1xso.js.map → viewLoader.utils-DuXjY5zb.js.map} +1 -1
  227. package/client/assets/viewUtils-dKRKkb_F.js +2 -0
  228. package/client/assets/viewUtils-dKRKkb_F.js.br +0 -0
  229. package/client/assets/viewUtils-dKRKkb_F.js.gz +0 -0
  230. package/client/assets/viewUtils-dKRKkb_F.js.map +1 -0
  231. package/client/index.html +2 -2
  232. package/package.json +1 -1
  233. package/server/index.cjs +89 -89
  234. package/client/assets/Backstage-DG-hwPI3.js +0 -2
  235. package/client/assets/Backstage-DG-hwPI3.js.br +0 -0
  236. package/client/assets/Backstage-DG-hwPI3.js.gz +0 -0
  237. package/client/assets/Countdown-C8LGl1pp.js.br +0 -0
  238. package/client/assets/Countdown-C8LGl1pp.js.gz +0 -0
  239. package/client/assets/CustomTranslationModal-CJ9-aDjl.js.br +0 -0
  240. package/client/assets/CustomTranslationModal-CJ9-aDjl.js.gz +0 -0
  241. package/client/assets/DelayIndicator-F4GdgsGh.js +0 -2
  242. package/client/assets/DelayIndicator-F4GdgsGh.js.br +0 -0
  243. package/client/assets/DelayIndicator-F4GdgsGh.js.gz +0 -0
  244. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js +0 -2
  245. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js.br +0 -0
  246. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js.gz +0 -0
  247. package/client/assets/EditorUtils-Bd3J5Dvf.js +0 -2
  248. package/client/assets/EditorUtils-Bd3J5Dvf.js.br +0 -0
  249. package/client/assets/EditorUtils-Bd3J5Dvf.js.gz +0 -0
  250. package/client/assets/Empty-C0IdV_kI.js +0 -2
  251. package/client/assets/Empty-C0IdV_kI.js.br +0 -0
  252. package/client/assets/Empty-C0IdV_kI.js.gz +0 -0
  253. package/client/assets/EmptyPage-Ct3d0DqJ.js +0 -2
  254. package/client/assets/EmptyPage-Ct3d0DqJ.js.br +0 -0
  255. package/client/assets/EmptyPage-Ct3d0DqJ.js.gz +0 -0
  256. package/client/assets/FollowButton-BG-ycRWu.js +0 -2
  257. package/client/assets/FollowButton-BG-ycRWu.js.br +0 -0
  258. package/client/assets/FollowButton-BG-ycRWu.js.gz +0 -0
  259. package/client/assets/MessageControlExport-X-4dl9QT.js.br +0 -0
  260. package/client/assets/MessageControlExport-X-4dl9QT.js.gz +0 -0
  261. package/client/assets/MessageControlExport-X-4dl9QT.js.map +0 -1
  262. package/client/assets/MilestoneEditor-rgBQSXVU.js.br +0 -0
  263. package/client/assets/MilestoneEditor-rgBQSXVU.js.gz +0 -0
  264. package/client/assets/Modal-Bn1bZkwb.js +0 -2
  265. package/client/assets/Modal-Bn1bZkwb.js.br +0 -0
  266. package/client/assets/Modal-Bn1bZkwb.js.gz +0 -0
  267. package/client/assets/MultiPartProgressBar-Cmw-gisu.js.br +0 -0
  268. package/client/assets/MultiPartProgressBar-Cmw-gisu.js.gz +0 -0
  269. package/client/assets/OperatorExport-CJd8jmY4.js.br +0 -0
  270. package/client/assets/OperatorExport-CJd8jmY4.js.gz +0 -0
  271. package/client/assets/OverviewWrapper-1Vj3_ojX.js.br +0 -0
  272. package/client/assets/OverviewWrapper-1Vj3_ojX.js.gz +0 -0
  273. package/client/assets/PipHost-BUF7n-lT.css +0 -1
  274. package/client/assets/PipHost-BUF7n-lT.css.br +0 -0
  275. package/client/assets/PipHost-BUF7n-lT.css.gz +0 -0
  276. package/client/assets/PipHost-D7liNR4M.js +0 -2
  277. package/client/assets/PipHost-D7liNR4M.js.br +0 -0
  278. package/client/assets/PipHost-D7liNR4M.js.gz +0 -0
  279. package/client/assets/PipHost-D7liNR4M.js.map +0 -1
  280. package/client/assets/ProjectInfo-BduQgjcz.js.br +0 -0
  281. package/client/assets/ProjectInfo-BduQgjcz.js.gz +0 -0
  282. package/client/assets/ProtectRoute-Ci_AIozP.js +0 -2
  283. package/client/assets/ProtectRoute-Ci_AIozP.js.br +0 -0
  284. package/client/assets/ProtectRoute-Ci_AIozP.js.gz +0 -0
  285. package/client/assets/ProtectedCuesheet-D_zdkwM-.js.br +0 -0
  286. package/client/assets/ProtectedCuesheet-D_zdkwM-.js.gz +0 -0
  287. package/client/assets/ProtectedEditor-CNL2ig79.js.br +0 -0
  288. package/client/assets/ProtectedEditor-CNL2ig79.js.gz +0 -0
  289. package/client/assets/ProtectedEditor-CNL2ig79.js.map +0 -1
  290. package/client/assets/RundownEntry-Bs1ombtH.js +0 -2
  291. package/client/assets/RundownEntry-Bs1ombtH.js.br +0 -0
  292. package/client/assets/RundownEntry-Bs1ombtH.js.gz +0 -0
  293. package/client/assets/RundownEntry-Bs1ombtH.js.map +0 -1
  294. package/client/assets/RundownExport-BCT0ybxy.js +0 -3
  295. package/client/assets/RundownExport-BCT0ybxy.js.br +0 -0
  296. package/client/assets/RundownExport-BCT0ybxy.js.gz +0 -0
  297. package/client/assets/RundownExport-BCT0ybxy.js.map +0 -1
  298. package/client/assets/Select-B5xNi_tM.js +0 -2
  299. package/client/assets/Select-B5xNi_tM.js.br +0 -0
  300. package/client/assets/Select-B5xNi_tM.js.gz +0 -0
  301. package/client/assets/Studio-D4hRKhJ1.js.br +0 -0
  302. package/client/assets/Studio-D4hRKhJ1.js.gz +0 -0
  303. package/client/assets/StyleEditor-BvcE8dkA.js +0 -2
  304. package/client/assets/StyleEditor-BvcE8dkA.js.br +0 -3
  305. package/client/assets/StyleEditor-BvcE8dkA.js.gz +0 -0
  306. package/client/assets/SuperscriptPeriod-BmHAoSBy.js +0 -2
  307. package/client/assets/SuperscriptPeriod-BmHAoSBy.js.br +0 -0
  308. package/client/assets/SuperscriptPeriod-BmHAoSBy.js.gz +0 -0
  309. package/client/assets/SuperscriptTime-Nou92D8X.js +0 -2
  310. package/client/assets/SuperscriptTime-Nou92D8X.js.br +0 -0
  311. package/client/assets/SuperscriptTime-Nou92D8X.js.gz +0 -0
  312. package/client/assets/TimeElements-XpRwBsaa.js.br +0 -0
  313. package/client/assets/TimeElements-XpRwBsaa.js.gz +0 -0
  314. package/client/assets/TimeInput-Bu_5GlHP.js +0 -2
  315. package/client/assets/TimeInput-Bu_5GlHP.js.br +0 -0
  316. package/client/assets/TimeInput-Bu_5GlHP.js.gz +0 -0
  317. package/client/assets/TimelinePage-CQqUB1KT.js.br +0 -0
  318. package/client/assets/TimelinePage-CQqUB1KT.js.gz +0 -0
  319. package/client/assets/Timer-B7nk3TMf.css.br +0 -0
  320. package/client/assets/Timer-B7nk3TMf.css.gz +0 -0
  321. package/client/assets/Timer-CIr2L3gJ.js +0 -2
  322. package/client/assets/Timer-CIr2L3gJ.js.br +0 -0
  323. package/client/assets/Timer-CIr2L3gJ.js.gz +0 -0
  324. package/client/assets/TimerControlExport-4a3Cd9x8.js.br +0 -0
  325. package/client/assets/TimerControlExport-4a3Cd9x8.js.gz +0 -0
  326. package/client/assets/TitleCard-1U35ek0D.js +0 -2
  327. package/client/assets/TitleCard-1U35ek0D.js.br +0 -0
  328. package/client/assets/TitleCard-1U35ek0D.js.gz +0 -0
  329. package/client/assets/Tooltip-B8y25e3n.js +0 -2
  330. package/client/assets/Tooltip-B8y25e3n.js.br +0 -0
  331. package/client/assets/Tooltip-B8y25e3n.js.gz +0 -0
  332. package/client/assets/ViewLogo-BHsV7Faa.js +0 -2
  333. package/client/assets/ViewLogo-BHsV7Faa.js.br +0 -0
  334. package/client/assets/ViewLogo-BHsV7Faa.js.gz +0 -0
  335. package/client/assets/ViewParamsEditor-BMHXOv-K.js.br +0 -0
  336. package/client/assets/ViewParamsEditor-BMHXOv-K.js.gz +0 -0
  337. package/client/assets/dateConfig-_BhycZza.js +0 -2
  338. package/client/assets/dateConfig-_BhycZza.js.br +0 -0
  339. package/client/assets/dateConfig-_BhycZza.js.gz +0 -0
  340. package/client/assets/dateConfig-_BhycZza.js.map +0 -1
  341. package/client/assets/editorSettings-DH9ca-nB.js +0 -2
  342. package/client/assets/editorSettings-DH9ca-nB.js.br +0 -0
  343. package/client/assets/editorSettings-DH9ca-nB.js.gz +0 -0
  344. package/client/assets/getProgress-DlrSzpnf.js.br +0 -0
  345. package/client/assets/getProgress-DlrSzpnf.js.gz +0 -0
  346. package/client/assets/index-CDBQg2fh.js +0 -3
  347. package/client/assets/index-CDBQg2fh.js.br +0 -0
  348. package/client/assets/index-CDBQg2fh.js.gz +0 -0
  349. package/client/assets/index-CDBQg2fh.js.map +0 -1
  350. package/client/assets/offset-CLG4o744.js.br +0 -0
  351. package/client/assets/offset-CLG4o744.js.gz +0 -0
  352. package/client/assets/parseUserTime-Cp5iWS7y.js +0 -2
  353. package/client/assets/parseUserTime-Cp5iWS7y.js.br +0 -0
  354. package/client/assets/parseUserTime-Cp5iWS7y.js.gz +0 -0
  355. package/client/assets/playbackstate-B3BKJ8cT.js.br +0 -0
  356. package/client/assets/playbackstate-B3BKJ8cT.js.gz +0 -0
  357. package/client/assets/presentation.utils-B-wIv_a5.js.br +0 -0
  358. package/client/assets/presentation.utils-B-wIv_a5.js.gz +0 -0
  359. package/client/assets/rundownUtils-DJKMt8Ih.js +0 -2
  360. package/client/assets/rundownUtils-DJKMt8Ih.js.br +0 -0
  361. package/client/assets/rundownUtils-DJKMt8Ih.js.gz +0 -0
  362. package/client/assets/timer.utils-ByC_bcT9.js +0 -2
  363. package/client/assets/timer.utils-ByC_bcT9.js.br +0 -0
  364. package/client/assets/timer.utils-ByC_bcT9.js.gz +0 -0
  365. package/client/assets/timer.utils-ByC_bcT9.js.map +0 -1
  366. package/client/assets/useCustomFields-BUJkzZvM.js +0 -2
  367. package/client/assets/useCustomFields-BUJkzZvM.js.br +0 -2
  368. package/client/assets/useCustomFields-BUJkzZvM.js.gz +0 -0
  369. package/client/assets/useFollowComponent-Eyo4hWVG.js +0 -2
  370. package/client/assets/useFollowComponent-Eyo4hWVG.js.br +0 -0
  371. package/client/assets/useFollowComponent-Eyo4hWVG.js.gz +0 -0
  372. package/client/assets/useProjectData-DGA6K2Zs.js.br +0 -0
  373. package/client/assets/useProjectData-DGA6K2Zs.js.gz +0 -0
  374. package/client/assets/useReport-BUCsRa2T.js +0 -2
  375. package/client/assets/useReport-BUCsRa2T.js.br +0 -0
  376. package/client/assets/useReport-BUCsRa2T.js.gz +0 -0
  377. package/client/assets/useRundown-BFae0_bU.js +0 -2
  378. package/client/assets/useRundown-BFae0_bU.js.br +0 -0
  379. package/client/assets/useRundown-BFae0_bU.js.gz +0 -0
  380. package/client/assets/useRundown-BFae0_bU.js.map +0 -1
  381. package/client/assets/useWindowTitle-DU8NlxIu.js +0 -2
  382. package/client/assets/useWindowTitle-DU8NlxIu.js.br +0 -0
  383. package/client/assets/useWindowTitle-DU8NlxIu.js.gz +0 -0
  384. package/client/assets/validateEvent-3adKsP1N.js.br +0 -0
  385. package/client/assets/validateEvent-3adKsP1N.js.gz +0 -0
  386. package/client/assets/vendor-BoH5HFNN.js.br +0 -0
  387. package/client/assets/vendor-BoH5HFNN.js.gz +0 -0
  388. package/client/assets/viewLoader.utils-BPOG1xso.js.br +0 -0
  389. package/client/assets/viewLoader.utils-BPOG1xso.js.gz +0 -0
  390. package/client/assets/viewUtils-DI8_kmUZ.js +0 -2
  391. package/client/assets/viewUtils-DI8_kmUZ.js.br +0 -0
  392. package/client/assets/viewUtils-DI8_kmUZ.js.gz +0 -0
  393. package/client/assets/viewUtils-DI8_kmUZ.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{h as c,j as e,D as ie,q as ae,t as le,v as ce,l as de}from"./vendor-BoH5HFNN.js";import{P as ue}from"./ProtectRoute-Ci_AIozP.js";import{ak as me,B as Z,t as ee,r as fe,be as pe,aC as he,e as T,f as ve,bf as ge,k as _e,M as be,bg as xe,b0 as ye,a as je,P as Se,b as Ee,L as we,o as Oe,g as Ce,O as Te,bh as Pe}from"./index-CDBQg2fh.js";import{t as Ne,i as z,j as Fe}from"./useRundown-BFae0_bU.js";import{E as De}from"./EmptyPage-Ct3d0DqJ.js";import{m as Le,b as Me,O as V,V as ke}from"./ViewParamsEditor-BMHXOv-K.js";import{u as Re}from"./useFollowComponent-Eyo4hWVG.js";import{u as Ie}from"./useWindowTitle-DU8NlxIu.js";import{T as Ue}from"./editorSettings-DH9ca-nB.js";import{u as Be}from"./dateConfig-_BhycZza.js";import{F as Ae}from"./FollowButton-BG-ycRWu.js";import{D as We}from"./DelayIndicator-F4GdgsGh.js";import{f as Ve,T as $e,C as Ge}from"./TimeElements-XpRwBsaa.js";import{S as He}from"./SuperscriptPeriod-BmHAoSBy.js";import{M as Ze}from"./MultiPartProgressBar-Cmw-gisu.js";import{g as ze,a as qe}from"./viewLoader.utils-BPOG1xso.js";import{i as $,b as q}from"./viewUtils-DI8_kmUZ.js";import{u as Qe}from"./useCustomFields-BUJkzZvM.js";import"./useProjectData-DGA6K2Zs.js";import"./Empty-C0IdV_kI.js";import"./Select-B5xNi_tM.js";import"./validateEvent-3adKsP1N.js";import"./parseUserTime-Cp5iWS7y.js";import"./rundownUtils-DJKMt8Ih.js";import"./Tooltip-B8y25e3n.js";import"./offset-CLG4o744.js";import"./playbackstate-B3BKJ8cT.js";/* empty css */import"./getProgress-DlrSzpnf.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new t.Error().stack;s&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[s]="33ed40a7-04b6-404f-89ab-0fd769475c7a",t._sentryDebugIdIdentifier="sentry-dbid-33ed40a7-04b6-404f-89ab-0fd769475c7a")}catch{}})();const Je="_editModal_1k6b9_17",Ke="_title_1k6b9_31",Xe="_body_1k6b9_39",Ye="_label_1k6b9_48",et="_footer_1k6b9_54",C={editModal:Je,title:Ke,body:Xe,label:Ye,footer:et};function tt(t){const{event:s,onClose:o}=t,{updateEntry:r}=Be(),[n,i]=c.useState(!1),u=c.useRef(new Array),v=async()=>{if(!u.current)return;i(!0);const a={id:s.id};u.current.forEach(l=>{l.dataset.field&&l.defaultValue!=l.value&&(a.custom?a.custom[l.dataset.field]=l.value:Object.assign(a,{custom:{[l.dataset.field]:l.value}}))}),a.custom&&await r(a),i(!1),o()};return e.jsx(ie,{open:!0,onOpenChange:a=>{a||o()},children:e.jsx(ae,{children:e.jsxs(le,{className:C.editModal,children:[e.jsxs("div",{className:C.title,children:[`Editing fields in cue ${s.cue}`,e.jsx(me,{variant:"subtle-white",onClick:o,disabled:n,children:e.jsx(ce,{})})]}),e.jsx("div",{className:C.body,children:s.subscriptions.map(a=>e.jsxs(c.Fragment,{children:[e.jsx("label",{htmlFor:a.id,className:C.label,style:{"--user-bg":a.colour},children:a.label}),e.jsx(Ue,{name:a.id,ref:l=>{l&&u.current.push(l)},placeholder:`Add value for ${a.label} field`,defaultValue:a.value,"data-field":a.id,disabled:n,rows:5})]},a.id))}),e.jsxs("div",{className:C.footer,children:[e.jsx(Z,{variant:"subtle",size:"large",onClick:o,disabled:n,children:"Cancel"}),e.jsx(Z,{variant:"primary",size:"large",onClick:v,disabled:n,children:"Save"})]})]})})})}function st(t,s={}){const{threshold:o=700,onStart:r,onFinish:n,onCancel:i}=s,u=c.useRef(!1),v=c.useRef(!1),a=c.useRef(-1);return c.useEffect(()=>()=>window.clearTimeout(a.current),[]),c.useMemo(()=>{if(typeof t!="function")return{};const l=m=>{!J(m)&&!Q(m)||(r&&r(m),v.current=!0,a.current=window.setTimeout(()=>{t(m),u.current=!0},o))},h=m=>{!J(m)&&!Q(m)||(u.current?n==null||n(m):v.current&&(i==null||i(m)),u.current=!1,v.current=!1,a.current&&window.clearTimeout(a.current))};return{onMouseDown:l,onMouseUp:h,onMouseLeave:h,onTouchStart:l,onTouchEnd:h,onTouchMove:ee(h,150)}},[t,o,i,n,r])}function Q(t){return window.TouchEvent?t.nativeEvent instanceof TouchEvent:"touches"in t.nativeEvent}function J(t){return t.nativeEvent instanceof MouseEvent}function ot(t){const{value:s,hideSeconds:o,hideLeadingZero:r,className:n}=t;let i=Ve(s,o||r?2:3);return r&&(i=fe(i)),o&&(i=pe(i)),e.jsx("div",{className:n,children:i})}const nt="_event_1iflv_62",rt="_running_1iflv_79",it="_past_1iflv_83",at="_binder_1iflv_88",lt="_cue_1iflv_98",ct="_mainField_1iflv_108",dt="_secondaryField_1iflv_117",ut="_plannedStart_1iflv_124",mt="_timeUntil_1iflv_125",ft="_runningTime_1iflv_126",pt="_fields_1iflv_155",ht="_field_1iflv_155",vt="_noColour_1iflv_164",gt="_value_1iflv_170",_t="_fieldsWithContent_1iflv_177",f={event:nt,running:rt,past:it,binder:at,cue:lt,mainField:ct,secondaryField:dt,plannedStart:ut,timeUntil:mt,runningTime:ft,fields:pt,field:ht,noColour:vt,value:gt,fieldsWithContent:_t},K=c.memo(bt);function bt({id:t,colour:s,cue:o,main:r,secondary:n,timeStart:i,duration:u,delay:v,dayOffset:a,isLinkedToLoaded:l,isSelected:h,isPast:m,selectedRef:N,showStart:F,subscribed:y,totalGap:S,onLongPress:D}){const _=p=>{p&&p.cancelable&&p.preventDefault(),y&&D({id:t,cue:o,subscriptions:y})},b=st(_),R=s&&he(s),E=T([f.event,h&&f.running,m&&f.past]),I=y.some(p=>p.value),U=y.length?Math.min(y.length,4):0,B=U>0?{gridTemplateColumns:`repeat(${U}, minmax(12rem, 1fr))`}:void 0;return e.jsxs("div",{className:E,"data-testid":o,ref:N,onContextMenu:_,...b,children:[e.jsx("div",{className:f.binder,style:{...R},children:e.jsx("span",{className:f.cue,children:o})}),e.jsxs("span",{className:f.mainField,children:[F&&e.jsx(He,{className:f.plannedStart,time:ve(i)}),r]}),e.jsx("span",{className:f.secondaryField,children:n}),e.jsx(xt,{timeStart:i,isPast:m,isSelected:h,delay:v,dayOffset:a,totalGap:S,isLinkedToLoaded:l}),e.jsxs("span",{className:f.runningTime,children:[e.jsx(We,{delayValue:v}),e.jsx(ot,{className:T([h&&f.muted]),value:u,hideLeadingZero:!0})]}),e.jsx("div",{className:T([f.fields,I&&f.fieldsWithContent]),style:B,children:y.map(p=>p.value?e.jsxs("div",{children:[e.jsx("span",{className:T([f.field,!p.colour&&f.noColour]),style:{backgroundColor:p.colour},children:p.label}),e.jsx("span",{className:f.value,style:{color:p.colour},children:p.value})]},p.id):e.jsx("div",{},p.id))})]})}function xt({timeStart:t,isPast:s,isSelected:o,delay:r,dayOffset:n,totalGap:i,isLinkedToLoaded:u}){return s?e.jsx("span",{className:f.timeUntil,children:"DONE"}):o?e.jsx("span",{className:f.timeUntil,children:"LIVE"}):e.jsx(yt,{timeStart:t,delay:r,dayOffset:n,totalGap:i,isLinkedToLoaded:u})}function yt({timeStart:t,delay:s,dayOffset:o,totalGap:r,isLinkedToLoaded:n}){const i=ge({timeStart:t,delay:s,dayOffset:o},{totalGap:r,isLinkedToLoaded:n}),v=i<xe?"DUE":`${_e(Math.abs(i),i>2*be)}`;return e.jsx("span",{className:f.timeUntil,"data-testid":"time-until",children:v})}const jt="_group_c6uj3_17",St={group:jt},Et=c.memo(wt);function wt({title:t}){return e.jsx("div",{className:St.group,children:t})}const Ot="_statusBar_1va40_17",Ct="_timers_1va40_25",Tt="_runningTimer_1va40_33",Pt="_timeNow_1va40_42",Nt="_progressOverride_1va40_51",P={statusBar:Ot,timers:Ct,runningTimer:Tt,timeNow:Pt,progressOverride:Nt};function Ft({viewSettings:t}){const{current:s,duration:o,timeWarning:r,timeDanger:n}=ye();return e.jsx(Ze,{now:s,complete:o,normalColor:t.normalColor,warning:r,warningColor:t.warningColor,danger:n,dangerColor:t.dangerColor,className:P.progressOverride,ignoreCssOverride:!0})}function Dt(){return e.jsxs("div",{className:P.timers,children:[e.jsx($e,{className:P.runningTimer}),e.jsx(Ge,{className:P.timeNow,shouldFormat:!0})]})}function Lt(){const{data:t}=je();return e.jsxs("div",{className:P.statusBar,children:[e.jsx(Dt,{}),t&&e.jsx(Ft,{viewSettings:t})]})}const Mt=(t,s)=>{const o=Le(t,[{value:"none",label:"None"},{value:"title",label:"Title"},{value:"note",label:"Note"}]),r=Me(t);return[{title:V.ClockOptions,collapsible:!0,options:[ze(s)]},{title:V.DataSources,collapsible:!0,options:[{id:"main",title:"Main data field",description:"Field to be shown in the first line of text",type:"option",values:o,defaultValue:"title"},{id:"secondary-src",title:"Secondary data field",description:"Field to be shown in the second line of text",type:"option",values:o,defaultValue:"none"},{id:"subscribe",title:"Highlight Fields",description:"Choose custom fields to highlight",type:"multi-option",values:r},{id:"shouldEdit",title:"Edit custom field",description:"Allows editing an highlighted custom field by long pressing",type:"boolean",defaultValue:!1}]},{title:V.ElementVisibility,collapsible:!0,options:[{id:"hidePast",title:"Hide Past Events",description:"Whether to hide events that have passed",type:"boolean",defaultValue:!1},{id:"showStart",title:"Show planned start",description:"Whether to prepend the planned start to the items",type:"boolean",defaultValue:!1}]}]};function kt(t,s){const o=n=>(s==null?void 0:s.get(n))??t.get(n),r=n=>s!=null&&s.has(n)?s.getAll(n):t.getAll(n);return{mainSource:o("main"),secondarySource:o("secondary-src"),subscribe:r("subscribe"),shouldEdit:$(o("shouldEdit")),hidePast:$(o("hidePast")),showStart:$(o("showStart"))}}function Rt(){const[t]=de(),s=c.use(Se);return c.useMemo(()=>{const r=s?new URLSearchParams(s.search):void 0;return kt(t,r)},[s,t])}function X(t,s,o,r,n){const i=s?q(t,s)??"":t.title,u=q(t,o)??"",a=r.filter(l=>Object.hasOwn(n,l)).reduce((l,h)=>{const m=n[h];return m&&l.push({id:h,label:m.label,colour:m.colour,value:t.custom[h]}),l},[]);return{mainField:i,secondaryField:u,subscribedData:a}}function It(){const{data:t,rundownMetadata:s,status:o}=Ne(),{data:r,status:n}=Qe(),{data:i,status:u}=Ee();return{data:{rundown:t,rundownMetadata:s,customFields:r,settings:i},status:qe([o,n,u])}}const Ut="_operatorContainer_1o5o0_17",Bt="_operatorEvents_1o5o0_24",At="_editPrompt_1o5o0_35",Wt="_show_1o5o0_49",k={operatorContainer:Ut,operatorEvents:Bt,editPrompt:At,show:Wt},Y=50;function Vt(){const{data:t,status:s}=It();return Ie("Operator"),s==="pending"?e.jsx(we,{}):s==="error"?e.jsx(De,{text:"There was an error fetching data, please refresh the page."}):e.jsx($t,{...t})}function $t({rundown:t,rundownMetadata:s,customFields:o,settings:r}){const{selectedEventId:n}=Oe(),{subscribe:i,mainSource:u,secondarySource:v,shouldEdit:a,hidePast:l,showStart:h}=Rt(),[m,N]=c.useState(!1),[F,y]=c.useState(null),[S,D]=c.useState(!1),_=c.useRef(null),b=c.useRef(null),R=Re({followRef:_,scrollRef:b,doFollow:!S,topOffset:Y,followTrigger:n}),E=c.useRef(null);c.useEffect(()=>{var x;n||S||(x=b.current)==null||x.scrollTo(0,0)},[n,S,b]);const I=()=>{n&&R(),D(!1)},B=ee(()=>{if(_!=null&&_.current&&(b!=null&&b.current)){const x=_.current.getBoundingClientRect(),d=b.current.getBoundingClientRect();if(x&&d){const j=x.top-d.top,w=j<-8||j>Y;D(w)}}},1e3),p=()=>{E.current&&clearTimeout(E.current),E.current=setTimeout(()=>{N(!1)},700),N(!0),B()},G=c.useCallback(x=>{y({...x})},[]),H=Ce(r==null?void 0:r.timeFormat),te=c.useMemo(()=>Mt(o,H),[o,H]),A=a&&i.length;return e.jsxs("div",{className:k.operatorContainer,"data-testid":"operator-view",children:[e.jsx(ke,{target:Te.Operator,viewOptions:te}),F&&e.jsx(tt,{event:F,onClose:()=>y(null)}),e.jsx(Lt,{}),A&&e.jsx("div",{className:T([k.editPrompt,m&&k.show]),children:Pe?"Press and hold to edit user field":"Right click to edit user field"}),e.jsx("div",{className:k.operatorEvents,onWheel:p,onTouchMove:p,ref:b,children:t.order.map(x=>{const d=t.entries[x];if(z(d)){const{isPast:j,isLinkedToLoaded:w,isLoaded:O,totalGap:g}=s[x];if(l&&j||d.skip)return null;const{mainField:L,secondaryField:M,subscribedData:W}=X(d,u,v,i,o);return e.jsx(K,{id:d.id,colour:d.colour,cue:d.cue,main:L,secondary:M,timeStart:d.timeStart,duration:d.duration,delay:d.delay,dayOffset:d.dayOffset,isLinkedToLoaded:w,isSelected:O,isPast:j,selectedRef:O?_:void 0,showStart:h,subscribed:W,totalGap:g,onLongPress:A?G:()=>{}},d.id)}if(Fe(d)){const{isPast:j}=s[d.id],w=n?s[n].groupId===d.id:!1;return l&&j&&!w?null:e.jsxs(c.Fragment,{children:[e.jsx(Et,{title:d.title},d.id),d.entries.map(O=>{const g=t.entries[O];if(!z(g))return null;const{isPast:L,isLoaded:M,isLinkedToLoaded:W,totalGap:se}=s[O];if(l&&L||g.skip)return null;const{mainField:oe,secondaryField:ne,subscribedData:re}=X(g,u,v,i,o);return e.jsx(K,{id:g.id,colour:g.colour,cue:g.cue,main:oe,secondary:ne,timeStart:g.timeStart,duration:g.duration,delay:g.delay,dayOffset:g.dayOffset,isLinkedToLoaded:W,isSelected:M,isPast:L,selectedRef:M?_:void 0,showStart:h,subscribed:re,totalGap:se,onLongPress:A?G:()=>{}},g.id)})]},d.id)}return null})}),e.jsx(Ae,{isVisible:S,onClickHandler:I})]})}function bs(){return e.jsx(ue,{permission:"operator",children:e.jsx(Vt,{})})}export{bs as default};
2
- //# sourceMappingURL=OperatorExport-CJd8jmY4.js.map
1
+ import{h as c,j as e,D as ie,q as ae,t as le,v as ce,l as ue}from"./vendor-Cdwxo8bP.js";import{P as de}from"./ProtectRoute-EejQ5o_H.js";import{ak as me,B as Z,t as ee,r as fe,be as pe,aC as he,e as T,f as ve,bf as ge,k as _e,M as be,bg as xe,b0 as ye,a as je,P as Se,b as Ee,L as we,o as Oe,g as Ce,O as Te,bh as Pe}from"./index-CoGiopcb.js";import{t as Ne,i as z,j as Fe}from"./useRundown-CHsh5rnl.js";import{E as De}from"./EmptyPage-DeRjpRKZ.js";import{m as Le,b as Me,O as V,V as ke}from"./ViewParamsEditor-CFedpp6w.js";import{u as Re}from"./useFollowComponent-BjhV6Uv8.js";import{u as Ie}from"./useWindowTitle-mLKt65i7.js";import{T as Ue}from"./editorSettings-BMt-7s8I.js";import{u as Be}from"./dateConfig-BU1RZfIK.js";import{F as Ae}from"./FollowButton-FodezDem.js";import{D as We}from"./DelayIndicator-BFZFpsY5.js";import{f as Ve,T as $e,C as Ge}from"./TimeElements-dIvFHgcd.js";import{S as He}from"./SuperscriptPeriod-DaZq1rr6.js";import{M as Ze}from"./MultiPartProgressBar-BKHk19Hb.js";import{g as ze,a as qe}from"./viewLoader.utils-DuXjY5zb.js";import{i as $,b as q}from"./viewUtils-dKRKkb_F.js";import{u as Qe}from"./useCustomFields-CcTb-GQM.js";import"./useProjectData-B5mjXsMj.js";import"./Empty-D1UteOYj.js";import"./Select-cHK8JrMG.js";import"./validateEvent-CUmvjN95.js";import"./parseUserTime-DZJMcfuJ.js";import"./rundownUtils-Dl1x6NDv.js";import"./Tooltip-BQBvaIZx.js";import"./offset-BS90Rks2.js";import"./playbackstate-CWexoP3a.js";/* empty css */import"./getProgress-sdxPEEPi.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new t.Error().stack;s&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[s]="e59b7b3b-ef45-4067-a761-2137555a0e9f",t._sentryDebugIdIdentifier="sentry-dbid-e59b7b3b-ef45-4067-a761-2137555a0e9f")}catch{}})();const Je="_editModal_1k6b9_17",Ke="_title_1k6b9_31",Xe="_body_1k6b9_39",Ye="_label_1k6b9_48",et="_footer_1k6b9_54",C={editModal:Je,title:Ke,body:Xe,label:Ye,footer:et};function tt(t){const{event:s,onClose:o}=t,{updateEntry:r}=Be(),[n,i]=c.useState(!1),d=c.useRef(new Array),v=async()=>{if(!d.current)return;i(!0);const a={id:s.id};d.current.forEach(l=>{l.dataset.field&&l.defaultValue!=l.value&&(a.custom?a.custom[l.dataset.field]=l.value:Object.assign(a,{custom:{[l.dataset.field]:l.value}}))}),a.custom&&await r(a),i(!1),o()};return e.jsx(ie,{open:!0,onOpenChange:a=>{a||o()},children:e.jsx(ae,{children:e.jsxs(le,{className:C.editModal,children:[e.jsxs("div",{className:C.title,children:[`Editing fields in cue ${s.cue}`,e.jsx(me,{variant:"subtle-white",onClick:o,disabled:n,children:e.jsx(ce,{})})]}),e.jsx("div",{className:C.body,children:s.subscriptions.map(a=>e.jsxs(c.Fragment,{children:[e.jsx("label",{htmlFor:a.id,className:C.label,style:{"--user-bg":a.colour},children:a.label}),e.jsx(Ue,{name:a.id,ref:l=>{l&&d.current.push(l)},placeholder:`Add value for ${a.label} field`,defaultValue:a.value,"data-field":a.id,disabled:n,rows:5})]},a.id))}),e.jsxs("div",{className:C.footer,children:[e.jsx(Z,{variant:"subtle",size:"large",onClick:o,disabled:n,children:"Cancel"}),e.jsx(Z,{variant:"primary",size:"large",onClick:v,disabled:n,children:"Save"})]})]})})})}function st(t,s={}){const{threshold:o=700,onStart:r,onFinish:n,onCancel:i}=s,d=c.useRef(!1),v=c.useRef(!1),a=c.useRef(-1);return c.useEffect(()=>()=>window.clearTimeout(a.current),[]),c.useMemo(()=>{if(typeof t!="function")return{};const l=m=>{!J(m)&&!Q(m)||(r&&r(m),v.current=!0,a.current=window.setTimeout(()=>{t(m),d.current=!0},o))},h=m=>{!J(m)&&!Q(m)||(d.current?n==null||n(m):v.current&&(i==null||i(m)),d.current=!1,v.current=!1,a.current&&window.clearTimeout(a.current))};return{onMouseDown:l,onMouseUp:h,onMouseLeave:h,onTouchStart:l,onTouchEnd:h,onTouchMove:ee(h,150)}},[t,o,i,n,r])}function Q(t){return window.TouchEvent?t.nativeEvent instanceof TouchEvent:"touches"in t.nativeEvent}function J(t){return t.nativeEvent instanceof MouseEvent}function ot(t){const{value:s,hideSeconds:o,hideLeadingZero:r,className:n}=t;let i=Ve(s,o||r?2:3);return r&&(i=fe(i)),o&&(i=pe(i)),e.jsx("div",{className:n,children:i})}const nt="_event_1iflv_62",rt="_running_1iflv_79",it="_past_1iflv_83",at="_binder_1iflv_88",lt="_cue_1iflv_98",ct="_mainField_1iflv_108",ut="_secondaryField_1iflv_117",dt="_plannedStart_1iflv_124",mt="_timeUntil_1iflv_125",ft="_runningTime_1iflv_126",pt="_fields_1iflv_155",ht="_field_1iflv_155",vt="_noColour_1iflv_164",gt="_value_1iflv_170",_t="_fieldsWithContent_1iflv_177",f={event:nt,running:rt,past:it,binder:at,cue:lt,mainField:ct,secondaryField:ut,plannedStart:dt,timeUntil:mt,runningTime:ft,fields:pt,field:ht,noColour:vt,value:gt,fieldsWithContent:_t},K=c.memo(bt);function bt({id:t,colour:s,cue:o,main:r,secondary:n,timeStart:i,duration:d,delay:v,dayOffset:a,isLinkedToLoaded:l,isSelected:h,isPast:m,selectedRef:N,showStart:F,subscribed:y,totalGap:S,onLongPress:D}){const _=p=>{p&&p.cancelable&&p.preventDefault(),y&&D({id:t,cue:o,subscriptions:y})},b=st(_),R=s&&he(s),E=T([f.event,h&&f.running,m&&f.past]),I=y.some(p=>p.value),U=y.length?Math.min(y.length,4):0,B=U>0?{gridTemplateColumns:`repeat(${U}, minmax(12rem, 1fr))`}:void 0;return e.jsxs("div",{className:E,"data-testid":o,ref:N,onContextMenu:_,...b,children:[e.jsx("div",{className:f.binder,style:{...R},children:e.jsx("span",{className:f.cue,children:o})}),e.jsxs("span",{className:f.mainField,children:[F&&e.jsx(He,{className:f.plannedStart,time:ve(i)}),r]}),e.jsx("span",{className:f.secondaryField,children:n}),e.jsx(xt,{timeStart:i,isPast:m,isSelected:h,delay:v,dayOffset:a,totalGap:S,isLinkedToLoaded:l}),e.jsxs("span",{className:f.runningTime,children:[e.jsx(We,{delayValue:v}),e.jsx(ot,{className:T([h&&f.muted]),value:d,hideLeadingZero:!0})]}),e.jsx("div",{className:T([f.fields,I&&f.fieldsWithContent]),style:B,children:y.map(p=>p.value?e.jsxs("div",{children:[e.jsx("span",{className:T([f.field,!p.colour&&f.noColour]),style:{backgroundColor:p.colour},children:p.label}),e.jsx("span",{className:f.value,style:{color:p.colour},children:p.value})]},p.id):e.jsx("div",{},p.id))})]})}function xt({timeStart:t,isPast:s,isSelected:o,delay:r,dayOffset:n,totalGap:i,isLinkedToLoaded:d}){return s?e.jsx("span",{className:f.timeUntil,children:"DONE"}):o?e.jsx("span",{className:f.timeUntil,children:"LIVE"}):e.jsx(yt,{timeStart:t,delay:r,dayOffset:n,totalGap:i,isLinkedToLoaded:d})}function yt({timeStart:t,delay:s,dayOffset:o,totalGap:r,isLinkedToLoaded:n}){const i=ge({timeStart:t,delay:s,dayOffset:o},{totalGap:r,isLinkedToLoaded:n}),v=i<xe?"DUE":`${_e(Math.abs(i),i>2*be)}`;return e.jsx("span",{className:f.timeUntil,"data-testid":"time-until",children:v})}const jt="_group_c6uj3_17",St={group:jt},Et=c.memo(wt);function wt({title:t}){return e.jsx("div",{className:St.group,children:t})}const Ot="_statusBar_1va40_17",Ct="_timers_1va40_25",Tt="_runningTimer_1va40_33",Pt="_timeNow_1va40_42",Nt="_progressOverride_1va40_51",P={statusBar:Ot,timers:Ct,runningTimer:Tt,timeNow:Pt,progressOverride:Nt};function Ft({viewSettings:t}){const{current:s,duration:o,timeWarning:r,timeDanger:n}=ye();return e.jsx(Ze,{now:s,complete:o,normalColor:t.normalColor,warning:r,warningColor:t.warningColor,danger:n,dangerColor:t.dangerColor,className:P.progressOverride,ignoreCssOverride:!0})}function Dt(){return e.jsxs("div",{className:P.timers,children:[e.jsx($e,{className:P.runningTimer}),e.jsx(Ge,{className:P.timeNow,shouldFormat:!0})]})}function Lt(){const{data:t}=je();return e.jsxs("div",{className:P.statusBar,children:[e.jsx(Dt,{}),t&&e.jsx(Ft,{viewSettings:t})]})}const Mt=(t,s)=>{const o=Le(t,[{value:"none",label:"None"},{value:"title",label:"Title"},{value:"note",label:"Note"}]),r=Me(t);return[{title:V.ClockOptions,collapsible:!0,options:[ze(s)]},{title:V.DataSources,collapsible:!0,options:[{id:"main",title:"Main data field",description:"Field to be shown in the first line of text",type:"option",values:o,defaultValue:"title"},{id:"secondary-src",title:"Secondary data field",description:"Field to be shown in the second line of text",type:"option",values:o,defaultValue:"none"},{id:"subscribe",title:"Highlight Fields",description:"Choose custom fields to highlight",type:"multi-option",values:r},{id:"shouldEdit",title:"Edit custom field",description:"Allows editing an highlighted custom field by long pressing",type:"boolean",defaultValue:!1}]},{title:V.ElementVisibility,collapsible:!0,options:[{id:"hidePast",title:"Hide Past Events",description:"Whether to hide events that have passed",type:"boolean",defaultValue:!1},{id:"showStart",title:"Show planned start",description:"Whether to prepend the planned start to the items",type:"boolean",defaultValue:!1}]}]};function kt(t,s){const o=n=>(s==null?void 0:s.get(n))??t.get(n),r=n=>s!=null&&s.has(n)?s.getAll(n):t.getAll(n);return{mainSource:o("main"),secondarySource:o("secondary-src"),subscribe:r("subscribe"),shouldEdit:$(o("shouldEdit")),hidePast:$(o("hidePast")),showStart:$(o("showStart"))}}function Rt(){const[t]=ue(),s=c.use(Se);return c.useMemo(()=>{const r=s?new URLSearchParams(s.search):void 0;return kt(t,r)},[s,t])}function X(t,s,o,r,n){const i=s?q(t,s)??"":t.title,d=q(t,o)??"",a=r.filter(l=>Object.hasOwn(n,l)).reduce((l,h)=>{const m=n[h];return m&&l.push({id:h,label:m.label,colour:m.colour,value:t.custom[h]}),l},[]);return{mainField:i,secondaryField:d,subscribedData:a}}function It(){const{data:t,rundownMetadata:s,status:o}=Ne(),{data:r,status:n}=Qe(),{data:i,status:d}=Ee();return{data:{rundown:t,rundownMetadata:s,customFields:r,settings:i},status:qe([o,n,d])}}const Ut="_operatorContainer_1o5o0_17",Bt="_operatorEvents_1o5o0_24",At="_editPrompt_1o5o0_35",Wt="_show_1o5o0_49",k={operatorContainer:Ut,operatorEvents:Bt,editPrompt:At,show:Wt},Y=50;function Vt(){const{data:t,status:s}=It();return Ie("Operator"),s==="pending"?e.jsx(we,{}):s==="error"?e.jsx(De,{text:"There was an error fetching data, please refresh the page."}):e.jsx($t,{...t})}function $t({rundown:t,rundownMetadata:s,customFields:o,settings:r}){const{selectedEventId:n}=Oe(),{subscribe:i,mainSource:d,secondarySource:v,shouldEdit:a,hidePast:l,showStart:h}=Rt(),[m,N]=c.useState(!1),[F,y]=c.useState(null),[S,D]=c.useState(!1),_=c.useRef(null),b=c.useRef(null),R=Re({followRef:_,scrollRef:b,doFollow:!S,topOffset:Y,followTrigger:n}),E=c.useRef(null);c.useEffect(()=>{var x;n||S||(x=b.current)==null||x.scrollTo(0,0)},[n,S,b]);const I=()=>{n&&R(),D(!1)},B=ee(()=>{if(_!=null&&_.current&&(b!=null&&b.current)){const x=_.current.getBoundingClientRect(),u=b.current.getBoundingClientRect();if(x&&u){const j=x.top-u.top,w=j<-8||j>Y;D(w)}}},1e3),p=()=>{E.current&&clearTimeout(E.current),E.current=setTimeout(()=>{N(!1)},700),N(!0),B()},G=c.useCallback(x=>{y({...x})},[]),H=Ce(r==null?void 0:r.timeFormat),te=c.useMemo(()=>Mt(o,H),[o,H]),A=a&&i.length;return e.jsxs("div",{className:k.operatorContainer,"data-testid":"operator-view",children:[e.jsx(ke,{target:Te.Operator,viewOptions:te}),F&&e.jsx(tt,{event:F,onClose:()=>y(null)}),e.jsx(Lt,{}),A&&e.jsx("div",{className:T([k.editPrompt,m&&k.show]),children:Pe?"Press and hold to edit user field":"Right click to edit user field"}),e.jsx("div",{className:k.operatorEvents,onWheel:p,onTouchMove:p,ref:b,children:t.order.map(x=>{const u=t.entries[x];if(z(u)){const{isPast:j,isLinkedToLoaded:w,isLoaded:O,totalGap:g}=s[x];if(l&&j||u.skip)return null;const{mainField:L,secondaryField:M,subscribedData:W}=X(u,d,v,i,o);return e.jsx(K,{id:u.id,colour:u.colour,cue:u.cue,main:L,secondary:M,timeStart:u.timeStart,duration:u.duration,delay:u.delay,dayOffset:u.dayOffset,isLinkedToLoaded:w,isSelected:O,isPast:j,selectedRef:O?_:void 0,showStart:h,subscribed:W,totalGap:g,onLongPress:A?G:()=>{}},u.id)}if(Fe(u)){const{isPast:j}=s[u.id],w=n?s[n].groupId===u.id:!1;return l&&j&&!w?null:e.jsxs(c.Fragment,{children:[e.jsx(Et,{title:u.title},u.id),u.entries.map(O=>{const g=t.entries[O];if(!z(g))return null;const{isPast:L,isLoaded:M,isLinkedToLoaded:W,totalGap:se}=s[O];if(l&&L||g.skip)return null;const{mainField:oe,secondaryField:ne,subscribedData:re}=X(g,d,v,i,o);return e.jsx(K,{id:g.id,colour:g.colour,cue:g.cue,main:oe,secondary:ne,timeStart:g.timeStart,duration:g.duration,delay:g.delay,dayOffset:g.dayOffset,isLinkedToLoaded:W,isSelected:M,isPast:L,selectedRef:M?_:void 0,showStart:h,subscribed:re,totalGap:se,onLongPress:A?G:()=>{}},g.id)})]},u.id)}return null})}),e.jsx(Ae,{isVisible:S,onClickHandler:I})]})}function bs(){return e.jsx(de,{permission:"operator",children:e.jsx(Vt,{})})}export{bs as default};
2
+ //# sourceMappingURL=OperatorExport-DQM14DsN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OperatorExport-CJd8jmY4.js","sources":["../../src/features/operator/edit-modal/EditModal.tsx","../../src/common/hooks/useLongPress.ts","../../src/features/viewers/common/running-time/RunningTime.tsx","../../src/features/operator/operator-event/OperatorEvent.tsx","../../src/features/operator/operator-group/OperatorGroup.tsx","../../src/features/operator/status-bar/StatusBarProgress.tsx","../../src/features/operator/status-bar/StatusBarTimers.tsx","../../src/features/operator/status-bar/StatusBar.tsx","../../src/features/operator/operator.options.tsx","../../src/features/operator/operator.utils.ts","../../src/features/operator/useOperatorData.ts","../../src/features/operator/Operator.tsx","../../src/features/operator/OperatorExport.tsx"],"sourcesContent":["import { Fragment, useRef, useState } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { Dialog } from '@base-ui-components/react/dialog';\nimport { OntimeEvent } from 'ontime-types';\n\nimport Button from '../../../common/components/buttons/Button';\nimport IconButton from '../../../common/components/buttons/IconButton';\nimport Textarea from '../../../common/components/input/textarea/Textarea';\nimport { useEntryActions } from '../../../common/hooks/useEntryAction';\nimport { EditEvent } from '../operator.types';\n\nimport style from './EditModal.module.scss';\n\ninterface EditModalProps {\n event: EditEvent;\n onClose: () => void;\n}\n\nexport default function EditModal(props: EditModalProps) {\n const { event, onClose } = props;\n\n const { updateEntry } = useEntryActions();\n const [loading, setLoading] = useState(false);\n const inputRef = useRef<HTMLTextAreaElement[]>(new Array<HTMLTextAreaElement>());\n\n const handleSave = async () => {\n if (!inputRef.current) return;\n setLoading(true);\n\n const patchObject: Partial<OntimeEvent> = { id: event.id };\n\n inputRef.current.forEach((element) => {\n if (element.dataset.field && element.defaultValue != element.value) {\n if (patchObject.custom) {\n patchObject.custom[element.dataset.field] = element.value;\n } else {\n Object.assign(patchObject, { custom: { [element.dataset.field]: element.value } });\n }\n }\n });\n\n if (patchObject.custom) {\n await updateEntry(patchObject);\n }\n\n setLoading(false);\n onClose();\n };\n\n return (\n <Dialog.Root\n open\n onOpenChange={(isOpen) => {\n if (!isOpen) onClose();\n }}\n >\n <Dialog.Portal>\n <Dialog.Popup className={style.editModal}>\n <div className={style.title}>\n {`Editing fields in cue ${event.cue}`}\n <IconButton variant='subtle-white' onClick={onClose} disabled={loading}>\n <IoClose />\n </IconButton>\n </div>\n <div className={style.body}>\n {event.subscriptions.map((field) => {\n return (\n <Fragment key={field.id}>\n <label htmlFor={field.id} className={style.label} style={{ '--user-bg': field.colour }}>\n {field.label}\n </label>\n <Textarea\n name={field.id}\n ref={(element) => {\n if (element) inputRef.current.push(element);\n }}\n placeholder={`Add value for ${field.label} field`}\n defaultValue={field.value}\n data-field={field.id}\n disabled={loading}\n rows={5}\n />\n </Fragment>\n );\n })}\n </div>\n\n <div className={style.footer}>\n <Button variant='subtle' size='large' onClick={onClose} disabled={loading}>\n Cancel\n </Button>\n <Button variant='primary' size='large' onClick={handleSave} disabled={loading}>\n Save\n </Button>\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import React, { useEffect, useMemo, useRef } from 'react';\n\nimport { throttle } from '../utils/throttle';\n\nexport interface UseLongPressOptions {\n /** Time in milliseconds to trigger the long press, default is 400ms */\n threshold?: number;\n\n /** Callback triggered when the long press starts */\n onStart?: (event: React.MouseEvent | React.TouchEvent) => void;\n\n /** Callback triggered when the long press finishes */\n onFinish?: (event: React.MouseEvent | React.TouchEvent) => void;\n\n /** Callback triggered when the long press is canceled */\n onCancel?: (event: React.MouseEvent | React.TouchEvent) => void;\n}\n\nexport interface UseLongPressReturnValue {\n onMouseDown: (event: React.MouseEvent) => void;\n onMouseUp: (event: React.MouseEvent) => void;\n onMouseLeave: (event: React.MouseEvent) => void;\n onTouchStart: (event: React.TouchEvent) => void;\n onTouchEnd: (event: React.TouchEvent) => void;\n}\n\nexport function useLongPress(\n onLongPress: (event: React.MouseEvent | React.TouchEvent) => void,\n options: UseLongPressOptions = {},\n): UseLongPressReturnValue {\n const { threshold = 700, onStart, onFinish, onCancel } = options;\n const isLongPressActive = useRef(false);\n const isPressed = useRef(false);\n const timeout = useRef<number>(-1);\n\n useEffect(() => () => window.clearTimeout(timeout.current), []);\n\n return useMemo(() => {\n if (typeof onLongPress !== 'function') {\n return {} as UseLongPressReturnValue;\n }\n\n const start = (event: React.MouseEvent | React.TouchEvent) => {\n if (!isMouseEvent(event) && !isTouchEvent(event)) {\n return;\n }\n\n if (onStart) {\n onStart(event);\n }\n\n isPressed.current = true;\n timeout.current = window.setTimeout(() => {\n onLongPress(event);\n isLongPressActive.current = true;\n }, threshold);\n };\n\n const cancel = (event: React.MouseEvent | React.TouchEvent) => {\n if (!isMouseEvent(event) && !isTouchEvent(event)) {\n return;\n }\n\n if (isLongPressActive.current) {\n onFinish?.(event);\n } else if (isPressed.current) {\n onCancel?.(event);\n }\n\n isLongPressActive.current = false;\n isPressed.current = false;\n\n if (timeout.current) {\n window.clearTimeout(timeout.current);\n }\n };\n\n return {\n onMouseDown: start,\n onMouseUp: cancel,\n onMouseLeave: cancel,\n onTouchStart: start,\n onTouchEnd: cancel,\n onTouchMove: throttle(cancel, 150),\n };\n }, [onLongPress, threshold, onCancel, onFinish, onStart]);\n}\n\nfunction isTouchEvent(event: React.MouseEvent | React.TouchEvent): event is React.TouchEvent {\n return window.TouchEvent ? event.nativeEvent instanceof TouchEvent : 'touches' in event.nativeEvent;\n}\n\nfunction isMouseEvent(event: React.MouseEvent | React.TouchEvent): event is React.MouseEvent {\n return event.nativeEvent instanceof MouseEvent;\n}\n","/**\n * encapsulate logic related to showing a running timer\n */\n\nimport { MaybeNumber } from 'ontime-types';\nimport { removeLeadingZero, removeSeconds } from 'ontime-utils';\n\nimport { formattedTime } from '../../../overview/overview.utils';\n\ninterface RunningTimeProps {\n value: MaybeNumber;\n hideSeconds?: boolean;\n hideLeadingZero?: boolean;\n className?: string;\n}\n\nexport default function RunningTime(props: RunningTimeProps) {\n const { value, hideSeconds, hideLeadingZero, className } = props;\n let display = formattedTime(value, hideSeconds || hideLeadingZero ? 2 : 3);\n\n if (hideLeadingZero) {\n display = removeLeadingZero(display);\n }\n\n if (hideSeconds) {\n display = removeSeconds(display);\n }\n\n return <div className={className}>{display}</div>;\n}\n","import { CSSProperties, memo, RefObject, SyntheticEvent } from 'react';\nimport { MILLIS_PER_MINUTE, MILLIS_PER_SECOND } from 'ontime-utils';\n\nimport DelayIndicator from '../../../common/components/delay-indicator/DelayIndicator';\nimport { useLongPress } from '../../../common/hooks/useLongPress';\nimport { cx, getAccessibleColour } from '../../../common/utils/styleUtils';\nimport { formatDuration, formatTime, useTimeUntilExpectedStart } from '../../../common/utils/time';\nimport RunningTime from '../../viewers/common/running-time/RunningTime';\nimport SuperscriptPeriod from '../../viewers/common/superscript-time/SuperscriptPeriod';\nimport type { EditEvent, Subscribed } from '../operator.types';\n\nimport style from './OperatorEvent.module.scss';\n\ninterface OperatorEventProps {\n id: string;\n colour: string;\n cue: string;\n main: string;\n secondary: string;\n timeStart: number;\n duration: number;\n delay: number;\n dayOffset: number;\n isLinkedToLoaded: boolean;\n isSelected: boolean;\n isPast: boolean;\n selectedRef?: RefObject<HTMLDivElement | null>;\n showStart: boolean;\n subscribed: Subscribed;\n totalGap: number;\n onLongPress: (event: EditEvent) => void;\n}\n\nexport default memo(OperatorEvent);\nfunction OperatorEvent({\n id,\n colour,\n cue,\n main,\n secondary,\n timeStart,\n duration,\n delay,\n dayOffset,\n isLinkedToLoaded,\n isSelected,\n isPast,\n selectedRef,\n showStart,\n subscribed,\n totalGap,\n onLongPress,\n}: OperatorEventProps) {\n /**\n * gather behaviour for long press and context menu\n */\n const handleLongPress = (event?: SyntheticEvent) => {\n // prevent default if the event is cancelable to avoid browser intervention warnings\n if (event && event.cancelable) {\n event.preventDefault();\n }\n if (subscribed) {\n onLongPress({ id, cue, subscriptions: subscribed });\n }\n };\n\n const mouseHandlers = useLongPress(handleLongPress);\n const cueColours = colour && getAccessibleColour(colour);\n\n const operatorClasses = cx([style.event, isSelected && style.running, isPast && style.past]);\n\n const hasFields = subscribed.some((field) => field.value);\n const columnCount = subscribed.length ? Math.min(subscribed.length, 4) : 0;\n const fieldGridStyle =\n columnCount > 0\n ? ({\n gridTemplateColumns: `repeat(${columnCount}, minmax(12rem, 1fr))`,\n } satisfies CSSProperties)\n : undefined;\n\n return (\n <div\n className={operatorClasses}\n data-testid={cue}\n ref={selectedRef}\n onContextMenu={handleLongPress}\n {...mouseHandlers}\n >\n <div className={style.binder} style={{ ...cueColours }}>\n <span className={style.cue}>{cue}</span>\n </div>\n\n <span className={style.mainField}>\n {showStart && <SuperscriptPeriod className={style.plannedStart} time={formatTime(timeStart)} />}\n {main}\n </span>\n <span className={style.secondaryField}>{secondary}</span>\n <OperatorEventSchedule\n timeStart={timeStart}\n isPast={isPast}\n isSelected={isSelected}\n delay={delay}\n dayOffset={dayOffset}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n />\n <span className={style.runningTime}>\n <DelayIndicator delayValue={delay} />\n <RunningTime className={cx([isSelected && style.muted])} value={duration} hideLeadingZero />\n </span>\n\n <div className={cx([style.fields, hasFields && style.fieldsWithContent])} style={fieldGridStyle}>\n {subscribed.map((field) => {\n if (!field.value) {\n return <div key={field.id} />;\n }\n return (\n <div key={field.id}>\n <span\n className={cx([style.field, !field.colour && style.noColour])}\n style={{ backgroundColor: field.colour }}\n >\n {field.label}\n </span>\n <span className={style.value} style={{ color: field.colour }}>\n {field.value}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\ninterface OperatorEventScheduleProps {\n timeStart: number;\n isPast: boolean;\n isSelected: boolean;\n delay: number;\n dayOffset: number;\n totalGap: number;\n isLinkedToLoaded: boolean;\n}\nfunction OperatorEventSchedule({\n timeStart,\n isPast,\n isSelected,\n delay,\n dayOffset,\n totalGap,\n isLinkedToLoaded,\n}: OperatorEventScheduleProps) {\n if (isPast) {\n return <span className={style.timeUntil}>DONE</span>;\n }\n\n if (isSelected) {\n return <span className={style.timeUntil}>LIVE</span>;\n }\n\n return (\n <TimeUntil\n timeStart={timeStart}\n delay={delay}\n dayOffset={dayOffset}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n />\n );\n}\n\ninterface TimeUntilProps {\n timeStart: number;\n delay: number;\n dayOffset: number;\n totalGap: number;\n isLinkedToLoaded: boolean;\n}\nfunction TimeUntil({ timeStart, delay, dayOffset, totalGap, isLinkedToLoaded }: TimeUntilProps) {\n // we isolate this to avoid unnecessary re-renders\n const timeUntil = useTimeUntilExpectedStart({ timeStart, delay, dayOffset }, { totalGap, isLinkedToLoaded });\n\n const isDue = timeUntil < MILLIS_PER_SECOND;\n const timeUntilString = isDue ? 'DUE' : `${formatDuration(Math.abs(timeUntil), timeUntil > 2 * MILLIS_PER_MINUTE)}`;\n\n return (\n <span className={style.timeUntil} data-testid='time-until'>\n {timeUntilString}\n </span>\n );\n}\n","import { memo } from 'react';\n\nimport style from './OperatorGroup.module.scss';\n\ninterface OperatorGroup {\n title: string;\n}\n\nexport default memo(OperatorGroup);\nfunction OperatorGroup({ title }: OperatorGroup) {\n return <div className={style.group}>{title}</div>;\n}\n","import { ViewSettings } from 'ontime-types';\n\nimport MultiPartProgressBar from '../../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport { useProgressData } from '../../../common/hooks/useSocket';\n\nimport styles from './StatusBar.module.scss';\n\ninterface StatusBarProgressProps {\n viewSettings: ViewSettings;\n}\n\nexport default function StatusBarProgress({ viewSettings }: StatusBarProgressProps) {\n const { current, duration, timeWarning, timeDanger } = useProgressData();\n\n return (\n <MultiPartProgressBar\n now={current}\n complete={duration}\n normalColor={viewSettings.normalColor}\n warning={timeWarning}\n warningColor={viewSettings.warningColor}\n danger={timeDanger}\n dangerColor={viewSettings.dangerColor}\n className={styles.progressOverride}\n ignoreCssOverride\n />\n );\n}\n","import { ClockOverview, TimerOverview } from '../../overview/composite/TimeElements';\n\nimport style from './StatusBar.module.scss';\n\nexport default function StatusBarTimers() {\n return (\n <div className={style.timers}>\n <TimerOverview className={style.runningTimer} />\n <ClockOverview className={style.timeNow} shouldFormat />\n </div>\n );\n}\n","import useViewSettings from '../../../common/hooks-query/useViewSettings';\n\nimport StatusBarProgress from './StatusBarProgress';\nimport StatusBarTimers from './StatusBarTimers';\n\nimport styles from './StatusBar.module.scss';\n\nexport default function StatusBar() {\n const { data } = useViewSettings();\n\n return (\n <div className={styles.statusBar}>\n <StatusBarTimers />\n {data && <StatusBarProgress viewSettings={data} />}\n </div>\n );\n}\n","import { use, useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\nimport { CustomFields, EntryId, OntimeEvent } from 'ontime-types';\n\nimport { getTimeOption } from '../../common/components/view-params-editor/common.options';\nimport { OptionTitle } from '../../common/components/view-params-editor/constants';\nimport { ViewOption } from '../../common/components/view-params-editor/viewParams.types';\nimport {\n makeCustomFieldSelectOptions,\n makeOptionsFromCustomFields,\n} from '../../common/components/view-params-editor/viewParams.utils';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport { isStringBoolean } from '../viewers/common/viewUtils';\n\nexport const getOperatorOptions = (customFields: CustomFields, timeFormat: string): ViewOption[] => {\n const fieldOptions = makeOptionsFromCustomFields(customFields, [\n { value: 'none', label: 'None' },\n { value: 'title', label: 'Title' },\n { value: 'note', label: 'Note' },\n ]);\n const customFieldSelect = makeCustomFieldSelectOptions(customFields);\n\n return [\n { title: OptionTitle.ClockOptions, collapsible: true, options: [getTimeOption(timeFormat)] },\n {\n title: OptionTitle.DataSources,\n collapsible: true,\n options: [\n {\n id: 'main',\n title: 'Main data field',\n description: 'Field to be shown in the first line of text',\n type: 'option',\n values: fieldOptions,\n defaultValue: 'title',\n },\n {\n id: 'secondary-src',\n title: 'Secondary data field',\n description: 'Field to be shown in the second line of text',\n type: 'option',\n values: fieldOptions,\n defaultValue: 'none',\n },\n {\n id: 'subscribe',\n title: 'Highlight Fields',\n description: 'Choose custom fields to highlight',\n type: 'multi-option',\n values: customFieldSelect,\n },\n {\n id: 'shouldEdit',\n title: 'Edit custom field',\n description: 'Allows editing an highlighted custom field by long pressing',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n {\n title: OptionTitle.ElementVisibility,\n collapsible: true,\n options: [\n {\n id: 'hidePast',\n title: 'Hide Past Events',\n description: 'Whether to hide events that have passed',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'showStart',\n title: 'Show planned start',\n description: 'Whether to prepend the planned start to the items',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n ];\n};\n\ntype OperatorOptions = {\n mainSource: keyof OntimeEvent | null;\n secondarySource: keyof OntimeEvent | null;\n subscribe: string[];\n shouldEdit: boolean;\n hidePast: boolean;\n showStart: boolean;\n};\n\n/**\n * Utility extract the view options from URL Params\n * the names and fallback are manually matched with timerOptions\n */\nfunction getOptionsFromParams(searchParams: URLSearchParams, defaultValues?: URLSearchParams): OperatorOptions {\n // Helper to get value from either source, prioritizing defaultValues\n const getValue = (key: string) => defaultValues?.get(key) ?? searchParams.get(key);\n\n // Helper to get array values from either source\n const getArrayValues = (key: string): EntryId[] => {\n if (defaultValues?.has(key)) {\n return defaultValues.getAll(key) as EntryId[];\n }\n return searchParams.getAll(key) as EntryId[];\n };\n\n // we manually make an object that matches the key above\n return {\n mainSource: getValue('main') as keyof OntimeEvent | null,\n secondarySource: getValue('secondary-src') as keyof OntimeEvent | null,\n subscribe: getArrayValues('subscribe'),\n shouldEdit: isStringBoolean(getValue('shouldEdit')),\n hidePast: isStringBoolean(getValue('hidePast')),\n showStart: isStringBoolean(getValue('showStart')),\n };\n}\n\n/**\n * Hook exposes the operator view options\n */\nexport function useOperatorOptions(): OperatorOptions {\n const [searchParams] = useSearchParams();\n const maybePreset = use(PresetContext);\n\n const options = useMemo(() => {\n const defaultValues = maybePreset ? new URLSearchParams(maybePreset.search) : undefined;\n return getOptionsFromParams(searchParams, defaultValues);\n }, [maybePreset, searchParams]);\n\n return options;\n}\n","import { CustomFields, MaybeString, OntimeEvent } from 'ontime-types';\r\n\r\nimport { getPropertyValue } from '../viewers/common/viewUtils';\r\n\r\nimport type { Subscribed } from './operator.types';\r\n\r\nexport function getEventData(\r\n event: OntimeEvent,\r\n main: MaybeString,\r\n secondary: MaybeString,\r\n subscriptions: string[],\r\n customFields: CustomFields,\r\n) {\r\n const mainField = main ? getPropertyValue(event, main) ?? '' : event.title;\r\n const secondaryField = getPropertyValue(event, secondary) ?? '';\r\n\r\n // remove subscriptions that are not in customFields\r\n const sanitisedSubscriptions = subscriptions.filter((field) => Object.hasOwn(customFields, field));\r\n const subscribedData = sanitisedSubscriptions.reduce<Subscribed>((acc, id) => {\r\n const field = customFields[id];\r\n if (field) {\r\n acc.push({\r\n id,\r\n label: field.label,\r\n colour: field.colour,\r\n value: event.custom[id],\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n\r\n return { mainField, secondaryField, subscribedData };\r\n}\r\n","import { CustomFields, Rundown, Settings } from 'ontime-types';\n\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport { useRundownWithMetadata } from '../../common/hooks-query/useRundown';\nimport useSettings from '../../common/hooks-query/useSettings';\nimport { RundownMetadataObject } from '../../common/utils/rundownMetadata';\nimport { aggregateQueryStatus, ViewData } from '../../views/utils/viewLoader.utils';\n\nexport interface OperatorData {\n rundown: Rundown;\n rundownMetadata: RundownMetadataObject;\n customFields: CustomFields;\n settings: Settings;\n}\n\nexport function useOperatorData(): ViewData<OperatorData> {\n const { data: rundown, rundownMetadata, status: rundownStatus } = useRundownWithMetadata();\n const { data: customFields, status: customFieldStatus } = useCustomFields();\n const { data: settings, status: settingsStatus } = useSettings();\n\n return {\n data: {\n rundown,\n rundownMetadata,\n customFields,\n settings,\n },\n status: aggregateQueryStatus([rundownStatus, customFieldStatus, settingsStatus]),\n };\n}\n","import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { isOntimeEvent, isOntimeGroup, OntimeView } from 'ontime-types';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport useFollowComponent from '../../common/hooks/useFollowComponent';\nimport { useSelectedEventId } from '../../common/hooks/useSocket';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { cx } from '../../common/utils/styleUtils';\nimport { throttle } from '../../common/utils/throttle';\nimport { getDefaultFormat } from '../../common/utils/time';\nimport { isTouchDevice } from '../../externals';\nimport Loader from '../../views/common/loader/Loader';\n\nimport EditModal from './edit-modal/EditModal';\nimport FollowButton from './follow-button/FollowButton';\nimport OperatorEvent from './operator-event/OperatorEvent';\nimport OperatorGroup from './operator-group/OperatorGroup';\nimport StatusBar from './status-bar/StatusBar';\nimport { getOperatorOptions, useOperatorOptions } from './operator.options';\nimport type { EditEvent } from './operator.types';\nimport { getEventData } from './operator.utils';\nimport { OperatorData, useOperatorData } from './useOperatorData';\n\nimport style from './Operator.module.scss';\n\nconst selectedOffset = 50;\n\nexport default function OperatorLoader() {\n const { data, status } = useOperatorData();\n\n useWindowTitle('Operator');\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 <Operator {...data} />;\n}\n\nfunction Operator({ rundown, rundownMetadata, customFields, settings }: OperatorData) {\n const { selectedEventId } = useSelectedEventId();\n const { subscribe, mainSource, secondarySource, shouldEdit, hidePast, showStart } = useOperatorOptions();\n\n const [showEditPrompt, setShowEditPrompt] = useState(false);\n const [editEvent, setEditEvent] = useState<EditEvent | null>(null);\n\n const [lockAutoScroll, setLockAutoScroll] = useState(false);\n const selectedRef = useRef<HTMLDivElement | null>(null);\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const scrollToComponent = useFollowComponent({\n followRef: selectedRef,\n scrollRef,\n doFollow: !lockAutoScroll,\n topOffset: selectedOffset,\n followTrigger: selectedEventId,\n });\n\n const timeoutId = useRef<NodeJS.Timeout | null>(null);\n\n // reset scroll if nothing is selected\n useEffect(() => {\n if (!selectedEventId) {\n if (!lockAutoScroll) {\n scrollRef.current?.scrollTo(0, 0);\n }\n }\n }, [selectedEventId, lockAutoScroll, scrollRef]);\n\n const handleOffset = () => {\n if (selectedEventId) {\n scrollToComponent();\n }\n setLockAutoScroll(false);\n };\n\n // prevent considering automated scrolls as user scrolls\n const handleUserScroll = () => {\n if (selectedRef?.current && scrollRef?.current) {\n const selectedRect = selectedRef.current.getBoundingClientRect();\n const scrollerRect = scrollRef.current.getBoundingClientRect();\n if (selectedRect && scrollerRect) {\n const distanceFromTop = selectedRect.top - scrollerRect.top;\n const hasScrolledOutOfThreshold = distanceFromTop < -8 || distanceFromTop > selectedOffset;\n setLockAutoScroll(hasScrolledOutOfThreshold);\n }\n }\n };\n const throttledHandleScroll = throttle(handleUserScroll, 1000);\n\n const handleScroll = () => {\n if (timeoutId.current) {\n clearTimeout(timeoutId.current);\n }\n timeoutId.current = setTimeout(() => {\n setShowEditPrompt(false);\n }, 700);\n\n setShowEditPrompt(true);\n\n throttledHandleScroll();\n };\n\n const handleEdit = useCallback((event: EditEvent) => {\n setEditEvent({ ...event });\n }, []);\n\n // gather option data\n const defaultFormat = getDefaultFormat(settings?.timeFormat);\n const operatorOptions = useMemo(() => getOperatorOptions(customFields, defaultFormat), [customFields, defaultFormat]);\n\n const canEdit = shouldEdit && subscribe.length;\n\n return (\n <div className={style.operatorContainer} data-testid='operator-view'>\n <ViewParamsEditor target={OntimeView.Operator} viewOptions={operatorOptions} />\n {editEvent && <EditModal event={editEvent} onClose={() => setEditEvent(null)} />}\n\n <StatusBar />\n\n {canEdit && (\n <div className={cx([style.editPrompt, showEditPrompt && style.show])}>\n {isTouchDevice ? 'Press and hold to edit user field' : 'Right click to edit user field'}\n </div>\n )}\n\n <div className={style.operatorEvents} onWheel={handleScroll} onTouchMove={handleScroll} ref={scrollRef}>\n {rundown.order.map((entryId) => {\n const entry = rundown.entries[entryId];\n if (isOntimeEvent(entry)) {\n const { isPast, isLinkedToLoaded, isLoaded, totalGap } = rundownMetadata[entryId];\n // hide past events (if setting) and skipped events\n if ((hidePast && isPast) || entry.skip) {\n return null;\n }\n\n const { mainField, secondaryField, subscribedData } = getEventData(\n entry,\n mainSource,\n secondarySource,\n subscribe,\n customFields,\n );\n\n return (\n <OperatorEvent\n key={entry.id}\n id={entry.id}\n colour={entry.colour}\n cue={entry.cue}\n main={mainField}\n secondary={secondaryField}\n timeStart={entry.timeStart}\n duration={entry.duration}\n delay={entry.delay}\n dayOffset={entry.dayOffset}\n isLinkedToLoaded={isLinkedToLoaded}\n isSelected={isLoaded}\n isPast={isPast}\n selectedRef={isLoaded ? selectedRef : undefined}\n showStart={showStart}\n subscribed={subscribedData}\n totalGap={totalGap}\n onLongPress={canEdit ? handleEdit : () => undefined}\n />\n );\n }\n\n if (isOntimeGroup(entry)) {\n const { isPast } = rundownMetadata[entry.id];\n\n const isCurrentParent = selectedEventId ? rundownMetadata[selectedEventId].groupId === entry.id : false;\n\n if (hidePast && isPast && !isCurrentParent) {\n return null;\n }\n\n return (\n <Fragment key={entry.id}>\n <OperatorGroup key={entry.id} title={entry.title} />\n {entry.entries.map((nestedEntryId) => {\n const nestedEntry = rundown.entries[nestedEntryId];\n if (!isOntimeEvent(nestedEntry)) {\n return null;\n }\n\n const { isPast, isLoaded, isLinkedToLoaded, totalGap } = rundownMetadata[nestedEntryId];\n\n // hide past events (if setting) and skipped events\n if ((hidePast && isPast) || nestedEntry.skip) {\n return null;\n }\n\n const { mainField, secondaryField, subscribedData } = getEventData(\n nestedEntry,\n mainSource,\n secondarySource,\n subscribe,\n customFields,\n );\n\n return (\n <OperatorEvent\n key={nestedEntry.id}\n id={nestedEntry.id}\n colour={nestedEntry.colour}\n cue={nestedEntry.cue}\n main={mainField}\n secondary={secondaryField}\n timeStart={nestedEntry.timeStart}\n duration={nestedEntry.duration}\n delay={nestedEntry.delay}\n dayOffset={nestedEntry.dayOffset}\n isLinkedToLoaded={isLinkedToLoaded}\n isSelected={isLoaded}\n isPast={isPast}\n selectedRef={isLoaded ? selectedRef : undefined}\n showStart={showStart}\n subscribed={subscribedData}\n totalGap={totalGap}\n onLongPress={canEdit ? handleEdit : () => undefined}\n />\n );\n })}\n </Fragment>\n );\n }\n return null;\n })}\n </div>\n <FollowButton isVisible={lockAutoScroll} onClickHandler={handleOffset} />\n </div>\n );\n}\n","import ProtectRoute from '../../common/components/protect-route/ProtectRoute';\n\nimport Operator from './Operator';\n\nexport default function OperatorExport() {\n return (\n <ProtectRoute permission='operator'>\n <Operator />\n </ProtectRoute>\n );\n}\n"],"names":["EditModal","props","event","onClose","updateEntry","useEntryActions","loading","setLoading","useState","inputRef","useRef","handleSave","patchObject","element","jsx","Dialog.Root","isOpen","Dialog.Portal","jsxs","Dialog.Popup","style","IconButton","IoClose","field","Fragment","Textarea","Button","useLongPress","onLongPress","options","threshold","onStart","onFinish","onCancel","isLongPressActive","isPressed","timeout","useEffect","useMemo","start","isMouseEvent","isTouchEvent","cancel","throttle","RunningTime","value","hideSeconds","hideLeadingZero","className","display","formattedTime","removeLeadingZero","removeSeconds","memo","OperatorEvent","id","colour","cue","main","secondary","timeStart","duration","delay","dayOffset","isLinkedToLoaded","isSelected","isPast","selectedRef","showStart","subscribed","totalGap","handleLongPress","mouseHandlers","cueColours","getAccessibleColour","operatorClasses","cx","hasFields","columnCount","fieldGridStyle","SuperscriptPeriod","formatTime","OperatorEventSchedule","DelayIndicator","TimeUntil","timeUntil","useTimeUntilExpectedStart","timeUntilString","MILLIS_PER_SECOND","formatDuration","MILLIS_PER_MINUTE","OperatorGroup","title","StatusBarProgress","viewSettings","current","timeWarning","timeDanger","useProgressData","MultiPartProgressBar","styles","StatusBarTimers","TimerOverview","ClockOverview","StatusBar","data","useViewSettings","getOperatorOptions","customFields","timeFormat","fieldOptions","makeOptionsFromCustomFields","customFieldSelect","makeCustomFieldSelectOptions","OptionTitle","getTimeOption","getOptionsFromParams","searchParams","defaultValues","getValue","key","getArrayValues","isStringBoolean","useOperatorOptions","useSearchParams","maybePreset","use","PresetContext","getEventData","subscriptions","mainField","getPropertyValue","secondaryField","subscribedData","acc","useOperatorData","rundown","rundownMetadata","rundownStatus","useRundownWithMetadata","customFieldStatus","useCustomFields","settings","settingsStatus","useSettings","aggregateQueryStatus","selectedOffset","OperatorLoader","status","useWindowTitle","Loader","EmptyPage","Operator","selectedEventId","useSelectedEventId","subscribe","mainSource","secondarySource","shouldEdit","hidePast","showEditPrompt","setShowEditPrompt","editEvent","setEditEvent","lockAutoScroll","setLockAutoScroll","scrollRef","scrollToComponent","useFollowComponent","timeoutId","_a","handleOffset","throttledHandleScroll","selectedRect","scrollerRect","distanceFromTop","hasScrolledOutOfThreshold","handleScroll","handleEdit","useCallback","defaultFormat","getDefaultFormat","operatorOptions","canEdit","ViewParamsEditor","OntimeView","isTouchDevice","entryId","entry","isOntimeEvent","isLoaded","isOntimeGroup","isCurrentParent","nestedEntryId","nestedEntry","FollowButton","OperatorExport","ProtectRoute"],"mappings":"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"}
1
+ {"version":3,"file":"OperatorExport-DQM14DsN.js","sources":["../../src/features/operator/edit-modal/EditModal.tsx","../../src/common/hooks/useLongPress.ts","../../src/features/viewers/common/running-time/RunningTime.tsx","../../src/features/operator/operator-event/OperatorEvent.tsx","../../src/features/operator/operator-group/OperatorGroup.tsx","../../src/features/operator/status-bar/StatusBarProgress.tsx","../../src/features/operator/status-bar/StatusBarTimers.tsx","../../src/features/operator/status-bar/StatusBar.tsx","../../src/features/operator/operator.options.tsx","../../src/features/operator/operator.utils.ts","../../src/features/operator/useOperatorData.ts","../../src/features/operator/Operator.tsx","../../src/features/operator/OperatorExport.tsx"],"sourcesContent":["import { Fragment, useRef, useState } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { Dialog } from '@base-ui-components/react/dialog';\nimport { OntimeEvent } from 'ontime-types';\n\nimport Button from '../../../common/components/buttons/Button';\nimport IconButton from '../../../common/components/buttons/IconButton';\nimport Textarea from '../../../common/components/input/textarea/Textarea';\nimport { useEntryActions } from '../../../common/hooks/useEntryAction';\nimport { EditEvent } from '../operator.types';\n\nimport style from './EditModal.module.scss';\n\ninterface EditModalProps {\n event: EditEvent;\n onClose: () => void;\n}\n\nexport default function EditModal(props: EditModalProps) {\n const { event, onClose } = props;\n\n const { updateEntry } = useEntryActions();\n const [loading, setLoading] = useState(false);\n const inputRef = useRef<HTMLTextAreaElement[]>(new Array<HTMLTextAreaElement>());\n\n const handleSave = async () => {\n if (!inputRef.current) return;\n setLoading(true);\n\n const patchObject: Partial<OntimeEvent> = { id: event.id };\n\n inputRef.current.forEach((element) => {\n if (element.dataset.field && element.defaultValue != element.value) {\n if (patchObject.custom) {\n patchObject.custom[element.dataset.field] = element.value;\n } else {\n Object.assign(patchObject, { custom: { [element.dataset.field]: element.value } });\n }\n }\n });\n\n if (patchObject.custom) {\n await updateEntry(patchObject);\n }\n\n setLoading(false);\n onClose();\n };\n\n return (\n <Dialog.Root\n open\n onOpenChange={(isOpen) => {\n if (!isOpen) onClose();\n }}\n >\n <Dialog.Portal>\n <Dialog.Popup className={style.editModal}>\n <div className={style.title}>\n {`Editing fields in cue ${event.cue}`}\n <IconButton variant='subtle-white' onClick={onClose} disabled={loading}>\n <IoClose />\n </IconButton>\n </div>\n <div className={style.body}>\n {event.subscriptions.map((field) => {\n return (\n <Fragment key={field.id}>\n <label htmlFor={field.id} className={style.label} style={{ '--user-bg': field.colour }}>\n {field.label}\n </label>\n <Textarea\n name={field.id}\n ref={(element) => {\n if (element) inputRef.current.push(element);\n }}\n placeholder={`Add value for ${field.label} field`}\n defaultValue={field.value}\n data-field={field.id}\n disabled={loading}\n rows={5}\n />\n </Fragment>\n );\n })}\n </div>\n\n <div className={style.footer}>\n <Button variant='subtle' size='large' onClick={onClose} disabled={loading}>\n Cancel\n </Button>\n <Button variant='primary' size='large' onClick={handleSave} disabled={loading}>\n Save\n </Button>\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import React, { useEffect, useMemo, useRef } from 'react';\n\nimport { throttle } from '../utils/throttle';\n\nexport interface UseLongPressOptions {\n /** Time in milliseconds to trigger the long press, default is 400ms */\n threshold?: number;\n\n /** Callback triggered when the long press starts */\n onStart?: (event: React.MouseEvent | React.TouchEvent) => void;\n\n /** Callback triggered when the long press finishes */\n onFinish?: (event: React.MouseEvent | React.TouchEvent) => void;\n\n /** Callback triggered when the long press is canceled */\n onCancel?: (event: React.MouseEvent | React.TouchEvent) => void;\n}\n\nexport interface UseLongPressReturnValue {\n onMouseDown: (event: React.MouseEvent) => void;\n onMouseUp: (event: React.MouseEvent) => void;\n onMouseLeave: (event: React.MouseEvent) => void;\n onTouchStart: (event: React.TouchEvent) => void;\n onTouchEnd: (event: React.TouchEvent) => void;\n}\n\nexport function useLongPress(\n onLongPress: (event: React.MouseEvent | React.TouchEvent) => void,\n options: UseLongPressOptions = {},\n): UseLongPressReturnValue {\n const { threshold = 700, onStart, onFinish, onCancel } = options;\n const isLongPressActive = useRef(false);\n const isPressed = useRef(false);\n const timeout = useRef<number>(-1);\n\n useEffect(() => () => window.clearTimeout(timeout.current), []);\n\n return useMemo(() => {\n if (typeof onLongPress !== 'function') {\n return {} as UseLongPressReturnValue;\n }\n\n const start = (event: React.MouseEvent | React.TouchEvent) => {\n if (!isMouseEvent(event) && !isTouchEvent(event)) {\n return;\n }\n\n if (onStart) {\n onStart(event);\n }\n\n isPressed.current = true;\n timeout.current = window.setTimeout(() => {\n onLongPress(event);\n isLongPressActive.current = true;\n }, threshold);\n };\n\n const cancel = (event: React.MouseEvent | React.TouchEvent) => {\n if (!isMouseEvent(event) && !isTouchEvent(event)) {\n return;\n }\n\n if (isLongPressActive.current) {\n onFinish?.(event);\n } else if (isPressed.current) {\n onCancel?.(event);\n }\n\n isLongPressActive.current = false;\n isPressed.current = false;\n\n if (timeout.current) {\n window.clearTimeout(timeout.current);\n }\n };\n\n return {\n onMouseDown: start,\n onMouseUp: cancel,\n onMouseLeave: cancel,\n onTouchStart: start,\n onTouchEnd: cancel,\n onTouchMove: throttle(cancel, 150),\n };\n }, [onLongPress, threshold, onCancel, onFinish, onStart]);\n}\n\nfunction isTouchEvent(event: React.MouseEvent | React.TouchEvent): event is React.TouchEvent {\n return window.TouchEvent ? event.nativeEvent instanceof TouchEvent : 'touches' in event.nativeEvent;\n}\n\nfunction isMouseEvent(event: React.MouseEvent | React.TouchEvent): event is React.MouseEvent {\n return event.nativeEvent instanceof MouseEvent;\n}\n","/**\n * encapsulate logic related to showing a running timer\n */\n\nimport { MaybeNumber } from 'ontime-types';\nimport { removeLeadingZero, removeSeconds } from 'ontime-utils';\n\nimport { formattedTime } from '../../../overview/overview.utils';\n\ninterface RunningTimeProps {\n value: MaybeNumber;\n hideSeconds?: boolean;\n hideLeadingZero?: boolean;\n className?: string;\n}\n\nexport default function RunningTime(props: RunningTimeProps) {\n const { value, hideSeconds, hideLeadingZero, className } = props;\n let display = formattedTime(value, hideSeconds || hideLeadingZero ? 2 : 3);\n\n if (hideLeadingZero) {\n display = removeLeadingZero(display);\n }\n\n if (hideSeconds) {\n display = removeSeconds(display);\n }\n\n return <div className={className}>{display}</div>;\n}\n","import { CSSProperties, memo, RefObject, SyntheticEvent } from 'react';\nimport { MILLIS_PER_MINUTE, MILLIS_PER_SECOND } from 'ontime-utils';\n\nimport DelayIndicator from '../../../common/components/delay-indicator/DelayIndicator';\nimport { useLongPress } from '../../../common/hooks/useLongPress';\nimport { cx, getAccessibleColour } from '../../../common/utils/styleUtils';\nimport { formatDuration, formatTime, useTimeUntilExpectedStart } from '../../../common/utils/time';\nimport RunningTime from '../../viewers/common/running-time/RunningTime';\nimport SuperscriptPeriod from '../../viewers/common/superscript-time/SuperscriptPeriod';\nimport type { EditEvent, Subscribed } from '../operator.types';\n\nimport style from './OperatorEvent.module.scss';\n\ninterface OperatorEventProps {\n id: string;\n colour: string;\n cue: string;\n main: string;\n secondary: string;\n timeStart: number;\n duration: number;\n delay: number;\n dayOffset: number;\n isLinkedToLoaded: boolean;\n isSelected: boolean;\n isPast: boolean;\n selectedRef?: RefObject<HTMLDivElement | null>;\n showStart: boolean;\n subscribed: Subscribed;\n totalGap: number;\n onLongPress: (event: EditEvent) => void;\n}\n\nexport default memo(OperatorEvent);\nfunction OperatorEvent({\n id,\n colour,\n cue,\n main,\n secondary,\n timeStart,\n duration,\n delay,\n dayOffset,\n isLinkedToLoaded,\n isSelected,\n isPast,\n selectedRef,\n showStart,\n subscribed,\n totalGap,\n onLongPress,\n}: OperatorEventProps) {\n /**\n * gather behaviour for long press and context menu\n */\n const handleLongPress = (event?: SyntheticEvent) => {\n // prevent default if the event is cancelable to avoid browser intervention warnings\n if (event && event.cancelable) {\n event.preventDefault();\n }\n if (subscribed) {\n onLongPress({ id, cue, subscriptions: subscribed });\n }\n };\n\n const mouseHandlers = useLongPress(handleLongPress);\n const cueColours = colour && getAccessibleColour(colour);\n\n const operatorClasses = cx([style.event, isSelected && style.running, isPast && style.past]);\n\n const hasFields = subscribed.some((field) => field.value);\n const columnCount = subscribed.length ? Math.min(subscribed.length, 4) : 0;\n const fieldGridStyle =\n columnCount > 0\n ? ({\n gridTemplateColumns: `repeat(${columnCount}, minmax(12rem, 1fr))`,\n } satisfies CSSProperties)\n : undefined;\n\n return (\n <div\n className={operatorClasses}\n data-testid={cue}\n ref={selectedRef}\n onContextMenu={handleLongPress}\n {...mouseHandlers}\n >\n <div className={style.binder} style={{ ...cueColours }}>\n <span className={style.cue}>{cue}</span>\n </div>\n\n <span className={style.mainField}>\n {showStart && <SuperscriptPeriod className={style.plannedStart} time={formatTime(timeStart)} />}\n {main}\n </span>\n <span className={style.secondaryField}>{secondary}</span>\n <OperatorEventSchedule\n timeStart={timeStart}\n isPast={isPast}\n isSelected={isSelected}\n delay={delay}\n dayOffset={dayOffset}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n />\n <span className={style.runningTime}>\n <DelayIndicator delayValue={delay} />\n <RunningTime className={cx([isSelected && style.muted])} value={duration} hideLeadingZero />\n </span>\n\n <div className={cx([style.fields, hasFields && style.fieldsWithContent])} style={fieldGridStyle}>\n {subscribed.map((field) => {\n if (!field.value) {\n return <div key={field.id} />;\n }\n return (\n <div key={field.id}>\n <span\n className={cx([style.field, !field.colour && style.noColour])}\n style={{ backgroundColor: field.colour }}\n >\n {field.label}\n </span>\n <span className={style.value} style={{ color: field.colour }}>\n {field.value}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\ninterface OperatorEventScheduleProps {\n timeStart: number;\n isPast: boolean;\n isSelected: boolean;\n delay: number;\n dayOffset: number;\n totalGap: number;\n isLinkedToLoaded: boolean;\n}\nfunction OperatorEventSchedule({\n timeStart,\n isPast,\n isSelected,\n delay,\n dayOffset,\n totalGap,\n isLinkedToLoaded,\n}: OperatorEventScheduleProps) {\n if (isPast) {\n return <span className={style.timeUntil}>DONE</span>;\n }\n\n if (isSelected) {\n return <span className={style.timeUntil}>LIVE</span>;\n }\n\n return (\n <TimeUntil\n timeStart={timeStart}\n delay={delay}\n dayOffset={dayOffset}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n />\n );\n}\n\ninterface TimeUntilProps {\n timeStart: number;\n delay: number;\n dayOffset: number;\n totalGap: number;\n isLinkedToLoaded: boolean;\n}\nfunction TimeUntil({ timeStart, delay, dayOffset, totalGap, isLinkedToLoaded }: TimeUntilProps) {\n // we isolate this to avoid unnecessary re-renders\n const timeUntil = useTimeUntilExpectedStart({ timeStart, delay, dayOffset }, { totalGap, isLinkedToLoaded });\n\n const isDue = timeUntil < MILLIS_PER_SECOND;\n const timeUntilString = isDue ? 'DUE' : `${formatDuration(Math.abs(timeUntil), timeUntil > 2 * MILLIS_PER_MINUTE)}`;\n\n return (\n <span className={style.timeUntil} data-testid='time-until'>\n {timeUntilString}\n </span>\n );\n}\n","import { memo } from 'react';\n\nimport style from './OperatorGroup.module.scss';\n\ninterface OperatorGroup {\n title: string;\n}\n\nexport default memo(OperatorGroup);\nfunction OperatorGroup({ title }: OperatorGroup) {\n return <div className={style.group}>{title}</div>;\n}\n","import { ViewSettings } from 'ontime-types';\n\nimport MultiPartProgressBar from '../../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport { useProgressData } from '../../../common/hooks/useSocket';\n\nimport styles from './StatusBar.module.scss';\n\ninterface StatusBarProgressProps {\n viewSettings: ViewSettings;\n}\n\nexport default function StatusBarProgress({ viewSettings }: StatusBarProgressProps) {\n const { current, duration, timeWarning, timeDanger } = useProgressData();\n\n return (\n <MultiPartProgressBar\n now={current}\n complete={duration}\n normalColor={viewSettings.normalColor}\n warning={timeWarning}\n warningColor={viewSettings.warningColor}\n danger={timeDanger}\n dangerColor={viewSettings.dangerColor}\n className={styles.progressOverride}\n ignoreCssOverride\n />\n );\n}\n","import { ClockOverview, TimerOverview } from '../../overview/composite/TimeElements';\n\nimport style from './StatusBar.module.scss';\n\nexport default function StatusBarTimers() {\n return (\n <div className={style.timers}>\n <TimerOverview className={style.runningTimer} />\n <ClockOverview className={style.timeNow} shouldFormat />\n </div>\n );\n}\n","import useViewSettings from '../../../common/hooks-query/useViewSettings';\n\nimport StatusBarProgress from './StatusBarProgress';\nimport StatusBarTimers from './StatusBarTimers';\n\nimport styles from './StatusBar.module.scss';\n\nexport default function StatusBar() {\n const { data } = useViewSettings();\n\n return (\n <div className={styles.statusBar}>\n <StatusBarTimers />\n {data && <StatusBarProgress viewSettings={data} />}\n </div>\n );\n}\n","import { use, useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\nimport { CustomFields, EntryId, OntimeEvent } from 'ontime-types';\n\nimport { getTimeOption } from '../../common/components/view-params-editor/common.options';\nimport { OptionTitle } from '../../common/components/view-params-editor/constants';\nimport { ViewOption } from '../../common/components/view-params-editor/viewParams.types';\nimport {\n makeCustomFieldSelectOptions,\n makeOptionsFromCustomFields,\n} from '../../common/components/view-params-editor/viewParams.utils';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport { isStringBoolean } from '../viewers/common/viewUtils';\n\nexport const getOperatorOptions = (customFields: CustomFields, timeFormat: string): ViewOption[] => {\n const fieldOptions = makeOptionsFromCustomFields(customFields, [\n { value: 'none', label: 'None' },\n { value: 'title', label: 'Title' },\n { value: 'note', label: 'Note' },\n ]);\n const customFieldSelect = makeCustomFieldSelectOptions(customFields);\n\n return [\n { title: OptionTitle.ClockOptions, collapsible: true, options: [getTimeOption(timeFormat)] },\n {\n title: OptionTitle.DataSources,\n collapsible: true,\n options: [\n {\n id: 'main',\n title: 'Main data field',\n description: 'Field to be shown in the first line of text',\n type: 'option',\n values: fieldOptions,\n defaultValue: 'title',\n },\n {\n id: 'secondary-src',\n title: 'Secondary data field',\n description: 'Field to be shown in the second line of text',\n type: 'option',\n values: fieldOptions,\n defaultValue: 'none',\n },\n {\n id: 'subscribe',\n title: 'Highlight Fields',\n description: 'Choose custom fields to highlight',\n type: 'multi-option',\n values: customFieldSelect,\n },\n {\n id: 'shouldEdit',\n title: 'Edit custom field',\n description: 'Allows editing an highlighted custom field by long pressing',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n {\n title: OptionTitle.ElementVisibility,\n collapsible: true,\n options: [\n {\n id: 'hidePast',\n title: 'Hide Past Events',\n description: 'Whether to hide events that have passed',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'showStart',\n title: 'Show planned start',\n description: 'Whether to prepend the planned start to the items',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n ];\n};\n\ntype OperatorOptions = {\n mainSource: keyof OntimeEvent | null;\n secondarySource: keyof OntimeEvent | null;\n subscribe: string[];\n shouldEdit: boolean;\n hidePast: boolean;\n showStart: boolean;\n};\n\n/**\n * Utility extract the view options from URL Params\n * the names and fallback are manually matched with timerOptions\n */\nfunction getOptionsFromParams(searchParams: URLSearchParams, defaultValues?: URLSearchParams): OperatorOptions {\n // Helper to get value from either source, prioritizing defaultValues\n const getValue = (key: string) => defaultValues?.get(key) ?? searchParams.get(key);\n\n // Helper to get array values from either source\n const getArrayValues = (key: string): EntryId[] => {\n if (defaultValues?.has(key)) {\n return defaultValues.getAll(key) as EntryId[];\n }\n return searchParams.getAll(key) as EntryId[];\n };\n\n // we manually make an object that matches the key above\n return {\n mainSource: getValue('main') as keyof OntimeEvent | null,\n secondarySource: getValue('secondary-src') as keyof OntimeEvent | null,\n subscribe: getArrayValues('subscribe'),\n shouldEdit: isStringBoolean(getValue('shouldEdit')),\n hidePast: isStringBoolean(getValue('hidePast')),\n showStart: isStringBoolean(getValue('showStart')),\n };\n}\n\n/**\n * Hook exposes the operator view options\n */\nexport function useOperatorOptions(): OperatorOptions {\n const [searchParams] = useSearchParams();\n const maybePreset = use(PresetContext);\n\n const options = useMemo(() => {\n const defaultValues = maybePreset ? new URLSearchParams(maybePreset.search) : undefined;\n return getOptionsFromParams(searchParams, defaultValues);\n }, [maybePreset, searchParams]);\n\n return options;\n}\n","import { CustomFields, MaybeString, OntimeEvent } from 'ontime-types';\r\n\r\nimport { getPropertyValue } from '../viewers/common/viewUtils';\r\n\r\nimport type { Subscribed } from './operator.types';\r\n\r\nexport function getEventData(\r\n event: OntimeEvent,\r\n main: MaybeString,\r\n secondary: MaybeString,\r\n subscriptions: string[],\r\n customFields: CustomFields,\r\n) {\r\n const mainField = main ? getPropertyValue(event, main) ?? '' : event.title;\r\n const secondaryField = getPropertyValue(event, secondary) ?? '';\r\n\r\n // remove subscriptions that are not in customFields\r\n const sanitisedSubscriptions = subscriptions.filter((field) => Object.hasOwn(customFields, field));\r\n const subscribedData = sanitisedSubscriptions.reduce<Subscribed>((acc, id) => {\r\n const field = customFields[id];\r\n if (field) {\r\n acc.push({\r\n id,\r\n label: field.label,\r\n colour: field.colour,\r\n value: event.custom[id],\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n\r\n return { mainField, secondaryField, subscribedData };\r\n}\r\n","import { CustomFields, Rundown, Settings } from 'ontime-types';\n\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport { useRundownWithMetadata } from '../../common/hooks-query/useRundown';\nimport useSettings from '../../common/hooks-query/useSettings';\nimport { RundownMetadataObject } from '../../common/utils/rundownMetadata';\nimport { aggregateQueryStatus, ViewData } from '../../views/utils/viewLoader.utils';\n\nexport interface OperatorData {\n rundown: Rundown;\n rundownMetadata: RundownMetadataObject;\n customFields: CustomFields;\n settings: Settings;\n}\n\nexport function useOperatorData(): ViewData<OperatorData> {\n const { data: rundown, rundownMetadata, status: rundownStatus } = useRundownWithMetadata();\n const { data: customFields, status: customFieldStatus } = useCustomFields();\n const { data: settings, status: settingsStatus } = useSettings();\n\n return {\n data: {\n rundown,\n rundownMetadata,\n customFields,\n settings,\n },\n status: aggregateQueryStatus([rundownStatus, customFieldStatus, settingsStatus]),\n };\n}\n","import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { isOntimeEvent, isOntimeGroup, OntimeView } from 'ontime-types';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport useFollowComponent from '../../common/hooks/useFollowComponent';\nimport { useSelectedEventId } from '../../common/hooks/useSocket';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { cx } from '../../common/utils/styleUtils';\nimport { throttle } from '../../common/utils/throttle';\nimport { getDefaultFormat } from '../../common/utils/time';\nimport { isTouchDevice } from '../../externals';\nimport Loader from '../../views/common/loader/Loader';\n\nimport EditModal from './edit-modal/EditModal';\nimport FollowButton from './follow-button/FollowButton';\nimport OperatorEvent from './operator-event/OperatorEvent';\nimport OperatorGroup from './operator-group/OperatorGroup';\nimport StatusBar from './status-bar/StatusBar';\nimport { getOperatorOptions, useOperatorOptions } from './operator.options';\nimport type { EditEvent } from './operator.types';\nimport { getEventData } from './operator.utils';\nimport { OperatorData, useOperatorData } from './useOperatorData';\n\nimport style from './Operator.module.scss';\n\nconst selectedOffset = 50;\n\nexport default function OperatorLoader() {\n const { data, status } = useOperatorData();\n\n useWindowTitle('Operator');\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 <Operator {...data} />;\n}\n\nfunction Operator({ rundown, rundownMetadata, customFields, settings }: OperatorData) {\n const { selectedEventId } = useSelectedEventId();\n const { subscribe, mainSource, secondarySource, shouldEdit, hidePast, showStart } = useOperatorOptions();\n\n const [showEditPrompt, setShowEditPrompt] = useState(false);\n const [editEvent, setEditEvent] = useState<EditEvent | null>(null);\n\n const [lockAutoScroll, setLockAutoScroll] = useState(false);\n const selectedRef = useRef<HTMLDivElement | null>(null);\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const scrollToComponent = useFollowComponent({\n followRef: selectedRef,\n scrollRef,\n doFollow: !lockAutoScroll,\n topOffset: selectedOffset,\n followTrigger: selectedEventId,\n });\n\n const timeoutId = useRef<NodeJS.Timeout | null>(null);\n\n // reset scroll if nothing is selected\n useEffect(() => {\n if (!selectedEventId) {\n if (!lockAutoScroll) {\n scrollRef.current?.scrollTo(0, 0);\n }\n }\n }, [selectedEventId, lockAutoScroll, scrollRef]);\n\n const handleOffset = () => {\n if (selectedEventId) {\n scrollToComponent();\n }\n setLockAutoScroll(false);\n };\n\n // prevent considering automated scrolls as user scrolls\n const handleUserScroll = () => {\n if (selectedRef?.current && scrollRef?.current) {\n const selectedRect = selectedRef.current.getBoundingClientRect();\n const scrollerRect = scrollRef.current.getBoundingClientRect();\n if (selectedRect && scrollerRect) {\n const distanceFromTop = selectedRect.top - scrollerRect.top;\n const hasScrolledOutOfThreshold = distanceFromTop < -8 || distanceFromTop > selectedOffset;\n setLockAutoScroll(hasScrolledOutOfThreshold);\n }\n }\n };\n const throttledHandleScroll = throttle(handleUserScroll, 1000);\n\n const handleScroll = () => {\n if (timeoutId.current) {\n clearTimeout(timeoutId.current);\n }\n timeoutId.current = setTimeout(() => {\n setShowEditPrompt(false);\n }, 700);\n\n setShowEditPrompt(true);\n\n throttledHandleScroll();\n };\n\n const handleEdit = useCallback((event: EditEvent) => {\n setEditEvent({ ...event });\n }, []);\n\n // gather option data\n const defaultFormat = getDefaultFormat(settings?.timeFormat);\n const operatorOptions = useMemo(() => getOperatorOptions(customFields, defaultFormat), [customFields, defaultFormat]);\n\n const canEdit = shouldEdit && subscribe.length;\n\n return (\n <div className={style.operatorContainer} data-testid='operator-view'>\n <ViewParamsEditor target={OntimeView.Operator} viewOptions={operatorOptions} />\n {editEvent && <EditModal event={editEvent} onClose={() => setEditEvent(null)} />}\n\n <StatusBar />\n\n {canEdit && (\n <div className={cx([style.editPrompt, showEditPrompt && style.show])}>\n {isTouchDevice ? 'Press and hold to edit user field' : 'Right click to edit user field'}\n </div>\n )}\n\n <div className={style.operatorEvents} onWheel={handleScroll} onTouchMove={handleScroll} ref={scrollRef}>\n {rundown.order.map((entryId) => {\n const entry = rundown.entries[entryId];\n if (isOntimeEvent(entry)) {\n const { isPast, isLinkedToLoaded, isLoaded, totalGap } = rundownMetadata[entryId];\n // hide past events (if setting) and skipped events\n if ((hidePast && isPast) || entry.skip) {\n return null;\n }\n\n const { mainField, secondaryField, subscribedData } = getEventData(\n entry,\n mainSource,\n secondarySource,\n subscribe,\n customFields,\n );\n\n return (\n <OperatorEvent\n key={entry.id}\n id={entry.id}\n colour={entry.colour}\n cue={entry.cue}\n main={mainField}\n secondary={secondaryField}\n timeStart={entry.timeStart}\n duration={entry.duration}\n delay={entry.delay}\n dayOffset={entry.dayOffset}\n isLinkedToLoaded={isLinkedToLoaded}\n isSelected={isLoaded}\n isPast={isPast}\n selectedRef={isLoaded ? selectedRef : undefined}\n showStart={showStart}\n subscribed={subscribedData}\n totalGap={totalGap}\n onLongPress={canEdit ? handleEdit : () => undefined}\n />\n );\n }\n\n if (isOntimeGroup(entry)) {\n const { isPast } = rundownMetadata[entry.id];\n\n const isCurrentParent = selectedEventId ? rundownMetadata[selectedEventId].groupId === entry.id : false;\n\n if (hidePast && isPast && !isCurrentParent) {\n return null;\n }\n\n return (\n <Fragment key={entry.id}>\n <OperatorGroup key={entry.id} title={entry.title} />\n {entry.entries.map((nestedEntryId) => {\n const nestedEntry = rundown.entries[nestedEntryId];\n if (!isOntimeEvent(nestedEntry)) {\n return null;\n }\n\n const { isPast, isLoaded, isLinkedToLoaded, totalGap } = rundownMetadata[nestedEntryId];\n\n // hide past events (if setting) and skipped events\n if ((hidePast && isPast) || nestedEntry.skip) {\n return null;\n }\n\n const { mainField, secondaryField, subscribedData } = getEventData(\n nestedEntry,\n mainSource,\n secondarySource,\n subscribe,\n customFields,\n );\n\n return (\n <OperatorEvent\n key={nestedEntry.id}\n id={nestedEntry.id}\n colour={nestedEntry.colour}\n cue={nestedEntry.cue}\n main={mainField}\n secondary={secondaryField}\n timeStart={nestedEntry.timeStart}\n duration={nestedEntry.duration}\n delay={nestedEntry.delay}\n dayOffset={nestedEntry.dayOffset}\n isLinkedToLoaded={isLinkedToLoaded}\n isSelected={isLoaded}\n isPast={isPast}\n selectedRef={isLoaded ? selectedRef : undefined}\n showStart={showStart}\n subscribed={subscribedData}\n totalGap={totalGap}\n onLongPress={canEdit ? handleEdit : () => undefined}\n />\n );\n })}\n </Fragment>\n );\n }\n return null;\n })}\n </div>\n <FollowButton isVisible={lockAutoScroll} onClickHandler={handleOffset} />\n </div>\n );\n}\n","import ProtectRoute from '../../common/components/protect-route/ProtectRoute';\n\nimport Operator from './Operator';\n\nexport default function OperatorExport() {\n return (\n <ProtectRoute permission='operator'>\n <Operator />\n </ProtectRoute>\n );\n}\n"],"names":["EditModal","props","event","onClose","updateEntry","useEntryActions","loading","setLoading","useState","inputRef","useRef","Array","handleSave","current","patchObject","id","forEach","element","dataset","field","defaultValue","value","custom","Object","assign","Dialog.Root","isOpen","jsx","Dialog.Portal","jsxs","Dialog.Popup","style","editModal","title","cue","IconButton","IoClose","body","subscriptions","map","Fragment","label","colour","Textarea","push","footer","Button","useLongPress","onLongPress","options","threshold","onStart","onFinish","onCancel","isLongPressActive","isPressed","timeout","useEffect","window","clearTimeout","useMemo","start","isMouseEvent","isTouchEvent","setTimeout","cancel","onMouseDown","onMouseUp","onMouseLeave","onTouchStart","onTouchEnd","onTouchMove","throttle","TouchEvent","nativeEvent","MouseEvent","RunningTime","hideSeconds","hideLeadingZero","className","display","formattedTime","removeLeadingZero","removeSeconds","memo","OperatorEvent","main","secondary","timeStart","duration","delay","dayOffset","isLinkedToLoaded","isSelected","isPast","selectedRef","showStart","subscribed","totalGap","handleLongPress","cancelable","preventDefault","mouseHandlers","cueColours","getAccessibleColour","operatorClasses","cx","running","past","hasFields","some","columnCount","length","Math","min","fieldGridStyle","gridTemplateColumns","undefined","binder","mainField","SuperscriptPeriod","plannedStart","formatTime","secondaryField","OperatorEventSchedule","runningTime","DelayIndicator","muted","fields","fieldsWithContent","noColour","backgroundColor","color","timeUntil","TimeUntil","useTimeUntilExpectedStart","timeUntilString","MILLIS_PER_SECOND","formatDuration","abs","MILLIS_PER_MINUTE","OperatorGroup","group","StatusBarProgress","viewSettings","timeWarning","timeDanger","useProgressData","MultiPartProgressBar","normalColor","warningColor","dangerColor","styles","progressOverride","StatusBarTimers","timers","TimerOverview","runningTimer","ClockOverview","timeNow","StatusBar","data","useViewSettings","statusBar","getOperatorOptions","customFields","timeFormat","fieldOptions","makeOptionsFromCustomFields","customFieldSelect","makeCustomFieldSelectOptions","OptionTitle","ClockOptions","collapsible","getTimeOption","DataSources","description","type","values","ElementVisibility","getOptionsFromParams","searchParams","defaultValues","getValue","key","get","getArrayValues","has","getAll","mainSource","secondarySource","subscribe","shouldEdit","isStringBoolean","hidePast","useOperatorOptions","useSearchParams","maybePreset","use","PresetContext","URLSearchParams","search","getEventData","getPropertyValue","subscribedData","filter","hasOwn","reduce","acc","useOperatorData","rundown","rundownMetadata","status","rundownStatus","useRundownWithMetadata","customFieldStatus","useCustomFields","settings","settingsStatus","useSettings","aggregateQueryStatus","selectedOffset","OperatorLoader","useWindowTitle","Loader","EmptyPage","Operator","selectedEventId","useSelectedEventId","showEditPrompt","setShowEditPrompt","editEvent","setEditEvent","lockAutoScroll","setLockAutoScroll","scrollRef","scrollToComponent","useFollowComponent","followRef","doFollow","topOffset","followTrigger","timeoutId","scrollTo","handleOffset","throttledHandleScroll","handleUserScroll","selectedRect","getBoundingClientRect","scrollerRect","distanceFromTop","top","hasScrolledOutOfThreshold","handleScroll","handleEdit","useCallback","defaultFormat","getDefaultFormat","operatorOptions","canEdit","operatorContainer","ViewParamsEditor","OntimeView","editPrompt","show","isTouchDevice","operatorEvents","order","entryId","entry","entries","isOntimeEvent","isLoaded","skip","isOntimeGroup","isCurrentParent","groupId","nestedEntryId","nestedEntry","FollowButton","OperatorExport","ProtectRoute"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{j as e,aY as ee,aZ as te,a_ as ae,f as se,a$ as ie,h as d,ad as re,ab as ne,ax as le}from"./vendor-BoH5HFNN.js";import{e as J,aj as oe,ag as j,at as g,b9 as z,ba as ce,as as de,O as x,ab as ue,ae as he,Z as V,af as S,ah as fe,Y as pe,a9 as ve,B as me,$ as be,ap as xe,bb as M,bc as Y,ai as je,an as ge,aw as _e,bd as we}from"./index-CDBQg2fh.js";import{I as Ce}from"./useWindowTitle-DU8NlxIu.js";import{S as Z}from"./Select-B5xNi_tM.js";import{S as _,u as ke}from"./useProjectData-DGA6K2Zs.js";import{u as ye}from"./useCustomFields-BUJkzZvM.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]="b0981087-a229-4a05-a794-23a2e8373a4d",s._sentryDebugIdIdentifier="sentry-dbid-b0981087-a229-4a05-a794-23a2e8373a4d")}catch{}})();const st=/^\d+$/,it=/^https?:\/\//,rt=/^[a-z0-9]+$/i,Se=/^[a-zA-Z0-9_-]*$/,Oe="_blink_1cc8f_1",Re="_fourtyfive_1cc8f_13",Ne="_radioGroup_1cc8f_17",$e="_item_1cc8f_23",Ie="_horizontal_1cc8f_28",De="_vertical_1cc8f_35",Ue="_radio_1cc8f_17",We="_indicator_1cc8f_73",$={blink:Oe,fourtyfive:Re,radioGroup:Ne,item:$e,horizontal:Ie,vertical:De,radio:Ue,indicator:We};function H({items:s,className:r,orientation:n="vertical",onValueChange:o,...h}){return e.jsx(ee,{onValueChange:l=>o==null?void 0:o(l),className:J([$.radioGroup,$[n],r]),...h,children:s.map(l=>e.jsxs("label",{className:$.item,children:[e.jsx(te,{value:l.value.toString(),className:$.radio,children:e.jsx(ae,{className:$.indicator})}),l.label]},l.value.toString()))})}const K={hideTableSeconds:!1,hideIndexColumn:!1,showDelayedTimes:!1,hideDelays:!1},nt=se()(ie(s=>({...K,setOption:(r,n)=>s(o=>({...o,[r]:n})),toggleOption:r=>s(n=>({...n,[r]:!n[r]})),resetOptions:()=>s(K)}),{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 Ee(s){return Object.entries(s).map(([r,n])=>({value:`custom-${r}`,label:n.label}))}const Fe="_twoCols_1wch9_17",Le="_grid_1wch9_23",G={twoCols:Fe,grid:Le};function Pe({readRef:s,writeRef:r}){const{data:n}=ye(),o=d.useMemo(()=>Ee(n),[n]),[h,l]=d.useState("full"),[u,I]=d.useState("full"),[w,C]=d.useState(()=>{const t={};return[...W,...o].forEach(i=>{t[i.value]=!0}),t}),[R,D]=d.useState(()=>{const t={};return[...W,...o].forEach(i=>{t[i.value]=!0}),t}),F=t=>{l(t),C(i=>{const f={...i};return Object.keys(f).forEach(p=>{f[p]=!0}),f})},L=t=>{t==="full"&&l("full"),I(t),C(i=>{const f={...i};return D(p=>{const k={...p};return[...W,...o].forEach(N=>{f[N.value]=!0,k[N.value]=!0}),k}),f})},c=(t,i,f)=>{i==="read"?C(p=>({...p,[t]:f})):D(p=>({...p,[t]:f}))},v=()=>h==="full"||u==="full"?"full":Object.entries(w).filter(([t,i])=>i).map(([t])=>t).join(","),P=()=>u==="full"?"full":Object.entries(R).filter(([t,i])=>i).map(([t])=>t).join(",");return e.jsxs(oe,{children:[e.jsx("input",{name:"read",hidden:!0,readOnly:!0,ref:s,value:v()||"-"}),e.jsx("input",{name:"write",hidden:!0,readOnly:!0,ref:r,value:P()||"-"}),e.jsxs("div",{children:[e.jsx(j,{title:"Access mode",description:"Which parts of the data will the link give access to"}),e.jsxs("div",{children:[e.jsx(H,{value:u,onValueChange:L,orientation:"horizontal",items:[{value:"full",label:"Full write (edit all existing and future columns)"},{value:"custom",label:"Custom write"}]}),e.jsx(H,{value:h,onValueChange:F,orientation:"horizontal",disabled:u==="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(g,{children:"Ontime columns"}),e.jsx(g,{children:"Read"}),e.jsx(g,{children:"Write"}),W.map(t=>e.jsxs(d.Fragment,{children:[e.jsx("div",{children:t.label}),e.jsx(_,{checked:!!w[t.value],onCheckedChange:i=>c(t.value,"read",i),disabled:h==="full"||u==="full","data-testid":`read-${t.value}`}),e.jsx(_,{checked:!!R[t.value],onCheckedChange:i=>c(t.value,"write",i),disabled:u==="full","data-testid":`write-${t.value}`})]},t.value))]}),o.length>0&&e.jsxs("div",{className:G.grid,children:[e.jsx(g,{children:"Custom fields"}),e.jsx(g,{children:"Read"}),e.jsx(g,{children:"Write"}),o.map(t=>e.jsxs(d.Fragment,{children:[t.label,e.jsx(_,{checked:!!w[t.value],onCheckedChange:i=>c(t.value,"read",i),disabled:h==="full"||u==="full","data-testid":`read-${t.value}`}),e.jsx(_,{checked:!!R[t.value],onCheckedChange:i=>c(t.value,"write",i),disabled:u==="full","data-testid":`write-${t.value}`})]},t.value))]})]})]})}const Te="_qrCode_1989f_17",ze="_column_1989f_23",Ge="_copiableLink_1989f_32",Be="_shareInline_1989f_39",Ae="_end_1989f_45",O={qrCode:Te,column:ze,copiableLink:Ge,shareInline:Be,end:Ae};function qe({hostOptions:s,pathOptions:r,presets:n,isLockedToView:o}){var B,A;const[h,l]=d.useState("pending"),[u,I]=d.useState(z),w=d.useRef(null),C=d.useRef(null),R=d.useRef(`cuesheet-${ce()}`),{addPreset:D}=de(),{handleSubmit:F,setError:L,watch:c,setValue:v,reset:P,register:t,formState:{errors:i,isDirty:f}}=re({mode:"onChange",defaultValues:{baseUrl:z,path:o?r[0].value:x.Timer,authenticate:!1,lockConfig:!1,lockNav:!1}}),p=async(a,y)=>{if(y.read==="-")throw new Error("Cannot create a share with no read permissions");return(await D({target:x.Cuesheet,enabled:!0,alias:a,search:"",options:{read:y.read,write:y.write}})).find(U=>U.alias===a)},k=async a=>{var y,T,U;try{if(l("loading"),a.path===x.Cuesheet){const m=await p(a.alias,{read:((y=w.current)==null?void 0:y.value)??"full",write:((T=C.current)==null?void 0:T.value)??"full"});if(!m)throw new Error("Failed to create URL preset for Cuesheet");const b=await M({baseUrl:a.baseUrl,path:a.path,authenticate:a.authenticate,lockConfig:a.lockConfig,lockNav:a.lockNav,preset:m.alias});await Y(b),I(b)}else{const m=a.path.startsWith("preset-")?a.path.replace("preset-",""):void 0,b=m?(U=n.find(X=>X.alias===m))==null?void 0:U.target:a.path;if(!b)throw new Error(`Could not resolve preset: ${b}`);const q=await M({baseUrl:a.baseUrl,path:b,authenticate:a.authenticate,lockConfig:a.lockConfig,lockNav:a.lockNav,preset:m});await Y(q),I(q)}P(a,{keepValues:!0,keepDirty:!1}),l("success")}catch(m){const b=je(m);L("root",{message:b}),l("error")}},N=f||h!=="success";return e.jsxs("form",{onSubmit:F(k),onKeyDown:a=>ue(a),children:[!o&&e.jsx(Ce,{children:"You can generate a link to share with your team or to use in automation (such as companion)."}),e.jsxs("div",{className:O.shareInline,children:[e.jsxs("div",{className:O.column,children:[e.jsxs(he,{children:[V?e.jsx("input",{hidden:!0,readOnly:!0,name:"baseUrl",value:z}):e.jsxs(S,{children:[e.jsx(j,{title:"Host IP",description:`Which IP address will be used${V?" (not applicable in Ontime Cloud)":""}`}),e.jsx(Z,{options:s,value:c("baseUrl"),onValueChange:a=>v("baseUrl",a)})]}),o?e.jsx("input",{type:"hidden",value:c("path")}):e.jsxs(S,{children:[e.jsx(j,{title:"Ontime view",description:"Which view or preset will the link point to"}),e.jsx(Z,{options:r,value:c("path"),onValueChange:a=>v("path",a,{shouldDirty:!0})})]}),c("path")===x.Cuesheet&&e.jsxs(e.Fragment,{children:[e.jsxs(S,{children:[e.jsx(j,{title:"Preset alias",description:"The name of the preset we will create to hold this options",error:(B=i.alias)==null?void 0:B.message}),e.jsx(fe,{defaultValue:R.current,...t("alias",{required:"Alias cannot be empty and must be unique",pattern:{value:Se,message:"Field can only contain URL safe characters (a-z, 0-9, _ and -)"}})})]}),e.jsx(Pe,{readRef:w,writeRef:C})]}),e.jsxs(S,{children:[e.jsx(j,{title:"Lock navigation",description:"Whether to hide the navigation menu"}),e.jsx(_,{size:"large",name:"lockNav","data-testid":"lockNav",checked:c("lockNav"),onCheckedChange:a=>v("lockNav",a,{shouldDirty:!0}),disabled:c("lockConfig")})]}),c("path")!==x.Cuesheet&&e.jsxs(S,{children:[e.jsx(j,{title:"Lock configuration",description:"Whether to hide the configuration panel (also hides navigation)"}),e.jsx(_,{size:"large",name:"lockConfig","data-testid":"lockConfig",checked:c("lockConfig"),onCheckedChange:a=>{a&&v("lockNav",a,{shouldDirty:!0}),v("lockConfig",a,{shouldDirty:!0})}})]}),e.jsxs(S,{children:[e.jsx(j,{title:"Authenticate",description:"Whether the URL should be pre-authenticated"}),e.jsx(_,{size:"large",name:"authenticate","data-testid":"authenticate",checked:c("authenticate"),onCheckedChange:a=>v("authenticate",a,{shouldDirty:!0})})]})]}),e.jsx(pe,{children:(A=i.root)==null?void 0:A.message}),e.jsx(ve,{align:"end",className:O.end,children:e.jsx(me,{type:"submit",variant:N?"primary":"subtle",loading:h==="loading",children:N?"Create share link":"Link copied to clipboard!"})})]}),e.jsxs(be,{className:O.column,children:[e.jsx(g,{children:"Share this link"}),e.jsx(ne,{size:172,value:u,className:O.qrCode}),e.jsx("div",{className:O.copiableLink,"data-testid":"copy-link",children:u}),e.jsx(xe,{copyValue:u,children:"Copy link"})]})]})]})}function lt({lockedPath:s}){const{data:r}=ge(),{data:n}=_e({skip:s===void 0}),o=d.useMemo(()=>r.networkInterfaces.map(l=>({value:`http://${l.address}:${r.serverPort}`,label:`${l.name} - ${l.address}`})),[r.networkInterfaces,r.serverPort]),h=d.useMemo(()=>s?[{value:s.value,label:s.label}]:[{value:x.Timer,label:"Timer"},{value:x.Cuesheet,label:"Cuesheet"},{value:x.Operator,label:"Operator"},{value:"<<companion>>",label:"Companion"},...n.map(l=>({value:`preset-${l.alias}`,label:`URL Preset: ${l.alias}`}))],[s,n]);return e.jsx(qe,{hostOptions:o,pathOptions:h,presets:n,isLockedToView:!!s})}const Ve="_title_1kaxc_17",Me="_description_1kaxc_27",Q={title:Ve,description:Me};function ot(){const{data:s}=ke();return!s.title&&!s.description?null:e.jsxs("div",{children:[e.jsx("div",{className:Q.title,children:s.title}),e.jsx("div",{className:Q.description,children:s.description})]})}const Ye="_overview_1p0vh_17",Ze="_isOffline_1p0vh_24",He="_info_1p0vh_24",Ke="_nav_1p0vh_39",E={overview:Ye,isOffline:Ze,info:He,nav:Ke};function ct({navElements:s,children:r}){const{isOnline:n}=we();return e.jsx("div",{className:J([E.overview,!n&&E.isOffline]),children:e.jsxs(le,{children:[e.jsx("div",{className:E.nav,children:s}),e.jsx("div",{className:E.info,children:r})]})})}export{lt as G,ct as O,H as R,ot as T,Se as a,rt as b,st as i,it as s,nt as u};
2
- //# sourceMappingURL=OverviewWrapper-1Vj3_ojX.js.map
1
+ import{j as e,aY as ee,aZ as te,a_ as ae,f as se,a$ as ie,h as d,ad as re,ab as ne,ax as le}from"./vendor-Cdwxo8bP.js";import{e as J,aj as oe,ag as j,at as g,b9 as z,ba as ce,as as de,O as x,ab as ue,ae as he,Z as V,af as S,ah as fe,Y as pe,a9 as ve,B as me,$ as be,ap as xe,bb as M,bc as Y,ai as je,an as ge,aw as _e,bd as we}from"./index-CoGiopcb.js";import{I as Ce}from"./useWindowTitle-mLKt65i7.js";import{S as Z}from"./Select-cHK8JrMG.js";import{S as _,u as ke}from"./useProjectData-B5mjXsMj.js";import{u as ye}from"./useCustomFields-CcTb-GQM.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]="04564445-ab1a-49bf-a9c9-da3a85ade8cf",s._sentryDebugIdIdentifier="sentry-dbid-04564445-ab1a-49bf-a9c9-da3a85ade8cf")}catch{}})();const st=/^\d+$/,it=/^https?:\/\//,rt=/^[a-z0-9]+$/i,Se=/^[a-zA-Z0-9_-]*$/,Oe="_blink_1cc8f_1",Re="_fourtyfive_1cc8f_13",Ne="_radioGroup_1cc8f_17",$e="_item_1cc8f_23",Ie="_horizontal_1cc8f_28",De="_vertical_1cc8f_35",Ue="_radio_1cc8f_17",We="_indicator_1cc8f_73",$={blink:Oe,fourtyfive:Re,radioGroup:Ne,item:$e,horizontal:Ie,vertical:De,radio:Ue,indicator:We};function H({items:s,className:r,orientation:n="vertical",onValueChange:o,...h}){return e.jsx(ee,{onValueChange:l=>o==null?void 0:o(l),className:J([$.radioGroup,$[n],r]),...h,children:s.map(l=>e.jsxs("label",{className:$.item,children:[e.jsx(te,{value:l.value.toString(),className:$.radio,children:e.jsx(ae,{className:$.indicator})}),l.label]},l.value.toString()))})}const K={hideTableSeconds:!1,hideIndexColumn:!1,showDelayedTimes:!1,hideDelays:!1},nt=se()(ie(s=>({...K,setOption:(r,n)=>s(o=>({...o,[r]:n})),toggleOption:r=>s(n=>({...n,[r]:!n[r]})),resetOptions:()=>s(K)}),{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 Ee(s){return Object.entries(s).map(([r,n])=>({value:`custom-${r}`,label:n.label}))}const Fe="_twoCols_1wch9_17",Le="_grid_1wch9_23",G={twoCols:Fe,grid:Le};function Pe({readRef:s,writeRef:r}){const{data:n}=ye(),o=d.useMemo(()=>Ee(n),[n]),[h,l]=d.useState("full"),[u,I]=d.useState("full"),[w,C]=d.useState(()=>{const t={};return[...W,...o].forEach(i=>{t[i.value]=!0}),t}),[R,D]=d.useState(()=>{const t={};return[...W,...o].forEach(i=>{t[i.value]=!0}),t}),F=t=>{l(t),C(i=>{const f={...i};return Object.keys(f).forEach(p=>{f[p]=!0}),f})},L=t=>{t==="full"&&l("full"),I(t),C(i=>{const f={...i};return D(p=>{const k={...p};return[...W,...o].forEach(N=>{f[N.value]=!0,k[N.value]=!0}),k}),f})},c=(t,i,f)=>{i==="read"?C(p=>({...p,[t]:f})):D(p=>({...p,[t]:f}))},v=()=>h==="full"||u==="full"?"full":Object.entries(w).filter(([t,i])=>i).map(([t])=>t).join(","),P=()=>u==="full"?"full":Object.entries(R).filter(([t,i])=>i).map(([t])=>t).join(",");return e.jsxs(oe,{children:[e.jsx("input",{name:"read",hidden:!0,readOnly:!0,ref:s,value:v()||"-"}),e.jsx("input",{name:"write",hidden:!0,readOnly:!0,ref:r,value:P()||"-"}),e.jsxs("div",{children:[e.jsx(j,{title:"Access mode",description:"Which parts of the data will the link give access to"}),e.jsxs("div",{children:[e.jsx(H,{value:u,onValueChange:L,orientation:"horizontal",items:[{value:"full",label:"Full write (edit all existing and future columns)"},{value:"custom",label:"Custom write"}]}),e.jsx(H,{value:h,onValueChange:F,orientation:"horizontal",disabled:u==="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(g,{children:"Ontime columns"}),e.jsx(g,{children:"Read"}),e.jsx(g,{children:"Write"}),W.map(t=>e.jsxs(d.Fragment,{children:[e.jsx("div",{children:t.label}),e.jsx(_,{checked:!!w[t.value],onCheckedChange:i=>c(t.value,"read",i),disabled:h==="full"||u==="full","data-testid":`read-${t.value}`}),e.jsx(_,{checked:!!R[t.value],onCheckedChange:i=>c(t.value,"write",i),disabled:u==="full","data-testid":`write-${t.value}`})]},t.value))]}),o.length>0&&e.jsxs("div",{className:G.grid,children:[e.jsx(g,{children:"Custom fields"}),e.jsx(g,{children:"Read"}),e.jsx(g,{children:"Write"}),o.map(t=>e.jsxs(d.Fragment,{children:[t.label,e.jsx(_,{checked:!!w[t.value],onCheckedChange:i=>c(t.value,"read",i),disabled:h==="full"||u==="full","data-testid":`read-${t.value}`}),e.jsx(_,{checked:!!R[t.value],onCheckedChange:i=>c(t.value,"write",i),disabled:u==="full","data-testid":`write-${t.value}`})]},t.value))]})]})]})}const Te="_qrCode_1989f_17",ze="_column_1989f_23",Ge="_copiableLink_1989f_32",Be="_shareInline_1989f_39",Ae="_end_1989f_45",O={qrCode:Te,column:ze,copiableLink:Ge,shareInline:Be,end:Ae};function qe({hostOptions:s,pathOptions:r,presets:n,isLockedToView:o}){var B,A;const[h,l]=d.useState("pending"),[u,I]=d.useState(z),w=d.useRef(null),C=d.useRef(null),R=d.useRef(`cuesheet-${ce()}`),{addPreset:D}=de(),{handleSubmit:F,setError:L,watch:c,setValue:v,reset:P,register:t,formState:{errors:i,isDirty:f}}=re({mode:"onChange",defaultValues:{baseUrl:z,path:o?r[0].value:x.Timer,authenticate:!1,lockConfig:!1,lockNav:!1}}),p=async(a,y)=>{if(y.read==="-")throw new Error("Cannot create a share with no read permissions");return(await D({target:x.Cuesheet,enabled:!0,alias:a,search:"",options:{read:y.read,write:y.write}})).find(U=>U.alias===a)},k=async a=>{var y,T,U;try{if(l("loading"),a.path===x.Cuesheet){const m=await p(a.alias,{read:((y=w.current)==null?void 0:y.value)??"full",write:((T=C.current)==null?void 0:T.value)??"full"});if(!m)throw new Error("Failed to create URL preset for Cuesheet");const b=await M({baseUrl:a.baseUrl,path:a.path,authenticate:a.authenticate,lockConfig:a.lockConfig,lockNav:a.lockNav,preset:m.alias});await Y(b),I(b)}else{const m=a.path.startsWith("preset-")?a.path.replace("preset-",""):void 0,b=m?(U=n.find(X=>X.alias===m))==null?void 0:U.target:a.path;if(!b)throw new Error(`Could not resolve preset: ${b}`);const q=await M({baseUrl:a.baseUrl,path:b,authenticate:a.authenticate,lockConfig:a.lockConfig,lockNav:a.lockNav,preset:m});await Y(q),I(q)}P(a,{keepValues:!0,keepDirty:!1}),l("success")}catch(m){const b=je(m);L("root",{message:b}),l("error")}},N=f||h!=="success";return e.jsxs("form",{onSubmit:F(k),onKeyDown:a=>ue(a),children:[!o&&e.jsx(Ce,{children:"You can generate a link to share with your team or to use in automation (such as companion)."}),e.jsxs("div",{className:O.shareInline,children:[e.jsxs("div",{className:O.column,children:[e.jsxs(he,{children:[V?e.jsx("input",{hidden:!0,readOnly:!0,name:"baseUrl",value:z}):e.jsxs(S,{children:[e.jsx(j,{title:"Host IP",description:`Which IP address will be used${V?" (not applicable in Ontime Cloud)":""}`}),e.jsx(Z,{options:s,value:c("baseUrl"),onValueChange:a=>v("baseUrl",a)})]}),o?e.jsx("input",{type:"hidden",value:c("path")}):e.jsxs(S,{children:[e.jsx(j,{title:"Ontime view",description:"Which view or preset will the link point to"}),e.jsx(Z,{options:r,value:c("path"),onValueChange:a=>v("path",a,{shouldDirty:!0})})]}),c("path")===x.Cuesheet&&e.jsxs(e.Fragment,{children:[e.jsxs(S,{children:[e.jsx(j,{title:"Preset alias",description:"The name of the preset we will create to hold this options",error:(B=i.alias)==null?void 0:B.message}),e.jsx(fe,{defaultValue:R.current,...t("alias",{required:"Alias cannot be empty and must be unique",pattern:{value:Se,message:"Field can only contain URL safe characters (a-z, 0-9, _ and -)"}})})]}),e.jsx(Pe,{readRef:w,writeRef:C})]}),e.jsxs(S,{children:[e.jsx(j,{title:"Lock navigation",description:"Whether to hide the navigation menu"}),e.jsx(_,{size:"large",name:"lockNav","data-testid":"lockNav",checked:c("lockNav"),onCheckedChange:a=>v("lockNav",a,{shouldDirty:!0}),disabled:c("lockConfig")})]}),c("path")!==x.Cuesheet&&e.jsxs(S,{children:[e.jsx(j,{title:"Lock configuration",description:"Whether to hide the configuration panel (also hides navigation)"}),e.jsx(_,{size:"large",name:"lockConfig","data-testid":"lockConfig",checked:c("lockConfig"),onCheckedChange:a=>{a&&v("lockNav",a,{shouldDirty:!0}),v("lockConfig",a,{shouldDirty:!0})}})]}),e.jsxs(S,{children:[e.jsx(j,{title:"Authenticate",description:"Whether the URL should be pre-authenticated"}),e.jsx(_,{size:"large",name:"authenticate","data-testid":"authenticate",checked:c("authenticate"),onCheckedChange:a=>v("authenticate",a,{shouldDirty:!0})})]})]}),e.jsx(pe,{children:(A=i.root)==null?void 0:A.message}),e.jsx(ve,{align:"end",className:O.end,children:e.jsx(me,{type:"submit",variant:N?"primary":"subtle",loading:h==="loading",children:N?"Create share link":"Link copied to clipboard!"})})]}),e.jsxs(be,{className:O.column,children:[e.jsx(g,{children:"Share this link"}),e.jsx(ne,{size:172,value:u,className:O.qrCode}),e.jsx("div",{className:O.copiableLink,"data-testid":"copy-link",children:u}),e.jsx(xe,{copyValue:u,children:"Copy link"})]})]})]})}function lt({lockedPath:s}){const{data:r}=ge(),{data:n}=_e({skip:s===void 0}),o=d.useMemo(()=>r.networkInterfaces.map(l=>({value:`http://${l.address}:${r.serverPort}`,label:`${l.name} - ${l.address}`})),[r.networkInterfaces,r.serverPort]),h=d.useMemo(()=>s?[{value:s.value,label:s.label}]:[{value:x.Timer,label:"Timer"},{value:x.Cuesheet,label:"Cuesheet"},{value:x.Operator,label:"Operator"},{value:"<<companion>>",label:"Companion"},...n.map(l=>({value:`preset-${l.alias}`,label:`URL Preset: ${l.alias}`}))],[s,n]);return e.jsx(qe,{hostOptions:o,pathOptions:h,presets:n,isLockedToView:!!s})}const Ve="_title_1kaxc_17",Me="_description_1kaxc_27",Q={title:Ve,description:Me};function ot(){const{data:s}=ke();return!s.title&&!s.description?null:e.jsxs("div",{children:[e.jsx("div",{className:Q.title,children:s.title}),e.jsx("div",{className:Q.description,children:s.description})]})}const Ye="_overview_1p0vh_17",Ze="_isOffline_1p0vh_24",He="_info_1p0vh_24",Ke="_nav_1p0vh_39",E={overview:Ye,isOffline:Ze,info:He,nav:Ke};function ct({navElements:s,children:r}){const{isOnline:n}=we();return e.jsx("div",{className:J([E.overview,!n&&E.isOffline]),children:e.jsxs(le,{children:[e.jsx("div",{className:E.nav,children:s}),e.jsx("div",{className:E.info,children:r})]})})}export{lt as G,ct as O,H as R,ot as T,Se as a,rt as b,st as i,it as s,nt as u};
2
+ //# sourceMappingURL=OverviewWrapper-D1hUkrRi.js.map