@getontime/cli 4.2.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/client/assets/Backstage-WSlbFC9X.js +2 -0
  2. package/client/assets/Backstage-WSlbFC9X.js.br +0 -0
  3. package/client/assets/Backstage-WSlbFC9X.js.gz +0 -0
  4. package/client/assets/{Backstage-DG-hwPI3.js.map → Backstage-WSlbFC9X.js.map} +1 -1
  5. package/client/assets/{Countdown-C8LGl1pp.js → Countdown-B32qlxYT.js} +2 -2
  6. package/client/assets/Countdown-B32qlxYT.js.br +0 -0
  7. package/client/assets/Countdown-B32qlxYT.js.gz +0 -0
  8. package/client/assets/{Countdown-C8LGl1pp.js.map → Countdown-B32qlxYT.js.map} +1 -1
  9. package/client/assets/{CustomTranslationModal-CJ9-aDjl.js → CustomTranslationModal-CtBvokyt.js} +2 -2
  10. package/client/assets/CustomTranslationModal-CtBvokyt.js.br +0 -0
  11. package/client/assets/CustomTranslationModal-CtBvokyt.js.gz +0 -0
  12. package/client/assets/{CustomTranslationModal-CJ9-aDjl.js.map → CustomTranslationModal-CtBvokyt.js.map} +1 -1
  13. package/client/assets/DelayIndicator-BFZFpsY5.js +2 -0
  14. package/client/assets/DelayIndicator-BFZFpsY5.js.br +0 -0
  15. package/client/assets/DelayIndicator-BFZFpsY5.js.gz +0 -0
  16. package/client/assets/{DelayIndicator-F4GdgsGh.js.map → DelayIndicator-BFZFpsY5.js.map} +1 -1
  17. package/client/assets/EditorFeatureWrapper-DaMxgBMP.js +2 -0
  18. package/client/assets/EditorFeatureWrapper-DaMxgBMP.js.br +0 -0
  19. package/client/assets/EditorFeatureWrapper-DaMxgBMP.js.gz +0 -0
  20. package/client/assets/{EditorFeatureWrapper-eIpSr_UK.js.map → EditorFeatureWrapper-DaMxgBMP.js.map} +1 -1
  21. package/client/assets/EditorUtils-DoaSwWiz.js +2 -0
  22. package/client/assets/EditorUtils-DoaSwWiz.js.br +0 -0
  23. package/client/assets/EditorUtils-DoaSwWiz.js.gz +0 -0
  24. package/client/assets/{EditorUtils-Bd3J5Dvf.js.map → EditorUtils-DoaSwWiz.js.map} +1 -1
  25. package/client/assets/Empty-D1UteOYj.js +2 -0
  26. package/client/assets/Empty-D1UteOYj.js.br +0 -0
  27. package/client/assets/Empty-D1UteOYj.js.gz +0 -0
  28. package/client/assets/{Empty-C0IdV_kI.js.map → Empty-D1UteOYj.js.map} +1 -1
  29. package/client/assets/EmptyPage-DeRjpRKZ.js +2 -0
  30. package/client/assets/EmptyPage-DeRjpRKZ.js.br +0 -0
  31. package/client/assets/EmptyPage-DeRjpRKZ.js.gz +0 -0
  32. package/client/assets/{EmptyPage-Ct3d0DqJ.js.map → EmptyPage-DeRjpRKZ.js.map} +1 -1
  33. package/client/assets/FollowButton-FodezDem.js +2 -0
  34. package/client/assets/FollowButton-FodezDem.js.br +0 -0
  35. package/client/assets/FollowButton-FodezDem.js.gz +0 -0
  36. package/client/assets/{FollowButton-BG-ycRWu.js.map → FollowButton-FodezDem.js.map} +1 -1
  37. package/client/assets/{MessageControlExport-X-4dl9QT.js → MessageControlExport-CFGgiwk_.js} +3 -3
  38. package/client/assets/MessageControlExport-CFGgiwk_.js.br +0 -0
  39. package/client/assets/MessageControlExport-CFGgiwk_.js.gz +0 -0
  40. package/client/assets/MessageControlExport-CFGgiwk_.js.map +1 -0
  41. package/client/assets/{MilestoneEditor-rgBQSXVU.js → MilestoneEditor-B5BdJ5ju.js} +2 -2
  42. package/client/assets/MilestoneEditor-B5BdJ5ju.js.br +0 -0
  43. package/client/assets/MilestoneEditor-B5BdJ5ju.js.gz +0 -0
  44. package/client/assets/{MilestoneEditor-rgBQSXVU.js.map → MilestoneEditor-B5BdJ5ju.js.map} +1 -1
  45. package/client/assets/Modal-B8ZZbVMg.js +2 -0
  46. package/client/assets/Modal-B8ZZbVMg.js.br +0 -0
  47. package/client/assets/Modal-B8ZZbVMg.js.gz +0 -0
  48. package/client/assets/{Modal-Bn1bZkwb.js.map → Modal-B8ZZbVMg.js.map} +1 -1
  49. package/client/assets/{MultiPartProgressBar-Cmw-gisu.js → MultiPartProgressBar-BKHk19Hb.js} +2 -2
  50. package/client/assets/MultiPartProgressBar-BKHk19Hb.js.br +0 -0
  51. package/client/assets/MultiPartProgressBar-BKHk19Hb.js.gz +0 -0
  52. package/client/assets/{MultiPartProgressBar-Cmw-gisu.js.map → MultiPartProgressBar-BKHk19Hb.js.map} +1 -1
  53. package/client/assets/{OperatorExport-CJd8jmY4.js → OperatorExport-DQM14DsN.js} +2 -2
  54. package/client/assets/OperatorExport-DQM14DsN.js.br +0 -0
  55. package/client/assets/OperatorExport-DQM14DsN.js.gz +0 -0
  56. package/client/assets/{OperatorExport-CJd8jmY4.js.map → OperatorExport-DQM14DsN.js.map} +1 -1
  57. package/client/assets/{OverviewWrapper-1Vj3_ojX.js → OverviewWrapper-D1hUkrRi.js} +2 -2
  58. package/client/assets/OverviewWrapper-D1hUkrRi.js.br +0 -0
  59. package/client/assets/OverviewWrapper-D1hUkrRi.js.gz +0 -0
  60. package/client/assets/{OverviewWrapper-1Vj3_ojX.js.map → OverviewWrapper-D1hUkrRi.js.map} +1 -1
  61. package/client/assets/PipHost-B9-cZ8Lm.js +2 -0
  62. package/client/assets/PipHost-B9-cZ8Lm.js.br +0 -0
  63. package/client/assets/PipHost-B9-cZ8Lm.js.gz +0 -0
  64. package/client/assets/PipHost-B9-cZ8Lm.js.map +1 -0
  65. package/client/assets/PipHost-DEhjTbGT.css +1 -0
  66. package/client/assets/PipHost-DEhjTbGT.css.br +0 -0
  67. package/client/assets/PipHost-DEhjTbGT.css.gz +0 -0
  68. package/client/assets/{ProjectInfo-BduQgjcz.js → ProjectInfo-Dp1TZyBd.js} +2 -2
  69. package/client/assets/ProjectInfo-Dp1TZyBd.js.br +0 -0
  70. package/client/assets/ProjectInfo-Dp1TZyBd.js.gz +0 -0
  71. package/client/assets/{ProjectInfo-BduQgjcz.js.map → ProjectInfo-Dp1TZyBd.js.map} +1 -1
  72. package/client/assets/ProtectRoute-EejQ5o_H.js +2 -0
  73. package/client/assets/ProtectRoute-EejQ5o_H.js.br +0 -0
  74. package/client/assets/ProtectRoute-EejQ5o_H.js.gz +0 -0
  75. package/client/assets/{ProtectRoute-Ci_AIozP.js.map → ProtectRoute-EejQ5o_H.js.map} +1 -1
  76. package/client/assets/{ProtectedCuesheet-D_zdkwM-.js → ProtectedCuesheet-DvYSgueA.js} +2 -2
  77. package/client/assets/ProtectedCuesheet-DvYSgueA.js.br +0 -0
  78. package/client/assets/ProtectedCuesheet-DvYSgueA.js.gz +0 -0
  79. package/client/assets/{ProtectedCuesheet-D_zdkwM-.js.map → ProtectedCuesheet-DvYSgueA.js.map} +1 -1
  80. package/client/assets/{ProtectedEditor-CNL2ig79.js → ProtectedEditor-B0l0X3QP.js} +3 -3
  81. package/client/assets/ProtectedEditor-B0l0X3QP.js.br +0 -0
  82. package/client/assets/ProtectedEditor-B0l0X3QP.js.gz +0 -0
  83. package/client/assets/ProtectedEditor-B0l0X3QP.js.map +1 -0
  84. package/client/assets/RundownEntry-CwiStTnR.js +2 -0
  85. package/client/assets/RundownEntry-CwiStTnR.js.br +0 -0
  86. package/client/assets/RundownEntry-CwiStTnR.js.gz +0 -0
  87. package/client/assets/RundownEntry-CwiStTnR.js.map +1 -0
  88. package/client/assets/RundownExport-CCaOfHIr.js +3 -0
  89. package/client/assets/RundownExport-CCaOfHIr.js.br +0 -0
  90. package/client/assets/RundownExport-CCaOfHIr.js.gz +0 -0
  91. package/client/assets/RundownExport-CCaOfHIr.js.map +1 -0
  92. package/client/assets/Select-cHK8JrMG.js +2 -0
  93. package/client/assets/Select-cHK8JrMG.js.br +0 -0
  94. package/client/assets/Select-cHK8JrMG.js.gz +0 -0
  95. package/client/assets/{Select-B5xNi_tM.js.map → Select-cHK8JrMG.js.map} +1 -1
  96. package/client/assets/{Studio-D4hRKhJ1.js → Studio-BzwFDYzk.js} +2 -2
  97. package/client/assets/Studio-BzwFDYzk.js.br +0 -0
  98. package/client/assets/Studio-BzwFDYzk.js.gz +0 -0
  99. package/client/assets/{Studio-D4hRKhJ1.js.map → Studio-BzwFDYzk.js.map} +1 -1
  100. package/client/assets/StyleEditor-RZvkKHdf.js +2 -0
  101. package/client/assets/StyleEditor-RZvkKHdf.js.br +0 -0
  102. package/client/assets/StyleEditor-RZvkKHdf.js.gz +0 -0
  103. package/client/assets/{StyleEditor-BvcE8dkA.js.map → StyleEditor-RZvkKHdf.js.map} +1 -1
  104. package/client/assets/SuperscriptPeriod-DaZq1rr6.js +2 -0
  105. package/client/assets/SuperscriptPeriod-DaZq1rr6.js.br +0 -0
  106. package/client/assets/SuperscriptPeriod-DaZq1rr6.js.gz +0 -0
  107. package/client/assets/{SuperscriptPeriod-BmHAoSBy.js.map → SuperscriptPeriod-DaZq1rr6.js.map} +1 -1
  108. package/client/assets/SuperscriptTime-Mc0ZGBMo.js +2 -0
  109. package/client/assets/SuperscriptTime-Mc0ZGBMo.js.br +0 -0
  110. package/client/assets/SuperscriptTime-Mc0ZGBMo.js.gz +0 -0
  111. package/client/assets/{SuperscriptTime-Nou92D8X.js.map → SuperscriptTime-Mc0ZGBMo.js.map} +1 -1
  112. package/client/assets/{TimeElements-XpRwBsaa.js → TimeElements-dIvFHgcd.js} +2 -2
  113. package/client/assets/TimeElements-dIvFHgcd.js.br +0 -0
  114. package/client/assets/TimeElements-dIvFHgcd.js.gz +0 -0
  115. package/client/assets/{TimeElements-XpRwBsaa.js.map → TimeElements-dIvFHgcd.js.map} +1 -1
  116. package/client/assets/TimeInput-Duzx40TC.js +2 -0
  117. package/client/assets/TimeInput-Duzx40TC.js.br +0 -0
  118. package/client/assets/TimeInput-Duzx40TC.js.gz +0 -0
  119. package/client/assets/{TimeInput-Bu_5GlHP.js.map → TimeInput-Duzx40TC.js.map} +1 -1
  120. package/client/assets/{TimelinePage-CQqUB1KT.js → TimelinePage-C-OHrCR8.js} +2 -2
  121. package/client/assets/TimelinePage-C-OHrCR8.js.br +0 -0
  122. package/client/assets/TimelinePage-C-OHrCR8.js.gz +0 -0
  123. package/client/assets/{TimelinePage-CQqUB1KT.js.map → TimelinePage-C-OHrCR8.js.map} +1 -1
  124. package/client/assets/Timer-CGqVtVEC.js +2 -0
  125. package/client/assets/Timer-CGqVtVEC.js.br +0 -0
  126. package/client/assets/Timer-CGqVtVEC.js.gz +0 -0
  127. package/client/assets/{Timer-CIr2L3gJ.js.map → Timer-CGqVtVEC.js.map} +1 -1
  128. package/client/assets/{Timer-B7nk3TMf.css → Timer-Jjolf5Ra.css} +1 -1
  129. package/client/assets/Timer-Jjolf5Ra.css.br +0 -0
  130. package/client/assets/Timer-Jjolf5Ra.css.gz +0 -0
  131. package/client/assets/{TimerControlExport-4a3Cd9x8.js → TimerControlExport-GJn4WWdH.js} +2 -2
  132. package/client/assets/TimerControlExport-GJn4WWdH.js.br +0 -0
  133. package/client/assets/TimerControlExport-GJn4WWdH.js.gz +0 -0
  134. package/client/assets/{TimerControlExport-4a3Cd9x8.js.map → TimerControlExport-GJn4WWdH.js.map} +1 -1
  135. package/client/assets/TitleCard-BqbrUnHO.js +2 -0
  136. package/client/assets/TitleCard-BqbrUnHO.js.br +0 -0
  137. package/client/assets/TitleCard-BqbrUnHO.js.gz +0 -0
  138. package/client/assets/{TitleCard-1U35ek0D.js.map → TitleCard-BqbrUnHO.js.map} +1 -1
  139. package/client/assets/Tooltip-BQBvaIZx.js +2 -0
  140. package/client/assets/Tooltip-BQBvaIZx.js.br +0 -0
  141. package/client/assets/Tooltip-BQBvaIZx.js.gz +0 -0
  142. package/client/assets/{Tooltip-B8y25e3n.js.map → Tooltip-BQBvaIZx.js.map} +1 -1
  143. package/client/assets/ViewLogo-BdL1hUV1.js +2 -0
  144. package/client/assets/ViewLogo-BdL1hUV1.js.br +0 -0
  145. package/client/assets/ViewLogo-BdL1hUV1.js.gz +0 -0
  146. package/client/assets/{ViewLogo-BHsV7Faa.js.map → ViewLogo-BdL1hUV1.js.map} +1 -1
  147. package/client/assets/{ViewParamsEditor-BMHXOv-K.js → ViewParamsEditor-CFedpp6w.js} +2 -2
  148. package/client/assets/ViewParamsEditor-CFedpp6w.js.br +0 -0
  149. package/client/assets/ViewParamsEditor-CFedpp6w.js.gz +0 -0
  150. package/client/assets/{ViewParamsEditor-BMHXOv-K.js.map → ViewParamsEditor-CFedpp6w.js.map} +1 -1
  151. package/client/assets/dateConfig-BU1RZfIK.js +2 -0
  152. package/client/assets/dateConfig-BU1RZfIK.js.br +0 -0
  153. package/client/assets/dateConfig-BU1RZfIK.js.gz +0 -0
  154. package/client/assets/dateConfig-BU1RZfIK.js.map +1 -0
  155. package/client/assets/editorSettings-BMt-7s8I.js +2 -0
  156. package/client/assets/editorSettings-BMt-7s8I.js.br +0 -0
  157. package/client/assets/editorSettings-BMt-7s8I.js.gz +0 -0
  158. package/client/assets/{editorSettings-DH9ca-nB.js.map → editorSettings-BMt-7s8I.js.map} +1 -1
  159. package/client/assets/{getProgress-DlrSzpnf.js → getProgress-sdxPEEPi.js} +2 -2
  160. package/client/assets/getProgress-sdxPEEPi.js.br +0 -0
  161. package/client/assets/getProgress-sdxPEEPi.js.gz +0 -0
  162. package/client/assets/{getProgress-DlrSzpnf.js.map → getProgress-sdxPEEPi.js.map} +1 -1
  163. package/client/assets/index-CoGiopcb.js +3 -0
  164. package/client/assets/index-CoGiopcb.js.br +0 -0
  165. package/client/assets/index-CoGiopcb.js.gz +0 -0
  166. package/client/assets/index-CoGiopcb.js.map +1 -0
  167. package/client/assets/{offset-CLG4o744.js → offset-BS90Rks2.js} +2 -2
  168. package/client/assets/offset-BS90Rks2.js.br +0 -0
  169. package/client/assets/offset-BS90Rks2.js.gz +0 -0
  170. package/client/assets/{offset-CLG4o744.js.map → offset-BS90Rks2.js.map} +1 -1
  171. package/client/assets/parseUserTime-DZJMcfuJ.js +2 -0
  172. package/client/assets/parseUserTime-DZJMcfuJ.js.br +0 -0
  173. package/client/assets/parseUserTime-DZJMcfuJ.js.gz +0 -0
  174. package/client/assets/{parseUserTime-Cp5iWS7y.js.map → parseUserTime-DZJMcfuJ.js.map} +1 -1
  175. package/client/assets/{playbackstate-B3BKJ8cT.js → playbackstate-CWexoP3a.js} +2 -2
  176. package/client/assets/playbackstate-CWexoP3a.js.br +0 -0
  177. package/client/assets/playbackstate-CWexoP3a.js.gz +0 -0
  178. package/client/assets/{playbackstate-B3BKJ8cT.js.map → playbackstate-CWexoP3a.js.map} +1 -1
  179. package/client/assets/{presentation.utils-B-wIv_a5.js → presentation.utils-Zo5hNQje.js} +2 -2
  180. package/client/assets/presentation.utils-Zo5hNQje.js.br +0 -0
  181. package/client/assets/presentation.utils-Zo5hNQje.js.gz +0 -0
  182. package/client/assets/{presentation.utils-B-wIv_a5.js.map → presentation.utils-Zo5hNQje.js.map} +1 -1
  183. package/client/assets/rundownUtils-Dl1x6NDv.js +2 -0
  184. package/client/assets/rundownUtils-Dl1x6NDv.js.br +0 -0
  185. package/client/assets/rundownUtils-Dl1x6NDv.js.gz +0 -0
  186. package/client/assets/{rundownUtils-DJKMt8Ih.js.map → rundownUtils-Dl1x6NDv.js.map} +1 -1
  187. package/client/assets/timer.utils-BnMyVO6Z.js +2 -0
  188. package/client/assets/timer.utils-BnMyVO6Z.js.br +0 -0
  189. package/client/assets/timer.utils-BnMyVO6Z.js.gz +0 -0
  190. package/client/assets/timer.utils-BnMyVO6Z.js.map +1 -0
  191. package/client/assets/useCustomFields-CcTb-GQM.js +2 -0
  192. package/client/assets/useCustomFields-CcTb-GQM.js.br +0 -0
  193. package/client/assets/useCustomFields-CcTb-GQM.js.gz +0 -0
  194. package/client/assets/{useCustomFields-BUJkzZvM.js.map → useCustomFields-CcTb-GQM.js.map} +1 -1
  195. package/client/assets/useFollowComponent-BjhV6Uv8.js +2 -0
  196. package/client/assets/useFollowComponent-BjhV6Uv8.js.br +0 -0
  197. package/client/assets/useFollowComponent-BjhV6Uv8.js.gz +0 -0
  198. package/client/assets/{useFollowComponent-Eyo4hWVG.js.map → useFollowComponent-BjhV6Uv8.js.map} +1 -1
  199. package/client/assets/{useProjectData-DGA6K2Zs.js → useProjectData-B5mjXsMj.js} +2 -2
  200. package/client/assets/useProjectData-B5mjXsMj.js.br +0 -0
  201. package/client/assets/useProjectData-B5mjXsMj.js.gz +0 -0
  202. package/client/assets/{useProjectData-DGA6K2Zs.js.map → useProjectData-B5mjXsMj.js.map} +1 -1
  203. package/client/assets/useReport-zMbyWwpn.js +2 -0
  204. package/client/assets/useReport-zMbyWwpn.js.br +0 -0
  205. package/client/assets/useReport-zMbyWwpn.js.gz +0 -0
  206. package/client/assets/{useReport-BUCsRa2T.js.map → useReport-zMbyWwpn.js.map} +1 -1
  207. package/client/assets/useRundown-CHsh5rnl.js +2 -0
  208. package/client/assets/useRundown-CHsh5rnl.js.br +0 -0
  209. package/client/assets/useRundown-CHsh5rnl.js.gz +0 -0
  210. package/client/assets/useRundown-CHsh5rnl.js.map +1 -0
  211. package/client/assets/useWindowTitle-mLKt65i7.js +2 -0
  212. package/client/assets/useWindowTitle-mLKt65i7.js.br +0 -0
  213. package/client/assets/useWindowTitle-mLKt65i7.js.gz +0 -0
  214. package/client/assets/{useWindowTitle-DU8NlxIu.js.map → useWindowTitle-mLKt65i7.js.map} +1 -1
  215. package/client/assets/{validateEvent-3adKsP1N.js → validateEvent-CUmvjN95.js} +2 -2
  216. package/client/assets/validateEvent-CUmvjN95.js.br +0 -0
  217. package/client/assets/validateEvent-CUmvjN95.js.gz +0 -0
  218. package/client/assets/{validateEvent-3adKsP1N.js.map → validateEvent-CUmvjN95.js.map} +1 -1
  219. package/client/assets/{vendor-BoH5HFNN.js → vendor-Cdwxo8bP.js} +21 -21
  220. package/client/assets/vendor-Cdwxo8bP.js.br +0 -0
  221. package/client/assets/vendor-Cdwxo8bP.js.gz +0 -0
  222. package/client/assets/{vendor-BoH5HFNN.js.map → vendor-Cdwxo8bP.js.map} +1 -1
  223. package/client/assets/{viewLoader.utils-BPOG1xso.js → viewLoader.utils-DuXjY5zb.js} +2 -2
  224. package/client/assets/viewLoader.utils-DuXjY5zb.js.br +0 -0
  225. package/client/assets/viewLoader.utils-DuXjY5zb.js.gz +0 -0
  226. package/client/assets/{viewLoader.utils-BPOG1xso.js.map → viewLoader.utils-DuXjY5zb.js.map} +1 -1
  227. package/client/assets/viewUtils-dKRKkb_F.js +2 -0
  228. package/client/assets/viewUtils-dKRKkb_F.js.br +0 -0
  229. package/client/assets/viewUtils-dKRKkb_F.js.gz +0 -0
  230. package/client/assets/viewUtils-dKRKkb_F.js.map +1 -0
  231. package/client/index.html +2 -2
  232. package/package.json +1 -1
  233. package/server/index.cjs +89 -89
  234. package/client/assets/Backstage-DG-hwPI3.js +0 -2
  235. package/client/assets/Backstage-DG-hwPI3.js.br +0 -0
  236. package/client/assets/Backstage-DG-hwPI3.js.gz +0 -0
  237. package/client/assets/Countdown-C8LGl1pp.js.br +0 -0
  238. package/client/assets/Countdown-C8LGl1pp.js.gz +0 -0
  239. package/client/assets/CustomTranslationModal-CJ9-aDjl.js.br +0 -0
  240. package/client/assets/CustomTranslationModal-CJ9-aDjl.js.gz +0 -0
  241. package/client/assets/DelayIndicator-F4GdgsGh.js +0 -2
  242. package/client/assets/DelayIndicator-F4GdgsGh.js.br +0 -0
  243. package/client/assets/DelayIndicator-F4GdgsGh.js.gz +0 -0
  244. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js +0 -2
  245. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js.br +0 -0
  246. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js.gz +0 -0
  247. package/client/assets/EditorUtils-Bd3J5Dvf.js +0 -2
  248. package/client/assets/EditorUtils-Bd3J5Dvf.js.br +0 -0
  249. package/client/assets/EditorUtils-Bd3J5Dvf.js.gz +0 -0
  250. package/client/assets/Empty-C0IdV_kI.js +0 -2
  251. package/client/assets/Empty-C0IdV_kI.js.br +0 -0
  252. package/client/assets/Empty-C0IdV_kI.js.gz +0 -0
  253. package/client/assets/EmptyPage-Ct3d0DqJ.js +0 -2
  254. package/client/assets/EmptyPage-Ct3d0DqJ.js.br +0 -0
  255. package/client/assets/EmptyPage-Ct3d0DqJ.js.gz +0 -0
  256. package/client/assets/FollowButton-BG-ycRWu.js +0 -2
  257. package/client/assets/FollowButton-BG-ycRWu.js.br +0 -0
  258. package/client/assets/FollowButton-BG-ycRWu.js.gz +0 -0
  259. package/client/assets/MessageControlExport-X-4dl9QT.js.br +0 -0
  260. package/client/assets/MessageControlExport-X-4dl9QT.js.gz +0 -0
  261. package/client/assets/MessageControlExport-X-4dl9QT.js.map +0 -1
  262. package/client/assets/MilestoneEditor-rgBQSXVU.js.br +0 -0
  263. package/client/assets/MilestoneEditor-rgBQSXVU.js.gz +0 -0
  264. package/client/assets/Modal-Bn1bZkwb.js +0 -2
  265. package/client/assets/Modal-Bn1bZkwb.js.br +0 -0
  266. package/client/assets/Modal-Bn1bZkwb.js.gz +0 -0
  267. package/client/assets/MultiPartProgressBar-Cmw-gisu.js.br +0 -0
  268. package/client/assets/MultiPartProgressBar-Cmw-gisu.js.gz +0 -0
  269. package/client/assets/OperatorExport-CJd8jmY4.js.br +0 -0
  270. package/client/assets/OperatorExport-CJd8jmY4.js.gz +0 -0
  271. package/client/assets/OverviewWrapper-1Vj3_ojX.js.br +0 -0
  272. package/client/assets/OverviewWrapper-1Vj3_ojX.js.gz +0 -0
  273. package/client/assets/PipHost-BUF7n-lT.css +0 -1
  274. package/client/assets/PipHost-BUF7n-lT.css.br +0 -0
  275. package/client/assets/PipHost-BUF7n-lT.css.gz +0 -0
  276. package/client/assets/PipHost-D7liNR4M.js +0 -2
  277. package/client/assets/PipHost-D7liNR4M.js.br +0 -0
  278. package/client/assets/PipHost-D7liNR4M.js.gz +0 -0
  279. package/client/assets/PipHost-D7liNR4M.js.map +0 -1
  280. package/client/assets/ProjectInfo-BduQgjcz.js.br +0 -0
  281. package/client/assets/ProjectInfo-BduQgjcz.js.gz +0 -0
  282. package/client/assets/ProtectRoute-Ci_AIozP.js +0 -2
  283. package/client/assets/ProtectRoute-Ci_AIozP.js.br +0 -0
  284. package/client/assets/ProtectRoute-Ci_AIozP.js.gz +0 -0
  285. package/client/assets/ProtectedCuesheet-D_zdkwM-.js.br +0 -0
  286. package/client/assets/ProtectedCuesheet-D_zdkwM-.js.gz +0 -0
  287. package/client/assets/ProtectedEditor-CNL2ig79.js.br +0 -0
  288. package/client/assets/ProtectedEditor-CNL2ig79.js.gz +0 -0
  289. package/client/assets/ProtectedEditor-CNL2ig79.js.map +0 -1
  290. package/client/assets/RundownEntry-Bs1ombtH.js +0 -2
  291. package/client/assets/RundownEntry-Bs1ombtH.js.br +0 -0
  292. package/client/assets/RundownEntry-Bs1ombtH.js.gz +0 -0
  293. package/client/assets/RundownEntry-Bs1ombtH.js.map +0 -1
  294. package/client/assets/RundownExport-BCT0ybxy.js +0 -3
  295. package/client/assets/RundownExport-BCT0ybxy.js.br +0 -0
  296. package/client/assets/RundownExport-BCT0ybxy.js.gz +0 -0
  297. package/client/assets/RundownExport-BCT0ybxy.js.map +0 -1
  298. package/client/assets/Select-B5xNi_tM.js +0 -2
  299. package/client/assets/Select-B5xNi_tM.js.br +0 -0
  300. package/client/assets/Select-B5xNi_tM.js.gz +0 -0
  301. package/client/assets/Studio-D4hRKhJ1.js.br +0 -0
  302. package/client/assets/Studio-D4hRKhJ1.js.gz +0 -0
  303. package/client/assets/StyleEditor-BvcE8dkA.js +0 -2
  304. package/client/assets/StyleEditor-BvcE8dkA.js.br +0 -3
  305. package/client/assets/StyleEditor-BvcE8dkA.js.gz +0 -0
  306. package/client/assets/SuperscriptPeriod-BmHAoSBy.js +0 -2
  307. package/client/assets/SuperscriptPeriod-BmHAoSBy.js.br +0 -0
  308. package/client/assets/SuperscriptPeriod-BmHAoSBy.js.gz +0 -0
  309. package/client/assets/SuperscriptTime-Nou92D8X.js +0 -2
  310. package/client/assets/SuperscriptTime-Nou92D8X.js.br +0 -0
  311. package/client/assets/SuperscriptTime-Nou92D8X.js.gz +0 -0
  312. package/client/assets/TimeElements-XpRwBsaa.js.br +0 -0
  313. package/client/assets/TimeElements-XpRwBsaa.js.gz +0 -0
  314. package/client/assets/TimeInput-Bu_5GlHP.js +0 -2
  315. package/client/assets/TimeInput-Bu_5GlHP.js.br +0 -0
  316. package/client/assets/TimeInput-Bu_5GlHP.js.gz +0 -0
  317. package/client/assets/TimelinePage-CQqUB1KT.js.br +0 -0
  318. package/client/assets/TimelinePage-CQqUB1KT.js.gz +0 -0
  319. package/client/assets/Timer-B7nk3TMf.css.br +0 -0
  320. package/client/assets/Timer-B7nk3TMf.css.gz +0 -0
  321. package/client/assets/Timer-CIr2L3gJ.js +0 -2
  322. package/client/assets/Timer-CIr2L3gJ.js.br +0 -0
  323. package/client/assets/Timer-CIr2L3gJ.js.gz +0 -0
  324. package/client/assets/TimerControlExport-4a3Cd9x8.js.br +0 -0
  325. package/client/assets/TimerControlExport-4a3Cd9x8.js.gz +0 -0
  326. package/client/assets/TitleCard-1U35ek0D.js +0 -2
  327. package/client/assets/TitleCard-1U35ek0D.js.br +0 -0
  328. package/client/assets/TitleCard-1U35ek0D.js.gz +0 -0
  329. package/client/assets/Tooltip-B8y25e3n.js +0 -2
  330. package/client/assets/Tooltip-B8y25e3n.js.br +0 -0
  331. package/client/assets/Tooltip-B8y25e3n.js.gz +0 -0
  332. package/client/assets/ViewLogo-BHsV7Faa.js +0 -2
  333. package/client/assets/ViewLogo-BHsV7Faa.js.br +0 -0
  334. package/client/assets/ViewLogo-BHsV7Faa.js.gz +0 -0
  335. package/client/assets/ViewParamsEditor-BMHXOv-K.js.br +0 -0
  336. package/client/assets/ViewParamsEditor-BMHXOv-K.js.gz +0 -0
  337. package/client/assets/dateConfig-_BhycZza.js +0 -2
  338. package/client/assets/dateConfig-_BhycZza.js.br +0 -0
  339. package/client/assets/dateConfig-_BhycZza.js.gz +0 -0
  340. package/client/assets/dateConfig-_BhycZza.js.map +0 -1
  341. package/client/assets/editorSettings-DH9ca-nB.js +0 -2
  342. package/client/assets/editorSettings-DH9ca-nB.js.br +0 -0
  343. package/client/assets/editorSettings-DH9ca-nB.js.gz +0 -0
  344. package/client/assets/getProgress-DlrSzpnf.js.br +0 -0
  345. package/client/assets/getProgress-DlrSzpnf.js.gz +0 -0
  346. package/client/assets/index-CDBQg2fh.js +0 -3
  347. package/client/assets/index-CDBQg2fh.js.br +0 -0
  348. package/client/assets/index-CDBQg2fh.js.gz +0 -0
  349. package/client/assets/index-CDBQg2fh.js.map +0 -1
  350. package/client/assets/offset-CLG4o744.js.br +0 -0
  351. package/client/assets/offset-CLG4o744.js.gz +0 -0
  352. package/client/assets/parseUserTime-Cp5iWS7y.js +0 -2
  353. package/client/assets/parseUserTime-Cp5iWS7y.js.br +0 -0
  354. package/client/assets/parseUserTime-Cp5iWS7y.js.gz +0 -0
  355. package/client/assets/playbackstate-B3BKJ8cT.js.br +0 -0
  356. package/client/assets/playbackstate-B3BKJ8cT.js.gz +0 -0
  357. package/client/assets/presentation.utils-B-wIv_a5.js.br +0 -0
  358. package/client/assets/presentation.utils-B-wIv_a5.js.gz +0 -0
  359. package/client/assets/rundownUtils-DJKMt8Ih.js +0 -2
  360. package/client/assets/rundownUtils-DJKMt8Ih.js.br +0 -0
  361. package/client/assets/rundownUtils-DJKMt8Ih.js.gz +0 -0
  362. package/client/assets/timer.utils-ByC_bcT9.js +0 -2
  363. package/client/assets/timer.utils-ByC_bcT9.js.br +0 -0
  364. package/client/assets/timer.utils-ByC_bcT9.js.gz +0 -0
  365. package/client/assets/timer.utils-ByC_bcT9.js.map +0 -1
  366. package/client/assets/useCustomFields-BUJkzZvM.js +0 -2
  367. package/client/assets/useCustomFields-BUJkzZvM.js.br +0 -2
  368. package/client/assets/useCustomFields-BUJkzZvM.js.gz +0 -0
  369. package/client/assets/useFollowComponent-Eyo4hWVG.js +0 -2
  370. package/client/assets/useFollowComponent-Eyo4hWVG.js.br +0 -0
  371. package/client/assets/useFollowComponent-Eyo4hWVG.js.gz +0 -0
  372. package/client/assets/useProjectData-DGA6K2Zs.js.br +0 -0
  373. package/client/assets/useProjectData-DGA6K2Zs.js.gz +0 -0
  374. package/client/assets/useReport-BUCsRa2T.js +0 -2
  375. package/client/assets/useReport-BUCsRa2T.js.br +0 -0
  376. package/client/assets/useReport-BUCsRa2T.js.gz +0 -0
  377. package/client/assets/useRundown-BFae0_bU.js +0 -2
  378. package/client/assets/useRundown-BFae0_bU.js.br +0 -0
  379. package/client/assets/useRundown-BFae0_bU.js.gz +0 -0
  380. package/client/assets/useRundown-BFae0_bU.js.map +0 -1
  381. package/client/assets/useWindowTitle-DU8NlxIu.js +0 -2
  382. package/client/assets/useWindowTitle-DU8NlxIu.js.br +0 -0
  383. package/client/assets/useWindowTitle-DU8NlxIu.js.gz +0 -0
  384. package/client/assets/validateEvent-3adKsP1N.js.br +0 -0
  385. package/client/assets/validateEvent-3adKsP1N.js.gz +0 -0
  386. package/client/assets/vendor-BoH5HFNN.js.br +0 -0
  387. package/client/assets/vendor-BoH5HFNN.js.gz +0 -0
  388. package/client/assets/viewLoader.utils-BPOG1xso.js.br +0 -0
  389. package/client/assets/viewLoader.utils-BPOG1xso.js.gz +0 -0
  390. package/client/assets/viewUtils-DI8_kmUZ.js +0 -2
  391. package/client/assets/viewUtils-DI8_kmUZ.js.br +0 -0
  392. package/client/assets/viewUtils-DI8_kmUZ.js.gz +0 -0
  393. package/client/assets/viewUtils-DI8_kmUZ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"StyleEditor-BvcE8dkA.js","sources":["../../src/features/app-settings/panel/settings-panel/composite/StyleEditor.tsx"],"sourcesContent":["import { forwardRef, memo, useEffect, useImperativeHandle, useState } from 'react';\nimport Editor from 'react-simple-code-editor';\nimport Prism from 'prismjs/components/prism-core';\n\nimport 'prismjs/components/prism-css';\nimport 'prismjs/themes/prism-tomorrow.min.css';\nimport style from './StyleEditor.module.scss';\n\ninterface CodeEditorProps {\n language: string;\n initialValue: string;\n isDirty: boolean;\n setIsDirty: (value: boolean) => void;\n}\n\nconst CodeEditor = forwardRef((props: CodeEditorProps, cssRef) => {\n const { language, initialValue, isDirty, setIsDirty } = props;\n\n const [code, setCode] = useState(initialValue);\n\n const highlight = (code: string) => {\n const grammar = Prism.languages[language];\n return grammar ? Prism.highlight(code, grammar, language) : code;\n };\n\n const handleChange = (newCode: string) => {\n setCode(newCode);\n };\n\n useImperativeHandle(cssRef, () => {\n return {\n getCss: () => code,\n };\n });\n\n // add contents to editor on mount and any change in initialValue\n useEffect(() => {\n setCode(initialValue);\n }, [initialValue]);\n\n // handle dirty state on change\n useEffect(() => {\n if (initialValue.trim() !== code.trim() && !isDirty && code.length !== 0) {\n setIsDirty(true);\n }\n\n if (initialValue.trim() === code.trim() && isDirty) {\n setIsDirty(false);\n }\n }, [initialValue, code, isDirty, setIsDirty]);\n\n return (\n <div className={style.wrapper}>\n <Editor\n value={code}\n padding={15}\n onValueChange={handleChange}\n highlight={highlight}\n style={{\n fontFamily: 'monospace',\n fontSize: 12,\n minHeight: 500,\n background: '#2d2d2d', // Background of tomorrow theme\n }}\n />\n </div>\n );\n});\n\nCodeEditor.displayName = 'StyleEditor';\n\nexport default memo(CodeEditor);\n"],"names":["CodeEditor","forwardRef","props","cssRef","language","initialValue","isDirty","setIsDirty","code","setCode","useState","highlight","grammar","Prism","handleChange","newCode","useImperativeHandle","useEffect","jsx","style","Editor","memo"],"mappings":"ocAeMA,EAAaC,EAAA,WAAW,CAACC,EAAwBC,IAAW,CAChE,KAAM,CAAE,SAAAC,EAAU,aAAAC,EAAc,QAAAC,EAAS,WAAAC,CAAe,EAAAL,EAElD,CAACM,EAAMC,CAAO,EAAIC,EAAAA,SAASL,CAAY,EAEvCM,EAAaH,GAAiB,CAC5B,MAAAI,EAAUC,EAAM,UAAUT,CAAQ,EACxC,OAAOQ,EAAUC,EAAM,UAAUL,EAAMI,EAASR,CAAQ,EAAII,CAC9D,EAEMM,EAAgBC,GAAoB,CACxCN,EAAQM,CAAO,CACjB,EAEAC,OAAAA,EAAA,oBAAoBb,EAAQ,KACnB,CACL,OAAQ,IAAMK,CAChB,EACD,EAGDS,EAAAA,UAAU,IAAM,CACdR,EAAQJ,CAAY,CAAA,EACnB,CAACA,CAAY,CAAC,EAGjBY,EAAAA,UAAU,IAAM,CACVZ,EAAa,KAAK,IAAMG,EAAK,QAAU,CAACF,GAAWE,EAAK,SAAW,GACrED,EAAW,EAAI,EAGbF,EAAa,KAAK,IAAMG,EAAK,KAAA,GAAUF,GACzCC,EAAW,EAAK,GAEjB,CAACF,EAAcG,EAAMF,EAASC,CAAU,CAAC,EAGzCW,EAAAA,IAAA,MAAA,CAAI,UAAWC,EAAM,QACpB,SAAAD,EAAA,IAACE,EAAA,CACC,MAAOZ,EACP,QAAS,GACT,cAAeM,EACf,UAAAH,EACA,MAAO,CACL,WAAY,YACZ,SAAU,GACV,UAAW,IACX,WAAY,SAAA,CACd,CAAA,EAEJ,CAEJ,CAAC,EAEDX,EAAW,YAAc,cAEzB,MAAeqB,EAAAA,EAAAA,KAAKrB,CAAU"}
1
+ {"version":3,"file":"StyleEditor-RZvkKHdf.js","sources":["../../src/features/app-settings/panel/settings-panel/composite/StyleEditor.tsx"],"sourcesContent":["import { forwardRef, memo, useEffect, useImperativeHandle, useState } from 'react';\nimport Editor from 'react-simple-code-editor';\nimport Prism from 'prismjs/components/prism-core';\n\nimport 'prismjs/components/prism-css';\nimport 'prismjs/themes/prism-tomorrow.min.css';\nimport style from './StyleEditor.module.scss';\n\ninterface CodeEditorProps {\n language: string;\n initialValue: string;\n isDirty: boolean;\n setIsDirty: (value: boolean) => void;\n}\n\nconst CodeEditor = forwardRef((props: CodeEditorProps, cssRef) => {\n const { language, initialValue, isDirty, setIsDirty } = props;\n\n const [code, setCode] = useState(initialValue);\n\n const highlight = (code: string) => {\n const grammar = Prism.languages[language];\n return grammar ? Prism.highlight(code, grammar, language) : code;\n };\n\n const handleChange = (newCode: string) => {\n setCode(newCode);\n };\n\n useImperativeHandle(cssRef, () => {\n return {\n getCss: () => code,\n };\n });\n\n // add contents to editor on mount and any change in initialValue\n useEffect(() => {\n setCode(initialValue);\n }, [initialValue]);\n\n // handle dirty state on change\n useEffect(() => {\n if (initialValue.trim() !== code.trim() && !isDirty && code.length !== 0) {\n setIsDirty(true);\n }\n\n if (initialValue.trim() === code.trim() && isDirty) {\n setIsDirty(false);\n }\n }, [initialValue, code, isDirty, setIsDirty]);\n\n return (\n <div className={style.wrapper}>\n <Editor\n value={code}\n padding={15}\n onValueChange={handleChange}\n highlight={highlight}\n style={{\n fontFamily: 'monospace',\n fontSize: 12,\n minHeight: 500,\n background: '#2d2d2d', // Background of tomorrow theme\n }}\n />\n </div>\n );\n});\n\nCodeEditor.displayName = 'StyleEditor';\n\nexport default memo(CodeEditor);\n"],"names":["CodeEditor","forwardRef","props","cssRef","language","initialValue","isDirty","setIsDirty","code","setCode","useState","highlight","grammar","Prism","languages","handleChange","newCode","useImperativeHandle","getCss","useEffect","trim","length","jsx","style","wrapper","Editor","fontFamily","fontSize","minHeight","background","displayName","memo"],"mappings":"ocAeMA,EAAaC,EAAAA,WAAW,CAACC,EAAwBC,IAAW,CAC1D,KAAA,CAAEC,SAAAA,EAAUC,aAAAA,EAAcC,QAAAA,EAASC,WAAAA,CAAAA,EAAeL,EAElD,CAACM,EAAMC,CAAO,EAAIC,EAAAA,SAASL,CAAY,EAEvCM,EAAaH,GAAiB,CAC5BI,MAAAA,EAAUC,EAAMC,UAAUV,CAAQ,EACxC,OAAOQ,EAAUC,EAAMF,UAAUH,EAAMI,EAASR,CAAQ,EAAII,CAC9D,EAEMO,EAAgBC,GAAoB,CACxCP,EAAQO,CAAO,CACjB,EAEAC,OAAAA,EAAAA,oBAAoBd,EAAQ,KACnB,CACLe,OAAQA,IAAMV,CAChB,EACD,EAGDW,EAAAA,UAAU,IAAM,CACdV,EAAQJ,CAAY,CAAA,EACnB,CAACA,CAAY,CAAC,EAGjBc,EAAAA,UAAU,IAAM,CACVd,EAAae,KAAK,IAAMZ,EAAKY,QAAU,CAACd,GAAWE,EAAKa,SAAW,GACrEd,EAAW,EAAI,EAGbF,EAAae,KAAK,IAAMZ,EAAKY,KAAAA,GAAUd,GACzCC,EAAW,EAAK,GAEjB,CAACF,EAAcG,EAAMF,EAASC,CAAU,CAAC,EAGzCe,EAAAA,IAAA,MAAA,CAAI,UAAWC,EAAMC,QACpB,SAACF,MAAAG,EAAA,CACC,MAAOjB,EACP,QAAS,GACT,cAAeO,EACf,UAAAJ,EACA,MAAO,CACLe,WAAY,YACZC,SAAU,GACVC,UAAW,IACXC,WAAY,WACZ,CAEN,CAAA,CAEJ,CAAC,EAED7B,EAAW8B,YAAc,cAEzB,MAAeC,EAAAA,EAAAA,KAAK/B,CAAU"}
@@ -0,0 +1,2 @@
1
+ import{j as r}from"./vendor-Cdwxo8bP.js";/* empty css */(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},d=new e.Error().stack;d&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[d]="b1dfaf34-929a-4832-9b14-d8e906a6e532",e._sentryDebugIdIdentifier="sentry-dbid-b1dfaf34-929a-4832-9b14-d8e906a6e532")}catch{}})();function o({time:e,className:d}){const[i,n]=e.split(" ");return r.jsxs("div",{className:d,children:[i,n&&r.jsx("sup",{className:"period",children:n})]})}export{o as S};
2
+ //# sourceMappingURL=SuperscriptPeriod-DaZq1rr6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SuperscriptPeriod-BmHAoSBy.js","sources":["../../src/features/viewers/common/superscript-time/SuperscriptPeriod.tsx"],"sourcesContent":["import './SuperscriptTime.scss';\n\ninterface SuperscriptPeriodProps {\n time: string;\n className?: string;\n}\n\n/**\n * Receives a time string and formats periods (am/pm) as superscript\n * @example 12:00 AM -> AM becomes a superscript\n * @example 12:00:10 -> no formatting changes applied\n */\nexport default function SuperscriptPeriod({ time, className }: SuperscriptPeriodProps) {\n // we assume anything after space is a period tag\n const [timeString, period] = time.split(' ');\n\n return (\n <div className={className}>\n {timeString}\n {period && <sup className='period'>{period}</sup>}\n </div>\n );\n}\n"],"names":["SuperscriptPeriod","time","className","timeString","period","jsxs","jsx"],"mappings":"yaAYA,SAAwBA,EAAkB,CAAE,KAAAC,EAAM,UAAAC,GAAqC,CAErF,KAAM,CAACC,EAAYC,CAAM,EAAIH,EAAK,MAAM,GAAG,EAGzC,OAAAI,OAAC,OAAI,UAAAH,EACF,SAAA,CAAAC,EACAC,GAAUE,EAAA,IAAC,MAAI,CAAA,UAAU,SAAU,SAAOF,CAAA,CAAA,CAAA,EAC7C,CAEJ"}
1
+ {"version":3,"file":"SuperscriptPeriod-DaZq1rr6.js","sources":["../../src/features/viewers/common/superscript-time/SuperscriptPeriod.tsx"],"sourcesContent":["import './SuperscriptTime.scss';\n\ninterface SuperscriptPeriodProps {\n time: string;\n className?: string;\n}\n\n/**\n * Receives a time string and formats periods (am/pm) as superscript\n * @example 12:00 AM -> AM becomes a superscript\n * @example 12:00:10 -> no formatting changes applied\n */\nexport default function SuperscriptPeriod({ time, className }: SuperscriptPeriodProps) {\n // we assume anything after space is a period tag\n const [timeString, period] = time.split(' ');\n\n return (\n <div className={className}>\n {timeString}\n {period && <sup className='period'>{period}</sup>}\n </div>\n );\n}\n"],"names":["SuperscriptPeriod","time","className","timeString","period","split","jsxs","jsx"],"mappings":"yaAYA,SAAwBA,EAAkB,CAAEC,KAAAA,EAAMC,UAAAA,CAAkC,EAAG,CAErF,KAAM,CAACC,EAAYC,CAAM,EAAIH,EAAKI,MAAM,GAAG,EAGzC,OAAAC,OAAC,OAAI,UAAAJ,EACFC,SAAAA,CAAAA,EACAC,GAAUG,EAAA,IAAC,MAAI,CAAA,UAAU,SAAUH,SAAOA,CAAA,CAAA,CAAA,EAC7C,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{j as n}from"./vendor-Cdwxo8bP.js";/* empty css */(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new e.Error().stack;s&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[s]="97b6b811-28ba-4ec2-9e27-5c1beeacacd9",e._sentryDebugIdIdentifier="sentry-dbid-97b6b811-28ba-4ec2-9e27-5c1beeacacd9")}catch{}})();function o(e){return e.length!==8?[e,""]:[e.slice(0,5),e.slice(5)]}function l({time:e,className:s,style:r}){const[c,i]=e.split(" "),[d,t]=o(c);return n.jsxs("div",{className:s,style:r,children:[d,t&&n.jsx("span",{className:"subscript",children:t}),i&&n.jsx("sup",{className:"period",children:i})]})}export{l as S};
2
+ //# sourceMappingURL=SuperscriptTime-Mc0ZGBMo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SuperscriptTime-Nou92D8X.js","sources":["../../src/features/viewers/common/superscript-time/SuperscriptTime.tsx"],"sourcesContent":["import { CSSProperties } from 'react';\n\nimport './SuperscriptTime.scss';\n\ninterface SuperscriptTimeProps {\n time: string;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * When the timer includes seconds, we want to split it from the rest\n */\nfunction getTimerParts(time: string) {\n if (time.length !== 8) {\n return [time, ''];\n }\n\n return [time.slice(0, 5), time.slice(5)];\n}\n\n/**\n * Receives a time string and formats it with a subscript or superscript\n * @example 12:00 AM -> AM becomes a superscript\n * @example 12:00:10 -> the seconds become a subscript\n */\nexport default function SuperscriptTime({ time, className, style }: SuperscriptTimeProps) {\n // we assume anything after space is a period tag\n const [timeString, period] = time.split(' ');\n const [mainTime, subscript] = getTimerParts(timeString);\n\n return (\n <div className={className} style={style}>\n {mainTime}\n {subscript && <span className='subscript'>{subscript}</span>}\n {period && <sup className='period'>{period}</sup>}\n </div>\n );\n}\n"],"names":["getTimerParts","time","SuperscriptTime","className","style","timeString","period","mainTime","subscript","jsxs","jsx"],"mappings":"yaAaA,SAASA,EAAcC,EAAc,CAC/B,OAAAA,EAAK,SAAW,EACX,CAACA,EAAM,EAAE,EAGX,CAACA,EAAK,MAAM,EAAG,CAAC,EAAGA,EAAK,MAAM,CAAC,CAAC,CACzC,CAOA,SAAwBC,EAAgB,CAAE,KAAAD,EAAM,UAAAE,EAAW,MAAAC,GAA+B,CAExF,KAAM,CAACC,EAAYC,CAAM,EAAIL,EAAK,MAAM,GAAG,EACrC,CAACM,EAAUC,CAAS,EAAIR,EAAcK,CAAU,EAGpD,OAAAI,EAAA,KAAC,MAAI,CAAA,UAAAN,EAAsB,MAAAC,EACxB,SAAA,CAAAG,EACAC,GAAaE,EAAA,IAAC,OAAK,CAAA,UAAU,YAAa,SAAUF,EAAA,EACpDF,GAAUI,EAAA,IAAC,MAAI,CAAA,UAAU,SAAU,SAAOJ,CAAA,CAAA,CAAA,EAC7C,CAEJ"}
1
+ {"version":3,"file":"SuperscriptTime-Mc0ZGBMo.js","sources":["../../src/features/viewers/common/superscript-time/SuperscriptTime.tsx"],"sourcesContent":["import { CSSProperties } from 'react';\n\nimport './SuperscriptTime.scss';\n\ninterface SuperscriptTimeProps {\n time: string;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * When the timer includes seconds, we want to split it from the rest\n */\nfunction getTimerParts(time: string) {\n if (time.length !== 8) {\n return [time, ''];\n }\n\n return [time.slice(0, 5), time.slice(5)];\n}\n\n/**\n * Receives a time string and formats it with a subscript or superscript\n * @example 12:00 AM -> AM becomes a superscript\n * @example 12:00:10 -> the seconds become a subscript\n */\nexport default function SuperscriptTime({ time, className, style }: SuperscriptTimeProps) {\n // we assume anything after space is a period tag\n const [timeString, period] = time.split(' ');\n const [mainTime, subscript] = getTimerParts(timeString);\n\n return (\n <div className={className} style={style}>\n {mainTime}\n {subscript && <span className='subscript'>{subscript}</span>}\n {period && <sup className='period'>{period}</sup>}\n </div>\n );\n}\n"],"names":["getTimerParts","time","length","slice","SuperscriptTime","className","style","timeString","period","split","mainTime","subscript","jsxs","jsx"],"mappings":"yaAaA,SAASA,EAAcC,EAAc,CAC/BA,OAAAA,EAAKC,SAAW,EACX,CAACD,EAAM,EAAE,EAGX,CAACA,EAAKE,MAAM,EAAG,CAAC,EAAGF,EAAKE,MAAM,CAAC,CAAC,CACzC,CAOA,SAAwBC,EAAgB,CAAEH,KAAAA,EAAMI,UAAAA,EAAWC,MAAAA,CAA4B,EAAG,CAExF,KAAM,CAACC,EAAYC,CAAM,EAAIP,EAAKQ,MAAM,GAAG,EACrC,CAACC,EAAUC,CAAS,EAAIX,EAAcO,CAAU,EAGpD,OAAAK,EAAA,KAAC,MAAI,CAAA,UAAAP,EAAsB,MAAAC,EACxBI,SAAAA,CAAAA,EACAC,GAAaE,EAAA,IAAC,OAAK,CAAA,UAAU,YAAaF,SAAUA,EAAA,EACpDH,GAAUK,EAAA,IAAC,MAAI,CAAA,UAAU,SAAUL,SAAOA,CAAA,CAAA,CAAA,EAC7C,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{j as e,h as C,b2 as P,b3 as M,b4 as U,b5 as A,b6 as F,b7 as H,b8 as z}from"./vendor-BoH5HFNN.js";import{s as v,m as b,bk as m,A as V,e as d,bl as W,f as h,bm as q,x as w,bn as K,v as B,K as J,y as L,bo as Q,bp as X,bq as Y,br as I,T as E,bs as Z,bt as ee}from"./index-CDBQg2fh.js";import{T as f}from"./Tooltip-B8y25e3n.js";import{v as G}from"./useRundown-BFae0_bU.js";import{a as te,g as ae}from"./offset-CLG4o744.js";import{S as N}from"./SuperscriptPeriod-BmHAoSBy.js";import{i as g}from"./playbackstate-B3BKJ8cT.js";(function(){try{var a=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new a.Error().stack;n&&(a._sentryDebugIds=a._sentryDebugIds||{},a._sentryDebugIds[n]="9906ee58-be5e-4ed8-8d2f-9365abefa0d1",a._sentryDebugIdIdentifier="sentry-dbid-9906ee58-be5e-4ed8-8d2f-9365abefa0d1")}catch{}})();function S(a,n=3,s,l="due"){return a!==null&&a<=0?l:se(a,n,s)}function se(a,n=3,s){return b(a,{fallback:n===3?m:V,direction:s})}function R(a){return a!==null&&a>v?[a%v,Math.floor(a/v)]:[a,0]}const ne="_label_1ahsu_18",le="_clock_1ahsu_23",re="_column_1ahsu_35",ce="_over_1ahsu_47",ie="_under_1ahsu_48",o={label:ne,clock:le,column:re,over:ce,under:ie};function $({label:a,value:n,state:s="active",className:l,testId:c}){return e.jsxs("div",{className:d([o.column,l]),"data-state":s,children:[e.jsx("span",{className:o.label,children:a}),e.jsx("span",{className:o.clock,"data-testid":c,children:n})]})}function de({label:a,state:n="active",className:s,render:l}){return e.jsxs("div",{className:d([o.column,s]),"data-state":n,children:[e.jsx("span",{className:o.label,children:a}),l(o.clock)]})}function oe({state:a,value:n,testId:s}){return e.jsxs("div",{className:o.column,"data-state":a,children:[e.jsxs("div",{className:o.label,children:[e.jsx("span",{className:o.over,children:"Over"}),e.jsx("span",{children:"/"}),e.jsx("span",{className:o.under,children:"Under"})]}),e.jsx("span",{className:o.clock,"data-testid":s,children:n})]})}const ue="_column_1uyfj_17",me="_row_1uyfj_26",fe="_metadataRow_1uyfj_33",xe="_labelledElement_1uyfj_40",pe="_icon_1uyfj_46",be="_label_1uyfj_40",je="_time_1uyfj_58",Te="_daySpan_1uyfj_65",ve="_muted_1uyfj_80",ye="_labelTitle_1uyfj_84",_e="_dueTime_1uyfj_93",t={column:ue,row:me,metadataRow:fe,labelledElement:xe,icon:pe,label:be,time:je,daySpan:Te,muted:ve,labelTitle:ye,dueTime:_e};function Ce({shouldFormat:a}){const{plannedEnd:n,plannedStart:s,actualStart:l}=W(),c={format12:"hh:mm:ss a",format24:"HH:mm:ss"},u=s===null?m:a?h(s,c):b(s,{fallback:m}),x=l===null?m:a?h(l,c):b(l,{fallback:m}),[r,i]=C.useMemo(()=>R(n),[n]),j=r===null?m:a?h(r,c):b(r,{fallback:m}),p=i>0,T=p?`Planned end time (rundown spans over ${i+1} days)`:"Planned end time";return e.jsxs("div",{className:t.column,children:[e.jsxs("div",{className:t.row,children:[e.jsx("span",{className:t.label,children:"Start"}),e.jsx(f,{text:"Planned start time",render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(P,{className:t.icon}),e.jsx(N,{className:d([t.time,s===null&&t.muted]),time:u})]})}),e.jsx(f,{text:"Actual start time",render:e.jsxs("div",{className:t.labelledElement,"data-testid":"actual-start-time",children:[e.jsx(M,{className:t.icon}),e.jsx(N,{className:d([t.time,l===null&&t.muted]),time:x})]})})]}),e.jsxs("div",{className:t.row,children:[e.jsx("span",{className:t.label,children:"End"}),e.jsx(f,{text:T,render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(P,{className:t.icon}),e.jsx(N,{className:d([t.time,n===null&&t.muted]),time:j}),p&&e.jsx("span",{className:d([t.time,t.daySpan]),"data-day-offset":i})]})}),e.jsx(he,{shouldFormat:a})]})]})}function he({shouldFormat:a}){const{expectedEnd:n}=Q(),[s,l]=C.useMemo(()=>R(n),[n]),c=s===null?m:a?h(s,{format12:"hh:mm:ss a",format24:"HH:mm:ss"}):b(s,{fallback:m}),u=s!==null&&l>0,x=u?`Expected end time (rundown spans over ${l+1} days)`:"Expected end time";return e.jsx(f,{text:x,render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(U,{className:t.icon}),e.jsx(N,{className:d([t.time,s===null&&t.muted]),time:c}),u&&e.jsx("span",{className:d([t.time,t.daySpan]),"data-day-offset":l})]})})}function Ie(){return e.jsxs("div",{className:t.column,children:[e.jsx(Ne,{}),e.jsx(Ee,{})]})}function Ne(){const{clock:a,mode:n,groupExpectedEnd:s,actualGroupStart:l,currentDay:c,playback:u}=X(),{currentGroupId:x}=Y(),r=G(x),i=g(u),j=(()=>{if(!i||!r||r.timeStart===null)return null;const _=a+c*v;return n===I.Absolute?r.timeStart+r.duration-_:l+r.duration-_})(),p=S(j,3,E.CountDown),T=s!==null?s-a:null,y=S(T,3,E.CountDown);return e.jsxs("div",{className:t.metadataRow,children:[e.jsx("span",{className:r!=null&&r.title?t.labelTitle:t.label,children:`${(r==null?void 0:r.title)||"Group"} `}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to planned group end",render:e.jsx(A,{className:t.icon})}),e.jsx("span",{className:d([t.time,(!r||!i)&&t.muted,p==="due"&&t.dueTime]),children:p})]}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to expected group end",render:e.jsx(F,{className:t.icon})}),e.jsx("span",{className:d([t.time,!s&&t.muted,y==="due"&&t.dueTime]),children:y})]})]})}function Ee(){const{clock:a,mode:n,actualStart:s,plannedStart:l,playback:c,currentDay:u}=Z(),{id:x,expectedStart:r}=ee(),i=G(x),j=g(c),p=(()=>{if(!j||!i)return null;const D=i.timeStart+i.dayOffset*v,O=a+u*v;return n===I.Absolute?D-O:D+s-l-O})(),T=S(p,3,E.CountDown),y=r!==null?r-a:null,_=S(y,3,E.CountDown),k=(i==null?void 0:i.title)??null;return e.jsxs("div",{className:t.metadataRow,children:[e.jsx("span",{className:k?t.labelTitle:t.label,children:`${k||"Flag"} `}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to next flag planned start",render:e.jsx(H,{className:t.icon})}),e.jsx("span",{"data-testid":"flag-plannedStart",className:d([t.time,(!i||!j)&&t.muted,T==="due"&&t.dueTime]),children:T})]}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to next flag expected start",render:e.jsx(z,{className:t.icon})}),e.jsx("span",{"data-testid":"flag-expectedStart",className:d([t.time,y===null&&t.muted,_==="due"&&t.dueTime]),children:_})]})]})}function Ge(){const{numEvents:a,selectedEventIndex:n}=q(),s=n!==null?n+1:w,l=a?`${s} of ${a||w}`:w;return e.jsx($,{label:"Progress",value:l,state:n===null?"muted":"active"})}function Re(){const{offset:a,playback:n}=K(),s=g(n),l=ae(s?a:null),c=te(s?a:null);return e.jsx(oe,{state:l,value:c,testId:"offset"})}function $e({shouldFormat:a,className:n}){const{clock:s}=B(),l=a?h(s):b(s);return e.jsx(de,{label:"Time now",className:n,render:c=>e.jsx(N,{className:c,time:l})})}function Me({className:a}){const n=J(),s=n.phase===L.Pending,l=s?"Count to start":"Running timer",c=b(s?n.secondaryTimer:n.current,{fallback:m}),u=s?"waiting":n.current===null?"muted":"active";return e.jsx($,{label:l,value:c,state:u,className:a})}export{$e as C,Ie as M,Re as O,Ge as P,Ce as S,Me as T,se as f};
2
- //# sourceMappingURL=TimeElements-XpRwBsaa.js.map
1
+ import{j as e,h as C,b2 as P,b3 as M,b4 as U,b5 as A,b6 as F,b7 as H,b8 as z}from"./vendor-Cdwxo8bP.js";import{s as v,m as b,bk as m,A as V,e as d,bl as W,f as h,bm as q,x as w,bn as K,v as B,K as J,y as L,bo as Q,bp as X,bq as Y,br as I,T as E,bs as Z,bt as ee}from"./index-CoGiopcb.js";import{T as f}from"./Tooltip-BQBvaIZx.js";import{v as G}from"./useRundown-CHsh5rnl.js";import{a as te,g as ae}from"./offset-BS90Rks2.js";import{S as N}from"./SuperscriptPeriod-DaZq1rr6.js";import{i as g}from"./playbackstate-CWexoP3a.js";(function(){try{var a=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new a.Error().stack;n&&(a._sentryDebugIds=a._sentryDebugIds||{},a._sentryDebugIds[n]="24de3dfb-0734-45af-a0d4-cbe032ce8b35",a._sentryDebugIdIdentifier="sentry-dbid-24de3dfb-0734-45af-a0d4-cbe032ce8b35")}catch{}})();function S(a,n=3,s,l="due"){return a!==null&&a<=0?l:se(a,n,s)}function se(a,n=3,s){return b(a,{fallback:n===3?m:V,direction:s})}function R(a){return a!==null&&a>v?[a%v,Math.floor(a/v)]:[a,0]}const ne="_label_1ahsu_18",le="_clock_1ahsu_23",re="_column_1ahsu_35",ce="_over_1ahsu_47",ie="_under_1ahsu_48",o={label:ne,clock:le,column:re,over:ce,under:ie};function $({label:a,value:n,state:s="active",className:l,testId:c}){return e.jsxs("div",{className:d([o.column,l]),"data-state":s,children:[e.jsx("span",{className:o.label,children:a}),e.jsx("span",{className:o.clock,"data-testid":c,children:n})]})}function de({label:a,state:n="active",className:s,render:l}){return e.jsxs("div",{className:d([o.column,s]),"data-state":n,children:[e.jsx("span",{className:o.label,children:a}),l(o.clock)]})}function oe({state:a,value:n,testId:s}){return e.jsxs("div",{className:o.column,"data-state":a,children:[e.jsxs("div",{className:o.label,children:[e.jsx("span",{className:o.over,children:"Over"}),e.jsx("span",{children:"/"}),e.jsx("span",{className:o.under,children:"Under"})]}),e.jsx("span",{className:o.clock,"data-testid":s,children:n})]})}const ue="_column_1uyfj_17",me="_row_1uyfj_26",fe="_metadataRow_1uyfj_33",xe="_labelledElement_1uyfj_40",pe="_icon_1uyfj_46",be="_label_1uyfj_40",je="_time_1uyfj_58",Te="_daySpan_1uyfj_65",ve="_muted_1uyfj_80",ye="_labelTitle_1uyfj_84",_e="_dueTime_1uyfj_93",t={column:ue,row:me,metadataRow:fe,labelledElement:xe,icon:pe,label:be,time:je,daySpan:Te,muted:ve,labelTitle:ye,dueTime:_e};function Ce({shouldFormat:a}){const{plannedEnd:n,plannedStart:s,actualStart:l}=W(),c={format12:"hh:mm:ss a",format24:"HH:mm:ss"},u=s===null?m:a?h(s,c):b(s,{fallback:m}),x=l===null?m:a?h(l,c):b(l,{fallback:m}),[r,i]=C.useMemo(()=>R(n),[n]),j=r===null?m:a?h(r,c):b(r,{fallback:m}),p=i>0,T=p?`Planned end time (rundown spans over ${i+1} days)`:"Planned end time";return e.jsxs("div",{className:t.column,children:[e.jsxs("div",{className:t.row,children:[e.jsx("span",{className:t.label,children:"Start"}),e.jsx(f,{text:"Planned start time",render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(P,{className:t.icon}),e.jsx(N,{className:d([t.time,s===null&&t.muted]),time:u})]})}),e.jsx(f,{text:"Actual start time",render:e.jsxs("div",{className:t.labelledElement,"data-testid":"actual-start-time",children:[e.jsx(M,{className:t.icon}),e.jsx(N,{className:d([t.time,l===null&&t.muted]),time:x})]})})]}),e.jsxs("div",{className:t.row,children:[e.jsx("span",{className:t.label,children:"End"}),e.jsx(f,{text:T,render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(P,{className:t.icon}),e.jsx(N,{className:d([t.time,n===null&&t.muted]),time:j}),p&&e.jsx("span",{className:d([t.time,t.daySpan]),"data-day-offset":i})]})}),e.jsx(he,{shouldFormat:a})]})]})}function he({shouldFormat:a}){const{expectedEnd:n}=Q(),[s,l]=C.useMemo(()=>R(n),[n]),c=s===null?m:a?h(s,{format12:"hh:mm:ss a",format24:"HH:mm:ss"}):b(s,{fallback:m}),u=s!==null&&l>0,x=u?`Expected end time (rundown spans over ${l+1} days)`:"Expected end time";return e.jsx(f,{text:x,render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(U,{className:t.icon}),e.jsx(N,{className:d([t.time,s===null&&t.muted]),time:c}),u&&e.jsx("span",{className:d([t.time,t.daySpan]),"data-day-offset":l})]})})}function Ie(){return e.jsxs("div",{className:t.column,children:[e.jsx(Ne,{}),e.jsx(Ee,{})]})}function Ne(){const{clock:a,mode:n,groupExpectedEnd:s,actualGroupStart:l,currentDay:c,playback:u}=X(),{currentGroupId:x}=Y(),r=G(x),i=g(u),j=(()=>{if(!i||!r||r.timeStart===null)return null;const _=a+c*v;return n===I.Absolute?r.timeStart+r.duration-_:l+r.duration-_})(),p=S(j,3,E.CountDown),T=s!==null?s-a:null,y=S(T,3,E.CountDown);return e.jsxs("div",{className:t.metadataRow,children:[e.jsx("span",{className:r!=null&&r.title?t.labelTitle:t.label,children:`${(r==null?void 0:r.title)||"Group"} `}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to planned group end",render:e.jsx(A,{className:t.icon})}),e.jsx("span",{className:d([t.time,(!r||!i)&&t.muted,p==="due"&&t.dueTime]),children:p})]}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to expected group end",render:e.jsx(F,{className:t.icon})}),e.jsx("span",{className:d([t.time,!s&&t.muted,y==="due"&&t.dueTime]),children:y})]})]})}function Ee(){const{clock:a,mode:n,actualStart:s,plannedStart:l,playback:c,currentDay:u}=Z(),{id:x,expectedStart:r}=ee(),i=G(x),j=g(c),p=(()=>{if(!j||!i)return null;const D=i.timeStart+i.dayOffset*v,O=a+u*v;return n===I.Absolute?D-O:D+s-l-O})(),T=S(p,3,E.CountDown),y=r!==null?r-a:null,_=S(y,3,E.CountDown),k=(i==null?void 0:i.title)??null;return e.jsxs("div",{className:t.metadataRow,children:[e.jsx("span",{className:k?t.labelTitle:t.label,children:`${k||"Flag"} `}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to next flag planned start",render:e.jsx(H,{className:t.icon})}),e.jsx("span",{"data-testid":"flag-plannedStart",className:d([t.time,(!i||!j)&&t.muted,T==="due"&&t.dueTime]),children:T})]}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to next flag expected start",render:e.jsx(z,{className:t.icon})}),e.jsx("span",{"data-testid":"flag-expectedStart",className:d([t.time,y===null&&t.muted,_==="due"&&t.dueTime]),children:_})]})]})}function Ge(){const{numEvents:a,selectedEventIndex:n}=q(),s=n!==null?n+1:w,l=a?`${s} of ${a||w}`:w;return e.jsx($,{label:"Progress",value:l,state:n===null?"muted":"active"})}function Re(){const{offset:a,playback:n}=K(),s=g(n),l=ae(s?a:null),c=te(s?a:null);return e.jsx(oe,{state:l,value:c,testId:"offset"})}function $e({shouldFormat:a,className:n}){const{clock:s}=B(),l=a?h(s):b(s);return e.jsx(de,{label:"Time now",className:n,render:c=>e.jsx(N,{className:c,time:l})})}function Me({className:a}){const n=J(),s=n.phase===L.Pending,l=s?"Count to start":"Running timer",c=b(s?n.secondaryTimer:n.current,{fallback:m}),u=s?"waiting":n.current===null?"muted":"active";return e.jsx($,{label:l,value:c,state:u,className:a})}export{$e as C,Ie as M,Re as O,Ge as P,Ce as S,Me as T,se as f};
2
+ //# sourceMappingURL=TimeElements-dIvFHgcd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimeElements-XpRwBsaa.js","sources":["../../src/features/overview/overview.utils.ts","../../src/features/overview/composite/TimeLayout.tsx","../../src/features/overview/composite/TimeElements.tsx"],"sourcesContent":["import { MaybeNumber, TimerType } from 'ontime-types';\nimport { dayInMs, millisToString } from 'ontime-utils';\n\nimport { timerPlaceholder, timerPlaceholderMin } from '../../common/utils/styleUtils';\n\n/**\n * Composition to stop negative timers from being formatted\n * They should show a due string instead\n *\n * This is used for cases when a negative timer is unwanted\n * eg: count down to a milestone\n */\nexport function formatDueTime(\n time: MaybeNumber,\n segments: number = 3,\n direction?: TimerType.CountDown | TimerType.CountUp,\n dueString = 'due',\n): string {\n if (time !== null && time <= 0) return dueString;\n return formattedTime(time, segments, direction);\n}\n\n/**\n * Encapsulates the logic for formatting time in overview\n */\nexport function formattedTime(\n time: MaybeNumber,\n segments: number = 3,\n direction?: TimerType.CountDown | TimerType.CountUp,\n): string {\n return millisToString(time, { fallback: segments === 3 ? timerPlaceholder : timerPlaceholderMin, direction });\n}\n\n/**\n * Calculates how long a time is and how many days it spans\n */\nexport function calculateEndAndDaySpan(end: MaybeNumber): [MaybeNumber, number] {\n if (end !== null && end > dayInMs) {\n return [end % dayInMs, Math.floor(end / dayInMs)];\n }\n\n return [end, 0];\n}\n","import { ReactNode } from 'react';\n\nimport { cx } from '../../../common/utils/styleUtils';\n\nimport style from './TimeLayout.module.scss';\n\ninterface TimeLayoutProps {\n label: string;\n value: string;\n state?: 'muted' | 'waiting' | 'active';\n daySpan?: number;\n className?: string;\n testId?: string;\n}\n\nexport function TimeColumn({ label, value, state = 'active', className, testId }: TimeLayoutProps) {\n return (\n <div className={cx([style.column, className])} data-state={state}>\n <span className={style.label}>{label}</span>\n <span className={style.clock} data-testid={testId}>\n {value}\n </span>\n </div>\n );\n}\n\ninterface WrappedInTimeColumnProps {\n label: string;\n state?: 'muted' | 'waiting' | 'active';\n className?: string;\n render: (className: string) => ReactNode;\n}\n\nexport function WrappedInTimeColumn({ label, state = 'active', className, render }: WrappedInTimeColumnProps) {\n return (\n <div className={cx([style.column, className])} data-state={state}>\n <span className={style.label}>{label}</span>\n {render(style.clock)}\n </div>\n );\n}\ninterface OverUnderProps {\n state: 'over' | 'under' | 'muted' | null;\n value: string;\n testId: string;\n}\n\nexport function OverUnder({ state, value, testId }: OverUnderProps) {\n return (\n <div className={style.column} data-state={state}>\n <div className={style.label}>\n <span className={style.over}>Over</span>\n <span>/</span>\n <span className={style.under}>Under</span>\n </div>\n <span className={style.clock} data-testid={testId}>\n {value}\n </span>\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport {\n TbCalendarClock,\n TbCalendarPin,\n TbCalendarStar,\n TbFlagPin,\n TbFlagStar,\n TbFolderPin,\n TbFolderStar,\n} from 'react-icons/tb';\nimport { OffsetMode, OntimeEvent, OntimeGroup, TimerPhase, TimerType } from 'ontime-types';\nimport { dayInMs, isPlaybackActive, millisToString } from 'ontime-utils';\n\nimport Tooltip from '../../../common/components/tooltip/Tooltip';\nimport {\n useClock,\n useCurrentGroupId,\n useFlagTimerOverView,\n useGroupTimerOverView,\n useNextFlag,\n useOffsetOverview,\n useProgressOverview,\n useRundownExpectedEnd,\n useStartTimesOverview,\n useTimer,\n} from '../../../common/hooks/useSocket';\nimport { useEntry } from '../../../common/hooks-query/useRundown';\nimport { getOffsetState, getOffsetText } from '../../../common/utils/offset';\nimport { cx, enDash, timerPlaceholder } from '../../../common/utils/styleUtils';\nimport { formatTime } from '../../../common/utils/time';\nimport SuperscriptPeriod from '../../viewers/common/superscript-time/SuperscriptPeriod';\nimport { calculateEndAndDaySpan, formatDueTime } from '../overview.utils';\n\nimport { OverUnder, TimeColumn, WrappedInTimeColumn } from './TimeLayout';\n\nimport style from './TimeElements.module.scss';\n\ninterface OverviewTimeElementsProps {\n shouldFormat?: boolean;\n}\n\nexport function StartTimes({ shouldFormat }: OverviewTimeElementsProps) {\n const { plannedEnd, plannedStart, actualStart } = useStartTimesOverview();\n\n const formatOptions = { format12: 'hh:mm:ss a', format24: 'HH:mm:ss' };\n\n const plannedStartText = (() => {\n if (plannedStart === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(plannedStart, formatOptions);\n return millisToString(plannedStart, { fallback: timerPlaceholder });\n })();\n\n const actualStartText = (() => {\n if (actualStart === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(actualStart, formatOptions);\n return millisToString(actualStart, { fallback: timerPlaceholder });\n })();\n\n const [maybePlannedEnd, maybePlannedDaySpan] = useMemo(() => calculateEndAndDaySpan(plannedEnd), [plannedEnd]);\n\n const plannedEndText = (() => {\n if (maybePlannedEnd === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(maybePlannedEnd, formatOptions);\n return millisToString(maybePlannedEnd, { fallback: timerPlaceholder });\n })();\n\n const multipleDays = maybePlannedDaySpan > 0;\n const plannedEndTooltip = multipleDays\n ? `Planned end time (rundown spans over ${maybePlannedDaySpan + 1} days)`\n : 'Planned end time';\n\n return (\n <div className={style.column}>\n <div className={style.row}>\n <span className={style.label}>Start</span>\n <Tooltip\n text='Planned start time'\n render={\n <div className={style.labelledElement}>\n <TbCalendarPin className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, plannedStart === null && style.muted])}\n time={plannedStartText}\n />\n </div>\n }\n />\n <Tooltip\n text='Actual start time'\n render={\n <div className={style.labelledElement} data-testid='actual-start-time'>\n <TbCalendarClock className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, actualStart === null && style.muted])}\n time={actualStartText}\n />\n </div>\n }\n />\n </div>\n\n <div className={style.row}>\n <span className={style.label}>End</span>\n <Tooltip\n text={plannedEndTooltip}\n render={\n <div className={style.labelledElement}>\n <TbCalendarPin className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, plannedEnd === null && style.muted])}\n time={plannedEndText}\n />\n {multipleDays && (\n <span className={cx([style.time, style.daySpan])} data-day-offset={maybePlannedDaySpan} />\n )}\n </div>\n }\n />\n <RundownExpectedEnd shouldFormat={shouldFormat} />\n </div>\n </div>\n );\n}\n\n/**\n * Shows the expected end for the rundown\n * Extracted to improve performance as this is a ticking value\n */\nfunction RundownExpectedEnd({ shouldFormat }: OverviewTimeElementsProps) {\n const { expectedEnd } = useRundownExpectedEnd();\n\n const [maybeExpectedEnd, maybeExpectedDaySpan] = useMemo(() => calculateEndAndDaySpan(expectedEnd), [expectedEnd]);\n const maybeExpectedEndText = (() => {\n if (maybeExpectedEnd === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(maybeExpectedEnd, { format12: 'hh:mm:ss a', format24: 'HH:mm:ss' });\n return millisToString(maybeExpectedEnd, { fallback: timerPlaceholder });\n })();\n\n const multipleDays = maybeExpectedEnd !== null && maybeExpectedDaySpan > 0;\n const tooltip = multipleDays\n ? `Expected end time (rundown spans over ${maybeExpectedDaySpan + 1} days)`\n : 'Expected end time';\n\n return (\n <Tooltip\n text={tooltip}\n render={\n <div className={style.labelledElement}>\n <TbCalendarStar className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, maybeExpectedEnd === null && style.muted])}\n time={maybeExpectedEndText}\n />\n {multipleDays && <span className={cx([style.time, style.daySpan])} data-day-offset={maybeExpectedDaySpan} />}\n </div>\n }\n />\n );\n}\n\nexport function MetadataTimes() {\n return (\n <div className={style.column}>\n <GroupTimes />\n <FlagTimes />\n </div>\n );\n}\n\nfunction GroupTimes() {\n const { clock, mode, groupExpectedEnd, actualGroupStart, currentDay, playback } = useGroupTimerOverView();\n const { currentGroupId } = useCurrentGroupId();\n const group = useEntry(currentGroupId) as OntimeGroup | null;\n\n const active = isPlaybackActive(playback);\n\n // the group end time dose not encode any day offsets so it is calculated with group start time and duration\n const plannedGroupEnd = (() => {\n if (!active) return null;\n if (!group || group.timeStart === null) return null;\n const normalizedClock = clock + currentDay * dayInMs;\n\n return mode === OffsetMode.Absolute\n ? group.timeStart + group.duration - normalizedClock\n : actualGroupStart + group.duration - normalizedClock;\n })();\n\n const plannedTimeUntilGroupEnd = formatDueTime(plannedGroupEnd, 3, TimerType.CountDown);\n\n const expectedGroupEnd = groupExpectedEnd !== null ? groupExpectedEnd - clock : null;\n const expectedTimeUntilGroupEnd = formatDueTime(expectedGroupEnd, 3, TimerType.CountDown);\n\n return (\n <div className={style.metadataRow}>\n <span className={group?.title ? style.labelTitle : style.label}>{`${group?.title || 'Group'} `}</span>\n <div className={style.labelledElement}>\n <Tooltip text='Time to planned group end' render={<TbFolderPin className={style.icon} />} />\n <span\n className={cx([\n style.time,\n (!group || !active) && style.muted,\n plannedTimeUntilGroupEnd === 'due' && style.dueTime,\n ])}\n >\n {plannedTimeUntilGroupEnd}\n </span>\n </div>\n <div className={style.labelledElement}>\n <Tooltip text='Time to expected group end' render={<TbFolderStar className={style.icon} />} />\n <span\n className={cx([\n style.time,\n !groupExpectedEnd && style.muted,\n expectedTimeUntilGroupEnd === 'due' && style.dueTime,\n ])}\n >\n {expectedTimeUntilGroupEnd}\n </span>\n </div>\n </div>\n );\n}\n\nfunction FlagTimes() {\n const { clock, mode, actualStart, plannedStart, playback, currentDay } = useFlagTimerOverView();\n const { id, expectedStart } = useNextFlag();\n const entry = useEntry(id) as OntimeEvent | null;\n\n const active = isPlaybackActive(playback);\n\n const plannedFlagStart = (() => {\n if (!active) return null;\n if (!entry) return null;\n const normalizedTimeStart = entry.timeStart + entry.dayOffset * dayInMs;\n const normalizedClock = clock + currentDay * dayInMs;\n return mode === OffsetMode.Absolute\n ? normalizedTimeStart - normalizedClock\n : normalizedTimeStart + actualStart - plannedStart - normalizedClock;\n })();\n\n const plannedTimeUntilDisplay = formatDueTime(plannedFlagStart, 3, TimerType.CountDown);\n\n const expectedTimeUntil = expectedStart !== null ? expectedStart - clock : null;\n const expectedTimeUntilDisplay = formatDueTime(expectedTimeUntil, 3, TimerType.CountDown);\n\n const title = entry?.title ?? null;\n\n return (\n <div className={style.metadataRow}>\n <span className={title ? style.labelTitle : style.label}>{`${title || 'Flag'} `}</span>\n <div className={style.labelledElement}>\n <Tooltip text='Time to next flag planned start' render={<TbFlagPin className={style.icon} />} />\n <span\n data-testid='flag-plannedStart'\n className={cx([\n style.time,\n (!entry || !active) && style.muted,\n plannedTimeUntilDisplay === 'due' && style.dueTime,\n ])}\n >\n {plannedTimeUntilDisplay}\n </span>\n </div>\n <div className={style.labelledElement}>\n <Tooltip text='Time to next flag expected start' render={<TbFlagStar className={style.icon} />} />\n <span\n data-testid='flag-expectedStart'\n className={cx([\n style.time,\n expectedTimeUntil === null && style.muted,\n expectedTimeUntilDisplay === 'due' && style.dueTime,\n ])}\n >\n {expectedTimeUntilDisplay}\n </span>\n </div>\n </div>\n );\n}\n\nexport function ProgressOverview() {\n const { numEvents, selectedEventIndex } = useProgressOverview();\n\n const current = selectedEventIndex !== null ? selectedEventIndex + 1 : enDash;\n const progressText = numEvents ? `${current} of ${numEvents || enDash}` : enDash;\n\n return <TimeColumn label='Progress' value={progressText} state={selectedEventIndex === null ? 'muted' : 'active'} />;\n}\n\nexport function OffsetOverview() {\n const { offset, playback } = useOffsetOverview();\n\n const isPlaying = isPlaybackActive(playback);\n const offsetState = getOffsetState(isPlaying ? offset : null);\n const offsetText = getOffsetText(isPlaying ? offset : null);\n\n return <OverUnder state={offsetState} value={offsetText} testId='offset' />;\n}\n\nexport function ClockOverview({ shouldFormat, className }: OverviewTimeElementsProps & { className?: string }) {\n const { clock } = useClock();\n const formattedClock = shouldFormat ? formatTime(clock) : millisToString(clock);\n\n return (\n <WrappedInTimeColumn\n label='Time now'\n className={className}\n render={(clockClasses) => <SuperscriptPeriod className={clockClasses} time={formattedClock} />}\n />\n );\n}\n\nexport function TimerOverview({ className }: { className?: string }) {\n const timer = useTimer();\n\n const isWaiting = timer.phase === TimerPhase.Pending;\n const title = isWaiting ? 'Count to start' : 'Running timer';\n const display = millisToString(isWaiting ? timer.secondaryTimer : timer.current, { fallback: timerPlaceholder });\n const timerState = (() => {\n if (isWaiting) return 'waiting';\n if (timer.current === null) return 'muted';\n return 'active';\n })();\n\n return <TimeColumn label={title} value={display} state={timerState} className={className} />;\n}\n"],"names":["formatDueTime","time","segments","direction","dueString","formattedTime","millisToString","timerPlaceholder","timerPlaceholderMin","calculateEndAndDaySpan","end","dayInMs","TimeColumn","label","value","state","className","testId","jsxs","cx","style","jsx","WrappedInTimeColumn","render","OverUnder","StartTimes","shouldFormat","plannedEnd","plannedStart","actualStart","useStartTimesOverview","formatOptions","plannedStartText","formatTime","actualStartText","maybePlannedEnd","maybePlannedDaySpan","useMemo","plannedEndText","multipleDays","plannedEndTooltip","Tooltip","TbCalendarPin","SuperscriptPeriod","TbCalendarClock","RundownExpectedEnd","expectedEnd","useRundownExpectedEnd","maybeExpectedEnd","maybeExpectedDaySpan","maybeExpectedEndText","tooltip","TbCalendarStar","MetadataTimes","GroupTimes","FlagTimes","clock","mode","groupExpectedEnd","actualGroupStart","currentDay","playback","useGroupTimerOverView","currentGroupId","useCurrentGroupId","group","useEntry","active","isPlaybackActive","plannedGroupEnd","normalizedClock","OffsetMode","plannedTimeUntilGroupEnd","TimerType","expectedGroupEnd","expectedTimeUntilGroupEnd","TbFolderPin","TbFolderStar","useFlagTimerOverView","id","expectedStart","useNextFlag","entry","plannedFlagStart","normalizedTimeStart","plannedTimeUntilDisplay","expectedTimeUntil","expectedTimeUntilDisplay","title","TbFlagPin","TbFlagStar","ProgressOverview","numEvents","selectedEventIndex","useProgressOverview","current","enDash","progressText","OffsetOverview","offset","useOffsetOverview","isPlaying","offsetState","getOffsetState","offsetText","getOffsetText","ClockOverview","useClock","formattedClock","clockClasses","TimerOverview","timer","useTimer","isWaiting","TimerPhase","display","timerState"],"mappings":"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"}
1
+ {"version":3,"file":"TimeElements-dIvFHgcd.js","sources":["../../src/features/overview/overview.utils.ts","../../src/features/overview/composite/TimeLayout.tsx","../../src/features/overview/composite/TimeElements.tsx"],"sourcesContent":["import { MaybeNumber, TimerType } from 'ontime-types';\nimport { dayInMs, millisToString } from 'ontime-utils';\n\nimport { timerPlaceholder, timerPlaceholderMin } from '../../common/utils/styleUtils';\n\n/**\n * Composition to stop negative timers from being formatted\n * They should show a due string instead\n *\n * This is used for cases when a negative timer is unwanted\n * eg: count down to a milestone\n */\nexport function formatDueTime(\n time: MaybeNumber,\n segments: number = 3,\n direction?: TimerType.CountDown | TimerType.CountUp,\n dueString = 'due',\n): string {\n if (time !== null && time <= 0) return dueString;\n return formattedTime(time, segments, direction);\n}\n\n/**\n * Encapsulates the logic for formatting time in overview\n */\nexport function formattedTime(\n time: MaybeNumber,\n segments: number = 3,\n direction?: TimerType.CountDown | TimerType.CountUp,\n): string {\n return millisToString(time, { fallback: segments === 3 ? timerPlaceholder : timerPlaceholderMin, direction });\n}\n\n/**\n * Calculates how long a time is and how many days it spans\n */\nexport function calculateEndAndDaySpan(end: MaybeNumber): [MaybeNumber, number] {\n if (end !== null && end > dayInMs) {\n return [end % dayInMs, Math.floor(end / dayInMs)];\n }\n\n return [end, 0];\n}\n","import { ReactNode } from 'react';\n\nimport { cx } from '../../../common/utils/styleUtils';\n\nimport style from './TimeLayout.module.scss';\n\ninterface TimeLayoutProps {\n label: string;\n value: string;\n state?: 'muted' | 'waiting' | 'active';\n daySpan?: number;\n className?: string;\n testId?: string;\n}\n\nexport function TimeColumn({ label, value, state = 'active', className, testId }: TimeLayoutProps) {\n return (\n <div className={cx([style.column, className])} data-state={state}>\n <span className={style.label}>{label}</span>\n <span className={style.clock} data-testid={testId}>\n {value}\n </span>\n </div>\n );\n}\n\ninterface WrappedInTimeColumnProps {\n label: string;\n state?: 'muted' | 'waiting' | 'active';\n className?: string;\n render: (className: string) => ReactNode;\n}\n\nexport function WrappedInTimeColumn({ label, state = 'active', className, render }: WrappedInTimeColumnProps) {\n return (\n <div className={cx([style.column, className])} data-state={state}>\n <span className={style.label}>{label}</span>\n {render(style.clock)}\n </div>\n );\n}\ninterface OverUnderProps {\n state: 'over' | 'under' | 'muted' | null;\n value: string;\n testId: string;\n}\n\nexport function OverUnder({ state, value, testId }: OverUnderProps) {\n return (\n <div className={style.column} data-state={state}>\n <div className={style.label}>\n <span className={style.over}>Over</span>\n <span>/</span>\n <span className={style.under}>Under</span>\n </div>\n <span className={style.clock} data-testid={testId}>\n {value}\n </span>\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport {\n TbCalendarClock,\n TbCalendarPin,\n TbCalendarStar,\n TbFlagPin,\n TbFlagStar,\n TbFolderPin,\n TbFolderStar,\n} from 'react-icons/tb';\nimport { OffsetMode, OntimeEvent, OntimeGroup, TimerPhase, TimerType } from 'ontime-types';\nimport { dayInMs, isPlaybackActive, millisToString } from 'ontime-utils';\n\nimport Tooltip from '../../../common/components/tooltip/Tooltip';\nimport {\n useClock,\n useCurrentGroupId,\n useFlagTimerOverView,\n useGroupTimerOverView,\n useNextFlag,\n useOffsetOverview,\n useProgressOverview,\n useRundownExpectedEnd,\n useStartTimesOverview,\n useTimer,\n} from '../../../common/hooks/useSocket';\nimport { useEntry } from '../../../common/hooks-query/useRundown';\nimport { getOffsetState, getOffsetText } from '../../../common/utils/offset';\nimport { cx, enDash, timerPlaceholder } from '../../../common/utils/styleUtils';\nimport { formatTime } from '../../../common/utils/time';\nimport SuperscriptPeriod from '../../viewers/common/superscript-time/SuperscriptPeriod';\nimport { calculateEndAndDaySpan, formatDueTime } from '../overview.utils';\n\nimport { OverUnder, TimeColumn, WrappedInTimeColumn } from './TimeLayout';\n\nimport style from './TimeElements.module.scss';\n\ninterface OverviewTimeElementsProps {\n shouldFormat?: boolean;\n}\n\nexport function StartTimes({ shouldFormat }: OverviewTimeElementsProps) {\n const { plannedEnd, plannedStart, actualStart } = useStartTimesOverview();\n\n const formatOptions = { format12: 'hh:mm:ss a', format24: 'HH:mm:ss' };\n\n const plannedStartText = (() => {\n if (plannedStart === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(plannedStart, formatOptions);\n return millisToString(plannedStart, { fallback: timerPlaceholder });\n })();\n\n const actualStartText = (() => {\n if (actualStart === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(actualStart, formatOptions);\n return millisToString(actualStart, { fallback: timerPlaceholder });\n })();\n\n const [maybePlannedEnd, maybePlannedDaySpan] = useMemo(() => calculateEndAndDaySpan(plannedEnd), [plannedEnd]);\n\n const plannedEndText = (() => {\n if (maybePlannedEnd === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(maybePlannedEnd, formatOptions);\n return millisToString(maybePlannedEnd, { fallback: timerPlaceholder });\n })();\n\n const multipleDays = maybePlannedDaySpan > 0;\n const plannedEndTooltip = multipleDays\n ? `Planned end time (rundown spans over ${maybePlannedDaySpan + 1} days)`\n : 'Planned end time';\n\n return (\n <div className={style.column}>\n <div className={style.row}>\n <span className={style.label}>Start</span>\n <Tooltip\n text='Planned start time'\n render={\n <div className={style.labelledElement}>\n <TbCalendarPin className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, plannedStart === null && style.muted])}\n time={plannedStartText}\n />\n </div>\n }\n />\n <Tooltip\n text='Actual start time'\n render={\n <div className={style.labelledElement} data-testid='actual-start-time'>\n <TbCalendarClock className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, actualStart === null && style.muted])}\n time={actualStartText}\n />\n </div>\n }\n />\n </div>\n\n <div className={style.row}>\n <span className={style.label}>End</span>\n <Tooltip\n text={plannedEndTooltip}\n render={\n <div className={style.labelledElement}>\n <TbCalendarPin className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, plannedEnd === null && style.muted])}\n time={plannedEndText}\n />\n {multipleDays && (\n <span className={cx([style.time, style.daySpan])} data-day-offset={maybePlannedDaySpan} />\n )}\n </div>\n }\n />\n <RundownExpectedEnd shouldFormat={shouldFormat} />\n </div>\n </div>\n );\n}\n\n/**\n * Shows the expected end for the rundown\n * Extracted to improve performance as this is a ticking value\n */\nfunction RundownExpectedEnd({ shouldFormat }: OverviewTimeElementsProps) {\n const { expectedEnd } = useRundownExpectedEnd();\n\n const [maybeExpectedEnd, maybeExpectedDaySpan] = useMemo(() => calculateEndAndDaySpan(expectedEnd), [expectedEnd]);\n const maybeExpectedEndText = (() => {\n if (maybeExpectedEnd === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(maybeExpectedEnd, { format12: 'hh:mm:ss a', format24: 'HH:mm:ss' });\n return millisToString(maybeExpectedEnd, { fallback: timerPlaceholder });\n })();\n\n const multipleDays = maybeExpectedEnd !== null && maybeExpectedDaySpan > 0;\n const tooltip = multipleDays\n ? `Expected end time (rundown spans over ${maybeExpectedDaySpan + 1} days)`\n : 'Expected end time';\n\n return (\n <Tooltip\n text={tooltip}\n render={\n <div className={style.labelledElement}>\n <TbCalendarStar className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, maybeExpectedEnd === null && style.muted])}\n time={maybeExpectedEndText}\n />\n {multipleDays && <span className={cx([style.time, style.daySpan])} data-day-offset={maybeExpectedDaySpan} />}\n </div>\n }\n />\n );\n}\n\nexport function MetadataTimes() {\n return (\n <div className={style.column}>\n <GroupTimes />\n <FlagTimes />\n </div>\n );\n}\n\nfunction GroupTimes() {\n const { clock, mode, groupExpectedEnd, actualGroupStart, currentDay, playback } = useGroupTimerOverView();\n const { currentGroupId } = useCurrentGroupId();\n const group = useEntry(currentGroupId) as OntimeGroup | null;\n\n const active = isPlaybackActive(playback);\n\n // the group end time dose not encode any day offsets so it is calculated with group start time and duration\n const plannedGroupEnd = (() => {\n if (!active) return null;\n if (!group || group.timeStart === null) return null;\n const normalizedClock = clock + currentDay * dayInMs;\n\n return mode === OffsetMode.Absolute\n ? group.timeStart + group.duration - normalizedClock\n : actualGroupStart + group.duration - normalizedClock;\n })();\n\n const plannedTimeUntilGroupEnd = formatDueTime(plannedGroupEnd, 3, TimerType.CountDown);\n\n const expectedGroupEnd = groupExpectedEnd !== null ? groupExpectedEnd - clock : null;\n const expectedTimeUntilGroupEnd = formatDueTime(expectedGroupEnd, 3, TimerType.CountDown);\n\n return (\n <div className={style.metadataRow}>\n <span className={group?.title ? style.labelTitle : style.label}>{`${group?.title || 'Group'} `}</span>\n <div className={style.labelledElement}>\n <Tooltip text='Time to planned group end' render={<TbFolderPin className={style.icon} />} />\n <span\n className={cx([\n style.time,\n (!group || !active) && style.muted,\n plannedTimeUntilGroupEnd === 'due' && style.dueTime,\n ])}\n >\n {plannedTimeUntilGroupEnd}\n </span>\n </div>\n <div className={style.labelledElement}>\n <Tooltip text='Time to expected group end' render={<TbFolderStar className={style.icon} />} />\n <span\n className={cx([\n style.time,\n !groupExpectedEnd && style.muted,\n expectedTimeUntilGroupEnd === 'due' && style.dueTime,\n ])}\n >\n {expectedTimeUntilGroupEnd}\n </span>\n </div>\n </div>\n );\n}\n\nfunction FlagTimes() {\n const { clock, mode, actualStart, plannedStart, playback, currentDay } = useFlagTimerOverView();\n const { id, expectedStart } = useNextFlag();\n const entry = useEntry(id) as OntimeEvent | null;\n\n const active = isPlaybackActive(playback);\n\n const plannedFlagStart = (() => {\n if (!active) return null;\n if (!entry) return null;\n const normalizedTimeStart = entry.timeStart + entry.dayOffset * dayInMs;\n const normalizedClock = clock + currentDay * dayInMs;\n return mode === OffsetMode.Absolute\n ? normalizedTimeStart - normalizedClock\n : normalizedTimeStart + actualStart - plannedStart - normalizedClock;\n })();\n\n const plannedTimeUntilDisplay = formatDueTime(plannedFlagStart, 3, TimerType.CountDown);\n\n const expectedTimeUntil = expectedStart !== null ? expectedStart - clock : null;\n const expectedTimeUntilDisplay = formatDueTime(expectedTimeUntil, 3, TimerType.CountDown);\n\n const title = entry?.title ?? null;\n\n return (\n <div className={style.metadataRow}>\n <span className={title ? style.labelTitle : style.label}>{`${title || 'Flag'} `}</span>\n <div className={style.labelledElement}>\n <Tooltip text='Time to next flag planned start' render={<TbFlagPin className={style.icon} />} />\n <span\n data-testid='flag-plannedStart'\n className={cx([\n style.time,\n (!entry || !active) && style.muted,\n plannedTimeUntilDisplay === 'due' && style.dueTime,\n ])}\n >\n {plannedTimeUntilDisplay}\n </span>\n </div>\n <div className={style.labelledElement}>\n <Tooltip text='Time to next flag expected start' render={<TbFlagStar className={style.icon} />} />\n <span\n data-testid='flag-expectedStart'\n className={cx([\n style.time,\n expectedTimeUntil === null && style.muted,\n expectedTimeUntilDisplay === 'due' && style.dueTime,\n ])}\n >\n {expectedTimeUntilDisplay}\n </span>\n </div>\n </div>\n );\n}\n\nexport function ProgressOverview() {\n const { numEvents, selectedEventIndex } = useProgressOverview();\n\n const current = selectedEventIndex !== null ? selectedEventIndex + 1 : enDash;\n const progressText = numEvents ? `${current} of ${numEvents || enDash}` : enDash;\n\n return <TimeColumn label='Progress' value={progressText} state={selectedEventIndex === null ? 'muted' : 'active'} />;\n}\n\nexport function OffsetOverview() {\n const { offset, playback } = useOffsetOverview();\n\n const isPlaying = isPlaybackActive(playback);\n const offsetState = getOffsetState(isPlaying ? offset : null);\n const offsetText = getOffsetText(isPlaying ? offset : null);\n\n return <OverUnder state={offsetState} value={offsetText} testId='offset' />;\n}\n\nexport function ClockOverview({ shouldFormat, className }: OverviewTimeElementsProps & { className?: string }) {\n const { clock } = useClock();\n const formattedClock = shouldFormat ? formatTime(clock) : millisToString(clock);\n\n return (\n <WrappedInTimeColumn\n label='Time now'\n className={className}\n render={(clockClasses) => <SuperscriptPeriod className={clockClasses} time={formattedClock} />}\n />\n );\n}\n\nexport function TimerOverview({ className }: { className?: string }) {\n const timer = useTimer();\n\n const isWaiting = timer.phase === TimerPhase.Pending;\n const title = isWaiting ? 'Count to start' : 'Running timer';\n const display = millisToString(isWaiting ? timer.secondaryTimer : timer.current, { fallback: timerPlaceholder });\n const timerState = (() => {\n if (isWaiting) return 'waiting';\n if (timer.current === null) return 'muted';\n return 'active';\n })();\n\n return <TimeColumn label={title} value={display} state={timerState} className={className} />;\n}\n"],"names":["formatDueTime","time","segments","direction","dueString","formattedTime","millisToString","fallback","timerPlaceholder","timerPlaceholderMin","calculateEndAndDaySpan","end","dayInMs","Math","floor","TimeColumn","label","value","state","className","testId","jsxs","cx","style","column","jsx","clock","WrappedInTimeColumn","render","OverUnder","over","under","StartTimes","shouldFormat","plannedEnd","plannedStart","actualStart","useStartTimesOverview","formatOptions","format12","format24","plannedStartText","formatTime","actualStartText","maybePlannedEnd","maybePlannedDaySpan","useMemo","plannedEndText","multipleDays","plannedEndTooltip","row","Tooltip","labelledElement","TbCalendarPin","icon","SuperscriptPeriod","muted","TbCalendarClock","daySpan","RundownExpectedEnd","expectedEnd","useRundownExpectedEnd","maybeExpectedEnd","maybeExpectedDaySpan","maybeExpectedEndText","tooltip","TbCalendarStar","MetadataTimes","GroupTimes","FlagTimes","mode","groupExpectedEnd","actualGroupStart","currentDay","playback","useGroupTimerOverView","currentGroupId","useCurrentGroupId","group","useEntry","active","isPlaybackActive","plannedGroupEnd","timeStart","normalizedClock","OffsetMode","Absolute","duration","plannedTimeUntilGroupEnd","TimerType","CountDown","expectedGroupEnd","expectedTimeUntilGroupEnd","metadataRow","title","labelTitle","TbFolderPin","dueTime","TbFolderStar","useFlagTimerOverView","id","expectedStart","useNextFlag","entry","plannedFlagStart","normalizedTimeStart","dayOffset","plannedTimeUntilDisplay","expectedTimeUntil","expectedTimeUntilDisplay","TbFlagPin","TbFlagStar","ProgressOverview","numEvents","selectedEventIndex","useProgressOverview","current","enDash","progressText","OffsetOverview","offset","useOffsetOverview","isPlaying","offsetState","getOffsetState","offsetText","getOffsetText","ClockOverview","useClock","formattedClock","clockClasses","TimerOverview","timer","useTimer","isWaiting","phase","TimerPhase","Pending","display","secondaryTimer","timerState"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{x as D,j as y,h as t}from"./vendor-Cdwxo8bP.js";import{m as E,ah as T,e as N}from"./index-CoGiopcb.js";import{p as j}from"./parseUserTime-DZJMcfuJ.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new s.Error().stack;n&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[n]="c3de0b69-5556-4b89-90c6-376bdedc030f",s._sentryDebugIdIdentifier="sentry-dbid-c3de0b69-5556-4b89-90c6-376bdedc030f")}catch{}})();const A="_link_6042u_17",R={link:A};function L({search:s,children:n}){const a=D(),r=()=>a({search:s});return y.jsx("button",{onClick:r,className:R.link,children:n})}const S="_timeInput_1u25s_17",w="_delayed_1u25s_23",p={timeInput:S,delayed:w};function M({id:s,name:n,submitHandler:a,time:r,placeholder:g,disabled:k,align:h="center",delayed:I,className:_}){const l=t.useRef(null),[m,o]=t.useState(""),i=t.useRef(!1),u=t.useCallback(()=>{typeof r!="number"||isNaN(r)?o("00:00:00"):o(E(r))},[r]),x=t.useCallback(()=>{var e;(e=l.current)==null||e.select()},[]),d=t.useCallback(e=>e===""?!1:e.startsWith("p")||e.startsWith("+")?(a(n,e),!0):j(e)===r?!1:(a(n,e),!0),[n,a,r]),f=t.useCallback(e=>{d(e)||u()},[d,u]),C=t.useCallback(e=>{var c,b;e.key==="Enter"&&((c=l.current)==null||c.blur()),e.key==="Escape"&&(i.current=!0,(b=l.current)==null||b.blur(),u())},[u]),v=t.useCallback(e=>{if(i.current){i.current=!1;return}f(e.target.value)},[f]);return t.useEffect(()=>{u()},[u]),y.jsx(T,{id:s,disabled:k,ref:l,"data-testid":`time-input-${n}`,className:N([p.timeInput,I&&p.delayed,_]),placeholder:g,onFocus:x,onChange:e=>o(e.target.value),onBlur:v,onKeyDown:C,value:m,maxLength:8,style:{textAlign:h}})}export{L as A,M as T,p as s};
2
+ //# sourceMappingURL=TimeInput-Duzx40TC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimeInput-Bu_5GlHP.js","sources":["../../src/common/components/link/app-link/AppLink.tsx","../../src/common/components/input/time-input/TimeInput.tsx"],"sourcesContent":["import { type PropsWithChildren } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport style from './AppLink.module.scss';\n\ninterface AppLinkProps {\n search: string;\n}\n\n/**\n * Component used to navigate to an editor link inside the same window\n * Handles the path to respect Ontime Clouds base URL\n */\nexport default function AppLink({ search, children }: PropsWithChildren<AppLinkProps>) {\n const navigate = useNavigate();\n\n const handleClick = () => navigate({ search });\n\n return (\n <button onClick={handleClick} className={style.link}>\n {children}\n </button>\n );\n}\n","import { FocusEvent, KeyboardEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport { millisToString, parseUserTime } from 'ontime-utils';\n\nimport { cx } from '../../../utils/styleUtils';\nimport Input from '../input/Input';\n\nimport style from './TimeInput.module.scss';\n\ninterface TimeInputProps<T extends string> {\n id?: T;\n name: T;\n submitHandler: (field: T, value: string) => void;\n time?: number;\n placeholder?: string;\n disabled?: boolean;\n align?: 'left' | 'center';\n delayed?: boolean;\n className?: string;\n}\n\nexport default function TimeInput<T extends string>({\n id,\n name,\n submitHandler,\n time,\n placeholder,\n disabled,\n align = 'center',\n delayed,\n className,\n}: TimeInputProps<T>) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [value, setValue] = useState<string>('');\n const ignoreChange = useRef(false);\n\n /**\n * @description Resets input value to given\n */\n const resetValue = useCallback(() => {\n if (typeof time !== 'number' || isNaN(time)) {\n setValue('00:00:00');\n } else {\n setValue(millisToString(time));\n }\n }, [time]);\n\n /**\n * @description Selects input text on focus\n */\n const handleFocus = useCallback(() => {\n inputRef.current?.select();\n }, []);\n\n /**\n * @description Submit handler\n * @param {string} newValue\n */\n const handleSubmit = useCallback(\n (newValue: string) => {\n // Check if there is anything there\n if (newValue === '') {\n return false;\n }\n\n // we dont know the values in the rundown, escalate to handler\n if (newValue.startsWith('p') || newValue.startsWith('+')) {\n submitHandler(name, newValue);\n return true;\n }\n\n const valueInMillis = parseUserTime(newValue);\n if (valueInMillis === time) {\n return false;\n }\n\n submitHandler(name, newValue);\n return true;\n },\n [name, submitHandler, time],\n );\n\n /**\n * @description Prepare time fields\n * @param {string} value string to be parsed\n */\n const validateAndSubmit = useCallback(\n (newValue: string) => {\n const success = handleSubmit(newValue);\n if (!success) {\n resetValue();\n }\n },\n [handleSubmit, resetValue],\n );\n\n /**\n * @description Handles common keys for submit and cancel\n * @param {KeyboardEvent} event\n */\n const onKeyDownHandler = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n inputRef.current?.blur();\n }\n if (event.key === 'Escape') {\n ignoreChange.current = true;\n inputRef.current?.blur();\n resetValue();\n }\n },\n [resetValue],\n );\n\n const onBlurHandler = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n if (ignoreChange.current) {\n ignoreChange.current = false;\n return;\n }\n validateAndSubmit((event.target as HTMLInputElement).value);\n },\n [validateAndSubmit],\n );\n\n useEffect(() => {\n resetValue();\n }, [resetValue]);\n\n return (\n <Input\n id={id}\n disabled={disabled}\n ref={inputRef}\n data-testid={`time-input-${name}`}\n className={cx([style.timeInput, delayed && style.delayed, className])}\n placeholder={placeholder}\n onFocus={handleFocus}\n onChange={(event) => setValue(event.target.value)}\n onBlur={onBlurHandler}\n onKeyDown={onKeyDownHandler}\n value={value}\n maxLength={8}\n style={{\n textAlign: align,\n }}\n />\n );\n}\n"],"names":["AppLink","search","children","navigate","useNavigate","handleClick","style","TimeInput","id","name","submitHandler","time","placeholder","disabled","align","delayed","className","inputRef","useRef","value","setValue","useState","ignoreChange","resetValue","useCallback","millisToString","handleFocus","_a","handleSubmit","newValue","parseUserTime","validateAndSubmit","onKeyDownHandler","event","_b","onBlurHandler","useEffect","jsx","Input","cx"],"mappings":"4hBAaA,SAAwBA,EAAQ,CAAE,OAAAC,EAAQ,SAAAC,GAA6C,CACrF,MAAMC,EAAWC,EAAY,EAEvBC,EAAc,IAAMF,EAAS,CAAE,OAAAF,EAAQ,EAE7C,aACG,SAAO,CAAA,QAASI,EAAa,UAAWC,EAAM,KAC5C,SAAAJ,EACH,CAEJ,+ECHA,SAAwBK,EAA4B,CAClD,GAAAC,EACA,KAAAC,EACA,cAAAC,EACA,KAAAC,EACA,YAAAC,EACA,SAAAC,EACA,MAAAC,EAAQ,SACR,QAAAC,EACA,UAAAC,CACF,EAAsB,CACd,MAAAC,EAAWC,SAAgC,IAAI,EAC/C,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAiB,EAAE,EACvCC,EAAeJ,SAAO,EAAK,EAK3BK,EAAaC,EAAAA,YAAY,IAAM,CAC/B,OAAOb,GAAS,UAAY,MAAMA,CAAI,EACxCS,EAAS,UAAU,EAEVA,EAAAK,EAAed,CAAI,CAAC,CAC/B,EACC,CAACA,CAAI,CAAC,EAKHe,EAAcF,EAAAA,YAAY,IAAM,QACpCG,EAAAV,EAAS,UAAT,MAAAU,EAAkB,QACpB,EAAG,EAAE,EAMCC,EAAeJ,EAAA,YAClBK,GAEKA,IAAa,GACR,GAILA,EAAS,WAAW,GAAG,GAAKA,EAAS,WAAW,GAAG,GACrDnB,EAAcD,EAAMoB,CAAQ,EACrB,IAGaC,EAAcD,CAAQ,IACtBlB,EACb,IAGTD,EAAcD,EAAMoB,CAAQ,EACrB,IAET,CAACpB,EAAMC,EAAeC,CAAI,CAC5B,EAMMoB,EAAoBP,EAAA,YACvBK,GAAqB,CACJD,EAAaC,CAAQ,GAExBN,EAAA,CAEf,EACA,CAACK,EAAcL,CAAU,CAC3B,EAMMS,EAAmBR,EAAA,YACtBS,GAA2C,SACtCA,EAAM,MAAQ,WAChBN,EAAAV,EAAS,UAAT,MAAAU,EAAkB,QAEhBM,EAAM,MAAQ,WAChBX,EAAa,QAAU,IACvBY,EAAAjB,EAAS,UAAT,MAAAiB,EAAkB,OACPX,EAAA,EAEf,EACA,CAACA,CAAU,CACb,EAEMY,EAAgBX,EAAA,YACnBS,GAAwC,CACvC,GAAIX,EAAa,QAAS,CACxBA,EAAa,QAAU,GACvB,MAAA,CAEiBS,EAAAE,EAAM,OAA4B,KAAK,CAC5D,EACA,CAACF,CAAiB,CACpB,EAEAK,OAAAA,EAAAA,UAAU,IAAM,CACHb,EAAA,CAAA,EACV,CAACA,CAAU,CAAC,EAGbc,EAAA,IAACC,EAAA,CACC,GAAA9B,EACA,SAAAK,EACA,IAAKI,EACL,cAAa,cAAcR,CAAI,GAC/B,UAAW8B,EAAG,CAACjC,EAAM,UAAWS,GAAWT,EAAM,QAASU,CAAS,CAAC,EACpE,YAAAJ,EACA,QAASc,EACT,SAAWO,GAAUb,EAASa,EAAM,OAAO,KAAK,EAChD,OAAQE,EACR,UAAWH,EACX,MAAAb,EACA,UAAW,EACX,MAAO,CACL,UAAWL,CAAA,CACb,CACF,CAEJ"}
1
+ {"version":3,"file":"TimeInput-Duzx40TC.js","sources":["../../src/common/components/link/app-link/AppLink.tsx","../../src/common/components/input/time-input/TimeInput.tsx"],"sourcesContent":["import { type PropsWithChildren } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport style from './AppLink.module.scss';\n\ninterface AppLinkProps {\n search: string;\n}\n\n/**\n * Component used to navigate to an editor link inside the same window\n * Handles the path to respect Ontime Clouds base URL\n */\nexport default function AppLink({ search, children }: PropsWithChildren<AppLinkProps>) {\n const navigate = useNavigate();\n\n const handleClick = () => navigate({ search });\n\n return (\n <button onClick={handleClick} className={style.link}>\n {children}\n </button>\n );\n}\n","import { FocusEvent, KeyboardEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport { millisToString, parseUserTime } from 'ontime-utils';\n\nimport { cx } from '../../../utils/styleUtils';\nimport Input from '../input/Input';\n\nimport style from './TimeInput.module.scss';\n\ninterface TimeInputProps<T extends string> {\n id?: T;\n name: T;\n submitHandler: (field: T, value: string) => void;\n time?: number;\n placeholder?: string;\n disabled?: boolean;\n align?: 'left' | 'center';\n delayed?: boolean;\n className?: string;\n}\n\nexport default function TimeInput<T extends string>({\n id,\n name,\n submitHandler,\n time,\n placeholder,\n disabled,\n align = 'center',\n delayed,\n className,\n}: TimeInputProps<T>) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [value, setValue] = useState<string>('');\n const ignoreChange = useRef(false);\n\n /**\n * @description Resets input value to given\n */\n const resetValue = useCallback(() => {\n if (typeof time !== 'number' || isNaN(time)) {\n setValue('00:00:00');\n } else {\n setValue(millisToString(time));\n }\n }, [time]);\n\n /**\n * @description Selects input text on focus\n */\n const handleFocus = useCallback(() => {\n inputRef.current?.select();\n }, []);\n\n /**\n * @description Submit handler\n * @param {string} newValue\n */\n const handleSubmit = useCallback(\n (newValue: string) => {\n // Check if there is anything there\n if (newValue === '') {\n return false;\n }\n\n // we dont know the values in the rundown, escalate to handler\n if (newValue.startsWith('p') || newValue.startsWith('+')) {\n submitHandler(name, newValue);\n return true;\n }\n\n const valueInMillis = parseUserTime(newValue);\n if (valueInMillis === time) {\n return false;\n }\n\n submitHandler(name, newValue);\n return true;\n },\n [name, submitHandler, time],\n );\n\n /**\n * @description Prepare time fields\n * @param {string} value string to be parsed\n */\n const validateAndSubmit = useCallback(\n (newValue: string) => {\n const success = handleSubmit(newValue);\n if (!success) {\n resetValue();\n }\n },\n [handleSubmit, resetValue],\n );\n\n /**\n * @description Handles common keys for submit and cancel\n * @param {KeyboardEvent} event\n */\n const onKeyDownHandler = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n inputRef.current?.blur();\n }\n if (event.key === 'Escape') {\n ignoreChange.current = true;\n inputRef.current?.blur();\n resetValue();\n }\n },\n [resetValue],\n );\n\n const onBlurHandler = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n if (ignoreChange.current) {\n ignoreChange.current = false;\n return;\n }\n validateAndSubmit((event.target as HTMLInputElement).value);\n },\n [validateAndSubmit],\n );\n\n useEffect(() => {\n resetValue();\n }, [resetValue]);\n\n return (\n <Input\n id={id}\n disabled={disabled}\n ref={inputRef}\n data-testid={`time-input-${name}`}\n className={cx([style.timeInput, delayed && style.delayed, className])}\n placeholder={placeholder}\n onFocus={handleFocus}\n onChange={(event) => setValue(event.target.value)}\n onBlur={onBlurHandler}\n onKeyDown={onKeyDownHandler}\n value={value}\n maxLength={8}\n style={{\n textAlign: align,\n }}\n />\n );\n}\n"],"names":["AppLink","search","children","navigate","useNavigate","handleClick","style","link","TimeInput","id","name","submitHandler","time","placeholder","disabled","align","delayed","className","inputRef","useRef","value","setValue","useState","ignoreChange","resetValue","useCallback","isNaN","millisToString","handleFocus","current","select","handleSubmit","newValue","startsWith","parseUserTime","validateAndSubmit","onKeyDownHandler","event","key","blur","onBlurHandler","target","useEffect","Input","cx","timeInput","textAlign"],"mappings":"4hBAaA,SAAwBA,EAAQ,CAAEC,OAAAA,EAAQC,SAAAA,CAA0C,EAAG,CACrF,MAAMC,EAAWC,EAAY,EAEvBC,EAAcA,IAAMF,EAAS,CAAEF,OAAAA,CAAAA,CAAQ,EAE7C,aACG,SAAO,CAAA,QAASI,EAAa,UAAWC,EAAMC,KAC5CL,SAAAA,EACH,CAEJ,+ECHA,SAAwBM,EAA4B,CAClDC,GAAAA,EACAC,KAAAA,EACAC,cAAAA,EACAC,KAAAA,EACAC,YAAAA,EACAC,SAAAA,EACAC,MAAAA,EAAQ,SACRC,QAAAA,EACAC,UAAAA,CACiB,EAAG,CACdC,MAAAA,EAAWC,SAAgC,IAAI,EAC/C,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAiB,EAAE,EACvCC,EAAeJ,SAAO,EAAK,EAK3BK,EAAaC,EAAAA,YAAY,IAAM,CAC/B,OAAOb,GAAS,UAAYc,MAAMd,CAAI,EACxCS,EAAS,UAAU,EAEVM,EAAAA,EAAef,CAAI,CAAC,CAC/B,EACC,CAACA,CAAI,CAAC,EAKHgB,EAAcH,EAAAA,YAAY,IAAM,QACpCP,EAAAA,EAASW,UAATX,MAAAA,EAAkBY,QACpB,EAAG,EAAE,EAMCC,EAAeN,cAClBO,GAEKA,IAAa,GACR,GAILA,EAASC,WAAW,GAAG,GAAKD,EAASC,WAAW,GAAG,GACrDtB,EAAcD,EAAMsB,CAAQ,EACrB,IAGaE,EAAcF,CAAQ,IACtBpB,EACb,IAGTD,EAAcD,EAAMsB,CAAQ,EACrB,IAET,CAACtB,EAAMC,EAAeC,CAAI,CAC5B,EAMMuB,EAAoBV,cACvBO,GAAqB,CACJD,EAAaC,CAAQ,GAExBR,EAAA,CACb,EAEF,CAACO,EAAcP,CAAU,CAC3B,EAMMY,EAAmBX,cACtBY,GAA2C,SACtCA,EAAMC,MAAQ,WAChBpB,EAAAA,EAASW,UAATX,MAAAA,EAAkBqB,QAEhBF,EAAMC,MAAQ,WAChBf,EAAaM,QAAU,IACvBX,EAAAA,EAASW,UAATX,MAAAA,EAAkBqB,OACPf,EAAA,EACb,EAEF,CAACA,CAAU,CACb,EAEMgB,EAAgBf,cACnBY,GAAwC,CACvC,GAAId,EAAaM,QAAS,CACxBN,EAAaM,QAAU,GACvB,MAAA,CAEiBQ,EAAAA,EAAMI,OAA4BrB,KAAK,CAAA,EAE5D,CAACe,CAAiB,CACpB,EAEAO,OAAAA,EAAAA,UAAU,IAAM,CACHlB,EAAA,CAAA,EACV,CAACA,CAAU,CAAC,QAGZmB,EACC,CAAA,GAAAlC,EACA,SAAAK,EACA,IAAKI,EACL,cAAa,cAAcR,CAAI,GAC/B,UAAWkC,EAAG,CAACtC,EAAMuC,UAAW7B,GAAWV,EAAMU,QAASC,CAAS,CAAC,EACpE,YAAAJ,EACA,QAASe,EACT,SAAWS,GAAUhB,EAASgB,EAAMI,OAAOrB,KAAK,EAChD,OAAQoB,EACR,UAAWJ,EACX,MAAAhB,EACA,UAAW,EACX,MAAO,CACL0B,UAAW/B,CAAAA,EAEb,CAEN"}
@@ -1,2 +1,2 @@
1
- import{h as p,l as R,j as i,o as U}from"./vendor-BoH5HFNN.js";import{s as S,P as W,I as E,k as N,M as C,f as O,J as F,e as _,K as G,q as V,d as M,w as q,b as J,L as K,o as Q,g as X,O as Y,v as Z}from"./index-CDBQg2fh.js";import{E as tt}from"./EmptyPage-Ct3d0DqJ.js";import{V as et}from"./ViewLogo-BHsV7Faa.js";import{O as B,V as nt}from"./ViewParamsEditor-BMHXOv-K.js";import{u as st}from"./useWindowTitle-DU8NlxIu.js";import{S as it}from"./SuperscriptTime-Nou92D8X.js";import{i as w,a as v,d as ot,u as at}from"./useRundown-BFae0_bU.js";import{g as rt,a as lt}from"./viewLoader.utils-BPOG1xso.js";import{i as I}from"./viewUtils-DI8_kmUZ.js";import{g as ct,a as D,b as ut,c as mt}from"./rundownUtils-DJKMt8Ih.js";import{g as dt}from"./getProgress-DlrSzpnf.js";import{u as ft}from"./useProjectData-DGA6K2Zs.js";import"./Empty-C0IdV_kI.js";import"./Select-B5xNi_tM.js";/* empty css */(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="ed8005c4-be08-4b39-8aed-ce08cd47380a",e._sentryDebugIdIdentifier="sentry-dbid-ed8005c4-be08-4b39-8aed-ce08cd47380a")}catch{}})();function ht(e,t){if(!t)return 0;const n=e.timeStart+e.dayOffset*S,s=t.timeStart+t.duration+t.dayOffset*S;return n===s?0:(n>s,n-s)}function z(e,t,n){if(!t.current)return;if(!(e!=null&&e.current)){t.current.scrollTo({left:0,behavior:"smooth"});return}const s=e.current.getBoundingClientRect(),a=t.current.getBoundingClientRect(),o=s.left-a.left+t.current.scrollLeft-n;t.current.scrollTo({left:o,behavior:"smooth"})}function pt({followRef:e,scrollRef:t,doFollow:n,selectedEventId:s,leftOffset:a=0,setScrollFlag:o}){return p.useEffect(()=>{!n||!t.current||(o==null||o(!0),window.requestAnimationFrame(()=>{z(s!==null?e:null,t,a),o==null||o(!1)}))},[e,t,n,a,o,s]),p.useCallback((m=e,u=t,c=a)=>{u.current&&z(s!==null?m:null,u,c)},[e,t,a,s])}const xt=e=>[{title:B.ClockOptions,collapsible:!0,options:[rt(e)]},{title:B.ElementVisibility,collapsible:!0,options:[{id:"hidePast",title:"Hide Past Events",description:"Whether to hide events that have passed",type:"boolean",defaultValue:!1},{id:"fixedSize",title:"Fixed timeline size",description:"Timeline will have a fixed size to prevent scrolling",type:"boolean",defaultValue:!1}]}];function yt(e,t){const n=s=>(t==null?void 0:t.get(s))??e.get(s);return{hidePast:I(n("hidePast")),fixedSize:I(n("fixedSize"))}}function $(){const[e]=R(),t=p.use(W);return p.useMemo(()=>{const s=t?new URLSearchParams(t.search):void 0;return yt(e,s)},[t,e])}function gt(e,t,n,s,a){const r=(t<e?t+S:t)-e,m=s*a/r;return{left:(n-e)*a/r,width:m}}function _t(e){return Math.floor(e/E)}function Tt(e){return Math.ceil(e/E)}function jt(e,t){const n=[];for(let s=e;s<t;s++)n.push(s);return n}function wt(e,t){return t==="done"||t==="live"?t:e<=0?"pending":N(e,e>C*10)}function St(e,t){const{hidePast:n}=$();return p.useMemo(()=>{if(e.length===0)return{scopedRundown:[],firstStart:0,totalDuration:0};const a=[];let o=t?1/0:-1,r=null,m=0,u=null;for(let c=0;c<e.length;c++){const l=e[c];if(w(l)&&v(l)){if(l.id===t&&(o=c),n&&c<o)continue;a.push(l),r===null&&(r=l.timeStart);const d=ht(l,u);d===0?m+=l.duration:d>0?m+=d+l.duration:d<0&&(m+=Math.max(l.duration+d,0)),ot(l,u)&&(u=l)}}return{scopedRundown:a,firstStart:r??0,totalDuration:m}},[n,e,t])}function bt(e,t){var o,r;if(e.length===0)return{now:null,next:null,followedBy:null};let n=t?ct(e,t):null;w(n)||(n=null);const s=n?(o=D(e,n.id))==null?void 0:o.nextEvent:ut(e).firstEvent,a=s?(r=D(e,s.id))==null?void 0:r.nextEvent:null;return{now:n,next:s,followedBy:a}}function vt(e,t,n,s,a,o=100){let r=1/0;const m=e.map(({start:l,duration:d})=>{const y=gt(t,n,l,d,s);return r=Math.min(r,y.width),y});if(!a)return{positions:m,scale:1,totalWidth:s};const u=r<o?o/r:1;return u===1?{positions:m,scale:1,totalWidth:s}:{positions:m.map(l=>({left:l.left*u,width:l.width*u})),scale:u,totalWidth:s*u}}const Et="_markers_gfywu_17",Nt={markers:Et};function Pt(e){const{startHour:t,endHour:n}=e,s=jt(t,n);return i.jsx("div",{className:Nt.markers,children:s.map(a=>i.jsx("span",{},a))})}const Lt="_timelineContainer_1qyn0_21",kt="_scroll_1qyn0_26",Ct="_timeline_1qyn0_21",Ot="_column_1qyn0_37",qt="_maybeInline_1qyn0_45",Mt="_timelineBlock_1qyn0_52",Bt="_smallArea_1qyn0_64",It="_content_1qyn0_64",Dt="_timeOverview_1qyn0_68",zt="_hide_1qyn0_72",Ht="_status_1qyn0_98",At="_due_1qyn0_112",Vt="_delay_1qyn0_116",$t="_cross_1qyn0_126",Rt="_separeLeft_1qyn0_132",h={timelineContainer:Lt,scroll:kt,timeline:Ct,column:Ot,maybeInline:qt,timelineBlock:Mt,smallArea:Bt,content:It,timeOverview:Dt,hide:zt,status:Ht,due:At,delay:Vt,cross:$t,separeLeft:Rt},H={format12:"h:mm a",format24:"HH:mm"};function Ut({colour:e,delay:t,duration:n,hasLink:s,left:a,status:o,start:r,dayOffset:m,totalGap:u,isLinkedToLoaded:c,title:l,width:d,cue:y,ref:b}){const P=O(r,H),L=N(n),T=r+t,j=t>0,f=F(e,.7),x=d>25,g=d<40;return i.jsxs("div",{ref:b,className:_([h.column,g&&h.smallArea]),style:{"--color":e,"--lighter":f??"",left:`${a}px`,width:`${d}px`},"data-testid":y,children:[o==="live"?i.jsx(Wt,{}):i.jsx("div",{"data-status":o,className:h.timelineBlock}),i.jsxs("div",{className:_([h.content,d<20&&h.hide,!s&&h.separeLeft]),"data-status":o,style:{"--color":e},children:[i.jsxs("div",{className:h.maybeInline,children:[i.jsx("div",{className:_([j&&h.cross]),children:P}),j&&i.jsx("div",{className:h.delay,children:O(T,H)}),g&&i.jsx(A,{delay:t,start:r,dayOffset:m,totalGap:u,isLinkedToLoaded:c,status:o})]}),x&&i.jsxs(i.Fragment,{children:[!g&&i.jsx(A,{delay:t,start:r,dayOffset:m,totalGap:u,isLinkedToLoaded:c,status:o}),i.jsx("div",{children:l})]})]}),i.jsx("div",{className:h.timeOverview,"data-status":o,children:o!=="done"&&i.jsx("div",{className:h.duration,children:L})})]})}function A({delay:e,start:t,dayOffset:n,totalGap:s,isLinkedToLoaded:a,status:o}){const r=V(),{getLocalizedString:m}=M(),{timeToStart:u}=q({timeStart:t,delay:e,dayOffset:n,totalGap:s,isLinkedToLoaded:a,countToEnd:!1,duration:0},r);let c=wt(u,o);c==="live"?c=m("timeline.live"):c==="pending"&&(c=m("timeline.due"));const l=o==="future"&&u<=0;return i.jsx("div",{className:_([h.status,l&&h.due]),children:c})}function Wt(){const{current:e,duration:t}=G(),n=dt(e,t);return i.jsx("div",{"data-status":"live",className:h.timelineBlock,style:{"--progress":`${n}%`}})}const Ft=p.memo(Gt);function Gt({firstStart:e,rundown:t,selectedEventId:n,totalDuration:s}){const{width:a}=U(),{hidePast:o,fixedSize:r}=$(),m=p.useRef(null),u=p.useRef(null),{lastEvent:c}=mt(t),l=_t(e),d=Tt(e+s+((c==null?void 0:c.delay)??0)),y=l*E,b=d*E;pt({followRef:m,scrollRef:u,doFollow:!r,selectedEventId:n,leftOffset:o?0:a/6});const{positions:P,totalWidth:L}=p.useMemo(()=>{const f=t.filter(x=>w(x)&&v(x)).map(x=>({start:x.timeStart+(x.dayOffset??0)*S+(x.delay??0),duration:x.duration}));return vt(f,y,b,a,!r)},[t,y,b,a,r]);if(s===0)return null;let T=n?"done":"future";const j={};return t.forEach(f=>{w(f)&&v(f)&&(T==="live"&&(T="future"),f.id===n&&(T="live"),j[f.id]=T)}),i.jsx("div",{ref:u,className:_([h.timelineContainer,!r&&h.scroll]),children:i.jsxs("div",{className:h.timeline,style:{width:L},children:[i.jsx(Pt,{startHour:l,endHour:d}),t.map((f,x)=>{if(!w(f)||!v(f))return null;const g=P[x];return g?i.jsx(Ut,{ref:f.id===n?m:void 0,colour:f.colour,delay:f.delay??0,duration:f.duration,hasLink:!!f.linkStart,left:g.left,status:j[f.id],start:f.timeStart+(f.dayOffset??0)*S,totalGap:f.totalGap,isLinkedToLoaded:f.isLinkedToLoaded,dayOffset:f.dayOffset,title:f.title,cue:f.cue,width:g.width},f.id):null})]})})}const k=p.memo(Jt);function Jt({category:e,content:t,title:n,status:s}){const a=_(["section",e==="now"&&"section--now"]),o=_(["section-content",t?`section-content--${e}`:"section-content--subdue"]);return i.jsxs("div",{className:a,"data-testid":e,children:[i.jsxs("div",{className:"section-title",children:[i.jsx("span",{className:"section-title__label",children:n}),s&&i.jsx("span",{className:"section-title__status",children:s})]}),i.jsx("div",{className:o,children:t??"-"})]})}function Kt({now:e,next:t,followedBy:n}){const{getLocalizedString:s}=M(),a=V(),o=(e==null?void 0:e.title)??"-",r=s("timeline.due").toUpperCase(),m=t!==null?t.title:"-",u=n!==null?n.title:"-";let c,l;if(t!==null){const{timeToStart:d}=q(t,a);d<=0?c=r:c=N(d,d>C*10)}if(n!==null){const{timeToStart:d}=q(n,a);d<=0?l=r:l=N(d,d>C*10)}return i.jsxs("div",{className:"title-grid",children:[i.jsx(k,{title:s("timeline.live"),content:o,category:"now"}),i.jsx(k,{title:s("common.next"),status:c,content:m,category:"next"}),i.jsx(k,{title:s("timeline.followedby"),status:l,content:u,category:"followedBy"})]})}function Qt(){const{data:e,status:t}=at(),{data:n,status:s}=ft(),{data:a,status:o}=J();return{data:{events:e,projectData:n,settings:a},status:lt([t,s,o])}}function pe(){const{data:e,status:t}=Qt();return st("Timeline"),t==="pending"?i.jsx(K,{}):t==="error"?i.jsx(tt,{text:"There was an error fetching data, please refresh the page."}):i.jsx(Xt,{...e})}function Xt({events:e,projectData:t,settings:n}){const{selectedEventId:s}=Q(),{scopedRundown:a,firstStart:o,totalDuration:r}=St(e,s),{now:m,next:u,followedBy:c}=p.useMemo(()=>bt(a,s),[a,s]),l=X(n==null?void 0:n.timeFormat),d=p.useMemo(()=>xt(l),[l]);return i.jsxs("div",{className:"timeline","data-testid":"timeline-view",children:[i.jsx(nt,{target:Y.Timeline,viewOptions:d}),i.jsxs("div",{className:"project-header",children:[(t==null?void 0:t.logo)&&i.jsx(et,{name:t.logo,className:"logo"}),i.jsx("div",{className:"title",children:t.title}),i.jsx(Yt,{})]}),i.jsx(Kt,{now:m,next:u,followedBy:c}),i.jsx(Ft,{firstStart:o,rundown:a,selectedEventId:s,totalDuration:r})]})}function Yt(){const{getLocalizedString:e}=M(),{clock:t}=Z(),n=O(t);return i.jsxs("div",{className:"clock-container",children:[i.jsx("div",{className:"label",children:e("common.time_now")}),i.jsx(it,{time:n,className:"time"})]})}export{pe as default};
2
- //# sourceMappingURL=TimelinePage-CQqUB1KT.js.map
1
+ import{h as p,l as R,j as i,o as U}from"./vendor-Cdwxo8bP.js";import{s as S,P as W,I as E,k as N,M as C,f as O,J as F,e as _,K as G,q as V,d as M,w as q,b as J,L as K,o as Q,g as X,O as Y,v as Z}from"./index-CoGiopcb.js";import{E as tt}from"./EmptyPage-DeRjpRKZ.js";import{V as et}from"./ViewLogo-BdL1hUV1.js";import{O as B,V as nt}from"./ViewParamsEditor-CFedpp6w.js";import{u as st}from"./useWindowTitle-mLKt65i7.js";import{S as it}from"./SuperscriptTime-Mc0ZGBMo.js";import{i as w,a as v,d as ot,u as at}from"./useRundown-CHsh5rnl.js";import{g as rt,a as lt}from"./viewLoader.utils-DuXjY5zb.js";import{i as I}from"./viewUtils-dKRKkb_F.js";import{g as ct,a as D,b as ut,c as mt}from"./rundownUtils-Dl1x6NDv.js";import{g as dt}from"./getProgress-sdxPEEPi.js";import{u as ft}from"./useProjectData-B5mjXsMj.js";import"./Empty-D1UteOYj.js";import"./Select-cHK8JrMG.js";/* empty css */(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="c1f37f02-1ab5-41c8-927c-280d3f61b741",e._sentryDebugIdIdentifier="sentry-dbid-c1f37f02-1ab5-41c8-927c-280d3f61b741")}catch{}})();function ht(e,t){if(!t)return 0;const n=e.timeStart+e.dayOffset*S,s=t.timeStart+t.duration+t.dayOffset*S;return n===s?0:(n>s,n-s)}function z(e,t,n){if(!t.current)return;if(!(e!=null&&e.current)){t.current.scrollTo({left:0,behavior:"smooth"});return}const s=e.current.getBoundingClientRect(),a=t.current.getBoundingClientRect(),o=s.left-a.left+t.current.scrollLeft-n;t.current.scrollTo({left:o,behavior:"smooth"})}function pt({followRef:e,scrollRef:t,doFollow:n,selectedEventId:s,leftOffset:a=0,setScrollFlag:o}){return p.useEffect(()=>{!n||!t.current||(o==null||o(!0),window.requestAnimationFrame(()=>{z(s!==null?e:null,t,a),o==null||o(!1)}))},[e,t,n,a,o,s]),p.useCallback((m=e,u=t,c=a)=>{u.current&&z(s!==null?m:null,u,c)},[e,t,a,s])}const xt=e=>[{title:B.ClockOptions,collapsible:!0,options:[rt(e)]},{title:B.ElementVisibility,collapsible:!0,options:[{id:"hidePast",title:"Hide Past Events",description:"Whether to hide events that have passed",type:"boolean",defaultValue:!1},{id:"fixedSize",title:"Fixed timeline size",description:"Timeline will have a fixed size to prevent scrolling",type:"boolean",defaultValue:!1}]}];function yt(e,t){const n=s=>(t==null?void 0:t.get(s))??e.get(s);return{hidePast:I(n("hidePast")),fixedSize:I(n("fixedSize"))}}function $(){const[e]=R(),t=p.use(W);return p.useMemo(()=>{const s=t?new URLSearchParams(t.search):void 0;return yt(e,s)},[t,e])}function gt(e,t,n,s,a){const r=(t<e?t+S:t)-e,m=s*a/r;return{left:(n-e)*a/r,width:m}}function _t(e){return Math.floor(e/E)}function Tt(e){return Math.ceil(e/E)}function jt(e,t){const n=[];for(let s=e;s<t;s++)n.push(s);return n}function wt(e,t){return t==="done"||t==="live"?t:e<=0?"pending":N(e,e>C*10)}function St(e,t){const{hidePast:n}=$();return p.useMemo(()=>{if(e.length===0)return{scopedRundown:[],firstStart:0,totalDuration:0};const a=[];let o=t?1/0:-1,r=null,m=0,u=null;for(let c=0;c<e.length;c++){const l=e[c];if(w(l)&&v(l)){if(l.id===t&&(o=c),n&&c<o)continue;a.push(l),r===null&&(r=l.timeStart);const d=ht(l,u);d===0?m+=l.duration:d>0?m+=d+l.duration:d<0&&(m+=Math.max(l.duration+d,0)),ot(l,u)&&(u=l)}}return{scopedRundown:a,firstStart:r??0,totalDuration:m}},[n,e,t])}function bt(e,t){var o,r;if(e.length===0)return{now:null,next:null,followedBy:null};let n=t?ct(e,t):null;w(n)||(n=null);const s=n?(o=D(e,n.id))==null?void 0:o.nextEvent:ut(e).firstEvent,a=s?(r=D(e,s.id))==null?void 0:r.nextEvent:null;return{now:n,next:s,followedBy:a}}function vt(e,t,n,s,a,o=100){let r=1/0;const m=e.map(({start:l,duration:d})=>{const y=gt(t,n,l,d,s);return r=Math.min(r,y.width),y});if(!a)return{positions:m,scale:1,totalWidth:s};const u=r<o?o/r:1;return u===1?{positions:m,scale:1,totalWidth:s}:{positions:m.map(l=>({left:l.left*u,width:l.width*u})),scale:u,totalWidth:s*u}}const Et="_markers_gfywu_17",Nt={markers:Et};function Pt(e){const{startHour:t,endHour:n}=e,s=jt(t,n);return i.jsx("div",{className:Nt.markers,children:s.map(a=>i.jsx("span",{},a))})}const Lt="_timelineContainer_1qyn0_21",kt="_scroll_1qyn0_26",Ct="_timeline_1qyn0_21",Ot="_column_1qyn0_37",qt="_maybeInline_1qyn0_45",Mt="_timelineBlock_1qyn0_52",Bt="_smallArea_1qyn0_64",It="_content_1qyn0_64",Dt="_timeOverview_1qyn0_68",zt="_hide_1qyn0_72",Ht="_status_1qyn0_98",At="_due_1qyn0_112",Vt="_delay_1qyn0_116",$t="_cross_1qyn0_126",Rt="_separeLeft_1qyn0_132",h={timelineContainer:Lt,scroll:kt,timeline:Ct,column:Ot,maybeInline:qt,timelineBlock:Mt,smallArea:Bt,content:It,timeOverview:Dt,hide:zt,status:Ht,due:At,delay:Vt,cross:$t,separeLeft:Rt},H={format12:"h:mm a",format24:"HH:mm"};function Ut({colour:e,delay:t,duration:n,hasLink:s,left:a,status:o,start:r,dayOffset:m,totalGap:u,isLinkedToLoaded:c,title:l,width:d,cue:y,ref:b}){const P=O(r,H),L=N(n),T=r+t,j=t>0,f=F(e,.7),x=d>25,g=d<40;return i.jsxs("div",{ref:b,className:_([h.column,g&&h.smallArea]),style:{"--color":e,"--lighter":f??"",left:`${a}px`,width:`${d}px`},"data-testid":y,children:[o==="live"?i.jsx(Wt,{}):i.jsx("div",{"data-status":o,className:h.timelineBlock}),i.jsxs("div",{className:_([h.content,d<20&&h.hide,!s&&h.separeLeft]),"data-status":o,style:{"--color":e},children:[i.jsxs("div",{className:h.maybeInline,children:[i.jsx("div",{className:_([j&&h.cross]),children:P}),j&&i.jsx("div",{className:h.delay,children:O(T,H)}),g&&i.jsx(A,{delay:t,start:r,dayOffset:m,totalGap:u,isLinkedToLoaded:c,status:o})]}),x&&i.jsxs(i.Fragment,{children:[!g&&i.jsx(A,{delay:t,start:r,dayOffset:m,totalGap:u,isLinkedToLoaded:c,status:o}),i.jsx("div",{children:l})]})]}),i.jsx("div",{className:h.timeOverview,"data-status":o,children:o!=="done"&&i.jsx("div",{className:h.duration,children:L})})]})}function A({delay:e,start:t,dayOffset:n,totalGap:s,isLinkedToLoaded:a,status:o}){const r=V(),{getLocalizedString:m}=M(),{timeToStart:u}=q({timeStart:t,delay:e,dayOffset:n,totalGap:s,isLinkedToLoaded:a,countToEnd:!1,duration:0},r);let c=wt(u,o);c==="live"?c=m("timeline.live"):c==="pending"&&(c=m("timeline.due"));const l=o==="future"&&u<=0;return i.jsx("div",{className:_([h.status,l&&h.due]),children:c})}function Wt(){const{current:e,duration:t}=G(),n=dt(e,t);return i.jsx("div",{"data-status":"live",className:h.timelineBlock,style:{"--progress":`${n}%`}})}const Ft=p.memo(Gt);function Gt({firstStart:e,rundown:t,selectedEventId:n,totalDuration:s}){const{width:a}=U(),{hidePast:o,fixedSize:r}=$(),m=p.useRef(null),u=p.useRef(null),{lastEvent:c}=mt(t),l=_t(e),d=Tt(e+s+((c==null?void 0:c.delay)??0)),y=l*E,b=d*E;pt({followRef:m,scrollRef:u,doFollow:!r,selectedEventId:n,leftOffset:o?0:a/6});const{positions:P,totalWidth:L}=p.useMemo(()=>{const f=t.filter(x=>w(x)&&v(x)).map(x=>({start:x.timeStart+(x.dayOffset??0)*S+(x.delay??0),duration:x.duration}));return vt(f,y,b,a,!r)},[t,y,b,a,r]);if(s===0)return null;let T=n?"done":"future";const j={};return t.forEach(f=>{w(f)&&v(f)&&(T==="live"&&(T="future"),f.id===n&&(T="live"),j[f.id]=T)}),i.jsx("div",{ref:u,className:_([h.timelineContainer,!r&&h.scroll]),children:i.jsxs("div",{className:h.timeline,style:{width:L},children:[i.jsx(Pt,{startHour:l,endHour:d}),t.map((f,x)=>{if(!w(f)||!v(f))return null;const g=P[x];return g?i.jsx(Ut,{ref:f.id===n?m:void 0,colour:f.colour,delay:f.delay??0,duration:f.duration,hasLink:!!f.linkStart,left:g.left,status:j[f.id],start:f.timeStart+(f.dayOffset??0)*S,totalGap:f.totalGap,isLinkedToLoaded:f.isLinkedToLoaded,dayOffset:f.dayOffset,title:f.title,cue:f.cue,width:g.width},f.id):null})]})})}const k=p.memo(Jt);function Jt({category:e,content:t,title:n,status:s}){const a=_(["section",e==="now"&&"section--now"]),o=_(["section-content",t?`section-content--${e}`:"section-content--subdue"]);return i.jsxs("div",{className:a,"data-testid":e,children:[i.jsxs("div",{className:"section-title",children:[i.jsx("span",{className:"section-title__label",children:n}),s&&i.jsx("span",{className:"section-title__status",children:s})]}),i.jsx("div",{className:o,children:t??"-"})]})}function Kt({now:e,next:t,followedBy:n}){const{getLocalizedString:s}=M(),a=V(),o=(e==null?void 0:e.title)??"-",r=s("timeline.due").toUpperCase(),m=t!==null?t.title:"-",u=n!==null?n.title:"-";let c,l;if(t!==null){const{timeToStart:d}=q(t,a);d<=0?c=r:c=N(d,d>C*10)}if(n!==null){const{timeToStart:d}=q(n,a);d<=0?l=r:l=N(d,d>C*10)}return i.jsxs("div",{className:"title-grid",children:[i.jsx(k,{title:s("timeline.live"),content:o,category:"now"}),i.jsx(k,{title:s("common.next"),status:c,content:m,category:"next"}),i.jsx(k,{title:s("timeline.followedby"),status:l,content:u,category:"followedBy"})]})}function Qt(){const{data:e,status:t}=at(),{data:n,status:s}=ft(),{data:a,status:o}=J();return{data:{events:e,projectData:n,settings:a},status:lt([t,s,o])}}function pe(){const{data:e,status:t}=Qt();return st("Timeline"),t==="pending"?i.jsx(K,{}):t==="error"?i.jsx(tt,{text:"There was an error fetching data, please refresh the page."}):i.jsx(Xt,{...e})}function Xt({events:e,projectData:t,settings:n}){const{selectedEventId:s}=Q(),{scopedRundown:a,firstStart:o,totalDuration:r}=St(e,s),{now:m,next:u,followedBy:c}=p.useMemo(()=>bt(a,s),[a,s]),l=X(n==null?void 0:n.timeFormat),d=p.useMemo(()=>xt(l),[l]);return i.jsxs("div",{className:"timeline","data-testid":"timeline-view",children:[i.jsx(nt,{target:Y.Timeline,viewOptions:d}),i.jsxs("div",{className:"project-header",children:[(t==null?void 0:t.logo)&&i.jsx(et,{name:t.logo,className:"logo"}),i.jsx("div",{className:"title",children:t.title}),i.jsx(Yt,{})]}),i.jsx(Kt,{now:m,next:u,followedBy:c}),i.jsx(Ft,{firstStart:o,rundown:a,selectedEventId:s,totalDuration:r})]})}function Yt(){const{getLocalizedString:e}=M(),{clock:t}=Z(),n=O(t);return i.jsxs("div",{className:"clock-container",children:[i.jsx("div",{className:"label",children:e("common.time_now")}),i.jsx(it,{time:n,className:"time"})]})}export{pe as default};
2
+ //# sourceMappingURL=TimelinePage-C-OHrCR8.js.map