@getontime/cli 4.4.2 → 4.5.0

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 (370) hide show
  1. package/client/assets/{Backstage-BdrcXNr9.js → Backstage-DQu8ne-1.js} +2 -2
  2. package/client/assets/Backstage-DQu8ne-1.js.br +0 -0
  3. package/client/assets/Backstage-DQu8ne-1.js.gz +0 -0
  4. package/client/assets/{Backstage-BdrcXNr9.js.map → Backstage-DQu8ne-1.js.map} +1 -1
  5. package/client/assets/{Countdown-DQM2ppPg.js → Countdown-COte1yne.js} +2 -2
  6. package/client/assets/Countdown-COte1yne.js.br +0 -0
  7. package/client/assets/Countdown-COte1yne.js.gz +0 -0
  8. package/client/assets/{Countdown-DQM2ppPg.js.map → Countdown-COte1yne.js.map} +1 -1
  9. package/client/assets/CuesheetTable-BQfxAp-I.js +2 -0
  10. package/client/assets/CuesheetTable-BQfxAp-I.js.br +0 -0
  11. package/client/assets/CuesheetTable-BQfxAp-I.js.gz +0 -0
  12. package/client/assets/CuesheetTable-BQfxAp-I.js.map +1 -0
  13. package/client/assets/CustomTranslationModal-C5mAtBjW.js +2 -0
  14. package/client/assets/CustomTranslationModal-C5mAtBjW.js.br +0 -0
  15. package/client/assets/CustomTranslationModal-C5mAtBjW.js.gz +0 -0
  16. package/client/assets/{CustomTranslationModal-CML7Vsot.js.map → CustomTranslationModal-C5mAtBjW.js.map} +1 -1
  17. package/client/assets/{DelayIndicator-DKS6mZdB.js → DelayIndicator-B0cudY9N.js} +2 -2
  18. package/client/assets/DelayIndicator-B0cudY9N.js.br +0 -0
  19. package/client/assets/DelayIndicator-B0cudY9N.js.gz +0 -0
  20. package/client/assets/DelayIndicator-B0cudY9N.js.map +1 -0
  21. package/client/assets/{EditorFeatureWrapper-C1vLQxiy.js → EditorFeatureWrapper-DpDaCaJ3.js} +2 -2
  22. package/client/assets/EditorFeatureWrapper-DpDaCaJ3.js.br +0 -0
  23. package/client/assets/EditorFeatureWrapper-DpDaCaJ3.js.gz +0 -0
  24. package/client/assets/{EditorFeatureWrapper-C1vLQxiy.js.map → EditorFeatureWrapper-DpDaCaJ3.js.map} +1 -1
  25. package/client/assets/{EditorUtils-BLcTuWz1.js → EditorUtils-k5KpETPG.js} +2 -2
  26. package/client/assets/EditorUtils-k5KpETPG.js.br +0 -0
  27. package/client/assets/EditorUtils-k5KpETPG.js.gz +0 -0
  28. package/client/assets/{EditorUtils-BLcTuWz1.js.map → EditorUtils-k5KpETPG.js.map} +1 -1
  29. package/client/assets/EmptyPage-aTb22KTq.js +2 -0
  30. package/client/assets/EmptyPage-aTb22KTq.js.br +0 -0
  31. package/client/assets/EmptyPage-aTb22KTq.js.gz +0 -0
  32. package/client/assets/{EmptyPage-CYVrjOvI.js.map → EmptyPage-aTb22KTq.js.map} +1 -1
  33. package/client/assets/{FollowButton-DcSbb4R_.js → FollowButton--Bj9S6jO.js} +2 -2
  34. package/client/assets/FollowButton--Bj9S6jO.js.br +0 -0
  35. package/client/assets/FollowButton--Bj9S6jO.js.gz +0 -0
  36. package/client/assets/{FollowButton-DcSbb4R_.js.map → FollowButton--Bj9S6jO.js.map} +1 -1
  37. package/client/assets/MessageControlExport-BN6OfADo.js +3 -0
  38. package/client/assets/MessageControlExport-BN6OfADo.js.br +0 -0
  39. package/client/assets/MessageControlExport-BN6OfADo.js.gz +0 -0
  40. package/client/assets/{MessageControlExport-BgT9JaXk.js.map → MessageControlExport-BN6OfADo.js.map} +1 -1
  41. package/client/assets/{MultiPartProgressBar-W2a-JWPY.js → MultiPartProgressBar-BlLJNQ0D.js} +2 -2
  42. package/client/assets/MultiPartProgressBar-BlLJNQ0D.js.br +0 -0
  43. package/client/assets/MultiPartProgressBar-BlLJNQ0D.js.gz +0 -0
  44. package/client/assets/{MultiPartProgressBar-W2a-JWPY.js.map → MultiPartProgressBar-BlLJNQ0D.js.map} +1 -1
  45. package/client/assets/{OperatorExport-CbWojpp6.js → OperatorExport-CmgIl1lz.js} +2 -2
  46. package/client/assets/OperatorExport-CmgIl1lz.js.br +0 -0
  47. package/client/assets/OperatorExport-CmgIl1lz.js.gz +0 -0
  48. package/client/assets/OperatorExport-CmgIl1lz.js.map +1 -0
  49. package/client/assets/OverviewWrapper-B4nU68Eq.js +2 -0
  50. package/client/assets/OverviewWrapper-B4nU68Eq.js.br +0 -0
  51. package/client/assets/OverviewWrapper-B4nU68Eq.js.gz +0 -0
  52. package/client/assets/{OverviewWrapper-B2i8d3rt.js.map → OverviewWrapper-B4nU68Eq.js.map} +1 -1
  53. package/client/assets/OverviewWrapper-fPfl6o_p.css +1 -0
  54. package/client/assets/OverviewWrapper-fPfl6o_p.css.br +0 -0
  55. package/client/assets/OverviewWrapper-fPfl6o_p.css.gz +0 -0
  56. package/client/assets/{PipHost-Dz2oy7XG.js → PipHost-BZy7ouDv.js} +2 -2
  57. package/client/assets/PipHost-BZy7ouDv.js.br +0 -0
  58. package/client/assets/PipHost-BZy7ouDv.js.gz +0 -0
  59. package/client/assets/{PipHost-Dz2oy7XG.js.map → PipHost-BZy7ouDv.js.map} +1 -1
  60. package/client/assets/{ProjectInfo-BR_7Hp5u.js → ProjectInfo-D0X9vdIX.js} +2 -2
  61. package/client/assets/ProjectInfo-D0X9vdIX.js.br +0 -0
  62. package/client/assets/ProjectInfo-D0X9vdIX.js.gz +0 -0
  63. package/client/assets/{ProjectInfo-BR_7Hp5u.js.map → ProjectInfo-D0X9vdIX.js.map} +1 -1
  64. package/client/assets/ProtectRoute-DSilyhst.js +2 -0
  65. package/client/assets/ProtectRoute-DSilyhst.js.br +0 -0
  66. package/client/assets/ProtectRoute-DSilyhst.js.gz +0 -0
  67. package/client/assets/{ProtectRoute-Bxq6q7ba.js.map → ProtectRoute-DSilyhst.js.map} +1 -1
  68. package/client/assets/ProtectedCuesheet-DRTfZTZN.js +2 -0
  69. package/client/assets/ProtectedCuesheet-DRTfZTZN.js.br +0 -0
  70. package/client/assets/ProtectedCuesheet-DRTfZTZN.js.gz +0 -0
  71. package/client/assets/ProtectedCuesheet-DRTfZTZN.js.map +1 -0
  72. package/client/assets/ProtectedEditor-DNOiQqIU.js +3 -0
  73. package/client/assets/ProtectedEditor-DNOiQqIU.js.br +0 -0
  74. package/client/assets/ProtectedEditor-DNOiQqIU.js.gz +0 -0
  75. package/client/assets/ProtectedEditor-DNOiQqIU.js.map +1 -0
  76. package/client/assets/ProtectedEditor-DyaLP0mG.css +1 -0
  77. package/client/assets/ProtectedEditor-DyaLP0mG.css.br +0 -0
  78. package/client/assets/ProtectedEditor-DyaLP0mG.css.gz +0 -0
  79. package/client/assets/{RundownExport-25orDQIW.js → RundownExport-Bvc1J50m.js} +2 -2
  80. package/client/assets/RundownExport-Bvc1J50m.js.br +0 -0
  81. package/client/assets/RundownExport-Bvc1J50m.js.gz +0 -0
  82. package/client/assets/RundownExport-Bvc1J50m.js.map +1 -0
  83. package/client/assets/{Select-BnGTAeXJ.js → Select-CvUrsmYI.js} +2 -2
  84. package/client/assets/Select-CvUrsmYI.js.br +0 -0
  85. package/client/assets/Select-CvUrsmYI.js.gz +0 -0
  86. package/client/assets/{Select-BnGTAeXJ.js.map → Select-CvUrsmYI.js.map} +1 -1
  87. package/client/assets/{Studio-BK2Klo_K.js → Studio-BSSiKd6k.js} +2 -2
  88. package/client/assets/Studio-BSSiKd6k.js.br +0 -0
  89. package/client/assets/Studio-BSSiKd6k.js.gz +0 -0
  90. package/client/assets/{Studio-BK2Klo_K.js.map → Studio-BSSiKd6k.js.map} +1 -1
  91. package/client/assets/{StyleEditor-DIHQ1PUV.js → StyleEditor-buc-zQHR.js} +2 -2
  92. package/client/assets/StyleEditor-buc-zQHR.js.br +0 -0
  93. package/client/assets/StyleEditor-buc-zQHR.js.gz +0 -0
  94. package/client/assets/{StyleEditor-DIHQ1PUV.js.map → StyleEditor-buc-zQHR.js.map} +1 -1
  95. package/client/assets/{SuperscriptPeriod-EEedc9rG.js → SuperscriptPeriod-CSX8zFgq.js} +2 -2
  96. package/client/assets/SuperscriptPeriod-CSX8zFgq.js.br +0 -0
  97. package/client/assets/SuperscriptPeriod-CSX8zFgq.js.gz +0 -0
  98. package/client/assets/{SuperscriptPeriod-EEedc9rG.js.map → SuperscriptPeriod-CSX8zFgq.js.map} +1 -1
  99. package/client/assets/{SuperscriptTime-BVanhNvd.js → SuperscriptTime-retbmT5o.js} +2 -2
  100. package/client/assets/SuperscriptTime-retbmT5o.js.br +0 -0
  101. package/client/assets/SuperscriptTime-retbmT5o.js.gz +0 -0
  102. package/client/assets/{SuperscriptTime-BVanhNvd.js.map → SuperscriptTime-retbmT5o.js.map} +1 -1
  103. package/client/assets/SwatchPicker-DuWAohyD.js +2 -0
  104. package/client/assets/SwatchPicker-DuWAohyD.js.br +0 -0
  105. package/client/assets/SwatchPicker-DuWAohyD.js.gz +0 -0
  106. package/client/assets/{SwatchPicker-Ckpchvjo.js.map → SwatchPicker-DuWAohyD.js.map} +1 -1
  107. package/client/assets/TimeElements-BfxdLkpO.js +2 -0
  108. package/client/assets/TimeElements-BfxdLkpO.js.br +0 -0
  109. package/client/assets/TimeElements-BfxdLkpO.js.gz +0 -0
  110. package/client/assets/{TimeElements-CYIgGk0T.js.map → TimeElements-BfxdLkpO.js.map} +1 -1
  111. package/client/assets/{TimeInput-Cwl9vLWA.js → TimeInput-BjOTgjcv.js} +2 -2
  112. package/client/assets/TimeInput-BjOTgjcv.js.br +0 -0
  113. package/client/assets/TimeInput-BjOTgjcv.js.gz +0 -0
  114. package/client/assets/{TimeInput-Cwl9vLWA.js.map → TimeInput-BjOTgjcv.js.map} +1 -1
  115. package/client/assets/{TimelinePage-D4QNdk-Z.js → TimelinePage-pjff5TxG.js} +2 -2
  116. package/client/assets/TimelinePage-pjff5TxG.js.br +0 -0
  117. package/client/assets/TimelinePage-pjff5TxG.js.gz +0 -0
  118. package/client/assets/TimelinePage-pjff5TxG.js.map +1 -0
  119. package/client/assets/{Timer-BJQKNHfo.js → Timer-ahF-O2zN.js} +2 -2
  120. package/client/assets/Timer-ahF-O2zN.js.br +0 -0
  121. package/client/assets/Timer-ahF-O2zN.js.gz +0 -0
  122. package/client/assets/{Timer-BJQKNHfo.js.map → Timer-ahF-O2zN.js.map} +1 -1
  123. package/client/assets/TimerControlExport-De2n8HWG.js +2 -0
  124. package/client/assets/TimerControlExport-De2n8HWG.js.br +0 -0
  125. package/client/assets/TimerControlExport-De2n8HWG.js.gz +0 -0
  126. package/client/assets/TimerControlExport-De2n8HWG.js.map +1 -0
  127. package/client/assets/TimerDisplay-DeFQvmo9.js +2 -0
  128. package/client/assets/TimerDisplay-DeFQvmo9.js.br +0 -0
  129. package/client/assets/TimerDisplay-DeFQvmo9.js.gz +0 -0
  130. package/client/assets/{TimerDisplay-tVcUk9j3.js.map → TimerDisplay-DeFQvmo9.js.map} +1 -1
  131. package/client/assets/{TitleCard-BNjv58eq.js → TitleCard-BiaQE4ZK.js} +2 -2
  132. package/client/assets/TitleCard-BiaQE4ZK.js.br +0 -0
  133. package/client/assets/TitleCard-BiaQE4ZK.js.gz +0 -0
  134. package/client/assets/{TitleCard-BNjv58eq.js.map → TitleCard-BiaQE4ZK.js.map} +1 -1
  135. package/client/assets/{Tooltip-DZJ7u9gm.js → Tooltip-C5iPq6NR.js} +2 -2
  136. package/client/assets/Tooltip-C5iPq6NR.js.br +0 -0
  137. package/client/assets/Tooltip-C5iPq6NR.js.gz +0 -0
  138. package/client/assets/{Tooltip-DZJ7u9gm.js.map → Tooltip-C5iPq6NR.js.map} +1 -1
  139. package/client/assets/{ViewLogo-2I7w5Yms.js → ViewLogo-DcDhyyIF.js} +2 -2
  140. package/client/assets/ViewLogo-DcDhyyIF.js.br +0 -0
  141. package/client/assets/ViewLogo-DcDhyyIF.js.gz +0 -0
  142. package/client/assets/{ViewLogo-2I7w5Yms.js.map → ViewLogo-DcDhyyIF.js.map} +1 -1
  143. package/client/assets/{ViewParamsEditor-BX2RM8sx.js → ViewParamsEditor-DeMdkxxC.js} +2 -2
  144. package/client/assets/ViewParamsEditor-DeMdkxxC.js.br +0 -0
  145. package/client/assets/ViewParamsEditor-DeMdkxxC.js.gz +0 -0
  146. package/client/assets/{ViewParamsEditor-BX2RM8sx.js.map → ViewParamsEditor-DeMdkxxC.js.map} +1 -1
  147. package/client/assets/{editorSettings-_x6YKRfR.js → editorSettings-xk5GwlLv.js} +2 -2
  148. package/client/assets/editorSettings-xk5GwlLv.js.br +0 -0
  149. package/client/assets/editorSettings-xk5GwlLv.js.gz +0 -0
  150. package/client/assets/{editorSettings-_x6YKRfR.js.map → editorSettings-xk5GwlLv.js.map} +1 -1
  151. package/client/assets/{getProgress-ZUTmCn_v.js → getProgress-CWSCZOIN.js} +2 -2
  152. package/client/assets/getProgress-CWSCZOIN.js.br +0 -0
  153. package/client/assets/getProgress-CWSCZOIN.js.gz +0 -0
  154. package/client/assets/{getProgress-ZUTmCn_v.js.map → getProgress-CWSCZOIN.js.map} +1 -1
  155. package/client/assets/index-3aosT33y.js +3 -0
  156. package/client/assets/index-3aosT33y.js.br +0 -0
  157. package/client/assets/index-3aosT33y.js.gz +0 -0
  158. package/client/assets/index-3aosT33y.js.map +1 -0
  159. package/client/assets/{offset-VthsmtrO.js → offset-yVqq_CB1.js} +2 -2
  160. package/client/assets/offset-yVqq_CB1.js.br +0 -0
  161. package/client/assets/offset-yVqq_CB1.js.gz +0 -0
  162. package/client/assets/{offset-VthsmtrO.js.map → offset-yVqq_CB1.js.map} +1 -1
  163. package/client/assets/parseUserTime-wAKk9aCJ.js +2 -0
  164. package/client/assets/parseUserTime-wAKk9aCJ.js.br +0 -0
  165. package/client/assets/parseUserTime-wAKk9aCJ.js.gz +0 -0
  166. package/client/assets/{parseUserTime-sZbEBi61.js.map → parseUserTime-wAKk9aCJ.js.map} +1 -1
  167. package/client/assets/{playbackstate-Dl_ZJABT.js → playbackstate-BZ9WYn2k.js} +2 -2
  168. package/client/assets/playbackstate-BZ9WYn2k.js.br +0 -0
  169. package/client/assets/playbackstate-BZ9WYn2k.js.gz +0 -0
  170. package/client/assets/{playbackstate-Dl_ZJABT.js.map → playbackstate-BZ9WYn2k.js.map} +1 -1
  171. package/client/assets/{presentation.utils-Z61KykAH.js → presentation.utils-lyuuD4A5.js} +2 -2
  172. package/client/assets/presentation.utils-lyuuD4A5.js.br +0 -0
  173. package/client/assets/presentation.utils-lyuuD4A5.js.gz +0 -0
  174. package/client/assets/{presentation.utils-Z61KykAH.js.map → presentation.utils-lyuuD4A5.js.map} +1 -1
  175. package/client/assets/{rundownUtils-CXZRD6yP.js → rundownUtils-XX_c4Pcl.js} +2 -2
  176. package/client/assets/rundownUtils-XX_c4Pcl.js.br +0 -0
  177. package/client/assets/rundownUtils-XX_c4Pcl.js.gz +0 -0
  178. package/client/assets/{rundownUtils-CXZRD6yP.js.map → rundownUtils-XX_c4Pcl.js.map} +1 -1
  179. package/client/assets/{timer.utils-B4bvsns3.js → timer.utils-CWHFVz06.js} +2 -2
  180. package/client/assets/timer.utils-CWHFVz06.js.br +0 -0
  181. package/client/assets/timer.utils-CWHFVz06.js.gz +0 -0
  182. package/client/assets/{timer.utils-B4bvsns3.js.map → timer.utils-CWHFVz06.js.map} +1 -1
  183. package/client/assets/useCustomFields-kBD1jvDA.js +2 -0
  184. package/client/assets/useCustomFields-kBD1jvDA.js.br +0 -0
  185. package/client/assets/useCustomFields-kBD1jvDA.js.gz +0 -0
  186. package/client/assets/{useCustomFields-BBE4LBBr.js.map → useCustomFields-kBD1jvDA.js.map} +1 -1
  187. package/client/assets/{useEventSelection-Bpbu89c7.js → useEventSelection-Cvdw9all.js} +2 -2
  188. package/client/assets/useEventSelection-Cvdw9all.js.br +0 -0
  189. package/client/assets/useEventSelection-Cvdw9all.js.gz +0 -0
  190. package/client/assets/{useEventSelection-Bpbu89c7.js.map → useEventSelection-Cvdw9all.js.map} +1 -1
  191. package/client/assets/{useProjectData-C110zIXC.js → useProjectData-gGT2eczr.js} +2 -2
  192. package/client/assets/useProjectData-gGT2eczr.js.br +0 -0
  193. package/client/assets/useProjectData-gGT2eczr.js.gz +0 -0
  194. package/client/assets/{useProjectData-C110zIXC.js.map → useProjectData-gGT2eczr.js.map} +1 -1
  195. package/client/assets/{useReport-DqSBq4MG.js → useReport-CG6m_Zb0.js} +2 -2
  196. package/client/assets/useReport-CG6m_Zb0.js.br +0 -0
  197. package/client/assets/useReport-CG6m_Zb0.js.gz +0 -0
  198. package/client/assets/{useReport-DqSBq4MG.js.map → useReport-CG6m_Zb0.js.map} +1 -1
  199. package/client/assets/{useRundown-DAo6huE4.js → useRundown-C6stroSA.js} +2 -2
  200. package/client/assets/useRundown-C6stroSA.js.br +0 -0
  201. package/client/assets/useRundown-C6stroSA.js.gz +0 -0
  202. package/client/assets/useRundown-C6stroSA.js.map +1 -0
  203. package/client/assets/{useSelectAndRevealEntry-DTg0hmxA.js → useSelectAndRevealEntry-D79sYFHr.js} +2 -2
  204. package/client/assets/useSelectAndRevealEntry-D79sYFHr.js.br +0 -0
  205. package/client/assets/useSelectAndRevealEntry-D79sYFHr.js.gz +0 -0
  206. package/client/assets/{useSelectAndRevealEntry-DTg0hmxA.js.map → useSelectAndRevealEntry-D79sYFHr.js.map} +1 -1
  207. package/client/assets/{useWindowTitle-DM8dIp8L.js → useWindowTitle-CQ8nEeel.js} +2 -2
  208. package/client/assets/useWindowTitle-CQ8nEeel.js.br +0 -0
  209. package/client/assets/useWindowTitle-CQ8nEeel.js.gz +0 -0
  210. package/client/assets/{useWindowTitle-DM8dIp8L.js.map → useWindowTitle-CQ8nEeel.js.map} +1 -1
  211. package/client/assets/{validateEvent-GnPt-e9-.js → validateEvent-BnwPmDph.js} +2 -2
  212. package/client/assets/validateEvent-BnwPmDph.js.br +0 -0
  213. package/client/assets/validateEvent-BnwPmDph.js.gz +0 -0
  214. package/client/assets/{validateEvent-GnPt-e9-.js.map → validateEvent-BnwPmDph.js.map} +1 -1
  215. package/client/assets/{vendor-BKUJ0_Du.js → vendor-Dt3_Fdfs.js} +2 -2
  216. package/client/assets/vendor-Dt3_Fdfs.js.br +0 -0
  217. package/client/assets/vendor-Dt3_Fdfs.js.gz +0 -0
  218. package/client/assets/{vendor-BKUJ0_Du.js.map → vendor-Dt3_Fdfs.js.map} +1 -1
  219. package/client/assets/{viewLoader.utils-4lL4PiNI.js → viewLoader.utils-H7r-zNPP.js} +2 -2
  220. package/client/assets/viewLoader.utils-H7r-zNPP.js.br +0 -0
  221. package/client/assets/viewLoader.utils-H7r-zNPP.js.gz +0 -0
  222. package/client/assets/{viewLoader.utils-4lL4PiNI.js.map → viewLoader.utils-H7r-zNPP.js.map} +1 -1
  223. package/client/assets/{viewUtils-29a3Mmiu.js → viewUtils-k0tARVDN.js} +2 -2
  224. package/client/assets/viewUtils-k0tARVDN.js.br +0 -0
  225. package/client/assets/viewUtils-k0tARVDN.js.gz +0 -0
  226. package/client/assets/{viewUtils-29a3Mmiu.js.map → viewUtils-k0tARVDN.js.map} +1 -1
  227. package/client/index.html +2 -2
  228. package/package.json +1 -1
  229. package/server/index.cjs +104 -104
  230. package/client/assets/Backstage-BdrcXNr9.js.br +0 -0
  231. package/client/assets/Backstage-BdrcXNr9.js.gz +0 -0
  232. package/client/assets/Countdown-DQM2ppPg.js.br +0 -0
  233. package/client/assets/Countdown-DQM2ppPg.js.gz +0 -0
  234. package/client/assets/CuesheetTable-B5LQVh5m.js +0 -2
  235. package/client/assets/CuesheetTable-B5LQVh5m.js.br +0 -0
  236. package/client/assets/CuesheetTable-B5LQVh5m.js.gz +0 -0
  237. package/client/assets/CuesheetTable-B5LQVh5m.js.map +0 -1
  238. package/client/assets/CustomTranslationModal-CML7Vsot.js +0 -2
  239. package/client/assets/CustomTranslationModal-CML7Vsot.js.br +0 -0
  240. package/client/assets/CustomTranslationModal-CML7Vsot.js.gz +0 -0
  241. package/client/assets/DelayIndicator-DKS6mZdB.js.br +0 -0
  242. package/client/assets/DelayIndicator-DKS6mZdB.js.gz +0 -0
  243. package/client/assets/DelayIndicator-DKS6mZdB.js.map +0 -1
  244. package/client/assets/EditorFeatureWrapper-C1vLQxiy.js.br +0 -0
  245. package/client/assets/EditorFeatureWrapper-C1vLQxiy.js.gz +0 -0
  246. package/client/assets/EditorUtils-BLcTuWz1.js.br +0 -0
  247. package/client/assets/EditorUtils-BLcTuWz1.js.gz +0 -0
  248. package/client/assets/EmptyPage-CYVrjOvI.js +0 -2
  249. package/client/assets/EmptyPage-CYVrjOvI.js.br +0 -0
  250. package/client/assets/EmptyPage-CYVrjOvI.js.gz +0 -0
  251. package/client/assets/FollowButton-DcSbb4R_.js.br +0 -0
  252. package/client/assets/FollowButton-DcSbb4R_.js.gz +0 -0
  253. package/client/assets/MessageControlExport-BgT9JaXk.js +0 -3
  254. package/client/assets/MessageControlExport-BgT9JaXk.js.br +0 -0
  255. package/client/assets/MessageControlExport-BgT9JaXk.js.gz +0 -0
  256. package/client/assets/MultiPartProgressBar-W2a-JWPY.js.br +0 -0
  257. package/client/assets/MultiPartProgressBar-W2a-JWPY.js.gz +0 -0
  258. package/client/assets/OperatorExport-CbWojpp6.js.br +0 -0
  259. package/client/assets/OperatorExport-CbWojpp6.js.gz +0 -0
  260. package/client/assets/OperatorExport-CbWojpp6.js.map +0 -1
  261. package/client/assets/OverviewWrapper-B2i8d3rt.js +0 -2
  262. package/client/assets/OverviewWrapper-B2i8d3rt.js.br +0 -0
  263. package/client/assets/OverviewWrapper-B2i8d3rt.js.gz +0 -0
  264. package/client/assets/OverviewWrapper-DOYzR0Ef.css +0 -1
  265. package/client/assets/OverviewWrapper-DOYzR0Ef.css.br +0 -0
  266. package/client/assets/OverviewWrapper-DOYzR0Ef.css.gz +0 -0
  267. package/client/assets/PipHost-Dz2oy7XG.js.br +0 -0
  268. package/client/assets/PipHost-Dz2oy7XG.js.gz +0 -0
  269. package/client/assets/ProjectInfo-BR_7Hp5u.js.br +0 -0
  270. package/client/assets/ProjectInfo-BR_7Hp5u.js.gz +0 -0
  271. package/client/assets/ProtectRoute-Bxq6q7ba.js +0 -2
  272. package/client/assets/ProtectRoute-Bxq6q7ba.js.br +0 -0
  273. package/client/assets/ProtectRoute-Bxq6q7ba.js.gz +0 -0
  274. package/client/assets/ProtectedCuesheet-C7AqD2dy.js +0 -2
  275. package/client/assets/ProtectedCuesheet-C7AqD2dy.js.br +0 -0
  276. package/client/assets/ProtectedCuesheet-C7AqD2dy.js.gz +0 -0
  277. package/client/assets/ProtectedCuesheet-C7AqD2dy.js.map +0 -1
  278. package/client/assets/ProtectedEditor-CsfvVyOU.js +0 -3
  279. package/client/assets/ProtectedEditor-CsfvVyOU.js.br +0 -0
  280. package/client/assets/ProtectedEditor-CsfvVyOU.js.gz +0 -0
  281. package/client/assets/ProtectedEditor-CsfvVyOU.js.map +0 -1
  282. package/client/assets/ProtectedEditor-DID9cfOA.css +0 -1
  283. package/client/assets/ProtectedEditor-DID9cfOA.css.br +0 -0
  284. package/client/assets/ProtectedEditor-DID9cfOA.css.gz +0 -0
  285. package/client/assets/RundownExport-25orDQIW.js.br +0 -0
  286. package/client/assets/RundownExport-25orDQIW.js.gz +0 -0
  287. package/client/assets/RundownExport-25orDQIW.js.map +0 -1
  288. package/client/assets/Select-BnGTAeXJ.js.br +0 -0
  289. package/client/assets/Select-BnGTAeXJ.js.gz +0 -0
  290. package/client/assets/Studio-BK2Klo_K.js.br +0 -0
  291. package/client/assets/Studio-BK2Klo_K.js.gz +0 -0
  292. package/client/assets/StyleEditor-DIHQ1PUV.js.br +0 -0
  293. package/client/assets/StyleEditor-DIHQ1PUV.js.gz +0 -0
  294. package/client/assets/SuperscriptPeriod-EEedc9rG.js.br +0 -0
  295. package/client/assets/SuperscriptPeriod-EEedc9rG.js.gz +0 -0
  296. package/client/assets/SuperscriptTime-BVanhNvd.js.br +0 -0
  297. package/client/assets/SuperscriptTime-BVanhNvd.js.gz +0 -0
  298. package/client/assets/SwatchPicker-Ckpchvjo.js +0 -2
  299. package/client/assets/SwatchPicker-Ckpchvjo.js.br +0 -0
  300. package/client/assets/SwatchPicker-Ckpchvjo.js.gz +0 -0
  301. package/client/assets/TimeElements-CYIgGk0T.js +0 -2
  302. package/client/assets/TimeElements-CYIgGk0T.js.br +0 -0
  303. package/client/assets/TimeElements-CYIgGk0T.js.gz +0 -0
  304. package/client/assets/TimeInput-Cwl9vLWA.js.br +0 -0
  305. package/client/assets/TimeInput-Cwl9vLWA.js.gz +0 -0
  306. package/client/assets/TimelinePage-D4QNdk-Z.js.br +0 -0
  307. package/client/assets/TimelinePage-D4QNdk-Z.js.gz +0 -0
  308. package/client/assets/TimelinePage-D4QNdk-Z.js.map +0 -1
  309. package/client/assets/Timer-BJQKNHfo.js.br +0 -0
  310. package/client/assets/Timer-BJQKNHfo.js.gz +0 -0
  311. package/client/assets/TimerControlExport-Ba1vifNg.js +0 -2
  312. package/client/assets/TimerControlExport-Ba1vifNg.js.br +0 -0
  313. package/client/assets/TimerControlExport-Ba1vifNg.js.gz +0 -0
  314. package/client/assets/TimerControlExport-Ba1vifNg.js.map +0 -1
  315. package/client/assets/TimerDisplay-tVcUk9j3.js +0 -2
  316. package/client/assets/TimerDisplay-tVcUk9j3.js.br +0 -0
  317. package/client/assets/TimerDisplay-tVcUk9j3.js.gz +0 -0
  318. package/client/assets/TitleCard-BNjv58eq.js.br +0 -0
  319. package/client/assets/TitleCard-BNjv58eq.js.gz +0 -0
  320. package/client/assets/Tooltip-DZJ7u9gm.js.br +0 -4
  321. package/client/assets/Tooltip-DZJ7u9gm.js.gz +0 -0
  322. package/client/assets/ViewLogo-2I7w5Yms.js.br +0 -0
  323. package/client/assets/ViewLogo-2I7w5Yms.js.gz +0 -0
  324. package/client/assets/ViewParamsEditor-BX2RM8sx.js.br +0 -0
  325. package/client/assets/ViewParamsEditor-BX2RM8sx.js.gz +0 -0
  326. package/client/assets/editorSettings-_x6YKRfR.js.br +0 -6
  327. package/client/assets/editorSettings-_x6YKRfR.js.gz +0 -0
  328. package/client/assets/getProgress-ZUTmCn_v.js.br +0 -0
  329. package/client/assets/getProgress-ZUTmCn_v.js.gz +0 -0
  330. package/client/assets/index-Dm-4OTmY.js +0 -3
  331. package/client/assets/index-Dm-4OTmY.js.br +0 -0
  332. package/client/assets/index-Dm-4OTmY.js.gz +0 -0
  333. package/client/assets/index-Dm-4OTmY.js.map +0 -1
  334. package/client/assets/offset-VthsmtrO.js.br +0 -0
  335. package/client/assets/offset-VthsmtrO.js.gz +0 -0
  336. package/client/assets/parseUserTime-sZbEBi61.js +0 -2
  337. package/client/assets/parseUserTime-sZbEBi61.js.br +0 -0
  338. package/client/assets/parseUserTime-sZbEBi61.js.gz +0 -0
  339. package/client/assets/playbackstate-Dl_ZJABT.js.br +0 -0
  340. package/client/assets/playbackstate-Dl_ZJABT.js.gz +0 -0
  341. package/client/assets/presentation.utils-Z61KykAH.js.br +0 -0
  342. package/client/assets/presentation.utils-Z61KykAH.js.gz +0 -0
  343. package/client/assets/rundownUtils-CXZRD6yP.js.br +0 -0
  344. package/client/assets/rundownUtils-CXZRD6yP.js.gz +0 -0
  345. package/client/assets/timer.utils-B4bvsns3.js.br +0 -0
  346. package/client/assets/timer.utils-B4bvsns3.js.gz +0 -0
  347. package/client/assets/useCustomFields-BBE4LBBr.js +0 -2
  348. package/client/assets/useCustomFields-BBE4LBBr.js.br +0 -0
  349. package/client/assets/useCustomFields-BBE4LBBr.js.gz +0 -0
  350. package/client/assets/useEventSelection-Bpbu89c7.js.br +0 -0
  351. package/client/assets/useEventSelection-Bpbu89c7.js.gz +0 -0
  352. package/client/assets/useProjectData-C110zIXC.js.br +0 -0
  353. package/client/assets/useProjectData-C110zIXC.js.gz +0 -0
  354. package/client/assets/useReport-DqSBq4MG.js.br +0 -0
  355. package/client/assets/useReport-DqSBq4MG.js.gz +0 -0
  356. package/client/assets/useRundown-DAo6huE4.js.br +0 -0
  357. package/client/assets/useRundown-DAo6huE4.js.gz +0 -0
  358. package/client/assets/useRundown-DAo6huE4.js.map +0 -1
  359. package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.br +0 -0
  360. package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.gz +0 -0
  361. package/client/assets/useWindowTitle-DM8dIp8L.js.br +0 -0
  362. package/client/assets/useWindowTitle-DM8dIp8L.js.gz +0 -0
  363. package/client/assets/validateEvent-GnPt-e9-.js.br +0 -0
  364. package/client/assets/validateEvent-GnPt-e9-.js.gz +0 -0
  365. package/client/assets/vendor-BKUJ0_Du.js.br +0 -0
  366. package/client/assets/vendor-BKUJ0_Du.js.gz +0 -0
  367. package/client/assets/viewLoader.utils-4lL4PiNI.js.br +0 -0
  368. package/client/assets/viewLoader.utils-4lL4PiNI.js.gz +0 -0
  369. package/client/assets/viewUtils-29a3Mmiu.js.br +0 -0
  370. package/client/assets/viewUtils-29a3Mmiu.js.gz +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"RundownExport-25orDQIW.js","sources":["../../src/features/rundown/entry-editor/composite/EventEditorFooter.tsx","../../src/features/rundown/entry-editor/EventEditorEmpty.tsx","../../src/features/rundown/entry-editor/RundownEntryEditor.tsx","../../src/views/editor/finder/useFinder.tsx","../../src/views/editor/finder/Finder.tsx","../../src/features/rundown/placements/FinderPlacement.tsx","../../src/features/rundown/rundown-context-menu/RundownContextMenu.tsx","../../src/features/rundown/useEditorFollowMode.ts","../../src/features/rundown/rundown-header/RundownMenu.tsx","../../src/features/rundown/rundown-header/RundownHeader.tsx","../../src/features/rundown/rundown-header/RundownHeaderMobile.tsx","../../src/features/rundown/rundown-table/makeRundownColumns.tsx","../../src/features/rundown/rundown-table/RundownTable.tsx","../../src/common/stores/entryCopyStore.ts","../../src/features/rundown/entry-editor/quick-add-buttons/QuickAddButtons.tsx","../../src/features/rundown/entry-editor/quick-add-cursor/QuickAddInline.tsx","../../src/features/rundown/hooks/useRundownCommands.ts","../../src/features/rundown/hooks/useRundownDnd.ts","../../src/features/rundown/hooks/useRundownKeyboard.ts","../../src/common/hooks/useContextMenu.tsx","../../src/features/rundown/common/TitleEditor.tsx","../../src/features/rundown/rundown-group/RundownGroup.tsx","../../src/features/rundown/rundown-group/RundownGroupEnd.tsx","../../src/features/rundown/RundownEmpty.tsx","../../src/features/rundown/rundown-delay/BlockRadio.tsx","../../src/features/rundown/rundown-delay/DelayInput.tsx","../../src/features/rundown/rundown-delay/RundownDelay.tsx","../../src/features/rundown/useEventIdSwapping.ts","../../src/features/rundown/rundown-event/composite/RundownEventChip.tsx","../../src/features/rundown/rundown-event/composite/RundownEventPlayback.tsx","../../src/features/rundown/rundown-event/composite/RundownEventProgressBar.tsx","../../src/features/rundown/rundown-event/RundownEventInner.tsx","../../src/features/rundown/rundown-event/rundownEvent.utils.ts","../../src/features/rundown/rundown-event/RundownIndicators.tsx","../../src/features/rundown/rundown-event/RundownEvent.tsx","../../src/features/rundown/rundown-milestone/RundownMilestone.tsx","../../src/features/rundown/RundownEntry.tsx","../../src/features/rundown/Rundown.tsx","../../src/features/rundown/RundownList.tsx","../../src/features/rundown/RundownExport.tsx"],"sourcesContent":["import { memo } from 'react';\n\nimport CopyTag from '../../../../common/components/copy-tag/CopyTag';\n\nimport style from './EventEditorFooter.module.scss';\n\ninterface EventEditorFooterProps {\n id: string;\n cue: string;\n}\n\nexport default memo(EventEditorFooter);\nfunction EventEditorFooter({ id, cue }: EventEditorFooterProps) {\n const loadById = `/ontime/load/id \"${id}\"`;\n const loadByCue = `/ontime/load/cue \"${cue}\"`;\n\n return (\n <div className={style.footer}>\n <CopyTag copyValue={loadById}>{loadById}</CopyTag>\n <CopyTag copyValue={loadByCue}>{loadByCue}</CopyTag>\n </div>\n );\n}\n","import { memo, PropsWithChildren } from 'react';\n\nimport * as Editor from '../../../common/components/editor-utils/EditorUtils';\nimport { deviceAlt, deviceMod } from '../../../common/utils/deviceUtils';\n\nimport style from './EventEditorEmpty.module.scss';\n\nexport default memo(EventEditorEmpty);\n\nfunction EventEditorEmpty() {\n return (\n <div className={style.entryEditor} data-testid='editor-container'>\n <div className={style.shortcutSection}>\n <Editor.Title className={style.prompt}>Rundown shortcuts</Editor.Title>\n <table className={style.shortcuts}>\n <tbody>\n <tr>\n <td>Find in rundown</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>F</Kbd>\n </td>\n </tr>\n <tr>\n <td>Open Settings</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>,</Kbd>\n </td>\n </tr>\n <tr className={style.spacer} />\n <tr>\n <td>Select entry</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>↑</Kbd>\n <AuxKey>/</AuxKey>\n <Kbd>↓</Kbd>\n </td>\n </tr>\n <tr>\n <td>Select group</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>↑</Kbd>\n <AuxKey>/</AuxKey>\n <Kbd>↓</Kbd>\n </td>\n </tr>\n <tr>\n <td>Jump to top / bottom</td>\n <td>\n <Kbd>Home</Kbd>\n <AuxKey>/</AuxKey>\n <Kbd>End</Kbd>\n </td>\n </tr>\n <tr>\n <td>Page up / down</td>\n <td>\n <Kbd>PgUp</Kbd>\n <AuxKey>/</AuxKey>\n <Kbd>PgDn</Kbd>\n </td>\n </tr>\n <tr>\n <td>Deselect entry</td>\n <td>\n <Kbd>Esc</Kbd>\n </td>\n </tr>\n <tr className={style.spacer} />\n <tr>\n <td>Reorder selected entry</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>↑</Kbd>\n <AuxKey>/</AuxKey>\n <Kbd>↓</Kbd>\n </td>\n </tr>\n <tr>\n <td>Copy selected entry</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>C</Kbd>\n </td>\n </tr>\n <tr>\n <td>Cut selected entry</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>X</Kbd>\n </td>\n </tr>\n <tr>\n <td>Paste above</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>V</Kbd>\n </td>\n </tr>\n <tr>\n <td>Paste below</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>V</Kbd>\n </td>\n </tr>\n <tr>\n <td>Clone selected entry</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>D</Kbd>\n </td>\n </tr>\n <tr>\n <td>Delete selected entry</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Backspace</Kbd>\n </td>\n </tr>\n <tr className={style.spacer} />\n <tr>\n <td>Add event below</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>E</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add event above</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>E</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add group below</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>G</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add group above</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>G</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add milestone below</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>M</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add milestone above</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>M</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add delay below</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>D</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add delay above</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>D</Kbd>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n\nfunction AuxKey({ children }: PropsWithChildren) {\n return <span className={style.divider}>{children}</span>;\n}\n\nfunction Kbd({ children }: PropsWithChildren) {\n return <span className={style.kbd}>{children}</span>;\n}\n","import { useMemo } from 'react';\nimport { isOntimeEvent, isOntimeGroup, isOntimeMilestone, OntimeEntry } from 'ontime-types';\n\nimport useRundown from '../../../common/hooks-query/useRundown';\nimport { useEventSelection } from '../useEventSelection';\n\nimport EventEditorFooter from './composite/EventEditorFooter';\nimport EventEditor from './EventEditor';\nimport EventEditorEmpty from './EventEditorEmpty';\nimport GroupEditor from './GroupEditor';\nimport MilestoneEditor from './MilestoneEditor';\n\nimport style from './EntryEditor.module.scss';\n\nexport default function RundownEntryEditor() {\n const selectedEvents = useEventSelection((state) => state.selectedEvents);\n const { data } = useRundown();\n\n const entry = useMemo<OntimeEntry | null>(() => {\n if (data.order.length === 0) {\n return null;\n }\n\n const selectedEventId = Array.from(selectedEvents).at(0);\n if (!selectedEventId) {\n return null;\n }\n\n const event = data.entries[selectedEventId];\n return event ?? null;\n }, [data.order.length, data.entries, selectedEvents]);\n\n if (!entry) {\n return <EventEditorEmpty />;\n }\n\n if (isOntimeEvent(entry)) {\n return (\n <div className={style.rundownEditor} data-testid='editor-container'>\n <EventEditor event={entry} />\n <EventEditorFooter id={entry.id} cue={entry.cue} />\n </div>\n );\n }\n\n if (isOntimeMilestone(entry)) {\n return (\n <div className={style.rundownEditor} data-testid='editor-container'>\n <MilestoneEditor milestone={entry} />\n </div>\n );\n }\n\n if (isOntimeGroup(entry)) {\n return (\n <div className={style.rundownEditor} data-testid='editor-container'>\n <GroupEditor group={entry} />\n </div>\n );\n }\n\n return null;\n}\n","import { ChangeEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport { EntryId, isOntimeEvent, isOntimeGroup, isOntimeMilestone, MaybeString, SupportedEntry } from 'ontime-types';\n\nimport { useFlatRundown } from '../../../common/hooks-query/useRundown';\nimport { useSelectAndRevealEntry } from '../../../features/rundown/useSelectAndRevealEntry';\n\nconst maxResults = 12;\n\ntype FilterableGroup = {\n type: SupportedEntry.Group;\n id: EntryId;\n index: number;\n title: string;\n colour: string;\n};\n\ntype FilterableEvent = {\n type: SupportedEntry.Event;\n id: EntryId;\n index: number;\n eventIndex: number;\n title: string;\n cue: string;\n colour: string;\n parent: MaybeString;\n};\n\ntype FilterableMilestone = {\n type: SupportedEntry.Milestone;\n id: EntryId;\n index: number;\n title: string;\n cue: string;\n colour: string;\n parent: MaybeString;\n};\n\ntype FilterableEntry = FilterableGroup | FilterableEvent | FilterableMilestone;\n\nexport default function useFinder() {\n const { data, rundownId } = useFlatRundown();\n const [results, setResults] = useState<FilterableEntry[]>([]);\n const [error, setError] = useState<MaybeString>(null);\n const lastSearchString = useRef('');\n\n const selectAndRevealEntry = useSelectAndRevealEntry(rundownId);\n\n /** Filters the rundown to a given evaluation */\n const find = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (!data || data.length === 0) {\n setError('No data');\n return;\n }\n setError(null);\n\n if (event.target.value === '') {\n setResults([]);\n return;\n }\n\n const searchValue = event.target.value.toLowerCase();\n lastSearchString.current = searchValue;\n\n if (searchValue.startsWith('index ')) {\n const searchString = searchValue.slice('index '.length).trim();\n const { results, error } = searchByIndex(searchString);\n setResults(results);\n setError(error);\n return;\n }\n\n if (searchValue.startsWith('cue ')) {\n const searchString = searchValue.slice('cue '.length).trim();\n const { results, error } = searchByCue(searchString);\n setResults(results);\n setError(error);\n return;\n }\n\n const searchString = searchValue.startsWith('title ') ? searchValue.slice('title '.length).trim() : searchValue;\n const { results, error } = searchByTitle(searchString);\n setResults(results);\n setError(error);\n\n /** Returns a single item with a matching index */\n function searchByIndex(searchString: string) {\n const searchIndex = Number(searchString);\n if (isNaN(searchIndex) || searchIndex < 1) {\n return { results: [], error: 'Invalid index' };\n }\n\n if (searchIndex > data.length) {\n return { results: [], error: null };\n }\n\n // indexes exposed to the UI are 1-based\n let eventIndex = 1;\n const results: FilterableEvent[] = [];\n for (let i = 0; i < data.length; i++) {\n const event = data[i];\n if (isOntimeEvent(event)) {\n if (eventIndex === searchIndex) {\n results.push({\n type: SupportedEntry.Event,\n id: event.id,\n index: i,\n eventIndex,\n title: event.title,\n cue: event.cue,\n colour: event.colour,\n parent: event.parent,\n } satisfies FilterableEvent);\n break;\n }\n eventIndex++;\n }\n }\n\n return { results, error: null };\n }\n\n /** Returns maxResults of OntimeEvents that match the cue field */\n function searchByCue(searchString: string) {\n // indexes exposed to the UI are 1-based\n let eventIndex = 1;\n // limit amount of results we show\n let remaining = maxResults;\n const results: FilterableEvent[] = [];\n\n for (let i = 0; i < data.length; i++) {\n if (remaining <= 0) {\n break;\n }\n const event = data[i];\n if (isOntimeEvent(event)) {\n if (event.cue.toLowerCase().includes(searchString)) {\n remaining--;\n results.push({\n type: SupportedEntry.Event,\n id: event.id,\n index: i,\n eventIndex,\n title: event.title,\n cue: event.cue,\n colour: event.colour,\n parent: event.parent,\n } satisfies FilterableEvent);\n }\n eventIndex++;\n }\n }\n return { results, error: null };\n }\n\n /** Returns maxResults of OntimeEvents that match the title field*/\n function searchByTitle(searchString: string) {\n // indexes exposed to the UI are 1-based\n let eventIndex = 1;\n // limit amount of results we show\n let remaining = maxResults;\n const results: FilterableEntry[] = [];\n\n for (let i = 0; i < data.length; i++) {\n if (remaining <= 0) {\n break;\n }\n\n const entry = data[i];\n if (isOntimeEvent(entry)) {\n if (entry.title.toLowerCase().includes(searchString)) {\n remaining--;\n results.push({\n type: SupportedEntry.Event,\n id: entry.id,\n index: i,\n eventIndex,\n title: entry.title,\n cue: entry.cue,\n colour: entry.colour,\n parent: entry.parent,\n } satisfies FilterableEvent);\n }\n eventIndex++;\n } else if (isOntimeGroup(entry)) {\n if (entry.title.toLowerCase().includes(searchString)) {\n remaining--;\n results.push({\n type: SupportedEntry.Group,\n id: entry.id,\n index: i,\n title: entry.title,\n colour: entry.colour,\n } satisfies FilterableGroup);\n }\n } else if (isOntimeMilestone(entry)) {\n if (entry.title.toLowerCase().includes(searchString)) {\n remaining--;\n results.push({\n type: SupportedEntry.Milestone,\n id: entry.id,\n index: i,\n title: entry.title,\n cue: entry.cue,\n colour: entry.colour,\n parent: entry.parent,\n } satisfies FilterableMilestone);\n }\n }\n }\n return { results, error: null };\n }\n },\n [data],\n );\n\n const select = useCallback(\n (selectedEvent: FilterableEntry) => {\n selectAndRevealEntry({\n id: selectedEvent.id,\n index: selectedEvent.index,\n parent: 'parent' in selectedEvent ? selectedEvent.parent : null,\n });\n },\n [selectAndRevealEntry],\n );\n\n /** clear results when source data changes */\n useEffect(() => {\n setResults([]);\n setError(null);\n // fake a submit event to re-run the search\n if (lastSearchString.current) {\n find({ target: { value: lastSearchString.current } } as ChangeEvent<HTMLInputElement>);\n }\n }, [data, find]);\n\n return { find, select, results, error };\n}\n","import { KeyboardEvent, useState } from 'react';\nimport { useDebouncedCallback } from '@mantine/hooks';\nimport { SupportedEntry } from 'ontime-types';\n\nimport Input from '../../../common/components/input/input/Input';\nimport Modal from '../../../common/components/modal/Modal';\n\nimport useFinder from './useFinder';\n\nimport style from './Finder.module.scss';\n\ninterface FinderProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport default function Finder({ isOpen, onClose }: FinderProps) {\n const { find, select, results, error } = useFinder();\n const [selected, setSelected] = useState(0);\n\n const debouncedFind = useDebouncedCallback(find, 100);\n\n const navigate = (event: KeyboardEvent<HTMLDivElement>) => {\n // all operations need results\n if (results.length === 0) {\n return;\n }\n if (event.key === 'ArrowDown') {\n setSelected((prev) => (prev + 1) % results.length);\n }\n if (event.key === 'ArrowUp') {\n setSelected((prev) => (prev - 1 + results.length) % results.length);\n }\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n submit();\n }\n };\n\n const submit = () => {\n const selectedEvent = results[selected];\n select(selectedEvent);\n onClose();\n };\n\n const handleMouseMoveEvent = (event: React.MouseEvent<HTMLUListElement>) => {\n const target = event.target as HTMLElement;\n const li = target.closest('li');\n if (li) {\n const index = Number(li.dataset.index);\n if (!isNaN(index)) {\n setSelected(index);\n }\n }\n };\n\n return (\n <Modal\n title=''\n isOpen={isOpen}\n onClose={onClose}\n showBackdrop\n bodyElements={\n <div onKeyDown={navigate}>\n <Input height='large' fluid onChange={debouncedFind} placeholder='Search...' />\n <ul className={style.scrollContainer} onMouseMove={handleMouseMoveEvent}>\n {error && <li className={style.error}>{error}</li>}\n {results.length === 0 && <li className={style.empty}>No results</li>}\n {results.length > 0 &&\n results.map((entry, index) => {\n const isSelected = selected === index;\n const displayIndex = entry.type === SupportedEntry.Event ? entry.eventIndex : '-';\n const displayCue = 'cue' in entry ? entry.cue : '';\n\n return (\n <li\n key={entry.id}\n className={style.entry}\n data-selected={isSelected}\n data-index={index}\n onClick={submit}\n >\n <div className={style.data}>\n <div className={style.index} style={{ '--color': entry.colour }}>\n {displayIndex}\n </div>\n <div className={style.cue}>{displayCue}</div>\n <div className={style.title}>{entry.title}</div>\n </div>\n {isSelected && <span>Go ⏎</span>}\n </li>\n );\n })}\n </ul>\n </div>\n }\n footerElements={\n <div className={style.footer}>\n Use the keywords <span className={style.em}>cue</span>, <span className={style.em}>index</span> or\n <span className={style.em}>title</span> to filter search.\n </div>\n }\n />\n );\n}\n","import { memo } from 'react';\nimport { useDisclosure, useHotkeys } from '@mantine/hooks';\n\nimport Finder from '../../../views/editor/finder/Finder';\n\nexport default memo(FinderPlacement);\n\nfunction FinderPlacement() {\n const [isOpen, handler] = useDisclosure();\n\n useHotkeys([\n ['mod + f', handler.toggle, { preventDefault: true }],\n ['Escape', handler.close, { preventDefault: true }],\n ]);\n\n if (isOpen) {\n return <Finder isOpen={isOpen} onClose={handler.close} />;\n }\n\n return null;\n}\n","import { create } from 'zustand';\n\nimport { DropdownMenuOption, PositionedDropdownMenu } from '../../../common/components/dropdown-menu/DropdownMenu';\n\ntype Position = {\n x: number;\n y: number;\n};\n\ntype ContextMenuStore = {\n position: Position;\n options: DropdownMenuOption[];\n isOpen: boolean;\n setContextMenu: (position: Position, options: DropdownMenuOption[]) => void;\n setIsOpen: (newIsOpen: boolean) => void;\n};\n\nexport const useContextMenuStore = create<ContextMenuStore>((set) => ({\n position: { x: 0, y: 0 },\n options: [],\n isOpen: false,\n setContextMenu: (position, options) => set(() => ({ position, options, isOpen: true })),\n setIsOpen: (newIsOpen) => set(() => ({ isOpen: newIsOpen })),\n}));\n\nexport function RundownContextMenu() {\n const { position, options, isOpen, setIsOpen } = useContextMenuStore();\n\n const onClose = () => {\n return setIsOpen(false);\n };\n\n if (!isOpen) {\n return null;\n }\n\n return <PositionedDropdownMenu isOpen position={position} onClose={onClose} items={options} />;\n}\n","import { useSessionStorage } from '@mantine/hooks';\n\nimport { AppMode, sessionKeys } from '../../ontimeConfig';\nimport { EditorLayoutMode, useEditorLayout } from '../../views/editor/useEditorLayout';\n\n/**\n * Manages the editor mode (Edit/Run) derived from layout mode\n *\n * Editor mode is automatically determined by the layout:\n * - PLANNING: Always Edit mode (follows user selection)\n * - TRACKING: Always Run mode (follows current event)\n * - CONTROL: User preference (defaults to Run mode), persisted in session storage\n *\n * Edit: Manual editing, follows user selection\n * Run: Live playback view, auto-follows current event\n */\nexport function useEditorFollowMode() {\n const { layoutMode } = useEditorLayout();\n\n // Only used for CONTROL layout - stores user preference\n const [controlModePreference, setControlModePreference] = useSessionStorage<AppMode>({\n key: sessionKeys.editorMode,\n defaultValue: AppMode.Run,\n });\n\n // Derive editor mode from layout mode\n const editorMode = (() => {\n if (layoutMode === EditorLayoutMode.CONTROL) return controlModePreference;\n if (layoutMode === EditorLayoutMode.PLANNING) return AppMode.Edit;\n return AppMode.Run;\n })();\n\n // setEditorMode only affects CONTROL layout\n const setEditorMode = (mode: AppMode) => {\n if (layoutMode === EditorLayoutMode.CONTROL) {\n setControlModePreference(mode);\n }\n };\n\n return { editorMode, setEditorMode };\n}\n","import { memo, useCallback } from 'react';\nimport { IoEllipsisHorizontal, IoList, IoTrash } from 'react-icons/io5';\nimport { Toolbar } from '@base-ui/react/toolbar';\nimport { useDisclosure } from '@mantine/hooks';\n\nimport Button from '../../../common/components/buttons/Button';\nimport IconButton from '../../../common/components/buttons/IconButton';\nimport Dialog from '../../../common/components/dialog/Dialog';\nimport { DropdownMenu } from '../../../common/components/dropdown-menu/DropdownMenu';\nimport { useEntryActionsContext } from '../../../common/context/EntryActionsContext';\nimport useAppSettingsNavigation from '../../app-settings/useAppSettingsNavigation';\nimport { useEventSelection } from '../useEventSelection';\n\nimport style from './RundownHeader.module.scss';\n\ninterface RundownMenuProps {\n allowNavigation?: boolean;\n}\n\nexport default memo(RundownMenu);\nfunction RundownMenu({ allowNavigation }: RundownMenuProps) {\n const [isOpen, handlers] = useDisclosure();\n\n const clearSelectedEvents = useEventSelection((state) => state.clearSelectedEvents);\n const { deleteAllEntries } = useEntryActionsContext();\n const { setLocation } = useAppSettingsNavigation();\n\n const deleteAll = useCallback(() => {\n deleteAllEntries();\n clearSelectedEvents();\n handlers.close();\n }, [clearSelectedEvents, deleteAllEntries, handlers]);\n\n return (\n <>\n <div className={style.apart}>\n <DropdownMenu\n render={<Toolbar.Button render={<IconButton variant='subtle-white' aria-label='Rundown menu' />} />}\n items={[\n {\n type: 'item',\n label: 'Manage Rundowns...',\n icon: IoList,\n onClick: () => setLocation('manage__rundowns'),\n disabled: !allowNavigation,\n },\n { type: 'divider' },\n {\n type: 'destructive',\n label: 'Clear all',\n icon: IoTrash,\n onClick: handlers.open,\n },\n ]}\n >\n <IoEllipsisHorizontal />\n </DropdownMenu>\n </div>\n\n <Dialog\n isOpen={isOpen}\n onClose={handlers.close}\n title='Clear rundown'\n showBackdrop\n showCloseButton\n bodyElements={\n <>\n You will lose all data in your rundown. <br /> Are you sure?\n </>\n }\n footerElements={\n <>\n <Button variant='ghosted-white' size='large' onClick={handlers.close}>\n Cancel\n </Button>\n <Button variant='destructive' size='large' onClick={deleteAll}>\n Delete all\n </Button>\n </>\n }\n />\n </>\n );\n}\n","import { memo } from 'react';\nimport { Toggle } from '@base-ui/react/toggle';\nimport { ToggleGroup } from '@base-ui/react/toggle-group';\nimport { Toolbar } from '@base-ui/react/toolbar';\nimport { OffsetMode } from 'ontime-types';\n\nimport Tooltip from '../../../common/components/tooltip/Tooltip';\nimport { setOffsetMode, useOffsetMode } from '../../../common/hooks/useSocket';\nimport { AppMode } from '../../../ontimeConfig';\nimport { EditorLayoutMode, useEditorLayout } from '../../../views/editor/useEditorLayout';\nimport { RundownViewMode } from '../rundown.options';\nimport { useEditorFollowMode } from '../useEditorFollowMode';\n\nimport RundownMenu from './RundownMenu';\n\nimport style from './RundownHeader.module.scss';\n\ninterface RundownHeaderProps {\n isExtracted?: boolean;\n viewMode: RundownViewMode;\n setViewMode: (mode: RundownViewMode) => void;\n}\n\ninterface HeaderControlsConfig {\n showRunEditToggle: boolean;\n showOffsetToggle: boolean;\n showOverflowMenu: boolean;\n}\n\nexport const HEADER_CONTROLS_CONFIG: Record<EditorLayoutMode, HeaderControlsConfig> = {\n [EditorLayoutMode.CONTROL]: {\n showRunEditToggle: true,\n showOffsetToggle: true,\n showOverflowMenu: true,\n },\n [EditorLayoutMode.PLANNING]: {\n showRunEditToggle: false,\n showOffsetToggle: false,\n showOverflowMenu: true,\n },\n [EditorLayoutMode.TRACKING]: {\n showRunEditToggle: false,\n showOffsetToggle: true,\n showOverflowMenu: false,\n },\n} as const;\n\nexport default memo(RundownHeader);\nfunction RundownHeader({ isExtracted, viewMode, setViewMode }: RundownHeaderProps) {\n const { editorMode, setEditorMode } = useEditorFollowMode();\n const offsetMode = useOffsetMode();\n const { layoutMode } = useEditorLayout();\n\n const { showRunEditToggle, showOffsetToggle, showOverflowMenu } = HEADER_CONTROLS_CONFIG[layoutMode];\n\n const toggleAppMode = (mode: AppMode[]) => {\n // we need to stop user from deselecting a mode\n const newValue = mode.at(0);\n if (!newValue) return;\n setEditorMode(newValue);\n };\n\n const toggleViewMode = (mode: RundownViewMode[]) => {\n const newValue = mode.at(0);\n if (!newValue) return;\n setViewMode(newValue);\n };\n\n const toggleOffsetMode = (mode: OffsetMode[]) => {\n const newValue = mode.at(0);\n if (!newValue) return;\n setOffsetMode(newValue);\n };\n\n return (\n <Toolbar.Root className={style.header}>\n {showRunEditToggle && (\n <ToggleGroup value={[editorMode]} onValueChange={toggleAppMode} className={style.group}>\n <Tooltip\n text='Live playback view with auto-follow'\n render={<Toolbar.Button render={<Toggle />} value={AppMode.Run} className={style.radioButton} />}\n >\n Run\n </Tooltip>\n <Tooltip\n text='Manual editing without playback automation'\n render={<Toolbar.Button render={<Toggle />} value={AppMode.Edit} className={style.radioButton} />}\n >\n Edit\n </Tooltip>\n </ToggleGroup>\n )}\n\n <ToggleGroup value={[viewMode]} onValueChange={toggleViewMode} className={style.group}>\n <Tooltip\n text='View rundown in list mode'\n render={<Toolbar.Button render={<Toggle />} value={RundownViewMode.List} className={style.radioButton} />}\n >\n List\n </Tooltip>\n <Tooltip\n text='View rundown in table mode'\n render={<Toolbar.Button render={<Toggle />} value={RundownViewMode.Table} className={style.radioButton} />}\n >\n Table\n </Tooltip>\n </ToggleGroup>\n\n {showOffsetToggle && (\n <ToggleGroup value={[offsetMode]} onValueChange={toggleOffsetMode} className={style.group}>\n <Tooltip\n text='Offsets use fixed clock time'\n render={<Toolbar.Button render={<Toggle />} value={OffsetMode.Absolute} className={style.radioButton} />}\n >\n Absolute\n </Tooltip>\n <Tooltip\n text='Offsets follow the rundown relative start'\n render={<Toolbar.Button render={<Toggle />} value={OffsetMode.Relative} className={style.radioButton} />}\n >\n Relative\n </Tooltip>\n </ToggleGroup>\n )}\n\n {showOverflowMenu && <RundownMenu allowNavigation={!isExtracted} />}\n </Toolbar.Root>\n );\n}\n","import { memo } from 'react';\nimport { Toggle } from '@base-ui/react/toggle';\nimport { ToggleGroup } from '@base-ui/react/toggle-group';\nimport { Toolbar } from '@base-ui/react/toolbar';\n\nimport { AppMode } from '../../../ontimeConfig';\nimport { RundownViewMode } from '../rundown.options';\nimport { useEditorFollowMode } from '../useEditorFollowMode';\n\nimport style from './RundownHeader.module.scss';\n\ninterface RundownHeaderMobileProps {\n viewMode: RundownViewMode;\n setViewMode: (mode: RundownViewMode) => void;\n}\n\nexport default memo(RundownHeaderMobile);\nfunction RundownHeaderMobile({ viewMode, setViewMode }: RundownHeaderMobileProps) {\n const { editorMode, setEditorMode } = useEditorFollowMode();\n\n const toggleAppMode = (mode: AppMode[]) => {\n // we need to stop user from deselecting a mode\n const newValue = mode.at(0);\n if (!newValue) return;\n setEditorMode(newValue);\n };\n\n const toggleViewMode = (mode: RundownViewMode[]) => {\n const newValue = mode.at(0);\n if (!newValue) return;\n setViewMode(newValue);\n };\n\n return (\n <Toolbar.Root className={style.header}>\n <ToggleGroup value={[editorMode]} onValueChange={toggleAppMode} className={style.group}>\n <Toolbar.Button render={<Toggle />} value={AppMode.Run} className={style.radioButton}>\n Run\n </Toolbar.Button>\n\n <Toolbar.Button render={<Toggle />} value={AppMode.Edit} className={style.radioButton}>\n Edit\n </Toolbar.Button>\n </ToggleGroup>\n\n <ToggleGroup value={[viewMode]} onValueChange={toggleViewMode} className={style.group}>\n <Toolbar.Button render={<Toggle />} value={RundownViewMode.List} className={style.radioButton}>\n List\n </Toolbar.Button>\n <Toolbar.Button render={<Toggle />} value={RundownViewMode.Table} className={style.radioButton}>\n Table\n </Toolbar.Button>\n </ToggleGroup>\n </Toolbar.Root>\n );\n}\n","import type { ColumnDef } from '@tanstack/react-table';\nimport type { CustomFields } from 'ontime-types';\n\nimport type { ExtendedEntry } from '../../../common/utils/rundownMetadata';\nimport { AppMode } from '../../../ontimeConfig';\nimport { makeCuesheetColumns } from '../../../views/cuesheet/cuesheet-table/cuesheet-table-elements/cuesheetColsFactory';\n\n/**\n * Creates column definitions for the rundown table\n * Reuses cuesheetColsFactory with preset=undefined for full access\n */\nexport function makeRundownColumns(customFields: CustomFields): ColumnDef<ExtendedEntry>[] {\n // When preset=undefined, factory defaults to fullRead=true, fullWrite=true\n // canWrite is determined by editorMode (AppMode.Edit vs AppMode.Run)\n return makeCuesheetColumns(customFields, AppMode.Edit, undefined);\n}\n","import { memo, useEffect, useMemo } from 'react';\n\nimport EmptyPage from '../../../common/components/state/EmptyPage';\nimport useCustomFields from '../../../common/hooks-query/useCustomFields';\nimport CuesheetDnd from '../../../views/cuesheet/cuesheet-dnd/CuesheetDnd';\nimport CuesheetTable from '../../../views/cuesheet/cuesheet-table/CuesheetTable';\nimport { useCuesheetPermissions } from '../../../views/cuesheet/useTablePermissions';\nimport { useEditorFollowMode } from '../useEditorFollowMode';\n\nimport { makeRundownColumns } from './makeRundownColumns';\n\nexport default memo(RundownTable);\nfunction RundownTable() {\n const { data: customFields, status: customFieldStatus } = useCustomFields();\n const setPermissions = useCuesheetPermissions((state) => state.setPermissions);\n const { editorMode } = useEditorFollowMode();\n\n // Editor always has full permissions\n useEffect(() => {\n setPermissions({\n canChangeMode: true,\n canCreateEntries: true,\n canEditEntries: true,\n canFlag: true,\n canShare: true,\n });\n }, [setPermissions]);\n\n const columns = useMemo(() => makeRundownColumns(customFields), [customFields]);\n\n const isLoading = !customFields || customFieldStatus === 'pending';\n\n return (\n <CuesheetDnd columns={columns} tableRoot='editor'>\n {isLoading ? (\n <EmptyPage text='Loading...' />\n ) : (\n <CuesheetTable columns={columns} cuesheetMode={editorMode} tableRoot='editor' />\n )}\n </CuesheetDnd>\n );\n}\n","import { create } from 'zustand';\n\ntype EntryCopyStore = {\n entryCopyId: string | null;\n entryCopyMode: 'copy' | 'cut';\n setEntryCopyId: (eventId: string | null, mode?: 'copy' | 'cut') => void;\n};\n\nexport const useEntryCopy = create<EntryCopyStore>()((set) => ({\n entryCopyId: null,\n entryCopyMode: 'copy',\n setEntryCopyId: (entryCopyId: string | null, mode: 'copy' | 'cut' = 'copy') =>\n set({ entryCopyId, entryCopyMode: mode }),\n}));\n","import { memo } from 'react';\nimport { IoAdd } from 'react-icons/io5';\nimport { Toolbar } from '@base-ui/react/toolbar';\nimport { MaybeString, SupportedEntry } from 'ontime-types';\n\nimport Button from '../../../../common/components/buttons/Button';\nimport { useEntryActionsContext } from '../../../../common/context/EntryActionsContext';\nimport { cx } from '../../../../common/utils/styleUtils';\n\nimport style from './QuickAddButtons.module.scss';\n\ninterface QuickAddButtonsProps {\n previousEventId: MaybeString;\n parentGroup: MaybeString;\n backgroundColor?: string;\n}\n\nexport default memo(QuickAddButtons);\nfunction QuickAddButtons({ previousEventId, parentGroup, backgroundColor }: QuickAddButtonsProps) {\n const { addEntry } = useEntryActionsContext();\n\n const addEvent = () => {\n addEntry(\n {\n type: SupportedEntry.Event,\n parent: parentGroup,\n },\n {\n after: previousEventId,\n lastEventId: previousEventId,\n },\n );\n };\n\n const addDelay = () => {\n addEntry(\n { type: SupportedEntry.Delay, parent: parentGroup },\n {\n lastEventId: previousEventId,\n after: previousEventId,\n },\n );\n };\n\n const addMilestone = () => {\n addEntry(\n { type: SupportedEntry.Milestone, parent: parentGroup },\n {\n lastEventId: previousEventId,\n after: previousEventId,\n },\n );\n };\n\n const addGroup = () => {\n if (parentGroup !== null) {\n return;\n }\n addEntry(\n { type: SupportedEntry.Group },\n {\n lastEventId: previousEventId,\n after: previousEventId,\n },\n );\n };\n\n /**\n * If the colour is empty string ''\n * ie: we are inside a group, but there is no defined colour\n * we default to $gray-500 #9d9d9d\n */\n const groupColour = backgroundColor === '' ? '#9d9d9d' : backgroundColor;\n\n return (\n <Toolbar.Root\n className={cx([style.quickAdd, Boolean(parentGroup) && style.indent])}\n style={groupColour ? { '--user-bg': groupColour } : {}}\n data-testid='quick-add-buttons'\n >\n <Toolbar.Button render={<Button size='small' />} onClick={addEvent}>\n <IoAdd />\n Event\n </Toolbar.Button>\n\n <Toolbar.Button render={<Button size='small' />} onClick={addDelay}>\n <IoAdd />\n Delay\n </Toolbar.Button>\n\n <Toolbar.Button render={<Button size='small' />} onClick={addMilestone}>\n <IoAdd />\n Milestone\n </Toolbar.Button>\n\n {parentGroup === null && (\n <Toolbar.Button render={<Button size='small' />} onClick={addGroup}>\n <IoAdd />\n Group\n </Toolbar.Button>\n )}\n </Toolbar.Root>\n );\n}\n","import { memo } from 'react';\nimport { IoAdd } from 'react-icons/io5';\nimport { MaybeString, SupportedEntry } from 'ontime-types';\n\nimport IconButton from '../../../../common/components/buttons/IconButton';\nimport { DropdownMenu } from '../../../../common/components/dropdown-menu/DropdownMenu';\nimport { useEntryActionsContext } from '../../../../common/context/EntryActionsContext';\n\nimport style from './QuickAddInline.module.scss';\n\ninterface QuickAddInlineProps {\n referenceEntryId: MaybeString;\n parentGroup: MaybeString;\n placement: 'before' | 'after';\n}\n\nexport default memo(QuickAddInline);\nfunction QuickAddInline({ referenceEntryId, parentGroup, placement }: QuickAddInlineProps) {\n const { addEntry } = useEntryActionsContext();\n\n const handleAddEntry = (type: SupportedEntry) => {\n if (placement === 'before') {\n addEntry(\n { type, parent: type !== SupportedEntry.Group ? parentGroup : null },\n {\n before: referenceEntryId,\n },\n );\n } else {\n addEntry(\n { type, parent: type !== SupportedEntry.Group ? parentGroup : null },\n {\n lastEventId: referenceEntryId,\n after: referenceEntryId,\n },\n );\n }\n };\n\n return (\n <div className={style.quickAdd} data-testid='quick-add-inline'>\n <DropdownMenu\n items={[\n { type: 'item', icon: IoAdd, label: 'Add Event', onClick: () => handleAddEntry(SupportedEntry.Event) },\n { type: 'item', icon: IoAdd, label: 'Add Delay', onClick: () => handleAddEntry(SupportedEntry.Delay) },\n {\n type: 'item',\n icon: IoAdd,\n label: 'Add Milestone',\n onClick: () => handleAddEntry(SupportedEntry.Milestone),\n },\n {\n type: 'item',\n icon: IoAdd,\n label: 'Add Group',\n onClick: () => handleAddEntry(SupportedEntry.Group),\n disabled: parentGroup !== null,\n },\n ]}\n render={<IconButton size='small' variant='primary' className={style.addButton} />}\n >\n <IoAdd />\n </DropdownMenu>\n </div>\n );\n}\n","import { useCallback } from 'react';\nimport { type EntryId, type OntimeEntry, type Rundown, SupportedEntry } from 'ontime-types';\nimport { getNextGroupNormal, getNextNormal, getPreviousGroupNormal, getPreviousNormal } from 'ontime-utils';\n\nimport type { useEntryActions } from '../../../common/hooks/useEntryAction';\nimport { useEntryCopy } from '../../../common/stores/entryCopyStore';\nimport { SelectionMode } from '../useEventSelection';\n\nconst PAGE_SIZE = 5;\n\ninterface UseRundownCommandsOptions {\n entries: Rundown['entries'];\n flatOrder: EntryId[];\n entryActions: ReturnType<typeof useEntryActions>;\n selectEntry: (selection: { id: EntryId; selectMode: SelectionMode; index: number }) => void;\n handleCollapseGroup: (collapsed: boolean, groupId: EntryId) => void;\n}\n\n/**\n * Common operations for the rundown lists\n */\nexport function useRundownCommands({\n entries,\n flatOrder,\n entryActions,\n selectEntry: applySelection,\n handleCollapseGroup,\n}: UseRundownCommandsOptions) {\n const { addEntry, clone, deleteEntry, move, reorderEntry } = entryActions;\n\n const deleteAtCursor = useCallback(\n (cursor: string | null) => {\n if (!cursor) return;\n const { entry, index } = getPreviousNormal(entries, flatOrder, cursor);\n deleteEntry([cursor]);\n if (entry && index !== null) {\n applySelection({ id: entry.id, selectMode: 'click', index });\n }\n },\n [entries, flatOrder, deleteEntry, applySelection],\n );\n\n const insertCopyAtId = useCallback(\n (atId: EntryId | null, above = false) => {\n // lazily get the value from the store\n const { entryCopyId, entryCopyMode, setEntryCopyId } = useEntryCopy.getState();\n if (entryCopyId === null || !entries[entryCopyId]) {\n // we cant clone without selection\n return;\n }\n\n let normalisedAtId = atId;\n\n const elementToCopy = entries[entryCopyId];\n const refElement = atId ? entries[atId] : undefined;\n\n if (refElement && 'parent' in refElement && refElement.parent && elementToCopy.type === SupportedEntry.Group) {\n normalisedAtId = refElement.parent;\n }\n\n if (entryCopyMode === 'cut') {\n if (!normalisedAtId) {\n const firstId = flatOrder[0];\n if (!firstId || firstId === entryCopyId) {\n return;\n }\n reorderEntry(entryCopyId, firstId, 'before')\n .then(() => setEntryCopyId(null))\n .catch(() => {});\n return;\n }\n if (normalisedAtId === entryCopyId) {\n return;\n }\n const placement = above ? 'before' : 'after';\n reorderEntry(entryCopyId, normalisedAtId, placement)\n .then(() => setEntryCopyId(null))\n .catch(() => {});\n return;\n }\n\n clone(entryCopyId, {\n after: above ? undefined : normalisedAtId ?? undefined,\n // if we don't have a cursor add the new event on top\n before: above ? normalisedAtId ?? undefined : undefined,\n });\n },\n [entries, flatOrder, clone, reorderEntry],\n );\n\n /**\n * Add a new item referring to an existing one\n */\n const insertAtId = useCallback(\n (patch: Partial<OntimeEntry> & { type: SupportedEntry }, id: EntryId | null, above = false) => {\n addEntry(patch, {\n after: id && !above ? id : undefined,\n before: id && above ? id : undefined,\n lastEventId: !above && id ? id : undefined,\n });\n },\n [addEntry],\n );\n\n const selectGroup = useCallback(\n (cursor: EntryId | null, direction: 'up' | 'down') => {\n if (flatOrder.length < 1) {\n return null;\n }\n const selected =\n direction === 'up'\n ? getPreviousGroupNormal(entries, flatOrder, cursor)\n : getNextGroupNormal(entries, flatOrder, cursor);\n\n if (selected.entry && selected.index !== null) {\n applySelection({ id: selected.entry.id, selectMode: 'click', index: selected.index });\n return selected.entry.id;\n }\n return null;\n },\n [flatOrder, entries, applySelection],\n );\n\n const selectEntry = useCallback(\n (cursor: EntryId | null, direction: 'up' | 'down') => {\n if (flatOrder.length < 1) {\n return null;\n }\n\n const selected =\n direction === 'up' ? getPreviousNormal(entries, flatOrder, cursor) : getNextNormal(entries, flatOrder, cursor);\n\n if (selected.entry && selected.index !== null) {\n applySelection({ id: selected.entry.id, selectMode: 'click', index: selected.index });\n return selected.entry.id;\n }\n return null;\n },\n [flatOrder, entries, applySelection],\n );\n\n const moveEntry = useCallback(\n async (cursor: EntryId | null, direction: 'up' | 'down') => {\n if (cursor == null) {\n return;\n }\n\n const movedIntoGroupId = await move(cursor, direction);\n // if we are moving into a group, we need to make sure it is expanded\n if (movedIntoGroupId) {\n handleCollapseGroup(false, movedIntoGroupId);\n }\n },\n [handleCollapseGroup, move],\n );\n\n const cloneEntry = useCallback(\n (cursor: EntryId | null) => {\n if (!cursor) {\n return;\n }\n clone(cursor, { after: cursor });\n },\n [clone],\n );\n\n const selectEdge = useCallback(\n (direction: 'top' | 'bottom') => {\n if (flatOrder.length < 1) {\n return null;\n }\n\n const index = direction === 'top' ? 0 : flatOrder.length - 1;\n const selectedId = flatOrder[index];\n if (!selectedId) return null;\n\n applySelection({ id: selectedId, selectMode: 'click', index });\n return selectedId;\n },\n [flatOrder, applySelection],\n );\n\n const selectPage = useCallback(\n (cursor: EntryId | null, direction: 'up' | 'down') => {\n if (flatOrder.length < 1) {\n return null;\n }\n\n let currentIndex = cursor ? flatOrder.indexOf(cursor) : -1;\n if (currentIndex === -1) {\n currentIndex = direction === 'down' ? -1 : flatOrder.length;\n }\n\n let targetIndex = currentIndex;\n let lastValidIndex: number | null = null;\n for (let step = 0; step < PAGE_SIZE; step += 1) {\n targetIndex = direction === 'down' ? targetIndex + 1 : targetIndex - 1;\n if (targetIndex < 0 || targetIndex >= flatOrder.length) {\n break;\n }\n lastValidIndex = targetIndex;\n }\n\n if (lastValidIndex === null) {\n return null;\n }\n\n const selectedId = flatOrder[lastValidIndex];\n if (!selectedId) return null;\n\n applySelection({ id: selectedId, selectMode: 'click', index: lastValidIndex });\n return selectedId;\n },\n [flatOrder, applySelection],\n );\n\n return {\n cloneEntry,\n deleteAtCursor,\n insertCopyAtId,\n insertAtId,\n selectGroup,\n selectEntry,\n moveEntry,\n selectEdge,\n selectPage,\n };\n}\n","import { Dispatch, SetStateAction, useCallback, useMemo, useRef } from 'react';\nimport { DragEndEvent, DragOverEvent, DragStartEvent, PointerSensor, useSensor, useSensors } from '@dnd-kit/core';\nimport { type EntryId, type Rundown, isOntimeGroup, SupportedEntry } from 'ontime-types';\nimport { reorderArray } from 'ontime-utils';\n\nimport type { useEntryActions } from '../../../common/hooks/useEntryAction';\nimport { canDrop } from '../rundown.utils';\n\ninterface UseRundownDndOptions {\n entries: Rundown['entries'];\n sortableData: EntryId[];\n setSortableData: Dispatch<SetStateAction<EntryId[]>>;\n getIsCollapsed: (groupId: EntryId) => boolean;\n handleCollapseGroup: (collapsed: boolean, groupId: EntryId | undefined) => void;\n entryActions: ReturnType<typeof useEntryActions>;\n}\n\nexport function useRundownDnd({\n entries,\n sortableData,\n setSortableData,\n getIsCollapsed,\n handleCollapseGroup,\n entryActions,\n}: UseRundownDndOptions) {\n const { reorderEntry } = entryActions;\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 10 } }));\n const isDraggingRef = useRef(false);\n\n /**\n * On drag end, we reorder the events\n */\n const handleOnDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n isDraggingRef.current = false;\n\n if (!over?.id || active.id === over.id) {\n return;\n }\n\n if (!active.data.current || !over.data.current) {\n return;\n }\n\n const fromIndex: number = active.data.current.sortable.index;\n const toIndex: number = over.data.current.sortable.index;\n let placement: 'before' | 'after' | 'insert' = fromIndex < toIndex ? 'after' : 'before';\n\n let destinationId = over.id as EntryId;\n const isDraggingGroup = active.data.current?.type === SupportedEntry.Group;\n\n // prevent dropping a group inside another\n if (\n isDraggingGroup &&\n !canDrop(over.data.current.type, over.data.current.parent, placement, getIsCollapsed(destinationId))\n ) {\n return;\n }\n\n /**\n * We need to specially handle the end-group\n * Dragging before a end-group will add the entry to the end of the group\n * Dragging after a end-group will add the event after the group itself\n * Dragging to the top of a group either place before first entry or if no entries do insert\n */\n if (destinationId.startsWith('end-')) {\n destinationId = destinationId.replace('end-', '');\n // if we are moving before the end, we use the insert operation\n if (placement === 'before') {\n placement = 'insert';\n }\n } else {\n const group = entries[destinationId];\n // if dragging into a group\n if (isOntimeGroup(group) && placement === 'after') {\n if (isDraggingGroup) {\n // ... and the dragged entry is a group, we know that the group is collapsed, because of the safe check canDrop from before\n // so we can safely push the dragged event after the group\n destinationId = group.id;\n } else if (group.entries.length === 0) {\n // ... and the group is entry, we insert\n destinationId = group.id;\n placement = 'insert';\n } else {\n // otherwise we add it to before the first group child\n destinationId = group.entries[0];\n placement = 'before';\n }\n }\n }\n\n // Optimistic update pattern to keep DND responsive\n // 1. Keep copy of current state in case we need to revert\n const currentEntries = [...sortableData];\n // 2. Immediately update local state for responsive UI\n setSortableData((currentEntries) => {\n return reorderArray(currentEntries, fromIndex, toIndex);\n });\n // 3. Trigger async mutation, revert on error\n reorderEntry(active.id as EntryId, destinationId, placement).catch((_) => {\n setSortableData(currentEntries);\n });\n },\n [entries, sortableData, setSortableData, getIsCollapsed, reorderEntry],\n );\n\n /**\n * When we drag a group, we force collapse it\n * This avoids strange scenarios like dropping a group inside itself\n */\n const collapseDraggedGroups = useCallback(\n (event: DragStartEvent) => {\n isDraggingRef.current = true;\n const isGroup = event.active.data.current?.type === SupportedEntry.Group;\n if (isGroup) {\n handleCollapseGroup(true, event.active.id as EntryId);\n }\n },\n [handleCollapseGroup],\n );\n\n /**\n * When we drag over a group, we expand it if it is collapsed\n */\n const expandOverGroup = useCallback(\n (event: DragOverEvent) => {\n // if we are dragging a group, the drop operation is invalid so we dont expand\n if (event.active.data.current?.type === SupportedEntry.Group) {\n return;\n }\n if (event.over?.data.current?.type !== SupportedEntry.Group) {\n return;\n }\n\n const groupId = event.over?.id as EntryId | undefined;\n handleCollapseGroup(false, groupId);\n },\n [handleCollapseGroup],\n );\n\n return useMemo(\n () => ({\n sensors,\n isDraggingRef,\n handleOnDragEnd,\n collapseDraggedGroups,\n expandOverGroup,\n }),\n [sensors, handleOnDragEnd, collapseDraggedGroups, expandOverGroup],\n );\n}\n","import { useHotkeys } from '@mantine/hooks';\nimport { type OntimeEntry, EntryId, SupportedEntry } from 'ontime-types';\n\nimport { useEntryCopy } from '../../../common/stores/entryCopyStore';\nimport { useEventSelection } from '../useEventSelection';\n\ninterface UseRundownKeyboardOptions {\n cursor: EntryId | null;\n commands: {\n selectEntry: (cursor: EntryId | null, direction: 'up' | 'down') => EntryId | null;\n selectGroup: (cursor: EntryId | null, direction: 'up' | 'down') => EntryId | null;\n selectEdge: (direction: 'top' | 'bottom') => EntryId | null;\n selectPage: (cursor: EntryId | null, direction: 'up' | 'down') => EntryId | null;\n cloneEntry: (cursor: EntryId | null) => void;\n moveEntry: (cursor: EntryId | null, direction: 'up' | 'down') => void;\n deleteAtCursor: (cursor: EntryId | null) => void;\n insertAtId: (patch: Partial<OntimeEntry> & { type: SupportedEntry }, id: EntryId | null, above?: boolean) => void;\n insertCopyAtId: (atId: EntryId | null, above?: boolean) => void;\n };\n clearSelectedEvents: () => void;\n setEntryCopyId: (id: EntryId | null, mode?: 'copy' | 'cut') => void;\n}\n\n/**\n * Returns true when a keyboard event target is a text input element.\n * Use this to avoid intercepting browser-native copy/cut/paste shortcuts\n * while users are typing in form fields.\n */\nfunction isEditableElement(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n\n const tagName = target.tagName.toLowerCase();\n return tagName === 'input' || tagName === 'textarea';\n}\n\nexport function useRundownKeyboard({\n cursor,\n commands,\n clearSelectedEvents,\n setEntryCopyId,\n}: UseRundownKeyboardOptions) {\n const scrollToEntry = useEventSelection((state) => state.scrollToEntry);\n\n useHotkeys([\n [\n 'alt + ArrowDown',\n () => {\n const nextId = commands.selectEntry(cursor, 'down');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + ArrowUp',\n () => {\n const nextId = commands.selectEntry(cursor, 'up');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'alt + shift + ArrowDown',\n () => {\n const nextId = commands.selectGroup(cursor, 'down');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + shift + ArrowUp',\n () => {\n const nextId = commands.selectGroup(cursor, 'up');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'Home',\n () => {\n const nextId = commands.selectEdge('top');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'End',\n () => {\n const nextId = commands.selectEdge('bottom');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'PageUp',\n () => {\n const nextId = commands.selectPage(cursor, 'up');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'PageDown',\n () => {\n const nextId = commands.selectPage(cursor, 'down');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'alt + mod + ArrowDown',\n () => commands.moveEntry(cursor, 'down'),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n ['alt + mod + ArrowUp', () => commands.moveEntry(cursor, 'up'), { preventDefault: true, usePhysicalKeys: true }],\n\n [\n 'Escape',\n () => {\n clearSelectedEvents();\n setEntryCopyId(null);\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n ['alt + Backspace', () => commands.deleteAtCursor(cursor), { preventDefault: true, usePhysicalKeys: true }],\n\n [\n 'alt + E',\n () => commands.insertAtId({ type: SupportedEntry.Event }, cursor),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + shift + E',\n () => commands.insertAtId({ type: SupportedEntry.Event }, cursor, true),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'alt + G',\n () => commands.insertAtId({ type: SupportedEntry.Group }, cursor),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + shift + G',\n () => commands.insertAtId({ type: SupportedEntry.Group }, cursor, true),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'alt + D',\n () => commands.insertAtId({ type: SupportedEntry.Delay }, cursor),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + shift + D',\n () => commands.insertAtId({ type: SupportedEntry.Delay }, cursor, true),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'alt + M',\n () => commands.insertAtId({ type: SupportedEntry.Milestone }, cursor),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + shift + M',\n () => commands.insertAtId({ type: SupportedEntry.Milestone }, cursor, true),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'mod + C',\n (event) => {\n if (cursor === null || isEditableElement(event.target)) {\n return;\n }\n event.preventDefault();\n setEntryCopyId(cursor);\n },\n { usePhysicalKeys: true },\n ],\n [\n 'mod + X',\n (event) => {\n if (cursor === null || isEditableElement(event.target)) {\n return;\n }\n event.preventDefault();\n setEntryCopyId(cursor, 'cut');\n },\n { usePhysicalKeys: true },\n ],\n [\n 'mod + V',\n (event) => {\n if (isEditableElement(event.target) || useEntryCopy.getState().entryCopyId === null) {\n return;\n }\n event.preventDefault();\n commands.insertCopyAtId(cursor);\n },\n { usePhysicalKeys: true },\n ],\n ['mod + D', () => commands.cloneEntry(cursor), { preventDefault: true, usePhysicalKeys: true }],\n [\n 'mod + shift + V',\n (event) => {\n if (isEditableElement(event.target) || useEntryCopy.getState().entryCopyId === null) {\n return;\n }\n event.preventDefault();\n commands.insertCopyAtId(cursor, true);\n },\n { usePhysicalKeys: true },\n ],\n ]);\n}\n","import { MouseEvent, useCallback } from 'react';\n\nimport { useContextMenuStore } from '../../features/rundown/rundown-context-menu/RundownContextMenu';\nimport { DropdownMenuOption } from '../components/dropdown-menu/DropdownMenu';\n\ntype ContextMenuOptions = () => DropdownMenuOption[];\n\nexport const useContextMenu = <T extends HTMLElement>(options: ContextMenuOptions) => {\n const setContextMenu = useContextMenuStore((state) => state.setContextMenu);\n\n const localCreateContextMenu = useCallback(\n (contextMenuEvent: MouseEvent<T, globalThis.MouseEvent>) => {\n // prevent browser default context menu from showing up\n contextMenuEvent.preventDefault();\n\n const { pageX, pageY } = contextMenuEvent;\n const menuOptions = options();\n return setContextMenu({ x: pageX, y: pageY }, menuOptions);\n },\n [options, setContextMenu],\n );\n\n return [localCreateContextMenu];\n};\n","import { useCallback, useRef } from 'react';\n\nimport Input from '../../../common/components/input/input/Input';\nimport useReactiveTextInput from '../../../common/components/input/text-input/useReactiveTextInput';\nimport { useEntryActionsContext } from '../../../common/context/EntryActionsContext';\nimport { cx } from '../../../common/utils/styleUtils';\n\nimport style from './TitleEditor.module.scss';\n\ninterface TitleEditorProps {\n title: string;\n entryId: string;\n placeholder: string;\n className?: string;\n}\n\nexport default function TitleEditor({ title, entryId, placeholder, className }: TitleEditorProps) {\n const { updateEntry } = useEntryActionsContext();\n const ref = useRef<HTMLInputElement | null>(null);\n const submitCallback = useCallback(\n (text: string) => {\n if (text === title) {\n return;\n }\n\n const cleanVal = text.trim();\n updateEntry({ id: entryId, title: cleanVal });\n },\n [title, updateEntry, entryId],\n );\n\n const { value, onChange, onBlur, onKeyDown } = useReactiveTextInput(title, submitCallback, ref, {\n submitOnEnter: true,\n });\n\n const classes = cx([className, style.eventTitle, !value ? style.noTitle : null]);\n\n return (\n <Input\n data-testid='entry__title'\n variant='ghosted'\n fluid\n ref={ref}\n value={value}\n className={classes}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n />\n );\n}\n","import { MouseEvent, useRef } from 'react';\nimport {\n IoChevronDown,\n IoChevronUp,\n IoDuplicateOutline,\n IoFolderOpenOutline,\n IoReorderTwo,\n IoTrash,\n} from 'react-icons/io5';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { EntryId, OntimeGroup } from 'ontime-types';\nimport { MILLIS_PER_MINUTE, millisToString } from 'ontime-utils';\n\nimport IconButton from '../../../common/components/buttons/IconButton';\nimport Tag from '../../../common/components/tag/Tag';\nimport { useEntryActionsContext } from '../../../common/context/EntryActionsContext';\nimport { useContextMenu } from '../../../common/hooks/useContextMenu';\nimport { useEntryCopy } from '../../../common/stores/entryCopyStore';\nimport { deviceMod } from '../../../common/utils/deviceUtils';\nimport { getOffsetState } from '../../../common/utils/offset';\nimport { cx, getAccessibleColour, timerPlaceholder } from '../../../common/utils/styleUtils';\nimport { formatDuration } from '../../../common/utils/time';\nimport TitleEditor from '../common/TitleEditor';\nimport { canDrop } from '../rundown.utils';\nimport { useEventSelection } from '../useEventSelection';\n\nimport style from './RundownGroup.module.scss';\n\ninterface RundownGroupProps {\n data: OntimeGroup;\n hasCursor: boolean;\n collapsed: boolean;\n onCollapse: (collapsed: boolean, groupId: EntryId) => void;\n}\n\n//TODO: the group should maybe include a multiple day indicator\nexport default function RundownGroup({ data, hasCursor, collapsed, onCollapse }: RundownGroupProps) {\n 'use memo';\n\n const handleRef = useRef<null | HTMLSpanElement>(null);\n const { clone, ungroup, deleteEntry } = useEntryActionsContext();\n\n const selectSingleEntry = useEventSelection((state) => state.setSingleEntrySelection);\n const selectedEvents = useEventSelection((state) => state.selectedEvents);\n const entryCopyId = useEntryCopy((state) => state.entryCopyId);\n\n const [onContextMenu] = useContextMenu<HTMLDivElement>(() => [\n {\n type: 'item',\n label: 'Clone Group',\n icon: IoDuplicateOutline,\n shortcut: `${deviceMod}+D`,\n onClick: () => clone(data.id),\n },\n {\n type: 'item',\n label: 'Ungroup',\n icon: IoFolderOpenOutline,\n onClick: () => ungroup(data.id),\n disabled: data.entries.length === 0,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Delete Group',\n icon: IoTrash,\n shortcut: `${deviceMod}+Del`,\n onClick: () => deleteEntry([data.id]),\n },\n ]);\n\n const {\n attributes: dragAttributes,\n listeners: dragListeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n isOver,\n over,\n } = useSortable({\n id: data.id,\n data: {\n type: 'group',\n },\n animateLayoutChanges: () => false,\n });\n\n const handleFocusClick = (event: MouseEvent) => {\n event.stopPropagation();\n\n // event.button === 2 is a right-click\n // disable selection if the user selected events and right clicks\n // so the context menu shows up\n if (selectedEvents.size > 1 && event.button === 2) {\n return;\n }\n\n // UI indexes are 1 based\n selectSingleEntry({ id: data.id });\n };\n\n const binderColours = data.colour && getAccessibleColour(data.colour);\n const isValidDrop = isDragging && over?.id && canDrop(over.data.current?.type, over.data.current?.parent);\n\n const [planOffset, planOffsetLabel] = (() => {\n if (data.targetDuration === null) {\n return [null, null];\n }\n\n const offset = data.duration - data.targetDuration;\n if (offset === 0) {\n return [null, 'under'];\n }\n const absOffset = Math.abs(offset);\n return [\n `${offset < 0 ? '-' : '+'}${formatDuration(absOffset, absOffset > 2 * MILLIS_PER_MINUTE)}`,\n getOffsetState(offset),\n ];\n })();\n\n const dragStyle = {\n zIndex: isDragging ? 2 : 'inherit',\n transform: CSS.Translate.toString(transform),\n transition,\n cursor: isOver ? (isValidDrop ? 'grabbing' : 'no-drop') : 'inherit',\n };\n\n return (\n <div\n className={cx([\n style.group,\n hasCursor && style.hasCursor,\n !collapsed && style.expanded,\n entryCopyId === data.id && style.copyTarget,\n ])}\n ref={setNodeRef}\n onClick={handleFocusClick}\n onContextMenu={onContextMenu}\n style={{\n ...dragStyle,\n '--user-bg': data.colour || '#929292',\n }}\n data-testid='rundown-group'\n >\n <div className={style.binder} style={{ ...binderColours }} tabIndex={-1}>\n <span\n className={cx([style.drag, isDragging && style.isDragging, isDragging && !isValidDrop && style.notAllowed])}\n ref={handleRef}\n {...dragAttributes}\n {...dragListeners}\n >\n <IoReorderTwo />\n </span>\n </div>\n <div className={style.header}>\n <div className={style.titleRow}>\n <TitleEditor title={data.title} entryId={data.id} placeholder='Group title' />\n <IconButton aria-label='Collapse' variant='subtle-white' onClick={() => onCollapse(!collapsed, data.id)}>\n {collapsed ? <IoChevronUp /> : <IoChevronDown />}\n </IconButton>\n </div>\n <div className={style.metaRow}>\n <div className={style.metaEntry}>\n <div className={style.metaLabel}>Entries</div>\n <div>{data.entries.length}</div>\n </div>\n <div className={style.metaEntry}>\n <div className={style.metaLabel}>Start</div>\n <div>{millisToString(data.timeStart, { fallback: timerPlaceholder })}</div>\n </div>\n <div className={style.metaEntry}>\n <div className={style.metaLabel}>End</div>\n <div>{millisToString(data.timeEnd, { fallback: timerPlaceholder })}</div>\n </div>\n <div className={style.metaEntry}>\n <div className={style.metaLabel}>Duration</div>\n {planOffset === null ? (\n <div>{formatDuration(data.duration)}</div>\n ) : (\n <div className={cx([planOffsetLabel && style[planOffsetLabel]])}>\n <span className={style.strike}>{formatDuration(data.duration)}</span>\n <Tag className={style.offsetLabel}>{planOffset}</Tag>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nimport style from './RundownGroupEnd.module.scss';\n\ninterface RundownGroupEndProps {\n id: string;\n colour?: string;\n}\n\nexport default function RundownGroupEnd({ id, colour }: RundownGroupEndProps) {\n const {\n attributes: dragAttributes,\n listeners: dragListeners,\n setNodeRef,\n transform,\n transition,\n } = useSortable({\n id,\n data: {\n type: 'end-group',\n },\n animateLayoutChanges: () => false,\n disabled: true, // we do not want to drag end groups\n });\n\n const dragStyle = {\n transform: CSS.Transform.toString(transform),\n transition,\n };\n\n return (\n <div\n className={style.groupEnd}\n ref={setNodeRef}\n {...dragAttributes}\n {...dragListeners}\n style={{\n ...dragStyle,\n ...(colour ? { '--user-bg': colour } : {}),\n }}\n tabIndex={-1}\n />\n );\n}\n","import { IoAdd } from 'react-icons/io5';\nimport { SupportedEntry } from 'ontime-types';\n\nimport Button from '../../common/components/buttons/Button';\nimport * as Editor from '../../common/components/editor-utils/EditorUtils';\nimport Empty from '../../common/components/state/Empty';\n\nimport style from './Empty.module.scss';\n\ninterface RundownEmptyProps {\n handleAddNew: (type: SupportedEntry) => void;\n}\n\nexport default function RundownEmpty(props: RundownEmptyProps) {\n const { handleAddNew } = props;\n\n return (\n <div className={style.empty}>\n <Empty injectedStyles={{ marginTop: '5vh', marginBottom: '3rem' }} />\n <div className={style.inline}>\n <Button onClick={() => handleAddNew(SupportedEntry.Event)} variant='primary' size='large'>\n <IoAdd />\n Create Event\n </Button>\n\n <Editor.Separator />\n\n <Button onClick={() => handleAddNew(SupportedEntry.Group)} variant='primary' size='large'>\n <IoAdd /> Create Group\n </Button>\n </div>\n </div>\n );\n}\n","import { Radio } from '@base-ui/react/radio';\nimport { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';\n\nimport style from './BlockRadio.module.scss';\n\ninterface BlockRadioProps<T extends string | number | boolean> extends Omit<BaseRadioGroup.Props, 'onValueChange'> {\n items: {\n value: T;\n label: string;\n }[];\n onValueChange?: (value: T) => void;\n}\n\nexport default function BlockRadio<T extends string | number | boolean>({\n items,\n onValueChange,\n ...elementProps\n}: BlockRadioProps<T>) {\n return (\n <BaseRadioGroup\n onValueChange={(value) => onValueChange?.(value as T)}\n className={style.radioGroup}\n {...elementProps}\n >\n {items.map((item) => (\n <label className={style.item} key={item.value.toString()}>\n <Radio.Root value={item.value.toString()} className={style.radio}>\n <Radio.Indicator className={style.indicator} />\n </Radio.Root>\n {item.label}\n </label>\n ))}\n </BaseRadioGroup>\n );\n}\n","import { KeyboardEvent, useEffect, useRef, useState } from 'react';\nimport { millisToString, parseUserTime } from 'ontime-utils';\n\nimport Input from '../../../common/components/input/input/Input';\nimport { useEntryActionsContext } from '../../../common/context/EntryActionsContext';\n\nimport BlockRadio from './BlockRadio';\n\nimport style from './DelayInput.module.scss';\n\ninterface DelayInputProps {\n eventId: string;\n duration: number;\n}\n\nexport default function DelayInput({ eventId, duration }: DelayInputProps) {\n const { updateEntry } = useEntryActionsContext();\n\n const [value, setValue] = useState<string>('');\n const inputRef = useRef<HTMLInputElement | null>(null);\n // avoid wrong submit on cancel\n const ignoreChangeRef = useRef(false);\n\n // set internal value on duration change\n useEffect(() => {\n if (typeof duration === 'undefined') {\n return;\n }\n setValue(millisToString(duration));\n }, [duration]);\n\n /**\n * @description Prepare delay value for update\n * @param {string} newValue string to be parsed\n */\n const validateAndSubmit = (newValue: string) => {\n if (ignoreChangeRef.current) {\n ignoreChangeRef.current = false;\n return;\n }\n\n const isNegative = newValue.startsWith('-');\n let newMillis = parseUserTime(newValue);\n\n if (isNegative) {\n newMillis = newMillis * -1;\n }\n\n if (newMillis === duration) {\n return;\n }\n\n submitChange(newMillis);\n setValue(millisToString(newMillis));\n };\n\n const submitChange = (value: number) => {\n updateEntry({\n id: eventId,\n duration: value,\n });\n };\n\n /**\n * @description Selects input text on focus\n */\n const handleFocus = () => inputRef.current?.select();\n\n /**\n * @description Handles common keys for submit and cancel\n * @param {KeyboardEvent} event\n */\n const onKeyDownHandler = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n inputRef.current?.blur();\n validateAndSubmit((event.target as HTMLInputElement).value);\n } else if (event.key === 'Tab') {\n validateAndSubmit((event.target as HTMLInputElement).value);\n } else if (event.key === 'Escape') {\n ignoreChangeRef.current = true;\n setValue(millisToString(duration));\n inputRef.current?.blur();\n }\n };\n\n /**\n * @description handles direction change to delay\n * @param newDirection\n */\n const handleSlipChange = (newDirection: 'add' | 'subtract') => {\n if (newDirection === 'add') {\n // add time\n if (duration < 0) {\n submitChange(duration * -1);\n }\n } else if (newDirection === 'subtract') {\n // subtract time\n if (duration > 0) {\n submitChange(duration * -1);\n }\n }\n };\n\n const checkedOption = value.startsWith('-') ? 'subtract' : 'add';\n\n return (\n <div className={style.delayInput}>\n <Input\n ref={inputRef}\n data-testid='delay-input'\n className={style.inputField}\n placeholder='-'\n onFocus={handleFocus}\n onChange={(event) => setValue(event.target.value)}\n onBlur={(event) => validateAndSubmit(event.target.value)}\n onKeyDown={onKeyDownHandler}\n value={value}\n maxLength={9}\n />\n <BlockRadio\n onValueChange={handleSlipChange}\n value={checkedOption}\n items={[\n { value: 'add', label: 'Add time' },\n { value: 'subtract', label: 'Subtract time' },\n ]}\n />\n </div>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { IoCheckmarkDone, IoClose, IoReorderTwo } from 'react-icons/io5';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { OntimeDelay } from 'ontime-types';\n\nimport Button from '../../../common/components/buttons/Button';\nimport { useEntryActionsContext } from '../../../common/context/EntryActionsContext';\nimport { useEntryCopy } from '../../../common/stores/entryCopyStore';\nimport { cx } from '../../../common/utils/styleUtils';\n\nimport DelayInput from './DelayInput';\n\nimport style from './RundownDelay.module.scss';\n\ninterface RundownDelayProps {\n data: OntimeDelay;\n hasCursor: boolean;\n}\n\nexport default function RundownDelay({ data, hasCursor }: RundownDelayProps) {\n 'use memo';\n\n const { applyDelay, deleteEntry } = useEntryActionsContext();\n const handleRef = useRef<null | HTMLSpanElement>(null);\n const entryCopyId = useEntryCopy((state) => state.entryCopyId);\n\n const {\n attributes: dragAttributes,\n listeners: dragListeners,\n setNodeRef,\n isDragging,\n transform,\n transition,\n } = useSortable({\n id: data.id,\n data: {\n type: 'delay',\n },\n animateLayoutChanges: () => false,\n });\n\n const dragStyle = {\n zIndex: isDragging ? 2 : 'inherit',\n transform: CSS.Translate.toString(transform),\n transition,\n };\n\n useEffect(() => {\n if (hasCursor) {\n handleRef?.current?.focus();\n }\n }, [hasCursor]);\n\n const applyDelayHandler = () => {\n applyDelay(data.id);\n };\n\n const cancelDelayHandler = () => {\n deleteEntry([data.id]);\n };\n\n return (\n <div\n className={cx([style.delay, hasCursor && style.hasCursor, entryCopyId === data.id && style.copyTarget])}\n ref={setNodeRef}\n style={dragStyle}\n data-testid='rundown-delay'\n >\n <span className={style.drag} ref={handleRef} {...dragAttributes} {...dragListeners}>\n <IoReorderTwo />\n </span>\n <DelayInput eventId={data.id} duration={data.duration} />\n <Button onClick={applyDelayHandler} variant='ghosted-white'>\n <IoCheckmarkDone /> Make permanent\n </Button>\n <Button onClick={cancelDelayHandler} variant='ghosted-white'>\n <IoClose />\n Cancel\n </Button>\n </div>\n );\n}\n","import { create } from 'zustand';\n\ninterface EventIdSwappingStore {\n selectedEventId: string | null;\n setSelectedEventId: (newEventId: string | null) => void;\n clearSelectedEventId: () => void;\n}\n\nexport const useEventIdSwapping = create<EventIdSwappingStore>((set) => ({\n selectedEventId: null,\n setSelectedEventId: (newEventId) => set(() => ({ selectedEventId: newEventId })),\n clearSelectedEventId: () => set(() => ({ selectedEventId: null })),\n}));\n","import { useMemo } from 'react';\nimport { IoCheckmarkCircle } from 'react-icons/io5';\nimport { isPlaybackActive, MILLIS_PER_MINUTE, MILLIS_PER_SECOND, millisToString } from 'ontime-utils';\n\nimport Tooltip from '../../../../common/components/tooltip/Tooltip';\nimport { usePlayback } from '../../../../common/hooks/useSocket';\nimport useReport from '../../../../common/hooks-query/useReport';\nimport { cx } from '../../../../common/utils/styleUtils';\nimport { formatDuration, useTimeUntilExpectedStart } from '../../../../common/utils/time';\n\nimport style from './RundownEventChip.module.scss';\n\ninterface RundownEventChipProps {\n id: string;\n timeStart: number;\n delay: number;\n dayOffset: number;\n isPast: boolean;\n isLoaded: boolean;\n className: string;\n totalGap: number;\n duration: number;\n isLinkedToLoaded: boolean;\n}\n\nexport default function RundownEventChip({\n timeStart,\n delay,\n dayOffset,\n isPast,\n isLoaded,\n className,\n totalGap,\n id,\n duration,\n isLinkedToLoaded,\n}: RundownEventChipProps) {\n const playback = usePlayback();\n\n if (isLoaded) {\n return null;\n }\n\n const playbackActive = isPlaybackActive(playback);\n\n if (!playbackActive || isPast) {\n return <EventReport className={className} id={id} duration={duration} />;\n }\n\n if (playbackActive) {\n // we extracted the component to avoid unnecessary calculations and re-renders\n return (\n <Tooltip text='Expected time until start' render={<span />} className={className}>\n <EventUntil\n timeStart={timeStart}\n delay={delay}\n dayOffset={dayOffset}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n />\n </Tooltip>\n );\n }\n\n return null;\n}\n\ninterface EventUntilProps {\n timeStart: number;\n delay: number;\n dayOffset: number;\n totalGap: number;\n isLinkedToLoaded: boolean;\n}\n\nfunction EventUntil({ timeStart, delay, dayOffset, totalGap, isLinkedToLoaded }: EventUntilProps) {\n const timeUntil = useTimeUntilExpectedStart({ timeStart, delay, dayOffset }, { totalGap, isLinkedToLoaded });\n const isDue = timeUntil < MILLIS_PER_SECOND;\n\n const timeUntilString = isDue ? 'DUE' : `${formatDuration(Math.abs(timeUntil), timeUntil > 2 * MILLIS_PER_MINUTE)}`;\n\n return <div className={cx([style.chip, isDue && style.due])}>{timeUntilString}</div>;\n}\n\ninterface EventReportProps {\n className: string;\n id: string;\n duration: number;\n}\n\nfunction EventReport(props: EventReportProps) {\n const { className, id, duration } = props;\n const { data } = useReport();\n const currentReport = data[id];\n\n const [value, overUnderStyle, tooltip] = useMemo(() => {\n if (!currentReport) {\n return [null, 'none', ''];\n }\n\n const { startedAt, endedAt } = currentReport;\n if (!startedAt || !endedAt) {\n return [null, 'none', ''];\n }\n\n const actualDuration = endedAt - startedAt;\n const difference = actualDuration - duration;\n const absDifference = Math.abs(difference);\n\n if (absDifference < MILLIS_PER_SECOND) {\n return ['ontime', 'under', 'Event finished on time'];\n }\n\n const isOver = difference > 0;\n\n const fullTimeValue = millisToString(absDifference);\n\n const tooltip = `Event ran ${isOver ? 'over' : 'under'} time by ${fullTimeValue}`;\n\n const value = `${isOver ? '+' : '-'}${formatDuration(absDifference, absDifference > 2 * MILLIS_PER_MINUTE)}`;\n return [value, isOver ? 'over' : 'under', tooltip];\n }, [currentReport, duration]);\n\n if (!value) {\n return null;\n }\n\n return (\n <Tooltip text={tooltip} render={<span />} className={cx([style.chip, style[overUnderStyle], className])}>\n {value === 'ontime' ? <IoCheckmarkCircle size='1.1rem' /> : value}\n </Tooltip>\n );\n}\n","import { memo, MouseEvent } from 'react';\nimport { IoPause, IoPlay, IoReload, IoRemoveCircle, IoRemoveCircleOutline } from 'react-icons/io5';\n\nimport IconButton from '../../../../common/components/buttons/IconButton';\nimport Tooltip from '../../../../common/components/tooltip/Tooltip';\nimport { useEntryActionsContext } from '../../../../common/context/EntryActionsContext';\nimport { setEventPlayback } from '../../../../common/hooks/useSocket';\n\nimport style from '../RundownEvent.module.scss';\n\ninterface RundownEventPlaybackProps {\n eventId: string;\n skip: boolean;\n isPlaying: boolean;\n isPaused: boolean;\n loaded: boolean;\n disablePlayback: boolean;\n}\n\nexport default memo(RundownEventPlayback);\nfunction RundownEventPlayback({\n eventId,\n skip,\n isPlaying,\n isPaused,\n loaded,\n disablePlayback,\n}: RundownEventPlaybackProps) {\n const { updateEntry } = useEntryActionsContext();\n\n const toggleSkip = (event: MouseEvent) => {\n event.stopPropagation();\n updateEntry({ id: eventId, skip: !skip });\n };\n\n const actionHandler = (event: MouseEvent) => {\n event.stopPropagation();\n // is playing -> pause\n // is paused -> continue\n // otherwise -> start\n if (isPlaying) {\n setEventPlayback.pause();\n } else if (isPaused) {\n setEventPlayback.start();\n } else {\n setEventPlayback.startEvent(eventId);\n }\n };\n\n const load = (event: MouseEvent) => {\n event.stopPropagation();\n setEventPlayback.loadEvent(eventId);\n };\n\n const playButtonStyles: { tooltip: string; backgroundColor: string | undefined } = (() => {\n if (isPaused) {\n return {\n tooltip: 'Continue event',\n backgroundColor: '#339E4E',\n };\n }\n\n if (isPlaying) {\n return {\n tooltip: 'Pause event',\n backgroundColor: '#c05621',\n };\n }\n return {\n tooltip: 'Start event',\n backgroundColor: undefined,\n };\n })();\n\n return (\n <div className={style.playbackActions}>\n <Tooltip\n text='Skip event'\n render={<IconButton variant='subtle-white' />}\n onClick={toggleSkip}\n tabIndex={-1}\n disabled={loaded}\n style={{\n background: skip ? '#9A0000' : undefined,\n }}\n aria-label='Skip event'\n >\n {skip ? <IoRemoveCircle /> : <IoRemoveCircleOutline />}\n </Tooltip>\n\n <Tooltip\n text='Load event'\n render={<IconButton variant='subtle-white' />}\n onClick={load}\n tabIndex={-1}\n disabled={disablePlayback}\n aria-label='Load event'\n >\n <IoReload className={style.flip} />\n </Tooltip>\n\n <Tooltip\n text={playButtonStyles.tooltip}\n render={<IconButton variant='subtle-white' />}\n onClick={actionHandler}\n tabIndex={-1}\n disabled={disablePlayback}\n style={{\n backgroundColor: playButtonStyles.backgroundColor,\n }}\n aria-label={isPlaying ? 'Pause event' : 'Start event'}\n >\n {!isPlaying ? <IoPlay /> : <IoPause />}\n </Tooltip>\n </div>\n );\n}\n","import { useTimer } from '../../../../common/hooks/useSocket';\nimport { getProgress } from '../../../../common/utils/getProgress';\n\nimport style from './RundownEventProgressBar.module.scss';\n\nexport default function RundownEventProgressBar() {\n const timer = useTimer();\n\n const progress = getProgress(timer.current, timer.duration);\n\n return <div className={style.progressBar} style={{ width: `${progress}%` }} />;\n}\n","import { memo } from 'react';\nimport {\n IoArrowDown,\n IoArrowUp,\n IoBan,\n IoFlash,\n IoPlay,\n IoPlayForward,\n IoPlaySkipForward,\n IoTime,\n} from 'react-icons/io5';\nimport { LuArrowDownToLine } from 'react-icons/lu';\nimport { EndAction, Playback, TimerType, TimeStrategy } from 'ontime-types';\n\nimport Tooltip from '../../../common/components/tooltip/Tooltip';\nimport { cx } from '../../../common/utils/styleUtils';\nimport { AppMode } from '../../../ontimeConfig';\nimport TitleEditor from '../common/TitleEditor';\nimport TimeInputFlow from '../time-input-flow/TimeInputFlow';\nimport { useEditorFollowMode } from '../useEditorFollowMode';\n\nimport RundownEventChip from './composite/RundownEventChip';\nimport EventBlockPlayback from './composite/RundownEventPlayback';\nimport EventBlockProgressBar from './composite/RundownEventProgressBar';\n\nimport style from './RundownEvent.module.scss';\n\ninterface RundownEventInnerProps {\n eventId: string;\n timeStart: number;\n timeEnd: number;\n duration: number;\n timeStrategy: TimeStrategy;\n linkStart: boolean;\n countToEnd: boolean;\n eventIndex: number;\n endAction: EndAction;\n timerType: TimerType;\n title: string;\n note: string;\n delay: number;\n isNext: boolean;\n skip: boolean;\n loaded: boolean;\n playback?: Playback;\n isRolling: boolean;\n dayOffset: number;\n isPast: boolean;\n totalGap: number;\n isLinkedToLoaded: boolean;\n hasTriggers: boolean;\n}\n\nexport default memo(RundownEventInner);\nfunction RundownEventInner({\n eventId,\n timeStart,\n timeEnd,\n duration,\n timeStrategy,\n linkStart,\n countToEnd,\n endAction,\n timerType,\n title,\n note,\n delay,\n isNext,\n skip = false,\n loaded,\n playback,\n isRolling,\n dayOffset,\n isPast,\n totalGap,\n isLinkedToLoaded,\n hasTriggers,\n}: RundownEventInnerProps) {\n const { editorMode } = useEditorFollowMode();\n\n const eventIsPlaying = playback === Playback.Play;\n const eventIsPaused = playback === Playback.Pause;\n\n const playBtnStyles = { _hover: {} };\n if (!skip && eventIsPlaying) {\n playBtnStyles._hover = { bg: '#c05621' }; // $ontime-paused\n } else if (!skip && !eventIsPlaying) {\n playBtnStyles._hover = {};\n }\n\n return (\n <>\n <div className={cx([style.eventTimers, editorMode === AppMode.Edit && style.editMode])}>\n <TimeInputFlow\n eventId={eventId}\n timeStart={timeStart}\n timeEnd={timeEnd}\n duration={duration}\n delay={delay}\n timeStrategy={timeStrategy}\n linkStart={linkStart}\n countToEnd={countToEnd}\n />\n </div>\n <div className={style.titleSection}>\n <TitleEditor title={title} entryId={eventId} placeholder='Event title' className={style.eventTitle} />\n {isNext && <span className={style.nextTag}>UP NEXT</span>}\n </div>\n <EventBlockPlayback\n eventId={eventId}\n skip={skip}\n isPlaying={eventIsPlaying}\n isPaused={eventIsPaused}\n loaded={loaded}\n disablePlayback={skip || isRolling}\n />\n {!skip && (\n <RundownEventChip\n className={style.chipSection}\n id={eventId}\n timeStart={timeStart}\n delay={delay}\n dayOffset={dayOffset}\n isLinkedToLoaded={isLinkedToLoaded}\n isPast={isPast}\n isLoaded={loaded}\n totalGap={totalGap}\n duration={duration}\n />\n )}\n <div className={style.statusElements} id='entry-status' data-timertype={timerType}>\n <span className={style.eventNote}>{note}</span>\n <div className={loaded ? style.progressBg : `${style.progressBg} ${style.hidden}`}>\n {loaded && <EventBlockProgressBar />}\n </div>\n <div className={style.eventStatus} tabIndex={-1}>\n <Tooltip text={`Time type: ${timerType}`} render={<span />}>\n <TimerIcon type={timerType} className={style.statusIcon} />\n </Tooltip>\n <Tooltip text={`End action: ${endAction}`} render={<span />}>\n <EndActionIcon action={endAction} className={style.statusIcon} />\n </Tooltip>\n <Tooltip text={`${countToEnd ? 'Count to End' : 'Count duration'}`} render={<span />}>\n <LuArrowDownToLine className={`${style.statusIcon} ${countToEnd ? style.active : style.disabled}`} />\n </Tooltip>\n <Tooltip text='Event has Triggers' render={<span />}>\n <IoFlash className={`${style.statusIcon} ${hasTriggers ? style.active : style.disabled}`} />\n </Tooltip>\n </div>\n </div>\n </>\n );\n}\n\nfunction EndActionIcon({ action, className }: { action: EndAction; className: string }) {\n const maybeActiveClasses = cx([action !== EndAction.None && style.active, className]);\n\n if (action === EndAction.LoadNext) {\n return <IoPlaySkipForward className={maybeActiveClasses} />;\n }\n if (action === EndAction.PlayNext) {\n return <IoPlayForward className={maybeActiveClasses} />;\n }\n return <IoPlay className={className} />;\n}\n\nfunction TimerIcon({ type, className }: { type: TimerType; className: string }) {\n if (type === TimerType.CountUp) {\n return <IoArrowUp className={className} />;\n }\n if (type === TimerType.Clock) {\n return <IoTime className={className} />;\n }\n if (type === TimerType.None) {\n return <IoBan className={className} />;\n }\n return <IoArrowDown className={className} />;\n}\n","import { millisToString, removeTrailingZero } from 'ontime-utils';\n\nimport { formatDuration } from '../../../common/utils/time';\n\nexport function formatDelay(timeStart: number, delay: number): string | undefined {\n if (!delay) return;\n\n const delayedStart = Math.max(0, timeStart + delay);\n\n const timeTag = removeTrailingZero(millisToString(delayedStart));\n return `New start ${timeTag}`;\n}\nexport function formatGap(gap: number, isNextDay: boolean) {\n if (gap === 0) {\n if (isNextDay) {\n // We show a next day warning even if there is no gap\n return '(next day)';\n }\n return;\n }\n\n const gapString = formatDuration(Math.abs(gap), false);\n return `${gap < 0 ? 'Overlap' : 'Gap'} ${gapString}${isNextDay ? ' (next day)' : ''}`;\n}\n","import { formatDelay, formatGap } from './rundownEvent.utils';\n\nimport style from './RundownIndicators.module.scss';\n\ninterface RundownIndicatorProps {\n timeStart: number;\n isNextDay: boolean;\n delay: number;\n gap: number;\n}\n\nexport default function RundownIndicators({ timeStart, delay, gap, isNextDay }: RundownIndicatorProps) {\n const hasGap = formatGap(gap, isNextDay);\n const hasDelay = formatDelay(timeStart, delay);\n\n return (\n <div className={style.indicators}>\n {hasDelay && <div className={style.delay}>{hasDelay}</div>}\n {hasGap && <div className={style.gap}>{hasGap}</div>}\n </div>\n );\n}\n","import { MouseEvent, useEffect, useRef } from 'react';\nimport {\n IoAdd,\n IoDuplicateOutline,\n IoFolder,\n IoLink,\n IoReorderTwo,\n IoSwapVertical,\n IoTrash,\n IoUnlink,\n} from 'react-icons/io5';\nimport { TbFlagFilled } from 'react-icons/tb';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { EndAction, EntryId, Playback, TimerType, TimeStrategy } from 'ontime-types';\nimport { isPlaybackActive } from 'ontime-utils';\n\nimport { useEntryActionsContext } from '../../../common/context/EntryActionsContext';\nimport { useContextMenu } from '../../../common/hooks/useContextMenu';\nimport { useEntryCopy } from '../../../common/stores/entryCopyStore';\nimport { deviceMod } from '../../../common/utils/deviceUtils';\nimport { cx, getAccessibleColour } from '../../../common/utils/styleUtils';\nimport { useEventIdSwapping } from '../useEventIdSwapping';\nimport { getSelectionMode, useEventSelection } from '../useEventSelection';\n\nimport RundownEventInner from './RundownEventInner';\nimport RundownIndicators from './RundownIndicators';\n\nimport style from './RundownEvent.module.scss';\n\ninterface RundownEventProps {\n eventId: EntryId;\n cue: string;\n timeStart: number;\n timeEnd: number;\n duration: number;\n timeStrategy: TimeStrategy;\n linkStart: boolean;\n flag: boolean;\n countToEnd: boolean;\n eventIndex: number;\n endAction: EndAction;\n timerType: TimerType;\n title: string;\n note: string;\n delay: number;\n colour: string;\n isPast: boolean;\n isNext: boolean;\n skip: boolean;\n parent: EntryId | null;\n loaded: boolean;\n hasCursor: boolean;\n playback?: Playback;\n isRolling: boolean;\n gap: number;\n isNextDay: boolean;\n dayOffset: number;\n totalGap: number;\n isLinkedToLoaded: boolean;\n hasTriggers: boolean;\n}\n\nexport default function RundownEvent({\n eventId,\n cue,\n timeStart,\n timeEnd,\n duration,\n timeStrategy,\n linkStart,\n flag,\n countToEnd,\n eventIndex,\n endAction,\n timerType,\n title,\n note,\n delay,\n colour,\n isPast,\n isNext,\n skip = false,\n parent,\n loaded,\n hasCursor,\n playback,\n isRolling,\n gap,\n isNextDay,\n dayOffset,\n totalGap,\n isLinkedToLoaded,\n hasTriggers,\n}: RundownEventProps) {\n 'use memo';\n\n const selectedEventId = useEventIdSwapping((state) => state.selectedEventId);\n const setSelectedEventId = useEventIdSwapping((state) => state.setSelectedEventId);\n const clearSelectedEventId = useEventIdSwapping((state) => state.clearSelectedEventId);\n\n const { updateEntry, batchUpdateEvents, clone, deleteEntry, groupEntries, swapEvents } = useEntryActionsContext();\n\n const isSelected = useEventSelection((state) => state.selectedEvents.has(eventId));\n const unselect = useEventSelection((state) => state.unselect);\n const clearSelectedEvents = useEventSelection((state) => state.clearSelectedEvents);\n const selectEntry = useEventSelection((state) => state.setSelectedEvents);\n\n const selectedEvents = useEventSelection((state) => state.selectedEvents);\n const entryCopyId = useEntryCopy((state) => state.entryCopyId);\n\n const handleRef = useRef<null | HTMLSpanElement>(null);\n\n const [onContextMenu] = useContextMenu<HTMLDivElement>(() =>\n selectedEvents.size > 1\n ? [\n {\n type: 'item',\n label: 'Link to previous',\n icon: IoLink,\n onClick: () => {\n batchUpdateEvents({ linkStart: true }, Array.from(selectedEvents));\n },\n },\n {\n type: 'item',\n label: 'Unlink from previous',\n icon: IoUnlink,\n onClick: () => {\n batchUpdateEvents({ linkStart: false }, Array.from(selectedEvents));\n },\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Group',\n icon: IoFolder,\n onClick: () => {\n groupEntries(Array.from(selectedEvents));\n clearSelectedEvents();\n },\n disabled: parent !== null,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Delete',\n icon: IoTrash,\n shortcut: `${deviceMod}+Del`,\n onClick: () => {\n clearSelectedEvents();\n deleteEntry(Array.from(selectedEvents));\n },\n },\n ]\n : [\n {\n type: 'item',\n label: flag ? 'Remove flag' : 'Add flag',\n icon: TbFlagFilled,\n onClick: () => {\n updateEntry({ id: eventId, flag: !flag });\n },\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Add to swap',\n icon: IoAdd,\n onClick: () => setSelectedEventId(eventId),\n },\n {\n type: 'item',\n label: `Swap this event with ${selectedEventId ?? ''}`,\n icon: IoSwapVertical,\n onClick: () => {\n if (!selectedEventId) return;\n swapEvents(selectedEventId, eventId);\n clearSelectedEventId();\n },\n disabled: selectedEventId == null || selectedEventId === eventId,\n },\n {\n type: 'item',\n label: 'Clone',\n icon: IoDuplicateOutline,\n shortcut: `${deviceMod}+D`,\n onClick: () => clone(eventId, { after: eventId }),\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Delete',\n icon: IoTrash,\n shortcut: `${deviceMod}+Del`,\n onClick: () => {\n deleteEntry([eventId]);\n unselect(eventId);\n },\n },\n ],\n );\n\n const {\n isDragging,\n attributes: dragAttributes,\n listeners: dragListeners,\n setNodeRef,\n transform,\n transition,\n } = useSortable({\n id: eventId,\n data: {\n type: 'event',\n parent,\n },\n animateLayoutChanges: () => false,\n });\n\n const dragStyle = {\n zIndex: isDragging ? 2 : 'inherit',\n transform: CSS.Translate.toString(transform),\n transition,\n };\n\n const binderColours = colour && getAccessibleColour(colour);\n\n // move focus to element if necessary\n useEffect(() => {\n if (!hasCursor || handleRef?.current == null) {\n return;\n }\n\n const elementInFocus = document.activeElement;\n // we know the group is the grandparent of our binder\n const blockElement = handleRef.current.closest('#event-group');\n\n // we only move focus if the block doesnt already contain focus\n if (blockElement && !blockElement.contains(elementInFocus)) {\n handleRef.current.focus();\n }\n }, [hasCursor]);\n\n const blockClasses = cx([\n style.rundownEvent,\n skip && style.skip,\n isPast && style.past,\n loaded && style.loaded,\n playback && style[playback],\n isSelected && style.selected,\n hasCursor && style.hasCursor,\n entryCopyId === eventId && style.copyTarget,\n ]);\n\n const handleFocusClick = (event: MouseEvent) => {\n event.stopPropagation();\n\n // event.button === 2 is a right-click\n // disable selection if the user selected events and right clicks\n // so the context menu shows up\n if (selectedEvents.size > 1 && event.button === 2) {\n return;\n }\n\n // UI indexes are 1 based\n const index = eventIndex - 1;\n const editMode = getSelectionMode(event);\n selectEntry({ id: eventId, index, selectMode: editMode });\n };\n\n const isPlaying = playback ? isPlaybackActive(playback) : false;\n\n return (\n <div\n className={blockClasses}\n ref={setNodeRef}\n style={dragStyle}\n onClick={handleFocusClick}\n onContextMenu={onContextMenu}\n data-testid='rundown-event'\n {...(isPlaying ? { 'data-running': true } : {})}\n >\n <RundownIndicators timeStart={timeStart} delay={delay} gap={gap} isNextDay={isNextDay} />\n\n <div className={style.binder} style={{ ...binderColours }} tabIndex={-1}>\n <span className={style.drag} ref={handleRef} {...dragAttributes} {...dragListeners}>\n <IoReorderTwo />\n </span>\n <span className={style.cue}>{cue}</span>\n </div>\n\n <RundownEventInner\n timeStart={timeStart}\n timeEnd={timeEnd}\n duration={duration}\n linkStart={linkStart}\n countToEnd={countToEnd}\n timeStrategy={timeStrategy}\n eventId={eventId}\n eventIndex={eventIndex}\n endAction={endAction}\n timerType={timerType}\n title={title}\n note={note}\n delay={delay}\n isNext={isNext}\n skip={skip}\n loaded={loaded}\n playback={playback}\n isRolling={isRolling}\n dayOffset={dayOffset}\n isPast={isPast}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n hasTriggers={hasTriggers}\n />\n </div>\n );\n}\n","import { MouseEvent, useCallback, useRef } from 'react';\nimport { IoReorderTwo, IoTrash } from 'react-icons/io5';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { EntryId } from 'ontime-types';\n\nimport Input from '../../../common/components/input/input/Input';\nimport useReactiveTextInput from '../../../common/components/input/text-input/useReactiveTextInput';\nimport { useEntryActionsContext } from '../../../common/context/EntryActionsContext';\nimport { useContextMenu } from '../../../common/hooks/useContextMenu';\nimport { useEntryCopy } from '../../../common/stores/entryCopyStore';\nimport { deviceMod } from '../../../common/utils/deviceUtils';\nimport { cx, getAccessibleColour } from '../../../common/utils/styleUtils';\nimport { useEventSelection } from '../useEventSelection';\n\nimport style from './RundownMilestone.module.scss';\n\ninterface RundownMilestoneProps {\n colour: string;\n cue: string;\n entryId: EntryId;\n hasCursor: boolean;\n title: string;\n}\n\nexport default function RundownMilestone({ colour, cue, entryId, hasCursor, title }: RundownMilestoneProps) {\n 'use memo';\n\n const handleRef = useRef<null | HTMLSpanElement>(null);\n const { updateEntry, deleteEntry } = useEntryActionsContext();\n\n const selectedEvents = useEventSelection((state) => state.selectedEvents);\n const selectSingleEntry = useEventSelection((state) => state.setSingleEntrySelection);\n const entryCopyId = useEntryCopy((state) => state.entryCopyId);\n\n const [onContextMenu] = useContextMenu<HTMLDivElement>(() => [\n {\n type: 'item',\n label: 'Delete',\n icon: IoTrash,\n shortcut: `${deviceMod}+Del`,\n onClick: () => deleteEntry([entryId]),\n },\n ]);\n\n const {\n attributes: dragAttributes,\n listeners: dragListeners,\n setNodeRef,\n isDragging,\n transform,\n transition,\n } = useSortable({\n id: entryId,\n data: {\n type: 'milestone',\n },\n animateLayoutChanges: () => false,\n });\n\n const handleFocusClick = (event: MouseEvent) => {\n event.stopPropagation();\n\n // event.button === 2 is a right-click\n // disable selection if the user selected events and right clicks\n // so the context menu shows up\n if (selectedEvents.size > 1 && event.button === 2) {\n return;\n }\n\n // UI indexes are 1 based\n selectSingleEntry({ id: entryId });\n };\n\n const handleUpdate = (field: 'cue' | 'title', value: string) => {\n updateEntry({ id: entryId, [field]: value });\n };\n\n const dragStyle = {\n zIndex: isDragging ? 2 : 'inherit',\n transform: CSS.Translate.toString(transform),\n transition,\n };\n\n const binderColours = colour && getAccessibleColour(colour);\n\n return (\n <div\n className={cx([\n style.milestone,\n hasCursor ? style.hasCursor : null,\n entryCopyId === entryId ? style.copyTarget : null,\n ])}\n ref={setNodeRef}\n onClick={handleFocusClick}\n onContextMenu={onContextMenu}\n style={dragStyle}\n data-testid='rundown-milestone'\n >\n <div className={style.binder} style={{ ...binderColours }}>\n <span className={style.drag} ref={handleRef} {...dragAttributes} {...dragListeners}>\n <IoReorderTwo />\n </span>\n </div>\n <MilestoneTextInput field='cue' initialValue={cue} placeholder='Cue' submitHandler={handleUpdate} />\n <MilestoneTextInput field='title' initialValue={title} placeholder='Title' submitHandler={handleUpdate} />\n </div>\n );\n}\n\ninterface MilestoneTextInputProps {\n field: 'cue' | 'title';\n initialValue: string;\n placeholder?: string;\n submitHandler: (field: 'cue' | 'title', value: string) => void;\n}\n\nfunction MilestoneTextInput({ field, initialValue, placeholder, submitHandler }: MilestoneTextInputProps) {\n const ref = useRef<HTMLInputElement | null>(null);\n const submitCallback = useCallback((newValue: string) => submitHandler(field, newValue), [field, submitHandler]);\n const { value, onChange, onBlur, onKeyDown } = useReactiveTextInput(initialValue, submitCallback, ref, {\n submitOnEnter: true,\n });\n\n return (\n <Input\n id={field}\n ref={ref}\n fluid\n value={value}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n />\n );\n}\n","import { isOntimeDelay, isOntimeEvent, isOntimeMilestone, OntimeEntry, Playback, SupportedEntry } from 'ontime-types';\n\nimport RundownDelay from './rundown-delay/RundownDelay';\nimport RundownEvent from './rundown-event/RundownEvent';\nimport RundownMilestone from './rundown-milestone/RundownMilestone';\n\ninterface RundownEntryProps {\n type: SupportedEntry;\n isPast: boolean;\n data: OntimeEntry;\n loaded: boolean;\n eventIndex: number;\n hasCursor: boolean;\n isNext: boolean;\n isNextDay: boolean;\n playback?: Playback; // we only care about this if this event is playing\n isRolling: boolean; // we need to know even if not related to this event\n totalGap: number;\n isLinkedToLoaded: boolean;\n}\n\nexport default function RundownEntry({\n isPast,\n data,\n loaded,\n hasCursor,\n isNext,\n playback,\n isRolling,\n eventIndex,\n isNextDay,\n totalGap,\n isLinkedToLoaded,\n}: RundownEntryProps) {\n 'use memo';\n\n if (isOntimeEvent(data)) {\n return (\n <RundownEvent\n eventId={data.id}\n eventIndex={eventIndex}\n cue={data.cue}\n timeStart={data.timeStart}\n timeEnd={data.timeEnd}\n duration={data.duration}\n timeStrategy={data.timeStrategy}\n linkStart={data.linkStart}\n flag={data.flag}\n countToEnd={data.countToEnd}\n endAction={data.endAction}\n timerType={data.timerType}\n title={data.title}\n note={data.note}\n delay={data.delay}\n colour={data.colour}\n isPast={isPast}\n isNext={isNext}\n skip={data.skip}\n parent={data.parent}\n loaded={loaded}\n hasCursor={hasCursor}\n playback={playback}\n isRolling={isRolling}\n gap={data.gap}\n isNextDay={isNextDay}\n dayOffset={data.dayOffset}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n hasTriggers={data.triggers.length > 0}\n />\n );\n } else if (isOntimeDelay(data)) {\n return <RundownDelay data={data} hasCursor={hasCursor} />;\n } else if (isOntimeMilestone(data)) {\n return (\n <RundownMilestone\n colour={data.colour}\n cue={data.cue}\n entryId={data.id}\n hasCursor={hasCursor}\n title={data.title}\n />\n );\n }\n return null;\n}\n","import { type HTMLProps, forwardRef, Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { TbFlagFilled } from 'react-icons/tb';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\nimport { closestCenter, DndContext } from '@dnd-kit/core';\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport {\n type EntryId,\n type Rundown as RundownType,\n isOntimeEvent,\n isOntimeGroup,\n Playback,\n SupportedEntry,\n} from 'ontime-types';\n\nimport { useEntryActionsContext } from '../../common/context/EntryActionsContext';\nimport { useEntryCopy } from '../../common/stores/entryCopyStore';\nimport { lastMetadataKey, RundownMetadataObject } from '../../common/utils/rundownMetadata';\nimport { AppMode } from '../../ontimeConfig';\n\nimport QuickAddButtons from './entry-editor/quick-add-buttons/QuickAddButtons';\nimport QuickAddInline from './entry-editor/quick-add-cursor/QuickAddInline';\nimport { useRundownCommands } from './hooks/useRundownCommands';\nimport { useRundownDnd } from './hooks/useRundownDnd';\nimport { useRundownKeyboard } from './hooks/useRundownKeyboard';\nimport RundownGroup from './rundown-group/RundownGroup';\nimport RundownGroupEnd from './rundown-group/RundownGroupEnd';\nimport { filterVisibleEntries, makeSortableList } from './rundown.utils';\nimport RundownEmpty from './RundownEmpty';\nimport RundownEntry from './RundownEntry';\nimport { useCollapsedGroups } from './useCollapsedGroups';\nimport { useEditorFollowMode } from './useEditorFollowMode';\nimport { useEventSelection } from './useEventSelection';\n\nimport style from './Rundown.module.scss';\n\ninterface RundownProps {\n entries: RundownType['entries'];\n id: RundownType['id'];\n order: RundownType['order'];\n flatOrder: RundownType['flatOrder'];\n rundownMetadata: RundownMetadataObject;\n featureData: {\n playback: Playback;\n selectedEventId: EntryId | null;\n nextEventId: EntryId | null;\n };\n}\n\nexport default function Rundown({ order, flatOrder, entries, id, rundownMetadata, featureData }: RundownProps) {\n // invoke the compiler for the component\n 'use memo';\n\n const [sortableData, setSortableData] = useState<EntryId[]>(() => makeSortableList(order, entries));\n const [metadata, setMetadata] = useState<RundownMetadataObject>(rundownMetadata);\n\n /**\n * We need to keep a copy of the events we receive to\n * workaround issues with dnd-kit optimistic updates\n */\n useEffect(() => {\n setSortableData(makeSortableList(order, entries));\n setMetadata(rundownMetadata);\n }, [order, entries, rundownMetadata]);\n\n const { getIsCollapsed, collapseGroup, expandGroup } = useCollapsedGroups(id);\n\n const entryActions = useEntryActionsContext();\n const setEntryCopyId = useEntryCopy((state) => state.setEntryCopyId);\n\n // cursor\n const { editorMode } = useEditorFollowMode();\n\n const clearSelectedEvents = useEventSelection((state) => state.clearSelectedEvents);\n const cursor = useEventSelection((state) => state.cursor);\n const scrollToEntry = useEventSelection((state) => state.scrollToEntry);\n const setScrollHandler = useEventSelection((state) => state.setScrollHandler);\n const selectEntry = useEventSelection((state) => state.setSelectedEvents);\n\n const cursorRef = useRef<HTMLDivElement | null>(null);\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const virtuosoRef = useRef<VirtuosoHandle | null>(null);\n\n /**\n * Handles logic for collapsing groups\n */\n const handleCollapseGroup = useCallback(\n (collapsed: boolean, groupId: EntryId | undefined) => {\n if (collapsed) {\n collapseGroup(groupId);\n } else {\n expandGroup(groupId);\n }\n },\n [collapseGroup, expandGroup],\n );\n\n // Commands layer - business logic\n const commands = useRundownCommands({\n entries,\n flatOrder,\n entryActions,\n selectEntry,\n handleCollapseGroup,\n });\n\n // Keyboard shortcuts\n useRundownKeyboard({\n cursor,\n commands,\n clearSelectedEvents,\n setEntryCopyId,\n });\n\n // DND handlers\n const dnd = useRundownDnd({\n entries,\n sortableData,\n setSortableData,\n getIsCollapsed,\n handleCollapseGroup,\n entryActions,\n });\n\n // Filter visible data to exclude collapsed items\n // DND-kit (SortableContext) needs the full sortableData for drag calculations\n // Virtuoso only renders visibleData to avoid null items that reserve space\n const visibleData = useMemo(() => {\n return filterVisibleEntries(sortableData, entries, getIsCollapsed);\n }, [sortableData, entries, getIsCollapsed]);\n\n // Provide an imperative scroll handler for explicit jumps (finder/keyboard)\n useEffect(() => {\n setScrollHandler((entryId) => {\n if (!virtuosoRef.current || dnd.isDraggingRef.current) {\n return;\n }\n const index = visibleData.indexOf(entryId);\n if (index === -1) {\n return;\n }\n virtuosoRef.current.scrollToIndex({\n index,\n align: 'start',\n behavior: 'smooth',\n offset: -100, // show the previous entry for context\n });\n });\n\n return () => {\n setScrollHandler(null);\n };\n }, [visibleData, dnd.isDraggingRef, setScrollHandler]);\n\n // Keep selected cursor visible by expanding its parent group in any mode.\n // Finder can select entries while layout is in Run mode, where we do not follow cursor scroll.\n useEffect(() => {\n if (!cursor) {\n return;\n }\n\n const entry = entries[cursor];\n if (entry && 'parent' in entry) {\n expandGroup(entry.parent);\n }\n }, [cursor, entries, expandGroup]);\n\n // Auto-follow behavior in Edit mode: follow the user's cursor\n useEffect(() => {\n if (dnd.isDraggingRef.current || editorMode !== AppMode.Edit || !cursor) {\n return;\n }\n\n scrollToEntry(cursor);\n }, [editorMode, cursor, scrollToEntry, dnd.isDraggingRef]);\n\n // Auto-follow behavior in Run mode: follow the currently playing event\n useEffect(() => {\n if (dnd.isDraggingRef.current || editorMode !== AppMode.Run || !featureData?.selectedEventId) {\n return;\n }\n\n // Open parent group if the target is inside a collapsed group\n const entry = entries[featureData.selectedEventId];\n if (entry && 'parent' in entry) {\n expandGroup(entry.parent);\n }\n scrollToEntry(featureData.selectedEventId);\n }, [editorMode, featureData?.selectedEventId, entries, expandGroup, scrollToEntry, dnd.isDraggingRef]);\n\n // gather presentation options\n const isEditMode = editorMode === AppMode.Edit;\n\n // gather rundown wide data\n const lastEntryId = order.at(-1);\n\n // Extract primitive values from featureData to avoid unnecessary callback recreations\n const nextEventId = featureData?.nextEventId;\n const playback = featureData?.playback;\n\n // Virtuoso item renderer\n const itemContent = useCallback(\n (index: number, entryId: EntryId) => {\n // Handle end-group pseudo entries\n const isEndGroup = entryId.startsWith('end-');\n\n if (isEndGroup) {\n const parentId = entryId.split('end-')[1];\n const parentMetadata = metadata[parentId];\n\n return (\n <Fragment key={entryId}>\n {isEditMode && parentMetadata?.groupEntries === 0 && (\n <QuickAddButtons\n previousEventId={null}\n parentGroup={parentId}\n backgroundColor={parentMetadata?.groupColour}\n />\n )}\n <RundownGroupEnd key={entryId} id={entryId} colour={parentMetadata?.groupColour} />\n </Fragment>\n );\n }\n\n const entry = entries[entryId];\n const entryMetadata = metadata[entryId];\n\n if (!entry || !entryMetadata) {\n return null;\n }\n\n const isNext = nextEventId === entry.id;\n const hasCursor = entry.id === cursor;\n const isGroup = isOntimeGroup(entry);\n const groupColour = entryMetadata.groupColour === '' ? '#9d9d9d' : entryMetadata.groupColour;\n const isFirst = index === 0;\n const isLast = entryId === lastEntryId;\n const parentIdForBefore = entryMetadata.thisId !== entryMetadata.groupId ? entryMetadata.groupId : null;\n const parentIdForAfter = entryMetadata.groupId;\n const collapsed = isGroup ? getIsCollapsed(entry.id) : false;\n\n return (\n <Fragment key={entry.id}>\n {/* QuickAddInline before the entry - edit mode only, if there is a cursor, if it is not the first entry */}\n {isEditMode && hasCursor && !isFirst && (\n <QuickAddInline placement='before' referenceEntryId={entry.id} parentGroup={parentIdForBefore} />\n )}\n {isGroup ? (\n <RundownGroup data={entry} hasCursor={hasCursor} collapsed={collapsed} onCollapse={handleCollapseGroup} />\n ) : (\n <div\n className={style.entryWrapper}\n data-testid={`entry-${entryMetadata.eventIndex}`}\n style={groupColour ? { '--user-bg': groupColour } : {}}\n >\n {isOntimeEvent(entry) && (\n <div className={style.entryIndex}>\n {entry.flag && <TbFlagFilled className={style.flag} />}\n <div className={style.index}>{entryMetadata.eventIndex}</div>\n </div>\n )}\n <div className={style.entry} key={entry.id} ref={hasCursor ? cursorRef : undefined}>\n <RundownEntry\n type={entry.type}\n isPast={entryMetadata.isPast}\n eventIndex={entryMetadata.eventIndex}\n data={entry}\n loaded={entryMetadata.isLoaded}\n hasCursor={hasCursor}\n isNext={isNext}\n isNextDay={entryMetadata.isNextDay}\n playback={entryMetadata.isLoaded ? playback : undefined}\n isRolling={playback === Playback.Roll}\n totalGap={entryMetadata.totalGap}\n isLinkedToLoaded={entryMetadata.isLinkedToLoaded}\n />\n </div>\n </div>\n )}\n {/* QuickAddInline after the entry - edit mode only, if there is a cursor, if it is not the last entry */}\n {isEditMode && hasCursor && !isLast && (\n <QuickAddInline placement='after' referenceEntryId={entry.id} parentGroup={parentIdForAfter} />\n )}\n </Fragment>\n );\n },\n [entries, metadata, getIsCollapsed, isEditMode, cursor, nextEventId, playback, lastEntryId, handleCollapseGroup],\n );\n\n if (sortableData.length < 1) {\n return <RundownEmpty handleAddNew={(type: SupportedEntry) => entryActions.addEntry({ type })} />;\n }\n\n return (\n <div className={style.rundownContainer} ref={scrollRef} data-testid='rundown'>\n <DndContext\n onDragEnd={dnd.handleOnDragEnd}\n onDragStart={dnd.collapseDraggedGroups}\n onDragOver={dnd.expandOverGroup}\n sensors={dnd.sensors}\n collisionDetection={closestCenter}\n >\n <SortableContext items={sortableData} strategy={verticalListSortingStrategy}>\n <Virtuoso\n ref={virtuosoRef}\n data={visibleData}\n computeItemKey={(_index, entryId) => entryId}\n itemContent={itemContent}\n increaseViewportBy={{ top: 200, bottom: 400 }}\n style={{ height: '100%' }}\n components={{\n Header: isEditMode ? () => <QuickAddButtons previousEventId={null} parentGroup={null} /> : undefined,\n Footer: () => (\n <>\n {isEditMode && (\n <QuickAddButtons\n previousEventId={metadata[lastMetadataKey]?.groupId ?? metadata[lastMetadataKey]?.thisId}\n parentGroup={null}\n />\n )}\n <div className={style.spacer} />\n </>\n ),\n List: VirtuosoListComponent,\n }}\n />\n </SortableContext>\n </DndContext>\n </div>\n );\n}\n\n// Virtuoso components - extracted to prevent recreation on every render\nconst VirtuosoListComponent = forwardRef<HTMLDivElement, HTMLProps<HTMLDivElement>>(({ children, ...props }, ref) => (\n <div ref={ref} {...props} className={style.list}>\n {children}\n </div>\n));\nVirtuosoListComponent.displayName = 'VirtuosoListComponent';\n","import { memo } from 'react';\n\nimport Empty from '../../common/components/state/Empty';\nimport { useRundownEditor } from '../../common/hooks/useSocket';\nimport { useRundownWithMetadata } from '../../common/hooks-query/useRundown';\n\nimport Rundown from './Rundown';\n\nexport default memo(RundownList);\nfunction RundownList() {\n const { data, status, rundownMetadata } = useRundownWithMetadata();\n const featureData = useRundownEditor();\n\n const isLoading = status !== 'success' || !data || !rundownMetadata;\n\n if (isLoading) {\n return <Empty text='Connecting to server' />;\n }\n\n return (\n <Rundown\n order={data.order}\n flatOrder={data.flatOrder}\n entries={data.entries}\n id={data.id}\n rundownMetadata={rundownMetadata}\n featureData={featureData}\n />\n );\n}\n","import { memo } from 'react';\nimport { useSessionStorage } from '@mantine/hooks';\n\nimport * as Editor from '../../common/components/editor-utils/EditorUtils';\nimport ErrorBoundary from '../../common/components/error-boundary/ErrorBoundary';\nimport ViewNavigationMenu from '../../common/components/navigation-menu/ViewNavigationMenu';\nimport ProtectRoute from '../../common/components/protect-route/ProtectRoute';\nimport { EntryActionsProvider } from '../../common/context/EntryActionsContext';\nimport { useEntryActions } from '../../common/hooks/useEntryAction';\nimport { useIsSmallDevice } from '../../common/hooks/useIsSmallDevice';\nimport { handleLinks } from '../../common/utils/linkUtils';\nimport { cx } from '../../common/utils/styleUtils';\nimport { getIsNavigationLocked } from '../../externals';\nimport { AppMode } from '../../ontimeConfig';\nimport EntryEditModal from '../../views/cuesheet/cuesheet-edit-modal/EntryEditModal';\nimport { EditorLayoutMode, useEditorLayout } from '../../views/editor/useEditorLayout';\n\nimport RundownEntryEditor from './entry-editor/RundownEntryEditor';\nimport FinderPlacement from './placements/FinderPlacement';\nimport { RundownContextMenu } from './rundown-context-menu/RundownContextMenu';\nimport RundownHeader from './rundown-header/RundownHeader';\nimport RundownHeaderMobile from './rundown-header/RundownHeaderMobile';\nimport RundownTable from './rundown-table/RundownTable';\nimport { RundownViewMode } from './rundown.options';\nimport RundownList from './RundownList';\nimport { useEditorFollowMode } from './useEditorFollowMode';\n\nimport style from './RundownExport.module.scss';\n\nexport default memo(RundownExport);\n\nfunction RundownExport() {\n const isExtracted = window.location.pathname.includes('/rundown');\n const { editorMode } = useEditorFollowMode();\n const { layoutMode } = useEditorLayout();\n const [viewMode, setViewMode] = useSessionStorage<RundownViewMode>({\n key: 'rundown-view-mode',\n defaultValue: RundownViewMode.List,\n });\n const isSmallDevice = useIsSmallDevice();\n const entryActions = useEntryActions();\n\n if (isSmallDevice && isExtracted) {\n return (\n <EntryActionsProvider actions={entryActions}>\n <ProtectRoute permission='editor'>\n <div\n className={cx([style.rundownExport, style.extracted])}\n data-target='small-device'\n data-testid='panel-rundown'\n >\n <FinderPlacement />\n <ViewNavigationMenu suppressSettings />\n <div className={style.rundown}>\n <ErrorBoundary>\n <RundownRoot isSmallDevice isExtracted viewMode={viewMode} setViewMode={setViewMode} />\n <RundownContextMenu />\n </ErrorBoundary>\n </div>\n </div>\n </ProtectRoute>\n </EntryActionsProvider>\n );\n }\n\n const hideSideBar =\n layoutMode === EditorLayoutMode.TRACKING ||\n (isExtracted && editorMode === AppMode.Run) ||\n viewMode === RundownViewMode.Table;\n\n return (\n <EntryActionsProvider actions={entryActions}>\n <ProtectRoute permission='editor'>\n <div className={cx([style.rundownExport, isExtracted && style.extracted])} data-testid='panel-rundown'>\n <FinderPlacement />\n {isExtracted && <ViewNavigationMenu suppressSettings isNavigationLocked={getIsNavigationLocked()} />}\n <div className={style.rundown}>\n <Editor.Panel className={style.list}>\n <ErrorBoundary>\n {!isExtracted && <Editor.CornerExtract onClick={(event) => handleLinks('rundown', event)} />}\n <RundownRoot isExtracted={isExtracted} viewMode={viewMode} setViewMode={setViewMode} />\n <RundownContextMenu />\n </ErrorBoundary>\n </Editor.Panel>\n {!hideSideBar && (\n <div className={style.side}>\n <ErrorBoundary>\n <RundownEntryEditor />\n </ErrorBoundary>\n </div>\n )}\n </div>\n </div>\n </ProtectRoute>\n </EntryActionsProvider>\n );\n}\n\ninterface RundownRootProps {\n isSmallDevice?: boolean;\n isExtracted?: boolean;\n viewMode: RundownViewMode;\n setViewMode: (mode: RundownViewMode) => void;\n}\n\nfunction RundownRoot({ isSmallDevice, isExtracted, viewMode, setViewMode }: RundownRootProps) {\n return (\n <div className={style.rundownRoot}>\n {isSmallDevice ? (\n <RundownHeaderMobile viewMode={viewMode} setViewMode={setViewMode} />\n ) : (\n <RundownHeader isExtracted={isExtracted} viewMode={viewMode} setViewMode={setViewMode} />\n )}\n {viewMode === RundownViewMode.List ? <RundownList /> : <RundownTable />}\n {viewMode === RundownViewMode.Table && <EntryEditModal />}\n </div>\n );\n}\n"],"names":["memo","EventEditorFooter","id","cue","loadById","loadByCue","jsxs","style","footer","jsx","CopyTag","EventEditorEmpty","entryEditor","shortcutSection","Editor.Title","prompt","shortcuts","Kbd","deviceMod","AuxKey","spacer","deviceAlt","children","divider","kbd","RundownEntryEditor","selectedEvents","useEventSelection","state","data","useRundown","entry","useMemo","order","length","selectedEventId","Array","from","at","entries","isOntimeEvent","rundownEditor","EventEditor","isOntimeMilestone","MilestoneEditor","isOntimeGroup","GroupEditor","maxResults","useFinder","rundownId","useFlatRundown","results","setResults","useState","error","setError","lastSearchString","useRef","selectAndRevealEntry","useSelectAndRevealEntry","find","useCallback","event","target","value","searchValue","toLowerCase","current","startsWith","searchString","slice","trim","searchByIndex","searchByCue","searchByTitle","searchIndex","Number","isNaN","eventIndex","i","push","type","SupportedEntry","Event","index","title","colour","parent","remaining","includes","Group","Milestone","select","selectedEvent","useEffect","Finder","isOpen","onClose","selected","setSelected","debouncedFind","useDebouncedCallback","navigate","key","prev","preventDefault","stopPropagation","submit","handleMouseMoveEvent","li","closest","dataset","Modal","Input","scrollContainer","empty","map","isSelected","displayIndex","displayCue","em","FinderPlacement","handler","useDisclosure","useHotkeys","toggle","close","useContextMenuStore","create","set","position","x","y","options","setContextMenu","setIsOpen","newIsOpen","RundownContextMenu","PositionedDropdownMenu","useEditorFollowMode","layoutMode","useEditorLayout","controlModePreference","setControlModePreference","useSessionStorage","sessionKeys","editorMode","defaultValue","AppMode","Run","EditorLayoutMode","CONTROL","PLANNING","Edit","setEditorMode","mode","RundownMenu","allowNavigation","handlers","clearSelectedEvents","deleteAllEntries","useEntryActionsContext","setLocation","useAppSettingsNavigation","deleteAll","Fragment","apart","DropdownMenu","Toolbar.Button","IconButton","label","icon","IoList","onClick","disabled","IoTrash","open","IoEllipsisHorizontal","Dialog","Button","HEADER_CONTROLS_CONFIG","showRunEditToggle","showOffsetToggle","showOverflowMenu","TRACKING","RundownHeader","isExtracted","viewMode","setViewMode","offsetMode","useOffsetMode","toggleAppMode","newValue","toggleViewMode","toggleOffsetMode","setOffsetMode","Toolbar.Root","header","ToggleGroup","group","Tooltip","Toggle","radioButton","RundownViewMode","List","Table","OffsetMode","Absolute","Relative","RundownHeaderMobile","makeRundownColumns","customFields","makeCuesheetColumns","undefined","RundownTable","status","customFieldStatus","useCustomFields","setPermissions","useCuesheetPermissions","canChangeMode","canCreateEntries","canEditEntries","canFlag","canShare","columns","isLoading","CuesheetDnd","EmptyPage","CuesheetTable","useEntryCopy","entryCopyId","entryCopyMode","setEntryCopyId","QuickAddButtons","previousEventId","parentGroup","backgroundColor","addEntry","addEvent","after","lastEventId","addDelay","Delay","addMilestone","addGroup","groupColour","cx","quickAdd","Boolean","indent","IoAdd","QuickAddInline","referenceEntryId","placement","handleAddEntry","before","addButton","PAGE_SIZE","useRundownCommands","flatOrder","entryActions","selectEntry","applySelection","handleCollapseGroup","clone","deleteEntry","move","reorderEntry","deleteAtCursor","cursor","getPreviousNormal","selectMode","insertCopyAtId","atId","above","getState","normalisedAtId","elementToCopy","refElement","firstId","then","catch","insertAtId","patch","selectGroup","direction","getPreviousGroupNormal","getNextGroupNormal","getNextNormal","moveEntry","movedIntoGroupId","cloneEntry","selectEdge","selectedId","selectPage","currentIndex","indexOf","targetIndex","lastValidIndex","step","useRundownDnd","sortableData","setSortableData","getIsCollapsed","sensors","useSensors","useSensor","PointerSensor","activationConstraint","distance","isDraggingRef","handleOnDragEnd","active","over","fromIndex","sortable","toIndex","destinationId","isDraggingGroup","canDrop","replace","currentEntries","reorderArray","_","collapseDraggedGroups","expandOverGroup","groupId","isEditableElement","HTMLElement","tagName","useRundownKeyboard","commands","scrollToEntry","nextId","usePhysicalKeys","useContextMenu","contextMenuEvent","pageX","pageY","menuOptions","TitleEditor","entryId","placeholder","className","updateEntry","ref","submitCallback","text","cleanVal","onChange","onBlur","onKeyDown","useReactiveTextInput","submitOnEnter","classes","eventTitle","noTitle","RundownGroup","t0","$","_c","hasCursor","collapsed","onCollapse","handleRef","ungroup","selectSingleEntry","_temp","_temp2","_temp3","t1","IoDuplicateOutline","shortcut","IoFolderOpenOutline","onContextMenu","t2","Symbol","for","t3","animateLayoutChanges","_temp4","attributes","dragAttributes","listeners","dragListeners","setNodeRef","transform","transition","isDragging","isOver","useSortable","t4","size","button","handleFocusClick","t5","getAccessibleColour","binderColours","t6","isValidDrop","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t7","t8","t9","duration","targetDuration","timeEnd","timeStart","t23","bb0","offset","t24","t25","absOffset","Math","abs","formatDuration","MILLIS_PER_MINUTE","getOffsetState","planOffset","planOffsetLabel","CSS","Translate","toString","t26","t27","zIndex","dragStyle","t28","t29","expanded","t30","copyTarget","t31","t32","t33","t34","notAllowed","t35","drag","t36","IoReorderTwo","t37","binder","t38","t39","t40","IoChevronUp","IoChevronDown","t41","titleRow","metaRow","t42","metaLabel","metaEntry","t43","t44","millisToString","fallback","timerPlaceholder","t45","t46","strike","Tag","offsetLabel","state_1","state_0","setSingleEntrySelection","RundownGroupEnd","Transform","groupEnd","RundownEmpty","props","handleAddNew","Empty","marginTop","marginBottom","inline","Editor.Separator","BlockRadio","items","onValueChange","elementProps","BaseRadioGroup","radioGroup","item","Radio.Root","radio","Radio.Indicator","indicator","DelayInput","eventId","setValue","inputRef","ignoreChangeRef","validateAndSubmit","isNegative","newMillis","parseUserTime","submitChange","handleFocus","onKeyDownHandler","blur","handleSlipChange","newDirection","checkedOption","delayInput","inputField","RundownDelay","applyDelay","focus","applyDelayHandler","cancelDelayHandler","delay","IoCheckmarkDone","IoClose","useEventIdSwapping","setSelectedEventId","newEventId","clearSelectedEventId","RundownEventChip","dayOffset","isPast","isLoaded","totalGap","isLinkedToLoaded","playback","usePlayback","playbackActive","isPlaybackActive","EventReport","EventUntil","timeUntil","useTimeUntilExpectedStart","isDue","MILLIS_PER_SECOND","timeUntilString","chip","due","useReport","currentReport","overUnderStyle","tooltip","startedAt","endedAt","difference","absDifference","fullTimeValue","IoCheckmarkCircle","RundownEventPlayback","skip","isPlaying","isPaused","loaded","disablePlayback","toggleSkip","actionHandler","setEventPlayback","pause","start","startEvent","load","loadEvent","playButtonStyles","playbackActions","background","IoRemoveCircle","IoRemoveCircleOutline","IoReload","flip","IoPause","IoPlay","RundownEventProgressBar","timer","useTimer","progress","getProgress","progressBar","width","RundownEventInner","timeStrategy","linkStart","countToEnd","endAction","timerType","note","isNext","isRolling","hasTriggers","eventIsPlaying","Playback","Play","eventIsPaused","Pause","eventTimers","editMode","TimeInputFlow","titleSection","nextTag","EventBlockPlayback","chipSection","statusElements","eventNote","progressBg","hidden","EventBlockProgressBar","eventStatus","TimerIcon","statusIcon","EndActionIcon","LuArrowDownToLine","IoFlash","action","maybeActiveClasses","EndAction","None","LoadNext","IoPlaySkipForward","PlayNext","IoPlayForward","TimerType","CountUp","IoArrowUp","Clock","IoTime","IoBan","IoArrowDown","formatDelay","delayedStart","max","removeTrailingZero","formatGap","gap","isNextDay","gapString","RundownIndicators","hasGap","hasDelay","indicators","RundownEvent","flag","batchUpdateEvents","groupEntries","swapEvents","has","unselect","_temp5","_temp6","_temp7","_temp8","IoLink","IoUnlink","IoFolder","TbFlagFilled","IoSwapVertical","_temp9","elementInFocus","document","activeElement","blockElement","contains","past","rundownEvent","blockClasses","getSelectionMode","state_7","state_6","state_5","setSelectedEvents","state_4","state_3","RundownMilestone","field","handleUpdate","milestone","MilestoneTextInput","initialValue","submitHandler","RundownEntry","triggers","isOntimeDelay","Rundown","rundownMetadata","featureData","makeSortableList","metadata","setMetadata","collapseGroup","expandGroup","useCollapsedGroups","setScrollHandler","cursorRef","scrollRef","virtuosoRef","dnd","filterVisibleEntries","visibleData","scrollToIndex","align","behavior","entry_0","isEditMode","lastEntryId","nextEventId","index_0","entryId_0","parentId","split","parentMetadata","entry_1","entryMetadata","isGroup","isFirst","isLast","parentIdForBefore","thisId","parentIdForAfter","collapsed_0","entryWrapper","entryIndex","Roll","itemContent","top","bottom","height","lastMetadataKey","Header","Footer","VirtuosoListComponent","Virtuoso","SortableContext","verticalListSortingStrategy","rundownContainer","DndContext","closestCenter","_index","entryId_1","state_2","forwardRef","list","displayName","RundownList","useRundownWithMetadata","useRundownEditor","RundownExport","window","location","pathname","isSmallDevice","useIsSmallDevice","useEntryActions","EntryActionsProvider","ProtectRoute","rundownExport","extracted","ViewNavigationMenu","rundown","ErrorBoundary","RundownRoot","hideSideBar","getIsNavigationLocked","Editor.Panel","Editor.CornerExtract","handleLinks","side","rundownRoot","EntryEditModal"],"mappings":"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"}
Binary file
Binary file
Binary file
Binary file