@getontime/cli 4.0.0 → 4.1.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 (348) hide show
  1. package/client/assets/{Backstage-ZSqb8OU6.js → Backstage-BhtXVpms.js} +2 -2
  2. package/client/assets/Backstage-BhtXVpms.js.br +0 -0
  3. package/client/assets/Backstage-BhtXVpms.js.gz +0 -0
  4. package/client/assets/{Backstage-ZSqb8OU6.js.map → Backstage-BhtXVpms.js.map} +1 -1
  5. package/client/assets/{Countdown-DVRZbeRP.js → Countdown-NmGi1KMx.js} +2 -2
  6. package/client/assets/Countdown-NmGi1KMx.js.br +0 -0
  7. package/client/assets/Countdown-NmGi1KMx.js.gz +0 -0
  8. package/client/assets/Countdown-NmGi1KMx.js.map +1 -0
  9. package/client/assets/{CustomTranslationModal-D_Cy0d_H.js → CustomTranslationModal-BBNxpds0.js} +2 -2
  10. package/client/assets/CustomTranslationModal-BBNxpds0.js.br +0 -0
  11. package/client/assets/CustomTranslationModal-BBNxpds0.js.gz +0 -0
  12. package/client/assets/{CustomTranslationModal-D_Cy0d_H.js.map → CustomTranslationModal-BBNxpds0.js.map} +1 -1
  13. package/client/assets/{DelayIndicator-B_JKLKYW.js → DelayIndicator-CFCDQ7FN.js} +2 -2
  14. package/client/assets/DelayIndicator-CFCDQ7FN.js.br +0 -0
  15. package/client/assets/DelayIndicator-CFCDQ7FN.js.gz +0 -0
  16. package/client/assets/{DelayIndicator-B_JKLKYW.js.map → DelayIndicator-CFCDQ7FN.js.map} +1 -1
  17. package/client/assets/{EditorFeatureWrapper-DzBxDvRn.js → EditorFeatureWrapper-D55c8JBz.js} +2 -2
  18. package/client/assets/EditorFeatureWrapper-D55c8JBz.js.br +0 -0
  19. package/client/assets/EditorFeatureWrapper-D55c8JBz.js.gz +0 -0
  20. package/client/assets/{EditorFeatureWrapper-DzBxDvRn.js.map → EditorFeatureWrapper-D55c8JBz.js.map} +1 -1
  21. package/client/assets/{EditorUtils-De0umjb-.js → EditorUtils-CFE106qQ.js} +2 -2
  22. package/client/assets/EditorUtils-CFE106qQ.js.br +0 -0
  23. package/client/assets/EditorUtils-CFE106qQ.js.gz +0 -0
  24. package/client/assets/{EditorUtils-De0umjb-.js.map → EditorUtils-CFE106qQ.js.map} +1 -1
  25. package/client/assets/{Empty-BYF0tVRk.js → Empty-C-JO_XAr.js} +2 -2
  26. package/client/assets/Empty-C-JO_XAr.js.br +2 -0
  27. package/client/assets/Empty-C-JO_XAr.js.gz +0 -0
  28. package/client/assets/{Empty-BYF0tVRk.js.map → Empty-C-JO_XAr.js.map} +1 -1
  29. package/client/assets/{EmptyPage-DYH2bswA.js → EmptyPage-BSzsxpGg.js} +2 -2
  30. package/client/assets/EmptyPage-BSzsxpGg.js.br +1 -0
  31. package/client/assets/EmptyPage-BSzsxpGg.js.gz +0 -0
  32. package/client/assets/{EmptyPage-DYH2bswA.js.map → EmptyPage-BSzsxpGg.js.map} +1 -1
  33. package/client/assets/{FollowButton-DyWsvyFF.js → FollowButton-Mox6N4JW.js} +2 -2
  34. package/client/assets/FollowButton-Mox6N4JW.js.br +0 -0
  35. package/client/assets/FollowButton-Mox6N4JW.js.gz +0 -0
  36. package/client/assets/{FollowButton-DyWsvyFF.js.map → FollowButton-Mox6N4JW.js.map} +1 -1
  37. package/client/assets/MessageControlExport-BL2ip9qN.js +2 -0
  38. package/client/assets/MessageControlExport-BL2ip9qN.js.br +0 -0
  39. package/client/assets/MessageControlExport-BL2ip9qN.js.gz +0 -0
  40. package/client/assets/{MessageControlExport-yLGU2dMq.js.map → MessageControlExport-BL2ip9qN.js.map} +1 -1
  41. package/client/assets/{MilestoneEditor-GkzJ-h1C.js → MilestoneEditor-DcWPGKNK.js} +2 -2
  42. package/client/assets/MilestoneEditor-DcWPGKNK.js.br +0 -0
  43. package/client/assets/MilestoneEditor-DcWPGKNK.js.gz +0 -0
  44. package/client/assets/{MilestoneEditor-GkzJ-h1C.js.map → MilestoneEditor-DcWPGKNK.js.map} +1 -1
  45. package/client/assets/Modal-D3tAPV2u.css +1 -0
  46. package/client/assets/Modal-D3tAPV2u.css.br +0 -0
  47. package/client/assets/Modal-D3tAPV2u.css.gz +0 -0
  48. package/client/assets/Modal-krcwDRb-.js +2 -0
  49. package/client/assets/Modal-krcwDRb-.js.br +0 -0
  50. package/client/assets/Modal-krcwDRb-.js.gz +0 -0
  51. package/client/assets/Modal-krcwDRb-.js.map +1 -0
  52. package/client/assets/{MultiPartProgressBar-BITERKS0.js → MultiPartProgressBar-BXQbpM-j.js} +2 -2
  53. package/client/assets/MultiPartProgressBar-BXQbpM-j.js.br +0 -0
  54. package/client/assets/MultiPartProgressBar-BXQbpM-j.js.gz +0 -0
  55. package/client/assets/{MultiPartProgressBar-BITERKS0.js.map → MultiPartProgressBar-BXQbpM-j.js.map} +1 -1
  56. package/client/assets/{OperatorExport-DMZ6eQfT.js → OperatorExport-C50KHBrD.js} +2 -2
  57. package/client/assets/OperatorExport-C50KHBrD.js.br +0 -0
  58. package/client/assets/OperatorExport-C50KHBrD.js.gz +0 -0
  59. package/client/assets/{OperatorExport-DMZ6eQfT.js.map → OperatorExport-C50KHBrD.js.map} +1 -1
  60. package/client/assets/OverviewWrapper-MGJ1uE5W.js +2 -0
  61. package/client/assets/OverviewWrapper-MGJ1uE5W.js.br +0 -0
  62. package/client/assets/OverviewWrapper-MGJ1uE5W.js.gz +0 -0
  63. package/client/assets/{OverviewWrapper-riM6vPno.js.map → OverviewWrapper-MGJ1uE5W.js.map} +1 -1
  64. package/client/assets/{ProjectInfo-DxtMq70a.js → ProjectInfo-CJ-GLvVG.js} +2 -2
  65. package/client/assets/ProjectInfo-CJ-GLvVG.js.br +0 -0
  66. package/client/assets/ProjectInfo-CJ-GLvVG.js.gz +0 -0
  67. package/client/assets/{ProjectInfo-DxtMq70a.js.map → ProjectInfo-CJ-GLvVG.js.map} +1 -1
  68. package/client/assets/{ProtectRoute-p1fmtLeu.js → ProtectRoute-DJ9xZnPI.js} +2 -2
  69. package/client/assets/ProtectRoute-DJ9xZnPI.js.br +0 -0
  70. package/client/assets/ProtectRoute-DJ9xZnPI.js.gz +0 -0
  71. package/client/assets/{ProtectRoute-p1fmtLeu.js.map → ProtectRoute-DJ9xZnPI.js.map} +1 -1
  72. package/client/assets/{ProtectedCuesheet-CvRnqT0z.js → ProtectedCuesheet-B8tg6Mmo.js} +2 -2
  73. package/client/assets/ProtectedCuesheet-B8tg6Mmo.js.br +0 -0
  74. package/client/assets/ProtectedCuesheet-B8tg6Mmo.js.gz +0 -0
  75. package/client/assets/{ProtectedCuesheet-CvRnqT0z.js.map → ProtectedCuesheet-B8tg6Mmo.js.map} +1 -1
  76. package/client/assets/ProtectedEditor-Bl4wV72N.js +3 -0
  77. package/client/assets/ProtectedEditor-Bl4wV72N.js.br +0 -0
  78. package/client/assets/ProtectedEditor-Bl4wV72N.js.gz +0 -0
  79. package/client/assets/ProtectedEditor-Bl4wV72N.js.map +1 -0
  80. package/client/assets/{RundownEntry-B1dSz1wu.js → RundownEntry-D9tXNXPy.js} +2 -2
  81. package/client/assets/RundownEntry-D9tXNXPy.js.br +0 -0
  82. package/client/assets/RundownEntry-D9tXNXPy.js.gz +0 -0
  83. package/client/assets/{RundownEntry-B1dSz1wu.js.map → RundownEntry-D9tXNXPy.js.map} +1 -1
  84. package/client/assets/RundownExport-1zBZurIG.css +1 -0
  85. package/client/assets/RundownExport-1zBZurIG.css.br +0 -0
  86. package/client/assets/RundownExport-1zBZurIG.css.gz +0 -0
  87. package/client/assets/RundownExport-D6uAmFbb.js +3 -0
  88. package/client/assets/RundownExport-D6uAmFbb.js.br +0 -0
  89. package/client/assets/RundownExport-D6uAmFbb.js.gz +0 -0
  90. package/client/assets/RundownExport-D6uAmFbb.js.map +1 -0
  91. package/client/assets/{Select-niU9Razm.js → Select-BLA-yQMq.js} +2 -2
  92. package/client/assets/Select-BLA-yQMq.js.br +0 -0
  93. package/client/assets/Select-BLA-yQMq.js.gz +0 -0
  94. package/client/assets/{Select-niU9Razm.js.map → Select-BLA-yQMq.js.map} +1 -1
  95. package/client/assets/{Studio-CWdJq4bx.js → Studio-DbP92DTf.js} +2 -2
  96. package/client/assets/Studio-DbP92DTf.js.br +0 -0
  97. package/client/assets/Studio-DbP92DTf.js.gz +0 -0
  98. package/client/assets/{Studio-CWdJq4bx.js.map → Studio-DbP92DTf.js.map} +1 -1
  99. package/client/assets/{StyleEditor-BIFjHsgD.js → StyleEditor-DNjZ46Qf.js} +2 -2
  100. package/client/assets/StyleEditor-DNjZ46Qf.js.br +0 -0
  101. package/client/assets/StyleEditor-DNjZ46Qf.js.gz +0 -0
  102. package/client/assets/{StyleEditor-BIFjHsgD.js.map → StyleEditor-DNjZ46Qf.js.map} +1 -1
  103. package/client/assets/{SuperscriptTime-DCTyUARx.js → SuperscriptTime-C8ypTVpH.js} +2 -2
  104. package/client/assets/SuperscriptTime-C8ypTVpH.js.br +0 -0
  105. package/client/assets/SuperscriptTime-C8ypTVpH.js.gz +0 -0
  106. package/client/assets/{SuperscriptTime-DCTyUARx.js.map → SuperscriptTime-C8ypTVpH.js.map} +1 -1
  107. package/client/assets/{TimeElements-DBVGVx71.js → TimeElements-DlEBhXe0.js} +2 -2
  108. package/client/assets/TimeElements-DlEBhXe0.js.br +0 -0
  109. package/client/assets/TimeElements-DlEBhXe0.js.gz +0 -0
  110. package/client/assets/{TimeElements-DBVGVx71.js.map → TimeElements-DlEBhXe0.js.map} +1 -1
  111. package/client/assets/{TimeInput-wQ67FbW6.js → TimeInput-DU09ewqh.js} +2 -2
  112. package/client/assets/TimeInput-DU09ewqh.js.br +0 -0
  113. package/client/assets/TimeInput-DU09ewqh.js.gz +0 -0
  114. package/client/assets/{TimeInput-wQ67FbW6.js.map → TimeInput-DU09ewqh.js.map} +1 -1
  115. package/client/assets/{TimelinePage-DZefE2vQ.js → TimelinePage-DTwqRihn.js} +2 -2
  116. package/client/assets/TimelinePage-DTwqRihn.js.br +0 -0
  117. package/client/assets/TimelinePage-DTwqRihn.js.gz +0 -0
  118. package/client/assets/{TimelinePage-DZefE2vQ.js.map → TimelinePage-DTwqRihn.js.map} +1 -1
  119. package/client/assets/Timer-B7nk3TMf.css +1 -0
  120. package/client/assets/Timer-B7nk3TMf.css.br +0 -0
  121. package/client/assets/Timer-B7nk3TMf.css.gz +0 -0
  122. package/client/assets/Timer-jjWAunJc.js +2 -0
  123. package/client/assets/Timer-jjWAunJc.js.br +0 -0
  124. package/client/assets/Timer-jjWAunJc.js.gz +0 -0
  125. package/client/assets/Timer-jjWAunJc.js.map +1 -0
  126. package/client/assets/TimerControlExport-i0ZDpUx7.js +2 -0
  127. package/client/assets/TimerControlExport-i0ZDpUx7.js.br +0 -0
  128. package/client/assets/TimerControlExport-i0ZDpUx7.js.gz +0 -0
  129. package/client/assets/{TimerControlExport-C1C_vBX4.js.map → TimerControlExport-i0ZDpUx7.js.map} +1 -1
  130. package/client/assets/{TitleCard-B4N-kCM3.js → TitleCard-BgOtucv6.js} +2 -2
  131. package/client/assets/TitleCard-BgOtucv6.js.br +0 -0
  132. package/client/assets/TitleCard-BgOtucv6.js.gz +0 -0
  133. package/client/assets/{TitleCard-B4N-kCM3.js.map → TitleCard-BgOtucv6.js.map} +1 -1
  134. package/client/assets/{Tooltip-DJ8Y4CO4.js → Tooltip-C0rGHLsB.js} +2 -2
  135. package/client/assets/Tooltip-C0rGHLsB.js.br +0 -0
  136. package/client/assets/Tooltip-C0rGHLsB.js.gz +0 -0
  137. package/client/assets/{Tooltip-DJ8Y4CO4.js.map → Tooltip-C0rGHLsB.js.map} +1 -1
  138. package/client/assets/{ViewLogo-Dd60EREE.js → ViewLogo--9miplQv.js} +2 -2
  139. package/client/assets/ViewLogo--9miplQv.js.br +0 -0
  140. package/client/assets/ViewLogo--9miplQv.js.gz +0 -0
  141. package/client/assets/{ViewLogo-Dd60EREE.js.map → ViewLogo--9miplQv.js.map} +1 -1
  142. package/client/assets/{ViewParamsEditor-BWEYbq_S.js → ViewParamsEditor-BFu_0oIb.js} +2 -2
  143. package/client/assets/ViewParamsEditor-BFu_0oIb.js.br +0 -0
  144. package/client/assets/ViewParamsEditor-BFu_0oIb.js.gz +0 -0
  145. package/client/assets/{ViewParamsEditor-BWEYbq_S.js.map → ViewParamsEditor-BFu_0oIb.js.map} +1 -1
  146. package/client/assets/{dateConfig-8rhb0Dbh.js → dateConfig-WYqMzV9D.js} +2 -2
  147. package/client/assets/dateConfig-WYqMzV9D.js.br +0 -0
  148. package/client/assets/dateConfig-WYqMzV9D.js.gz +0 -0
  149. package/client/assets/{dateConfig-8rhb0Dbh.js.map → dateConfig-WYqMzV9D.js.map} +1 -1
  150. package/client/assets/{editorSettings-LMnfWux6.js → editorSettings-CCHx-wCx.js} +2 -2
  151. package/client/assets/editorSettings-CCHx-wCx.js.br +0 -0
  152. package/client/assets/editorSettings-CCHx-wCx.js.gz +0 -0
  153. package/client/assets/{editorSettings-LMnfWux6.js.map → editorSettings-CCHx-wCx.js.map} +1 -1
  154. package/client/assets/{getProgress-CyJTu6f5.js → getProgress-B94Ieskb.js} +2 -2
  155. package/client/assets/getProgress-B94Ieskb.js.br +0 -0
  156. package/client/assets/getProgress-B94Ieskb.js.gz +0 -0
  157. package/client/assets/{getProgress-CyJTu6f5.js.map → getProgress-B94Ieskb.js.map} +1 -1
  158. package/client/assets/{index-5QAOtSTh.js → index-njXwwjfn.js} +3 -3
  159. package/client/assets/index-njXwwjfn.js.br +0 -0
  160. package/client/assets/index-njXwwjfn.js.gz +0 -0
  161. package/client/assets/{index-5QAOtSTh.js.map → index-njXwwjfn.js.map} +1 -1
  162. package/client/assets/{offset-CLDSqOP5.js → offset-D1q-72D-.js} +2 -2
  163. package/client/assets/offset-D1q-72D-.js.br +0 -0
  164. package/client/assets/offset-D1q-72D-.js.gz +0 -0
  165. package/client/assets/{offset-CLDSqOP5.js.map → offset-D1q-72D-.js.map} +1 -1
  166. package/client/assets/{parseUserTime-CCDHpp7D.js → parseUserTime-Bc1pSJR2.js} +2 -2
  167. package/client/assets/parseUserTime-Bc1pSJR2.js.br +0 -0
  168. package/client/assets/parseUserTime-Bc1pSJR2.js.gz +0 -0
  169. package/client/assets/{parseUserTime-CCDHpp7D.js.map → parseUserTime-Bc1pSJR2.js.map} +1 -1
  170. package/client/assets/{playbackstate-6lBh6omZ.js → playbackstate-BpzbtG9F.js} +2 -2
  171. package/client/assets/playbackstate-BpzbtG9F.js.br +0 -0
  172. package/client/assets/playbackstate-BpzbtG9F.js.gz +0 -0
  173. package/client/assets/{playbackstate-6lBh6omZ.js.map → playbackstate-BpzbtG9F.js.map} +1 -1
  174. package/client/assets/{presentation.utils-BUIuV_2e.js → presentation.utils-B2baBe3j.js} +2 -2
  175. package/client/assets/presentation.utils-B2baBe3j.js.br +0 -0
  176. package/client/assets/presentation.utils-B2baBe3j.js.gz +0 -0
  177. package/client/assets/{presentation.utils-BUIuV_2e.js.map → presentation.utils-B2baBe3j.js.map} +1 -1
  178. package/client/assets/{rundownUtils-Cnd2prRX.js → rundownUtils-H6xvQyre.js} +2 -2
  179. package/client/assets/rundownUtils-H6xvQyre.js.br +0 -0
  180. package/client/assets/rundownUtils-H6xvQyre.js.gz +0 -0
  181. package/client/assets/{rundownUtils-Cnd2prRX.js.map → rundownUtils-H6xvQyre.js.map} +1 -1
  182. package/client/assets/{useCustomFields-BuxKsqGS.js → useCustomFields-Da0Li7nQ.js} +2 -2
  183. package/client/assets/useCustomFields-Da0Li7nQ.js.br +0 -0
  184. package/client/assets/useCustomFields-Da0Li7nQ.js.gz +0 -0
  185. package/client/assets/{useCustomFields-BuxKsqGS.js.map → useCustomFields-Da0Li7nQ.js.map} +1 -1
  186. package/client/assets/{useFollowComponent-iGQv4zoS.js → useFollowComponent-Qo3FobyV.js} +2 -2
  187. package/client/assets/useFollowComponent-Qo3FobyV.js.br +0 -0
  188. package/client/assets/useFollowComponent-Qo3FobyV.js.gz +0 -0
  189. package/client/assets/{useFollowComponent-iGQv4zoS.js.map → useFollowComponent-Qo3FobyV.js.map} +1 -1
  190. package/client/assets/{useProjectData-CetvEK9E.js → useProjectData-DW06zQvF.js} +2 -2
  191. package/client/assets/useProjectData-DW06zQvF.js.br +0 -0
  192. package/client/assets/useProjectData-DW06zQvF.js.gz +0 -0
  193. package/client/assets/{useProjectData-CetvEK9E.js.map → useProjectData-DW06zQvF.js.map} +1 -1
  194. package/client/assets/{useReport-PEFRsOhF.js → useReport-DhFY2L8v.js} +2 -2
  195. package/client/assets/useReport-DhFY2L8v.js.br +0 -0
  196. package/client/assets/useReport-DhFY2L8v.js.gz +0 -0
  197. package/client/assets/{useReport-PEFRsOhF.js.map → useReport-DhFY2L8v.js.map} +1 -1
  198. package/client/assets/useRundown-ihoU8qBi.js +2 -0
  199. package/client/assets/useRundown-ihoU8qBi.js.br +0 -0
  200. package/client/assets/useRundown-ihoU8qBi.js.gz +0 -0
  201. package/client/assets/useRundown-ihoU8qBi.js.map +1 -0
  202. package/client/assets/{useWindowTitle-b5fN0StF.js → useWindowTitle-B2UzPuki.js} +2 -2
  203. package/client/assets/useWindowTitle-B2UzPuki.js.br +0 -0
  204. package/client/assets/useWindowTitle-B2UzPuki.js.gz +0 -0
  205. package/client/assets/{useWindowTitle-b5fN0StF.js.map → useWindowTitle-B2UzPuki.js.map} +1 -1
  206. package/client/assets/{validateEvent-Bvgk1E-Y.js → validateEvent-BJMwP_mq.js} +2 -2
  207. package/client/assets/validateEvent-BJMwP_mq.js.br +0 -0
  208. package/client/assets/validateEvent-BJMwP_mq.js.gz +0 -0
  209. package/client/assets/{validateEvent-Bvgk1E-Y.js.map → validateEvent-BJMwP_mq.js.map} +1 -1
  210. package/client/assets/{vendor-Cu5xgv5K.js → vendor-9UkPSc5K.js} +3 -3
  211. package/client/assets/vendor-9UkPSc5K.js.br +0 -0
  212. package/client/assets/vendor-9UkPSc5K.js.gz +0 -0
  213. package/client/assets/{vendor-Cu5xgv5K.js.map → vendor-9UkPSc5K.js.map} +1 -1
  214. package/client/assets/{viewLoader.utils-BPhACxyG.js → viewLoader.utils-DQGhrjSp.js} +2 -2
  215. package/client/assets/viewLoader.utils-DQGhrjSp.js.br +0 -0
  216. package/client/assets/viewLoader.utils-DQGhrjSp.js.gz +0 -0
  217. package/client/assets/{viewLoader.utils-BPhACxyG.js.map → viewLoader.utils-DQGhrjSp.js.map} +1 -1
  218. package/client/index.html +2 -2
  219. package/external/demo/app.js +2 -2
  220. package/package.json +1 -1
  221. package/server/index.cjs +97 -88
  222. package/client/assets/Backstage-ZSqb8OU6.js.br +0 -0
  223. package/client/assets/Backstage-ZSqb8OU6.js.gz +0 -0
  224. package/client/assets/Countdown-DVRZbeRP.js.br +0 -0
  225. package/client/assets/Countdown-DVRZbeRP.js.gz +0 -0
  226. package/client/assets/Countdown-DVRZbeRP.js.map +0 -1
  227. package/client/assets/CustomTranslationModal-D_Cy0d_H.js.br +0 -0
  228. package/client/assets/CustomTranslationModal-D_Cy0d_H.js.gz +0 -0
  229. package/client/assets/DelayIndicator-B_JKLKYW.js.br +0 -0
  230. package/client/assets/DelayIndicator-B_JKLKYW.js.gz +0 -0
  231. package/client/assets/EditorFeatureWrapper-DzBxDvRn.js.br +0 -0
  232. package/client/assets/EditorFeatureWrapper-DzBxDvRn.js.gz +0 -0
  233. package/client/assets/EditorUtils-De0umjb-.js.br +0 -0
  234. package/client/assets/EditorUtils-De0umjb-.js.gz +0 -0
  235. package/client/assets/Empty-BYF0tVRk.js.br +0 -2
  236. package/client/assets/Empty-BYF0tVRk.js.gz +0 -0
  237. package/client/assets/EmptyPage-DYH2bswA.js.br +0 -0
  238. package/client/assets/EmptyPage-DYH2bswA.js.gz +0 -0
  239. package/client/assets/FollowButton-DyWsvyFF.js.br +0 -0
  240. package/client/assets/FollowButton-DyWsvyFF.js.gz +0 -0
  241. package/client/assets/MessageControlExport-yLGU2dMq.js +0 -2
  242. package/client/assets/MessageControlExport-yLGU2dMq.js.br +0 -0
  243. package/client/assets/MessageControlExport-yLGU2dMq.js.gz +0 -0
  244. package/client/assets/MilestoneEditor-GkzJ-h1C.js.br +0 -0
  245. package/client/assets/MilestoneEditor-GkzJ-h1C.js.gz +0 -0
  246. package/client/assets/Modal-BKL-5GzU.js +0 -2
  247. package/client/assets/Modal-BKL-5GzU.js.br +0 -0
  248. package/client/assets/Modal-BKL-5GzU.js.gz +0 -0
  249. package/client/assets/Modal-BKL-5GzU.js.map +0 -1
  250. package/client/assets/Modal-BgJx3SNK.css +0 -1
  251. package/client/assets/Modal-BgJx3SNK.css.br +0 -0
  252. package/client/assets/Modal-BgJx3SNK.css.gz +0 -0
  253. package/client/assets/MultiPartProgressBar-BITERKS0.js.br +0 -0
  254. package/client/assets/MultiPartProgressBar-BITERKS0.js.gz +0 -0
  255. package/client/assets/OperatorExport-DMZ6eQfT.js.br +0 -0
  256. package/client/assets/OperatorExport-DMZ6eQfT.js.gz +0 -0
  257. package/client/assets/OverviewWrapper-riM6vPno.js +0 -2
  258. package/client/assets/OverviewWrapper-riM6vPno.js.br +0 -0
  259. package/client/assets/OverviewWrapper-riM6vPno.js.gz +0 -0
  260. package/client/assets/ProjectInfo-DxtMq70a.js.br +0 -0
  261. package/client/assets/ProjectInfo-DxtMq70a.js.gz +0 -0
  262. package/client/assets/ProtectRoute-p1fmtLeu.js.br +0 -0
  263. package/client/assets/ProtectRoute-p1fmtLeu.js.gz +0 -0
  264. package/client/assets/ProtectedCuesheet-CvRnqT0z.js.br +0 -0
  265. package/client/assets/ProtectedCuesheet-CvRnqT0z.js.gz +0 -0
  266. package/client/assets/ProtectedEditor-D4UXj1xL.js +0 -3
  267. package/client/assets/ProtectedEditor-D4UXj1xL.js.br +0 -0
  268. package/client/assets/ProtectedEditor-D4UXj1xL.js.gz +0 -0
  269. package/client/assets/ProtectedEditor-D4UXj1xL.js.map +0 -1
  270. package/client/assets/RundownEntry-B1dSz1wu.js.br +0 -0
  271. package/client/assets/RundownEntry-B1dSz1wu.js.gz +0 -0
  272. package/client/assets/RundownExport-CUtaG16H.css +0 -1
  273. package/client/assets/RundownExport-CUtaG16H.css.br +0 -0
  274. package/client/assets/RundownExport-CUtaG16H.css.gz +0 -0
  275. package/client/assets/RundownExport-WjLpncYT.js +0 -3
  276. package/client/assets/RundownExport-WjLpncYT.js.br +0 -0
  277. package/client/assets/RundownExport-WjLpncYT.js.gz +0 -0
  278. package/client/assets/RundownExport-WjLpncYT.js.map +0 -1
  279. package/client/assets/Select-niU9Razm.js.br +0 -0
  280. package/client/assets/Select-niU9Razm.js.gz +0 -0
  281. package/client/assets/Studio-CWdJq4bx.js.br +0 -0
  282. package/client/assets/Studio-CWdJq4bx.js.gz +0 -0
  283. package/client/assets/StyleEditor-BIFjHsgD.js.br +0 -0
  284. package/client/assets/StyleEditor-BIFjHsgD.js.gz +0 -0
  285. package/client/assets/SuperscriptTime-DCTyUARx.js.br +0 -0
  286. package/client/assets/SuperscriptTime-DCTyUARx.js.gz +0 -0
  287. package/client/assets/TimeElements-DBVGVx71.js.br +0 -0
  288. package/client/assets/TimeElements-DBVGVx71.js.gz +0 -0
  289. package/client/assets/TimeInput-wQ67FbW6.js.br +0 -0
  290. package/client/assets/TimeInput-wQ67FbW6.js.gz +0 -0
  291. package/client/assets/TimelinePage-DZefE2vQ.js.br +0 -0
  292. package/client/assets/TimelinePage-DZefE2vQ.js.gz +0 -0
  293. package/client/assets/Timer-Bs450x86.js +0 -2
  294. package/client/assets/Timer-Bs450x86.js.br +0 -0
  295. package/client/assets/Timer-Bs450x86.js.gz +0 -0
  296. package/client/assets/Timer-Bs450x86.js.map +0 -1
  297. package/client/assets/Timer-DGNfbBKM.css +0 -1
  298. package/client/assets/Timer-DGNfbBKM.css.br +0 -0
  299. package/client/assets/Timer-DGNfbBKM.css.gz +0 -0
  300. package/client/assets/TimerControlExport-C1C_vBX4.js +0 -2
  301. package/client/assets/TimerControlExport-C1C_vBX4.js.br +0 -0
  302. package/client/assets/TimerControlExport-C1C_vBX4.js.gz +0 -0
  303. package/client/assets/TitleCard-B4N-kCM3.js.br +0 -0
  304. package/client/assets/TitleCard-B4N-kCM3.js.gz +0 -0
  305. package/client/assets/Tooltip-DJ8Y4CO4.js.br +0 -0
  306. package/client/assets/Tooltip-DJ8Y4CO4.js.gz +0 -0
  307. package/client/assets/ViewLogo-Dd60EREE.js.br +0 -0
  308. package/client/assets/ViewLogo-Dd60EREE.js.gz +0 -0
  309. package/client/assets/ViewParamsEditor-BWEYbq_S.js.br +0 -0
  310. package/client/assets/ViewParamsEditor-BWEYbq_S.js.gz +0 -0
  311. package/client/assets/dateConfig-8rhb0Dbh.js.br +0 -0
  312. package/client/assets/dateConfig-8rhb0Dbh.js.gz +0 -0
  313. package/client/assets/editorSettings-LMnfWux6.js.br +0 -0
  314. package/client/assets/editorSettings-LMnfWux6.js.gz +0 -0
  315. package/client/assets/getProgress-CyJTu6f5.js.br +0 -0
  316. package/client/assets/getProgress-CyJTu6f5.js.gz +0 -0
  317. package/client/assets/index-5QAOtSTh.js.br +0 -0
  318. package/client/assets/index-5QAOtSTh.js.gz +0 -0
  319. package/client/assets/offset-CLDSqOP5.js.br +0 -0
  320. package/client/assets/offset-CLDSqOP5.js.gz +0 -0
  321. package/client/assets/parseUserTime-CCDHpp7D.js.br +0 -0
  322. package/client/assets/parseUserTime-CCDHpp7D.js.gz +0 -0
  323. package/client/assets/playbackstate-6lBh6omZ.js.br +0 -0
  324. package/client/assets/playbackstate-6lBh6omZ.js.gz +0 -0
  325. package/client/assets/presentation.utils-BUIuV_2e.js.br +0 -0
  326. package/client/assets/presentation.utils-BUIuV_2e.js.gz +0 -0
  327. package/client/assets/rundownUtils-Cnd2prRX.js.br +0 -0
  328. package/client/assets/rundownUtils-Cnd2prRX.js.gz +0 -0
  329. package/client/assets/useCustomFields-BuxKsqGS.js.br +0 -0
  330. package/client/assets/useCustomFields-BuxKsqGS.js.gz +0 -0
  331. package/client/assets/useFollowComponent-iGQv4zoS.js.br +0 -0
  332. package/client/assets/useFollowComponent-iGQv4zoS.js.gz +0 -0
  333. package/client/assets/useProjectData-CetvEK9E.js.br +0 -0
  334. package/client/assets/useProjectData-CetvEK9E.js.gz +0 -0
  335. package/client/assets/useReport-PEFRsOhF.js.br +0 -0
  336. package/client/assets/useReport-PEFRsOhF.js.gz +0 -0
  337. package/client/assets/useRundown-D8CYATNi.js +0 -2
  338. package/client/assets/useRundown-D8CYATNi.js.br +0 -0
  339. package/client/assets/useRundown-D8CYATNi.js.gz +0 -0
  340. package/client/assets/useRundown-D8CYATNi.js.map +0 -1
  341. package/client/assets/useWindowTitle-b5fN0StF.js.br +0 -0
  342. package/client/assets/useWindowTitle-b5fN0StF.js.gz +0 -0
  343. package/client/assets/validateEvent-Bvgk1E-Y.js.br +0 -0
  344. package/client/assets/validateEvent-Bvgk1E-Y.js.gz +0 -0
  345. package/client/assets/vendor-Cu5xgv5K.js.br +0 -0
  346. package/client/assets/vendor-Cu5xgv5K.js.gz +0 -0
  347. package/client/assets/viewLoader.utils-BPhACxyG.js.br +0 -0
  348. package/client/assets/viewLoader.utils-BPhACxyG.js.gz +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"Countdown-DVRZbeRP.js","sources":["../../src/views/countdown/countdown.options.ts","../../src/views/countdown/countdown.utils.ts","../../src/features/viewers/common/clock-time/ClockTime.tsx","../../src/views/countdown/CountdownSelect.tsx","../../src/views/countdown/CountdownSubscriptions.tsx","../../src/views/countdown/SingleEventCountdown.tsx","../../src/views/countdown/useCountdownData.ts","../../src/views/countdown/Countdown.tsx"],"sourcesContent":["import { use, useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\nimport { CustomFields, EntryId, OntimeEvent } from 'ontime-types';\n\nimport { getTimeOption } from '../../common/components/view-params-editor/common.options';\nimport { OptionTitle } from '../../common/components/view-params-editor/constants';\nimport { ViewOption } from '../../common/components/view-params-editor/viewParams.types';\nimport { makeOptionsFromCustomFields } from '../../common/components/view-params-editor/viewParams.utils';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport { isStringBoolean } from '../../features/viewers/common/viewUtils';\n\nexport const getCountdownOptions = (\n timeFormat: string,\n customFields: CustomFields,\n persistedSubscriptions: EntryId[],\n): ViewOption[] => {\n const secondaryOptions = makeOptionsFromCustomFields(customFields, [\n { value: 'none', label: 'None' },\n { value: 'note', label: 'Note' },\n ]);\n\n return [\n { title: OptionTitle.ClockOptions, collapsible: true, options: [getTimeOption(timeFormat)] },\n {\n title: OptionTitle.DataSources,\n collapsible: true,\n options: [\n {\n id: 'secondary-src',\n title: 'Event secondary text',\n description: 'Select the data source for auxiliary text shown in the card',\n type: 'option',\n values: secondaryOptions,\n defaultValue: 'none',\n },\n ],\n },\n {\n title: OptionTitle.BehaviourOptions,\n collapsible: true,\n options: [\n {\n id: 'showExpected',\n title: 'Show expected time',\n description: 'Whether the times shown should account for the runtime offset.',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n {\n title: OptionTitle.Hidden,\n options: [\n {\n id: 'sub',\n title: 'Event subscription',\n description: 'The events to follow',\n values: persistedSubscriptions,\n type: 'persist',\n },\n ],\n },\n ];\n};\n\ntype CountdownOptions = {\n subscriptions: EntryId[];\n secondarySource: keyof OntimeEvent | null;\n showExpected: boolean;\n};\n\n/**\n * Utility extract the view options from URL Params\n * the names and fallback are manually matched with timerOptions\n */\nfunction getOptionsFromParams(searchParams: URLSearchParams, defaultValues?: URLSearchParams): CountdownOptions {\n // Helper to get single value from either source, prioritizing defaultValues\n const getValue = (key: string) => defaultValues?.get(key) ?? searchParams.get(key);\n\n // Helper to get array values from either source\n const getArrayValues = (key: string): EntryId[] => {\n if (defaultValues?.has(key)) {\n return defaultValues.getAll(key) as EntryId[];\n }\n return searchParams.getAll(key) as EntryId[];\n };\n\n return {\n subscriptions: getArrayValues('sub'),\n secondarySource: getValue('secondary-src') as keyof OntimeEvent | null,\n showExpected: isStringBoolean(getValue('showExpected')),\n };\n}\n\n/**\n * Hook exposes the countdown view options\n */\nexport function useCountdownOptions(): CountdownOptions {\n const [searchParams] = useSearchParams();\n const maybePreset = use(PresetContext);\n\n const options = useMemo(() => {\n const defaultValues = maybePreset ? new URLSearchParams(maybePreset.search) : undefined;\n return getOptionsFromParams(searchParams, defaultValues);\n }, [maybePreset, searchParams]);\n\n return options;\n}\n","import { EntryId, MaybeNumber, OffsetMode, OntimeEntry, OntimeEvent, OntimeReport, Playback } from 'ontime-types';\nimport { getExpectedStart, MILLIS_PER_MINUTE, removeSeconds } from 'ontime-utils';\n\nimport { useCountdownSocket } from '../../common/hooks/useSocket';\nimport { ExtendedEntry } from '../../common/utils/rundownMetadata';\nimport { timerPlaceholderMin } from '../../common/utils/styleUtils';\nimport { formatDuration, formatTime } from '../../common/utils/time';\nimport { type TranslationKey, useTranslation } from '../../translation/TranslationProvider';\n\n/**\n * Parses string as a title\n */\nexport function sanitiseTitle(title: string | null) {\n return title ?? '{no title}';\n}\n\nexport const preferredFormat12 = 'h:mm a';\nexport const preferredFormat24 = 'HH:mm';\n\n/**\n * Whether the current event is live\n */\nexport function getIsLive(currentId: EntryId, selectedId: EntryId | null, playback: Playback): boolean {\n return currentId === selectedId && playback !== Playback.Armed;\n}\n\nexport type ProgressStatus = 'future' | 'due' | 'live' | 'done' | 'pending' | 'loaded';\ntype TimerMessage = Record<ProgressStatus, TranslationKey>;\n\nexport const timerProgress: TimerMessage = {\n future: 'countdown.to_start',\n due: 'timeline.due',\n live: 'countdown.running',\n pending: 'countdown.waiting',\n loaded: 'countdown.loaded',\n done: 'countdown.ended',\n};\n\nexport function getFormattedTime(\n value: MaybeNumber,\n status: ProgressStatus,\n minText: string,\n secText: string,\n dueText: string,\n) {\n if (value === null) return timerPlaceholderMin;\n if (status === 'future' || status === 'live') {\n if (value <= 0) return dueText.toUpperCase();\n return formatDuration(value, value > MILLIS_PER_MINUTE * 2)\n .replace('m', `${minText} `)\n .replace('s', secText);\n }\n return removeSeconds(formatTime(value));\n}\n\n/**\n * Returns a parsed timer and relevant status message\n * Handles events in different days but disregards whether an event has actually played\n */\nexport function useSubscriptionDisplayData(\n subscribedEvent: ExtendedEntry<OntimeEvent> & { endedAt: MaybeNumber; expectedStart: number },\n): { status: ProgressStatus; statusDisplay: string; timeDisplay: string } {\n const { playback, current, clock } = useCountdownSocket();\n const { getLocalizedString } = useTranslation();\n\n const bigDuration = (value: number) => {\n if (value <= 0) return getLocalizedString('countdown.overtime').toUpperCase();\n return formatDuration(value, value > MILLIS_PER_MINUTE * 2)\n .replace('m', `${getLocalizedString('common.minutes')} `)\n .replace('s', getLocalizedString('common.seconds'));\n };\n\n if (subscribedEvent.isLoaded) {\n if (playback === Playback.Armed) {\n return {\n status: 'loaded',\n statusDisplay: getLocalizedString(timerProgress['loaded']),\n timeDisplay: bigDuration(subscribedEvent.duration),\n };\n }\n\n return {\n status: 'live',\n statusDisplay: getLocalizedString(timerProgress['live']),\n timeDisplay: bigDuration(current ?? 0),\n };\n }\n\n if (playback === Playback.Stop || playback === Playback.Armed) {\n return {\n status: 'pending',\n statusDisplay: getLocalizedString(timerProgress['pending']),\n timeDisplay: ' ',\n };\n }\n\n if (subscribedEvent.isPast) {\n return {\n status: 'done',\n statusDisplay: getLocalizedString(timerProgress['done']),\n timeDisplay: formatTime(subscribedEvent.endedAt, { format12: preferredFormat12, format24: preferredFormat24 }),\n };\n }\n\n if (subscribedEvent.expectedStart - clock <= 0) {\n return {\n status: 'due',\n statusDisplay: getLocalizedString(timerProgress['future']), // We use future here on purpose for the look of it\n timeDisplay: getLocalizedString(timerProgress['due']).toUpperCase(),\n };\n }\n\n return {\n status: 'future',\n statusDisplay: getLocalizedString(timerProgress['future']),\n timeDisplay: bigDuration(subscribedEvent.expectedStart - clock),\n };\n}\n\n/**\n * Adds a set of subscriptions to the URL parameters\n */\nexport function makeSubscriptionsUrl(urlRef: string, subscriptions: EntryId[]) {\n const url = new URL(urlRef);\n const newParams = new URLSearchParams();\n\n // copy existing parameters except for 'sub'\n for (const [key, value] of url.searchParams.entries()) {\n if (key !== 'sub') {\n newParams.append(key, value);\n }\n }\n\n // add new subscriptions\n subscriptions.forEach((id) => {\n newParams.append('sub', id);\n });\n\n url.search = newParams.toString();\n\n return url;\n}\n\n/**\n * Returns an array of events subscribed events ordered by scheduled\n * Since the original array is already ordered, we simply filter out the events\n * which are not in the subscriptions list.\n */\nexport function getOrderedSubscriptions<T extends OntimeEntry>(subscriptions: EntryId[], playableEvents: T[]): T[] {\n return playableEvents.filter((event) => subscriptions.includes(event.id));\n}\n\n/**\n * Checks through the rundown whether the current event is linked to the loaded event\n */\nexport function isLinkedToLoadedEvent(events: OntimeEvent[], loadedId: EntryId | null, currentId: EntryId): boolean {\n // if nothing is loaded, we return true to simplify the logic\n if (!loadedId) {\n return true;\n }\n\n const loadedIndex = events.findIndex((event) => event.id === loadedId);\n if (loadedIndex === -1) {\n return true;\n }\n\n for (let i = loadedIndex; i < events.length; i++) {\n const event = events[i];\n if (event.id === currentId) {\n return true;\n }\n\n if (event.linkStart === null) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function isOutsideRange(a: number, b: number): boolean {\n return Math.abs(a - b) > MILLIS_PER_MINUTE;\n}\n\nexport type CountdownEvent = ExtendedEntry<OntimeEvent> & { expectedStart: number; endedAt: MaybeNumber };\n\nexport function extendEventData(\n event: ExtendedEntry<OntimeEvent>,\n currentDay: number,\n actualStart: MaybeNumber,\n plannedStart: MaybeNumber,\n offset: number,\n mode: OffsetMode,\n reportData: OntimeReport,\n): CountdownEvent {\n const { totalGap, isLinkedToLoaded } = event;\n const expectedStart = getExpectedStart(event, {\n currentDay,\n totalGap,\n actualStart,\n plannedStart,\n isLinkedToLoaded,\n offset,\n mode,\n });\n const { endedAt } = reportData[event.id] ?? { endedAt: null };\n return { ...event, expectedStart, endedAt };\n}\n","/**\n * encapsulate logic related to showing a clock timer\n */\n\nimport { MaybeNumber } from 'ontime-types';\n\nimport { formatTime } from '../../../../common/utils/time';\nimport { FORMAT_12, FORMAT_24 } from '../../../../viewerConfig';\nimport SuperscriptTime from '../superscript-time/SuperscriptTime';\n\ninterface ClockTimeProps {\n value: MaybeNumber;\n preferredFormat12?: string;\n preferredFormat24?: string;\n className?: string;\n}\n\nexport default function ClockTime(props: ClockTimeProps) {\n const { value, preferredFormat12 = FORMAT_12, preferredFormat24 = FORMAT_24, className } = props;\n\n // TODO: should we get the params from URL here to see if the user is overriding the default?\n const formattedTime = formatTime(value, { format12: preferredFormat12, format24: preferredFormat24 });\n\n return <SuperscriptTime className={className} time={formattedTime} />;\n}\n","import { useState } from 'react';\nimport { IoArrowBack, IoClose, IoSaveOutline } from 'react-icons/io5';\nimport { useNavigate } from 'react-router';\nimport { EntryId, PlayableEvent } from 'ontime-types';\n\nimport Button from '../../common/components/buttons/Button';\nimport { cx } from '../../common/utils/styleUtils';\nimport ClockTime from '../../features/viewers/common/clock-time/ClockTime';\n\nimport { makeSubscriptionsUrl } from './countdown.utils';\n\nimport './Countdown.scss';\n\ninterface CountdownSelectProps {\n events: PlayableEvent[];\n subscriptions: EntryId[];\n disableEdit: () => void;\n}\n\nexport default function CountdownSelect({ events, subscriptions, disableEdit }: CountdownSelectProps) {\n const [selected, setSelected] = useState<EntryId[]>(subscriptions);\n const navigate = useNavigate();\n\n /**\n * Toggles an entry from the selected set\n */\n const toggleSelect = (entryId: EntryId) => {\n setSelected((prev) => {\n if (prev.includes(entryId)) {\n // If the entry is already selected, remove it\n return prev.filter((id) => id !== entryId);\n }\n return [...prev, entryId];\n });\n };\n\n /**\n * Creates a URL with the selected subscriptions\n * and navigates to it\n */\n const applySelection = () => {\n // we remove events that no longer exist to avoid stale subscriptions\n const filteredSelected = selected.filter((id) => events.some((event) => event.id === id));\n const url = makeSubscriptionsUrl(window.location.href, filteredSelected);\n disableEdit();\n setSelected([]);\n navigate(url.search.toString());\n };\n\n // make a copy of the selected array for quick lookup\n const selectedIds = new Set(selected);\n\n return (\n <div className='list-container'>\n {events.map((event, index) => {\n const title = event.title || '{no title}';\n const isSelected = selectedIds.has(event.id);\n\n return (\n <div\n key={index}\n role='button'\n tabIndex={0}\n onClick={() => toggleSelect(event.id)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n toggleSelect(event.id);\n e.stopPropagation();\n }\n }}\n className={cx(['sub', isSelected && 'sub--selected'])}\n >\n <div className='sub__binder' style={{ '--user-color': event?.colour ?? '' }} />\n <div className='sub__schedule'>\n <ClockTime value={event.timeStart} preferredFormat12='h:mm' preferredFormat24='HH:mm' />\n →\n <ClockTime value={event.timeEnd} preferredFormat12='h:mm' preferredFormat24='HH:mm' />\n </div>\n <div className='sub__label'>{isSelected ? 'Click to remove' : 'Click to add'}</div>\n <div className='sub__title'>{title}</div>\n </div>\n );\n })}\n\n <div className='fab-container'>\n <Button variant='subtle' size='xlarge' onClick={disableEdit}>\n <IoArrowBack /> Go back\n </Button>\n <Button variant='subtle' size='xlarge' onClick={() => setSelected([])} disabled={selected.length === 0}>\n <IoClose /> Clear\n </Button>\n <Button variant='primary' size='xlarge' disabled={events.length < 1} onClick={applySelection}>\n <IoSaveOutline /> Save\n </Button>\n </div>\n </div>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { IoPencil } from 'react-icons/io5';\nimport { MaybeNumber, OntimeEvent } from 'ontime-types';\nimport { dayInMs } from 'ontime-utils';\n\nimport Button from '../../common/components/buttons/Button';\nimport { useFadeOutOnInactivity } from '../../common/hooks/useFadeOutOnInactivity';\nimport useFollowComponent from '../../common/hooks/useFollowComponent';\nimport { useExpectedStartData, usePlayback, useSelectedEventId } from '../../common/hooks/useSocket';\nimport useReport from '../../common/hooks-query/useReport';\nimport { getOffsetState } from '../../common/utils/offset';\nimport { ExtendedEntry } from '../../common/utils/rundownMetadata';\nimport { cx } from '../../common/utils/styleUtils';\nimport { throttle } from '../../common/utils/throttle';\nimport FollowButton from '../../features/operator/follow-button/FollowButton';\nimport ClockTime from '../../features/viewers/common/clock-time/ClockTime';\nimport SuperscriptTime from '../../features/viewers/common/superscript-time/SuperscriptTime';\nimport { getPropertyValue } from '../../features/viewers/common/viewUtils';\n\nimport { useCountdownOptions } from './countdown.options';\nimport {\n CountdownEvent,\n extendEventData,\n getIsLive,\n isOutsideRange,\n preferredFormat12,\n preferredFormat24,\n useSubscriptionDisplayData,\n} from './countdown.utils';\n\nimport './Countdown.scss';\n\ninterface CountdownSubscriptionsProps {\n subscribedEvents: ExtendedEntry<OntimeEvent>[];\n goToEditMode: () => void;\n}\n\nexport default function CountdownSubscriptions({ subscribedEvents, goToEditMode }: CountdownSubscriptionsProps) {\n const { secondarySource, showExpected } = useCountdownOptions();\n const { playback } = usePlayback();\n const { selectedEventId } = useSelectedEventId();\n const showFab = useFadeOutOnInactivity(true);\n\n const { data: reportData } = useReport();\n const { offset, currentDay, actualStart, plannedStart, mode } = useExpectedStartData();\n\n const timeoutId = useRef<NodeJS.Timeout | null>(null);\n const [lockAutoScroll, setLockAutoScroll] = useState(false);\n const selectedRef = useRef<HTMLDivElement | null>(null);\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const scrollToComponent = useFollowComponent({\n followRef: selectedRef,\n scrollRef,\n doFollow: !lockAutoScroll,\n topOffset: 0,\n followTrigger: selectedEventId,\n });\n\n // reset scroll if nothing is selected\n useEffect(() => {\n if (!selectedEventId) {\n if (!lockAutoScroll) {\n scrollRef.current?.scrollTo(0, 0);\n }\n }\n }, [selectedEventId, lockAutoScroll, scrollRef]);\n\n // scroll to component if user clicks the Follow button\n const handleOffset = () => {\n if (selectedEventId) {\n scrollToComponent();\n }\n setLockAutoScroll(false);\n };\n\n // prevent considering automated scrolls as user scrolls\n const handleUserScroll = () => {\n if (selectedRef?.current && scrollRef?.current) {\n const selectedRect = selectedRef.current.getBoundingClientRect();\n const scrollerRect = scrollRef.current.getBoundingClientRect();\n if (selectedRect && scrollerRect) {\n const distanceFromTop = selectedRect.top - scrollerRect.top;\n const hasScrolledOutOfThreshold = distanceFromTop < -8 || distanceFromTop > 50;\n setLockAutoScroll(hasScrolledOutOfThreshold);\n }\n }\n };\n const throttledHandleScroll = throttle(handleUserScroll, 1000);\n\n // when the user scrolls we check if we need to show the button\n const handleScroll = () => {\n if (timeoutId.current) {\n clearTimeout(timeoutId.current);\n }\n\n throttledHandleScroll();\n };\n\n return (\n <div className='list-container' onWheel={handleScroll} onTouchMove={handleScroll} ref={scrollRef}>\n {subscribedEvents.map((event) => {\n const secondaryData = getPropertyValue(event, secondarySource);\n const isLive = getIsLive(event.id, selectedEventId, playback);\n const isArmed = !isLive && event.id === selectedEventId;\n const countdownEvent = extendEventData(event, currentDay, actualStart, plannedStart, offset, mode, reportData);\n const title = event.title.length ? event.title : ' '; // insert utf-8 empty space to avoid the line collapsing\n return (\n <div\n key={event.id}\n ref={isLive ? selectedRef : undefined}\n className={cx(['sub', isLive && 'sub--live', isArmed && 'sub--armed'])}\n data-testid={event.cue}\n >\n <div className='sub__binder' style={{ '--user-color': event.colour }} />\n <ScheduleTime event={countdownEvent} showExpected={showExpected} />\n <SubscriptionStatus event={countdownEvent} />\n <div className={cx(['sub__title', !event.title && 'subdued'])}>{title}</div>\n {secondaryData && <div className='sub__secondary'>{secondaryData}</div>}\n </div>\n );\n })}\n <div className={cx(['fab-container', !showFab && 'fab-container--hidden'])}>\n <Button variant='primary' size='xlarge' onClick={goToEditMode}>\n <IoPencil /> Edit\n </Button>\n </div>\n <FollowButton isVisible={lockAutoScroll} onClickHandler={handleOffset} />\n </div>\n );\n}\n\ntype ScheduleTimeProps = {\n event: CountdownEvent;\n showExpected: boolean;\n};\n//TODO: consider relative mode\nexport function ScheduleTime(props: ScheduleTimeProps) {\n const { event, showExpected } = props;\n const { timeStart, duration, delay, expectedStart, countToEnd } = event;\n\n const plannedStart = timeStart + delay + event.dayOffset * dayInMs;\n\n // only show new exacted value if outside range of the planned value\n const isExpectedValueShow = showExpected && isOutsideRange(plannedStart, expectedStart);\n\n const plannedStateClass = isExpectedValueShow ? 'sub__schedule--strike' : delay !== 0 ? 'sub__schedule--delayed' : '';\n\n const expectedStateClass = `sub__schedule--${getOffsetState(expectedStart - plannedStart)}`;\n const plannedEnd = plannedStart + duration + delay;\n const expectedEnd = countToEnd ? Math.max(expectedStart + duration, plannedEnd) : expectedStart + duration;\n const expectedEndClass = `sub__schedule--${getOffsetState(expectedEnd - plannedEnd)}`;\n\n return (\n <div className='sub__schedule'>\n <ClockTime\n value={plannedStart}\n preferredFormat12={preferredFormat12}\n preferredFormat24={preferredFormat24}\n className={plannedStateClass}\n />\n {!isExpectedValueShow && (\n <>\n →\n <ClockTime\n value={plannedEnd}\n preferredFormat12={preferredFormat12}\n preferredFormat24={preferredFormat24}\n className={plannedStateClass}\n />\n </>\n )}\n {isExpectedValueShow && (\n <>\n <ClockTime\n value={expectedStart}\n className={expectedStateClass}\n preferredFormat12={preferredFormat12}\n preferredFormat24={preferredFormat24}\n />\n →\n <ClockTime\n value={expectedEnd}\n className={expectedEndClass}\n preferredFormat12={preferredFormat12}\n preferredFormat24={preferredFormat24}\n />\n </>\n )}\n </div>\n );\n}\n\ninterface SubscriptionStatusProps {\n event: ExtendedEntry<OntimeEvent> & { endedAt: MaybeNumber; expectedStart: number };\n}\n\nfunction SubscriptionStatus({ event }: SubscriptionStatusProps) {\n const { status, statusDisplay, timeDisplay } = useSubscriptionDisplayData(event);\n\n return (\n <>\n <div className='sub__status'>{statusDisplay}</div>\n {status === 'done' ? (\n <SuperscriptTime className='sub__timer' time={timeDisplay} />\n ) : (\n <div className='sub__timer'>{timeDisplay}</div>\n )}\n </>\n );\n}\n","import { IoPencil } from 'react-icons/io5';\nimport { MaybeNumber, OntimeEvent } from 'ontime-types';\nimport { getExpectedStart } from 'ontime-utils';\n\nimport Button from '../../common/components/buttons/Button';\nimport { useFadeOutOnInactivity } from '../../common/hooks/useFadeOutOnInactivity';\nimport { useExpectedStartData } from '../../common/hooks/useSocket';\nimport useReport from '../../common/hooks-query/useReport';\nimport { ExtendedEntry } from '../../common/utils/rundownMetadata';\nimport { cx } from '../../common/utils/styleUtils';\nimport SuperscriptTime from '../../features/viewers/common/superscript-time/SuperscriptTime';\nimport { getPropertyValue } from '../../features/viewers/common/viewUtils';\n\nimport { useCountdownOptions } from './countdown.options';\nimport { useSubscriptionDisplayData } from './countdown.utils';\nimport { ScheduleTime } from './CountdownSubscriptions';\n\nimport './SingleEventCountdown.scss';\n\ninterface SingleEventCountdownProps {\n subscribedEvent: ExtendedEntry<OntimeEvent>;\n goToEditMode: () => void;\n}\n\nexport default function SingleEventCountdown({ subscribedEvent, goToEditMode }: SingleEventCountdownProps) {\n const { secondarySource, showExpected } = useCountdownOptions();\n const showFab = useFadeOutOnInactivity(true);\n const { data: reportData } = useReport();\n\n const { offset, currentDay, actualStart, plannedStart, mode } = useExpectedStartData();\n const { totalGap, isLinkedToLoaded } = subscribedEvent;\n const expectedStart = getExpectedStart(subscribedEvent, {\n currentDay,\n totalGap,\n actualStart,\n plannedStart,\n isLinkedToLoaded,\n offset,\n mode,\n });\n\n const { endedAt } = reportData[subscribedEvent.id] ?? { endedAt: null };\n const countdownEvent = { ...subscribedEvent, expectedStart, endedAt };\n const title = subscribedEvent.title.length ? subscribedEvent.title : ' '; // insert utf-8 empty space to avoid the line collapsing\n const secondaryData = getPropertyValue(subscribedEvent, secondarySource);\n\n return (\n <div className='single-container' data-testid='countdown-event'>\n <SubscriptionStatus event={countdownEvent} />\n <div className='event__title' style={{ borderColor: countdownEvent.colour }}>\n <ScheduleTime event={countdownEvent} showExpected={showExpected} />\n {title}\n {secondaryData && <div className='secondary'>{secondaryData}</div>}\n </div>\n <div className={cx(['fab-container', !showFab && 'fab-container--hidden'])}>\n <Button variant='primary' size='xlarge' onClick={goToEditMode}>\n <IoPencil /> Edit\n </Button>\n </div>\n </div>\n );\n}\n\ninterface SubscriptionStatusProps {\n event: ExtendedEntry<OntimeEvent> & { endedAt: MaybeNumber; expectedStart: number };\n}\n\nfunction SubscriptionStatus({ event }: SubscriptionStatusProps) {\n const { status, statusDisplay, timeDisplay } = useSubscriptionDisplayData(event);\n\n return (\n <>\n <div className='event__status'>{statusDisplay}</div>\n {status === 'done' ? (\n <SuperscriptTime className='event__timer' time={timeDisplay} />\n ) : (\n <div className='event__timer'>{timeDisplay}</div>\n )}\n </>\n );\n}\n","import { CustomFields, OntimeEntry, ProjectData, Settings } from 'ontime-types';\n\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport { useFlatRundownWithMetadata } from '../../common/hooks-query/useRundown';\nimport useSettings from '../../common/hooks-query/useSettings';\nimport { useViewOptionsStore } from '../../common/stores/viewOptions';\nimport { ExtendedEntry } from '../../common/utils/rundownMetadata';\nimport { aggregateQueryStatus, ViewData } from '../utils/viewLoader.utils';\n\nexport interface CountdownData {\n customFields: CustomFields;\n rundownData: ExtendedEntry<OntimeEntry>[];\n projectData: ProjectData;\n isMirrored: boolean;\n settings: Settings;\n}\n\nexport function useCountdownData(): ViewData<CountdownData> {\n // persisted app state\n const isMirrored = useViewOptionsStore((state) => state.mirror);\n\n // HTTP API data\n const { data: rundownData, status: rundownStatus } = useFlatRundownWithMetadata();\n const { data: projectData, status: projectDataStatus } = useProjectData();\n const { data: settings, status: settingsStatus } = useSettings();\n const { data: customFields, status: customFieldsStatus } = useCustomFields();\n\n return {\n data: {\n customFields,\n rundownData,\n projectData,\n isMirrored,\n settings,\n },\n status: aggregateQueryStatus([rundownStatus, projectDataStatus, settingsStatus, customFieldsStatus]),\n };\n}\n","import { useMemo, useState } from 'react';\nimport { IoAdd } from 'react-icons/io5';\nimport { EntryId, isOntimeEvent, isPlayableEvent, OntimeEvent, OntimeView } from 'ontime-types';\n\nimport Button from '../../common/components/buttons/Button';\nimport Empty from '../../common/components/state/Empty';\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport ViewLogo from '../../common/components/view-logo/ViewLogo';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport { useClock } from '../../common/hooks/useSocket';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { ExtendedEntry } from '../../common/utils/rundownMetadata';\nimport { formatTime, getDefaultFormat } from '../../common/utils/time';\nimport SuperscriptTime from '../../features/viewers/common/superscript-time/SuperscriptTime';\nimport { useTranslation } from '../../translation/TranslationProvider';\nimport Loader from '../common/loader/Loader';\n\nimport { getCountdownOptions, useCountdownOptions } from './countdown.options';\nimport { getOrderedSubscriptions } from './countdown.utils';\nimport CountdownSelect from './CountdownSelect';\nimport CountdownSubscriptions from './CountdownSubscriptions';\nimport SingleEventCountdown from './SingleEventCountdown';\nimport { CountdownData, useCountdownData } from './useCountdownData';\n\nimport './Countdown.scss';\n\nexport default function CountdownLoader() {\n const { data, status } = useCountdownData();\n\n useWindowTitle('Countdown');\n\n if (status === 'pending') {\n return <Loader />;\n }\n\n if (status === 'error') {\n return <EmptyPage text='There was an error fetching data, please refresh the page.' />;\n }\n\n return <Countdown {...data} />;\n}\n\nfunction Countdown({ customFields, rundownData, projectData, isMirrored, settings }: CountdownData) {\n const { getLocalizedString } = useTranslation();\n const { subscriptions } = useCountdownOptions();\n\n const [editMode, setEditMode] = useState(false);\n\n // gather rundown data\n const playableEvents = rundownData.filter((entry) => isOntimeEvent(entry) && isPlayableEvent(entry));\n\n // gather presentation data\n const hasEvents = playableEvents.length > 0;\n\n // gather option data\n const defaultFormat = getDefaultFormat(settings?.timeFormat);\n const countdownOptions = useMemo(\n () => getCountdownOptions(defaultFormat, customFields, subscriptions),\n [defaultFormat, customFields, subscriptions],\n );\n\n return (\n <div className={`countdown ${isMirrored ? 'mirror' : ''}`} data-testid='countdown-view'>\n <ViewParamsEditor target={OntimeView.Countdown} viewOptions={countdownOptions} />\n <div className='project-header'>\n {projectData?.logo && <ViewLogo name={projectData.logo} className='logo' />}\n <div className='title'>{projectData.title}</div>\n <CountdownClock />\n </div>\n\n {!hasEvents && <Empty text={getLocalizedString('common.no_data')} className='empty-container' />}\n\n {hasEvents && editMode && (\n <CountdownSelect events={playableEvents} subscriptions={subscriptions} disableEdit={() => setEditMode(false)} />\n )}\n\n {hasEvents && !editMode && (\n <CountdownContents\n playableEvents={playableEvents}\n subscriptions={subscriptions}\n goToEditMode={() => setEditMode(true)}\n />\n )}\n </div>\n );\n}\n\ninterface CountdownContentsProps {\n playableEvents: ExtendedEntry<OntimeEvent>[];\n subscriptions: EntryId[];\n goToEditMode: () => void;\n}\n\nfunction CountdownContents({ playableEvents, subscriptions, goToEditMode }: CountdownContentsProps) {\n const { getLocalizedString } = useTranslation();\n\n if (subscriptions.length === 0) {\n return (\n <div className='empty-container'>\n <Empty text={getLocalizedString('countdown.select_event')} className='empty-container' />\n <Button variant='primary' size='xlarge' onClick={goToEditMode}>\n <IoAdd /> Add\n </Button>\n </div>\n );\n }\n\n const subscribedEvents = getOrderedSubscriptions(subscriptions, playableEvents);\n\n if (subscribedEvents.length === 0) {\n return (\n <div className='empty-container'>\n <Empty text={getLocalizedString('countdown.select_event')} className='empty-container' />\n <Button variant='primary' size='xlarge' onClick={goToEditMode}>\n <IoAdd /> Add\n </Button>\n </div>\n );\n }\n\n if (subscribedEvents.length === 1) {\n const event = subscribedEvents.at(0);\n if (!event) return null;\n return <SingleEventCountdown subscribedEvent={event} goToEditMode={goToEditMode} />;\n }\n\n return <CountdownSubscriptions subscribedEvents={subscribedEvents} goToEditMode={goToEditMode} />;\n}\n\nfunction CountdownClock() {\n const { getLocalizedString } = useTranslation();\n const { clock } = useClock();\n\n // gather timer data\n const formattedClock = formatTime(clock);\n\n return (\n <div className='clock-container'>\n <div className='label'>{getLocalizedString('common.time_now')}</div>\n <SuperscriptTime time={formattedClock} className='time' />\n </div>\n );\n}\n"],"names":["getCountdownOptions","timeFormat","customFields","persistedSubscriptions","secondaryOptions","makeOptionsFromCustomFields","OptionTitle","getTimeOption","getOptionsFromParams","searchParams","defaultValues","getValue","key","isStringBoolean","useCountdownOptions","useSearchParams","maybePreset","use","PresetContext","useMemo","preferredFormat12","preferredFormat24","getIsLive","currentId","selectedId","playback","Playback","timerProgress","useSubscriptionDisplayData","subscribedEvent","current","clock","useCountdownSocket","getLocalizedString","useTranslation","bigDuration","value","formatDuration","MILLIS_PER_MINUTE","formatTime","makeSubscriptionsUrl","urlRef","subscriptions","url","newParams","id","getOrderedSubscriptions","playableEvents","event","isOutsideRange","a","b","extendEventData","currentDay","actualStart","plannedStart","offset","mode","reportData","totalGap","isLinkedToLoaded","expectedStart","getExpectedStart","endedAt","ClockTime","props","FORMAT_12","FORMAT_24","className","formattedTime","jsx","SuperscriptTime","CountdownSelect","events","disableEdit","selected","setSelected","useState","navigate","useNavigate","toggleSelect","entryId","prev","applySelection","filteredSelected","selectedIds","jsxs","index","title","isSelected","e","cx","Button","IoArrowBack","IoClose","IoSaveOutline","CountdownSubscriptions","subscribedEvents","goToEditMode","secondarySource","showExpected","usePlayback","selectedEventId","useSelectedEventId","showFab","useFadeOutOnInactivity","useReport","useExpectedStartData","timeoutId","useRef","lockAutoScroll","setLockAutoScroll","selectedRef","scrollRef","scrollToComponent","useFollowComponent","useEffect","_a","handleOffset","throttledHandleScroll","throttle","selectedRect","scrollerRect","distanceFromTop","hasScrolledOutOfThreshold","handleScroll","secondaryData","getPropertyValue","isLive","isArmed","countdownEvent","ScheduleTime","SubscriptionStatus","IoPencil","FollowButton","timeStart","duration","delay","countToEnd","dayInMs","isExpectedValueShow","plannedStateClass","expectedStateClass","getOffsetState","plannedEnd","expectedEnd","expectedEndClass","Fragment","status","statusDisplay","timeDisplay","SingleEventCountdown","useCountdownData","isMirrored","useViewOptionsStore","state","rundownData","rundownStatus","useFlatRundownWithMetadata","projectData","projectDataStatus","useProjectData","settings","settingsStatus","useSettings","customFieldsStatus","useCustomFields","aggregateQueryStatus","CountdownLoader","data","useWindowTitle","Loader","EmptyPage","Countdown","editMode","setEditMode","entry","isOntimeEvent","isPlayableEvent","hasEvents","defaultFormat","getDefaultFormat","countdownOptions","ViewParamsEditor","OntimeView","ViewLogo","CountdownClock","Empty","CountdownContents","IoAdd","useClock","formattedClock"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- % �i���;Əл��߻LyT� �_\"W3h�z�K)*�����F�wn��0K�0������#x�H�~���eID��Ħ��B*݀0.�mJ�f�5w�XW�H��#H̦��������|����1���fX-�Yx�g7Ȍ�]I�Gv&ӆ��B�|�B���Hp��Y�Q w��А���UV�i/��Rٟ�
2
- "����b�H}��v`��/��C��K'�)f�K�зi�&�]�� �l/%�/ơ�4;8�!��4K:5hT�����^�#m�C�0�t��[vf�������dd�#�ʘ��;+���� ��R��AeS(��:�.�3���e��!능���3'�Q;2�| v�ȟ* 5�������Tb}� T�T��N���JQU΁�%����DE9�o�P��/�w��^�ÏSC�걮`�x�
Binary file
@@ -1,2 +0,0 @@
1
- import{h as l,j as e,aL as A,x as B,bR as P,br as R,bS as D,bT as S,bU as w}from"./vendor-Cu5xgv5K.js";import{C as I,S as L}from"./EditorUtils-De0umjb-.js";import{i as _,af as V,bI as F,c as O,T as d,bg as q,a as y,av as k,bJ as T,B as C,bK as o,bL as H,ai as N,bM as U,bv as $,bw as z}from"./index-5QAOtSTh.js";import{P as J}from"./ProtectRoute-p1fmtLeu.js";import{S as K}from"./Select-niU9Razm.js";import{T as g}from"./Tooltip-DJ8Y4CO4.js";import{s as j}from"./Editor.module-DvV2efYs.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new s.Error().stack;t&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[t]="34a975dc-77bc-49c8-9b4e-918d39012530",s._sentryDebugIdIdentifier="sentry-dbid-34a975dc-77bc-49c8-9b4e-918d39012530")}catch{}})();const W="_label_o0qma_17",G="_active_o0qma_21",Q="_inputItems_o0qma_90",h={label:W,active:G,inputItems:Q};function E(s){const{label:t,placeholder:n,text:a,visible:u,changeHandler:f,children:c}=s,[m,x]=l.useState(a),i=l.useRef(null),p=l.useRef(0);l.useEffect(()=>{i.current&&i.current!==document.activeElement&&(i.current.selectionStart=p.current,i.current.selectionEnd=p.current)},[a]),l.useEffect(()=>{i.current!==document.activeElement&&x(a)},[a]);const v=b=>{p.current=b.target.selectionStart??0,x(b.target.value),f(b.target.value)};return e.jsxs("div",{className:h.inputRow,children:[e.jsx("label",{className:_([h.label,u??h.active]),htmlFor:t,children:t}),e.jsxs("div",{className:h.inputItems,children:[e.jsx(V,{id:t,ref:i,value:m,onChange:v,placeholder:n}),c]})]})}const X="_blink_18658_1",Y="_previewContainer_18658_25",Z="_preview_18658_25",ee="_options_18658_39",te="_eventStatus_18658_45",se="_mainContent_18658_54",ne="_secondaryContent_18658_70",ae="_blackout_18658_74",re="_statusIcon_18658_83",r={blink:X,previewContainer:Y,preview:Z,options:ee,eventStatus:te,mainContent:se,secondaryContent:ne,blackout:ae,statusIcon:re},oe={aux1:"Aux 1",aux2:"Aux 2",aux3:"Aux 3",secondary:"Secondary message"};function ie(){const{blink:s,blackout:t,countToEnd:n,phase:a,secondarySource:u,showTimerMessage:f,timerType:c}=F(),{data:m}=O(),x=f?"Message":c===d.None?q:a===y.Pending?"Standby to start":a===y.Overtime?"Timer Overtime":c===d.Clock?"Clock":n?"Count to End":"Timer",i=f||!u?null:oe[u],p=a===y.Warning?m.warningColor??"#ffa528":a===y.Danger?m.dangerColor??"#ff7300":m.normalColor??"#FFFC",v=x=="Timer",b=_([s&&r.blink,t&&r.blackout]);return e.jsxs("div",{className:r.preview,children:[e.jsx(I,{onClick:M=>k("timer",M)}),e.jsxs("div",{className:b,children:[e.jsx("div",{className:r.mainContent,"data-phase":v&&a,style:v?{"--override-colour":p}:{},children:x}),i!==null&&e.jsx("div",{className:r.secondaryContent,children:i})]}),e.jsxs("div",{className:r.eventStatus,children:[e.jsx(g,{text:"Time type: Count down",render:e.jsx("span",{}),className:r.statusIcon,"data-active":c===d.CountDown,children:e.jsx(A,{})}),e.jsx(g,{text:"Time type: Count up",render:e.jsx("span",{}),className:r.statusIcon,"data-active":c===d.CountUp,children:e.jsx(B,{})}),e.jsx(g,{text:"Time type: Clock",render:e.jsx("span",{}),className:r.statusIcon,"data-active":c===d.Clock,children:e.jsx(P,{})}),e.jsx(g,{text:"Time type: None",render:e.jsx("span",{}),className:r.statusIcon,"data-active":c===d.None,children:e.jsx(R,{})}),e.jsx(g,{text:n?"Count to end":"Count duration",render:e.jsx("span",{}),className:r.statusIcon,"data-active":n,children:e.jsx(D,{})})]})]})}function ce(){const{blackout:s,blink:t}=T();return e.jsxs("div",{className:r.previewContainer,children:[e.jsx(ie,{}),e.jsxs("div",{className:r.options,children:[e.jsx(le,{}),e.jsx(L,{orientation:"horizontal"}),e.jsx(C,{variant:t?"primary":"subtle",fluid:!0,onClick:()=>o.timerBlink(!t),"data-testid":"toggle timer blink",children:"Blink"}),e.jsx(C,{variant:s?"primary":"subtle",fluid:!0,onClick:()=>o.timerBlackout(!s),"data-testid":"toggle timer blackout",children:"Blackout screen"})]})]})}function le(){const{secondarySource:s}=T(),[t,n]=l.useState("aux1");l.useEffect(()=>{s!==null&&n(s)},[s]);const a=()=>{s===t?o.timerSecondarySource(null):o.timerSecondarySource(t)};return e.jsxs(e.Fragment,{children:[e.jsx(K,{value:t,options:[{value:"aux1",label:"Aux 1"},{value:"aux2",label:"Aux 2"},{value:"aux3",label:"Aux 3"},{value:"secondary",label:"Secondary message"}],onValueChange:u=>{s!==null&&o.timerSecondarySource(u),n(u)}}),e.jsx(C,{variant:s!==null?"primary":"subtle",fluid:!0,onClick:a,"data-testid":"toggle secondary",children:"Show secondary"})]})}function ue(){return e.jsxs(e.Fragment,{children:[e.jsx(ce,{}),e.jsx(de,{}),e.jsx(me,{})]})}function de(){const{text:s,visible:t}=H();return e.jsx(E,{label:"Timer Message",placeholder:"Message shown fullscreen in stage timer",text:s,visible:t,changeHandler:n=>o.timerText(n),children:e.jsx(N,{"aria-label":"Toggle timer message visibility",onClick:()=>o.timerVisible(!t),variant:t?"primary":"subtle",children:t?e.jsx(S,{}):e.jsx(w,{})})})}function me(){const{text:s,visible:t}=U(),n=()=>{t?o.timerSecondarySource(null):o.timerSecondarySource("secondary")};return e.jsx(E,{label:"Secondary Message",placeholder:"Message shown as secondary text in stage timer",text:s,visible:t,changeHandler:a=>o.secondaryMessage(a),children:e.jsx(N,{"aria-label":"Toggle secondary message visibility",onClick:n,variant:t?"primary":"subtle",children:t?e.jsx(S,{}):e.jsx(w,{})})})}const je=l.memo(xe);function xe(){const s=window.location.pathname.includes("/messagecontrol"),t=_([j.content,j.contentColumnLayout]);return e.jsx(J,{permission:"editor",children:e.jsxs("div",{className:j.messages,"data-testid":"panel-messages-control",children:[!s&&e.jsx(I,{onClick:n=>k("messagecontrol",n)}),s&&e.jsx($,{suppressSettings:!0}),e.jsx("div",{className:t,children:e.jsx(z,{children:e.jsx(ue,{})})})]})})}export{je as default};
2
- //# sourceMappingURL=MessageControlExport-yLGU2dMq.js.map
@@ -1,2 +0,0 @@
1
- import{e as i,k as w,j as e,br as N,h as k,bs as b,bt as g,bu as h,bv as m,bw as y,bx as x,by as j,D,p as $,q as v,s as C,t as I}from"./vendor-Cu5xgv5K.js";import{aw as E,aE as S,bx as M,i as P,ai as A}from"./index-5QAOtSTh.js";import{s as u,d as T}from"./useProjectData-CetvEK9E.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new s.Error().stack;t&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[t]="4f4df830-7d00-4ab9-8cdc-89b01329db22",s._sentryDebugIdIdentifier="sentry-dbid-4f4df830-7d00-4ab9-8cdc-89b01329db22")}catch{}})();const c=`${E}/automations`;async function F(){return(await i.get(c)).data}async function V(s){return(await i.post(c,s)).data}async function ss(s){return(await i.post(`${c}/trigger`,s)).data}async function es(s,t){return(await i.put(`${c}/trigger/${s}`,t)).data}function ts(s){return i.delete(`${c}/trigger/${s}`)}async function as(s){return(await i.post(`${c}/automation`,s)).data}async function ns(s,t){return(await i.put(`${c}/automation/${s}`,t)).data}function os(s){return i.delete(`${c}/automation/${s}`)}function rs(s){return i.post(`${c}/test`,s)}const O={enabledAutomations:!1,enabledOscIn:!1,oscPortIn:8888,triggers:[],automations:{}};function is(){const{data:s,status:t,isFetching:n,isError:o,refetch:a}=w({queryKey:M,queryFn:F,placeholderData:(r,p)=>r,retry:5,retryDelay:r=>r*2500,refetchInterval:S,networkMode:"always"});return{data:s??O,status:t,isFetching:n,isError:o,refetch:a}}const B="_tag_1hjkh_17",q={tag:B};function cs({children:s}){return e.jsx("span",{className:q.tag,children:s})}function R({color:s,isSelected:t,onClick:n}){const o=r=>{n==null||n(s),r.preventDefault(),r.stopPropagation()},a=P([u.swatch,t&&u.selected,n&&u.selectable]);return s?e.jsx("div",{className:a,style:{backgroundColor:`${s}`},onClick:o}):e.jsx("div",{className:a,onClick:o,children:e.jsx(N,{})})}const f=["","#FFCC78","#FFAB33","#77C785","#339E4E","#779BE7","#3E75E8","#FF7878","#ED3333","#A790F5","#8064E1","#9d9d9d","#ececec"];function ls(s){const{value:t,name:n,handleChange:o}=s,a=k.useCallback(r=>{r!==t&&o(n,r)},[o,n,t]);return e.jsxs("div",{className:u.list,children:[f.map(r=>e.jsx(R,{color:r,onClick:a,isSelected:t===r},r)),e.jsx(T,{color:t,onChange:a,isSelected:!f.includes(t)})]})}const Q="_positioner_1l5gl_17",U="_popup_1l5gl_21",K="_item_1l5gl_39",z="_separator_1l5gl_69",l={positioner:Q,popup:U,item:K,separator:z};function ds({items:s,children:t,...n}){return e.jsxs(b,{children:[e.jsx(g,{...n,children:t}),e.jsx(h,{children:e.jsx(m,{className:l.positioner,align:"start",sideOffset:8,children:e.jsx(y,{className:l.popup,children:s.map((o,a)=>o.type==="divider"?e.jsx(x,{className:l.separator},a):e.jsxs(j,{className:l.item,onClick:o.onClick,disabled:o.disabled,children:[o.icon&&e.jsx(o.icon,{}),o.label]},a))})})})]})}function us({items:s,isOpen:t,position:n,onClose:o}){return e.jsxs(b,{open:t,onOpenChange:a=>{a||o()},children:[e.jsx(g,{style:{position:"fixed",left:n.x,top:n.y},"aria-hidden":!0}),e.jsx(h,{children:e.jsx(m,{className:l.positioner,align:"start",sideOffset:8,alignOffset:8,children:e.jsx(y,{className:l.popup,children:s.map((a,r)=>a.type==="divider"?e.jsx(x,{className:l.separator},r):e.jsxs(j,{className:l.item,onClick:a.onClick,disabled:a.disabled,children:[a.icon&&e.jsx(a.icon,{}),a.label]},r))})})})]})}const G="_modal_4rabb_17",H="_backdrop_4rabb_34",J="_title_4rabb_44",L="_body_4rabb_53",W="_footer_4rabb_61",d={modal:G,backdrop:H,title:J,body:L,footer:W};function ps({isOpen:s,title:t,showCloseButton:n,showBackdrop:o,bodyElements:a,footerElements:r,onClose:p}){return e.jsx(D,{open:s,onOpenChange:_=>{_||p()},dismissible:!1,children:e.jsxs($,{children:[o&&e.jsx(v,{className:d.backdrop}),e.jsxs(C,{className:d.modal,children:[e.jsxs("div",{className:d.title,children:[t,n&&e.jsx(A,{variant:"subtle-white",onClick:p,children:e.jsx(I,{})})]}),e.jsx("div",{className:d.body,children:a}),e.jsx("div",{className:d.footer,children:r})]})]})})}export{ds as D,ps as M,us as P,ls as S,cs as T,ns as a,as as b,es as c,os as d,V as e,ss as f,ts as g,R as h,rs as t,is as u};
2
- //# sourceMappingURL=Modal-BKL-5GzU.js.map
Binary file
Binary file
@@ -1 +0,0 @@
1
- {"version":3,"file":"Modal-BKL-5GzU.js","sources":["../../src/common/api/automation.ts","../../src/common/models/AutomationSettings.ts","../../src/common/hooks-query/useAutomationSettings.ts","../../src/common/components/tag/Tag.tsx","../../src/common/components/input/colour-input/Swatch.tsx","../../src/common/components/input/colour-input/SwatchSelect.tsx","../../src/common/components/dropdown-menu/DropdownMenu.tsx","../../src/common/components/modal/Modal.tsx"],"sourcesContent":["import axios from 'axios';\nimport type {\n Automation,\n AutomationDTO,\n AutomationOutput,\n AutomationSettings,\n Trigger,\n TriggerDTO,\n} from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\n\nconst automationsPath = `${apiEntryUrl}/automations`;\n\n/**\n * HTTP request to get the automations settings\n */\nexport async function getAutomationSettings(): Promise<AutomationSettings> {\n const res = await axios.get(automationsPath);\n return res.data;\n}\n\n/**\n * HTTP request to edit the automations settings\n */\nexport async function editAutomationSettings(\n automationSettings: Partial<AutomationSettings>,\n): Promise<AutomationSettings> {\n const res = await axios.post(automationsPath, automationSettings);\n return res.data;\n}\n\n/**\n * HTTP request to create a new automation trigger\n */\nexport async function addTrigger(trigger: TriggerDTO): Promise<Trigger> {\n const res = await axios.post(`${automationsPath}/trigger`, trigger);\n return res.data;\n}\n\n/**\n * HTTP request to update an automation trigger\n */\nexport async function editTrigger(id: string, trigger: Trigger): Promise<Trigger> {\n const res = await axios.put(`${automationsPath}/trigger/${id}`, trigger);\n return res.data;\n}\n\n/**\n * HTTP request to delete an automation trigger\n */\nexport function deleteTrigger(id: string): Promise<void> {\n return axios.delete(`${automationsPath}/trigger/${id}`);\n}\n\n/**\n * HTTP request to create a new automation\n */\nexport async function addAutomation(automation: AutomationDTO): Promise<Automation> {\n const res = await axios.post(`${automationsPath}/automation`, automation);\n return res.data;\n}\n\n/**\n * HTTP request to update a automation\n */\nexport async function editAutomation(id: string, automation: Automation): Promise<Automation> {\n const res = await axios.put(`${automationsPath}/automation/${id}`, automation);\n return res.data;\n}\n\n/**\n * HTTP request to delete a automation\n */\nexport function deleteAutomation(id: string): Promise<void> {\n return axios.delete(`${automationsPath}/automation/${id}`);\n}\n\n/**\n * HTTP request to test automation output\n * The return is irrelevant as we care for the resolution of the promise\n */\nexport function testOutput(output: AutomationOutput): Promise<void> {\n return axios.post(`${automationsPath}/test`, output);\n}\n","import { AutomationSettings } from 'ontime-types';\n\nexport const automationPlaceholderSettings: AutomationSettings = {\n enabledAutomations: false,\n enabledOscIn: false,\n oscPortIn: 8888,\n triggers: [],\n automations: {},\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { getAutomationSettings } from '../api/automation';\nimport { AUTOMATION } from '../api/constants';\nimport { automationPlaceholderSettings } from '../models/AutomationSettings';\n\nexport default function useAutomationSettings() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: AUTOMATION,\n queryFn: getAutomationSettings,\n placeholderData: (previousData, _previousQuery) => previousData,\n retry: 5,\n retryDelay: (attempt: number) => attempt * 2500,\n refetchInterval: queryRefetchIntervalSlow,\n networkMode: 'always',\n });\n\n return { data: data ?? automationPlaceholderSettings, status, isFetching, isError, refetch };\n}\n","import { ReactNode } from 'react';\n\nimport style from './Tag.module.scss';\n\nexport default function Tag({ children }: { children: ReactNode }) {\n return <span className={style.tag}>{children}</span>;\n}\n","import { MouseEvent } from 'react';\nimport { IoBan } from 'react-icons/io5';\n\nimport { cx } from '../../../utils/styleUtils';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface SwatchProps {\n color: string;\n onClick?: (color: string) => void;\n isSelected?: boolean;\n}\n\nexport default function Swatch({ color, isSelected, onClick }: SwatchProps) {\n const handleClick = (event: MouseEvent) => {\n onClick?.(color);\n event.preventDefault();\n event.stopPropagation();\n };\n\n const classes = cx([style.swatch, isSelected && style.selected, onClick && style.selectable]);\n\n if (!color) {\n return (\n <div className={classes} onClick={handleClick}>\n <IoBan />\n </div>\n );\n }\n return <div className={classes} style={{ backgroundColor: `${color}` }} onClick={handleClick} />;\n}\n","import { useCallback } from 'react';\n\nimport Swatch from './Swatch';\nimport SwatchPicker from './SwatchPicker';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface ColourInputProps {\n value: string;\n name: 'colour';\n handleChange: (newValue: 'colour', name: string) => void;\n}\n\nconst colours = [\n '',\n '#FFCC78', // $orange-400\n '#FFAB33', // $orange-600\n '#77C785', // $green-400\n '#339E4E', // $green-600\n '#779BE7', // $blue-400\n '#3E75E8', // $blue-600\n '#FF7878', // $red-400\n '#ED3333', // $red-600\n '#A790F5', // $violet-400\n '#8064E1', // $violet-600\n '#9d9d9d', // $gray-500\n '#ececec', // $gray-100\n];\n\nexport default function SwatchSelect(props: ColourInputProps) {\n const { value, name, handleChange } = props;\n\n const setColour = useCallback(\n (newValue: string) => {\n if (newValue !== value) {\n handleChange(name, newValue);\n }\n },\n [handleChange, name, value],\n );\n\n return (\n <div className={style.list}>\n {colours.map((colour) => (\n <Swatch key={colour} color={colour} onClick={setColour} isSelected={value === colour} />\n ))}\n <SwatchPicker color={value} onChange={setColour} isSelected={!colours.includes(value)} />\n </div>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { IconType } from 'react-icons';\nimport { Menu as BaseMenu } from '@base-ui-components/react/menu';\n\nimport style from './DropdownMenu.module.scss';\n\ntype DropdownMenuItemDivider = { type: 'divider' };\ntype DropdownMenuItem = {\n type: 'item';\n label: string;\n icon?: IconType;\n disabled?: boolean;\n onClick: () => void;\n};\n\nexport type DropdownMenuOption = DropdownMenuItemDivider | DropdownMenuItem;\n\ninterface DropdownMenuProps extends BaseMenu.Trigger.Props {\n items: DropdownMenuOption[];\n}\n\nexport function DropdownMenu({ items, children, ...triggerProps }: PropsWithChildren<DropdownMenuProps>) {\n return (\n <BaseMenu.Root>\n <BaseMenu.Trigger {...triggerProps}>{children}</BaseMenu.Trigger>\n <BaseMenu.Portal>\n <BaseMenu.Positioner className={style.positioner} align='start' sideOffset={8}>\n <BaseMenu.Popup className={style.popup}>\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return <BaseMenu.Separator key={index} className={style.separator} />;\n }\n return (\n <BaseMenu.Item key={index} className={style.item} onClick={item.onClick} disabled={item.disabled}>\n {item.icon && <item.icon />}\n {item.label}\n </BaseMenu.Item>\n );\n })}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n\ninterface PositionedDropdownMenuProps {\n items: Array<DropdownMenuItemDivider | DropdownMenuItem>;\n isOpen: boolean;\n onClose: () => void;\n position: { x: number; y: number };\n}\n\nexport function PositionedDropdownMenu({ items, isOpen, position, onClose }: PositionedDropdownMenuProps) {\n return (\n <BaseMenu.Root\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) onClose();\n }}\n >\n <BaseMenu.Trigger style={{ position: 'fixed', left: position.x, top: position.y }} aria-hidden />\n <BaseMenu.Portal>\n <BaseMenu.Positioner className={style.positioner} align='start' sideOffset={8} alignOffset={8}>\n <BaseMenu.Popup className={style.popup}>\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return <BaseMenu.Separator key={index} className={style.separator} />;\n }\n return (\n <BaseMenu.Item key={index} className={style.item} onClick={item.onClick} disabled={item.disabled}>\n {item.icon && <item.icon />}\n {item.label}\n </BaseMenu.Item>\n );\n })}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n","import type { ReactNode } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { Dialog as BaseDialog } from '@base-ui-components/react/dialog';\n\nimport IconButton from '../buttons/IconButton';\n\nimport style from './Modal.module.scss';\n\ninterface ModalProps {\n isOpen: boolean;\n title?: string;\n showCloseButton?: boolean;\n showBackdrop?: boolean;\n bodyElements: ReactNode;\n footerElements?: ReactNode;\n onClose: () => void;\n}\n\nexport default function Modal({\n isOpen,\n title,\n showCloseButton,\n showBackdrop,\n bodyElements,\n footerElements,\n onClose,\n}: ModalProps) {\n return (\n <BaseDialog.Root\n open={isOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) onClose();\n }}\n dismissible={false}\n >\n <BaseDialog.Portal>\n {showBackdrop && <BaseDialog.Backdrop className={style.backdrop} />}\n <BaseDialog.Popup className={style.modal}>\n <div className={style.title}>\n {title}\n {showCloseButton && (\n <IconButton variant='subtle-white' onClick={onClose}>\n <IoClose />\n </IconButton>\n )}\n </div>\n <div className={style.body}>{bodyElements}</div>\n <div className={style.footer}>{footerElements}</div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n"],"names":["automationsPath","apiEntryUrl","getAutomationSettings","axios","editAutomationSettings","automationSettings","addTrigger","trigger","editTrigger","id","deleteTrigger","addAutomation","automation","editAutomation","deleteAutomation","testOutput","output","automationPlaceholderSettings","useAutomationSettings","data","status","isFetching","isError","refetch","useQuery","AUTOMATION","previousData","_previousQuery","attempt","queryRefetchIntervalSlow","Tag","children","jsx","style","Swatch","color","isSelected","onClick","handleClick","event","classes","cx","IoBan","colours","SwatchSelect","props","value","name","handleChange","setColour","useCallback","newValue","jsxs","colour","SwatchPicker","DropdownMenu","items","triggerProps","BaseMenu.Root","BaseMenu.Trigger","BaseMenu.Portal","BaseMenu.Positioner","BaseMenu.Popup","item","index","BaseMenu.Separator","BaseMenu.Item","PositionedDropdownMenu","isOpen","position","onClose","open","Modal","title","showCloseButton","showBackdrop","bodyElements","footerElements","BaseDialog.Root","BaseDialog.Portal","BaseDialog.Backdrop","BaseDialog.Popup","IconButton","IoClose"],"mappings":"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"}
@@ -1 +0,0 @@
1
- ._blink_1hjkh_1{animation:_blink_1hjkh_1 1s step-start infinite}@keyframes _blink_1hjkh_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1hjkh_13{transform:rotate(45deg)}._tag_1hjkh_17{font-size:calc(1rem - 3px);letter-spacing:.5px;background-color:#4c4c4c;color:#f6f6f6;border-radius:2px;padding:0 .25rem;white-space:nowrap}._blink_1l5gl_1{animation:_blink_1l5gl_1 1s step-start infinite}@keyframes _blink_1l5gl_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1l5gl_13{transform:rotate(45deg)}._positioner_1l5gl_17{outline:0}._popup_1l5gl_21{box-sizing:border-box;padding-block:.25rem;color:#f6f6f6;background-color:#202020;font-size:calc(1rem - 2px);border-radius:3px;border:1px solid #404040;box-shadow:#00000026 0 3px 3px;outline:none;transform-origin:var(--transform-origin);transition:transform .15s,opacity .15s}._popup_1l5gl_21[data-starting-style],._popup_1l5gl_21[data-ending-style]{opacity:0;transform:scale(.9)}._item_1l5gl_39{outline:0;cursor:default;padding-block:.5rem;padding-inline:1rem 2rem;display:flex;gap:.5rem;line-height:1em}._item_1l5gl_39 svg{color:#9d9d9d}._item_1l5gl_39[data-disabled]{opacity:.4;cursor:not-allowed}._item_1l5gl_39[data-highlighted]{z-index:0;position:relative}._item_1l5gl_39[data-highlighted]:not([data-disabled]):before{content:"";z-index:-1;position:absolute;inset-block:0;inset-inline:.25rem;border-radius:3px;background-color:#404040}._separator_1l5gl_69{margin:.25rem .75rem;height:1px;background-color:#ffffff12}._blink_4rabb_1{animation:_blink_4rabb_1 1s step-start infinite}@keyframes _blink_4rabb_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_4rabb_13{transform:rotate(45deg)}._modal_4rabb_17{position:fixed;top:10vh;left:50%;transform:translate(-50%);padding-inline:1rem;min-width:min(880px,90vw);min-height:min(200px,10vh);max-width:min(1200px,90vw);background-color:#202020;color:#f6f6f6;border-radius:3px;box-shadow:#00000026 0 3px 3px;border:1px solid #2d2d2d;outline:none}._backdrop_4rabb_34{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_4rabb_34[data-starting-style],._backdrop_4rabb_34[data-ending-style]{opacity:0}._title_4rabb_44{font-size:1rem;font-weight:600;padding-block:1rem;display:flex;align-items:center;justify-content:space-between}._body_4rabb_53{display:flex;flex-direction:column;gap:.5rem;max-height:60vh;overflow-y:auto}._footer_4rabb_61{padding-block:1rem;display:flex;align-items:center;justify-content:end;gap:1rem}
Binary file
Binary file
@@ -1,2 +0,0 @@
1
- import{j as e,aY as ee,aZ as te,a_ as ae,f as se,a$ as ie,h as d,ad as re,ab as ne,av as le}from"./vendor-Cu5xgv5K.js";import{i as X,ah as oe,ae as j,ar as g,b7 as P,b8 as ce,aq as de,O as x,a9 as ue,ac as he,Y as V,ad as S,af as fe,X as me,a7 as pe,B as ve,_ as be,an as xe,b9 as M,ba as H,am as je,ag as ge,al as _e,au as we,bb as Ce}from"./index-5QAOtSTh.js";import{I as ke}from"./useWindowTitle-b5fN0StF.js";import{S as Y}from"./Select-niU9Razm.js";import{S as _,u as ye}from"./useProjectData-CetvEK9E.js";import{u as Se}from"./useCustomFields-BuxKsqGS.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new s.Error().stack;r&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[r]="032dbb79-be26-44f0-8314-9096816e7e99",s._sentryDebugIdIdentifier="sentry-dbid-032dbb79-be26-44f0-8314-9096816e7e99")}catch{}})();const it=/^\d+$/,rt=/^https?:\/\//,nt=/^[a-z0-9]+$/i,Oe=/^[a-zA-Z0-9_-]*$/,Re="_blink_1cc8f_1",Ne="_fourtyfive_1cc8f_13",Ie="_radioGroup_1cc8f_17",$e="_item_1cc8f_23",De="_horizontal_1cc8f_28",Ue="_vertical_1cc8f_35",We="_radio_1cc8f_17",Ee="_indicator_1cc8f_73",I={blink:Re,fourtyfive:Ne,radioGroup:Ie,item:$e,horizontal:De,vertical:Ue,radio:We,indicator:Ee};function Z({items:s,className:r,orientation:n="vertical",onValueChange:o,...h}){return e.jsx(ee,{onValueChange:l=>o==null?void 0:o(l),className:X([I.radioGroup,I[n],r]),...h,children:s.map(l=>e.jsxs("label",{className:I.item,children:[e.jsx(te,{value:l.value.toString(),className:I.radio,children:e.jsx(ae,{className:I.indicator})}),l.label]},l.value.toString()))})}const K={hideTableSeconds:!1,hideIndexColumn:!1,showDelayedTimes:!1,hideDelays:!1},lt=se()(ie(s=>({...K,setOption:(r,n)=>s(o=>({...o,[r]:n})),toggleOption:r=>s(n=>({...n,[r]:!n[r]})),resetOptions:()=>s(K)}),{name:"cuesheet-options"})),W=[{value:"flag",label:"Flag"},{value:"cue",label:"Cue"},{value:"title",label:"Title"},{value:"timeStart",label:"Time start"},{value:"timeEnd",label:"Time end"},{value:"duration",label:"Duration"},{value:"note",label:"Note"}];function ze(s){return Object.entries(s).map(([r,n])=>({value:`custom-${r}`,label:n.label}))}const Fe="_twoCols_1wch9_17",Le="_grid_1wch9_23",G={twoCols:Fe,grid:Le};function Te({readRef:s,writeRef:r}){const{data:n}=Se(),o=d.useMemo(()=>ze(n),[n]),[h,l]=d.useState("full"),[u,$]=d.useState("full"),[w,C]=d.useState(()=>{const t={};return[...W,...o].forEach(i=>{t[i.value]=!0}),t}),[R,D]=d.useState(()=>{const t={};return[...W,...o].forEach(i=>{t[i.value]=!0}),t}),z=t=>{l(t),C(i=>{const f={...i};return Object.keys(f).forEach(m=>{f[m]=!0}),f})},F=t=>{t==="full"&&l("full"),$(t),C(i=>{const f={...i};return D(m=>{const k={...m};return[...W,...o].forEach(N=>{f[N.value]=!0,k[N.value]=!0}),k}),f})},c=(t,i,f)=>{i==="read"?C(m=>({...m,[t]:f})):D(m=>({...m,[t]:f}))},p=()=>h==="full"||u==="full"?"full":Object.entries(w).filter(([t,i])=>i).map(([t])=>t).join(","),L=()=>u==="full"?"full":Object.entries(R).filter(([t,i])=>i).map(([t])=>t).join(",");return e.jsxs(oe,{children:[e.jsx("input",{name:"read",hidden:!0,readOnly:!0,ref:s,value:p()||"-"}),e.jsx("input",{name:"write",hidden:!0,readOnly:!0,ref:r,value:L()||"-"}),e.jsxs("div",{children:[e.jsx(j,{title:"Access mode",description:"Which parts of the data will the link give access to"}),e.jsxs("div",{children:[e.jsx(Z,{value:u,onValueChange:F,orientation:"horizontal",items:[{value:"full",label:"Full write (edit all existing and future columns)"},{value:"custom",label:"Custom write"}]}),e.jsx(Z,{value:h,onValueChange:z,orientation:"horizontal",disabled:u==="full",items:[{value:"full",label:"Full read (view all existing and future columns)"},{value:"custom",label:"Custom read"}]})]})]}),e.jsxs("div",{className:G.twoCols,children:[e.jsxs("div",{className:G.grid,children:[e.jsx(g,{children:"Ontime columns"}),e.jsx(g,{children:"Read"}),e.jsx(g,{children:"Write"}),W.map(t=>e.jsxs(d.Fragment,{children:[e.jsx("div",{children:t.label}),e.jsx(_,{checked:!!w[t.value],onCheckedChange:i=>c(t.value,"read",i),disabled:h==="full"||u==="full","data-testid":`read-${t.value}`}),e.jsx(_,{checked:!!R[t.value],onCheckedChange:i=>c(t.value,"write",i),disabled:u==="full","data-testid":`write-${t.value}`})]},t.value))]}),o.length>0&&e.jsxs("div",{className:G.grid,children:[e.jsx(g,{children:"Custom fields"}),e.jsx(g,{children:"Read"}),e.jsx(g,{children:"Write"}),o.map(t=>e.jsxs(d.Fragment,{children:[t.label,e.jsx(_,{checked:!!w[t.value],onCheckedChange:i=>c(t.value,"read",i),disabled:h==="full"||u==="full","data-testid":`read-${t.value}`}),e.jsx(_,{checked:!!R[t.value],onCheckedChange:i=>c(t.value,"write",i),disabled:u==="full","data-testid":`write-${t.value}`})]},t.value))]})]})]})}const Pe="_qrCode_kmiy6_17",Ge="_column_kmiy6_23",Be="_copiableLink_kmiy6_32",qe="_shareInline_kmiy6_39",Ae="_end_kmiy6_45",O={qrCode:Pe,column:Ge,copiableLink:Be,shareInline:qe,end:Ae};function Ve({hostOptions:s,pathOptions:r,presets:n,isLockedToView:o}){var B,q;const[h,l]=d.useState("pending"),[u,$]=d.useState(P),w=d.useRef(null),C=d.useRef(null),R=d.useRef(`cuesheet-${ce()}`),{addPreset:D}=de(),{handleSubmit:z,setError:F,watch:c,setValue:p,reset:L,register:t,formState:{errors:i,isDirty:f}}=re({mode:"onChange",defaultValues:{baseUrl:P,path:o?r[0].value:x.Timer,authenticate:!1,lockConfig:!1,lockNav:!1}}),m=async(a,y)=>{if(y.read==="-")throw new Error("Cannot create a share with no read permissions");return(await D({target:x.Cuesheet,enabled:!0,alias:a,search:"",options:{read:y.read,write:y.write}})).find(U=>U.alias===a)},k=async a=>{var y,T,U;try{if(l("loading"),a.path===x.Cuesheet){const v=await m(a.alias,{read:((y=w.current)==null?void 0:y.value)??"full",write:((T=C.current)==null?void 0:T.value)??"full"});if(!v)throw new Error("Failed to create URL preset for Cuesheet");const b=await M({baseUrl:a.baseUrl,path:a.path,authenticate:a.authenticate,lockConfig:a.lockConfig,lockNav:a.lockNav,preset:v.alias});await H(b),$(b)}else{const v=a.path.startsWith("preset-")?a.path.replace("preset-",""):void 0,b=v?(U=n.find(J=>J.alias===v))==null?void 0:U.target:a.path;if(!b)throw new Error(`Could not resolve preset: ${b}`);const A=await M({baseUrl:je(a.baseUrl),path:b,authenticate:a.authenticate,lockConfig:a.lockConfig,lockNav:a.lockNav,preset:v});await H(A),$(A)}L(a,{keepValues:!0,keepDirty:!1}),l("success")}catch(v){const b=ge(v);F("root",{message:b}),l("error")}},N=f||h!=="success";return e.jsxs("form",{onSubmit:z(k),onKeyDown:a=>ue(a),children:[!o&&e.jsx(ke,{children:"You can generate a link to share with your team or to use in automation (such as companion)."}),e.jsxs("div",{className:O.shareInline,children:[e.jsxs("div",{className:O.column,children:[e.jsxs(he,{children:[V?e.jsx("input",{hidden:!0,readOnly:!0,name:"baseUrl",value:P}):e.jsxs(S,{children:[e.jsx(j,{title:"Host IP",description:`Which IP address will be used${V?" (not applicable in Ontime Cloud)":""}`}),e.jsx(Y,{options:s,value:c("baseUrl"),onValueChange:a=>p("baseUrl",a)})]}),o?e.jsx("input",{type:"hidden",value:c("path")}):e.jsxs(S,{children:[e.jsx(j,{title:"Ontime view",description:"Which view or preset will the link point to"}),e.jsx(Y,{options:r,value:c("path"),onValueChange:a=>p("path",a,{shouldDirty:!0})})]}),c("path")===x.Cuesheet&&e.jsxs(e.Fragment,{children:[e.jsxs(S,{children:[e.jsx(j,{title:"Preset alias",description:"The name of the preset we will create to hold this options",error:(B=i.alias)==null?void 0:B.message}),e.jsx(fe,{defaultValue:R.current,...t("alias",{required:"Alias cannot be empty and must be unique",pattern:{value:Oe,message:"Field can only contain URL safe characters (a-z, 0-9, _ and -)"}})})]}),e.jsx(Te,{readRef:w,writeRef:C})]}),e.jsxs(S,{children:[e.jsx(j,{title:"Lock navigation",description:"Whether to hide the navigation menu"}),e.jsx(_,{size:"large",name:"lockNav","data-testid":"lockNav",checked:c("lockNav"),onCheckedChange:a=>p("lockNav",a,{shouldDirty:!0}),disabled:c("lockConfig")})]}),c("path")!==x.Cuesheet&&e.jsxs(S,{children:[e.jsx(j,{title:"Lock configuration",description:"Whether to hide the configuration panel (also hides navigation)"}),e.jsx(_,{size:"large",name:"lockConfig","data-testid":"lockConfig",checked:c("lockConfig"),onCheckedChange:a=>{a&&p("lockNav",a,{shouldDirty:!0}),p("lockConfig",a,{shouldDirty:!0})}})]}),e.jsxs(S,{children:[e.jsx(j,{title:"Authenticate",description:"Whether the URL should be pre-authenticated"}),e.jsx(_,{size:"large",name:"authenticate","data-testid":"authenticate",checked:c("authenticate"),onCheckedChange:a=>p("authenticate",a,{shouldDirty:!0})})]})]}),e.jsx(me,{children:(q=i.root)==null?void 0:q.message}),e.jsx(pe,{align:"end",className:O.end,children:e.jsx(ve,{type:"submit",variant:N?"primary":"subtle",loading:h==="loading",children:N?"Create share link":"Link copied to clipboard!"})})]}),e.jsxs(be,{className:O.column,children:[e.jsx(g,{children:"Share this link"}),e.jsx(ne,{size:172,value:u,className:O.qrCode}),e.jsx("div",{className:O.copiableLink,"data-testid":"copy-link",children:u}),e.jsx(xe,{copyValue:u,children:"Copy link"})]})]})]})}function ot({lockedPath:s}){const{data:r}=_e(),{data:n}=we({skip:s===void 0}),o=d.useMemo(()=>r.networkInterfaces.map(l=>({value:l.address,label:`${l.name} - ${l.address}`})),[r.networkInterfaces]),h=d.useMemo(()=>s?[{value:s.value,label:s.label}]:[{value:x.Timer,label:"Timer"},{value:x.Cuesheet,label:"Cuesheet"},{value:x.Operator,label:"Operator"},{value:"<<companion>>",label:"Companion"},...n.map(l=>({value:`preset-${l.alias}`,label:`URL Preset: ${l.alias}`}))],[s,n]);return e.jsx(Ve,{hostOptions:o,pathOptions:h,presets:n,isLockedToView:!!s})}const Me="_title_g70eo_17",He="_description_g70eo_24",Q={title:Me,description:He};function ct(){const{data:s}=ye();return!s.title&&!s.description?null:e.jsxs("div",{children:[e.jsx("div",{className:Q.title,children:s.title}),e.jsx("div",{className:Q.description,children:s.description})]})}const Ye="_overview_zh5tn_17",Ze="_isOffline_zh5tn_24",Ke="_info_zh5tn_24",Qe="_nav_zh5tn_39",E={overview:Ye,isOffline:Ze,info:Ke,nav:Qe};function dt({navElements:s,children:r}){const{isOnline:n}=Ce();return e.jsx("div",{className:X([E.overview,!n&&E.isOffline]),children:e.jsxs(le,{children:[e.jsx("div",{className:E.nav,children:s}),e.jsx("div",{className:E.info,children:r})]})})}export{ot as G,dt as O,Z as R,ct as T,nt as a,it as i,rt as s,lt as u};
2
- //# sourceMappingURL=OverviewWrapper-riM6vPno.js.map