@getontime/cli 4.0.2 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/client/assets/Backstage-DG-hwPI3.js +2 -0
  2. package/client/assets/Backstage-DG-hwPI3.js.br +0 -0
  3. package/client/assets/Backstage-DG-hwPI3.js.gz +0 -0
  4. package/client/assets/Backstage-DG-hwPI3.js.map +1 -0
  5. package/client/assets/Countdown-C8LGl1pp.js +2 -0
  6. package/client/assets/Countdown-C8LGl1pp.js.br +0 -0
  7. package/client/assets/Countdown-C8LGl1pp.js.gz +0 -0
  8. package/client/assets/Countdown-C8LGl1pp.js.map +1 -0
  9. package/client/assets/CustomTranslationModal-CJ9-aDjl.js +2 -0
  10. package/client/assets/CustomTranslationModal-CJ9-aDjl.js.br +0 -0
  11. package/client/assets/CustomTranslationModal-CJ9-aDjl.js.gz +0 -0
  12. package/client/assets/{CustomTranslationModal-C3R_2T5s.js.map → CustomTranslationModal-CJ9-aDjl.js.map} +1 -1
  13. package/client/assets/DelayIndicator-F4GdgsGh.js +2 -0
  14. package/client/assets/DelayIndicator-F4GdgsGh.js.br +0 -0
  15. package/client/assets/DelayIndicator-F4GdgsGh.js.gz +0 -0
  16. package/client/assets/{DelayIndicator-vT7n8ypf.js.map → DelayIndicator-F4GdgsGh.js.map} +1 -1
  17. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js +2 -0
  18. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js.br +0 -0
  19. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js.gz +0 -0
  20. package/client/assets/{EditorFeatureWrapper-DHfuO3EA.js.map → EditorFeatureWrapper-eIpSr_UK.js.map} +1 -1
  21. package/client/assets/EditorUtils-Bd3J5Dvf.js +2 -0
  22. package/client/assets/EditorUtils-Bd3J5Dvf.js.br +0 -0
  23. package/client/assets/EditorUtils-Bd3J5Dvf.js.gz +0 -0
  24. package/client/assets/EditorUtils-Bd3J5Dvf.js.map +1 -0
  25. package/client/assets/EditorUtils-CgF7UfHP.css +1 -0
  26. package/client/assets/EditorUtils-CgF7UfHP.css.br +0 -0
  27. package/client/assets/EditorUtils-CgF7UfHP.css.gz +0 -0
  28. package/client/assets/Empty-C0IdV_kI.js +2 -0
  29. package/client/assets/Empty-C0IdV_kI.js.br +0 -0
  30. package/client/assets/Empty-C0IdV_kI.js.gz +0 -0
  31. package/client/assets/{Empty-gWT_HMeu.js.map → Empty-C0IdV_kI.js.map} +1 -1
  32. package/client/assets/EmptyPage-Ct3d0DqJ.js +2 -0
  33. package/client/assets/EmptyPage-Ct3d0DqJ.js.br +0 -0
  34. package/client/assets/EmptyPage-Ct3d0DqJ.js.gz +0 -0
  35. package/client/assets/{EmptyPage-Dcbg6rmF.js.map → EmptyPage-Ct3d0DqJ.js.map} +1 -1
  36. package/client/assets/FollowButton-BG-ycRWu.js +2 -0
  37. package/client/assets/FollowButton-BG-ycRWu.js.br +0 -0
  38. package/client/assets/FollowButton-BG-ycRWu.js.gz +0 -0
  39. package/client/assets/{FollowButton-CSqJSvix.js.map → FollowButton-BG-ycRWu.js.map} +1 -1
  40. package/client/assets/MessageControlExport-DjoUioWA.css +1 -0
  41. package/client/assets/MessageControlExport-DjoUioWA.css.br +0 -0
  42. package/client/assets/MessageControlExport-DjoUioWA.css.gz +0 -0
  43. package/client/assets/MessageControlExport-X-4dl9QT.js +3 -0
  44. package/client/assets/MessageControlExport-X-4dl9QT.js.br +0 -0
  45. package/client/assets/MessageControlExport-X-4dl9QT.js.gz +0 -0
  46. package/client/assets/MessageControlExport-X-4dl9QT.js.map +1 -0
  47. package/client/assets/MilestoneEditor-BqNKKlvI.css +1 -0
  48. package/client/assets/MilestoneEditor-BqNKKlvI.css.br +0 -0
  49. package/client/assets/MilestoneEditor-BqNKKlvI.css.gz +0 -0
  50. package/client/assets/MilestoneEditor-rgBQSXVU.js +2 -0
  51. package/client/assets/MilestoneEditor-rgBQSXVU.js.br +0 -0
  52. package/client/assets/MilestoneEditor-rgBQSXVU.js.gz +0 -0
  53. package/client/assets/MilestoneEditor-rgBQSXVU.js.map +1 -0
  54. package/client/assets/Modal-Bn1bZkwb.js +2 -0
  55. package/client/assets/Modal-Bn1bZkwb.js.br +0 -0
  56. package/client/assets/Modal-Bn1bZkwb.js.gz +0 -0
  57. package/client/assets/Modal-Bn1bZkwb.js.map +1 -0
  58. package/client/assets/Modal-D3tAPV2u.css +1 -0
  59. package/client/assets/Modal-D3tAPV2u.css.br +0 -0
  60. package/client/assets/Modal-D3tAPV2u.css.gz +0 -0
  61. package/client/assets/MultiPartProgressBar-Cmw-gisu.js +2 -0
  62. package/client/assets/MultiPartProgressBar-Cmw-gisu.js.br +0 -0
  63. package/client/assets/MultiPartProgressBar-Cmw-gisu.js.gz +0 -0
  64. package/client/assets/{MultiPartProgressBar-D3jJZjb5.js.map → MultiPartProgressBar-Cmw-gisu.js.map} +1 -1
  65. package/client/assets/OperatorExport-BiBcgVKc.css +1 -0
  66. package/client/assets/OperatorExport-BiBcgVKc.css.br +0 -0
  67. package/client/assets/OperatorExport-BiBcgVKc.css.gz +0 -0
  68. package/client/assets/OperatorExport-CJd8jmY4.js +2 -0
  69. package/client/assets/OperatorExport-CJd8jmY4.js.br +0 -0
  70. package/client/assets/OperatorExport-CJd8jmY4.js.gz +0 -0
  71. package/client/assets/OperatorExport-CJd8jmY4.js.map +1 -0
  72. package/client/assets/OverviewWrapper-1Vj3_ojX.js +2 -0
  73. package/client/assets/OverviewWrapper-1Vj3_ojX.js.br +0 -0
  74. package/client/assets/OverviewWrapper-1Vj3_ojX.js.gz +0 -0
  75. package/client/assets/OverviewWrapper-1Vj3_ojX.js.map +1 -0
  76. package/client/assets/OverviewWrapper-9aebU9w0.css +1 -0
  77. package/client/assets/OverviewWrapper-9aebU9w0.css.br +0 -0
  78. package/client/assets/OverviewWrapper-9aebU9w0.css.gz +0 -0
  79. package/client/assets/PipHost-BUF7n-lT.css +1 -0
  80. package/client/assets/PipHost-BUF7n-lT.css.br +0 -0
  81. package/client/assets/PipHost-BUF7n-lT.css.gz +0 -0
  82. package/client/assets/PipHost-D7liNR4M.js +2 -0
  83. package/client/assets/PipHost-D7liNR4M.js.br +0 -0
  84. package/client/assets/PipHost-D7liNR4M.js.gz +0 -0
  85. package/client/assets/PipHost-D7liNR4M.js.map +1 -0
  86. package/client/assets/ProjectInfo-BduQgjcz.js +2 -0
  87. package/client/assets/ProjectInfo-BduQgjcz.js.br +0 -0
  88. package/client/assets/ProjectInfo-BduQgjcz.js.gz +0 -0
  89. package/client/assets/{ProjectInfo-z4k3cipS.js.map → ProjectInfo-BduQgjcz.js.map} +1 -1
  90. package/client/assets/ProtectRoute-Ci_AIozP.js +2 -0
  91. package/client/assets/ProtectRoute-Ci_AIozP.js.br +0 -0
  92. package/client/assets/ProtectRoute-Ci_AIozP.js.gz +0 -0
  93. package/client/assets/{ProtectRoute-CrcWfOlG.js.map → ProtectRoute-Ci_AIozP.js.map} +1 -1
  94. package/client/assets/{ProtectedCuesheet-CMTscjjR.css → ProtectedCuesheet-C_tKodwo.css} +1 -1
  95. package/client/assets/ProtectedCuesheet-C_tKodwo.css.br +0 -0
  96. package/client/assets/ProtectedCuesheet-C_tKodwo.css.gz +0 -0
  97. package/client/assets/ProtectedCuesheet-D_zdkwM-.js +2 -0
  98. package/client/assets/ProtectedCuesheet-D_zdkwM-.js.br +0 -0
  99. package/client/assets/ProtectedCuesheet-D_zdkwM-.js.gz +0 -0
  100. package/client/assets/ProtectedCuesheet-D_zdkwM-.js.map +1 -0
  101. package/client/assets/ProtectedEditor-CNL2ig79.js +3 -0
  102. package/client/assets/ProtectedEditor-CNL2ig79.js.br +0 -0
  103. package/client/assets/ProtectedEditor-CNL2ig79.js.gz +0 -0
  104. package/client/assets/ProtectedEditor-CNL2ig79.js.map +1 -0
  105. package/client/assets/ProtectedEditor-Dw0pWw0J.css +1 -0
  106. package/client/assets/ProtectedEditor-Dw0pWw0J.css.br +0 -0
  107. package/client/assets/ProtectedEditor-Dw0pWw0J.css.gz +0 -0
  108. package/client/assets/RundownEntry-Blq5OsMH.css +1 -0
  109. package/client/assets/RundownEntry-Blq5OsMH.css.br +0 -0
  110. package/client/assets/RundownEntry-Blq5OsMH.css.gz +0 -0
  111. package/client/assets/RundownEntry-Bs1ombtH.js +2 -0
  112. package/client/assets/RundownEntry-Bs1ombtH.js.br +0 -0
  113. package/client/assets/RundownEntry-Bs1ombtH.js.gz +0 -0
  114. package/client/assets/RundownEntry-Bs1ombtH.js.map +1 -0
  115. package/client/assets/RundownExport-BCT0ybxy.js +3 -0
  116. package/client/assets/RundownExport-BCT0ybxy.js.br +0 -0
  117. package/client/assets/RundownExport-BCT0ybxy.js.gz +0 -0
  118. package/client/assets/RundownExport-BCT0ybxy.js.map +1 -0
  119. package/client/assets/{RundownExport-1zBZurIG.css → RundownExport-DtSvAfBG.css} +1 -1
  120. package/client/assets/RundownExport-DtSvAfBG.css.br +0 -0
  121. package/client/assets/RundownExport-DtSvAfBG.css.gz +0 -0
  122. package/client/assets/Select-B5xNi_tM.js +2 -0
  123. package/client/assets/Select-B5xNi_tM.js.br +0 -0
  124. package/client/assets/Select-B5xNi_tM.js.gz +0 -0
  125. package/client/assets/{Select-CedN80WS.js.map → Select-B5xNi_tM.js.map} +1 -1
  126. package/client/assets/Studio-D4hRKhJ1.js +2 -0
  127. package/client/assets/Studio-D4hRKhJ1.js.br +0 -0
  128. package/client/assets/Studio-D4hRKhJ1.js.gz +0 -0
  129. package/client/assets/Studio-D4hRKhJ1.js.map +1 -0
  130. package/client/assets/{StyleEditor-D2z65PB7.js → StyleEditor-BvcE8dkA.js} +2 -2
  131. package/client/assets/StyleEditor-BvcE8dkA.js.br +3 -0
  132. package/client/assets/StyleEditor-BvcE8dkA.js.gz +0 -0
  133. package/client/assets/{StyleEditor-D2z65PB7.js.map → StyleEditor-BvcE8dkA.js.map} +1 -1
  134. package/client/assets/SuperscriptPeriod-BmHAoSBy.js +2 -0
  135. package/client/assets/SuperscriptPeriod-BmHAoSBy.js.br +0 -0
  136. package/client/assets/SuperscriptPeriod-BmHAoSBy.js.gz +0 -0
  137. package/client/assets/SuperscriptPeriod-BmHAoSBy.js.map +1 -0
  138. package/client/assets/SuperscriptTime-Nou92D8X.js +2 -0
  139. package/client/assets/SuperscriptTime-Nou92D8X.js.br +0 -0
  140. package/client/assets/SuperscriptTime-Nou92D8X.js.gz +0 -0
  141. package/client/assets/{SuperscriptTime-CIrcMcyg.js.map → SuperscriptTime-Nou92D8X.js.map} +1 -1
  142. package/client/assets/TimeElements-XpRwBsaa.js +2 -0
  143. package/client/assets/TimeElements-XpRwBsaa.js.br +0 -0
  144. package/client/assets/TimeElements-XpRwBsaa.js.gz +0 -0
  145. package/client/assets/TimeElements-XpRwBsaa.js.map +1 -0
  146. package/client/assets/TimeElements-c2rTHN98.css +1 -0
  147. package/client/assets/TimeElements-c2rTHN98.css.br +0 -0
  148. package/client/assets/TimeElements-c2rTHN98.css.gz +0 -0
  149. package/client/assets/TimeInput-Bu_5GlHP.js +2 -0
  150. package/client/assets/TimeInput-Bu_5GlHP.js.br +0 -0
  151. package/client/assets/TimeInput-Bu_5GlHP.js.gz +0 -0
  152. package/client/assets/{TimeInput-Dg1naiy3.js.map → TimeInput-Bu_5GlHP.js.map} +1 -1
  153. package/client/assets/{TimeInput-BrVdiuOQ.css → TimeInput-Cu-N5DmX.css} +1 -1
  154. package/client/assets/TimeInput-Cu-N5DmX.css.br +0 -0
  155. package/client/assets/TimeInput-Cu-N5DmX.css.gz +0 -0
  156. package/client/assets/TimelinePage-CQqUB1KT.js +2 -0
  157. package/client/assets/TimelinePage-CQqUB1KT.js.br +0 -0
  158. package/client/assets/TimelinePage-CQqUB1KT.js.gz +0 -0
  159. package/client/assets/TimelinePage-CQqUB1KT.js.map +1 -0
  160. package/client/assets/TimelinePage-CcFl3uul.css +1 -0
  161. package/client/assets/TimelinePage-CcFl3uul.css.br +0 -0
  162. package/client/assets/TimelinePage-CcFl3uul.css.gz +0 -0
  163. package/client/assets/{Timer-BvEmZbmF.css → Timer-B7nk3TMf.css} +1 -1
  164. package/client/assets/Timer-B7nk3TMf.css.br +0 -0
  165. package/client/assets/Timer-B7nk3TMf.css.gz +0 -0
  166. package/client/assets/Timer-CIr2L3gJ.js +2 -0
  167. package/client/assets/Timer-CIr2L3gJ.js.br +0 -0
  168. package/client/assets/Timer-CIr2L3gJ.js.gz +0 -0
  169. package/client/assets/Timer-CIr2L3gJ.js.map +1 -0
  170. package/client/assets/TimerControlExport-4a3Cd9x8.js +2 -0
  171. package/client/assets/TimerControlExport-4a3Cd9x8.js.br +0 -0
  172. package/client/assets/TimerControlExport-4a3Cd9x8.js.gz +0 -0
  173. package/client/assets/{TimerControlExport-C8ECtLBd.js.map → TimerControlExport-4a3Cd9x8.js.map} +1 -1
  174. package/client/assets/{TimerControlExport-D8kqHQB0.css → TimerControlExport-DavNxY9p.css} +1 -1
  175. package/client/assets/TimerControlExport-DavNxY9p.css.br +0 -0
  176. package/client/assets/TimerControlExport-DavNxY9p.css.gz +0 -0
  177. package/client/assets/TitleCard-1U35ek0D.js +2 -0
  178. package/client/assets/TitleCard-1U35ek0D.js.br +0 -0
  179. package/client/assets/TitleCard-1U35ek0D.js.gz +0 -0
  180. package/client/assets/{TitleCard-CZl9wSHS.js.map → TitleCard-1U35ek0D.js.map} +1 -1
  181. package/client/assets/{Tooltip-D9XRnwOW.js → Tooltip-B8y25e3n.js} +2 -2
  182. package/client/assets/Tooltip-B8y25e3n.js.br +0 -0
  183. package/client/assets/Tooltip-B8y25e3n.js.gz +0 -0
  184. package/client/assets/{Tooltip-D9XRnwOW.js.map → Tooltip-B8y25e3n.js.map} +1 -1
  185. package/client/assets/ViewLogo-BHsV7Faa.js +2 -0
  186. package/client/assets/ViewLogo-BHsV7Faa.js.br +0 -0
  187. package/client/assets/ViewLogo-BHsV7Faa.js.gz +0 -0
  188. package/client/assets/{ViewLogo-_3Z1hIHi.js.map → ViewLogo-BHsV7Faa.js.map} +1 -1
  189. package/client/assets/ViewParamsEditor-BMHXOv-K.js +2 -0
  190. package/client/assets/ViewParamsEditor-BMHXOv-K.js.br +0 -0
  191. package/client/assets/ViewParamsEditor-BMHXOv-K.js.gz +0 -0
  192. package/client/assets/ViewParamsEditor-BMHXOv-K.js.map +1 -0
  193. package/client/assets/ViewParamsEditor-CupOV30k.css +1 -0
  194. package/client/assets/ViewParamsEditor-CupOV30k.css.br +0 -0
  195. package/client/assets/ViewParamsEditor-CupOV30k.css.gz +0 -0
  196. package/client/assets/{dateConfig-DRQGMWDF.js → dateConfig-_BhycZza.js} +2 -2
  197. package/client/assets/dateConfig-_BhycZza.js.br +0 -0
  198. package/client/assets/dateConfig-_BhycZza.js.gz +0 -0
  199. package/client/assets/{dateConfig-DRQGMWDF.js.map → dateConfig-_BhycZza.js.map} +1 -1
  200. package/client/assets/{editorSettings-BU0pTMSY.js → editorSettings-DH9ca-nB.js} +2 -2
  201. package/client/assets/editorSettings-DH9ca-nB.js.br +0 -0
  202. package/client/assets/editorSettings-DH9ca-nB.js.gz +0 -0
  203. package/client/assets/{editorSettings-BU0pTMSY.js.map → editorSettings-DH9ca-nB.js.map} +1 -1
  204. package/client/assets/{getProgress-Cw79NL_O.js → getProgress-DlrSzpnf.js} +2 -2
  205. package/client/assets/getProgress-DlrSzpnf.js.br +0 -0
  206. package/client/assets/getProgress-DlrSzpnf.js.gz +0 -0
  207. package/client/assets/{getProgress-Cw79NL_O.js.map → getProgress-DlrSzpnf.js.map} +1 -1
  208. package/client/assets/{index-De0uf0Ta.css → index-BuJoGGff.css} +1 -1
  209. package/client/assets/index-BuJoGGff.css.br +0 -0
  210. package/client/assets/index-BuJoGGff.css.gz +0 -0
  211. package/client/assets/index-CDBQg2fh.js +3 -0
  212. package/client/assets/index-CDBQg2fh.js.br +0 -0
  213. package/client/assets/index-CDBQg2fh.js.gz +0 -0
  214. package/client/assets/index-CDBQg2fh.js.map +1 -0
  215. package/client/assets/offset-CLG4o744.js +2 -0
  216. package/client/assets/offset-CLG4o744.js.br +0 -0
  217. package/client/assets/offset-CLG4o744.js.gz +0 -0
  218. package/client/assets/offset-CLG4o744.js.map +1 -0
  219. package/client/assets/parseUserTime-Cp5iWS7y.js +2 -0
  220. package/client/assets/parseUserTime-Cp5iWS7y.js.br +0 -0
  221. package/client/assets/parseUserTime-Cp5iWS7y.js.gz +0 -0
  222. package/client/assets/{parseUserTime-BeTKj08M.js.map → parseUserTime-Cp5iWS7y.js.map} +1 -1
  223. package/client/assets/playbackstate-B3BKJ8cT.js +2 -0
  224. package/client/assets/playbackstate-B3BKJ8cT.js.br +0 -0
  225. package/client/assets/playbackstate-B3BKJ8cT.js.gz +0 -0
  226. package/client/assets/{playbackstate-B_khF6xU.js.map → playbackstate-B3BKJ8cT.js.map} +1 -1
  227. package/client/assets/{presentation.utils-KwY-ACf7.js → presentation.utils-B-wIv_a5.js} +2 -2
  228. package/client/assets/presentation.utils-B-wIv_a5.js.br +0 -0
  229. package/client/assets/presentation.utils-B-wIv_a5.js.gz +0 -0
  230. package/client/assets/{presentation.utils-KwY-ACf7.js.map → presentation.utils-B-wIv_a5.js.map} +1 -1
  231. package/client/assets/{rundownUtils-BZHazkXR.js → rundownUtils-DJKMt8Ih.js} +2 -2
  232. package/client/assets/rundownUtils-DJKMt8Ih.js.br +0 -0
  233. package/client/assets/rundownUtils-DJKMt8Ih.js.gz +0 -0
  234. package/client/assets/{rundownUtils-BZHazkXR.js.map → rundownUtils-DJKMt8Ih.js.map} +1 -1
  235. package/client/assets/timer.utils-ByC_bcT9.js +2 -0
  236. package/client/assets/timer.utils-ByC_bcT9.js.br +0 -0
  237. package/client/assets/timer.utils-ByC_bcT9.js.gz +0 -0
  238. package/client/assets/timer.utils-ByC_bcT9.js.map +1 -0
  239. package/client/assets/useCustomFields-BUJkzZvM.js +2 -0
  240. package/client/assets/useCustomFields-BUJkzZvM.js.br +2 -0
  241. package/client/assets/useCustomFields-BUJkzZvM.js.gz +0 -0
  242. package/client/assets/{useCustomFields-DqCYz8Kt.js.map → useCustomFields-BUJkzZvM.js.map} +1 -1
  243. package/client/assets/{useFollowComponent-Ctfhf2or.js → useFollowComponent-Eyo4hWVG.js} +2 -2
  244. package/client/assets/useFollowComponent-Eyo4hWVG.js.br +0 -0
  245. package/client/assets/useFollowComponent-Eyo4hWVG.js.gz +0 -0
  246. package/client/assets/{useFollowComponent-Ctfhf2or.js.map → useFollowComponent-Eyo4hWVG.js.map} +1 -1
  247. package/client/assets/{useProjectData-C1hVamxc.js → useProjectData-DGA6K2Zs.js} +2 -2
  248. package/client/assets/useProjectData-DGA6K2Zs.js.br +0 -0
  249. package/client/assets/useProjectData-DGA6K2Zs.js.gz +0 -0
  250. package/client/assets/{useProjectData-C1hVamxc.js.map → useProjectData-DGA6K2Zs.js.map} +1 -1
  251. package/client/assets/useReport-BUCsRa2T.js +2 -0
  252. package/client/assets/useReport-BUCsRa2T.js.br +0 -0
  253. package/client/assets/useReport-BUCsRa2T.js.gz +0 -0
  254. package/client/assets/{useReport-B4dMYcNL.js.map → useReport-BUCsRa2T.js.map} +1 -1
  255. package/client/assets/useRundown-BFae0_bU.js +2 -0
  256. package/client/assets/useRundown-BFae0_bU.js.br +0 -0
  257. package/client/assets/useRundown-BFae0_bU.js.gz +0 -0
  258. package/client/assets/useRundown-BFae0_bU.js.map +1 -0
  259. package/client/assets/useWindowTitle-DU8NlxIu.js +2 -0
  260. package/client/assets/useWindowTitle-DU8NlxIu.js.br +0 -0
  261. package/client/assets/useWindowTitle-DU8NlxIu.js.gz +0 -0
  262. package/client/assets/{useWindowTitle-DqdFTWns.js.map → useWindowTitle-DU8NlxIu.js.map} +1 -1
  263. package/client/assets/{validateEvent-P9sf7C10.js → validateEvent-3adKsP1N.js} +2 -2
  264. package/client/assets/validateEvent-3adKsP1N.js.br +0 -0
  265. package/client/assets/validateEvent-3adKsP1N.js.gz +0 -0
  266. package/client/assets/{validateEvent-P9sf7C10.js.map → validateEvent-3adKsP1N.js.map} +1 -1
  267. package/client/assets/{vendor-CCiSQ9k9.js → vendor-BoH5HFNN.js} +21 -21
  268. package/client/assets/vendor-BoH5HFNN.js.br +0 -0
  269. package/client/assets/vendor-BoH5HFNN.js.gz +0 -0
  270. package/client/assets/{vendor-CCiSQ9k9.js.map → vendor-BoH5HFNN.js.map} +1 -1
  271. package/client/assets/{viewLoader.utils-CmM-4-pk.js → viewLoader.utils-BPOG1xso.js} +2 -2
  272. package/client/assets/viewLoader.utils-BPOG1xso.js.br +0 -0
  273. package/client/assets/viewLoader.utils-BPOG1xso.js.gz +0 -0
  274. package/client/assets/{viewLoader.utils-CmM-4-pk.js.map → viewLoader.utils-BPOG1xso.js.map} +1 -1
  275. package/client/assets/viewUtils-DI8_kmUZ.js +2 -0
  276. package/client/assets/viewUtils-DI8_kmUZ.js.br +0 -0
  277. package/client/assets/viewUtils-DI8_kmUZ.js.gz +0 -0
  278. package/client/assets/viewUtils-DI8_kmUZ.js.map +1 -0
  279. package/client/index.html +3 -3
  280. package/package.json +1 -1
  281. package/server/index.cjs +90 -90
  282. package/client/assets/Backstage-CAjkmeJm.js +0 -2
  283. package/client/assets/Backstage-CAjkmeJm.js.br +0 -0
  284. package/client/assets/Backstage-CAjkmeJm.js.gz +0 -0
  285. package/client/assets/Backstage-CAjkmeJm.js.map +0 -1
  286. package/client/assets/Countdown-ChuA9az_.js +0 -2
  287. package/client/assets/Countdown-ChuA9az_.js.br +0 -0
  288. package/client/assets/Countdown-ChuA9az_.js.gz +0 -0
  289. package/client/assets/Countdown-ChuA9az_.js.map +0 -1
  290. package/client/assets/CustomTranslationModal-C3R_2T5s.js +0 -2
  291. package/client/assets/CustomTranslationModal-C3R_2T5s.js.br +0 -0
  292. package/client/assets/CustomTranslationModal-C3R_2T5s.js.gz +0 -0
  293. package/client/assets/DelayIndicator-vT7n8ypf.js +0 -2
  294. package/client/assets/DelayIndicator-vT7n8ypf.js.br +0 -0
  295. package/client/assets/DelayIndicator-vT7n8ypf.js.gz +0 -0
  296. package/client/assets/EditorFeatureWrapper-DHfuO3EA.js +0 -2
  297. package/client/assets/EditorFeatureWrapper-DHfuO3EA.js.br +0 -0
  298. package/client/assets/EditorFeatureWrapper-DHfuO3EA.js.gz +0 -0
  299. package/client/assets/EditorUtils-BXko-IuN.css +0 -1
  300. package/client/assets/EditorUtils-BXko-IuN.css.br +0 -0
  301. package/client/assets/EditorUtils-BXko-IuN.css.gz +0 -0
  302. package/client/assets/EditorUtils-Da5ALK1P.js +0 -2
  303. package/client/assets/EditorUtils-Da5ALK1P.js.br +0 -0
  304. package/client/assets/EditorUtils-Da5ALK1P.js.gz +0 -0
  305. package/client/assets/EditorUtils-Da5ALK1P.js.map +0 -1
  306. package/client/assets/Empty-gWT_HMeu.js +0 -2
  307. package/client/assets/Empty-gWT_HMeu.js.br +0 -0
  308. package/client/assets/Empty-gWT_HMeu.js.gz +0 -0
  309. package/client/assets/EmptyPage-Dcbg6rmF.js +0 -2
  310. package/client/assets/EmptyPage-Dcbg6rmF.js.br +0 -0
  311. package/client/assets/EmptyPage-Dcbg6rmF.js.gz +0 -0
  312. package/client/assets/FollowButton-CSqJSvix.js +0 -2
  313. package/client/assets/FollowButton-CSqJSvix.js.br +0 -0
  314. package/client/assets/FollowButton-CSqJSvix.js.gz +0 -0
  315. package/client/assets/MessageControlExport-DPgqVb-4.css +0 -1
  316. package/client/assets/MessageControlExport-DPgqVb-4.css.br +0 -0
  317. package/client/assets/MessageControlExport-DPgqVb-4.css.gz +0 -0
  318. package/client/assets/MessageControlExport-lXK21piH.js +0 -2
  319. package/client/assets/MessageControlExport-lXK21piH.js.br +0 -0
  320. package/client/assets/MessageControlExport-lXK21piH.js.gz +0 -0
  321. package/client/assets/MessageControlExport-lXK21piH.js.map +0 -1
  322. package/client/assets/MilestoneEditor-906SVj5M.css +0 -1
  323. package/client/assets/MilestoneEditor-906SVj5M.css.br +0 -0
  324. package/client/assets/MilestoneEditor-906SVj5M.css.gz +0 -0
  325. package/client/assets/MilestoneEditor-Bge8xLrV.js +0 -2
  326. package/client/assets/MilestoneEditor-Bge8xLrV.js.br +0 -0
  327. package/client/assets/MilestoneEditor-Bge8xLrV.js.gz +0 -0
  328. package/client/assets/MilestoneEditor-Bge8xLrV.js.map +0 -1
  329. package/client/assets/Modal-BgJx3SNK.css +0 -1
  330. package/client/assets/Modal-BgJx3SNK.css.br +0 -0
  331. package/client/assets/Modal-BgJx3SNK.css.gz +0 -0
  332. package/client/assets/Modal-C2sFA0zf.js +0 -2
  333. package/client/assets/Modal-C2sFA0zf.js.br +0 -0
  334. package/client/assets/Modal-C2sFA0zf.js.gz +0 -0
  335. package/client/assets/Modal-C2sFA0zf.js.map +0 -1
  336. package/client/assets/MultiPartProgressBar-D3jJZjb5.js +0 -2
  337. package/client/assets/MultiPartProgressBar-D3jJZjb5.js.br +0 -0
  338. package/client/assets/MultiPartProgressBar-D3jJZjb5.js.gz +0 -0
  339. package/client/assets/OperatorExport-BUhxjLUx.js +0 -2
  340. package/client/assets/OperatorExport-BUhxjLUx.js.br +0 -0
  341. package/client/assets/OperatorExport-BUhxjLUx.js.gz +0 -0
  342. package/client/assets/OperatorExport-BUhxjLUx.js.map +0 -1
  343. package/client/assets/OperatorExport-QyLn8tmf.css +0 -1
  344. package/client/assets/OperatorExport-QyLn8tmf.css.br +0 -0
  345. package/client/assets/OperatorExport-QyLn8tmf.css.gz +0 -0
  346. package/client/assets/OverviewWrapper-BveJ6GjK.js +0 -2
  347. package/client/assets/OverviewWrapper-BveJ6GjK.js.br +0 -0
  348. package/client/assets/OverviewWrapper-BveJ6GjK.js.gz +0 -0
  349. package/client/assets/OverviewWrapper-BveJ6GjK.js.map +0 -1
  350. package/client/assets/OverviewWrapper-a18gep4m.css +0 -1
  351. package/client/assets/OverviewWrapper-a18gep4m.css.br +0 -0
  352. package/client/assets/OverviewWrapper-a18gep4m.css.gz +0 -0
  353. package/client/assets/ProjectInfo-z4k3cipS.js +0 -2
  354. package/client/assets/ProjectInfo-z4k3cipS.js.br +0 -0
  355. package/client/assets/ProjectInfo-z4k3cipS.js.gz +0 -0
  356. package/client/assets/ProtectRoute-CrcWfOlG.js +0 -2
  357. package/client/assets/ProtectRoute-CrcWfOlG.js.br +0 -0
  358. package/client/assets/ProtectRoute-CrcWfOlG.js.gz +0 -0
  359. package/client/assets/ProtectedCuesheet-CMTscjjR.css.br +0 -0
  360. package/client/assets/ProtectedCuesheet-CMTscjjR.css.gz +0 -0
  361. package/client/assets/ProtectedCuesheet-Deo4Aw6f.js +0 -2
  362. package/client/assets/ProtectedCuesheet-Deo4Aw6f.js.br +0 -0
  363. package/client/assets/ProtectedCuesheet-Deo4Aw6f.js.gz +0 -0
  364. package/client/assets/ProtectedCuesheet-Deo4Aw6f.js.map +0 -1
  365. package/client/assets/ProtectedEditor-BoiAT_IR.css +0 -1
  366. package/client/assets/ProtectedEditor-BoiAT_IR.css.br +0 -0
  367. package/client/assets/ProtectedEditor-BoiAT_IR.css.gz +0 -0
  368. package/client/assets/ProtectedEditor-C_SYWpL2.js +0 -3
  369. package/client/assets/ProtectedEditor-C_SYWpL2.js.br +0 -0
  370. package/client/assets/ProtectedEditor-C_SYWpL2.js.gz +0 -0
  371. package/client/assets/ProtectedEditor-C_SYWpL2.js.map +0 -1
  372. package/client/assets/RundownEntry-3gFEEUnw.css +0 -1
  373. package/client/assets/RundownEntry-3gFEEUnw.css.br +0 -0
  374. package/client/assets/RundownEntry-3gFEEUnw.css.gz +0 -0
  375. package/client/assets/RundownEntry-D61IqkXb.js +0 -2
  376. package/client/assets/RundownEntry-D61IqkXb.js.br +0 -0
  377. package/client/assets/RundownEntry-D61IqkXb.js.gz +0 -0
  378. package/client/assets/RundownEntry-D61IqkXb.js.map +0 -1
  379. package/client/assets/RundownExport-1zBZurIG.css.br +0 -0
  380. package/client/assets/RundownExport-1zBZurIG.css.gz +0 -0
  381. package/client/assets/RundownExport-C6YhMGOC.js +0 -3
  382. package/client/assets/RundownExport-C6YhMGOC.js.br +0 -0
  383. package/client/assets/RundownExport-C6YhMGOC.js.gz +0 -0
  384. package/client/assets/RundownExport-C6YhMGOC.js.map +0 -1
  385. package/client/assets/Select-CedN80WS.js +0 -2
  386. package/client/assets/Select-CedN80WS.js.br +0 -0
  387. package/client/assets/Select-CedN80WS.js.gz +0 -0
  388. package/client/assets/Studio-DUzPBS6P.js +0 -2
  389. package/client/assets/Studio-DUzPBS6P.js.br +0 -0
  390. package/client/assets/Studio-DUzPBS6P.js.gz +0 -0
  391. package/client/assets/Studio-DUzPBS6P.js.map +0 -1
  392. package/client/assets/StyleEditor-D2z65PB7.js.br +0 -0
  393. package/client/assets/StyleEditor-D2z65PB7.js.gz +0 -0
  394. package/client/assets/SuperscriptTime-CIrcMcyg.js +0 -2
  395. package/client/assets/SuperscriptTime-CIrcMcyg.js.br +0 -0
  396. package/client/assets/SuperscriptTime-CIrcMcyg.js.gz +0 -0
  397. package/client/assets/TimeElements-BcQdm4ZV.css +0 -1
  398. package/client/assets/TimeElements-BcQdm4ZV.css.br +0 -0
  399. package/client/assets/TimeElements-BcQdm4ZV.css.gz +0 -0
  400. package/client/assets/TimeElements-CALNfv6u.js +0 -2
  401. package/client/assets/TimeElements-CALNfv6u.js.br +0 -0
  402. package/client/assets/TimeElements-CALNfv6u.js.gz +0 -0
  403. package/client/assets/TimeElements-CALNfv6u.js.map +0 -1
  404. package/client/assets/TimeInput-BrVdiuOQ.css.br +0 -0
  405. package/client/assets/TimeInput-BrVdiuOQ.css.gz +0 -0
  406. package/client/assets/TimeInput-Dg1naiy3.js +0 -2
  407. package/client/assets/TimeInput-Dg1naiy3.js.br +0 -0
  408. package/client/assets/TimeInput-Dg1naiy3.js.gz +0 -0
  409. package/client/assets/TimelinePage-BJav6PAb.css +0 -1
  410. package/client/assets/TimelinePage-BJav6PAb.css.br +0 -0
  411. package/client/assets/TimelinePage-BJav6PAb.css.gz +0 -0
  412. package/client/assets/TimelinePage-Cwm0svjN.js +0 -2
  413. package/client/assets/TimelinePage-Cwm0svjN.js.br +0 -0
  414. package/client/assets/TimelinePage-Cwm0svjN.js.gz +0 -0
  415. package/client/assets/TimelinePage-Cwm0svjN.js.map +0 -1
  416. package/client/assets/Timer-BVXskRjc.js +0 -2
  417. package/client/assets/Timer-BVXskRjc.js.br +0 -0
  418. package/client/assets/Timer-BVXskRjc.js.gz +0 -0
  419. package/client/assets/Timer-BVXskRjc.js.map +0 -1
  420. package/client/assets/Timer-BvEmZbmF.css.br +0 -0
  421. package/client/assets/Timer-BvEmZbmF.css.gz +0 -0
  422. package/client/assets/TimerControlExport-C8ECtLBd.js +0 -2
  423. package/client/assets/TimerControlExport-C8ECtLBd.js.br +0 -0
  424. package/client/assets/TimerControlExport-C8ECtLBd.js.gz +0 -0
  425. package/client/assets/TimerControlExport-D8kqHQB0.css.br +0 -0
  426. package/client/assets/TimerControlExport-D8kqHQB0.css.gz +0 -0
  427. package/client/assets/TitleCard-CZl9wSHS.js +0 -2
  428. package/client/assets/TitleCard-CZl9wSHS.js.br +0 -0
  429. package/client/assets/TitleCard-CZl9wSHS.js.gz +0 -0
  430. package/client/assets/Tooltip-D9XRnwOW.js.br +0 -4
  431. package/client/assets/Tooltip-D9XRnwOW.js.gz +0 -0
  432. package/client/assets/ViewLogo-_3Z1hIHi.js +0 -2
  433. package/client/assets/ViewLogo-_3Z1hIHi.js.br +0 -0
  434. package/client/assets/ViewLogo-_3Z1hIHi.js.gz +0 -0
  435. package/client/assets/ViewParamsEditor-1Ok39npF.css +0 -1
  436. package/client/assets/ViewParamsEditor-1Ok39npF.css.br +0 -0
  437. package/client/assets/ViewParamsEditor-1Ok39npF.css.gz +0 -0
  438. package/client/assets/ViewParamsEditor-Bca1TIDW.js +0 -2
  439. package/client/assets/ViewParamsEditor-Bca1TIDW.js.br +0 -0
  440. package/client/assets/ViewParamsEditor-Bca1TIDW.js.gz +0 -0
  441. package/client/assets/ViewParamsEditor-Bca1TIDW.js.map +0 -1
  442. package/client/assets/dateConfig-DRQGMWDF.js.br +0 -0
  443. package/client/assets/dateConfig-DRQGMWDF.js.gz +0 -0
  444. package/client/assets/editorSettings-BU0pTMSY.js.br +0 -0
  445. package/client/assets/editorSettings-BU0pTMSY.js.gz +0 -0
  446. package/client/assets/getProgress-Cw79NL_O.js.br +0 -0
  447. package/client/assets/getProgress-Cw79NL_O.js.gz +0 -0
  448. package/client/assets/index-BQEUaoAf.js +0 -3
  449. package/client/assets/index-BQEUaoAf.js.br +0 -0
  450. package/client/assets/index-BQEUaoAf.js.gz +0 -0
  451. package/client/assets/index-BQEUaoAf.js.map +0 -1
  452. package/client/assets/index-De0uf0Ta.css.br +0 -0
  453. package/client/assets/index-De0uf0Ta.css.gz +0 -0
  454. package/client/assets/offset-DJAHqjFW.js +0 -2
  455. package/client/assets/offset-DJAHqjFW.js.br +0 -0
  456. package/client/assets/offset-DJAHqjFW.js.gz +0 -0
  457. package/client/assets/offset-DJAHqjFW.js.map +0 -1
  458. package/client/assets/parseUserTime-BeTKj08M.js +0 -2
  459. package/client/assets/parseUserTime-BeTKj08M.js.br +0 -0
  460. package/client/assets/parseUserTime-BeTKj08M.js.gz +0 -0
  461. package/client/assets/playbackstate-B_khF6xU.js +0 -2
  462. package/client/assets/playbackstate-B_khF6xU.js.br +0 -0
  463. package/client/assets/playbackstate-B_khF6xU.js.gz +0 -0
  464. package/client/assets/presentation.utils-KwY-ACf7.js.br +0 -0
  465. package/client/assets/presentation.utils-KwY-ACf7.js.gz +0 -0
  466. package/client/assets/rundownUtils-BZHazkXR.js.br +0 -0
  467. package/client/assets/rundownUtils-BZHazkXR.js.gz +0 -0
  468. package/client/assets/useCustomFields-DqCYz8Kt.js +0 -2
  469. package/client/assets/useCustomFields-DqCYz8Kt.js.br +0 -0
  470. package/client/assets/useCustomFields-DqCYz8Kt.js.gz +0 -0
  471. package/client/assets/useFollowComponent-Ctfhf2or.js.br +0 -0
  472. package/client/assets/useFollowComponent-Ctfhf2or.js.gz +0 -0
  473. package/client/assets/useProjectData-C1hVamxc.js.br +0 -0
  474. package/client/assets/useProjectData-C1hVamxc.js.gz +0 -0
  475. package/client/assets/useReport-B4dMYcNL.js +0 -2
  476. package/client/assets/useReport-B4dMYcNL.js.br +0 -0
  477. package/client/assets/useReport-B4dMYcNL.js.gz +0 -0
  478. package/client/assets/useRundown-BfpjcCEJ.js +0 -2
  479. package/client/assets/useRundown-BfpjcCEJ.js.br +0 -0
  480. package/client/assets/useRundown-BfpjcCEJ.js.gz +0 -0
  481. package/client/assets/useRundown-BfpjcCEJ.js.map +0 -1
  482. package/client/assets/useWindowTitle-DqdFTWns.js +0 -2
  483. package/client/assets/useWindowTitle-DqdFTWns.js.br +0 -0
  484. package/client/assets/useWindowTitle-DqdFTWns.js.gz +0 -0
  485. package/client/assets/validateEvent-P9sf7C10.js.br +0 -3
  486. package/client/assets/validateEvent-P9sf7C10.js.gz +0 -0
  487. package/client/assets/vendor-CCiSQ9k9.js.br +0 -0
  488. package/client/assets/vendor-CCiSQ9k9.js.gz +0 -0
  489. package/client/assets/viewLoader.utils-CmM-4-pk.js.br +0 -0
  490. package/client/assets/viewLoader.utils-CmM-4-pk.js.gz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TimerControlExport-C8ECtLBd.js","sources":["../../../../packages/utils/src/validate-action/validatePlayback.ts","../../src/features/control/playback/tap-button/TapButton.tsx","../../src/features/control/playback/add-time/AddTime.tsx","../../src/features/control/playback/aux-timer/AuxTimer.tsx","../../src/features/control/playback/playback-buttons/PlaybackButtons.tsx","../../src/features/control/playback/timer-display/TimerDisplay.tsx","../../src/features/control/playback/playback-timer/PlaybackTimer.tsx","../../src/features/control/playback/PlaybackControl.tsx","../../src/features/control/playback/TimerControlExport.tsx"],"sourcesContent":["import { Playback, TimerPhase } from 'ontime-types';\n\n/**\n * Simple rules to determine whether a playback action is valid\n */\nexport function validatePlayback(currentPlayback: Playback, timerPhase: TimerPhase) {\n return {\n start: currentPlayback !== Playback.Stop && currentPlayback !== Playback.Play,\n pause: currentPlayback === Playback.Play,\n roll: currentPlayback !== Playback.Roll && timerPhase !== TimerPhase.Overtime,\n stop: currentPlayback !== Playback.Stop,\n reload: currentPlayback !== Playback.Stop && currentPlayback !== Playback.Roll,\n };\n}\n","import { ForwardedRef, forwardRef, PropsWithChildren } from 'react';\nimport { Playback } from 'ontime-types';\n\nimport { cx } from '../../../../common/utils/styleUtils';\n\nimport style from './TapButton.module.scss';\n\ninterface TapButtonProps {\n disabled?: boolean;\n aspect?: 'normal' | 'square' | 'fill' | 'tight';\n free?: boolean;\n onClick: () => void;\n theme?: Playback | 'neutral';\n active?: boolean;\n className?: string;\n}\n\nconst TapButton = forwardRef((props: PropsWithChildren<TapButtonProps>, ref: ForwardedRef<HTMLButtonElement>) => {\n const { children, disabled, onClick, theme = 'neutral', aspect = 'normal', active, className } = props;\n\n return (\n <button\n className={cx([style.tapButton, className, style[theme], style[aspect], active && style.active])}\n disabled={disabled}\n type='button'\n onClick={onClick}\n ref={ref}\n >\n {children}\n </button>\n );\n});\n\nTapButton.displayName = 'TabButton';\nexport default TapButton;\n","import { IoAdd, IoRemove } from 'react-icons/io5';\nimport { useLocalStorage } from '@mantine/hooks';\nimport { Playback } from 'ontime-types';\nimport { MILLIS_PER_HOUR, parseUserTime } from 'ontime-utils';\n\nimport TimeInput from '../../../../common/components/input/time-input/TimeInput';\nimport { setPlayback } from '../../../../common/hooks/useSocket';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './AddTime.module.scss';\n\ninterface AddTimeProps {\n playback: Playback;\n}\n\nexport default function AddTime(props: AddTimeProps) {\n const { playback } = props;\n const [timeInMs, setTime] = useLocalStorage({ key: 'add-time', defaultValue: 300_000 }); // 5 minutes\n\n const handleTimeChange = (_field: string, value: string) => {\n const newTimeInMs = parseUserTime(value);\n // cap add time to 1 hour\n setTime(Math.min(newTimeInMs, MILLIS_PER_HOUR));\n };\n\n const handleAddTime = (direction: 'add' | 'remove') => {\n // API expects input in milliseconds\n if (direction === 'add') {\n setPlayback.addTime(timeInMs);\n } else {\n setPlayback.addTime(-1 * timeInMs);\n }\n };\n\n const canAddTime = playback === Playback.Play || playback === Playback.Pause;\n const doDisableButtons = !canAddTime || timeInMs === 0;\n\n return (\n <div className={style.addTime}>\n <TimeInput name='addtime' submitHandler={handleTimeChange} time={timeInMs} placeholder='Add time' />\n <div className={style.addButtons}>\n <TapButton onClick={() => handleAddTime('remove')} disabled={doDisableButtons} className={style.tallButtons}>\n <IoRemove />\n </TapButton>\n <TapButton onClick={() => handleAddTime('add')} disabled={doDisableButtons} className={style.tallButtons}>\n <IoAdd />\n </TapButton>\n </div>\n </div>\n );\n}\n","import { IoArrowDown, IoArrowUp, IoPause, IoPlay, IoStop } from 'react-icons/io5';\nimport { Playback, SimpleDirection, SimplePlayback } from 'ontime-types';\nimport { millisToString, parseUserTime } from 'ontime-utils';\n\nimport TimeInput from '../../../../common/components/input/time-input/TimeInput';\nimport { setAuxTimer, useAuxTimerControl, useAuxTimerTime } from '../../../../common/hooks/useSocket';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './AuxTimer.module.scss';\n\ninterface AuxTimerProps {\n index: number;\n}\n\nexport function AuxTimer({ index }: AuxTimerProps) {\n const { playback, direction } = useAuxTimerControl(index);\n\n const { stop, setDirection } = setAuxTimer;\n\n const toggleDirection = () => {\n const newDirection = direction === SimpleDirection.CountDown ? SimpleDirection.CountUp : SimpleDirection.CountDown;\n setDirection(index, newDirection);\n };\n\n const isActive = playback !== SimplePlayback.Stop;\n const playbackAction = playback === SimplePlayback.Start ? 'pause' : 'play';\n\n return (\n <label className={style.label}>\n Aux Timer {index}\n <div className={style.controls}>\n <div className={style.input}>\n <AuxTimerInput index={index} isActive={isActive} />\n <TapButton onClick={toggleDirection} aspect='tight' disabled={isActive}>\n {direction === SimpleDirection.CountDown && <IoArrowDown data-testid={`aux-timer-direction-${index}`} />}\n {direction === SimpleDirection.CountUp && <IoArrowUp data-testid={`aux-timer-direction-${index}`} />}\n </TapButton>\n </div>\n <div className={style.twoSides}>\n <AuxTogglePlay index={index} action={playbackAction} />\n <TapButton onClick={() => stop(index)} theme={Playback.Stop} disabled={!isActive}>\n <IoStop data-testid={`aux-timer-stop-${index}`} />\n </TapButton>\n </div>\n </div>\n </label>\n );\n}\n\ninterface AuxTimerInputProps {\n index: number;\n isActive: boolean;\n}\n\nfunction AuxTimerInput({ index, isActive }: AuxTimerInputProps) {\n const newTimeInMs = useAuxTimerTime(index);\n const { setDuration } = setAuxTimer;\n\n const handleTimeUpdate = (_field: string, value: string) => {\n const newTimeInMs = parseUserTime(value);\n setDuration(index, newTimeInMs);\n };\n\n if (isActive) {\n return (\n <div className={style.fakeInput} data-testid={`time-label-aux${index}`}>\n {millisToString(newTimeInMs)}\n </div>\n );\n }\n\n return (\n <TimeInput submitHandler={handleTimeUpdate} name={`aux${index}`} time={newTimeInMs} placeholder={`Aux ${index}`} />\n );\n}\n\ninterface AuxTogglePlayProps {\n index: number;\n action: 'play' | 'pause';\n}\n\nfunction AuxTogglePlay({ index, action }: AuxTogglePlayProps) {\n const { start, pause } = setAuxTimer;\n\n if (action === 'play') {\n return (\n <TapButton onClick={() => start(index)} theme={Playback.Play}>\n <IoPlay data-testid={`aux-timer-start-${index}`} />\n </TapButton>\n );\n }\n\n return (\n <TapButton onClick={() => pause(index)} theme={Playback.Pause}>\n <IoPause data-testid={`aux-timer-pause-${index}`} />\n </TapButton>\n );\n}\n","import { useMemo } from 'react';\nimport { IoPause, IoPlay, IoPlaySkipBack, IoPlaySkipForward, IoReload, IoStop } from 'react-icons/io5';\nimport { Playback, TimerPhase } from 'ontime-types';\nimport { validatePlayback } from 'ontime-utils';\n\nimport { setPlayback } from '../../../../common/hooks/useSocket';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './PlaybackButtons.module.scss';\n\ninterface PlaybackButtonsProps {\n playback: Playback;\n numEvents: number;\n selectedEventIndex: number | null;\n timerPhase: TimerPhase;\n}\n\nexport default function PlaybackButtons(props: PlaybackButtonsProps) {\n const { playback, numEvents, selectedEventIndex, timerPhase } = props;\n\n const isRolling = playback === Playback.Roll;\n const isPlaying = playback === Playback.Play;\n const isPaused = playback === Playback.Pause;\n const isArmed = playback === Playback.Armed;\n\n const isFirst = selectedEventIndex === 0;\n const isLast = selectedEventIndex === numEvents - 1;\n const noEvents = numEvents === 0;\n\n const disableGo = isRolling || noEvents;\n const disableNext = isRolling || noEvents || isLast;\n const disablePrev = isRolling || noEvents || isFirst;\n\n const playbackCan = validatePlayback(playback, timerPhase);\n const disableStart = !playbackCan.start;\n const disablePause = !playbackCan.pause;\n const disableRoll = !playbackCan.roll || noEvents;\n const disableStop = !playbackCan.stop;\n const disableReload = !playbackCan.reload;\n\n const [goModeAction, goModeText] = useMemo(() => {\n if (isArmed) {\n return [setPlayback.start, 'Start'];\n } else if (isLast) {\n return [setPlayback.stop, 'Finish'];\n } else if (selectedEventIndex === null) {\n return [setPlayback.startNext, 'Start'];\n }\n return [setPlayback.startNext, 'Next'];\n }, [isArmed, isLast, selectedEventIndex]);\n\n return (\n <div className={style.buttonContainer}>\n <TapButton disabled={disableGo} onClick={goModeAction} aspect='fill' className={style.go}>\n {goModeText}\n </TapButton>\n <div className={style.playbackContainer}>\n <TapButton onClick={setPlayback.start} disabled={disableStart} theme={Playback.Play} active={isPlaying}>\n <IoPlay />\n </TapButton>\n\n <TapButton onClick={setPlayback.pause} disabled={disablePause} theme={Playback.Pause} active={isPaused}>\n <IoPause />\n </TapButton>\n </div>\n <div className={style.transportContainer}>\n <TapButton onClick={setPlayback.previous} disabled={disablePrev}>\n <IoPlaySkipBack />\n </TapButton>\n <TapButton onClick={setPlayback.next} disabled={disableNext}>\n <IoPlaySkipForward />\n </TapButton>\n </div>\n <div className={style.extra}>\n <TapButton onClick={setPlayback.roll} disabled={disableRoll} theme={Playback.Roll} active={isRolling}>\n Roll\n </TapButton>\n <TapButton onClick={setPlayback.reload} disabled={disableReload}>\n <IoReload className={style.invertX} />\n </TapButton>\n <TapButton onClick={setPlayback.stop} disabled={disableStop} theme={Playback.Stop}>\n <IoStop />\n </TapButton>\n </div>\n </div>\n );\n}\n","import { MaybeNumber } from 'ontime-types';\nimport { millisToString } from 'ontime-utils';\n\nimport { cx, timerPlaceholder } from '../../../../common/utils/styleUtils';\n\nimport style from './TimerDisplay.module.scss';\n\ninterface TimerDisplayProps {\n time: MaybeNumber;\n}\n\n/**\n * Displays time in ms in formatted timetag\n * Used in editor\n */\nexport default function TimerDisplay(props: TimerDisplayProps) {\n const { time } = props;\n\n const isNegative = (time ?? 0) < 0;\n const display =\n time == null ? timerPlaceholder : millisToString(time, { fallback: timerPlaceholder }).replace('-', '');\n const classes = cx([style.timer, isNegative ? style.finished : null, time === null && style.muted]);\n\n return <div className={classes}>{display}</div>;\n}\n","import { PropsWithChildren } from 'react';\nimport { MaybeNumber, Playback, TimerPhase } from 'ontime-types';\nimport { dayInMs, millisToString } from 'ontime-utils';\n\nimport AppLink from '../../../../common/components/link/app-link/AppLink';\nimport Tooltip from '../../../../common/components/tooltip/Tooltip';\nimport { useTimer } from '../../../../common/hooks/useSocket';\nimport useReport from '../../../../common/hooks-query/useReport';\nimport { formatDuration } from '../../../../common/utils/time';\nimport TimerDisplay from '../timer-display/TimerDisplay';\n\nimport style from './PlaybackTimer.module.scss';\n\nfunction resolveAddedTimeLabel(addedTime: number) {\n if (addedTime > 0) {\n return `Added ${formatDuration(addedTime, false)}`;\n }\n\n if (addedTime < 0) {\n return `Removed ${formatDuration(Math.abs(addedTime), false)}`;\n }\n\n return '';\n}\n\nexport default function PlaybackTimer({ children }: PropsWithChildren) {\n const timer = useTimer();\n\n const isRolling = timer.playback === Playback.Roll;\n const isWaiting = timer.phase === TimerPhase.Pending;\n const isOvertime = timer.phase === TimerPhase.Overtime;\n const hasAddedTime = Boolean(timer.addedTime);\n\n const rollLabel = isRolling ? 'Roll mode active' : '';\n\n const addedTimeLabel = resolveAddedTimeLabel(timer.addedTime);\n\n return (\n <div className={style.timeContainer}>\n <div className={style.indicators}>\n <Tooltip text={rollLabel} render={<div />} className={style.indicatorRoll} data-active={isRolling} />\n <div className={style.indicatorNegative} data-active={isOvertime} />\n <Tooltip text={addedTimeLabel} render={<div />} className={style.indicatorDelay} data-active={hasAddedTime} />\n </div>\n <TimerDisplay time={isWaiting ? timer.secondaryTimer : timer.current} />\n <div className={style.status}>\n {isWaiting ? (\n <span className={style.rolltag}>Roll: Countdown to start</span>\n ) : (\n <RunningStatus startedAt={timer.startedAt} expectedFinish={timer.expectedFinish} playback={timer.playback} />\n )}\n </div>\n {children}\n </div>\n );\n}\n\ninterface RunningStatusProps {\n startedAt: MaybeNumber;\n expectedFinish: MaybeNumber;\n playback: Playback;\n}\nfunction RunningStatus({ startedAt, expectedFinish, playback }: RunningStatusProps) {\n if (playback === Playback.Stop) {\n return <StoppedStatus />;\n }\n\n const started = millisToString(startedAt);\n const finishedMs = expectedFinish !== null ? expectedFinish % dayInMs : null;\n const finish = millisToString(finishedMs);\n\n return (\n <>\n <span className={style.start}>\n <span className={style.tag}>Started at</span>\n <span className={style.time}>{started}</span>\n </span>\n <span className={style.finish}>\n <span className={style.tag}>Expect end</span>\n <span className={style.time}>{finish}</span>\n </span>\n </>\n );\n}\n\nfunction StoppedStatus() {\n const { data } = useReport();\n const hasReport = Object.keys(data).length > 0;\n\n if (hasReport) {\n return <AppLink search='settings=sharing__report'>Go to report management</AppLink>;\n }\n\n return null;\n}\n","import { usePlaybackControl } from '../../../common/hooks/useSocket';\n\nimport AddTime from './add-time/AddTime';\nimport { AuxTimer } from './aux-timer/AuxTimer';\nimport PlaybackButtons from './playback-buttons/PlaybackButtons';\nimport PlaybackTimer from './playback-timer/PlaybackTimer';\n\nimport style from './PlaybackControl.module.scss';\n\nexport default function PlaybackControl() {\n const data = usePlaybackControl();\n\n return (\n <div className={style.mainContainer}>\n <PlaybackTimer>\n <AddTime playback={data.playback} />\n </PlaybackTimer>\n <PlaybackButtons\n playback={data.playback}\n numEvents={data.numEvents}\n selectedEventIndex={data.selectedEventIndex}\n timerPhase={data.timerPhase}\n />\n <div className={style.auxTimers}>\n <AuxTimer index={1} />\n <AuxTimer index={2} />\n <AuxTimer index={3} />\n </div>\n </div>\n );\n}\n","import { memo } from 'react';\n\nimport { Corner } from '../../../common/components/editor-utils/EditorUtils';\nimport ErrorBoundary from '../../../common/components/error-boundary/ErrorBoundary';\nimport ViewNavigationMenu from '../../../common/components/navigation-menu/ViewNavigationMenu';\nimport ProtectRoute from '../../../common/components/protect-route/ProtectRoute';\nimport { handleLinks } from '../../../common/utils/linkUtils';\n\nimport PlaybackControl from './PlaybackControl';\n\nimport style from '../../../views/editor/Editor.module.scss';\n\nexport default memo(TimerControlExport);\nfunction TimerControlExport() {\n const isExtracted = window.location.pathname.includes('/timercontrol');\n\n return (\n <ProtectRoute permission='editor'>\n <div className={style.playback} data-testid='panel-timer-control'>\n {!isExtracted && <Corner onClick={(event) => handleLinks('timercontrol', event)} />}\n {isExtracted && <ViewNavigationMenu suppressSettings />}\n\n <div className={style.content}>\n <ErrorBoundary>\n <PlaybackControl />\n </ErrorBoundary>\n </div>\n </div>\n </ProtectRoute>\n );\n}\n"],"names":["validatePlayback","currentPlayback","timerPhase","Playback","TimerPhase","TapButton","forwardRef","props","ref","children","disabled","onClick","theme","aspect","active","className","jsx","cx","style","AddTime","playback","timeInMs","setTime","useLocalStorage","handleTimeChange","_field","value","newTimeInMs","parseUserTime","MILLIS_PER_HOUR","handleAddTime","direction","setPlayback","doDisableButtons","jsxs","TimeInput","IoRemove","IoAdd","AuxTimer","index","useAuxTimerControl","stop","setDirection","setAuxTimer","toggleDirection","newDirection","SimpleDirection","isActive","SimplePlayback","playbackAction","AuxTimerInput","IoArrowDown","IoArrowUp","AuxTogglePlay","IoStop","useAuxTimerTime","setDuration","handleTimeUpdate","millisToString","action","start","pause","IoPlay","IoPause","PlaybackButtons","numEvents","selectedEventIndex","isRolling","isPlaying","isPaused","isArmed","isFirst","isLast","noEvents","disableGo","disableNext","disablePrev","playbackCan","disableStart","disablePause","disableRoll","disableStop","disableReload","goModeAction","goModeText","useMemo","IoPlaySkipBack","IoPlaySkipForward","IoReload","TimerDisplay","time","isNegative","display","timerPlaceholder","classes","resolveAddedTimeLabel","addedTime","formatDuration","PlaybackTimer","timer","useTimer","isWaiting","isOvertime","hasAddedTime","rollLabel","addedTimeLabel","Tooltip","RunningStatus","startedAt","expectedFinish","StoppedStatus","started","finishedMs","dayInMs","finish","Fragment","data","useReport","AppLink","PlaybackControl","usePlaybackControl","memo","TimerControlExport","isExtracted","ProtectRoute","Corner","event","handleLinks","ViewNavigationMenu","ErrorBoundary"],"mappings":"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"}
1
+ {"version":3,"file":"TimerControlExport-4a3Cd9x8.js","sources":["../../../../packages/utils/src/validate-action/validatePlayback.ts","../../src/features/control/playback/tap-button/TapButton.tsx","../../src/features/control/playback/add-time/AddTime.tsx","../../src/features/control/playback/aux-timer/AuxTimer.tsx","../../src/features/control/playback/playback-buttons/PlaybackButtons.tsx","../../src/features/control/playback/timer-display/TimerDisplay.tsx","../../src/features/control/playback/playback-timer/PlaybackTimer.tsx","../../src/features/control/playback/PlaybackControl.tsx","../../src/features/control/playback/TimerControlExport.tsx"],"sourcesContent":["import { Playback, TimerPhase } from 'ontime-types';\n\n/**\n * Simple rules to determine whether a playback action is valid\n */\nexport function validatePlayback(currentPlayback: Playback, timerPhase: TimerPhase) {\n return {\n start: currentPlayback !== Playback.Stop && currentPlayback !== Playback.Play,\n pause: currentPlayback === Playback.Play,\n roll: currentPlayback !== Playback.Roll && timerPhase !== TimerPhase.Overtime,\n stop: currentPlayback !== Playback.Stop,\n reload: currentPlayback !== Playback.Stop && currentPlayback !== Playback.Roll,\n };\n}\n","import { ForwardedRef, forwardRef, PropsWithChildren } from 'react';\nimport { Playback } from 'ontime-types';\n\nimport { cx } from '../../../../common/utils/styleUtils';\n\nimport style from './TapButton.module.scss';\n\ninterface TapButtonProps {\n disabled?: boolean;\n aspect?: 'normal' | 'square' | 'fill' | 'tight';\n free?: boolean;\n onClick: () => void;\n theme?: Playback | 'neutral';\n active?: boolean;\n className?: string;\n}\n\nconst TapButton = forwardRef((props: PropsWithChildren<TapButtonProps>, ref: ForwardedRef<HTMLButtonElement>) => {\n const { children, disabled, onClick, theme = 'neutral', aspect = 'normal', active, className } = props;\n\n return (\n <button\n className={cx([style.tapButton, className, style[theme], style[aspect], active && style.active])}\n disabled={disabled}\n type='button'\n onClick={onClick}\n ref={ref}\n >\n {children}\n </button>\n );\n});\n\nTapButton.displayName = 'TabButton';\nexport default TapButton;\n","import { IoAdd, IoRemove } from 'react-icons/io5';\nimport { useLocalStorage } from '@mantine/hooks';\nimport { Playback } from 'ontime-types';\nimport { MILLIS_PER_HOUR, parseUserTime } from 'ontime-utils';\n\nimport TimeInput from '../../../../common/components/input/time-input/TimeInput';\nimport { setPlayback } from '../../../../common/hooks/useSocket';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './AddTime.module.scss';\n\ninterface AddTimeProps {\n playback: Playback;\n}\n\nexport default function AddTime(props: AddTimeProps) {\n const { playback } = props;\n const [timeInMs, setTime] = useLocalStorage({ key: 'add-time', defaultValue: 300_000 }); // 5 minutes\n\n const handleTimeChange = (_field: string, value: string) => {\n const newTimeInMs = parseUserTime(value);\n // cap add time to 1 hour\n setTime(Math.min(newTimeInMs, MILLIS_PER_HOUR));\n };\n\n const handleAddTime = (direction: 'add' | 'remove') => {\n // API expects input in milliseconds\n if (direction === 'add') {\n setPlayback.addTime(timeInMs);\n } else {\n setPlayback.addTime(-1 * timeInMs);\n }\n };\n\n const canAddTime = playback === Playback.Play || playback === Playback.Pause;\n const doDisableButtons = !canAddTime || timeInMs === 0;\n\n return (\n <div className={style.addTime}>\n <TimeInput name='addtime' submitHandler={handleTimeChange} time={timeInMs} placeholder='Add time' />\n <div className={style.addButtons}>\n <TapButton onClick={() => handleAddTime('remove')} disabled={doDisableButtons} className={style.tallButtons}>\n <IoRemove />\n </TapButton>\n <TapButton onClick={() => handleAddTime('add')} disabled={doDisableButtons} className={style.tallButtons}>\n <IoAdd />\n </TapButton>\n </div>\n </div>\n );\n}\n","import { IoArrowDown, IoArrowUp, IoPause, IoPlay, IoStop } from 'react-icons/io5';\nimport { Playback, SimpleDirection, SimplePlayback } from 'ontime-types';\nimport { millisToString, parseUserTime } from 'ontime-utils';\n\nimport TimeInput from '../../../../common/components/input/time-input/TimeInput';\nimport { setAuxTimer, useAuxTimerControl, useAuxTimerTime } from '../../../../common/hooks/useSocket';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './AuxTimer.module.scss';\n\ninterface AuxTimerProps {\n index: number;\n}\n\nexport function AuxTimer({ index }: AuxTimerProps) {\n const { playback, direction } = useAuxTimerControl(index);\n\n const { stop, setDirection } = setAuxTimer;\n\n const toggleDirection = () => {\n const newDirection = direction === SimpleDirection.CountDown ? SimpleDirection.CountUp : SimpleDirection.CountDown;\n setDirection(index, newDirection);\n };\n\n const isActive = playback !== SimplePlayback.Stop;\n const playbackAction = playback === SimplePlayback.Start ? 'pause' : 'play';\n\n return (\n <label className={style.label}>\n Aux Timer {index}\n <div className={style.controls}>\n <div className={style.input}>\n <AuxTimerInput index={index} isActive={isActive} />\n <TapButton onClick={toggleDirection} aspect='tight' disabled={isActive}>\n {direction === SimpleDirection.CountDown && <IoArrowDown data-testid={`aux-timer-direction-${index}`} />}\n {direction === SimpleDirection.CountUp && <IoArrowUp data-testid={`aux-timer-direction-${index}`} />}\n </TapButton>\n </div>\n <div className={style.twoSides}>\n <AuxTogglePlay index={index} action={playbackAction} />\n <TapButton onClick={() => stop(index)} theme={Playback.Stop} disabled={!isActive}>\n <IoStop data-testid={`aux-timer-stop-${index}`} />\n </TapButton>\n </div>\n </div>\n </label>\n );\n}\n\ninterface AuxTimerInputProps {\n index: number;\n isActive: boolean;\n}\n\nfunction AuxTimerInput({ index, isActive }: AuxTimerInputProps) {\n const newTimeInMs = useAuxTimerTime(index);\n const { setDuration } = setAuxTimer;\n\n const handleTimeUpdate = (_field: string, value: string) => {\n const newTimeInMs = parseUserTime(value);\n setDuration(index, newTimeInMs);\n };\n\n if (isActive) {\n return (\n <div className={style.fakeInput} data-testid={`time-label-aux${index}`}>\n {millisToString(newTimeInMs)}\n </div>\n );\n }\n\n return (\n <TimeInput submitHandler={handleTimeUpdate} name={`aux${index}`} time={newTimeInMs} placeholder={`Aux ${index}`} />\n );\n}\n\ninterface AuxTogglePlayProps {\n index: number;\n action: 'play' | 'pause';\n}\n\nfunction AuxTogglePlay({ index, action }: AuxTogglePlayProps) {\n const { start, pause } = setAuxTimer;\n\n if (action === 'play') {\n return (\n <TapButton onClick={() => start(index)} theme={Playback.Play}>\n <IoPlay data-testid={`aux-timer-start-${index}`} />\n </TapButton>\n );\n }\n\n return (\n <TapButton onClick={() => pause(index)} theme={Playback.Pause}>\n <IoPause data-testid={`aux-timer-pause-${index}`} />\n </TapButton>\n );\n}\n","import { useMemo } from 'react';\nimport { IoPause, IoPlay, IoPlaySkipBack, IoPlaySkipForward, IoReload, IoStop } from 'react-icons/io5';\nimport { Playback, TimerPhase } from 'ontime-types';\nimport { validatePlayback } from 'ontime-utils';\n\nimport { setPlayback } from '../../../../common/hooks/useSocket';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './PlaybackButtons.module.scss';\n\ninterface PlaybackButtonsProps {\n playback: Playback;\n numEvents: number;\n selectedEventIndex: number | null;\n timerPhase: TimerPhase;\n}\n\nexport default function PlaybackButtons(props: PlaybackButtonsProps) {\n const { playback, numEvents, selectedEventIndex, timerPhase } = props;\n\n const isRolling = playback === Playback.Roll;\n const isPlaying = playback === Playback.Play;\n const isPaused = playback === Playback.Pause;\n const isArmed = playback === Playback.Armed;\n\n const isFirst = selectedEventIndex === 0;\n const isLast = selectedEventIndex === numEvents - 1;\n const noEvents = numEvents === 0;\n\n const disableGo = isRolling || noEvents;\n const disableNext = isRolling || noEvents || isLast;\n const disablePrev = isRolling || noEvents || isFirst;\n\n const playbackCan = validatePlayback(playback, timerPhase);\n const disableStart = !playbackCan.start;\n const disablePause = !playbackCan.pause;\n const disableRoll = !playbackCan.roll || noEvents;\n const disableStop = !playbackCan.stop;\n const disableReload = !playbackCan.reload;\n\n const [goModeAction, goModeText] = useMemo(() => {\n if (isArmed) {\n return [setPlayback.start, 'Start'];\n } else if (isLast) {\n return [setPlayback.stop, 'Finish'];\n } else if (selectedEventIndex === null) {\n return [setPlayback.startNext, 'Start'];\n }\n return [setPlayback.startNext, 'Next'];\n }, [isArmed, isLast, selectedEventIndex]);\n\n return (\n <div className={style.buttonContainer}>\n <TapButton disabled={disableGo} onClick={goModeAction} aspect='fill' className={style.go}>\n {goModeText}\n </TapButton>\n <div className={style.playbackContainer}>\n <TapButton onClick={setPlayback.start} disabled={disableStart} theme={Playback.Play} active={isPlaying}>\n <IoPlay />\n </TapButton>\n\n <TapButton onClick={setPlayback.pause} disabled={disablePause} theme={Playback.Pause} active={isPaused}>\n <IoPause />\n </TapButton>\n </div>\n <div className={style.transportContainer}>\n <TapButton onClick={setPlayback.previous} disabled={disablePrev}>\n <IoPlaySkipBack />\n </TapButton>\n <TapButton onClick={setPlayback.next} disabled={disableNext}>\n <IoPlaySkipForward />\n </TapButton>\n </div>\n <div className={style.extra}>\n <TapButton onClick={setPlayback.roll} disabled={disableRoll} theme={Playback.Roll} active={isRolling}>\n Roll\n </TapButton>\n <TapButton onClick={setPlayback.reload} disabled={disableReload}>\n <IoReload className={style.invertX} />\n </TapButton>\n <TapButton onClick={setPlayback.stop} disabled={disableStop} theme={Playback.Stop}>\n <IoStop />\n </TapButton>\n </div>\n </div>\n );\n}\n","import { MaybeNumber } from 'ontime-types';\nimport { millisToString } from 'ontime-utils';\n\nimport { cx, timerPlaceholder } from '../../../../common/utils/styleUtils';\n\nimport style from './TimerDisplay.module.scss';\n\ninterface TimerDisplayProps {\n time: MaybeNumber;\n}\n\n/**\n * Displays time in ms in formatted timetag\n * Used in editor\n */\nexport default function TimerDisplay(props: TimerDisplayProps) {\n const { time } = props;\n\n const isNegative = (time ?? 0) < 0;\n const display =\n time == null ? timerPlaceholder : millisToString(time, { fallback: timerPlaceholder }).replace('-', '');\n const classes = cx([style.timer, isNegative ? style.finished : null, time === null && style.muted]);\n\n return <div className={classes}>{display}</div>;\n}\n","import { PropsWithChildren } from 'react';\nimport { MaybeNumber, Playback, TimerPhase } from 'ontime-types';\nimport { dayInMs, millisToString } from 'ontime-utils';\n\nimport AppLink from '../../../../common/components/link/app-link/AppLink';\nimport Tooltip from '../../../../common/components/tooltip/Tooltip';\nimport { useTimer } from '../../../../common/hooks/useSocket';\nimport useReport from '../../../../common/hooks-query/useReport';\nimport { formatDuration } from '../../../../common/utils/time';\nimport TimerDisplay from '../timer-display/TimerDisplay';\n\nimport style from './PlaybackTimer.module.scss';\n\nfunction resolveAddedTimeLabel(addedTime: number) {\n if (addedTime > 0) {\n return `Added ${formatDuration(addedTime, false)}`;\n }\n\n if (addedTime < 0) {\n return `Removed ${formatDuration(Math.abs(addedTime), false)}`;\n }\n\n return '';\n}\n\nexport default function PlaybackTimer({ children }: PropsWithChildren) {\n const timer = useTimer();\n\n const isRolling = timer.playback === Playback.Roll;\n const isWaiting = timer.phase === TimerPhase.Pending;\n const isOvertime = timer.phase === TimerPhase.Overtime;\n const hasAddedTime = Boolean(timer.addedTime);\n\n const rollLabel = isRolling ? 'Roll mode active' : '';\n\n const addedTimeLabel = resolveAddedTimeLabel(timer.addedTime);\n\n return (\n <div className={style.timeContainer}>\n <div className={style.indicators}>\n <Tooltip text={rollLabel} render={<div />} className={style.indicatorRoll} data-active={isRolling} />\n <div className={style.indicatorNegative} data-active={isOvertime} />\n <Tooltip text={addedTimeLabel} render={<div />} className={style.indicatorDelay} data-active={hasAddedTime} />\n </div>\n <TimerDisplay time={isWaiting ? timer.secondaryTimer : timer.current} />\n <div className={style.status}>\n {isWaiting ? (\n <span className={style.rolltag}>Roll: Countdown to start</span>\n ) : (\n <RunningStatus startedAt={timer.startedAt} expectedFinish={timer.expectedFinish} playback={timer.playback} />\n )}\n </div>\n {children}\n </div>\n );\n}\n\ninterface RunningStatusProps {\n startedAt: MaybeNumber;\n expectedFinish: MaybeNumber;\n playback: Playback;\n}\nfunction RunningStatus({ startedAt, expectedFinish, playback }: RunningStatusProps) {\n if (playback === Playback.Stop) {\n return <StoppedStatus />;\n }\n\n const started = millisToString(startedAt);\n const finishedMs = expectedFinish !== null ? expectedFinish % dayInMs : null;\n const finish = millisToString(finishedMs);\n\n return (\n <>\n <span className={style.start}>\n <span className={style.tag}>Started at</span>\n <span className={style.time}>{started}</span>\n </span>\n <span className={style.finish}>\n <span className={style.tag}>Expect end</span>\n <span className={style.time}>{finish}</span>\n </span>\n </>\n );\n}\n\nfunction StoppedStatus() {\n const { data } = useReport();\n const hasReport = Object.keys(data).length > 0;\n\n if (hasReport) {\n return <AppLink search='settings=sharing__report'>Go to report management</AppLink>;\n }\n\n return null;\n}\n","import { usePlaybackControl } from '../../../common/hooks/useSocket';\n\nimport AddTime from './add-time/AddTime';\nimport { AuxTimer } from './aux-timer/AuxTimer';\nimport PlaybackButtons from './playback-buttons/PlaybackButtons';\nimport PlaybackTimer from './playback-timer/PlaybackTimer';\n\nimport style from './PlaybackControl.module.scss';\n\nexport default function PlaybackControl() {\n const data = usePlaybackControl();\n\n return (\n <div className={style.mainContainer}>\n <PlaybackTimer>\n <AddTime playback={data.playback} />\n </PlaybackTimer>\n <PlaybackButtons\n playback={data.playback}\n numEvents={data.numEvents}\n selectedEventIndex={data.selectedEventIndex}\n timerPhase={data.timerPhase}\n />\n <div className={style.auxTimers}>\n <AuxTimer index={1} />\n <AuxTimer index={2} />\n <AuxTimer index={3} />\n </div>\n </div>\n );\n}\n","import { memo } from 'react';\n\nimport { CornerExtract } from '../../../common/components/editor-utils/EditorUtils';\nimport ErrorBoundary from '../../../common/components/error-boundary/ErrorBoundary';\nimport ViewNavigationMenu from '../../../common/components/navigation-menu/ViewNavigationMenu';\nimport ProtectRoute from '../../../common/components/protect-route/ProtectRoute';\nimport { handleLinks } from '../../../common/utils/linkUtils';\nimport { getIsNavigationLocked } from '../../../externals';\n\nimport PlaybackControl from './PlaybackControl';\n\nimport style from '../../../views/editor/Editor.module.scss';\n\nexport default memo(TimerControlExport);\nfunction TimerControlExport() {\n const isExtracted = window.location.pathname.includes('/timercontrol');\n\n return (\n <ProtectRoute permission='editor'>\n <div className={style.playback} data-testid='panel-timer-control'>\n {!isExtracted && <CornerExtract onClick={(event) => handleLinks('timercontrol', event)} />}\n {isExtracted && <ViewNavigationMenu suppressSettings isNavigationLocked={getIsNavigationLocked()} />}\n\n <div className={style.content}>\n <ErrorBoundary>\n <PlaybackControl />\n </ErrorBoundary>\n </div>\n </div>\n </ProtectRoute>\n );\n}\n"],"names":["validatePlayback","currentPlayback","timerPhase","Playback","TimerPhase","TapButton","forwardRef","props","ref","children","disabled","onClick","theme","aspect","active","className","jsx","cx","style","AddTime","playback","timeInMs","setTime","useLocalStorage","handleTimeChange","_field","value","newTimeInMs","parseUserTime","MILLIS_PER_HOUR","handleAddTime","direction","setPlayback","doDisableButtons","jsxs","TimeInput","IoRemove","IoAdd","AuxTimer","index","useAuxTimerControl","stop","setDirection","setAuxTimer","toggleDirection","newDirection","SimpleDirection","isActive","SimplePlayback","playbackAction","AuxTimerInput","IoArrowDown","IoArrowUp","AuxTogglePlay","IoStop","useAuxTimerTime","setDuration","handleTimeUpdate","millisToString","action","start","pause","IoPlay","IoPause","PlaybackButtons","numEvents","selectedEventIndex","isRolling","isPlaying","isPaused","isArmed","isFirst","isLast","noEvents","disableGo","disableNext","disablePrev","playbackCan","disableStart","disablePause","disableRoll","disableStop","disableReload","goModeAction","goModeText","useMemo","IoPlaySkipBack","IoPlaySkipForward","IoReload","TimerDisplay","time","isNegative","display","timerPlaceholder","classes","resolveAddedTimeLabel","addedTime","formatDuration","PlaybackTimer","timer","useTimer","isWaiting","isOvertime","hasAddedTime","rollLabel","addedTimeLabel","Tooltip","RunningStatus","startedAt","expectedFinish","StoppedStatus","started","finishedMs","dayInMs","finish","Fragment","data","useReport","AppLink","PlaybackControl","usePlaybackControl","memo","TimerControlExport","isExtracted","ProtectRoute","CornerExtract","event","handleLinks","ViewNavigationMenu","getIsNavigationLocked","ErrorBoundary"],"mappings":"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"}
@@ -1 +1 @@
1
- ._blink_yewzx_1{animation:_blink_yewzx_1 1s step-start infinite}@keyframes _blink_yewzx_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_yewzx_13{transform:rotate(45deg)}._tapButton_yewzx_17{font-family:Open Sans,Segoe UI,sans-serif;font-size:calc(1rem + 2px);border-radius:3px;width:100%;transition-property:color,background-color;transition-duration:.3s;display:grid;place-content:center;letter-spacing:.5px}._tapButton_yewzx_17._neutral_yewzx_29{background-color:#303030;color:#f6f6f6}._tapButton_yewzx_17._neutral_yewzx_29:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._neutral_yewzx_29:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._neutral_yewzx_29:hover:not(:disabled){color:#f6f6f6;background-color:#f6f6f6}._tapButton_yewzx_17._neutral_yewzx_29._active_yewzx_51{background-color:#f6f6f6;color:#f6f6f6}._tapButton_yewzx_17._neutral_yewzx_29:hover:not(:disabled){color:#f6f6f6;background-color:#404040}._tapButton_yewzx_17._neutral_yewzx_29:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._play_yewzx_66{background-color:#303030;color:#339e4e}._tapButton_yewzx_17._play_yewzx_66:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._play_yewzx_66:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._play_yewzx_66:hover:not(:disabled){color:#f6f6f6;background-color:#339e4e}._tapButton_yewzx_17._play_yewzx_66:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._play_yewzx_66._active_yewzx_51{background-color:#339e4e;color:#f6f6f6}._tapButton_yewzx_17._roll_yewzx_93{background-color:#303030;color:#22a0e9}._tapButton_yewzx_17._roll_yewzx_93:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._roll_yewzx_93:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._roll_yewzx_93:hover:not(:disabled){color:#f6f6f6;background-color:#22a0e9}._tapButton_yewzx_17._roll_yewzx_93:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._roll_yewzx_93._active_yewzx_51{background-color:#22a0e9;color:#f6f6f6}._tapButton_yewzx_17._pause_yewzx_120{background-color:#303030;color:#c05621}._tapButton_yewzx_17._pause_yewzx_120:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._pause_yewzx_120:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._pause_yewzx_120:hover:not(:disabled){color:#f6f6f6;background-color:#c05621}._tapButton_yewzx_17._pause_yewzx_120:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._pause_yewzx_120._active_yewzx_51{background-color:#c05621;color:#f6f6f6}._tapButton_yewzx_17._ontime_yewzx_147{background-color:#303030;color:#ff7597}._tapButton_yewzx_17._ontime_yewzx_147:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._ontime_yewzx_147:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._ontime_yewzx_147:hover:not(:disabled){color:#f6f6f6;background-color:#ff7597}._tapButton_yewzx_17._ontime_yewzx_147:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._ontime_yewzx_147._active_yewzx_51{background-color:#ff7597;color:#f6f6f6}._tapButton_yewzx_17._stop_yewzx_174{background-color:#303030;color:#e4281e}._tapButton_yewzx_17._stop_yewzx_174:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._stop_yewzx_174:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._stop_yewzx_174:hover:not(:disabled){color:#f6f6f6;background-color:#e4281e}._tapButton_yewzx_17._stop_yewzx_174:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._stop_yewzx_174._active_yewzx_51{background-color:#e4281e;color:#f6f6f6}._tapButton_yewzx_17._square_yewzx_201{aspect-ratio:1;font-size:calc(1rem - 2px)}._tapButton_yewzx_17._tight_yewzx_206{padding-inline:.5rem;width:fit-content}._tapButton_yewzx_17._fill_yewzx_211{aspect-ratio:unset;height:100%;font-size:1.5rem}._blink_18oax_1{animation:_blink_18oax_1 1s step-start infinite}@keyframes _blink_18oax_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_18oax_13{transform:rotate(45deg)}._addTime_18oax_17{grid-area:addtime;display:flex;flex-direction:column;gap:.25rem}._addButtons_18oax_24{display:grid;grid-template-columns:1fr 1fr;gap:.25rem}._tallButtons_18oax_30{height:28px}._blink_u5jlo_1{animation:_blink_u5jlo_1 1s step-start infinite}@keyframes _blink_u5jlo_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_u5jlo_13{transform:rotate(45deg)}._label_u5jlo_17{display:block;margin-top:1rem;font-size:calc(1rem - 2px);color:#b1b1b1}._controls_u5jlo_24{margin-top:.25rem}._input_u5jlo_28{display:grid;grid-template-columns:1fr auto;gap:.25rem}._twoSides_u5jlo_34{margin-top:.25rem;display:grid;grid-template-columns:1fr 1fr;gap:.25rem;height:1.5rem}._fakeInput_u5jlo_42{box-sizing:border-box;width:100%;max-width:7.5em;height:2rem;display:grid;place-content:center;font-size:1rem;font-weight:400;color:#e2e2e2;border-radius:3px;border:1px solid transparent;letter-spacing:.5px;font-variant-numeric:tabular-nums;padding-inline:.5em;outline:none}._blink_1mqxq_1{animation:_blink_1mqxq_1 1s step-start infinite}@keyframes _blink_1mqxq_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1mqxq_13{transform:rotate(45deg)}._buttonContainer_1mqxq_17{padding-top:.5rem;display:grid;grid-template-areas:"go playback" "go transport" "extra extra";grid-template-rows:repeat(3,2rem);gap:.5rem}._go_1mqxq_25{grid-area:go;font-size:5rem}._playbackContainer_1mqxq_30{grid-area:playback;display:flex;justify-content:space-evenly;gap:.5rem}._transportContainer_1mqxq_37{grid-area:transport;display:flex;justify-content:space-evenly;gap:.5rem}._extra_1mqxq_44{grid-area:extra;display:flex;justify-content:space-evenly;gap:.5rem}._invertX_1mqxq_51{transform:rotateY(180deg)}._blink_1f17d_1{animation:_blink_1f17d_1 1s step-start infinite}@keyframes _blink_1f17d_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1f17d_13{transform:rotate(45deg)}._mirror_1f17d_17{transform:rotate(180deg)}._timer_1f17d_21{grid-area:timer;white-space:nowrap;max-width:18.75rem;min-width:5em;color:#fffc;line-height:.9em;text-align:center;letter-spacing:.1em;font-weight:600;font-size:3.5rem}._timer_1f17d_21._finished_1f17d_33{color:#fa5656}._timer_1f17d_21._muted_1f17d_36{color:#8a8a8a}._blink_g12ye_1{animation:_blink_g12ye_1 1s step-start infinite}@keyframes _blink_g12ye_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_g12ye_13{transform:rotate(45deg)}._timeContainer_g12ye_17{display:grid;grid-template-areas:"indicators timer addtime" "status status addtime";grid-template-rows:1fr auto;grid-template-columns:1.25rem 1fr 6.5rem;gap:.25rem}._indicators_g12ye_25{grid-area:indicators;width:100%;height:100%;display:flex;flex-direction:column;justify-content:space-evenly}._indicatorRoll_g12ye_34,._indicatorDelay_g12ye_35,._indicatorNegative_g12ye_36{background-color:#0000001a}._indicatorRoll_g12ye_34,._indicatorDelay_g12ye_35{margin:0 auto;border-radius:5px;width:10px;height:10px}._indicatorRoll_g12ye_34[data-active=true]{background-color:#22a0e9}._indicatorDelay_g12ye_35[data-active=true]{background-color:#f57c13}._indicatorNegative_g12ye_36{margin:0 auto;width:90%;height:.25rem}._indicatorNegative_g12ye_36[data-active=true]{background-color:#fa5656}._status_g12ye_65{grid-area:status;height:1.5rem;display:flex;gap:1rem;margin-left:1.5rem}._tag_g12ye_73{color:#b1b1b1;font-size:calc(1rem - 2px);margin-right:.25rem}._time_g12ye_17{color:#f6f6f6;font-size:calc(1rem - 1px)}._rolltag_g12ye_84{color:#22a0e9;font-size:calc(1rem - 1px)}._blink_1qlxm_1{animation:_blink_1qlxm_1 1s step-start infinite}@keyframes _blink_1qlxm_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1qlxm_13{transform:rotate(45deg)}._mainContainer_1qlxm_17{width:100%;margin:0 auto}._auxTimers_1qlxm_22{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.5rem}
1
+ ._blink_yewzx_1{animation:_blink_yewzx_1 1s step-start infinite}@keyframes _blink_yewzx_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_yewzx_13{transform:rotate(45deg)}._tapButton_yewzx_17{font-family:Open Sans,Segoe UI,sans-serif;font-size:calc(1rem + 2px);border-radius:3px;width:100%;transition-property:color,background-color;transition-duration:.3s;display:grid;place-content:center;letter-spacing:.5px}._tapButton_yewzx_17._neutral_yewzx_29{background-color:#303030;color:#f6f6f6}._tapButton_yewzx_17._neutral_yewzx_29:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._neutral_yewzx_29:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._neutral_yewzx_29:hover:not(:disabled){color:#f6f6f6;background-color:#f6f6f6}._tapButton_yewzx_17._neutral_yewzx_29._active_yewzx_51{background-color:#f6f6f6;color:#f6f6f6}._tapButton_yewzx_17._neutral_yewzx_29:hover:not(:disabled){color:#f6f6f6;background-color:#404040}._tapButton_yewzx_17._neutral_yewzx_29:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._play_yewzx_66{background-color:#303030;color:#339e4e}._tapButton_yewzx_17._play_yewzx_66:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._play_yewzx_66:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._play_yewzx_66:hover:not(:disabled){color:#f6f6f6;background-color:#339e4e}._tapButton_yewzx_17._play_yewzx_66:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._play_yewzx_66._active_yewzx_51{background-color:#339e4e;color:#f6f6f6}._tapButton_yewzx_17._roll_yewzx_93{background-color:#303030;color:#22a0e9}._tapButton_yewzx_17._roll_yewzx_93:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._roll_yewzx_93:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._roll_yewzx_93:hover:not(:disabled){color:#f6f6f6;background-color:#22a0e9}._tapButton_yewzx_17._roll_yewzx_93:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._roll_yewzx_93._active_yewzx_51{background-color:#22a0e9;color:#f6f6f6}._tapButton_yewzx_17._pause_yewzx_120{background-color:#303030;color:#c05621}._tapButton_yewzx_17._pause_yewzx_120:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._pause_yewzx_120:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._pause_yewzx_120:hover:not(:disabled){color:#f6f6f6;background-color:#c05621}._tapButton_yewzx_17._pause_yewzx_120:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._pause_yewzx_120._active_yewzx_51{background-color:#c05621;color:#f6f6f6}._tapButton_yewzx_17._ontime_yewzx_147{background-color:#303030;color:#ff7597}._tapButton_yewzx_17._ontime_yewzx_147:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._ontime_yewzx_147:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._ontime_yewzx_147:hover:not(:disabled){color:#f6f6f6;background-color:#ff7597}._tapButton_yewzx_17._ontime_yewzx_147:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._ontime_yewzx_147._active_yewzx_51{background-color:#ff7597;color:#f6f6f6}._tapButton_yewzx_17._stop_yewzx_174{background-color:#303030;color:#e4281e}._tapButton_yewzx_17._stop_yewzx_174:disabled{cursor:not-allowed;opacity:.4}._tapButton_yewzx_17._stop_yewzx_174:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._tapButton_yewzx_17._stop_yewzx_174:hover:not(:disabled){color:#f6f6f6;background-color:#e4281e}._tapButton_yewzx_17._stop_yewzx_174:active:not(:disabled){color:#303030;background-color:#f6f6f6;transition-property:color,background-color;transition-duration:.1s}._tapButton_yewzx_17._stop_yewzx_174._active_yewzx_51{background-color:#e4281e;color:#f6f6f6}._tapButton_yewzx_17._square_yewzx_201{aspect-ratio:1;font-size:calc(1rem - 2px)}._tapButton_yewzx_17._tight_yewzx_206{padding-inline:.5rem;width:fit-content}._tapButton_yewzx_17._fill_yewzx_211{aspect-ratio:unset;height:100%;font-size:1.5rem}._blink_18oax_1{animation:_blink_18oax_1 1s step-start infinite}@keyframes _blink_18oax_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_18oax_13{transform:rotate(45deg)}._addTime_18oax_17{grid-area:addtime;display:flex;flex-direction:column;gap:.25rem}._addButtons_18oax_24{display:grid;grid-template-columns:1fr 1fr;gap:.25rem}._tallButtons_18oax_30{height:28px}._blink_tat6w_1{animation:_blink_tat6w_1 1s step-start infinite}@keyframes _blink_tat6w_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_tat6w_13{transform:rotate(45deg)}._label_tat6w_17{display:block;margin-top:1rem;font-size:calc(1rem - 2px);color:#8a8a8a}._controls_tat6w_24{margin-top:.25rem}._input_tat6w_28{display:grid;grid-template-columns:1fr auto;gap:.25rem}._twoSides_tat6w_34{margin-top:.25rem;display:grid;grid-template-columns:1fr 1fr;gap:.25rem;height:1.5rem}._fakeInput_tat6w_42{box-sizing:border-box;width:100%;max-width:7.5em;height:2rem;display:grid;place-content:center;font-size:1rem;font-weight:400;color:#e2e2e2;border-radius:3px;border:1px solid transparent;letter-spacing:.5px;font-variant-numeric:tabular-nums;padding-inline:.5em;outline:none}._blink_1mqxq_1{animation:_blink_1mqxq_1 1s step-start infinite}@keyframes _blink_1mqxq_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1mqxq_13{transform:rotate(45deg)}._buttonContainer_1mqxq_17{padding-top:.5rem;display:grid;grid-template-areas:"go playback" "go transport" "extra extra";grid-template-rows:repeat(3,2rem);gap:.5rem}._go_1mqxq_25{grid-area:go;font-size:5rem}._playbackContainer_1mqxq_30{grid-area:playback;display:flex;justify-content:space-evenly;gap:.5rem}._transportContainer_1mqxq_37{grid-area:transport;display:flex;justify-content:space-evenly;gap:.5rem}._extra_1mqxq_44{grid-area:extra;display:flex;justify-content:space-evenly;gap:.5rem}._invertX_1mqxq_51{transform:rotateY(180deg)}._blink_1f17d_1{animation:_blink_1f17d_1 1s step-start infinite}@keyframes _blink_1f17d_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1f17d_13{transform:rotate(45deg)}._mirror_1f17d_17{transform:rotate(180deg)}._timer_1f17d_21{grid-area:timer;white-space:nowrap;max-width:18.75rem;min-width:5em;color:#fffc;line-height:.9em;text-align:center;letter-spacing:.1em;font-weight:600;font-size:3.5rem}._timer_1f17d_21._finished_1f17d_33{color:#fa5656}._timer_1f17d_21._muted_1f17d_36{color:#8a8a8a}._blink_b9r86_1{animation:_blink_b9r86_1 1s step-start infinite}@keyframes _blink_b9r86_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_b9r86_13{transform:rotate(45deg)}._timeContainer_b9r86_17{display:grid;grid-template-areas:"indicators timer addtime" "status status addtime";grid-template-rows:1fr auto;grid-template-columns:1.25rem 1fr 6.5rem;gap:.25rem}._indicators_b9r86_25{grid-area:indicators;width:100%;height:100%;display:flex;flex-direction:column;justify-content:space-evenly}._indicatorRoll_b9r86_34,._indicatorDelay_b9r86_35,._indicatorNegative_b9r86_36{background-color:#0000001a}._indicatorRoll_b9r86_34,._indicatorDelay_b9r86_35{margin:0 auto;border-radius:5px;width:10px;height:10px}._indicatorRoll_b9r86_34[data-active=true]{background-color:#22a0e9}._indicatorDelay_b9r86_35[data-active=true]{background-color:#f57c13}._indicatorNegative_b9r86_36{margin:0 auto;width:90%;height:.25rem}._indicatorNegative_b9r86_36[data-active=true]{background-color:#fa5656}._status_b9r86_65{grid-area:status;height:1.5rem;display:flex;gap:1rem}._tag_b9r86_72{color:#8a8a8a;font-size:calc(1rem - 2px);margin-right:.25rem}._time_b9r86_17{color:#f6f6f6;font-size:calc(1rem - 1px);display:inline-block}._rolltag_b9r86_84{color:#22a0e9;font-size:calc(1rem - 1px)}._blink_1qlxm_1{animation:_blink_1qlxm_1 1s step-start infinite}@keyframes _blink_1qlxm_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1qlxm_13{transform:rotate(45deg)}._mainContainer_1qlxm_17{width:100%;margin:0 auto}._auxTimers_1qlxm_22{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.5rem}
@@ -0,0 +1,2 @@
1
+ import{h as o,j as t}from"./vendor-BoH5HFNN.js";import{d as f,e as d}from"./index-CDBQg2fh.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new e.Error().stack;a&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[a]="cd995a5b-2dae-4399-935b-f88090aace15",e._sentryDebugIdIdentifier="sentry-dbid-cd995a5b-2dae-4399-935b-f88090aace15")}catch{}})();const b=o.forwardRef((e,a)=>{const{label:s,title:n,secondary:r,className:l=""}=e,{getLocalizedString:c}=f(),i=s==="now";return t.jsxs("div",{className:d(["title-card",l]),ref:a,children:[t.jsx("span",{className:"title-card__title",children:n}),t.jsx("span",{className:d(["title-card__label",i&&"title-card__label--accent"]),children:s&&c(`common.${s}`)}),t.jsx("div",{className:"title-card__secondary",children:r})]})});b.displayName="TitleCard";export{b as T};
2
+ //# sourceMappingURL=TitleCard-1U35ek0D.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TitleCard-CZl9wSHS.js","sources":["../../src/common/components/title-card/TitleCard.tsx"],"sourcesContent":["import { ForwardedRef, forwardRef } from 'react';\n\nimport { useTranslation } from '../../../translation/TranslationProvider';\nimport { cx } from '../../utils/styleUtils';\n\nimport './TitleCard.scss';\n\ninterface TitleCardProps {\n title?: string;\n label?: 'now' | 'next';\n secondary?: string;\n className?: string;\n}\n\nconst TitleCard = forwardRef((props: TitleCardProps, ref: ForwardedRef<HTMLDivElement>) => {\n const { label, title, secondary, className = '' } = props;\n const { getLocalizedString } = useTranslation();\n\n const accent = label === 'now';\n\n return (\n <div className={cx(['title-card', className])} ref={ref}>\n <span className='title-card__title'>{title}</span>\n <span className={cx(['title-card__label', accent && 'title-card__label--accent'])}>\n {label && getLocalizedString(`common.${label}`)}\n </span>\n <div className='title-card__secondary'>{secondary}</div>\n </div>\n );\n});\n\nTitleCard.displayName = 'TitleCard';\nexport default TitleCard;\n"],"names":["TitleCard","forwardRef","props","ref","label","title","secondary","className","getLocalizedString","useTranslation","accent","jsxs","cx","jsx"],"mappings":"obAcA,MAAMA,EAAYC,EAAA,WAAW,CAACC,EAAuBC,IAAsC,CACzF,KAAM,CAAE,MAAAC,EAAO,MAAAC,EAAO,UAAAC,EAAW,UAAAC,EAAY,IAAOL,EAC9C,CAAE,mBAAAM,CAAmB,EAAIC,EAAe,EAExCC,EAASN,IAAU,MAGvB,OAAAO,OAAC,OAAI,UAAWC,EAAG,CAAC,aAAcL,CAAS,CAAC,EAAG,IAAAJ,EAC7C,SAAA,CAACU,EAAA,IAAA,OAAA,CAAK,UAAU,oBAAqB,SAAMR,EAAA,EAC1CQ,EAAA,IAAA,OAAA,CAAK,UAAWD,EAAG,CAAC,oBAAqBF,GAAU,2BAA2B,CAAC,EAC7E,SAASN,GAAAI,EAAmB,UAAUJ,CAAK,EAAE,EAChD,EACCS,EAAA,IAAA,MAAA,CAAI,UAAU,wBAAyB,SAAUP,CAAA,CAAA,CAAA,EACpD,CAEJ,CAAC,EAEDN,EAAU,YAAc"}
1
+ {"version":3,"file":"TitleCard-1U35ek0D.js","sources":["../../src/common/components/title-card/TitleCard.tsx"],"sourcesContent":["import { ForwardedRef, forwardRef } from 'react';\n\nimport { useTranslation } from '../../../translation/TranslationProvider';\nimport { cx } from '../../utils/styleUtils';\n\nimport './TitleCard.scss';\n\ninterface TitleCardProps {\n title?: string;\n label?: 'now' | 'next';\n secondary?: string;\n className?: string;\n}\n\nconst TitleCard = forwardRef((props: TitleCardProps, ref: ForwardedRef<HTMLDivElement>) => {\n const { label, title, secondary, className = '' } = props;\n const { getLocalizedString } = useTranslation();\n\n const accent = label === 'now';\n\n return (\n <div className={cx(['title-card', className])} ref={ref}>\n <span className='title-card__title'>{title}</span>\n <span className={cx(['title-card__label', accent && 'title-card__label--accent'])}>\n {label && getLocalizedString(`common.${label}`)}\n </span>\n <div className='title-card__secondary'>{secondary}</div>\n </div>\n );\n});\n\nTitleCard.displayName = 'TitleCard';\nexport default TitleCard;\n"],"names":["TitleCard","forwardRef","props","ref","label","title","secondary","className","getLocalizedString","useTranslation","accent","jsxs","cx","jsx"],"mappings":"ybAcA,MAAMA,EAAYC,EAAA,WAAW,CAACC,EAAuBC,IAAsC,CACzF,KAAM,CAAE,MAAAC,EAAO,MAAAC,EAAO,UAAAC,EAAW,UAAAC,EAAY,IAAOL,EAC9C,CAAE,mBAAAM,CAAmB,EAAIC,EAAe,EAExCC,EAASN,IAAU,MAGvB,OAAAO,OAAC,OAAI,UAAWC,EAAG,CAAC,aAAcL,CAAS,CAAC,EAAG,IAAAJ,EAC7C,SAAA,CAACU,EAAA,IAAA,OAAA,CAAK,UAAU,oBAAqB,SAAMR,EAAA,EAC1CQ,EAAA,IAAA,OAAA,CAAK,UAAWD,EAAG,CAAC,oBAAqBF,GAAU,2BAA2B,CAAC,EAC7E,SAASN,GAAAI,EAAmB,UAAUJ,CAAK,EAAE,EAChD,EACCS,EAAA,IAAA,MAAA,CAAI,UAAU,wBAAyB,SAAUP,CAAA,CAAA,CAAA,EACpD,CAEJ,CAAC,EAEDN,EAAU,YAAc"}
@@ -1,2 +1,2 @@
1
- import{j as t,c8 as i,c9 as n,ca as l,cb as r,cc as d,cd as c}from"./vendor-CCiSQ9k9.js";(function(){try{var o=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new o.Error().stack;s&&(o._sentryDebugIds=o._sentryDebugIds||{},o._sentryDebugIds[s]="3e203f56-12c5-43f1-8384-929f7670b2ac",o._sentryDebugIdIdentifier="sentry-dbid-3e203f56-12c5-43f1-8384-929f7670b2ac")}catch{}})();const f="_tooltip_1391b_17",a={tooltip:f};function b({text:o,children:s,...e}){return t.jsxs(i,{children:[t.jsx(n,{...e,children:s}),t.jsx(l,{children:t.jsx(r,{side:"bottom",sideOffset:4,children:t.jsxs(d,{className:a.tooltip,children:[t.jsx(c,{}),o]})})})]})}export{b as T};
2
- //# sourceMappingURL=Tooltip-D9XRnwOW.js.map
1
+ import{j as t,c8 as i,c9 as n,ca as l,cb as r,cc as d,cd as c}from"./vendor-BoH5HFNN.js";(function(){try{var o=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new o.Error().stack;s&&(o._sentryDebugIds=o._sentryDebugIds||{},o._sentryDebugIds[s]="3e203f56-12c5-43f1-8384-929f7670b2ac",o._sentryDebugIdIdentifier="sentry-dbid-3e203f56-12c5-43f1-8384-929f7670b2ac")}catch{}})();const f="_tooltip_1391b_17",a={tooltip:f};function b({text:o,children:s,...e}){return t.jsxs(i,{children:[t.jsx(n,{...e,children:s}),t.jsx(l,{children:t.jsx(r,{side:"bottom",sideOffset:4,children:t.jsxs(d,{className:a.tooltip,children:[t.jsx(c,{}),o]})})})]})}export{b as T};
2
+ //# sourceMappingURL=Tooltip-B8y25e3n.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip-D9XRnwOW.js","sources":["../../src/common/components/tooltip/Tooltip.tsx"],"sourcesContent":["import { PropsWithChildren } from 'react';\nimport { Tooltip as BaseTooltip } from '@base-ui-components/react/tooltip';\n\nimport style from './Tooltip.module.scss';\n\ninterface TooltipProps extends BaseTooltip.Trigger.Props {\n text: string;\n}\n\nexport default function Tooltip({ text, children, ...triggerProps }: PropsWithChildren<TooltipProps>) {\n return (\n <BaseTooltip.Root>\n <BaseTooltip.Trigger {...triggerProps}>{children}</BaseTooltip.Trigger>\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner side='bottom' sideOffset={4}>\n <BaseTooltip.Popup className={style.tooltip}>\n <BaseTooltip.Arrow />\n {text}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n </BaseTooltip.Root>\n );\n}\n"],"names":["Tooltip","text","children","triggerProps","jsxs","BaseTooltip.Root","jsx","BaseTooltip.Trigger","BaseTooltip.Portal","BaseTooltip.Positioner","BaseTooltip.Popup","style","BaseTooltip.Arrow"],"mappings":"6dASA,SAAwBA,EAAQ,CAAE,KAAAC,EAAM,SAAAC,EAAU,GAAGC,GAAiD,CAElG,OAAAC,EAAA,KAACC,EAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAqB,GAAGJ,EAAe,SAAAD,CAAS,CAAA,QAChDM,EAAA,CACC,SAACF,EAAA,IAAAG,EAAA,CAAuB,KAAK,SAAS,WAAY,EAChD,SAACL,EAAAA,KAAAM,EAAA,CAAkB,UAAWC,EAAM,QAClC,SAAA,CAACL,EAAA,IAAAM,EAAA,EAAkB,EAClBX,CAAA,CACH,CAAA,CACF,CAAA,CACF,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"Tooltip-B8y25e3n.js","sources":["../../src/common/components/tooltip/Tooltip.tsx"],"sourcesContent":["import { PropsWithChildren } from 'react';\nimport { Tooltip as BaseTooltip } from '@base-ui-components/react/tooltip';\n\nimport style from './Tooltip.module.scss';\n\ninterface TooltipProps extends BaseTooltip.Trigger.Props {\n text: string;\n}\n\nexport default function Tooltip({ text, children, ...triggerProps }: PropsWithChildren<TooltipProps>) {\n return (\n <BaseTooltip.Root>\n <BaseTooltip.Trigger {...triggerProps}>{children}</BaseTooltip.Trigger>\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner side='bottom' sideOffset={4}>\n <BaseTooltip.Popup className={style.tooltip}>\n <BaseTooltip.Arrow />\n {text}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n </BaseTooltip.Root>\n );\n}\n"],"names":["Tooltip","text","children","triggerProps","jsxs","BaseTooltip.Root","jsx","BaseTooltip.Trigger","BaseTooltip.Portal","BaseTooltip.Positioner","BaseTooltip.Popup","style","BaseTooltip.Arrow"],"mappings":"6dASA,SAAwBA,EAAQ,CAAE,KAAAC,EAAM,SAAAC,EAAU,GAAGC,GAAiD,CAElG,OAAAC,EAAA,KAACC,EAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAqB,GAAGJ,EAAe,SAAAD,CAAS,CAAA,QAChDM,EAAA,CACC,SAACF,EAAA,IAAAG,EAAA,CAAuB,KAAK,SAAS,WAAY,EAChD,SAACL,EAAAA,KAAAM,EAAA,CAAkB,UAAWC,EAAM,QAClC,SAAA,CAACL,EAAA,IAAAM,EAAA,EAAkB,EAClBX,CAAA,CACH,CAAA,CACF,CAAA,CACF,CAAA,CAAA,EACF,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{j as n}from"./vendor-BoH5HFNN.js";import{N as t}from"./index-CDBQg2fh.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},o=new e.Error().stack;o&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[o]="9829be1b-76fd-41e6-a8c7-657e7d706912",e._sentryDebugIdIdentifier="sentry-dbid-9829be1b-76fd-41e6-a8c7-657e7d706912")}catch{}})();function i(e){const{name:o,className:s}=e;return n.jsx("div",{className:s,children:n.jsx("img",{alt:"",src:`${t}/${o}`,className:"viewLogo"})})}export{i as V};
2
+ //# sourceMappingURL=ViewLogo-BHsV7Faa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewLogo-_3Z1hIHi.js","sources":["../../src/common/components/view-logo/ViewLogo.tsx"],"sourcesContent":["import { projectLogoPath } from '../../api/constants';\n\nimport './ViewLogo.scss';\n\ninterface ViewLogoProps {\n name: string;\n className: string;\n}\n\nexport default function ViewLogo(props: ViewLogoProps) {\n const { name, className } = props;\n\n // we wrap the image in a div to help maintain the aspect ratio\n return (\n <div className={className}>\n <img alt='' src={`${projectLogoPath}/${name}`} className='viewLogo' />\n </div>\n );\n}\n"],"names":["ViewLogo","props","name","className","jsx","projectLogoPath"],"mappings":"2aASA,SAAwBA,EAASC,EAAsB,CAC/C,KAAA,CAAE,KAAAC,EAAM,UAAAC,CAAA,EAAcF,EAG5B,OACGG,EAAA,IAAA,MAAA,CAAI,UAAAD,EACH,SAAAC,MAAC,OAAI,IAAI,GAAG,IAAK,GAAGC,CAAe,IAAIH,CAAI,GAAI,UAAU,UAAW,CAAA,EACtE,CAEJ"}
1
+ {"version":3,"file":"ViewLogo-BHsV7Faa.js","sources":["../../src/common/components/view-logo/ViewLogo.tsx"],"sourcesContent":["import { projectLogoPath } from '../../api/constants';\n\nimport './ViewLogo.scss';\n\ninterface ViewLogoProps {\n name: string;\n className: string;\n}\n\nexport default function ViewLogo(props: ViewLogoProps) {\n const { name, className } = props;\n\n // we wrap the image in a div to help maintain the aspect ratio\n return (\n <div className={className}>\n <img alt='' src={`${projectLogoPath}/${name}`} className='viewLogo' />\n </div>\n );\n}\n"],"names":["ViewLogo","props","name","className","jsx","projectLogoPath"],"mappings":"2aASA,SAAwBA,EAASC,EAAsB,CAC/C,KAAA,CAAE,KAAAC,EAAM,UAAAC,CAAA,EAAcF,EAG5B,OACGG,EAAA,IAAA,MAAA,CAAI,UAAAD,EACH,SAAAC,MAAC,OAAI,IAAI,GAAG,IAAK,GAAGC,CAAe,IAAIH,CAAI,GAAI,UAAU,UAAW,CAAA,EACtE,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{l as x,j as t,h as d,ay as k,aT as V,D as N,q as E,s as D,t as F,G as I,v as O}from"./vendor-BoH5HFNN.js";import{bi as $,e as g,B as j,ah as y,a as A,bj as H,D as z,ak as L}from"./index-CDBQg2fh.js";import{C as R,I as B}from"./useWindowTitle-DU8NlxIu.js";import{i as q}from"./viewUtils-DI8_kmUZ.js";import{S as U}from"./Select-B5xNi_tM.js";import{d as W,S as M}from"./useProjectData-DGA6K2Zs.js";(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]="a6dcf3cc-7d71-41c3-8c19-b9eaa00617d7",e._sentryDebugIdIdentifier="sentry-dbid-a6dcf3cc-7d71-41c3-8c19-b9eaa00617d7")}catch{}})();function Ae(e,s=[],n=!0){const a=[...s];for(const[r,i]of Object.entries(e))n&&i.type==="image"||a.push({value:`custom-${r}`,label:`Custom: ${i.label}`});return a}function He(e,s=!0){const n=[];for(const[a,r]of Object.entries(e))s&&r.type==="image"||n.push({value:a,label:r.label,colour:r.colour});return n}function ze(e,s=[]){const n=e.custom.map((a,r)=>({value:`${r}-${a.title}`,label:a.title}));return[...s,...n]}function G(e){return e.startsWith("#")?e.substring(1):e}function J(e){const s={defaultValues:{},colorFields:new Set,booleanFields:new Set,isPersistedField:new Set,persistedValues:{}};return e.forEach(n=>{n.options.forEach(a=>{a.type==="persist"?(s.isPersistedField.add(a.id),a.values&&(s.persistedValues[a.id]=a.values)):s.defaultValues[a.id]=String(a.defaultValue),a.type==="colour"?s.colorFields.add(a.id):a.type==="boolean"&&s.booleanFields.add(a.id)})}),s}function K(e,s){const n=new URLSearchParams,a=new Set,r=J(s),i=(o,l)=>{const c=`${o}:${l}`;a.has(c)||(a.add(c),n.append(o,l))};return Object.entries(r.persistedValues).forEach(([o,l])=>{l.forEach(c=>{c&&i(o,c)})}),Object.entries(e).forEach(([o,l])=>{typeof l=="string"&&l.length&&(r.isPersistedField.has(o)&&(Array.from(a).forEach(c=>{c.startsWith(`${o}:`)&&a.delete(c)}),n.delete(o)),l.split(",").forEach(c=>{const f=r.colorFields.has(o)?G(c):r.booleanFields.has(o)?c==="on"?"true":"false":c;(r.isPersistedField.has(o)||r.defaultValues[o]!==f)&&i(o,f)}))}),n}const Q="_presetSection_gc8wt_17",T="_preset_gc8wt_17",X="_active_gc8wt_34",Y="_presetActions_gc8wt_38",p={presetSection:Q,preset:T,active:X,presetActions:Y};function Z({target:e}){const{viewPresets:s}=$(e),[n,a]=x(),r=i=>{const o=new URLSearchParams(i.search);o.set("alias",i.alias),a(o)};return s.length===0?null:t.jsx("div",{className:p.presetSection,children:s.map(i=>{const o=n.get("alias")===i.alias;return t.jsxs("div",{className:g([p.preset,o&&p.active]),children:[t.jsx("div",{children:i.alias}),t.jsx(j,{variant:o?"ghosted":"subtle-white",onClick:()=>r(i),disabled:o,className:p.presetActions,children:o?"Applied":"Apply"})]},i.alias)})})}var v=(e=>(e.ClockOptions="Clock Options",e.TimerOptions="Timer Options",e.DataSources="Data sources",e.ElementVisibility="Element visibility",e.BehaviourOptions="View behaviour",e.StyleOverride="View style override",e.Animation="View animation",e.Schedule="Schedule options",e.Hidden="Hidden options",e))(v||{});const ee="_inline_4jmjk_17",se={inline:ee},S=e=>e.startsWith("#")?e:`#${e}`;function te({name:e,value:s}){const[n,a]=d.useState(()=>S(s));return d.useEffect(()=>{a(S(s))},[s]),t.jsxs("div",{className:se.inline,children:[t.jsx(W,{color:n,onChange:a,alwaysDisplayColor:!0}),t.jsx("span",{children:n}),t.jsx("input",{type:"hidden",name:e,value:n})]})}const ae="_inline_7qz4u_17",ne="_toggleSelect_7qz4u_24",re="_empty_7qz4u_52",_={inline:ae,toggleSelect:ne,empty:re};function w({paramField:e}){const[s]=x(),{id:n,type:a,defaultValue:r}=e;if(a==="persist")return!e.values||!e.values.length?null:t.jsx("input",{hidden:!0,name:n,readOnly:!0,value:e.values.join(",")});if(a==="option"){const c=s.get(n)||r;return e.values.length===0?t.jsx("span",{className:_.empty,children:"No options available"}):t.jsx(le,{id:n,initialValue:c,options:e.values})}if(a==="multi-option"){const l=s.getAll(n);return t.jsx(oe,{paramField:e,options:l.length?l:e.defaultValue??[""]})}if(a==="boolean")return t.jsx(ie,{id:n,initialValue:q(s.get(n))??r});if(a==="number"){const{placeholder:l}=e,c=s.get(n)??r;return t.jsx(y,{height:"large",type:"number",step:"any",name:n,defaultValue:c,placeholder:l})}if(a==="colour")return t.jsx(te,{name:n,value:s.get(n)??r});const i=s.get(n)??r??"",{placeholder:o}=e;return t.jsx(ce,{id:n,initialValue:i,placeholder:o})}function oe({paramField:e,options:s}){const{id:n,values:a}=e,[r,i]=d.useState(s);d.useEffect(()=>{i(s)},[s]);const o=(l,c)=>{i(c?f=>[...f,l]:f=>f.filter(b=>b!==l))};return a.length===0?t.jsx("span",{className:_.empty,children:"No options available"}):t.jsxs(t.Fragment,{children:[t.jsx("input",{name:n,hidden:!0,readOnly:!0,value:r.join(",")}),t.jsx("div",{className:_.inline,children:a.map(l=>t.jsxs("label",{className:_.toggleSelect,style:{"--user-bg":l.colour},children:[t.jsx(R,{checked:r.includes(l.value),onCheckedChange:c=>o(l.value,c)}),l.label]},l.value))})]})}function ie({id:e,initialValue:s}){const[n,a]=d.useState(s);return d.useEffect(()=>{a(s)},[s]),t.jsx(M,{size:"large",name:e,checked:n,onCheckedChange:a})}function le({id:e,initialValue:s,options:n}){const[a,r]=d.useState(s);return d.useEffect(()=>{r(s)},[s]),t.jsx(U,{size:"large",name:e,options:n,value:a,onValueChange:i=>r(i)})}function ce({id:e,initialValue:s,...n}){const[a,r]=d.useState(s);return d.useEffect(()=>{r(s)},[s]),t.jsx(y,{height:"large",name:e,value:a,onChange:i=>r(i.target.value),...n})}const de="_section_1ssto_17",ue="_sectionHeader_1ssto_22",me="_collapsible_1ssto_28",fe="_label_1ssto_32",he="_title_1ssto_41",pe="_description_1ssto_47",_e="_closed_1ssto_53",ge="_open_1ssto_58",be="_hidden_1ssto_63",m={section:de,sectionHeader:ue,collapsible:me,label:fe,title:he,description:pe,closed:_e,open:ge,hidden:be};function je({title:e,collapsible:s,options:n}){const[a,r]=k({key:`params-${e}`,defaultValue:!1}),i=()=>{s&&r(o=>!o)};return t.jsx("section",{className:m.section,children:e===v.Hidden?t.jsx(Se,{options:n}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:g([m.sectionHeader,s&&m.collapsible]),onClick:i,children:[e,s&&t.jsx(V,{className:g([a?m.closed:m.open])})]}),t.jsx(xe,{options:n,collapsed:a})]})})}function xe({options:e,collapsed:s}){return t.jsx(t.Fragment,{children:e.map(n=>t.jsxs("label",{className:g([m.label,s&&m.hidden]),children:[t.jsx("span",{className:m.title,children:n.title}),t.jsx("span",{className:m.description,children:n.description}),t.jsx(w,{paramField:n})]},n.title))})}function Se({options:e}){return t.jsx(t.Fragment,{children:e.map((s,n)=>t.jsx(w,{paramField:s},s.title+n))})}const ye="_backdrop_1pnpt_26",ve="_drawer_1pnpt_17",we="_header_1pnpt_67",Pe="_body_1pnpt_77",Ce="_footer_1pnpt_84",ke="_sectionList_1pnpt_92",Ve="_info_1pnpt_99",h={backdrop:ye,drawer:ve,header:we,body:Pe,footer:Ce,sectionList:ke,info:Ve},Le=d.memo(Ne);function Ne({target:e,viewOptions:s}){const[n,a]=x(),{data:r}=A(),{isOpen:i,close:o}=H(),l=z(),c=()=>{o()},f=()=>{a()},b=u=>{u.preventDefault();const P=Object.fromEntries(new FormData(u.currentTarget)),C=K(P,s);a(C),l&&o()};return t.jsx(N,{open:i,onOpenChange:u=>{u||c()},children:t.jsxs(E,{children:[t.jsx(D,{className:h.backdrop}),t.jsxs(F,{className:h.drawer,children:[t.jsxs("div",{className:h.header,children:[t.jsx(I,{children:"Customise"}),t.jsx(L,{variant:"subtle-white",size:"large","data-testid":"close-view-params",onClick:c,children:t.jsx(O,{})})]}),t.jsxs("div",{className:h.body,children:[r.overrideStyles&&t.jsx(B,{className:h.info,children:"This view style is being modified by a custom CSS file."}),t.jsx(Z,{target:e}),t.jsx("form",{id:"edit-params-form",onSubmit:b,className:h.sectionList,children:s.map(u=>t.jsx(je,{title:u.title,collapsible:u.collapsible,options:u.options},u.title))})]}),t.jsxs("div",{className:h.footer,children:[t.jsx(j,{variant:"subtle",size:"large",onClick:f,type:"reset",children:"Reset to default"}),t.jsx(j,{variant:"primary",size:"large",form:"edit-params-form",type:"submit","data-testid":"apply-view-params",children:"Apply"})]})]})]})})}export{v as O,Le as V,ze as a,He as b,Ae as m};
2
+ //# sourceMappingURL=ViewParamsEditor-BMHXOv-K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewParamsEditor-BMHXOv-K.js","sources":["../../src/common/components/view-params-editor/viewParams.utils.ts","../../src/common/components/view-params-editor/ViewParamsPresets.tsx","../../src/common/components/view-params-editor/constants.ts","../../src/common/components/view-params-editor/InlineColourPicker.tsx","../../src/common/components/view-params-editor/ParamInput.tsx","../../src/common/components/view-params-editor/ViewParamsSection.tsx","../../src/common/components/view-params-editor/ViewParamsEditor.tsx"],"sourcesContent":["import type { CustomFields, ProjectData } from 'ontime-types';\n\nimport type { SelectOption } from '../select/Select';\n\nimport type { MultiselectOption, ViewOption } from './viewParams.types';\n\n/**\n * Creates a list of custom fields for a select\n * Filters out image type custom fields\n */\nexport function makeOptionsFromCustomFields(\n customFields: CustomFields,\n additionalOptions: SelectOption[] = [],\n filterImageType = true,\n): SelectOption[] {\n const options: SelectOption[] = [...additionalOptions];\n\n // Add custom fields first\n for (const [key, value] of Object.entries(customFields)) {\n if (filterImageType && value.type === 'image') {\n continue;\n }\n\n options.push({\n value: `custom-${key}`,\n label: `Custom: ${value.label}`,\n });\n }\n\n return options;\n}\n\n/**\n * Creates data for a multiselect component from custom fields\n * Filters out image type custom fields\n */\nexport function makeCustomFieldSelectOptions(customFields: CustomFields, filterImageType = true): MultiselectOption[] {\n const options: MultiselectOption[] = [];\n\n // Add custom fields first\n for (const [key, value] of Object.entries(customFields)) {\n if (filterImageType && value.type === 'image') {\n continue;\n }\n\n options.push({\n value: key,\n label: value.label,\n colour: value.colour,\n });\n }\n\n return options;\n}\n\n/**\n * Creates data for a select element that displays project custom data\n */\nexport function makeProjectDataOptions(\n projectData: ProjectData,\n additionalOptions: SelectOption[] = [],\n): SelectOption[] {\n const generatedOptions = projectData.custom.map((entry, index) => {\n return {\n value: `${index}-${entry.title}`,\n label: entry.title,\n };\n });\n\n return [...additionalOptions, ...generatedOptions];\n}\n\ntype ViewParamsObj = { [key: string]: string | FormDataEntryValue };\n\n/**\n * Utility remove the # character from a hex string\n */\nfunction sanitiseColour(colour: string) {\n if (colour.startsWith('#')) {\n return colour.substring(1);\n }\n return colour;\n}\n\ntype FieldMetadata = {\n defaultValues: Record<string, string>;\n colorFields: Set<string>;\n booleanFields: Set<string>;\n isPersistedField: Set<string>;\n persistedValues: Record<string, string[]>;\n};\n\n/**\n * Utility collects metadata about fields from view options\n * - where are the default values\n * - which fields are colours\n * - which fields are persisted\n */\nfunction collectFieldMetadata(paramFields: ViewOption[]): FieldMetadata {\n const metadata: FieldMetadata = {\n defaultValues: {},\n colorFields: new Set(),\n booleanFields: new Set(),\n isPersistedField: new Set(),\n persistedValues: {},\n };\n\n paramFields.forEach((section) => {\n section.options.forEach((option) => {\n if (option.type === 'persist') {\n metadata.isPersistedField.add(option.id);\n if (option.values) {\n metadata.persistedValues[option.id] = option.values;\n }\n } else {\n metadata.defaultValues[option.id] = String(option.defaultValue);\n }\n\n if (option.type === 'colour') {\n metadata.colorFields.add(option.id);\n } else if (option.type === 'boolean') {\n metadata.booleanFields.add(option.id);\n }\n });\n });\n\n return metadata;\n}\n\n/**\n * Makes a new URLSearchParams object from the given params object\n * @param paramsObj - The object containing parameters to be converted\n * @param paramFields - The view options that define the parameters\n * @returns A new URLSearchParams object with the parameters\n */\nexport function getURLSearchParamsFromObj(paramsObj: ViewParamsObj, paramFields: ViewOption[]) {\n const newSearchParams = new URLSearchParams();\n const addedPairs = new Set<string>();\n const metadata = collectFieldMetadata(paramFields);\n\n // Utility function to safely add params without duplicates\n const addUniqueParam = (id: string, value: string) => {\n const pair = `${id}:${value}`;\n if (!addedPairs.has(pair)) {\n addedPairs.add(pair);\n newSearchParams.append(id, value);\n }\n };\n\n // First add all persisted values\n Object.entries(metadata.persistedValues).forEach(([id, values]) => {\n values.forEach((value) => {\n if (value) {\n addUniqueParam(id, value);\n }\n });\n });\n\n // Then process user-provided values\n Object.entries(paramsObj).forEach(([id, value]) => {\n if (typeof value === 'string' && value.length) {\n // For persisted fields, clear existing values before adding new ones\n if (metadata.isPersistedField.has(id)) {\n // Clear tracking of previous values for this field\n Array.from(addedPairs).forEach((pair) => {\n if (pair.startsWith(`${id}:`)) {\n addedPairs.delete(pair);\n }\n });\n newSearchParams.delete(id);\n }\n\n // Process and add new values\n value.split(',').forEach((v) => {\n // some field types need extra processing\n const processedValue = (() => {\n if (metadata.colorFields.has(id)) {\n return sanitiseColour(v);\n }\n if (metadata.booleanFields.has(id)) {\n return v === 'on' ? 'true' : 'false';\n }\n return v;\n })();\n if (metadata.isPersistedField.has(id) || metadata.defaultValues[id] !== processedValue) {\n addUniqueParam(id, processedValue);\n }\n });\n }\n });\n\n return newSearchParams;\n}\n","import { useSearchParams } from 'react-router';\nimport { OntimeView, URLPreset } from 'ontime-types';\n\nimport { useViewUrlPresets } from '../../hooks-query/useUrlPresets';\nimport { cx } from '../../utils/styleUtils';\nimport Button from '../buttons/Button';\n\nimport style from './ViewParamsPresets.module.scss';\n\n/**\n * Shows a list of presets for the current view\n */\nexport function ViewParamsPresets({ target }: { target: OntimeView }) {\n const { viewPresets } = useViewUrlPresets(target);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const handleRecall = (preset: URLPreset) => {\n const newSearch = new URLSearchParams(preset.search);\n newSearch.set('alias', preset.alias);\n setSearchParams(newSearch);\n };\n\n if (viewPresets.length === 0) {\n return null;\n }\n\n return (\n <div className={style.presetSection}>\n {viewPresets.map((preset) => {\n const active = searchParams.get('alias') === preset.alias;\n return (\n <div key={preset.alias} className={cx([style.preset, active && style.active])}>\n <div>{preset.alias}</div>\n <Button\n variant={active ? 'ghosted' : 'subtle-white'}\n onClick={() => handleRecall(preset)}\n disabled={active}\n className={style.presetActions}\n >\n {active ? 'Applied' : 'Apply'}\n </Button>\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * Gathers possible titles for view options\n */\nexport enum OptionTitle {\n ClockOptions = 'Clock Options',\n TimerOptions = 'Timer Options',\n DataSources = 'Data sources',\n ElementVisibility = 'Element visibility',\n BehaviourOptions = 'View behaviour',\n StyleOverride = 'View style override',\n Animation = 'View animation',\n Schedule = 'Schedule options',\n\n /** rendered as hidden inputs */\n Hidden = 'Hidden options',\n}\n","import { useEffect, useState } from 'react';\n\nimport SwatchPicker from '../input/colour-input/SwatchPicker';\n\nimport style from './InlineColourPicker.module.scss';\n\ninterface InlineColourPickerProps {\n name: string;\n value: string;\n}\n\nconst ensureHex = (value: string) => {\n if (!value.startsWith('#')) {\n return `#${value}`;\n }\n return value;\n};\n\nexport default function InlineColourPicker({ name, value }: InlineColourPickerProps) {\n const [colour, setColour] = useState(() => ensureHex(value));\n\n useEffect(() => {\n setColour(ensureHex(value));\n }, [value]);\n\n return (\n <div className={style.inline}>\n <SwatchPicker color={colour} onChange={setColour} alwaysDisplayColor />\n <span>{colour}</span>\n <input type='hidden' name={name} value={colour} />\n </div>\n );\n}\n","import { ComponentProps, useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router';\n\nimport { isStringBoolean } from '../../../features/viewers/common/viewUtils';\nimport Checkbox from '../checkbox/Checkbox';\nimport Input from '../input/input/Input';\nimport Select, { SelectOption } from '../select/Select';\nimport Switch from '../switch/Switch';\n\nimport InlineColourPicker from './InlineColourPicker';\nimport { ParamField } from './viewParams.types';\n\nimport style from './ParamInput.module.scss';\n\ninterface ParamInputProps {\n paramField: ParamField;\n}\n\nexport default function ParamInput({ paramField }: ParamInputProps) {\n const [searchParams] = useSearchParams();\n const { id, type, defaultValue } = paramField;\n\n if (type === 'persist') {\n if (!paramField.values || !paramField.values.length) {\n return null;\n }\n return <input hidden name={id} readOnly value={paramField.values.join(',')} />;\n }\n\n if (type === 'option') {\n const optionFromParams = searchParams.get(id);\n const defaultOptionValue = optionFromParams || defaultValue;\n\n if (paramField.values.length === 0) {\n return <span className={style.empty}>No options available</span>;\n }\n\n return <ControlledSelect id={id} initialValue={defaultOptionValue} options={paramField.values} />;\n }\n\n if (type === 'multi-option') {\n const optionFromParams = searchParams.getAll(id);\n\n return (\n <MultiOption\n paramField={paramField}\n options={optionFromParams.length ? optionFromParams : paramField.defaultValue ?? ['']}\n />\n );\n }\n\n if (type === 'boolean') {\n return <ControlledSwitch id={id} initialValue={isStringBoolean(searchParams.get(id)) ?? defaultValue} />;\n }\n\n if (type === 'number') {\n const { placeholder } = paramField;\n const defaultNumberValue = searchParams.get(id) ?? defaultValue;\n\n return (\n <Input\n height='large'\n type='number'\n step='any'\n name={id}\n defaultValue={defaultNumberValue}\n placeholder={placeholder}\n />\n );\n }\n\n if (type === 'colour') {\n return <InlineColourPicker name={id} value={searchParams.get(id) ?? defaultValue} />;\n }\n\n const defaultStringValue = searchParams.get(id) ?? defaultValue ?? '';\n const { placeholder } = paramField;\n\n return <ControlledInput id={id} initialValue={defaultStringValue} placeholder={placeholder} />;\n}\n\ninterface EditFormMultiOptionProps {\n paramField: ParamField & { type: 'multi-option' };\n options: string[];\n}\n\nfunction MultiOption({ paramField, options }: EditFormMultiOptionProps) {\n const { id, values } = paramField;\n const [paramState, setParamState] = useState<string[]>(options);\n\n // synchronise options\n useEffect(() => {\n setParamState(options);\n }, [options]);\n\n const toggleValue = (value: string, checked: boolean) => {\n if (checked) {\n setParamState((prev) => [...prev, value]);\n } else {\n setParamState((prev) => prev.filter((v) => v !== value));\n }\n };\n\n if (values.length === 0) {\n return <span className={style.empty}>No options available</span>;\n }\n\n return (\n <>\n <input name={id} hidden readOnly value={paramState.join(',')} />\n <div className={style.inline}>\n {values.map((option) => {\n return (\n <label\n key={option.value}\n className={style.toggleSelect}\n style={{\n '--user-bg': option.colour,\n }}\n >\n <Checkbox\n checked={paramState.includes(option.value)}\n onCheckedChange={(checked) => toggleValue(option.value, checked as boolean)}\n />\n {option.label}\n </label>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface ControlledSwitchProps {\n id: string;\n initialValue: boolean;\n}\nfunction ControlledSwitch({ id, initialValue }: ControlledSwitchProps) {\n const [checked, setChecked] = useState(initialValue);\n\n // synchronise checked state\n useEffect(() => {\n setChecked(initialValue);\n }, [initialValue]);\n\n return <Switch size='large' name={id} checked={checked} onCheckedChange={setChecked} />;\n}\n\ninterface ControlledSelectProps {\n id: string;\n initialValue?: string;\n options: SelectOption[];\n}\nfunction ControlledSelect({ id, initialValue, options }: ControlledSelectProps) {\n const [selected, setSelected] = useState(initialValue);\n\n // synchronise selected state\n useEffect(() => {\n setSelected(initialValue);\n }, [initialValue]);\n\n return (\n <Select size='large' name={id} options={options} value={selected} onValueChange={(value) => setSelected(value)} />\n );\n}\n\ninterface ControlledInputProps<T extends number | string> extends ComponentProps<typeof Input> {\n id: string;\n initialValue: T;\n}\nfunction ControlledInput<T extends number | string>({ id, initialValue, ...inputProps }: ControlledInputProps<T>) {\n const [value, setValue] = useState(initialValue);\n\n // synchronise selected state\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n return (\n <Input\n height='large'\n name={id}\n value={value}\n onChange={(event) => setValue(event.target.value as T)}\n {...inputProps}\n />\n );\n}\n","import { IoChevronDown } from 'react-icons/io5';\nimport { useLocalStorage } from '@mantine/hooks';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport { OptionTitle } from './constants';\nimport ParamInput from './ParamInput';\nimport { type ParamField } from './viewParams.types';\n\nimport style from './ViewParamsSection.module.scss';\n\ninterface ViewParamsSectionProps {\n title: string;\n collapsible?: boolean;\n options: ParamField[];\n}\n\nexport default function ViewParamsSection({ title, collapsible, options }: ViewParamsSectionProps) {\n const [collapsed, setCollapsed] = useLocalStorage({ key: `params-${title}`, defaultValue: false });\n\n const handleCollapse = () => {\n if (collapsible) {\n setCollapsed((prev) => !prev);\n }\n };\n\n return (\n <section className={style.section}>\n {title === OptionTitle.Hidden ? (\n <HiddenContents options={options} />\n ) : (\n <>\n <div className={cx([style.sectionHeader, collapsible && style.collapsible])} onClick={handleCollapse}>\n {title}\n {collapsible && <IoChevronDown className={cx([collapsed ? style.closed : style.open])} />}\n </div>\n <SectionContents options={options} collapsed={collapsed} />\n </>\n )}\n </section>\n );\n}\n\ninterface SectionContentsProps {\n options: ParamField[];\n collapsed: boolean;\n}\n\nfunction SectionContents({ options, collapsed }: SectionContentsProps) {\n return (\n <>\n {options.map((option) => {\n return (\n <label key={option.title} className={cx([style.label, collapsed && style.hidden])}>\n <span className={style.title}>{option.title}</span>\n <span className={style.description}>{option.description}</span>\n <ParamInput paramField={option} />\n </label>\n );\n })}\n </>\n );\n}\n\nfunction HiddenContents({ options }: { options: ParamField[] }) {\n return (\n <>\n {options.map((option, index) => {\n return <ParamInput key={option.title + index} paramField={option} />;\n })}\n </>\n );\n}\n","import { FormEvent, memo } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { useSearchParams } from 'react-router';\nimport { Dialog } from '@base-ui-components/react/dialog';\nimport { OntimeView } from 'ontime-types';\n\nimport { useIsSmallScreen } from '../../hooks/useIsSmallScreen';\nimport useViewSettings from '../../hooks-query/useViewSettings';\nimport Button from '../buttons/Button';\nimport IconButton from '../buttons/IconButton';\nimport Info from '../info/Info';\n\nimport { ViewOption } from './viewParams.types';\nimport { getURLSearchParamsFromObj } from './viewParams.utils';\nimport { useViewParamsEditorStore } from './viewParamsEditor.store';\nimport { ViewParamsPresets } from './ViewParamsPresets';\nimport ViewParamsSection from './ViewParamsSection';\n\nimport style from './ViewParamsEditor.module.scss';\n\ninterface EditFormDrawerProps {\n target: OntimeView;\n viewOptions: ViewOption[];\n}\n\nexport default memo(ViewParamsEditor);\nfunction ViewParamsEditor({ target, viewOptions }: EditFormDrawerProps) {\n const [_, setSearchParams] = useSearchParams();\n const { data: viewSettings } = useViewSettings();\n const { isOpen, close } = useViewParamsEditorStore();\n const isSmallScreen = useIsSmallScreen();\n\n const handleClose = () => {\n close();\n };\n\n const resetParams = () => {\n setSearchParams();\n };\n\n const onParamsFormSubmit = (formEvent: FormEvent<HTMLFormElement>) => {\n formEvent.preventDefault();\n\n const newParamsObject = Object.fromEntries(new FormData(formEvent.currentTarget));\n const newSearchParams = getURLSearchParamsFromObj(newParamsObject, viewOptions);\n setSearchParams(newSearchParams);\n\n if (isSmallScreen) {\n close();\n }\n };\n\n return (\n <Dialog.Root\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) {\n handleClose();\n }\n }}\n >\n <Dialog.Portal>\n <Dialog.Backdrop className={style.backdrop} />\n <Dialog.Popup className={style.drawer}>\n <div className={style.header}>\n <Dialog.Title>Customise</Dialog.Title>\n <IconButton variant='subtle-white' size='large' data-testid='close-view-params' onClick={handleClose}>\n <IoClose />\n </IconButton>\n </div>\n <div className={style.body}>\n {viewSettings.overrideStyles && (\n <Info className={style.info}>This view style is being modified by a custom CSS file.</Info>\n )}\n <ViewParamsPresets target={target} />\n <form id='edit-params-form' onSubmit={onParamsFormSubmit} className={style.sectionList}>\n {viewOptions.map((section) => (\n <ViewParamsSection\n key={section.title}\n title={section.title}\n collapsible={section.collapsible}\n options={section.options}\n />\n ))}\n </form>\n </div>\n <div className={style.footer}>\n <Button variant='subtle' size='large' onClick={resetParams} type='reset'>\n Reset to default\n </Button>\n <Button\n variant='primary'\n size='large'\n form='edit-params-form'\n type='submit'\n data-testid='apply-view-params'\n >\n Apply\n </Button>\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n"],"names":["makeOptionsFromCustomFields","customFields","additionalOptions","filterImageType","options","key","value","makeCustomFieldSelectOptions","makeProjectDataOptions","projectData","generatedOptions","entry","index","sanitiseColour","colour","collectFieldMetadata","paramFields","metadata","section","option","getURLSearchParamsFromObj","paramsObj","newSearchParams","addedPairs","addUniqueParam","id","pair","values","v","processedValue","ViewParamsPresets","target","viewPresets","useViewUrlPresets","searchParams","setSearchParams","useSearchParams","handleRecall","preset","newSearch","jsx","style","active","jsxs","cx","Button","OptionTitle","ensureHex","InlineColourPicker","name","setColour","useState","useEffect","SwatchPicker","ParamInput","paramField","type","defaultValue","defaultOptionValue","ControlledSelect","optionFromParams","MultiOption","ControlledSwitch","isStringBoolean","placeholder","defaultNumberValue","Input","defaultStringValue","ControlledInput","paramState","setParamState","toggleValue","checked","prev","Fragment","Checkbox","initialValue","setChecked","Switch","selected","setSelected","Select","inputProps","setValue","event","ViewParamsSection","title","collapsible","collapsed","setCollapsed","useLocalStorage","handleCollapse","HiddenContents","IoChevronDown","SectionContents","memo","ViewParamsEditor","viewOptions","_","viewSettings","useViewSettings","isOpen","close","useViewParamsEditorStore","isSmallScreen","useIsSmallScreen","handleClose","resetParams","onParamsFormSubmit","formEvent","newParamsObject","Dialog.Root","open","Dialog.Portal","Dialog.Backdrop","Dialog.Popup","Dialog.Title","IconButton","IoClose","Info"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ ._blink_gc8wt_1{animation:_blink_gc8wt_1 1s step-start infinite}@keyframes _blink_gc8wt_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_gc8wt_13{transform:rotate(45deg)}._presetSection_gc8wt_17{background-color:#101010;display:flex;flex-direction:column;gap:.25rem;padding:1rem .5rem;margin-bottom:1rem;max-height:10rem;overflow-y:auto;scrollbar-gutter:stable}._preset_gc8wt_17{display:flex;align-items:center;gap:.5rem}._preset_gc8wt_17._active_gc8wt_34{color:#578af4}._presetActions_gc8wt_38{margin-left:auto}._blink_4jmjk_1{animation:_blink_4jmjk_1 1s step-start infinite}@keyframes _blink_4jmjk_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_4jmjk_13{transform:rotate(45deg)}._inline_4jmjk_17{display:flex;align-items:center;gap:.5rem}._input_4jmjk_23{color:#e2e2e2;border:1px solid transparent;border-radius:3px;background-color:#262626;padding:0 1rem;font-size:1rem;height:2.5rem;outline:none}._input_4jmjk_23:hover{background-color:#2d2d2d}._input_4jmjk_23:focus{background-color:#404040;color:#f6f6f6;border:1px solid #578AF4}._blink_7qz4u_1{animation:_blink_7qz4u_1 1s step-start infinite}@keyframes _blink_7qz4u_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_7qz4u_13{transform:rotate(45deg)}._inline_7qz4u_17{display:inline-flex;align-items:center;flex-wrap:wrap;gap:1rem}._toggleSelect_7qz4u_24{display:flex;align-items:center;gap:.25rem;padding-inline:.5rem;height:2.5rem;background:#303030;color:#f6f6f6;line-height:1em;border-radius:3px}._toggleSelect_7qz4u_24:hover:not(:disabled):not(:active){background:#404040;color:#578af4}._toggleSelect_7qz4u_24:active:not(:disabled){background:#2d2d2d;border-color:#202020}._toggleSelect_7qz4u_24:after{content:"";margin-left:.25rem;width:.75em;height:.75em;background:var(--user-bg, #4c4c4c);border-radius:50%}._empty_7qz4u_52{color:#f6f6f6}._blink_1ssto_1{animation:_blink_1ssto_1 1s step-start infinite}@keyframes _blink_1ssto_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1ssto_13{transform:rotate(45deg)}._section_1ssto_17{color:#f6f6f6;font-size:1rem}._sectionHeader_1ssto_22{display:flex;justify-content:space-between;align-items:center;height:2rem}._sectionHeader_1ssto_22._collapsible_1ssto_28{cursor:pointer}._label_1ssto_32{margin-top:1rem;font-size:calc(1rem - 2px);color:#8a8a8a;display:flex;flex-direction:column;gap:.25rem}._title_1ssto_41{font-size:calc(1rem - 2px);display:block;width:100%}._description_1ssto_47{font-size:calc(1rem - 2px);display:block;color:#6c6c6c}._closed_1ssto_53{transition:rotate .3s cubic-bezier(.45,1.005,0,1.005);rotate:0deg}._open_1ssto_58{transition:rotate .3s cubic-bezier(.45,1.005,0,1.005);rotate:180deg}._hidden_1ssto_63{display:none}._blink_1pnpt_1{animation:_blink_1pnpt_1 1s step-start infinite}@keyframes _blink_1pnpt_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1pnpt_13{transform:rotate(45deg)}._drawerFooter_1pnpt_17{display:flex;justify-content:end;gap:1rem}._drawerFooter_1pnpt_17 button{padding:0 2em}._backdrop_1pnpt_26{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000000b3;transition:opacity .3s cubic-bezier(.45,1.005,0,1.005)}._backdrop_1pnpt_26[data-starting-style],._backdrop_1pnpt_26[data-ending-style]{opacity:0}._drawer_1pnpt_17{box-sizing:border-box;position:fixed;top:0;right:0;bottom:0;width:40rem;max-width:100vw;height:100vh;height:100dvh;display:flex;flex-direction:column;padding-block:1rem 1.5rem;background-color:#202020;color:#f6f6f6;border-left:1px solid #2d2d2d}._drawer_1pnpt_17[data-open]{transform:translate(0);transition:transform .3s cubic-bezier(.45,1.005,0,1.005)}._drawer_1pnpt_17[data-starting-style],._drawer_1pnpt_17[data-ending-style]{transform:translate(100%);transition:transform .5s cubic-bezier(.45,1.005,0,1.005)}@media (max-width: 500px){._drawer_1pnpt_17{width:100vw}}._header_1pnpt_67{padding-inline:1rem;display:flex;align-items:center;justify-content:space-between;height:3.5rem;font-weight:600;font-size:1.25rem}._body_1pnpt_77{flex:1;padding-inline:1rem;padding-bottom:10vh;overflow-y:auto}._footer_1pnpt_84{display:flex;padding-inline:1rem;gap:1rem;align-items:center;justify-content:flex-end}._sectionList_1pnpt_92{display:flex;flex-direction:column;gap:2rem;padding-right:.5rem}._info_1pnpt_99{margin-bottom:1rem}
@@ -1,2 +1,2 @@
1
- import{O as ie,h as v,P as b}from"./vendor-CCiSQ9k9.js";import{j as D,i as h,v as ae,w as oe,x as se,y as de,z as ue,A as ce,B as le,C as fe,D as ye,E as Ee,S as we,F as pe}from"./useRundown-BfpjcCEJ.js";import{T as _}from"./validateEvent-P9sf7C10.js";import{ax as o,b8 as me,by as g,r as ve,be as ge,M as B,bz as R,H as be}from"./index-BQEUaoAf.js";import{u as Ie}from"./editorSettings-BU0pTMSY.js";import{p as M}from"./parseUserTime-BeTKj08M.js";import{s as he}from"./rundownUtils-BZHazkXR.js";(function(){try{var n=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},y=new n.Error().stack;y&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[y]="fbe5a3e4-0992-4074-a64d-e72b9a44df5d",n._sentryDebugIdIdentifier="sentry-dbid-fbe5a3e4-0992-4074-a64d-e72b9a44df5d")}catch{}})();function Re(n,y){const c=[];for(let s=0;s<n.length;s++){const E=y[n[s]];E&&(D(E)?(c.push(E.id),c.push(...E.entries),c.push(`end-${E.id}`)):c.push(E.id))}return c}function Fe(n,y,c,s){return n==="end-group"?c==="after":n==="group"?!(c!==void 0&&c==="after"&&!s):y===null}function De(n,y,c){const s=c[n],E=y.indexOf(n),f=y[E-1];if(!f)return"parent"in s&&s.parent!==null?{destinationId:s.parent,order:"before"}:{destinationId:null,order:"before"};if(D(s)){const d=c[f];return"parent"in d&&d.parent!==null?{destinationId:d.parent,order:"before"}:{destinationId:f,order:"before"}}const l=c[f],p=s.parent;return D(l)?p===null?{destinationId:f,order:"insert"}:{destinationId:f,order:"before"}:h(l)&&l.parent!==null&&p===null?{destinationId:f,order:"after"}:{destinationId:f,order:"before"}}function Qe(n,y,c){const s=c[n],E=y.indexOf(n),f=y[E+1];if("parent"in s&&s.parent!==null){const I=c[s.parent];if(D(I)&&I.entries[I.entries.length-1]===n)return{destinationId:s.parent,order:"after"}}if(!f)return{destinationId:null,order:"after"};if(D(s)){if(s.entries.includes(f)){const I=E+s.entries.length+1,Q=y[I];return Q?{destinationId:Q,order:"after"}:{destinationId:null,order:"after"}}return{destinationId:f,order:"after"}}const l=c[f],p=s.parent;return D(l)&&p===null?l.entries.length===0?{destinationId:f,order:"insert"}:{destinationId:l.entries[0],order:"before"}:(h(l)?l.parent:null)!==null&&p===null?{destinationId:f,order:"after"}:{destinationId:f,order:"after"}}function Se(n,y){const c=[];for(const s of y)n.includes(s)&&c.push(s);return c}const Te=()=>{const n=ie(),{linkPrevious:y,defaultTimeStrategy:c,defaultDuration:s,defaultWarnTime:E,defaultDangerTime:f,defaultTimerType:l,defaultEndAction:p}=Ie(),d=v.useCallback(()=>n.getQueryData(o),[n]),I=v.useCallback(r=>{const t=d();if(t!=null&&t.entries)return t.entries[r]},[d]),{mutateAsync:Q}=b({mutationFn:([r,t])=>ae(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSettled:()=>n.invalidateQueries({queryKey:o})}),j=v.useCallback(async(r,t)=>{const e=d(),i=e==null?void 0:e.id;if(!i)throw new Error("Rundown not initialised");const a={...r,id:me()};if(h(a)){if(t!=null&&t.lastEventId){const u=e.entries[t==null?void 0:t.lastEventId];h(u)&&(a.timeStart=u.timeEnd)}a.linkStart=(t==null?void 0:t.linkPrevious)??y,a.duration===void 0&&a.timeEnd===void 0&&(a.duration=M(s)),a.timeDanger===void 0&&(a.timeDanger=M(f)),a.timeWarning===void 0&&(a.timeWarning=M(E)),a.timerType===void 0&&(a.timerType=l),a.endAction===void 0&&(a.endAction=p),a.timeStrategy===void 0&&(a.timeStrategy=c)}t!=null&&t.after&&(a.after=t.after),t!=null&&t.before&&(a.before=t.before);try{await Q([i,a])}catch(u){g("Failed adding event",u)}},[d,y,s,f,E,l,p,c,Q]),{mutateAsync:F}=b({mutationFn:([r,t])=>oe(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSettled:()=>n.invalidateQueries({queryKey:o})}),H=v.useCallback(async r=>{var t;try{const e=(t=d())==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");await F([e,r])}catch(e){g("Error cloning entry",e)}},[F,d]),{mutateAsync:q}=b({mutationFn:([r,t])=>se(r,t),onMutate:async([r,t])=>{await n.cancelQueries({queryKey:o});const e=n.getQueryData(o),i=t.id;if(e&&i){const a={...e.entries};a[i]={...a[i],...t},n.setQueryData(o,{id:e.id,title:e.title,order:e.order,flatOrder:e.flatOrder,entries:a,revision:-1})}return{previousData:e,newEvent:t}},onError:(r,t,e)=>{e!=null&&e.previousData&&n.setQueryData(o,e==null?void 0:e.previousData)},onSettled:async()=>{await n.invalidateQueries({queryKey:o})}}),z=v.useCallback(async r=>{var t;try{const e=(t=d())==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");await q([e,r])}catch(e){g("Error updating event",e)}},[d,q]),V=v.useCallback(async(r,t,e,i)=>{var k;const a=(k=d())==null?void 0:k.id;if(!a)throw new Error("Rundown not initialised");if(!i&&e==="")return;const u={id:r};i?t==="timeEnd"?(u.timeStrategy=e===""?_.LockDuration:_.LockEnd,u.timeEnd=e===""?void 0:w()):t==="duration"?(u.timeStrategy=e===""?_.LockEnd:_.LockDuration,u.duration=e===""?void 0:w()):t==="timeStart"&&(u.linkStart=e==="",u.timeStart=e===""?void 0:w()):u[t]=w();try{await q([a,u])}catch(m){g("Error updating event",m)}function w(){let m=0;if(e==="p"||e==="prev"||e==="previous")m=S();else if(e.startsWith("+")||e.startsWith("p+")||e.startsWith("p +")){const A=e.substring(1);m=S()+M(A)}else m=M(e);return Math.min(m,ve-ge)}function S(){const m=n.getQueryData(o);if(!(m!=null&&m.order)||!(m!=null&&m.entries))return 0;const A=m.order.indexOf(r);if(A===0)return 0;let $=0;for(let K=A-1;K>=0;K--){const N=m.entries[m.order[K]];if(h(N)){$=N.timeEnd;break}}return $}},[d,q,n]),{mutateAsync:T}=b({mutationFn:([r,t])=>de(r,t),onMutate:async([r,t])=>{await n.cancelQueries({queryKey:o});const e=n.getQueryData(o);if(e){const i=new Set(t.ids),a={...e.entries};i.forEach(u=>{if(Object.hasOwn(a,u)){const w=a[u];h(w)&&(a[u]={...w,...t})}}),n.setQueryData(o,{id:e.id,title:e.title,order:e.order,flatOrder:e.flatOrder,entries:a,revision:-1})}return{previousRundown:e}},onSuccess:r=>{if(!r.data)return;const{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w}=r.data;n.setQueryData(o,{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w})},onError:(r,t,e)=>{n.setQueryData(o,e==null?void 0:e.previousRundown)}}),J=v.useCallback(async(r,t)=>{var e;try{const i=(e=d())==null?void 0:e.id;if(!i)throw new Error("Rundown not initialised");await T([i,{data:r,ids:t}])}catch(i){g("Error updating events",i)}},[T,d]),{mutateAsync:L}=b({mutationFn:([r,t])=>ue(r,t),onMutate:async([r,t])=>{await n.cancelQueries({queryKey:o});const e=n.getQueryData(o);if(e){const{entries:i,order:a,flatOrder:u}=Me(t,e);n.setQueryData(o,{id:e.id,title:e.title,order:a,flatOrder:u,entries:i,revision:-1})}return{previousData:e}},onError:(r,t,e)=>{n.setQueryData(o,e==null?void 0:e.previousData)},onSettled:()=>{n.invalidateQueries({queryKey:o})}}),X=v.useCallback(async r=>{var t;try{const e=(t=d())==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");await L([e,r])}catch(e){g("Error deleting event",e)}},[L,d]),{mutateAsync:P}=b({mutationFn:([r])=>ce(r),onMutate:async()=>{await n.cancelQueries({queryKey:o});const r=n.getQueryData(o);return n.setQueryData(o,{id:(r==null?void 0:r.id)??"default",title:(r==null?void 0:r.title)??"",order:[],flatOrder:[],entries:{},revision:-1}),{previousData:r}},onError:(r,t,e)=>{n.setQueryData(o,e==null?void 0:e.previousData)},onSettled:()=>{n.invalidateQueries({queryKey:o})}}),Y=v.useCallback(async()=>{var r;try{const t=(r=d())==null?void 0:r.id;if(!t)throw new Error("Rundown not initialised");await P([t])}catch(t){g("Error deleting events",t)}},[P,d]),{mutateAsync:G}=b({mutationFn:([r,t])=>le(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSuccess:r=>{if(!r.data)return;const{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w}=r.data;n.setQueryData(o,{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w})},onSettled:()=>{n.invalidateQueries({queryKey:o})}}),Z=v.useCallback(async r=>{var t;try{const e=(t=d())==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");await G([e,r])}catch(e){g("Error applying delay",e)}},[G,d]),{mutateAsync:U}=b({mutationFn:([r,t])=>fe(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSuccess:r=>{if(!r.data)return;const{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w}=r.data;n.setQueryData(o,{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w})},onSettled:()=>n.invalidateQueries({queryKey:o})}),x=v.useCallback(async r=>{var t;try{const e=(t=d())==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");await U([e,r])}catch(e){g("Error dissolving group",e)}},[d,U]),{mutateAsync:C}=b({mutationFn:([r,t])=>ye(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSuccess:r=>{if(!r.data)return;const{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w}=r.data;n.setQueryData(o,{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w})},onSettled:()=>n.invalidateQueries({queryKey:o})}),ee=v.useCallback(async r=>{if(r.length!==0)try{const t=d(),e=t==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");if(r.length===1)await C([e,r]);else{const i=Se(r,t.flatOrder);await C([e,i])}}catch(t){g("Error grouping entries",t)}},[d,C]),{mutateAsync:O}=b({mutationFn:([r,t])=>Ee(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSettled:()=>{n.invalidateQueries({queryKey:o})}}),te=v.useCallback(async(r,t)=>{var e;try{const i=d(),a=i==null?void 0:i.id;if(!a)throw new Error("Rundown not initialised");const{destinationId:u,order:w}=t==="up"?De(r,i.flatOrder,i.entries):Qe(r,i.flatOrder,i.entries);return u?(await O([a,{entryId:r,destinationId:u,order:w}]),((e=i.entries[u])==null?void 0:e.type)===we.Group?u:void 0):void 0}catch(i){g("Error re-ordering event",i)}},[d,O]),re=v.useCallback(async(r,t,e)=>{var i;try{const a=(i=d())==null?void 0:i.id;if(!a)throw new Error("Rundown not initialised");await O([a,{entryId:r,destinationId:t,order:e}])}catch(a){throw g("Error re-ordering event",a),a}},[d,O]),{mutateAsync:W}=b({mutationFn:([r,t,e])=>pe(r,t,e),onMutate:async([r,t,e])=>{await n.cancelQueries({queryKey:o});const i=n.getQueryData(o);if(i){const a={...i.entries},u=i.entries[t],w=i.entries[e];if(!h(u)||!h(w))return;const[S,k]=he(u,w);a[t]=S,a[e]=k,n.setQueryData(o,{id:i.id,title:i.title,order:i.order,flatOrder:i.flatOrder,entries:a,revision:-1})}return{previousData:i}},onError:(r,t,e)=>{n.setQueryData(o,e==null?void 0:e.previousData)},onSettled:()=>{n.invalidateQueries({queryKey:o})}}),ne=v.useCallback(async(r,t)=>{var e;try{const i=(e=d())==null?void 0:e.id;if(!i)throw new Error("Rundown not initialised");await W([i,r,t])}catch(i){g("Error re-ordering event",i)}},[d,W]);return{addEntry:j,applyDelay:Z,batchUpdateEvents:J,clone:H,deleteEntry:X,deleteAllEntries:Y,ungroup:x,getEntryById:I,groupEntries:ee,move:te,reorderEntry:re,swapEvents:ne,updateEntry:z,updateTimer:V}};function Me(n,y){const c={...y.entries};let s=[...y.order],E=[...y.flatOrder];for(let l=0;l<n.length;l++){const p=c[n[l]];f(p)}function f(l){if(D(l)||!l.parent)s=s.filter(p=>p!==l.id);else{const p=c[l.parent];p&&D(p)&&(p.entries=p.entries.filter(d=>d!==l.id))}delete c[l.id],E=E.filter(p=>p!==l.id)}return{entries:c,order:s,flatOrder:E}}function Le(n,y="compact"){if(n==null||n===0)return"";const c=n<0,s=Math.abs(n),E=y==="compact",f=E?"+":"delayed by ",l=E?"-":"ahead by ";return s<B?`${c?l:f}${R(s,"s")} sec`:s<be&&s%B===0?`${c?l:f}${R(s,"m")} min`:`${c?l:f}${R(s,"HH:mm:ss")}`}export{Re as a,Fe as c,Le as m,Te as u};
2
- //# sourceMappingURL=dateConfig-DRQGMWDF.js.map
1
+ import{O as ie,h as g,P as I}from"./vendor-BoH5HFNN.js";import{j as D,i as h,x as ae,y as oe,z as se,A as de,B as ue,C as ce,D as le,E as fe,F as ye,G as Ee,S as we,H as pe}from"./useRundown-BFae0_bU.js";import{T as _}from"./validateEvent-3adKsP1N.js";import{az as o,ba as me,bC as v,s as ge,bg as ve,M as B,bD as R,I as Ie}from"./index-CDBQg2fh.js";import{u as be}from"./editorSettings-DH9ca-nB.js";import{p as M}from"./parseUserTime-Cp5iWS7y.js";import{s as he}from"./rundownUtils-DJKMt8Ih.js";(function(){try{var n=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},y=new n.Error().stack;y&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[y]="c76dfe46-f894-46dd-a069-24c22d6e741b",n._sentryDebugIdIdentifier="sentry-dbid-c76dfe46-f894-46dd-a069-24c22d6e741b")}catch{}})();function Re(n,y){const c=[];for(let s=0;s<n.length;s++){const E=y[n[s]];E&&(D(E)?(c.push(E.id),c.push(...E.entries),c.push(`end-${E.id}`)):c.push(E.id))}return c}function Fe(n,y,c,s){return n==="end-group"?c==="after":n==="group"?!(c!==void 0&&c==="after"&&!s):y===null}function De(n,y,c){const s=c[n],E=y.indexOf(n),f=y[E-1];if(!f)return"parent"in s&&s.parent!==null?{destinationId:s.parent,order:"before"}:{destinationId:null,order:"before"};if(D(s)){const d=c[f];return"parent"in d&&d.parent!==null?{destinationId:d.parent,order:"before"}:{destinationId:f,order:"before"}}const l=c[f],p=s.parent;return D(l)?p===null?{destinationId:f,order:"insert"}:{destinationId:f,order:"before"}:h(l)&&l.parent!==null&&p===null?{destinationId:f,order:"after"}:{destinationId:f,order:"before"}}function Qe(n,y,c){const s=c[n],E=y.indexOf(n),f=y[E+1];if("parent"in s&&s.parent!==null){const b=c[s.parent];if(D(b)&&b.entries[b.entries.length-1]===n)return{destinationId:s.parent,order:"after"}}if(!f)return{destinationId:null,order:"after"};if(D(s)){if(s.entries.includes(f)){const b=E+s.entries.length+1,Q=y[b];return Q?{destinationId:Q,order:"after"}:{destinationId:null,order:"after"}}return{destinationId:f,order:"after"}}const l=c[f],p=s.parent;return D(l)&&p===null?l.entries.length===0?{destinationId:f,order:"insert"}:{destinationId:l.entries[0],order:"before"}:(h(l)?l.parent:null)!==null&&p===null?{destinationId:f,order:"after"}:{destinationId:f,order:"after"}}function Se(n,y){const c=[];for(const s of y)n.includes(s)&&c.push(s);return c}const Te=()=>{const n=ie(),{linkPrevious:y,defaultTimeStrategy:c,defaultDuration:s,defaultWarnTime:E,defaultDangerTime:f,defaultTimerType:l,defaultEndAction:p}=be(),d=g.useCallback(()=>n.getQueryData(o),[n]),b=g.useCallback(r=>{const t=d();if(t!=null&&t.entries)return t.entries[r]},[d]),{mutateAsync:Q}=I({mutationFn:([r,t])=>ae(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSettled:()=>n.invalidateQueries({queryKey:o})}),j=g.useCallback(async(r,t)=>{const e=d(),i=e==null?void 0:e.id;if(!i)throw new Error("Rundown not initialised");const a={...r,id:me()};if(h(a)){if(t!=null&&t.lastEventId){const u=e.entries[t==null?void 0:t.lastEventId];h(u)&&(a.timeStart=u.timeEnd)}a.linkStart=(t==null?void 0:t.linkPrevious)??y,a.duration===void 0&&a.timeEnd===void 0&&(a.duration=M(s)),a.timeDanger===void 0&&(a.timeDanger=M(f)),a.timeWarning===void 0&&(a.timeWarning=M(E)),a.timerType===void 0&&(a.timerType=l),a.endAction===void 0&&(a.endAction=p),a.timeStrategy===void 0&&(a.timeStrategy=c)}t!=null&&t.after&&(a.after=t.after),t!=null&&t.before&&(a.before=t.before);try{await Q([i,a])}catch(u){v("Failed adding event",u)}},[d,y,s,f,E,l,p,c,Q]),{mutateAsync:F}=I({mutationFn:([r,t])=>oe(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSettled:()=>n.invalidateQueries({queryKey:o})}),H=g.useCallback(async r=>{var t;try{const e=(t=d())==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");await F([e,r])}catch(e){v("Error cloning entry",e)}},[F,d]),{mutateAsync:q}=I({mutationFn:([r,t])=>se(r,t),onMutate:async([r,t])=>{await n.cancelQueries({queryKey:o});const e=n.getQueryData(o),i=t.id;if(e&&i){const a={...e.entries};a[i]={...a[i],...t},n.setQueryData(o,{id:e.id,title:e.title,order:e.order,flatOrder:e.flatOrder,entries:a,revision:-1})}return{previousData:e,newEvent:t}},onError:(r,t,e)=>{e!=null&&e.previousData&&n.setQueryData(o,e==null?void 0:e.previousData)},onSettled:async()=>{await n.invalidateQueries({queryKey:o})}}),z=g.useCallback(async r=>{var t;try{const e=(t=d())==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");await q([e,r])}catch(e){v("Error updating event",e)}},[d,q]),V=g.useCallback(async(r,t,e,i)=>{var k;const a=(k=d())==null?void 0:k.id;if(!a)throw new Error("Rundown not initialised");if(!i&&e==="")return;const u={id:r};i?t==="timeEnd"?(u.timeStrategy=e===""?_.LockDuration:_.LockEnd,u.timeEnd=e===""?void 0:w()):t==="duration"?(u.timeStrategy=e===""?_.LockEnd:_.LockDuration,u.duration=e===""?void 0:w()):t==="timeStart"&&(u.linkStart=e==="",u.timeStart=e===""?void 0:w()):u[t]=w();try{await q([a,u])}catch(m){v("Error updating event",m)}function w(){let m=0;if(e==="p"||e==="prev"||e==="previous")m=S();else if(e.startsWith("+")||e.startsWith("p+")||e.startsWith("p +")){const A=e.substring(1);m=S()+M(A)}else m=M(e);return Math.min(m,ge-ve)}function S(){const m=n.getQueryData(o);if(!(m!=null&&m.order)||!(m!=null&&m.entries))return 0;const A=m.order.indexOf(r);if(A===0)return 0;let $=0;for(let K=A-1;K>=0;K--){const N=m.entries[m.order[K]];if(h(N)){$=N.timeEnd;break}}return $}},[d,q,n]),{mutateAsync:T}=I({mutationFn:([r,t])=>de(r,t),onMutate:async([r,t])=>{await n.cancelQueries({queryKey:o});const e=n.getQueryData(o);if(e){const i=new Set(t.ids),a={...e.entries};i.forEach(u=>{if(Object.hasOwn(a,u)){const w=a[u];h(w)&&(a[u]={...w,...t})}}),n.setQueryData(o,{id:e.id,title:e.title,order:e.order,flatOrder:e.flatOrder,entries:a,revision:-1})}return{previousRundown:e}},onSuccess:r=>{if(!r.data)return;const{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w}=r.data;n.setQueryData(o,{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w})},onError:(r,t,e)=>{n.setQueryData(o,e==null?void 0:e.previousRundown)}}),J=g.useCallback(async(r,t)=>{var e;try{const i=(e=d())==null?void 0:e.id;if(!i)throw new Error("Rundown not initialised");await T([i,{data:r,ids:t}])}catch(i){v("Error updating events",i)}},[T,d]),{mutateAsync:L}=I({mutationFn:([r,t])=>ue(r,t),onMutate:async([r,t])=>{await n.cancelQueries({queryKey:o});const e=n.getQueryData(o);if(e){const{entries:i,order:a,flatOrder:u}=Me(t,e);n.setQueryData(o,{id:e.id,title:e.title,order:a,flatOrder:u,entries:i,revision:-1})}return{previousData:e}},onError:(r,t,e)=>{n.setQueryData(o,e==null?void 0:e.previousData)},onSettled:()=>{n.invalidateQueries({queryKey:o})}}),X=g.useCallback(async r=>{var t;try{const e=(t=d())==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");await L([e,r])}catch(e){v("Error deleting event",e)}},[L,d]),{mutateAsync:P}=I({mutationFn:([r])=>ce(r),onMutate:async()=>{await n.cancelQueries({queryKey:o});const r=n.getQueryData(o);return n.setQueryData(o,{id:(r==null?void 0:r.id)??"default",title:(r==null?void 0:r.title)??"",order:[],flatOrder:[],entries:{},revision:-1}),{previousData:r}},onError:(r,t,e)=>{n.setQueryData(o,e==null?void 0:e.previousData)},onSettled:()=>{n.invalidateQueries({queryKey:o})}}),Y=g.useCallback(async()=>{var r;try{const t=(r=d())==null?void 0:r.id;if(!t)throw new Error("Rundown not initialised");await P([t])}catch(t){v("Error deleting events",t)}},[P,d]),{mutateAsync:G}=I({mutationFn:([r,t])=>le(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSuccess:r=>{if(!r.data)return;const{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w}=r.data;n.setQueryData(o,{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w})},onSettled:()=>{n.invalidateQueries({queryKey:o})}}),Z=g.useCallback(async r=>{var t;try{const e=(t=d())==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");await G([e,r])}catch(e){v("Error applying delay",e)}},[G,d]),{mutateAsync:U}=I({mutationFn:([r,t])=>fe(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSuccess:r=>{if(!r.data)return;const{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w}=r.data;n.setQueryData(o,{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w})},onSettled:()=>n.invalidateQueries({queryKey:o})}),x=g.useCallback(async r=>{var t;try{const e=(t=d())==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");await U([e,r])}catch(e){v("Error dissolving group",e)}},[d,U]),{mutateAsync:C}=I({mutationFn:([r,t])=>ye(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSuccess:r=>{if(!r.data)return;const{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w}=r.data;n.setQueryData(o,{id:t,title:e,order:i,flatOrder:a,entries:u,revision:w})},onSettled:()=>n.invalidateQueries({queryKey:o})}),ee=g.useCallback(async r=>{if(r.length!==0)try{const t=d(),e=t==null?void 0:t.id;if(!e)throw new Error("Rundown not initialised");if(r.length===1)await C([e,r]);else{const i=Se(r,t.flatOrder);await C([e,i])}}catch(t){v("Error grouping entries",t)}},[d,C]),{mutateAsync:O}=I({mutationFn:([r,t])=>Ee(r,t),onMutate:()=>n.cancelQueries({queryKey:o}),onSettled:()=>{n.invalidateQueries({queryKey:o})}}),te=g.useCallback(async(r,t)=>{var e;try{const i=d(),a=i==null?void 0:i.id;if(!a)throw new Error("Rundown not initialised");const{destinationId:u,order:w}=t==="up"?De(r,i.flatOrder,i.entries):Qe(r,i.flatOrder,i.entries);return u?(await O([a,{entryId:r,destinationId:u,order:w}]),((e=i.entries[u])==null?void 0:e.type)===we.Group?u:void 0):void 0}catch(i){v("Error re-ordering event",i)}},[d,O]),re=g.useCallback(async(r,t,e)=>{var i;try{const a=(i=d())==null?void 0:i.id;if(!a)throw new Error("Rundown not initialised");await O([a,{entryId:r,destinationId:t,order:e}])}catch(a){throw v("Error re-ordering event",a),a}},[d,O]),{mutateAsync:W}=I({mutationFn:([r,t,e])=>pe(r,t,e),onMutate:async([r,t,e])=>{await n.cancelQueries({queryKey:o});const i=n.getQueryData(o);if(i){const a={...i.entries},u=i.entries[t],w=i.entries[e];if(!h(u)||!h(w))return;const[S,k]=he(u,w);a[t]=S,a[e]=k,n.setQueryData(o,{id:i.id,title:i.title,order:i.order,flatOrder:i.flatOrder,entries:a,revision:-1})}return{previousData:i}},onError:(r,t,e)=>{n.setQueryData(o,e==null?void 0:e.previousData)},onSettled:()=>{n.invalidateQueries({queryKey:o})}}),ne=g.useCallback(async(r,t)=>{var e;try{const i=(e=d())==null?void 0:e.id;if(!i)throw new Error("Rundown not initialised");await W([i,r,t])}catch(i){v("Error re-ordering event",i)}},[d,W]);return{addEntry:j,applyDelay:Z,batchUpdateEvents:J,clone:H,deleteEntry:X,deleteAllEntries:Y,ungroup:x,getEntryById:b,groupEntries:ee,move:te,reorderEntry:re,swapEvents:ne,updateEntry:z,updateTimer:V}};function Me(n,y){const c={...y.entries};let s=[...y.order],E=[...y.flatOrder];for(let l=0;l<n.length;l++){const p=c[n[l]];f(p)}function f(l){if(D(l)||!l.parent)s=s.filter(p=>p!==l.id);else{const p=c[l.parent];p&&D(p)&&(p.entries=p.entries.filter(d=>d!==l.id))}delete c[l.id],E=E.filter(p=>p!==l.id)}return{entries:c,order:s,flatOrder:E}}function Le(n,y="compact"){if(n==null||n===0)return"";const c=n<0,s=Math.abs(n),E=y==="compact",f=E?"+":"delayed by ",l=E?"-":"ahead by ";return s<B?`${c?l:f}${R(s,"s")} sec`:s<Ie&&s%B===0?`${c?l:f}${R(s,"m")} min`:`${c?l:f}${R(s,"HH:mm:ss")}`}export{Re as a,Fe as c,Le as m,Te as u};
2
+ //# sourceMappingURL=dateConfig-_BhycZza.js.map