@getontime/cli 4.4.1 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/client/assets/{Backstage-BY9GL_rk.js → Backstage-DQu8ne-1.js} +2 -2
  2. package/client/assets/Backstage-DQu8ne-1.js.br +0 -0
  3. package/client/assets/Backstage-DQu8ne-1.js.gz +0 -0
  4. package/client/assets/{Backstage-BY9GL_rk.js.map → Backstage-DQu8ne-1.js.map} +1 -1
  5. package/client/assets/{Countdown-CXFgDHND.js → Countdown-COte1yne.js} +2 -2
  6. package/client/assets/Countdown-COte1yne.js.br +0 -0
  7. package/client/assets/Countdown-COte1yne.js.gz +0 -0
  8. package/client/assets/{Countdown-CXFgDHND.js.map → Countdown-COte1yne.js.map} +1 -1
  9. package/client/assets/CuesheetTable-BQfxAp-I.js +2 -0
  10. package/client/assets/CuesheetTable-BQfxAp-I.js.br +0 -0
  11. package/client/assets/CuesheetTable-BQfxAp-I.js.gz +0 -0
  12. package/client/assets/CuesheetTable-BQfxAp-I.js.map +1 -0
  13. package/client/assets/CustomTranslationModal-C5mAtBjW.js +2 -0
  14. package/client/assets/CustomTranslationModal-C5mAtBjW.js.br +0 -0
  15. package/client/assets/CustomTranslationModal-C5mAtBjW.js.gz +0 -0
  16. package/client/assets/{CustomTranslationModal-4PVZBtkC.js.map → CustomTranslationModal-C5mAtBjW.js.map} +1 -1
  17. package/client/assets/{DelayIndicator-DUbpd6DG.js → DelayIndicator-B0cudY9N.js} +2 -2
  18. package/client/assets/DelayIndicator-B0cudY9N.js.br +0 -0
  19. package/client/assets/DelayIndicator-B0cudY9N.js.gz +0 -0
  20. package/client/assets/DelayIndicator-B0cudY9N.js.map +1 -0
  21. package/client/assets/{EditorFeatureWrapper-CV_zaDoG.js → EditorFeatureWrapper-DpDaCaJ3.js} +2 -2
  22. package/client/assets/EditorFeatureWrapper-DpDaCaJ3.js.br +0 -0
  23. package/client/assets/EditorFeatureWrapper-DpDaCaJ3.js.gz +0 -0
  24. package/client/assets/{EditorFeatureWrapper-CV_zaDoG.js.map → EditorFeatureWrapper-DpDaCaJ3.js.map} +1 -1
  25. package/client/assets/{EditorUtils-CLBWDP4k.js → EditorUtils-k5KpETPG.js} +2 -2
  26. package/client/assets/EditorUtils-k5KpETPG.js.br +0 -0
  27. package/client/assets/EditorUtils-k5KpETPG.js.gz +0 -0
  28. package/client/assets/{EditorUtils-CLBWDP4k.js.map → EditorUtils-k5KpETPG.js.map} +1 -1
  29. package/client/assets/EmptyPage-aTb22KTq.js +2 -0
  30. package/client/assets/EmptyPage-aTb22KTq.js.br +0 -0
  31. package/client/assets/EmptyPage-aTb22KTq.js.gz +0 -0
  32. package/client/assets/{EmptyPage-DmpOAg7R.js.map → EmptyPage-aTb22KTq.js.map} +1 -1
  33. package/client/assets/{FollowButton-CAUWz5Ma.js → FollowButton--Bj9S6jO.js} +2 -2
  34. package/client/assets/FollowButton--Bj9S6jO.js.br +0 -0
  35. package/client/assets/FollowButton--Bj9S6jO.js.gz +0 -0
  36. package/client/assets/{FollowButton-CAUWz5Ma.js.map → FollowButton--Bj9S6jO.js.map} +1 -1
  37. package/client/assets/MessageControlExport-BN6OfADo.js +3 -0
  38. package/client/assets/MessageControlExport-BN6OfADo.js.br +0 -0
  39. package/client/assets/MessageControlExport-BN6OfADo.js.gz +0 -0
  40. package/client/assets/{MessageControlExport-Dm8IjSr4.js.map → MessageControlExport-BN6OfADo.js.map} +1 -1
  41. package/client/assets/{MultiPartProgressBar-Fp-sTN2u.js → MultiPartProgressBar-BlLJNQ0D.js} +2 -2
  42. package/client/assets/MultiPartProgressBar-BlLJNQ0D.js.br +0 -0
  43. package/client/assets/MultiPartProgressBar-BlLJNQ0D.js.gz +0 -0
  44. package/client/assets/{MultiPartProgressBar-Fp-sTN2u.js.map → MultiPartProgressBar-BlLJNQ0D.js.map} +1 -1
  45. package/client/assets/{OperatorExport-CE4ajLPS.js → OperatorExport-CmgIl1lz.js} +2 -2
  46. package/client/assets/OperatorExport-CmgIl1lz.js.br +0 -0
  47. package/client/assets/OperatorExport-CmgIl1lz.js.gz +0 -0
  48. package/client/assets/OperatorExport-CmgIl1lz.js.map +1 -0
  49. package/client/assets/OverviewWrapper-B4nU68Eq.js +2 -0
  50. package/client/assets/OverviewWrapper-B4nU68Eq.js.br +0 -0
  51. package/client/assets/OverviewWrapper-B4nU68Eq.js.gz +0 -0
  52. package/client/assets/{OverviewWrapper-BNnAIUP1.js.map → OverviewWrapper-B4nU68Eq.js.map} +1 -1
  53. package/client/assets/OverviewWrapper-fPfl6o_p.css +1 -0
  54. package/client/assets/OverviewWrapper-fPfl6o_p.css.br +0 -0
  55. package/client/assets/OverviewWrapper-fPfl6o_p.css.gz +0 -0
  56. package/client/assets/{PipHost-CbNFsfqp.js → PipHost-BZy7ouDv.js} +2 -2
  57. package/client/assets/PipHost-BZy7ouDv.js.br +0 -0
  58. package/client/assets/PipHost-BZy7ouDv.js.gz +0 -0
  59. package/client/assets/{PipHost-CbNFsfqp.js.map → PipHost-BZy7ouDv.js.map} +1 -1
  60. package/client/assets/{ProjectInfo-Bf5z4Xsv.js → ProjectInfo-D0X9vdIX.js} +2 -2
  61. package/client/assets/ProjectInfo-D0X9vdIX.js.br +0 -0
  62. package/client/assets/ProjectInfo-D0X9vdIX.js.gz +0 -0
  63. package/client/assets/{ProjectInfo-Bf5z4Xsv.js.map → ProjectInfo-D0X9vdIX.js.map} +1 -1
  64. package/client/assets/ProtectRoute-DSilyhst.js +2 -0
  65. package/client/assets/ProtectRoute-DSilyhst.js.br +0 -0
  66. package/client/assets/ProtectRoute-DSilyhst.js.gz +0 -0
  67. package/client/assets/{ProtectRoute-CCHzyy0I.js.map → ProtectRoute-DSilyhst.js.map} +1 -1
  68. package/client/assets/ProtectedCuesheet-DRTfZTZN.js +2 -0
  69. package/client/assets/ProtectedCuesheet-DRTfZTZN.js.br +0 -0
  70. package/client/assets/ProtectedCuesheet-DRTfZTZN.js.gz +0 -0
  71. package/client/assets/ProtectedCuesheet-DRTfZTZN.js.map +1 -0
  72. package/client/assets/ProtectedEditor-DNOiQqIU.js +3 -0
  73. package/client/assets/ProtectedEditor-DNOiQqIU.js.br +0 -0
  74. package/client/assets/ProtectedEditor-DNOiQqIU.js.gz +0 -0
  75. package/client/assets/ProtectedEditor-DNOiQqIU.js.map +1 -0
  76. package/client/assets/ProtectedEditor-DyaLP0mG.css +1 -0
  77. package/client/assets/ProtectedEditor-DyaLP0mG.css.br +0 -0
  78. package/client/assets/ProtectedEditor-DyaLP0mG.css.gz +0 -0
  79. package/client/assets/{RundownExport-C_q3KYN_.js → RundownExport-Bvc1J50m.js} +2 -2
  80. package/client/assets/RundownExport-Bvc1J50m.js.br +0 -0
  81. package/client/assets/RundownExport-Bvc1J50m.js.gz +0 -0
  82. package/client/assets/RundownExport-Bvc1J50m.js.map +1 -0
  83. package/client/assets/{Select-DQwYPDyI.js → Select-CvUrsmYI.js} +2 -2
  84. package/client/assets/Select-CvUrsmYI.js.br +0 -0
  85. package/client/assets/Select-CvUrsmYI.js.gz +0 -0
  86. package/client/assets/{Select-DQwYPDyI.js.map → Select-CvUrsmYI.js.map} +1 -1
  87. package/client/assets/{Studio-DzXTmBx4.js → Studio-BSSiKd6k.js} +2 -2
  88. package/client/assets/Studio-BSSiKd6k.js.br +0 -0
  89. package/client/assets/Studio-BSSiKd6k.js.gz +0 -0
  90. package/client/assets/{Studio-DzXTmBx4.js.map → Studio-BSSiKd6k.js.map} +1 -1
  91. package/client/assets/{StyleEditor-ClMEMaWh.js → StyleEditor-buc-zQHR.js} +2 -2
  92. package/client/assets/StyleEditor-buc-zQHR.js.br +0 -0
  93. package/client/assets/StyleEditor-buc-zQHR.js.gz +0 -0
  94. package/client/assets/{StyleEditor-ClMEMaWh.js.map → StyleEditor-buc-zQHR.js.map} +1 -1
  95. package/client/assets/{SuperscriptPeriod-CBiZU34J.js → SuperscriptPeriod-CSX8zFgq.js} +2 -2
  96. package/client/assets/SuperscriptPeriod-CSX8zFgq.js.br +0 -0
  97. package/client/assets/SuperscriptPeriod-CSX8zFgq.js.gz +0 -0
  98. package/client/assets/{SuperscriptPeriod-CBiZU34J.js.map → SuperscriptPeriod-CSX8zFgq.js.map} +1 -1
  99. package/client/assets/{SuperscriptTime-DP1CDlOX.js → SuperscriptTime-retbmT5o.js} +2 -2
  100. package/client/assets/SuperscriptTime-retbmT5o.js.br +0 -0
  101. package/client/assets/SuperscriptTime-retbmT5o.js.gz +0 -0
  102. package/client/assets/{SuperscriptTime-DP1CDlOX.js.map → SuperscriptTime-retbmT5o.js.map} +1 -1
  103. package/client/assets/SwatchPicker-DuWAohyD.js +2 -0
  104. package/client/assets/SwatchPicker-DuWAohyD.js.br +0 -0
  105. package/client/assets/SwatchPicker-DuWAohyD.js.gz +0 -0
  106. package/client/assets/{SwatchPicker-Dyxkxf3_.js.map → SwatchPicker-DuWAohyD.js.map} +1 -1
  107. package/client/assets/TimeElements-BfxdLkpO.js +2 -0
  108. package/client/assets/TimeElements-BfxdLkpO.js.br +0 -0
  109. package/client/assets/TimeElements-BfxdLkpO.js.gz +0 -0
  110. package/client/assets/{TimeElements-pDYJeFbV.js.map → TimeElements-BfxdLkpO.js.map} +1 -1
  111. package/client/assets/{TimeInput-DTWDnaum.js → TimeInput-BjOTgjcv.js} +2 -2
  112. package/client/assets/TimeInput-BjOTgjcv.js.br +0 -0
  113. package/client/assets/TimeInput-BjOTgjcv.js.gz +0 -0
  114. package/client/assets/{TimeInput-DTWDnaum.js.map → TimeInput-BjOTgjcv.js.map} +1 -1
  115. package/client/assets/{TimelinePage-DbLt9rQi.js → TimelinePage-pjff5TxG.js} +2 -2
  116. package/client/assets/TimelinePage-pjff5TxG.js.br +0 -0
  117. package/client/assets/TimelinePage-pjff5TxG.js.gz +0 -0
  118. package/client/assets/TimelinePage-pjff5TxG.js.map +1 -0
  119. package/client/assets/{Timer-BfyVKQ8U.js → Timer-ahF-O2zN.js} +2 -2
  120. package/client/assets/Timer-ahF-O2zN.js.br +0 -0
  121. package/client/assets/Timer-ahF-O2zN.js.gz +0 -0
  122. package/client/assets/{Timer-BfyVKQ8U.js.map → Timer-ahF-O2zN.js.map} +1 -1
  123. package/client/assets/TimerControlExport-De2n8HWG.js +2 -0
  124. package/client/assets/TimerControlExport-De2n8HWG.js.br +0 -0
  125. package/client/assets/TimerControlExport-De2n8HWG.js.gz +0 -0
  126. package/client/assets/TimerControlExport-De2n8HWG.js.map +1 -0
  127. package/client/assets/TimerDisplay-DeFQvmo9.js +2 -0
  128. package/client/assets/TimerDisplay-DeFQvmo9.js.br +0 -0
  129. package/client/assets/TimerDisplay-DeFQvmo9.js.gz +0 -0
  130. package/client/assets/{TimerDisplay-Dgmbqf65.js.map → TimerDisplay-DeFQvmo9.js.map} +1 -1
  131. package/client/assets/{TitleCard-MUurHeZ7.js → TitleCard-BiaQE4ZK.js} +2 -2
  132. package/client/assets/TitleCard-BiaQE4ZK.js.br +0 -0
  133. package/client/assets/TitleCard-BiaQE4ZK.js.gz +0 -0
  134. package/client/assets/{TitleCard-MUurHeZ7.js.map → TitleCard-BiaQE4ZK.js.map} +1 -1
  135. package/client/assets/{Tooltip-DXph8P8p.js → Tooltip-C5iPq6NR.js} +2 -2
  136. package/client/assets/Tooltip-C5iPq6NR.js.br +0 -0
  137. package/client/assets/Tooltip-C5iPq6NR.js.gz +0 -0
  138. package/client/assets/{Tooltip-DXph8P8p.js.map → Tooltip-C5iPq6NR.js.map} +1 -1
  139. package/client/assets/{ViewLogo-Ckp7i75x.js → ViewLogo-DcDhyyIF.js} +2 -2
  140. package/client/assets/ViewLogo-DcDhyyIF.js.br +0 -0
  141. package/client/assets/ViewLogo-DcDhyyIF.js.gz +0 -0
  142. package/client/assets/{ViewLogo-Ckp7i75x.js.map → ViewLogo-DcDhyyIF.js.map} +1 -1
  143. package/client/assets/{ViewParamsEditor-Cxngd15h.js → ViewParamsEditor-DeMdkxxC.js} +2 -2
  144. package/client/assets/ViewParamsEditor-DeMdkxxC.js.br +0 -0
  145. package/client/assets/ViewParamsEditor-DeMdkxxC.js.gz +0 -0
  146. package/client/assets/{ViewParamsEditor-Cxngd15h.js.map → ViewParamsEditor-DeMdkxxC.js.map} +1 -1
  147. package/client/assets/{editorSettings-D4jfu68W.js → editorSettings-xk5GwlLv.js} +2 -2
  148. package/client/assets/editorSettings-xk5GwlLv.js.br +0 -0
  149. package/client/assets/editorSettings-xk5GwlLv.js.gz +0 -0
  150. package/client/assets/{editorSettings-D4jfu68W.js.map → editorSettings-xk5GwlLv.js.map} +1 -1
  151. package/client/assets/{getProgress-B9UANc25.js → getProgress-CWSCZOIN.js} +2 -2
  152. package/client/assets/getProgress-CWSCZOIN.js.br +0 -0
  153. package/client/assets/getProgress-CWSCZOIN.js.gz +0 -0
  154. package/client/assets/{getProgress-B9UANc25.js.map → getProgress-CWSCZOIN.js.map} +1 -1
  155. package/client/assets/index-3aosT33y.js +3 -0
  156. package/client/assets/index-3aosT33y.js.br +0 -0
  157. package/client/assets/index-3aosT33y.js.gz +0 -0
  158. package/client/assets/index-3aosT33y.js.map +1 -0
  159. package/client/assets/{offset-DAyBfv5b.js → offset-yVqq_CB1.js} +2 -2
  160. package/client/assets/offset-yVqq_CB1.js.br +0 -0
  161. package/client/assets/offset-yVqq_CB1.js.gz +0 -0
  162. package/client/assets/{offset-DAyBfv5b.js.map → offset-yVqq_CB1.js.map} +1 -1
  163. package/client/assets/parseUserTime-wAKk9aCJ.js +2 -0
  164. package/client/assets/parseUserTime-wAKk9aCJ.js.br +0 -0
  165. package/client/assets/parseUserTime-wAKk9aCJ.js.gz +0 -0
  166. package/client/assets/{parseUserTime-WkVNjkkE.js.map → parseUserTime-wAKk9aCJ.js.map} +1 -1
  167. package/client/assets/{playbackstate-znZk3SSJ.js → playbackstate-BZ9WYn2k.js} +2 -2
  168. package/client/assets/playbackstate-BZ9WYn2k.js.br +0 -0
  169. package/client/assets/playbackstate-BZ9WYn2k.js.gz +0 -0
  170. package/client/assets/{playbackstate-znZk3SSJ.js.map → playbackstate-BZ9WYn2k.js.map} +1 -1
  171. package/client/assets/{presentation.utils-CjjYs5II.js → presentation.utils-lyuuD4A5.js} +2 -2
  172. package/client/assets/presentation.utils-lyuuD4A5.js.br +0 -0
  173. package/client/assets/presentation.utils-lyuuD4A5.js.gz +0 -0
  174. package/client/assets/{presentation.utils-CjjYs5II.js.map → presentation.utils-lyuuD4A5.js.map} +1 -1
  175. package/client/assets/{rundownUtils-BTQ3EeqN.js → rundownUtils-XX_c4Pcl.js} +2 -2
  176. package/client/assets/rundownUtils-XX_c4Pcl.js.br +0 -0
  177. package/client/assets/rundownUtils-XX_c4Pcl.js.gz +0 -0
  178. package/client/assets/{rundownUtils-BTQ3EeqN.js.map → rundownUtils-XX_c4Pcl.js.map} +1 -1
  179. package/client/assets/timer.utils-CWHFVz06.js +2 -0
  180. package/client/assets/timer.utils-CWHFVz06.js.br +0 -0
  181. package/client/assets/timer.utils-CWHFVz06.js.gz +0 -0
  182. package/client/assets/{timer.utils-B-Ui91P7.js.map → timer.utils-CWHFVz06.js.map} +1 -1
  183. package/client/assets/useCustomFields-kBD1jvDA.js +2 -0
  184. package/client/assets/useCustomFields-kBD1jvDA.js.br +0 -0
  185. package/client/assets/useCustomFields-kBD1jvDA.js.gz +0 -0
  186. package/client/assets/{useCustomFields-zr9SUl5o.js.map → useCustomFields-kBD1jvDA.js.map} +1 -1
  187. package/client/assets/{useEventSelection-B9mbj1cM.js → useEventSelection-Cvdw9all.js} +2 -2
  188. package/client/assets/useEventSelection-Cvdw9all.js.br +0 -0
  189. package/client/assets/useEventSelection-Cvdw9all.js.gz +0 -0
  190. package/client/assets/{useEventSelection-B9mbj1cM.js.map → useEventSelection-Cvdw9all.js.map} +1 -1
  191. package/client/assets/{useProjectData-DD_BQ9eJ.js → useProjectData-gGT2eczr.js} +2 -2
  192. package/client/assets/useProjectData-gGT2eczr.js.br +0 -0
  193. package/client/assets/useProjectData-gGT2eczr.js.gz +0 -0
  194. package/client/assets/{useProjectData-DD_BQ9eJ.js.map → useProjectData-gGT2eczr.js.map} +1 -1
  195. package/client/assets/{useReport-DozG5uz5.js → useReport-CG6m_Zb0.js} +2 -2
  196. package/client/assets/useReport-CG6m_Zb0.js.br +0 -0
  197. package/client/assets/useReport-CG6m_Zb0.js.gz +0 -0
  198. package/client/assets/{useReport-DozG5uz5.js.map → useReport-CG6m_Zb0.js.map} +1 -1
  199. package/client/assets/{useRundown-D6vokFHi.js → useRundown-C6stroSA.js} +2 -2
  200. package/client/assets/useRundown-C6stroSA.js.br +0 -0
  201. package/client/assets/useRundown-C6stroSA.js.gz +0 -0
  202. package/client/assets/useRundown-C6stroSA.js.map +1 -0
  203. package/client/assets/{useSelectAndRevealEntry-Dd6MpVHe.js → useSelectAndRevealEntry-D79sYFHr.js} +2 -2
  204. package/client/assets/useSelectAndRevealEntry-D79sYFHr.js.br +0 -0
  205. package/client/assets/useSelectAndRevealEntry-D79sYFHr.js.gz +0 -0
  206. package/client/assets/{useSelectAndRevealEntry-Dd6MpVHe.js.map → useSelectAndRevealEntry-D79sYFHr.js.map} +1 -1
  207. package/client/assets/{useWindowTitle-bg-fLPOk.js → useWindowTitle-CQ8nEeel.js} +2 -2
  208. package/client/assets/useWindowTitle-CQ8nEeel.js.br +0 -0
  209. package/client/assets/useWindowTitle-CQ8nEeel.js.gz +0 -0
  210. package/client/assets/{useWindowTitle-bg-fLPOk.js.map → useWindowTitle-CQ8nEeel.js.map} +1 -1
  211. package/client/assets/{validateEvent-BUgLWn7x.js → validateEvent-BnwPmDph.js} +2 -2
  212. package/client/assets/validateEvent-BnwPmDph.js.br +0 -0
  213. package/client/assets/validateEvent-BnwPmDph.js.gz +0 -0
  214. package/client/assets/{validateEvent-BUgLWn7x.js.map → validateEvent-BnwPmDph.js.map} +1 -1
  215. package/client/assets/{vendor-CKDP5hij.js → vendor-Dt3_Fdfs.js} +2 -2
  216. package/client/assets/vendor-Dt3_Fdfs.js.br +0 -0
  217. package/client/assets/vendor-Dt3_Fdfs.js.gz +0 -0
  218. package/client/assets/{vendor-CKDP5hij.js.map → vendor-Dt3_Fdfs.js.map} +1 -1
  219. package/client/assets/{viewLoader.utils-Bn5zu5sz.js → viewLoader.utils-H7r-zNPP.js} +2 -2
  220. package/client/assets/viewLoader.utils-H7r-zNPP.js.br +0 -0
  221. package/client/assets/viewLoader.utils-H7r-zNPP.js.gz +0 -0
  222. package/client/assets/{viewLoader.utils-Bn5zu5sz.js.map → viewLoader.utils-H7r-zNPP.js.map} +1 -1
  223. package/client/assets/{viewUtils-DQFwr7hm.js → viewUtils-k0tARVDN.js} +2 -2
  224. package/client/assets/viewUtils-k0tARVDN.js.br +0 -0
  225. package/client/assets/viewUtils-k0tARVDN.js.gz +0 -0
  226. package/client/assets/{viewUtils-DQFwr7hm.js.map → viewUtils-k0tARVDN.js.map} +1 -1
  227. package/client/index.html +2 -2
  228. package/package.json +1 -1
  229. package/server/index.cjs +104 -104
  230. package/client/assets/Backstage-BY9GL_rk.js.br +0 -0
  231. package/client/assets/Backstage-BY9GL_rk.js.gz +0 -0
  232. package/client/assets/Countdown-CXFgDHND.js.br +0 -0
  233. package/client/assets/Countdown-CXFgDHND.js.gz +0 -0
  234. package/client/assets/CuesheetTable-BLICUNky.js +0 -2
  235. package/client/assets/CuesheetTable-BLICUNky.js.br +0 -0
  236. package/client/assets/CuesheetTable-BLICUNky.js.gz +0 -0
  237. package/client/assets/CuesheetTable-BLICUNky.js.map +0 -1
  238. package/client/assets/CustomTranslationModal-4PVZBtkC.js +0 -2
  239. package/client/assets/CustomTranslationModal-4PVZBtkC.js.br +0 -0
  240. package/client/assets/CustomTranslationModal-4PVZBtkC.js.gz +0 -0
  241. package/client/assets/DelayIndicator-DUbpd6DG.js.br +0 -0
  242. package/client/assets/DelayIndicator-DUbpd6DG.js.gz +0 -0
  243. package/client/assets/DelayIndicator-DUbpd6DG.js.map +0 -1
  244. package/client/assets/EditorFeatureWrapper-CV_zaDoG.js.br +0 -0
  245. package/client/assets/EditorFeatureWrapper-CV_zaDoG.js.gz +0 -0
  246. package/client/assets/EditorUtils-CLBWDP4k.js.br +0 -0
  247. package/client/assets/EditorUtils-CLBWDP4k.js.gz +0 -0
  248. package/client/assets/EmptyPage-DmpOAg7R.js +0 -2
  249. package/client/assets/EmptyPage-DmpOAg7R.js.br +0 -2
  250. package/client/assets/EmptyPage-DmpOAg7R.js.gz +0 -0
  251. package/client/assets/FollowButton-CAUWz5Ma.js.br +0 -0
  252. package/client/assets/FollowButton-CAUWz5Ma.js.gz +0 -0
  253. package/client/assets/MessageControlExport-Dm8IjSr4.js +0 -3
  254. package/client/assets/MessageControlExport-Dm8IjSr4.js.br +0 -0
  255. package/client/assets/MessageControlExport-Dm8IjSr4.js.gz +0 -0
  256. package/client/assets/MultiPartProgressBar-Fp-sTN2u.js.br +0 -0
  257. package/client/assets/MultiPartProgressBar-Fp-sTN2u.js.gz +0 -0
  258. package/client/assets/OperatorExport-CE4ajLPS.js.br +0 -0
  259. package/client/assets/OperatorExport-CE4ajLPS.js.gz +0 -0
  260. package/client/assets/OperatorExport-CE4ajLPS.js.map +0 -1
  261. package/client/assets/OverviewWrapper-BNnAIUP1.js +0 -2
  262. package/client/assets/OverviewWrapper-BNnAIUP1.js.br +0 -0
  263. package/client/assets/OverviewWrapper-BNnAIUP1.js.gz +0 -0
  264. package/client/assets/OverviewWrapper-DOYzR0Ef.css +0 -1
  265. package/client/assets/OverviewWrapper-DOYzR0Ef.css.br +0 -0
  266. package/client/assets/OverviewWrapper-DOYzR0Ef.css.gz +0 -0
  267. package/client/assets/PipHost-CbNFsfqp.js.br +0 -0
  268. package/client/assets/PipHost-CbNFsfqp.js.gz +0 -0
  269. package/client/assets/ProjectInfo-Bf5z4Xsv.js.br +0 -0
  270. package/client/assets/ProjectInfo-Bf5z4Xsv.js.gz +0 -0
  271. package/client/assets/ProtectRoute-CCHzyy0I.js +0 -2
  272. package/client/assets/ProtectRoute-CCHzyy0I.js.br +0 -0
  273. package/client/assets/ProtectRoute-CCHzyy0I.js.gz +0 -0
  274. package/client/assets/ProtectedCuesheet-COI1W_V3.js +0 -2
  275. package/client/assets/ProtectedCuesheet-COI1W_V3.js.br +0 -0
  276. package/client/assets/ProtectedCuesheet-COI1W_V3.js.gz +0 -0
  277. package/client/assets/ProtectedCuesheet-COI1W_V3.js.map +0 -1
  278. package/client/assets/ProtectedEditor-BvTFmv-F.js +0 -3
  279. package/client/assets/ProtectedEditor-BvTFmv-F.js.br +0 -0
  280. package/client/assets/ProtectedEditor-BvTFmv-F.js.gz +0 -0
  281. package/client/assets/ProtectedEditor-BvTFmv-F.js.map +0 -1
  282. package/client/assets/ProtectedEditor-DID9cfOA.css +0 -1
  283. package/client/assets/ProtectedEditor-DID9cfOA.css.br +0 -0
  284. package/client/assets/ProtectedEditor-DID9cfOA.css.gz +0 -0
  285. package/client/assets/RundownExport-C_q3KYN_.js.br +0 -0
  286. package/client/assets/RundownExport-C_q3KYN_.js.gz +0 -0
  287. package/client/assets/RundownExport-C_q3KYN_.js.map +0 -1
  288. package/client/assets/Select-DQwYPDyI.js.br +0 -0
  289. package/client/assets/Select-DQwYPDyI.js.gz +0 -0
  290. package/client/assets/Studio-DzXTmBx4.js.br +0 -0
  291. package/client/assets/Studio-DzXTmBx4.js.gz +0 -0
  292. package/client/assets/StyleEditor-ClMEMaWh.js.br +0 -0
  293. package/client/assets/StyleEditor-ClMEMaWh.js.gz +0 -0
  294. package/client/assets/SuperscriptPeriod-CBiZU34J.js.br +0 -0
  295. package/client/assets/SuperscriptPeriod-CBiZU34J.js.gz +0 -0
  296. package/client/assets/SuperscriptTime-DP1CDlOX.js.br +0 -0
  297. package/client/assets/SuperscriptTime-DP1CDlOX.js.gz +0 -0
  298. package/client/assets/SwatchPicker-Dyxkxf3_.js +0 -2
  299. package/client/assets/SwatchPicker-Dyxkxf3_.js.br +0 -0
  300. package/client/assets/SwatchPicker-Dyxkxf3_.js.gz +0 -0
  301. package/client/assets/TimeElements-pDYJeFbV.js +0 -2
  302. package/client/assets/TimeElements-pDYJeFbV.js.br +0 -0
  303. package/client/assets/TimeElements-pDYJeFbV.js.gz +0 -0
  304. package/client/assets/TimeInput-DTWDnaum.js.br +0 -0
  305. package/client/assets/TimeInput-DTWDnaum.js.gz +0 -0
  306. package/client/assets/TimelinePage-DbLt9rQi.js.br +0 -0
  307. package/client/assets/TimelinePage-DbLt9rQi.js.gz +0 -0
  308. package/client/assets/TimelinePage-DbLt9rQi.js.map +0 -1
  309. package/client/assets/Timer-BfyVKQ8U.js.br +0 -0
  310. package/client/assets/Timer-BfyVKQ8U.js.gz +0 -0
  311. package/client/assets/TimerControlExport-BJfhJc07.js +0 -2
  312. package/client/assets/TimerControlExport-BJfhJc07.js.br +0 -0
  313. package/client/assets/TimerControlExport-BJfhJc07.js.gz +0 -0
  314. package/client/assets/TimerControlExport-BJfhJc07.js.map +0 -1
  315. package/client/assets/TimerDisplay-Dgmbqf65.js +0 -2
  316. package/client/assets/TimerDisplay-Dgmbqf65.js.br +0 -0
  317. package/client/assets/TimerDisplay-Dgmbqf65.js.gz +0 -0
  318. package/client/assets/TitleCard-MUurHeZ7.js.br +0 -0
  319. package/client/assets/TitleCard-MUurHeZ7.js.gz +0 -0
  320. package/client/assets/Tooltip-DXph8P8p.js.br +0 -0
  321. package/client/assets/Tooltip-DXph8P8p.js.gz +0 -0
  322. package/client/assets/ViewLogo-Ckp7i75x.js.br +0 -0
  323. package/client/assets/ViewLogo-Ckp7i75x.js.gz +0 -0
  324. package/client/assets/ViewParamsEditor-Cxngd15h.js.br +0 -0
  325. package/client/assets/ViewParamsEditor-Cxngd15h.js.gz +0 -0
  326. package/client/assets/editorSettings-D4jfu68W.js.br +0 -0
  327. package/client/assets/editorSettings-D4jfu68W.js.gz +0 -0
  328. package/client/assets/getProgress-B9UANc25.js.br +0 -0
  329. package/client/assets/getProgress-B9UANc25.js.gz +0 -0
  330. package/client/assets/index-2lQ-45a9.js +0 -3
  331. package/client/assets/index-2lQ-45a9.js.br +0 -0
  332. package/client/assets/index-2lQ-45a9.js.gz +0 -0
  333. package/client/assets/index-2lQ-45a9.js.map +0 -1
  334. package/client/assets/offset-DAyBfv5b.js.br +0 -4
  335. package/client/assets/offset-DAyBfv5b.js.gz +0 -0
  336. package/client/assets/parseUserTime-WkVNjkkE.js +0 -2
  337. package/client/assets/parseUserTime-WkVNjkkE.js.br +0 -0
  338. package/client/assets/parseUserTime-WkVNjkkE.js.gz +0 -0
  339. package/client/assets/playbackstate-znZk3SSJ.js.br +0 -0
  340. package/client/assets/playbackstate-znZk3SSJ.js.gz +0 -0
  341. package/client/assets/presentation.utils-CjjYs5II.js.br +0 -0
  342. package/client/assets/presentation.utils-CjjYs5II.js.gz +0 -0
  343. package/client/assets/rundownUtils-BTQ3EeqN.js.br +0 -0
  344. package/client/assets/rundownUtils-BTQ3EeqN.js.gz +0 -0
  345. package/client/assets/timer.utils-B-Ui91P7.js +0 -2
  346. package/client/assets/timer.utils-B-Ui91P7.js.br +0 -0
  347. package/client/assets/timer.utils-B-Ui91P7.js.gz +0 -0
  348. package/client/assets/useCustomFields-zr9SUl5o.js +0 -2
  349. package/client/assets/useCustomFields-zr9SUl5o.js.br +0 -0
  350. package/client/assets/useCustomFields-zr9SUl5o.js.gz +0 -0
  351. package/client/assets/useEventSelection-B9mbj1cM.js.br +0 -0
  352. package/client/assets/useEventSelection-B9mbj1cM.js.gz +0 -0
  353. package/client/assets/useProjectData-DD_BQ9eJ.js.br +0 -0
  354. package/client/assets/useProjectData-DD_BQ9eJ.js.gz +0 -0
  355. package/client/assets/useReport-DozG5uz5.js.br +0 -0
  356. package/client/assets/useReport-DozG5uz5.js.gz +0 -0
  357. package/client/assets/useRundown-D6vokFHi.js.br +0 -0
  358. package/client/assets/useRundown-D6vokFHi.js.gz +0 -0
  359. package/client/assets/useRundown-D6vokFHi.js.map +0 -1
  360. package/client/assets/useSelectAndRevealEntry-Dd6MpVHe.js.br +0 -0
  361. package/client/assets/useSelectAndRevealEntry-Dd6MpVHe.js.gz +0 -0
  362. package/client/assets/useWindowTitle-bg-fLPOk.js.br +0 -0
  363. package/client/assets/useWindowTitle-bg-fLPOk.js.gz +0 -0
  364. package/client/assets/validateEvent-BUgLWn7x.js.br +0 -0
  365. package/client/assets/validateEvent-BUgLWn7x.js.gz +0 -0
  366. package/client/assets/vendor-CKDP5hij.js.br +0 -0
  367. package/client/assets/vendor-CKDP5hij.js.gz +0 -0
  368. package/client/assets/viewLoader.utils-Bn5zu5sz.js.br +0 -0
  369. package/client/assets/viewLoader.utils-Bn5zu5sz.js.gz +0 -0
  370. package/client/assets/viewUtils-DQFwr7hm.js.br +0 -0
  371. package/client/assets/viewUtils-DQFwr7hm.js.gz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ViewParamsEditor-Cxngd15h.js","sources":["../../src/common/components/view-params-editor/viewParams.utils.ts","../../src/common/components/view-params-editor/ViewParamsPresets.tsx","../../src/common/components/view-params-editor/constants.ts","../../src/common/components/view-params-editor/InlineColourPicker.tsx","../../src/common/components/view-params-editor/ParamInput.tsx","../../src/common/components/view-params-editor/ViewParamsSection.tsx","../../src/common/components/view-params-editor/ViewParamsEditor.tsx"],"sourcesContent":["import type { CustomFields, ProjectData } from 'ontime-types';\n\nimport type { SelectOption } from '../select/Select';\n\nimport type { MultiselectOption, ViewOption } from './viewParams.types';\n\n/**\n * Creates a list of custom fields for a select\n * Filters out image type custom fields\n */\nexport function makeOptionsFromCustomFields(\n customFields: CustomFields,\n additionalOptions: SelectOption[] = [],\n filterImageType = true,\n): SelectOption[] {\n const options: SelectOption[] = [...additionalOptions];\n\n // Add custom fields first\n for (const [key, value] of Object.entries(customFields)) {\n if (filterImageType && value.type === 'image') {\n continue;\n }\n\n options.push({\n value: `custom-${key}`,\n label: `Custom: ${value.label}`,\n });\n }\n\n return options;\n}\n\n/**\n * Creates data for a multiselect component from custom fields\n * Filters out image type custom fields\n */\nexport function makeCustomFieldSelectOptions(customFields: CustomFields, filterImageType = true): MultiselectOption[] {\n const options: MultiselectOption[] = [];\n\n // Add custom fields first\n for (const [key, value] of Object.entries(customFields)) {\n if (filterImageType && value.type === 'image') {\n continue;\n }\n\n options.push({\n value: key,\n label: value.label,\n colour: value.colour,\n });\n }\n\n return options;\n}\n\n/**\n * Creates data for a select element that displays project custom data\n */\nexport function makeProjectDataOptions(\n projectData: ProjectData,\n additionalOptions: SelectOption[] = [],\n): SelectOption[] {\n const generatedOptions = projectData.custom.map((entry, index) => {\n return {\n value: `${index}-${entry.title}`,\n label: entry.title,\n };\n });\n\n return [...additionalOptions, ...generatedOptions];\n}\n\ntype ViewParamsObj = { [key: string]: string | FormDataEntryValue };\n\n/**\n * Utility remove the # character from a hex string\n */\nfunction sanitiseColour(colour: string) {\n if (colour.startsWith('#')) {\n return colour.substring(1);\n }\n return colour;\n}\n\ntype FieldMetadata = {\n defaultValues: Record<string, string>;\n colorFields: Set<string>;\n booleanFields: Set<string>;\n isPersistedField: Set<string>;\n persistedValues: Record<string, string[]>;\n};\n\n/**\n * Utility collects metadata about fields from view options\n * - where are the default values\n * - which fields are colours\n * - which fields are persisted\n */\nfunction collectFieldMetadata(paramFields: ViewOption[]): FieldMetadata {\n const metadata: FieldMetadata = {\n defaultValues: {},\n colorFields: new Set(),\n booleanFields: new Set(),\n isPersistedField: new Set(),\n persistedValues: {},\n };\n\n paramFields.forEach((section) => {\n section.options.forEach((option) => {\n if (option.type === 'persist') {\n metadata.isPersistedField.add(option.id);\n if (option.values) {\n metadata.persistedValues[option.id] = option.values;\n }\n } else {\n metadata.defaultValues[option.id] = String(option.defaultValue);\n }\n\n if (option.type === 'colour') {\n metadata.colorFields.add(option.id);\n } else if (option.type === 'boolean') {\n metadata.booleanFields.add(option.id);\n }\n });\n });\n\n return metadata;\n}\n\n/**\n * Makes a new URLSearchParams object from the given params object\n * @param paramsObj - The object containing parameters to be converted\n * @param paramFields - The view options that define the parameters\n * @returns A new URLSearchParams object with the parameters\n */\nexport function getURLSearchParamsFromObj(paramsObj: ViewParamsObj, paramFields: ViewOption[]) {\n const newSearchParams = new URLSearchParams();\n const addedPairs = new Set<string>();\n const metadata = collectFieldMetadata(paramFields);\n\n // Utility function to safely add params without duplicates\n const addUniqueParam = (id: string, value: string) => {\n const pair = `${id}:${value}`;\n if (!addedPairs.has(pair)) {\n addedPairs.add(pair);\n newSearchParams.append(id, value);\n }\n };\n\n // First add all persisted values\n Object.entries(metadata.persistedValues).forEach(([id, values]) => {\n values.forEach((value) => {\n if (value) {\n addUniqueParam(id, value);\n }\n });\n });\n\n // Then process user-provided values\n Object.entries(paramsObj).forEach(([id, value]) => {\n if (typeof value === 'string' && value.length) {\n // For persisted fields, clear existing values before adding new ones\n if (metadata.isPersistedField.has(id)) {\n // Clear tracking of previous values for this field\n Array.from(addedPairs).forEach((pair) => {\n if (pair.startsWith(`${id}:`)) {\n addedPairs.delete(pair);\n }\n });\n newSearchParams.delete(id);\n }\n\n // Process and add new values\n value.split(',').forEach((v) => {\n // some field types need extra processing\n const processedValue = (() => {\n if (metadata.colorFields.has(id)) {\n return sanitiseColour(v);\n }\n if (metadata.booleanFields.has(id)) {\n return v === 'on' ? 'true' : 'false';\n }\n return v;\n })();\n if (metadata.isPersistedField.has(id) || metadata.defaultValues[id] !== processedValue) {\n addUniqueParam(id, processedValue);\n }\n });\n }\n });\n\n return newSearchParams;\n}\n\n/**\n * Extracts search params that are not managed by the view params editor\n * @param currentParams - The current URL search params\n * @param paramFields - The view options that define the managed parameters\n * @returns A new URLSearchParams object with preserved params\n */\nexport function getPreservedSearchParams(currentParams: URLSearchParams, paramFields: ViewOption[]) {\n const managedParamIds = new Set<string>();\n paramFields.forEach((section) => {\n section.options.forEach((option) => {\n managedParamIds.add(option.id);\n });\n });\n\n const preserved = new URLSearchParams();\n currentParams.forEach((value, key) => {\n if (!managedParamIds.has(key)) {\n preserved.append(key, value);\n }\n });\n return preserved;\n}\n","import { useSearchParams } from 'react-router';\nimport { OntimeView, URLPreset } from 'ontime-types';\n\nimport { useViewUrlPresets } from '../../hooks-query/useUrlPresets';\nimport { cx } from '../../utils/styleUtils';\nimport Button from '../buttons/Button';\n\nimport style from './ViewParamsPresets.module.scss';\n\n/**\n * Shows a list of presets for the current view\n */\nexport function ViewParamsPresets({ target }: { target: OntimeView }) {\n const { viewPresets } = useViewUrlPresets(target);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const handleRecall = (preset: URLPreset) => {\n const newSearch = new URLSearchParams(preset.search);\n newSearch.set('alias', preset.alias);\n setSearchParams(newSearch);\n };\n\n if (viewPresets.length === 0) {\n return null;\n }\n\n return (\n <div className={style.presetSection}>\n {viewPresets.map((preset) => {\n const active = searchParams.get('alias') === preset.alias;\n return (\n <div key={preset.alias} className={cx([style.preset, active && style.active])}>\n <div>{preset.alias}</div>\n <Button\n variant={active ? 'ghosted' : 'subtle-white'}\n onClick={() => handleRecall(preset)}\n disabled={active}\n className={style.presetActions}\n >\n {active ? 'Applied' : 'Apply'}\n </Button>\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * Gathers possible titles for view options\n */\nexport enum OptionTitle {\n ClockOptions = 'Clock Options',\n TimerOptions = 'Timer Options',\n DataSources = 'Data sources',\n ElementVisibility = 'Element visibility',\n BehaviourOptions = 'View behaviour',\n StyleOverride = 'View style override',\n Animation = 'View animation',\n Schedule = 'Schedule options',\n\n /** rendered as hidden inputs */\n Hidden = 'Hidden options',\n}\n","import { useEffect, useState } from 'react';\n\nimport SwatchPicker from '../input/colour-input/SwatchPicker';\n\nimport style from './InlineColourPicker.module.scss';\n\ninterface InlineColourPickerProps {\n name: string;\n value: string;\n}\n\nconst ensureHex = (value: string) => {\n if (!value.startsWith('#')) {\n return `#${value}`;\n }\n return value;\n};\n\nexport default function InlineColourPicker({ name, value }: InlineColourPickerProps) {\n const [colour, setColour] = useState(() => ensureHex(value));\n\n useEffect(() => {\n setColour(ensureHex(value));\n }, [value]);\n\n return (\n <div className={style.inline}>\n <SwatchPicker color={colour} onChange={setColour} alwaysDisplayColor />\n <span>{colour}</span>\n <input type='hidden' name={name} value={colour} />\n </div>\n );\n}\n","import { ComponentProps, useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router';\n\nimport { isStringBoolean } from '../../../views/common/viewUtils';\nimport Checkbox from '../checkbox/Checkbox';\nimport Input from '../input/input/Input';\nimport Select, { SelectOption } from '../select/Select';\nimport Switch from '../switch/Switch';\n\nimport InlineColourPicker from './InlineColourPicker';\nimport { ParamField } from './viewParams.types';\n\nimport style from './ParamInput.module.scss';\n\ninterface ParamInputProps {\n paramField: ParamField;\n}\n\nexport default function ParamInput({ paramField }: ParamInputProps) {\n const [searchParams] = useSearchParams();\n const { id, type, defaultValue } = paramField;\n\n if (type === 'persist') {\n if (!paramField.values || !paramField.values.length) {\n return null;\n }\n return <input hidden name={id} readOnly value={paramField.values.join(',')} />;\n }\n\n if (type === 'option') {\n const optionFromParams = searchParams.get(id);\n const defaultOptionValue = optionFromParams || defaultValue;\n\n if (paramField.values.length === 0) {\n return <span className={style.empty}>No options available</span>;\n }\n\n return <ControlledSelect id={id} initialValue={defaultOptionValue} options={paramField.values} />;\n }\n\n if (type === 'multi-option') {\n const optionFromParams = searchParams.getAll(id);\n\n return (\n <MultiOption\n paramField={paramField}\n options={optionFromParams.length ? optionFromParams : paramField.defaultValue ?? ['']}\n />\n );\n }\n\n if (type === 'boolean') {\n return <ControlledSwitch id={id} initialValue={isStringBoolean(searchParams.get(id)) ?? defaultValue} />;\n }\n\n if (type === 'number') {\n const { placeholder } = paramField;\n const defaultNumberValue = searchParams.get(id) ?? defaultValue;\n\n return (\n <Input\n height='large'\n type='number'\n step='any'\n name={id}\n defaultValue={defaultNumberValue}\n placeholder={placeholder}\n />\n );\n }\n\n if (type === 'colour') {\n return <InlineColourPicker name={id} value={searchParams.get(id) ?? defaultValue} />;\n }\n\n const defaultStringValue = searchParams.get(id) ?? defaultValue ?? '';\n const { placeholder } = paramField;\n\n return <ControlledInput id={id} initialValue={defaultStringValue} placeholder={placeholder} />;\n}\n\ninterface EditFormMultiOptionProps {\n paramField: ParamField & { type: 'multi-option' };\n options: string[];\n}\n\nfunction MultiOption({ paramField, options }: EditFormMultiOptionProps) {\n const { id, values } = paramField;\n const [paramState, setParamState] = useState<string[]>(options);\n\n // synchronise options\n useEffect(() => {\n setParamState(options);\n }, [options]);\n\n const toggleValue = (value: string, checked: boolean) => {\n if (checked) {\n setParamState((prev) => [...prev, value]);\n } else {\n setParamState((prev) => prev.filter((v) => v !== value));\n }\n };\n\n if (values.length === 0) {\n return <span className={style.empty}>No options available</span>;\n }\n\n return (\n <>\n <input name={id} hidden readOnly value={paramState.join(',')} />\n <div className={style.inline}>\n {values.map((option) => {\n return (\n <label\n key={option.value}\n className={style.toggleSelect}\n style={{\n '--user-bg': option.colour,\n }}\n >\n <Checkbox\n checked={paramState.includes(option.value)}\n onCheckedChange={(checked) => toggleValue(option.value, checked as boolean)}\n />\n {option.label}\n </label>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface ControlledSwitchProps {\n id: string;\n initialValue: boolean;\n}\nfunction ControlledSwitch({ id, initialValue }: ControlledSwitchProps) {\n const [checked, setChecked] = useState(initialValue);\n\n // synchronise checked state\n useEffect(() => {\n setChecked(initialValue);\n }, [initialValue]);\n\n return <Switch size='large' name={id} checked={checked} onCheckedChange={setChecked} />;\n}\n\ninterface ControlledSelectProps {\n id: string;\n initialValue?: string;\n options: SelectOption[];\n}\nfunction ControlledSelect({ id, initialValue, options }: ControlledSelectProps) {\n const [selected, setSelected] = useState(initialValue);\n\n // synchronise selected state\n useEffect(() => {\n setSelected(initialValue);\n }, [initialValue]);\n\n return (\n <Select\n size='large'\n name={id}\n options={options}\n value={selected}\n onValueChange={(value) => {\n if (value === null) return;\n setSelected(value);\n }}\n />\n );\n}\n\ninterface ControlledInputProps<T extends number | string> extends ComponentProps<typeof Input> {\n id: string;\n initialValue: T;\n}\nfunction ControlledInput<T extends number | string>({ id, initialValue, ...inputProps }: ControlledInputProps<T>) {\n const [value, setValue] = useState(initialValue);\n\n // synchronise selected state\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n return (\n <Input\n height='large'\n name={id}\n value={value}\n onChange={(event) => setValue(event.target.value as T)}\n {...inputProps}\n />\n );\n}\n","import { IoChevronDown } from 'react-icons/io5';\nimport { useLocalStorage } from '@mantine/hooks';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport { OptionTitle } from './constants';\nimport ParamInput from './ParamInput';\nimport { type ParamField } from './viewParams.types';\n\nimport style from './ViewParamsSection.module.scss';\n\ninterface ViewParamsSectionProps {\n title: string;\n collapsible?: boolean;\n options: ParamField[];\n}\n\nexport default function ViewParamsSection({ title, collapsible, options }: ViewParamsSectionProps) {\n const [collapsed, setCollapsed] = useLocalStorage({ key: `params-${title}`, defaultValue: false });\n\n const handleCollapse = () => {\n if (collapsible) {\n setCollapsed((prev) => !prev);\n }\n };\n\n return (\n <section className={style.section}>\n {title === OptionTitle.Hidden ? (\n <HiddenContents options={options} />\n ) : (\n <>\n <div className={cx([style.sectionHeader, collapsible && style.collapsible])} onClick={handleCollapse}>\n {title}\n {collapsible && <IoChevronDown className={cx([collapsed ? style.closed : style.open])} />}\n </div>\n <SectionContents options={options} collapsed={collapsed} />\n </>\n )}\n </section>\n );\n}\n\ninterface SectionContentsProps {\n options: ParamField[];\n collapsed: boolean;\n}\n\nfunction SectionContents({ options, collapsed }: SectionContentsProps) {\n return (\n <>\n {options.map((option) => {\n return (\n <label key={option.title} className={cx([style.label, collapsed && style.hidden])}>\n <span className={style.title}>{option.title}</span>\n <span className={style.description}>{option.description}</span>\n <ParamInput paramField={option} />\n </label>\n );\n })}\n </>\n );\n}\n\nfunction HiddenContents({ options }: { options: ParamField[] }) {\n return (\n <>\n {options.map((option, index) => {\n return <ParamInput key={option.title + index} paramField={option} />;\n })}\n </>\n );\n}\n","import { FormEvent, memo } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { useSearchParams } from 'react-router';\nimport { Dialog } from '@base-ui/react/dialog';\nimport { OntimeView } from 'ontime-types';\n\nimport { useIsSmallScreen } from '../../hooks/useIsSmallScreen';\nimport useViewSettings from '../../hooks-query/useViewSettings';\nimport Button from '../buttons/Button';\nimport IconButton from '../buttons/IconButton';\nimport Info from '../info/Info';\n\nimport { ViewOption } from './viewParams.types';\nimport { getPreservedSearchParams, getURLSearchParamsFromObj } from './viewParams.utils';\nimport { useViewParamsEditorStore } from './viewParamsEditor.store';\nimport { ViewParamsPresets } from './ViewParamsPresets';\nimport ViewParamsSection from './ViewParamsSection';\n\nimport style from './ViewParamsEditor.module.scss';\n\ninterface EditFormDrawerProps {\n target: OntimeView;\n viewOptions: ViewOption[];\n}\n\nexport default memo(ViewParamsEditor);\nfunction ViewParamsEditor({ target, viewOptions }: EditFormDrawerProps) {\n const [searchParams, setSearchParams] = useSearchParams();\n const { data: viewSettings } = useViewSettings();\n const { isOpen, close } = useViewParamsEditorStore();\n const isSmallScreen = useIsSmallScreen();\n\n const getPreservedParams = () => getPreservedSearchParams(searchParams, viewOptions);\n\n const handleClose = () => {\n close();\n };\n\n const resetParams = () => {\n setSearchParams(getPreservedParams());\n };\n\n const onParamsFormSubmit = (formEvent: FormEvent<HTMLFormElement>) => {\n formEvent.preventDefault();\n\n const newParamsObject = Object.fromEntries(new FormData(formEvent.currentTarget));\n const newSearchParams = getURLSearchParamsFromObj(newParamsObject, viewOptions);\n const preservedParams = getPreservedParams();\n preservedParams.forEach((value, key) => {\n newSearchParams.append(key, value);\n });\n setSearchParams(newSearchParams);\n\n if (isSmallScreen) {\n close();\n }\n };\n\n return (\n <Dialog.Root\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) {\n handleClose();\n }\n }}\n >\n <Dialog.Portal>\n <Dialog.Backdrop className={style.backdrop} />\n <Dialog.Popup className={style.drawer}>\n <div className={style.header}>\n <Dialog.Title>Customise</Dialog.Title>\n <IconButton variant='subtle-white' size='large' data-testid='close-view-params' onClick={handleClose}>\n <IoClose />\n </IconButton>\n </div>\n <div className={style.body}>\n {viewSettings.overrideStyles && (\n <Info className={style.info}>This view style is being modified by a custom CSS file.</Info>\n )}\n <ViewParamsPresets target={target} />\n <form id='edit-params-form' onSubmit={onParamsFormSubmit} className={style.sectionList}>\n {viewOptions.map((section) => (\n <ViewParamsSection\n key={section.title}\n title={section.title}\n collapsible={section.collapsible}\n options={section.options}\n />\n ))}\n </form>\n </div>\n <div className={style.footer}>\n <Button variant='subtle' size='large' onClick={resetParams} type='reset'>\n Reset to default\n </Button>\n <Button\n variant='primary'\n size='large'\n form='edit-params-form'\n type='submit'\n data-testid='apply-view-params'\n >\n Apply\n </Button>\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n"],"names":["makeOptionsFromCustomFields","customFields","additionalOptions","filterImageType","options","key","value","Object","entries","type","push","label","makeCustomFieldSelectOptions","colour","makeProjectDataOptions","projectData","generatedOptions","custom","map","entry","index","title","sanitiseColour","startsWith","substring","collectFieldMetadata","paramFields","metadata","defaultValues","colorFields","Set","booleanFields","isPersistedField","persistedValues","forEach","section","option","add","id","values","String","defaultValue","getURLSearchParamsFromObj","paramsObj","newSearchParams","URLSearchParams","addedPairs","addUniqueParam","pair","has","append","length","Array","from","delete","split","v","processedValue","getPreservedSearchParams","currentParams","managedParamIds","preserved","ViewParamsPresets","target","viewPresets","useViewUrlPresets","searchParams","setSearchParams","useSearchParams","handleRecall","preset","newSearch","search","set","alias","style","presetSection","active","get","jsxs","cx","jsx","Button","presetActions","OptionTitle","ClockOptions","TimerOptions","DataSources","ElementVisibility","BehaviourOptions","StyleOverride","Animation","Schedule","Hidden","ensureHex","InlineColourPicker","name","setColour","useState","useEffect","inline","SwatchPicker","ParamInput","paramField","join","defaultOptionValue","empty","ControlledSelect","optionFromParams","getAll","MultiOption","ControlledSwitch","isStringBoolean","placeholder","defaultNumberValue","Input","defaultStringValue","ControlledInput","paramState","setParamState","toggleValue","checked","prev","filter","Fragment","toggleSelect","Checkbox","includes","initialValue","setChecked","Switch","selected","setSelected","Select","inputProps","setValue","event","ViewParamsSection","collapsible","collapsed","setCollapsed","useLocalStorage","handleCollapse","HiddenContents","sectionHeader","IoChevronDown","closed","open","SectionContents","hidden","description","memo","ViewParamsEditor","viewOptions","data","viewSettings","useViewSettings","isOpen","close","useViewParamsEditorStore","isSmallScreen","useIsSmallScreen","getPreservedParams","handleClose","resetParams","onParamsFormSubmit","formEvent","preventDefault","newParamsObject","fromEntries","FormData","currentTarget","Dialog.Root","Dialog.Portal","Dialog.Backdrop","backdrop","Dialog.Popup","drawer","header","Dialog.Title","IconButton","IoClose","body","overrideStyles","Info","info","sectionList","footer"],"mappings":"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"}
1
+ {"version":3,"file":"ViewParamsEditor-DeMdkxxC.js","sources":["../../src/common/components/view-params-editor/viewParams.utils.ts","../../src/common/components/view-params-editor/ViewParamsPresets.tsx","../../src/common/components/view-params-editor/constants.ts","../../src/common/components/view-params-editor/InlineColourPicker.tsx","../../src/common/components/view-params-editor/ParamInput.tsx","../../src/common/components/view-params-editor/ViewParamsSection.tsx","../../src/common/components/view-params-editor/ViewParamsEditor.tsx"],"sourcesContent":["import type { CustomFields, ProjectData } from 'ontime-types';\n\nimport type { SelectOption } from '../select/Select';\n\nimport type { MultiselectOption, ViewOption } from './viewParams.types';\n\n/**\n * Creates a list of custom fields for a select\n * Filters out image type custom fields\n */\nexport function makeOptionsFromCustomFields(\n customFields: CustomFields,\n additionalOptions: SelectOption[] = [],\n filterImageType = true,\n): SelectOption[] {\n const options: SelectOption[] = [...additionalOptions];\n\n // Add custom fields first\n for (const [key, value] of Object.entries(customFields)) {\n if (filterImageType && value.type === 'image') {\n continue;\n }\n\n options.push({\n value: `custom-${key}`,\n label: `Custom: ${value.label}`,\n });\n }\n\n return options;\n}\n\n/**\n * Creates data for a multiselect component from custom fields\n * Filters out image type custom fields\n */\nexport function makeCustomFieldSelectOptions(customFields: CustomFields, filterImageType = true): MultiselectOption[] {\n const options: MultiselectOption[] = [];\n\n // Add custom fields first\n for (const [key, value] of Object.entries(customFields)) {\n if (filterImageType && value.type === 'image') {\n continue;\n }\n\n options.push({\n value: key,\n label: value.label,\n colour: value.colour,\n });\n }\n\n return options;\n}\n\n/**\n * Creates data for a select element that displays project custom data\n */\nexport function makeProjectDataOptions(\n projectData: ProjectData,\n additionalOptions: SelectOption[] = [],\n): SelectOption[] {\n const generatedOptions = projectData.custom.map((entry, index) => {\n return {\n value: `${index}-${entry.title}`,\n label: entry.title,\n };\n });\n\n return [...additionalOptions, ...generatedOptions];\n}\n\ntype ViewParamsObj = { [key: string]: string | FormDataEntryValue };\n\n/**\n * Utility remove the # character from a hex string\n */\nfunction sanitiseColour(colour: string) {\n if (colour.startsWith('#')) {\n return colour.substring(1);\n }\n return colour;\n}\n\ntype FieldMetadata = {\n defaultValues: Record<string, string>;\n colorFields: Set<string>;\n booleanFields: Set<string>;\n isPersistedField: Set<string>;\n persistedValues: Record<string, string[]>;\n};\n\n/**\n * Utility collects metadata about fields from view options\n * - where are the default values\n * - which fields are colours\n * - which fields are persisted\n */\nfunction collectFieldMetadata(paramFields: ViewOption[]): FieldMetadata {\n const metadata: FieldMetadata = {\n defaultValues: {},\n colorFields: new Set(),\n booleanFields: new Set(),\n isPersistedField: new Set(),\n persistedValues: {},\n };\n\n paramFields.forEach((section) => {\n section.options.forEach((option) => {\n if (option.type === 'persist') {\n metadata.isPersistedField.add(option.id);\n if (option.values) {\n metadata.persistedValues[option.id] = option.values;\n }\n } else {\n metadata.defaultValues[option.id] = String(option.defaultValue);\n }\n\n if (option.type === 'colour') {\n metadata.colorFields.add(option.id);\n } else if (option.type === 'boolean') {\n metadata.booleanFields.add(option.id);\n }\n });\n });\n\n return metadata;\n}\n\n/**\n * Makes a new URLSearchParams object from the given params object\n * @param paramsObj - The object containing parameters to be converted\n * @param paramFields - The view options that define the parameters\n * @returns A new URLSearchParams object with the parameters\n */\nexport function getURLSearchParamsFromObj(paramsObj: ViewParamsObj, paramFields: ViewOption[]) {\n const newSearchParams = new URLSearchParams();\n const addedPairs = new Set<string>();\n const metadata = collectFieldMetadata(paramFields);\n\n // Utility function to safely add params without duplicates\n const addUniqueParam = (id: string, value: string) => {\n const pair = `${id}:${value}`;\n if (!addedPairs.has(pair)) {\n addedPairs.add(pair);\n newSearchParams.append(id, value);\n }\n };\n\n // First add all persisted values\n Object.entries(metadata.persistedValues).forEach(([id, values]) => {\n values.forEach((value) => {\n if (value) {\n addUniqueParam(id, value);\n }\n });\n });\n\n // Then process user-provided values\n Object.entries(paramsObj).forEach(([id, value]) => {\n if (typeof value === 'string' && value.length) {\n // For persisted fields, clear existing values before adding new ones\n if (metadata.isPersistedField.has(id)) {\n // Clear tracking of previous values for this field\n Array.from(addedPairs).forEach((pair) => {\n if (pair.startsWith(`${id}:`)) {\n addedPairs.delete(pair);\n }\n });\n newSearchParams.delete(id);\n }\n\n // Process and add new values\n value.split(',').forEach((v) => {\n // some field types need extra processing\n const processedValue = (() => {\n if (metadata.colorFields.has(id)) {\n return sanitiseColour(v);\n }\n if (metadata.booleanFields.has(id)) {\n return v === 'on' ? 'true' : 'false';\n }\n return v;\n })();\n if (metadata.isPersistedField.has(id) || metadata.defaultValues[id] !== processedValue) {\n addUniqueParam(id, processedValue);\n }\n });\n }\n });\n\n return newSearchParams;\n}\n\n/**\n * Extracts search params that are not managed by the view params editor\n * @param currentParams - The current URL search params\n * @param paramFields - The view options that define the managed parameters\n * @returns A new URLSearchParams object with preserved params\n */\nexport function getPreservedSearchParams(currentParams: URLSearchParams, paramFields: ViewOption[]) {\n const managedParamIds = new Set<string>();\n paramFields.forEach((section) => {\n section.options.forEach((option) => {\n managedParamIds.add(option.id);\n });\n });\n\n const preserved = new URLSearchParams();\n currentParams.forEach((value, key) => {\n if (!managedParamIds.has(key)) {\n preserved.append(key, value);\n }\n });\n return preserved;\n}\n","import { useSearchParams } from 'react-router';\nimport { OntimeView, URLPreset } from 'ontime-types';\n\nimport { useViewUrlPresets } from '../../hooks-query/useUrlPresets';\nimport { cx } from '../../utils/styleUtils';\nimport Button from '../buttons/Button';\n\nimport style from './ViewParamsPresets.module.scss';\n\n/**\n * Shows a list of presets for the current view\n */\nexport function ViewParamsPresets({ target }: { target: OntimeView }) {\n const { viewPresets } = useViewUrlPresets(target);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const handleRecall = (preset: URLPreset) => {\n const newSearch = new URLSearchParams(preset.search);\n newSearch.set('alias', preset.alias);\n setSearchParams(newSearch);\n };\n\n if (viewPresets.length === 0) {\n return null;\n }\n\n return (\n <div className={style.presetSection}>\n {viewPresets.map((preset) => {\n const active = searchParams.get('alias') === preset.alias;\n return (\n <div key={preset.alias} className={cx([style.preset, active && style.active])}>\n <div>{preset.alias}</div>\n <Button\n variant={active ? 'ghosted' : 'subtle-white'}\n onClick={() => handleRecall(preset)}\n disabled={active}\n className={style.presetActions}\n >\n {active ? 'Applied' : 'Apply'}\n </Button>\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * Gathers possible titles for view options\n */\nexport enum OptionTitle {\n ClockOptions = 'Clock Options',\n TimerOptions = 'Timer Options',\n DataSources = 'Data sources',\n ElementVisibility = 'Element visibility',\n BehaviourOptions = 'View behaviour',\n StyleOverride = 'View style override',\n Animation = 'View animation',\n Schedule = 'Schedule options',\n\n /** rendered as hidden inputs */\n Hidden = 'Hidden options',\n}\n","import { useEffect, useState } from 'react';\n\nimport SwatchPicker from '../input/colour-input/SwatchPicker';\n\nimport style from './InlineColourPicker.module.scss';\n\ninterface InlineColourPickerProps {\n name: string;\n value: string;\n}\n\nconst ensureHex = (value: string) => {\n if (!value.startsWith('#')) {\n return `#${value}`;\n }\n return value;\n};\n\nexport default function InlineColourPicker({ name, value }: InlineColourPickerProps) {\n const [colour, setColour] = useState(() => ensureHex(value));\n\n useEffect(() => {\n setColour(ensureHex(value));\n }, [value]);\n\n return (\n <div className={style.inline}>\n <SwatchPicker color={colour} onChange={setColour} alwaysDisplayColor />\n <span>{colour}</span>\n <input type='hidden' name={name} value={colour} />\n </div>\n );\n}\n","import { ComponentProps, useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router';\n\nimport { isStringBoolean } from '../../../views/common/viewUtils';\nimport Checkbox from '../checkbox/Checkbox';\nimport Input from '../input/input/Input';\nimport Select, { SelectOption } from '../select/Select';\nimport Switch from '../switch/Switch';\n\nimport InlineColourPicker from './InlineColourPicker';\nimport { ParamField } from './viewParams.types';\n\nimport style from './ParamInput.module.scss';\n\ninterface ParamInputProps {\n paramField: ParamField;\n}\n\nexport default function ParamInput({ paramField }: ParamInputProps) {\n const [searchParams] = useSearchParams();\n const { id, type, defaultValue } = paramField;\n\n if (type === 'persist') {\n if (!paramField.values || !paramField.values.length) {\n return null;\n }\n return <input hidden name={id} readOnly value={paramField.values.join(',')} />;\n }\n\n if (type === 'option') {\n const optionFromParams = searchParams.get(id);\n const defaultOptionValue = optionFromParams || defaultValue;\n\n if (paramField.values.length === 0) {\n return <span className={style.empty}>No options available</span>;\n }\n\n return <ControlledSelect id={id} initialValue={defaultOptionValue} options={paramField.values} />;\n }\n\n if (type === 'multi-option') {\n const optionFromParams = searchParams.getAll(id);\n\n return (\n <MultiOption\n paramField={paramField}\n options={optionFromParams.length ? optionFromParams : paramField.defaultValue ?? ['']}\n />\n );\n }\n\n if (type === 'boolean') {\n return <ControlledSwitch id={id} initialValue={isStringBoolean(searchParams.get(id)) ?? defaultValue} />;\n }\n\n if (type === 'number') {\n const { placeholder } = paramField;\n const defaultNumberValue = searchParams.get(id) ?? defaultValue;\n\n return (\n <Input\n height='large'\n type='number'\n step='any'\n name={id}\n defaultValue={defaultNumberValue}\n placeholder={placeholder}\n />\n );\n }\n\n if (type === 'colour') {\n return <InlineColourPicker name={id} value={searchParams.get(id) ?? defaultValue} />;\n }\n\n const defaultStringValue = searchParams.get(id) ?? defaultValue ?? '';\n const { placeholder } = paramField;\n\n return <ControlledInput id={id} initialValue={defaultStringValue} placeholder={placeholder} />;\n}\n\ninterface EditFormMultiOptionProps {\n paramField: ParamField & { type: 'multi-option' };\n options: string[];\n}\n\nfunction MultiOption({ paramField, options }: EditFormMultiOptionProps) {\n const { id, values } = paramField;\n const [paramState, setParamState] = useState<string[]>(options);\n\n // synchronise options\n useEffect(() => {\n setParamState(options);\n }, [options]);\n\n const toggleValue = (value: string, checked: boolean) => {\n if (checked) {\n setParamState((prev) => [...prev, value]);\n } else {\n setParamState((prev) => prev.filter((v) => v !== value));\n }\n };\n\n if (values.length === 0) {\n return <span className={style.empty}>No options available</span>;\n }\n\n return (\n <>\n <input name={id} hidden readOnly value={paramState.join(',')} />\n <div className={style.inline}>\n {values.map((option) => {\n return (\n <label\n key={option.value}\n className={style.toggleSelect}\n style={{\n '--user-bg': option.colour,\n }}\n >\n <Checkbox\n checked={paramState.includes(option.value)}\n onCheckedChange={(checked) => toggleValue(option.value, checked as boolean)}\n />\n {option.label}\n </label>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface ControlledSwitchProps {\n id: string;\n initialValue: boolean;\n}\nfunction ControlledSwitch({ id, initialValue }: ControlledSwitchProps) {\n const [checked, setChecked] = useState(initialValue);\n\n // synchronise checked state\n useEffect(() => {\n setChecked(initialValue);\n }, [initialValue]);\n\n return <Switch size='large' name={id} checked={checked} onCheckedChange={setChecked} />;\n}\n\ninterface ControlledSelectProps {\n id: string;\n initialValue?: string;\n options: SelectOption[];\n}\nfunction ControlledSelect({ id, initialValue, options }: ControlledSelectProps) {\n const [selected, setSelected] = useState(initialValue);\n\n // synchronise selected state\n useEffect(() => {\n setSelected(initialValue);\n }, [initialValue]);\n\n return (\n <Select\n size='large'\n name={id}\n options={options}\n value={selected}\n onValueChange={(value) => {\n if (value === null) return;\n setSelected(value);\n }}\n />\n );\n}\n\ninterface ControlledInputProps<T extends number | string> extends ComponentProps<typeof Input> {\n id: string;\n initialValue: T;\n}\nfunction ControlledInput<T extends number | string>({ id, initialValue, ...inputProps }: ControlledInputProps<T>) {\n const [value, setValue] = useState(initialValue);\n\n // synchronise selected state\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n return (\n <Input\n height='large'\n name={id}\n value={value}\n onChange={(event) => setValue(event.target.value as T)}\n {...inputProps}\n />\n );\n}\n","import { IoChevronDown } from 'react-icons/io5';\nimport { useLocalStorage } from '@mantine/hooks';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport { OptionTitle } from './constants';\nimport ParamInput from './ParamInput';\nimport { type ParamField } from './viewParams.types';\n\nimport style from './ViewParamsSection.module.scss';\n\ninterface ViewParamsSectionProps {\n title: string;\n collapsible?: boolean;\n options: ParamField[];\n}\n\nexport default function ViewParamsSection({ title, collapsible, options }: ViewParamsSectionProps) {\n const [collapsed, setCollapsed] = useLocalStorage({ key: `params-${title}`, defaultValue: false });\n\n const handleCollapse = () => {\n if (collapsible) {\n setCollapsed((prev) => !prev);\n }\n };\n\n return (\n <section className={style.section}>\n {title === OptionTitle.Hidden ? (\n <HiddenContents options={options} />\n ) : (\n <>\n <div className={cx([style.sectionHeader, collapsible && style.collapsible])} onClick={handleCollapse}>\n {title}\n {collapsible && <IoChevronDown className={cx([collapsed ? style.closed : style.open])} />}\n </div>\n <SectionContents options={options} collapsed={collapsed} />\n </>\n )}\n </section>\n );\n}\n\ninterface SectionContentsProps {\n options: ParamField[];\n collapsed: boolean;\n}\n\nfunction SectionContents({ options, collapsed }: SectionContentsProps) {\n return (\n <>\n {options.map((option) => {\n return (\n <label key={option.title} className={cx([style.label, collapsed && style.hidden])}>\n <span className={style.title}>{option.title}</span>\n <span className={style.description}>{option.description}</span>\n <ParamInput paramField={option} />\n </label>\n );\n })}\n </>\n );\n}\n\nfunction HiddenContents({ options }: { options: ParamField[] }) {\n return (\n <>\n {options.map((option, index) => {\n return <ParamInput key={option.title + index} paramField={option} />;\n })}\n </>\n );\n}\n","import { FormEvent, memo } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { useSearchParams } from 'react-router';\nimport { Dialog } from '@base-ui/react/dialog';\nimport { OntimeView } from 'ontime-types';\n\nimport { useIsSmallScreen } from '../../hooks/useIsSmallScreen';\nimport useViewSettings from '../../hooks-query/useViewSettings';\nimport Button from '../buttons/Button';\nimport IconButton from '../buttons/IconButton';\nimport Info from '../info/Info';\n\nimport { ViewOption } from './viewParams.types';\nimport { getPreservedSearchParams, getURLSearchParamsFromObj } from './viewParams.utils';\nimport { useViewParamsEditorStore } from './viewParamsEditor.store';\nimport { ViewParamsPresets } from './ViewParamsPresets';\nimport ViewParamsSection from './ViewParamsSection';\n\nimport style from './ViewParamsEditor.module.scss';\n\ninterface EditFormDrawerProps {\n target: OntimeView;\n viewOptions: ViewOption[];\n}\n\nexport default memo(ViewParamsEditor);\nfunction ViewParamsEditor({ target, viewOptions }: EditFormDrawerProps) {\n const [searchParams, setSearchParams] = useSearchParams();\n const { data: viewSettings } = useViewSettings();\n const { isOpen, close } = useViewParamsEditorStore();\n const isSmallScreen = useIsSmallScreen();\n\n const getPreservedParams = () => getPreservedSearchParams(searchParams, viewOptions);\n\n const handleClose = () => {\n close();\n };\n\n const resetParams = () => {\n setSearchParams(getPreservedParams());\n };\n\n const onParamsFormSubmit = (formEvent: FormEvent<HTMLFormElement>) => {\n formEvent.preventDefault();\n\n const newParamsObject = Object.fromEntries(new FormData(formEvent.currentTarget));\n const newSearchParams = getURLSearchParamsFromObj(newParamsObject, viewOptions);\n const preservedParams = getPreservedParams();\n preservedParams.forEach((value, key) => {\n newSearchParams.append(key, value);\n });\n setSearchParams(newSearchParams);\n\n if (isSmallScreen) {\n close();\n }\n };\n\n return (\n <Dialog.Root\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) {\n handleClose();\n }\n }}\n >\n <Dialog.Portal>\n <Dialog.Backdrop className={style.backdrop} />\n <Dialog.Popup className={style.drawer}>\n <div className={style.header}>\n <Dialog.Title>Customise</Dialog.Title>\n <IconButton variant='subtle-white' size='large' data-testid='close-view-params' onClick={handleClose}>\n <IoClose />\n </IconButton>\n </div>\n <div className={style.body}>\n {viewSettings.overrideStyles && (\n <Info className={style.info}>This view style is being modified by a custom CSS file.</Info>\n )}\n <ViewParamsPresets target={target} />\n <form id='edit-params-form' onSubmit={onParamsFormSubmit} className={style.sectionList}>\n {viewOptions.map((section) => (\n <ViewParamsSection\n key={section.title}\n title={section.title}\n collapsible={section.collapsible}\n options={section.options}\n />\n ))}\n </form>\n </div>\n <div className={style.footer}>\n <Button variant='subtle' size='large' onClick={resetParams} type='reset'>\n Reset to default\n </Button>\n <Button\n variant='primary'\n size='large'\n form='edit-params-form'\n type='submit'\n data-testid='apply-view-params'\n >\n Apply\n </Button>\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n"],"names":["makeOptionsFromCustomFields","customFields","additionalOptions","filterImageType","options","key","value","Object","entries","type","push","label","makeCustomFieldSelectOptions","colour","makeProjectDataOptions","projectData","generatedOptions","custom","map","entry","index","title","sanitiseColour","startsWith","substring","collectFieldMetadata","paramFields","metadata","defaultValues","colorFields","Set","booleanFields","isPersistedField","persistedValues","forEach","section","option","add","id","values","String","defaultValue","getURLSearchParamsFromObj","paramsObj","newSearchParams","URLSearchParams","addedPairs","addUniqueParam","pair","has","append","length","Array","from","delete","split","v","processedValue","getPreservedSearchParams","currentParams","managedParamIds","preserved","ViewParamsPresets","target","viewPresets","useViewUrlPresets","searchParams","setSearchParams","useSearchParams","handleRecall","preset","newSearch","search","set","alias","style","presetSection","active","get","jsxs","cx","jsx","Button","presetActions","OptionTitle","ClockOptions","TimerOptions","DataSources","ElementVisibility","BehaviourOptions","StyleOverride","Animation","Schedule","Hidden","ensureHex","InlineColourPicker","name","setColour","useState","useEffect","inline","SwatchPicker","ParamInput","paramField","join","defaultOptionValue","empty","ControlledSelect","optionFromParams","getAll","MultiOption","ControlledSwitch","isStringBoolean","placeholder","defaultNumberValue","Input","defaultStringValue","ControlledInput","paramState","setParamState","toggleValue","checked","prev","filter","Fragment","toggleSelect","Checkbox","includes","initialValue","setChecked","Switch","selected","setSelected","Select","inputProps","setValue","event","ViewParamsSection","collapsible","collapsed","setCollapsed","useLocalStorage","handleCollapse","HiddenContents","sectionHeader","IoChevronDown","closed","open","SectionContents","hidden","description","memo","ViewParamsEditor","viewOptions","data","viewSettings","useViewSettings","isOpen","close","useViewParamsEditorStore","isSmallScreen","useIsSmallScreen","getPreservedParams","handleClose","resetParams","onParamsFormSubmit","formEvent","preventDefault","newParamsObject","fromEntries","FormData","currentTarget","Dialog.Root","Dialog.Portal","Dialog.Backdrop","backdrop","Dialog.Popup","drawer","header","Dialog.Title","IconButton","IoClose","body","overrideStyles","Info","info","sectionList","footer"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{h as f,j as d,f as g}from"./vendor-CKDP5hij.js";import{e as c,bO as y,T as S}from"./index-2lQ-45a9.js";import{b as T,v as b,a as _,E as p,T as I}from"./validateEvent-BUgLWn7x.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new t.Error().stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="cf192132-a9fa-4149-b54b-55138385c45f",t._sentryDebugIdIdentifier="sentry-dbid-cf192132-a9fa-4149-b54b-55138385c45f")}catch{}})();const h="_blink_19ahf_1",v="_fourtyfive_19ahf_13",x="_textarea_19ahf_17",D="_subtle_19ahf_47",k="_ghosted_19ahf_53",w="_fluid_19ahf_59",o={blink:h,fourtyfive:v,textarea:x,subtle:D,ghosted:k,fluid:w},j=f.forwardRef(function({className:e,variant:r="subtle",fluid:n,rows:i=5,resize:l="none",style:s,...u},m){return d.jsx("textarea",{ref:m,autoCorrect:"off",autoComplete:"off",spellCheck:"false",rows:i,style:{...s,resize:l},className:c([o.textarea,o[r],n&&o.fluid,e]),...u})}),a={duration:"00:10:00",linkPrevious:!0,timeStrategy:I.LockDuration,warnTime:"00:02:00",dangerTime:"00:01:00",timerType:S.CountDown,endAction:p.None},L=g(t=>({defaultDuration:localStorage.getItem("ontime-default-duration")??a.duration,linkPrevious:y("ontime-link-previous",a.linkPrevious),defaultTimeStrategy:_(localStorage.getItem("ontime-time-strategy"),a.timeStrategy),defaultWarnTime:localStorage.getItem("ontime-default-warn-time")??a.warnTime,defaultDangerTime:localStorage.getItem("ontime-default-danger-time")??a.dangerTime,defaultTimerType:b(localStorage.getItem("ontime-default-timer-type"),a.timerType),defaultEndAction:T(localStorage.getItem("ontime-default-end-action"),a.endAction),setDefaultDuration:e=>t(()=>(localStorage.setItem("ontime-default-duration",String(e)),{defaultDuration:e})),setLinkPrevious:e=>t(()=>(localStorage.setItem("ontime-link-previous",String(e)),{linkPrevious:e})),setTimeStrategy:e=>t(()=>(localStorage.setItem("ontime-time-strategy",String(e)),{defaultTimeStrategy:e})),setWarnTime:e=>t(()=>(localStorage.setItem("ontime-default-warn-time",String(e)),{defaultWarnTime:e})),setDangerTime:e=>t(()=>(localStorage.setItem("ontime-default-danger-time",String(e)),{defaultDangerTime:e})),setDefaultTimerType:e=>t(()=>(localStorage.setItem("ontime-default-timer-type",String(e)),{defaultTimerType:e})),setDefaultEndAction:e=>t(()=>(localStorage.setItem("ontime-default-end-action",String(e)),{defaultEndAction:e}))}));export{j as T,a as e,L as u};
2
- //# sourceMappingURL=editorSettings-D4jfu68W.js.map
1
+ import{h as m,j as d,f as g}from"./vendor-Dt3_Fdfs.js";import{e as c,bQ as y,T as S}from"./index-3aosT33y.js";import{b as T,v as b,a as _,E as p,T as I}from"./validateEvent-BnwPmDph.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new t.Error().stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="461a3d50-3fbf-45fa-832a-80116fba6a21",t._sentryDebugIdIdentifier="sentry-dbid-461a3d50-3fbf-45fa-832a-80116fba6a21")}catch{}})();const h="_blink_19ahf_1",v="_fourtyfive_19ahf_13",x="_textarea_19ahf_17",D="_subtle_19ahf_47",k="_ghosted_19ahf_53",w="_fluid_19ahf_59",o={blink:h,fourtyfive:v,textarea:x,subtle:D,ghosted:k,fluid:w},j=m.forwardRef(function({className:e,variant:r="subtle",fluid:n,rows:i=5,resize:l="none",style:s,...f},u){return d.jsx("textarea",{ref:u,autoCorrect:"off",autoComplete:"off",spellCheck:"false",rows:i,style:{...s,resize:l},className:c([o.textarea,o[r],n&&o.fluid,e]),...f})}),a={duration:"00:10:00",linkPrevious:!0,timeStrategy:I.LockDuration,warnTime:"00:02:00",dangerTime:"00:01:00",timerType:S.CountDown,endAction:p.None},L=g(t=>({defaultDuration:localStorage.getItem("ontime-default-duration")??a.duration,linkPrevious:y("ontime-link-previous",a.linkPrevious),defaultTimeStrategy:_(localStorage.getItem("ontime-time-strategy"),a.timeStrategy),defaultWarnTime:localStorage.getItem("ontime-default-warn-time")??a.warnTime,defaultDangerTime:localStorage.getItem("ontime-default-danger-time")??a.dangerTime,defaultTimerType:b(localStorage.getItem("ontime-default-timer-type"),a.timerType),defaultEndAction:T(localStorage.getItem("ontime-default-end-action"),a.endAction),setDefaultDuration:e=>t(()=>(localStorage.setItem("ontime-default-duration",String(e)),{defaultDuration:e})),setLinkPrevious:e=>t(()=>(localStorage.setItem("ontime-link-previous",String(e)),{linkPrevious:e})),setTimeStrategy:e=>t(()=>(localStorage.setItem("ontime-time-strategy",String(e)),{defaultTimeStrategy:e})),setWarnTime:e=>t(()=>(localStorage.setItem("ontime-default-warn-time",String(e)),{defaultWarnTime:e})),setDangerTime:e=>t(()=>(localStorage.setItem("ontime-default-danger-time",String(e)),{defaultDangerTime:e})),setDefaultTimerType:e=>t(()=>(localStorage.setItem("ontime-default-timer-type",String(e)),{defaultTimerType:e})),setDefaultEndAction:e=>t(()=>(localStorage.setItem("ontime-default-end-action",String(e)),{defaultEndAction:e}))}));export{j as T,a as e,L as u};
2
+ //# sourceMappingURL=editorSettings-xk5GwlLv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editorSettings-D4jfu68W.js","sources":["../../src/common/components/input/textarea/Textarea.tsx","../../src/common/stores/editorSettings.ts"],"sourcesContent":["import { forwardRef, TextareaHTMLAttributes } from 'react';\n\nimport { cx } from '../../../utils/styleUtils';\n\nimport style from './Textarea.module.scss';\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n variant?: 'subtle' | 'ghosted';\n fluid?: boolean;\n resize?: 'none' | 'both' | 'horizontal' | 'vertical';\n}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function TextArea(\n { className, variant = 'subtle', fluid, rows = 5, resize = 'none', style: customStyle, ...textareaProps },\n ref,\n) {\n return (\n <textarea\n ref={ref}\n autoCorrect='off'\n autoComplete='off'\n spellCheck='false'\n rows={rows}\n style={{ ...customStyle, resize }}\n className={cx([style.textarea, style[variant], fluid && style.fluid, className])}\n {...textareaProps}\n />\n );\n});\n\nexport default Textarea;\n","import { EndAction, TimerType, TimeStrategy } from 'ontime-types';\nimport { validateEndAction, validateTimerType, validateTimeStrategy } from 'ontime-utils';\nimport { create } from 'zustand';\n\nimport { booleanFromLocalStorage } from '../utils/localStorage';\n\ntype EditorSettingsStore = {\n defaultDuration: string;\n linkPrevious: boolean;\n defaultTimeStrategy: TimeStrategy;\n defaultWarnTime: string;\n defaultDangerTime: string;\n defaultTimerType: TimerType;\n defaultEndAction: EndAction;\n setDefaultDuration: (defaultDuration: string) => void;\n setLinkPrevious: (linkPrevious: boolean) => void;\n setTimeStrategy: (timeStrategy: TimeStrategy) => void;\n setWarnTime: (warnTime: string) => void;\n setDangerTime: (dangerTime: string) => void;\n setDefaultTimerType: (defaultTimerType: TimerType) => void;\n setDefaultEndAction: (defaultEndAction: EndAction) => void;\n};\n\nexport const editorSettingsDefaults = {\n duration: '00:10:00',\n linkPrevious: true,\n timeStrategy: TimeStrategy.LockDuration,\n warnTime: '00:02:00', // 120000 same as backend\n dangerTime: '00:01:00', // 60000 same as backend\n timerType: TimerType.CountDown,\n endAction: EndAction.None,\n};\n\nenum EditorSettingsKeys {\n DefaultDuration = 'ontime-default-duration',\n LinkPrevious = 'ontime-link-previous',\n DefaultTimeStrategy = 'ontime-time-strategy',\n DefaultWarnTime = 'ontime-default-warn-time',\n DefaultDangerTime = 'ontime-default-danger-time',\n DefaultTimerType = 'ontime-default-timer-type',\n DefaultEndAction = 'ontime-default-end-action',\n}\n\nexport const useEditorSettings = create<EditorSettingsStore>((set) => {\n return {\n defaultDuration: localStorage.getItem(EditorSettingsKeys.DefaultDuration) ?? editorSettingsDefaults.duration,\n linkPrevious: booleanFromLocalStorage(EditorSettingsKeys.LinkPrevious, editorSettingsDefaults.linkPrevious),\n defaultTimeStrategy: validateTimeStrategy(\n localStorage.getItem(EditorSettingsKeys.DefaultTimeStrategy),\n editorSettingsDefaults.timeStrategy,\n ),\n defaultWarnTime: localStorage.getItem(EditorSettingsKeys.DefaultWarnTime) ?? editorSettingsDefaults.warnTime,\n defaultDangerTime: localStorage.getItem(EditorSettingsKeys.DefaultDangerTime) ?? editorSettingsDefaults.dangerTime,\n defaultTimerType: validateTimerType(\n localStorage.getItem(EditorSettingsKeys.DefaultTimerType),\n editorSettingsDefaults.timerType,\n ),\n defaultEndAction: validateEndAction(\n localStorage.getItem(EditorSettingsKeys.DefaultEndAction),\n editorSettingsDefaults.endAction,\n ),\n\n setDefaultDuration: (defaultDuration) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultDuration, String(defaultDuration));\n return { defaultDuration };\n }),\n\n setLinkPrevious: (linkPrevious) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.LinkPrevious, String(linkPrevious));\n return { linkPrevious };\n }),\n setTimeStrategy: (defaultTimeStrategy) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultTimeStrategy, String(defaultTimeStrategy));\n return { defaultTimeStrategy };\n }),\n\n setWarnTime: (defaultWarnTime) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultWarnTime, String(defaultWarnTime));\n return { defaultWarnTime };\n }),\n setDangerTime: (defaultDangerTime) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultDangerTime, String(defaultDangerTime));\n return { defaultDangerTime };\n }),\n setDefaultTimerType: (defaultTimerType) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultTimerType, String(defaultTimerType));\n return { defaultTimerType };\n }),\n setDefaultEndAction: (defaultEndAction) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultEndAction, String(defaultEndAction));\n return { defaultEndAction };\n }),\n };\n});\n"],"names":["Textarea","forwardRef","className","variant","fluid","rows","resize","style","customStyle","textareaProps","ref","jsx","cx","textarea","editorSettingsDefaults","duration","linkPrevious","timeStrategy","TimeStrategy","LockDuration","warnTime","dangerTime","timerType","TimerType","CountDown","endAction","EndAction","None","useEditorSettings","create","set","defaultDuration","localStorage","getItem","EditorSettingsKeys","booleanFromLocalStorage","defaultTimeStrategy","validateTimeStrategy","defaultWarnTime","defaultDangerTime","defaultTimerType","validateTimerType","defaultEndAction","validateEndAction","setDefaultDuration","setItem","String","setLinkPrevious","setTimeStrategy","setWarnTime","setDangerTime","setDefaultTimerType","setDefaultEndAction"],"mappings":"2tBAYMA,EAAWC,EAAAA,WAA+C,SAC9D,CAAEC,UAAAA,EAAWC,QAAAA,EAAU,SAAUC,MAAAA,EAAOC,KAAAA,EAAO,EAAGC,OAAAA,EAAS,OAAQC,MAAOC,EAAa,GAAGC,CAAc,EACxGC,EACA,CAEE,OAAAC,MAAC,WACC,CAAA,IAAAD,EACA,YAAY,MACZ,aAAa,MACb,WAAW,QACX,KAAAL,EACA,MAAO,CAAE,GAAGG,EAAaF,OAAAA,CAAAA,EACzB,UAAWM,EAAG,CAACL,EAAMM,SAAUN,EAAMJ,CAAO,EAAGC,GAASG,EAAMH,MAAOF,CAAS,CAAC,EAC3EO,GAAAA,CACJ,CAAA,CAEN,CAAC,ECLYK,EAAyB,CACpCC,SAAU,WACVC,aAAc,GACdC,aAAcC,EAAaC,aAC3BC,SAAU,WACVC,WAAY,WACZC,UAAWC,EAAUC,UACrBC,UAAWC,EAAUC,IACvB,EAYaC,EAAoBC,EAAqCC,IAC7D,CACLC,gBAAiBC,aAAaC,QAAQC,4BAAuCpB,EAAuBC,SACpGC,aAAcmB,EAAwBD,uBAAiCpB,EAAuBE,YAAY,EAC1GoB,oBAAqBC,EACnBL,aAAaC,QAAQC,sBAAsC,EAC3DpB,EAAuBG,YACzB,EACAqB,gBAAiBN,aAAaC,QAAQC,6BAAuCpB,EAAuBM,SACpGmB,kBAAmBP,aAAaC,QAAQC,+BAAyCpB,EAAuBO,WACxGmB,iBAAkBC,EAChBT,aAAaC,QAAQC,2BAAmC,EACxDpB,EAAuBQ,SACzB,EACAoB,iBAAkBC,EAChBX,aAAaC,QAAQC,2BAAmC,EACxDpB,EAAuBW,SACzB,EAEAmB,mBACEd,GAAAA,EAAI,KACFE,aAAaa,QAAQX,0BAAoCY,OAAOf,CAAe,CAAC,EACzE,CAAEA,gBAAAA,CAAgB,EAC1B,EAEHgB,gBACEjB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,uBAAiCY,OAAO9B,CAAY,CAAC,EACnE,CAAEA,aAAAA,CAAa,EACvB,EACHgC,gBACElB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,uBAAwCY,OAAOV,CAAmB,CAAC,EACjF,CAAEA,oBAAAA,CAAoB,EAC9B,EAEHa,YACEnB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,2BAAoCY,OAAOR,CAAe,CAAC,EACzE,CAAEA,gBAAAA,CAAgB,EAC1B,EACHY,cACEpB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,6BAAsCY,OAAOP,CAAiB,CAAC,EAC7E,CAAEA,kBAAAA,CAAkB,EAC5B,EACHY,oBACErB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,4BAAqCY,OAAON,CAAgB,CAAC,EAC3E,CAAEA,iBAAAA,CAAiB,EAC3B,EACHY,oBACEtB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,4BAAqCY,OAAOJ,CAAgB,CAAC,EAC3E,CAAEA,iBAAAA,CAAiB,EAC3B,CACL,EACD"}
1
+ {"version":3,"file":"editorSettings-xk5GwlLv.js","sources":["../../src/common/components/input/textarea/Textarea.tsx","../../src/common/stores/editorSettings.ts"],"sourcesContent":["import { forwardRef, TextareaHTMLAttributes } from 'react';\n\nimport { cx } from '../../../utils/styleUtils';\n\nimport style from './Textarea.module.scss';\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n variant?: 'subtle' | 'ghosted';\n fluid?: boolean;\n resize?: 'none' | 'both' | 'horizontal' | 'vertical';\n}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function TextArea(\n { className, variant = 'subtle', fluid, rows = 5, resize = 'none', style: customStyle, ...textareaProps },\n ref,\n) {\n return (\n <textarea\n ref={ref}\n autoCorrect='off'\n autoComplete='off'\n spellCheck='false'\n rows={rows}\n style={{ ...customStyle, resize }}\n className={cx([style.textarea, style[variant], fluid && style.fluid, className])}\n {...textareaProps}\n />\n );\n});\n\nexport default Textarea;\n","import { EndAction, TimerType, TimeStrategy } from 'ontime-types';\nimport { validateEndAction, validateTimerType, validateTimeStrategy } from 'ontime-utils';\nimport { create } from 'zustand';\n\nimport { booleanFromLocalStorage } from '../utils/localStorage';\n\ntype EditorSettingsStore = {\n defaultDuration: string;\n linkPrevious: boolean;\n defaultTimeStrategy: TimeStrategy;\n defaultWarnTime: string;\n defaultDangerTime: string;\n defaultTimerType: TimerType;\n defaultEndAction: EndAction;\n setDefaultDuration: (defaultDuration: string) => void;\n setLinkPrevious: (linkPrevious: boolean) => void;\n setTimeStrategy: (timeStrategy: TimeStrategy) => void;\n setWarnTime: (warnTime: string) => void;\n setDangerTime: (dangerTime: string) => void;\n setDefaultTimerType: (defaultTimerType: TimerType) => void;\n setDefaultEndAction: (defaultEndAction: EndAction) => void;\n};\n\nexport const editorSettingsDefaults = {\n duration: '00:10:00',\n linkPrevious: true,\n timeStrategy: TimeStrategy.LockDuration,\n warnTime: '00:02:00', // 120000 same as backend\n dangerTime: '00:01:00', // 60000 same as backend\n timerType: TimerType.CountDown,\n endAction: EndAction.None,\n};\n\nenum EditorSettingsKeys {\n DefaultDuration = 'ontime-default-duration',\n LinkPrevious = 'ontime-link-previous',\n DefaultTimeStrategy = 'ontime-time-strategy',\n DefaultWarnTime = 'ontime-default-warn-time',\n DefaultDangerTime = 'ontime-default-danger-time',\n DefaultTimerType = 'ontime-default-timer-type',\n DefaultEndAction = 'ontime-default-end-action',\n}\n\nexport const useEditorSettings = create<EditorSettingsStore>((set) => {\n return {\n defaultDuration: localStorage.getItem(EditorSettingsKeys.DefaultDuration) ?? editorSettingsDefaults.duration,\n linkPrevious: booleanFromLocalStorage(EditorSettingsKeys.LinkPrevious, editorSettingsDefaults.linkPrevious),\n defaultTimeStrategy: validateTimeStrategy(\n localStorage.getItem(EditorSettingsKeys.DefaultTimeStrategy),\n editorSettingsDefaults.timeStrategy,\n ),\n defaultWarnTime: localStorage.getItem(EditorSettingsKeys.DefaultWarnTime) ?? editorSettingsDefaults.warnTime,\n defaultDangerTime: localStorage.getItem(EditorSettingsKeys.DefaultDangerTime) ?? editorSettingsDefaults.dangerTime,\n defaultTimerType: validateTimerType(\n localStorage.getItem(EditorSettingsKeys.DefaultTimerType),\n editorSettingsDefaults.timerType,\n ),\n defaultEndAction: validateEndAction(\n localStorage.getItem(EditorSettingsKeys.DefaultEndAction),\n editorSettingsDefaults.endAction,\n ),\n\n setDefaultDuration: (defaultDuration) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultDuration, String(defaultDuration));\n return { defaultDuration };\n }),\n\n setLinkPrevious: (linkPrevious) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.LinkPrevious, String(linkPrevious));\n return { linkPrevious };\n }),\n setTimeStrategy: (defaultTimeStrategy) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultTimeStrategy, String(defaultTimeStrategy));\n return { defaultTimeStrategy };\n }),\n\n setWarnTime: (defaultWarnTime) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultWarnTime, String(defaultWarnTime));\n return { defaultWarnTime };\n }),\n setDangerTime: (defaultDangerTime) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultDangerTime, String(defaultDangerTime));\n return { defaultDangerTime };\n }),\n setDefaultTimerType: (defaultTimerType) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultTimerType, String(defaultTimerType));\n return { defaultTimerType };\n }),\n setDefaultEndAction: (defaultEndAction) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultEndAction, String(defaultEndAction));\n return { defaultEndAction };\n }),\n };\n});\n"],"names":["Textarea","forwardRef","className","variant","fluid","rows","resize","style","customStyle","textareaProps","ref","jsx","cx","textarea","editorSettingsDefaults","duration","linkPrevious","timeStrategy","TimeStrategy","LockDuration","warnTime","dangerTime","timerType","TimerType","CountDown","endAction","EndAction","None","useEditorSettings","create","set","defaultDuration","localStorage","getItem","EditorSettingsKeys","booleanFromLocalStorage","defaultTimeStrategy","validateTimeStrategy","defaultWarnTime","defaultDangerTime","defaultTimerType","validateTimerType","defaultEndAction","validateEndAction","setDefaultDuration","setItem","String","setLinkPrevious","setTimeStrategy","setWarnTime","setDangerTime","setDefaultTimerType","setDefaultEndAction"],"mappings":"2tBAYMA,EAAWC,EAAAA,WAA+C,SAC9D,CAAEC,UAAAA,EAAWC,QAAAA,EAAU,SAAUC,MAAAA,EAAOC,KAAAA,EAAO,EAAGC,OAAAA,EAAS,OAAQC,MAAOC,EAAa,GAAGC,CAAc,EACxGC,EACA,CAEE,OAAAC,MAAC,WACC,CAAA,IAAAD,EACA,YAAY,MACZ,aAAa,MACb,WAAW,QACX,KAAAL,EACA,MAAO,CAAE,GAAGG,EAAaF,OAAAA,CAAAA,EACzB,UAAWM,EAAG,CAACL,EAAMM,SAAUN,EAAMJ,CAAO,EAAGC,GAASG,EAAMH,MAAOF,CAAS,CAAC,EAC3EO,GAAAA,CACJ,CAAA,CAEN,CAAC,ECLYK,EAAyB,CACpCC,SAAU,WACVC,aAAc,GACdC,aAAcC,EAAaC,aAC3BC,SAAU,WACVC,WAAY,WACZC,UAAWC,EAAUC,UACrBC,UAAWC,EAAUC,IACvB,EAYaC,EAAoBC,EAAqCC,IAC7D,CACLC,gBAAiBC,aAAaC,QAAQC,4BAAuCpB,EAAuBC,SACpGC,aAAcmB,EAAwBD,uBAAiCpB,EAAuBE,YAAY,EAC1GoB,oBAAqBC,EACnBL,aAAaC,QAAQC,sBAAsC,EAC3DpB,EAAuBG,YACzB,EACAqB,gBAAiBN,aAAaC,QAAQC,6BAAuCpB,EAAuBM,SACpGmB,kBAAmBP,aAAaC,QAAQC,+BAAyCpB,EAAuBO,WACxGmB,iBAAkBC,EAChBT,aAAaC,QAAQC,2BAAmC,EACxDpB,EAAuBQ,SACzB,EACAoB,iBAAkBC,EAChBX,aAAaC,QAAQC,2BAAmC,EACxDpB,EAAuBW,SACzB,EAEAmB,mBACEd,GAAAA,EAAI,KACFE,aAAaa,QAAQX,0BAAoCY,OAAOf,CAAe,CAAC,EACzE,CAAEA,gBAAAA,CAAgB,EAC1B,EAEHgB,gBACEjB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,uBAAiCY,OAAO9B,CAAY,CAAC,EACnE,CAAEA,aAAAA,CAAa,EACvB,EACHgC,gBACElB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,uBAAwCY,OAAOV,CAAmB,CAAC,EACjF,CAAEA,oBAAAA,CAAoB,EAC9B,EAEHa,YACEnB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,2BAAoCY,OAAOR,CAAe,CAAC,EACzE,CAAEA,gBAAAA,CAAgB,EAC1B,EACHY,cACEpB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,6BAAsCY,OAAOP,CAAiB,CAAC,EAC7E,CAAEA,kBAAAA,CAAkB,EAC5B,EACHY,oBACErB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,4BAAqCY,OAAON,CAAgB,CAAC,EAC3E,CAAEA,iBAAAA,CAAiB,EAC3B,EACHY,oBACEtB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,4BAAqCY,OAAOJ,CAAgB,CAAC,EAC3E,CAAEA,iBAAAA,CAAiB,EAC3B,CACL,EACD"}
@@ -1,2 +1,2 @@
1
- import"./vendor-CKDP5hij.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3bddcef3-3c46-4d76-a6ef-4958e2a23011",e._sentryDebugIdIdentifier="sentry-dbid-3bddcef3-3c46-4d76-a6ef-4958e2a23011")}catch{}})();const d=(e,n,t)=>Math.max(Math.min(e,Math.max(n,t)),Math.min(n,t));function s(e,n){return e===null||n===null?0:e<=0?100:e>=n?0:d((n-e)/n*100,0,100)}export{s as g};
2
- //# sourceMappingURL=getProgress-B9UANc25.js.map
1
+ import"./vendor-Dt3_Fdfs.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3bddcef3-3c46-4d76-a6ef-4958e2a23011",e._sentryDebugIdIdentifier="sentry-dbid-3bddcef3-3c46-4d76-a6ef-4958e2a23011")}catch{}})();const d=(e,n,t)=>Math.max(Math.min(e,Math.max(n,t)),Math.min(n,t));function s(e,n){return e===null||n===null?0:e<=0?100:e>=n?0:d((n-e)/n*100,0,100)}export{s as g};
2
+ //# sourceMappingURL=getProgress-CWSCZOIN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getProgress-B9UANc25.js","sources":["../../src/common/utils/math.ts","../../src/common/utils/getProgress.ts"],"sourcesContent":["/**\n * Clamps a value between a min and a max\n * @param {number} num - Value to clamp\n * @param {number} min - min value\n * @param {number} max - max value\n * @returns {number}\n */\nexport const clamp = (num: number, min: number, max: number) =>\n Math.max(Math.min(num, Math.max(min, max)), Math.min(min, max));\n","import { MaybeNumber } from 'ontime-types';\n\nimport { clamp } from './math';\n\n/**\n * Returns completion percentage of a progress bar\n * This code assumes the current time and duration have addedTime already applied\n */\nexport function getProgress(current: MaybeNumber, duration: MaybeNumber) {\n if (current === null || duration === null) {\n return 0;\n }\n\n if (current <= 0) {\n return 100;\n }\n\n if (current >= duration) {\n return 0;\n }\n\n return clamp(((duration - current) / duration) * 100, 0, 100);\n}\n"],"names":["clamp","num","min","max","Math","getProgress","current","duration"],"mappings":"uXAOaA,MAAAA,EAAQA,CAACC,EAAaC,EAAaC,IAC9CC,KAAKD,IAAIC,KAAKF,IAAID,EAAKG,KAAKD,IAAID,EAAKC,CAAG,CAAC,EAAGC,KAAKF,IAAIA,EAAKC,CAAG,CAAC,ECAhDE,SAAAA,EAAYC,EAAsBC,EAAuB,CACnED,OAAAA,IAAY,MAAQC,IAAa,KAC5B,EAGLD,GAAW,EACN,IAGLA,GAAWC,EACN,EAGFP,GAAQO,EAAWD,GAAWC,EAAY,IAAK,EAAG,GAAG,CAC9D"}
1
+ {"version":3,"file":"getProgress-CWSCZOIN.js","sources":["../../src/common/utils/math.ts","../../src/common/utils/getProgress.ts"],"sourcesContent":["/**\n * Clamps a value between a min and a max\n * @param {number} num - Value to clamp\n * @param {number} min - min value\n * @param {number} max - max value\n * @returns {number}\n */\nexport const clamp = (num: number, min: number, max: number) =>\n Math.max(Math.min(num, Math.max(min, max)), Math.min(min, max));\n","import { MaybeNumber } from 'ontime-types';\n\nimport { clamp } from './math';\n\n/**\n * Returns completion percentage of a progress bar\n * This code assumes the current time and duration have addedTime already applied\n */\nexport function getProgress(current: MaybeNumber, duration: MaybeNumber) {\n if (current === null || duration === null) {\n return 0;\n }\n\n if (current <= 0) {\n return 100;\n }\n\n if (current >= duration) {\n return 0;\n }\n\n return clamp(((duration - current) / duration) * 100, 0, 100);\n}\n"],"names":["clamp","num","min","max","Math","getProgress","current","duration"],"mappings":"uXAOaA,MAAAA,EAAQA,CAACC,EAAaC,EAAaC,IAC9CC,KAAKD,IAAIC,KAAKF,IAAID,EAAKG,KAAKD,IAAID,EAAKC,CAAG,CAAC,EAAGC,KAAKF,IAAIA,EAAKC,CAAG,CAAC,ECAhDE,SAAAA,EAAYC,EAAsBC,EAAuB,CACnED,OAAAA,IAAY,MAAQC,IAAa,KAC5B,EAGLD,GAAW,EACN,IAGLA,GAAWC,EACN,EAGFP,GAAQO,EAAWD,GAAWC,EAAY,IAAK,EAAG,GAAG,CAC9D"}
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Timer-ahF-O2zN.js","./vendor-Dt3_Fdfs.js","./vendor-4xP-6xVS.css","./timer.utils-CWHFVz06.js","./viewUtils-k0tARVDN.js","./playbackstate-BZ9WYn2k.js","./MultiPartProgressBar-BlLJNQ0D.js","./getProgress-CWSCZOIN.js","./MultiPartProgressBar-1_EFIx1M.css","./EmptyPage-aTb22KTq.js","./EmptyPage-Ci10HwDK.css","./TitleCard-BiaQE4ZK.js","./TitleCard-Bpf2kJHj.css","./ViewLogo-DcDhyyIF.js","./ViewLogo-Cu9JQggv.css","./ViewParamsEditor-DeMdkxxC.js","./SwatchPicker-DuWAohyD.js","./SwatchPicker-DxatRu17.css","./Select-CvUrsmYI.js","./Select-Cd08aEcf.css","./ViewParamsEditor-CupOV30k.css","./useWindowTitle-CQ8nEeel.js","./SuperscriptTime-retbmT5o.js","./SuperscriptTime-Bk5IU6zG.css","./presentation.utils-lyuuD4A5.js","./viewLoader.utils-H7r-zNPP.js","./validateEvent-BnwPmDph.js","./useCustomFields-kBD1jvDA.js","./useProjectData-gGT2eczr.js","./useRundown-C6stroSA.js","./Timer-Jjolf5Ra.css","./Countdown-COte1yne.js","./FollowButton--Bj9S6jO.js","./FollowButton-Dab8w6zT.css","./useReport-CG6m_Zb0.js","./offset-yVqq_CB1.js","./Countdown-BYXg70ir.css","./Backstage-DQu8ne-1.js","./SuperscriptPeriod-CSX8zFgq.js","./Backstage-BlanRQaw.css","./Studio-BSSiKd6k.js","./Studio-BbZ7w7aA.css","./TimelinePage-pjff5TxG.js","./rundownUtils-XX_c4Pcl.js","./TimelinePage-CcFl3uul.css","./ProjectInfo-D0X9vdIX.js","./ProjectInfo-CTQGba6F.css","./ProtectedEditor-DNOiQqIU.js","./ProtectRoute-DSilyhst.js","./ProtectRoute-Bm5sjStK.css","./useEventSelection-Cvdw9all.js","./useEventSelection-D_Et8xSN.css","./editorSettings-xk5GwlLv.js","./editorSettings-BqHbWs9b.css","./EditorUtils-k5KpETPG.js","./EditorUtils-L4Sg72o_.css","./Tooltip-C5iPq6NR.js","./Tooltip-CKb7gU2M.css","./TimeInput-BjOTgjcv.js","./parseUserTime-wAKk9aCJ.js","./TimeInput-Cu-N5DmX.css","./useSelectAndRevealEntry-D79sYFHr.js","./TimeElements-BfxdLkpO.js","./TimeElements-B1xG3q8U.css","./OverviewWrapper-B4nU68Eq.js","./OverviewWrapper-fPfl6o_p.css","./TimerDisplay-DeFQvmo9.js","./TimerDisplay-B-FvT2T-.css","./ProtectedEditor-DyaLP0mG.css","./ProtectedCuesheet-DRTfZTZN.js","./CuesheetTable-BQfxAp-I.js","./DelayIndicator-B0cudY9N.js","./DelayIndicator-VuYhhwTj.css","./CuesheetTable-BJ30G538.css","./ProtectedCuesheet-_MUBZbf1.css","./OperatorExport-CmgIl1lz.js","./OperatorExport-CA5WcIt5.css","./EditorFeatureWrapper-DpDaCaJ3.js","./EditorFeatureWrapper-MP8HHRxx.css","./RundownExport-Bvc1J50m.js","./RundownExport-CzaSrbaj.css","./TimerControlExport-De2n8HWG.js","./TimerControlExport-X_cQKSFg.css","./MessageControlExport-BN6OfADo.js","./MessageControlExport-D_pNX6Vj.css"])))=>i.map(i=>d[i]);
2
+ var Xt=Object.defineProperty;var Yt=(e,t,n)=>t in e?Xt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Be=(e,t,n)=>Yt(e,typeof t!="symbol"?t+"":t,n);import{a as h,c as en,Q as tn,b as nn,u as on,i as rn,d as sn,e as an,f as ye,R as ct,w as cn,j as o,g as ln,r as un,h as c,k as se,l as dn,I as mn,m as fn,n as W,o as lt,p as pn,D as ut,q as dt,s as mt,t as ft,v as qe,x as ae,y as pt,z as gn,A as hn,B as _n,C as gt,E as bn,F as xe,G as vn,H as yn,J as xn,K as wn,L as Sn,M as kn,N as jn,O as Cn,P as ge,S as En,T as Nn,U as In,V as Tn,W as Pn,X as Rn,Y as $n,Z as Dn,_ as An,$ as E,a0 as v,a1 as qn,a2 as Ln,a3 as On,a4 as Un,a5 as Fn,a6 as Mn,a7 as zn}from"./vendor-Dt3_Fdfs.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="379f237f-a9ca-4417-8f9e-2a173f8b631f",e._sentryDebugIdIdentifier="sentry-dbid-379f237f-a9ca-4417-8f9e-2a173f8b631f")}catch{}})();(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const a of s)if(a.type==="childList")for(const i of a.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(s){const a={};return s.integrity&&(a.integrity=s.integrity),s.referrerPolicy&&(a.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?a.credentials="include":s.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function r(s){if(s.ep)return;s.ep=!0;const a=n(s);fetch(s.href,a)}})();const Bn={shortTimeout:20*1e3,longTimeout:3*60*1e3};h.defaults.validateStatus=e=>e>=200&&e<300;h.defaults.timeout=Bn.shortTimeout;var ne=(e=>(e.CountDown="count-down",e.CountUp="count-up",e.Clock="clock",e.None="none",e))(ne||{}),I=(e=>(e.Editor="editor",e.Cuesheet="cuesheet",e.Operator="op",e.Timer="timer",e.Backstage="backstage",e.Timeline="timeline",e.StudioClock="studio",e.Countdown="countdown",e.ProjectInfo="info",e))(I||{}),N=(e=>(e.Ping="ping",e.Pong="pong",e.ClientInit="client-init",e.ClientSet="client-set",e.ClientSetPath="client-set-path",e.ClientRename="client-rename",e.ClientRedirect="client-redirect",e.ClientList="client-list",e.Dialog="dialog",e.Log="log",e.RuntimeData="runtime-data",e.Refetch="refetch",e))(N||{}),P=(e=>(e.All="all",e.CustomFields="custom-fields",e.ProjectData="project-data",e.Report="report",e.Rundown="rundown",e.UrlPresets="url-presets",e.ViewSettings="view-settings",e.Translation="translation",e.Settings="settings",e))(P||{}),ht=(e=>(e.Info="INFO",e.Warn="WARN",e.Error="ERROR",e.Severe="SEVERE",e))(ht||{}),p=(e=>(e.Client="CLIENT",e.Playback="PLAYBACK",e.Rx="RX",e.Server="SERVER",e.Tx="TX",e.User="USER",e))(p||{}),_t=(e=>(e.Roll="roll",e.Play="play",e.Pause="pause",e.Stop="stop",e.Armed="armed",e))(_t||{}),Z=(e=>(e.Absolute="absolute",e.Relative="relative",e))(Z||{}),V=(e=>(e.Start="start",e.Pause="pause",e.Stop="stop",e))(V||{}),he=(e=>(e.CountUp="count-up",e.CountDown="count-down",e))(he||{}),bt=(e=>(e.None="none",e.Default="default",e.Warning="warning",e.Danger="danger",e.Overtime="overtime",e.Pending="pending",e))(bt||{});const Wn={clock:0,timer:{addedTime:0,current:null,duration:null,elapsed:null,expectedFinish:null,phase:bt.None,playback:_t.Stop,secondaryTimer:null,startedAt:null},message:{timer:{text:"",visible:!1,blink:!1,blackout:!1,secondarySource:null},secondary:""},rundown:{selectedEventIndex:null,numEvents:0,plannedStart:0,plannedEnd:0,actualStart:null,actualGroupStart:null,currentDay:null},offset:{absolute:0,relative:0,mode:Z.Absolute,expectedFlagStart:null,expectedGroupEnd:null,expectedRundownEnd:null},groupNow:null,eventNow:null,eventNext:null,eventFlag:null,auxtimer1:{current:0,direction:he.CountUp,duration:0,playback:V.Stop},auxtimer2:{current:0,direction:he.CountUp,duration:0,playback:V.Stop},auxtimer3:{current:0,direction:he.CountUp,duration:0,playback:V.Stop},ping:1},we={"common.expected_finish":"Expected Finish","common.minutes":"min","common.seconds":"sec","common.now":"Now","common.next":"Next","common.scheduled_start":"Scheduled start","common.scheduled_end":"Scheduled end","common.expected_start":"Expected start","common.expected_end":"Expected end","common.stage_timer":"Stage Timer","common.started_at":"Started At","common.time_now":"Time now","common.no_data":"No data","countdown.ended":"Event ended at","countdown.running":"Event running","countdown.loaded":"Event loaded","countdown.select_event":"Select an event to follow","countdown.to_start":"Time to start","countdown.waiting":"Waiting for event start","countdown.overtime":"in overtime","countdown.all_have_finished":"All selected events have finished","timeline.live":"live","timeline.done":"done","timeline.due":"due","timeline.followedby":"Followed by","project.title":"Title","project.description":"Description","project.info":"Project Info","project.url":"Project URL"},Vn="4.5.0",qi="https://www.github.com/cpvalente/ontime",Li="https://api.github.com/repos/cpvalente/ontime/releases/latest",Oi="https://www.getontime.no",Ui="https://discord.com/invite/eje3CSUEXm",Fi="https://www.reddit.com/r/ontimeapp/",Mi="https://docs.getontime.no",zi="https://docs.getontime.no/features/custom-fields/",Bi="https://github.com/sponsors/cpvalente",Wi="https://buymeacoffee.com/cpvalente",Vi=Vn,Ki=!1,Kn=!0,We=window.location.hostname,Hn=We==="localhost"||We==="127.0.0.1";var at;const Ve=(at=document.querySelector("base"))==null?void 0:at.hasAttribute("data-is-cloud"),Hi="ontouchstart"in window||navigator.maxTouchPoints>0,Qn=document.fullscreenEnabled,K=Jn(),X=vt("http",""),Gn=vt("ws","ws");function vt(e,t){const n=new URL(window.location.origin);if(e==="ws"){const s=window.location.protocol==="https:";n.protocol=s?"wss":"ws"}n.pathname=K?`${K}/${t}`:t;const r=n.toString();return r.endsWith("/")?r.slice(0,-1):r}function Jn(){var n;const t=((n=document.querySelector("base"))==null?void 0:n.getAttribute("href"))??"";return t.endsWith("/")?t.slice(0,-1):t}const Zn=Xn(),L=()=>new URLSearchParams(window.location.search).get("n")==="1";function Xn(){const e=document.cookie.split("; ").find(t=>t.startsWith("token="));if(e)try{const{scope:t}=JSON.parse(e.split("=")[1]);return t}catch{return"rw"}return"rw"}const Yn=["appinfo"],Le=["appSettings"],Qi=["appVersion"],Gi=["automation"],Ke=["customFields"],eo=["project"],Ji=["projectList"],Zi=["projectRundowns"],He=["rundown"],oe=["urlpresets"],_e=["viewSettings"];const to=["report"],Oe=["translation"],ie=`${X}/data`,Ue="user",no="styles/override.css",oo="translations/translations.json",ro=`${X}/${Ue}/${no}`,Xi=`${X}/${Ue}/logo`,so=`${X}/${Ue}/${oo}`,re=1e3,Q=1e3*60,be=1e3*60*60,Qe=864e5;function ao(e,t=ne.CountDown){if(e===null)return 0;let n=0;return t===ne.CountDown&&(n=Math.ceil(e/re)),t===ne.CountUp&&(n=Math.floor(e/re)),n===0?0:n}function io(e){return Math.floor(e/60)}function co(e){return Math.floor(e/3600)}function Yi(e){return e?Math.floor(e%Q/re):0}const lo=en("1234567890abcdef",6),uo=()=>lo();function mo(e){return String(e).padStart(2,"0")}function fo(e,t){if(e==null)return(t==null?void 0:t.fallback)??"...";const n=e<0,r=Math.abs(ao(e,t==null?void 0:t.direction)),s=r%60,a=io(r)%60,i=co(r);return`${n?"-":""}${[i,a,s].map(mo).join(":")}`}function ec(e){return e.startsWith("00:0")?e.slice(4):e.startsWith("00:")?e.slice(3):e.startsWith("-00:0")?`-${e.slice(5)}`:e.startsWith("-00:")?`-${e.slice(4)}`:e}function tc(e){return e.endsWith(":00")?e.slice(0,-3):e}function nc(e){return e.slice(0,-3)}function po(e,t){if(e<0)return;const n=new Date(e),r=n.getUTCHours().toString().padStart(2,"0"),s=n.getUTCHours().toString(),a=n.getUTCMinutes().toString().padStart(2,"0"),i=n.getUTCMinutes().toString(),l=n.getUTCSeconds().toString().padStart(2,"0"),d=n.getUTCSeconds().toString(),_=n.getUTCMilliseconds().toString().padStart(3,"0"),j=(n.getUTCHours()%12||12).toString(),b=j.padStart(2,"0"),C=n.getUTCHours()>=12?"PM":"AM";return go(t,{HH:r,H:s,hh:b,h:j,mm:a,m:i,ss:l,s:d,S:_,a:C})}function go(e,t){return Object.keys(t).reduce((n,r)=>{const s=new RegExp(`\\b${r}\\b`,"g");return n.replace(s,t[r])},e)}const q={isOnlyNumbers:/^\d+$/,isIPAddress:/^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/,startsWithHttp:/^https?:\/\//,startsWithSlash:/^\//,isAlphanumeric:/^[a-z0-9]+$/i,isAlphanumericWithSpace:/^[a-z0-9_ ]+$/i,isASCII:/^[ -~]+$/,isASCIIorEmpty:/^$|^[ -~]+$/,isNotEmpty:/\S/},ho={isOnlyNumbers:e=>q.isOnlyNumbers.test(e),isIPAddress:e=>q.isIPAddress.test(e),startsWithHttp:e=>q.startsWithHttp.test(e),startsWithSlash:e=>q.startsWithSlash.test(e),isAlphanumeric:e=>q.isAlphanumeric.test(e),isAlphanumericWithSpace:e=>q.isAlphanumericWithSpace.test(e),isASCII:e=>q.isASCII.test(e),isASCIIorEmpty:e=>q.isASCIIorEmpty.test(e),isNotEmpty:e=>q.isNotEmpty.test(e)},_o=e=>{const t=/^#((?:[a-f\d]{1}){3,4})$/i,n=/^#((?:[a-f\d]{2}){3,4})$/i;return t.test(e)||n.test(e)};function oc(e){return e instanceof Error?e.message:String(e)}function bo(e){const t=e.replace(/[a-zA-Z0-9]/g,n=>/[a-zA-Z]/.test(n)?String.fromCharCode((n<="Z"?90:122)>=(n=n.charCodeAt(0)+13)?n:n-26):String.fromCharCode((n<="4"?57:48)>=(n=n.charCodeAt(0)+5)?n:n-10));return e.startsWith("_")?t.replace("_",""):`_${t}`}function Ge(e){return e.startsWith("_")?bo(e):e}function yt(e,t){const{timeStart:n,dayOffset:r,delay:s}=e,{currentDay:a,totalGap:i,isLinkedToLoaded:l,offset:d,mode:_,actualStart:j,plannedStart:b}=t,C=r-a,w=Math.max(0,n+s)+C*Qe;let A=0;_===Z.Relative&&(A=(j??0)+a*Qe-(b??0));const u=w+A,le=u+d;return l?le:i>d?u:le-i}function vo(e,t,n=.5){const r=n,s=1-r;return{red:Math.round(e.red*r+t.red*s),green:Math.round(e.green*r+t.green*s),blue:Math.round(e.blue*r+t.blue*s),alpha:1}}function xt(e){const t=Math.round(e.alpha*255).toString(16).padStart(2,"0"),n=e.red.toString(16).padStart(2,"0"),r=e.green.toString(16).padStart(2,"0"),s=e.blue.toString(16).padStart(2,"0");return"#"+n+r+s+t}function wt(e){if(e.startsWith("#"))return Je(e);const t=e.toLocaleLowerCase();return t in Ze?Je(Ze[t]):null}function Je(e){if(!_o(e))return null;let t=e.toLocaleLowerCase();t=t.replace(/^#/,"");let n=1;if(t.length===8){const l=t.slice(6,8);n=parseInt(l,16)/255,t=t.slice(0,6)}if(t.length===4){const l=t.slice(3,4).repeat(2);n=parseInt(l,16)/255,t=t.slice(0,3)}t.length===3&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]);const r=parseInt(t,16),s=r>>16,a=r>>8&255,i=r&255;return isNaN(s)||isNaN(a)||isNaN(i)||isNaN(n)?null:{red:s,green:a,blue:i,alpha:n}}function yo(e){return(e.red*299+e.green*587+e.blue*114)/1e3>=128}const Ze={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd3"},y=new tn({defaultOptions:{queries:{gcTime:10*Q,networkMode:Ve?"online":"always",refetchOnWindowFocus:!1,retry:(e,t)=>h.isCancel(t)?!1:e<5,retryDelay:e=>Math.min(1e3*2**e,5e3)},mutations:{networkMode:Ve?"online":"always",retry:0}}}),xo=[{url:"timer",label:"Timer"},{url:"backstage",label:"Backstage"},{url:"timeline",label:"Timeline"},{url:"studio",label:"Studio Clock"},{url:"countdown",label:"Countdown"},{url:"info",label:"Project Info"}],St="h:mm:ss a",kt="HH:mm:ss",jt=(e,t)=>rn(e,t),G=nn(()=>({...Wn}),jt),wo=e=>on(G,e,jt);function Ct(e,t){const n=G.getState();n[e]=t,G.setState({...n})}function So(e){const t=G.getState();G.setState({...t,...e})}const f=e=>()=>wo(e),Et={setIdentify:e=>m("client",e),setRedirect:e=>{m("client",e)},setClientName:e=>m("client",e)},rc=f(e=>{var t,n;return{playback:e.timer.playback,selectedEventId:((t=e.eventNow)==null?void 0:t.id)??null,nextEventId:((n=e.eventNext)==null?void 0:n.id)??null}}),sc=f(e=>({blackout:e.message.timer.blackout,blink:e.message.timer.blink,secondarySource:e.message.timer.secondarySource})),ac=f(e=>({text:e.message.timer.text,visible:e.message.timer.visible})),ic=f(e=>({text:e.message.secondary,visible:e.message.timer.secondarySource==="secondary"})),cc=f(e=>{var t,n;return{blink:e.message.timer.blink,blackout:e.message.timer.blackout,phase:e.timer.phase,secondarySource:e.message.timer.secondarySource,showTimerMessage:e.message.timer.visible&&!!e.message.timer.text,timerType:((t=e.eventNow)==null?void 0:t.timerType)??null,countToEnd:((n=e.eventNow)==null?void 0:n.countToEnd)??!1}}),lc={timerText:e=>m("message",{timer:{text:e}}),timerVisible:e=>m("message",{timer:{visible:e}}),secondaryMessage:e=>m("message",{secondary:e}),timerBlink:e=>m("message",{timer:{blink:e}}),timerBlackout:e=>m("message",{timer:{blackout:e}}),timerSecondarySource:e=>m("message",{timer:{secondarySource:e}})},uc=f(e=>({playback:e.timer.playback,selectedEventIndex:e.rundown.selectedEventIndex,numEvents:e.rundown.numEvents,timerPhase:e.timer.phase})),dc={start:()=>m("start",void 0),pause:()=>m("pause",void 0),roll:()=>m("roll",void 0),startNext:()=>m("start","next"),previous:()=>{m("load","previous")},next:()=>{m("load","next")},stop:()=>{m("stop",void 0)},reload:()=>{m("reload",void 0)},addTime:e=>{m("addtime",e)}},mc=f(e=>({aux1:e.auxtimer1.current,aux2:e.auxtimer2.current,aux3:e.auxtimer3.current})),fc=e=>f(t=>e===1?t.auxtimer1.current:e===2?t.auxtimer2.current:t.auxtimer3.current)(),pc=e=>f(t=>e===1?{playback:t.auxtimer1.playback,direction:t.auxtimer1.direction}:e===2?{playback:t.auxtimer2.playback,direction:t.auxtimer2.direction}:{playback:t.auxtimer3.playback,direction:t.auxtimer3.direction})(),gc={start:e=>m("auxtimer",{[e]:V.Start}),pause:e=>m("auxtimer",{[e]:V.Pause}),stop:e=>m("auxtimer",{[e]:V.Stop}),setDirection:(e,t)=>m("auxtimer",{[e]:{direction:t}}),setDuration:(e,t)=>m("auxtimer",{[e]:{duration:t}})},hc=f(e=>{var t;return((t=e.eventNow)==null?void 0:t.id)??null}),_c=f(e=>{var t;return((t=e.groupNow)==null?void 0:t.id)??null}),bc={loadEvent:e=>m("load",{id:e}),startEvent:e=>m("start",{id:e}),start:()=>m("start",void 0),pause:()=>m("pause",void 0)},vc=f(e=>({...e.timer})),yc=f(e=>e.clock),xc=f(e=>{var t;return{id:((t=e.eventFlag)==null?void 0:t.id)??null,expectedStart:e.offset.expectedFlagStart}}),wc=f(e=>{var t,n;return{current:e.timer.current,duration:e.timer.duration,timeWarning:((t=e.eventNow)==null?void 0:t.timeWarning)??null,timeDanger:((n=e.eventNow)==null?void 0:n.timeDanger)??null}}),ko=f(e=>({offset:e.offset.mode===Z.Absolute?e.offset.absolute:e.offset.relative,mode:e.offset.mode,currentDay:e.rundown.currentDay??0,actualStart:e.rundown.actualStart,plannedStart:e.rundown.plannedStart,clock:e.clock})),jo=f(e=>e.ping>0),Sc=f(e=>e.offset.mode),kc=e=>m("offsetmode",e),jc=f(e=>e.timer.playback),Cc=f(e=>({plannedStart:e.rundown.plannedStart,actualStart:e.rundown.actualStart,plannedEnd:e.rundown.plannedEnd})),Ec=f(e=>e.offset.expectedRundownEnd),Nc=f(e=>({numEvents:e.rundown.numEvents,selectedEventIndex:e.rundown.selectedEventIndex})),Ic=f(e=>({offset:e.offset.mode===Z.Absolute?e.offset.absolute:e.offset.relative,playback:e.timer.playback})),Tc=f(e=>({clock:e.clock,mode:e.offset.mode,groupExpectedEnd:e.offset.expectedGroupEnd,actualGroupStart:e.rundown.actualGroupStart??0,currentDay:e.rundown.currentDay??0,playback:e.timer.playback})),Pc=f(e=>({clock:e.clock,mode:e.offset.mode,actualStart:e.rundown.actualStart??0,plannedStart:e.rundown.plannedStart??0,currentDay:e.rundown.currentDay??0,playback:e.timer.playback})),Rc=f(e=>{var t,n;return{eventNext:e.eventNext,eventNow:e.eventNow,message:e.message,time:e.timer,clock:e.clock,timerTypeNow:((t=e.eventNow)==null?void 0:t.timerType)??ne.CountDown,countToEndNow:((n=e.eventNow)==null?void 0:n.countToEnd)??!1,auxTimer:{aux1:e.auxtimer1.current,aux2:e.auxtimer2.current,aux3:e.auxtimer3.current}}}),$c=f(e=>({playback:e.timer.playback,current:e.timer.current,clock:e.clock})),Dc=f(e=>{var t;return{eventNext:e.eventNext,eventNow:e.eventNow,rundown:e.rundown,selectedEventId:((t=e.eventNow)==null?void 0:t.id)??null,time:e.timer}}),Ac=f(e=>({clock:e.clock,playback:e.timer.playback})),qc=f(e=>({eventNext:e.eventNext,eventNow:e.eventNow,message:e.message,time:e.timer,offset:e.offset.mode===Z.Absolute?e.offset.absolute:e.offset.relative,rundown:e.rundown,expectedRundownEnd:e.offset.expectedRundownEnd}));function Co(){const e=new Date;let t=e.getHours()*be;return t+=e.getMinutes()*Q,t+=e.getSeconds()*re,t+=e.getMilliseconds(),t}function Eo(){return new URL(document.location.href).searchParams.get("timeformat")}function No(){const e=y.getQueryData(Le);return(e==null?void 0:e.timeFormat)??"24"}function Lc(e,t=St,n=kt){return e==="12"?t:n}function Io(e,t){const n=Eo();return n||(No()==="12"?e:t)}const Oc=(e,t,n=Io)=>{if(e===null)return"...";const r=n((t==null?void 0:t.format12)??St,(t==null?void 0:t.format24)??kt),s=po(Math.abs(e),r);return`${e<0?"-":""}${s}`};function Uc(e,t=!0){if(e<=0)return"0m";const n=Math.floor(e/be),r=Math.floor(e%be/Q);let s="";if(n>0&&(s+=`${n}h`),r>0&&(s+=`${r}m`),!t){const i=e%Q/re,l=Math.min(59,Math.ceil(i));l>0&&(s+=`${l}s`)}return s}function Fc(e,t){const{offset:n,currentDay:r,mode:s,actualStart:a,plannedStart:i,clock:l}=ko();return e===null?0:yt({...e},{...t,currentDay:r,offset:n,mode:s,actualStart:a,plannedStart:i})-l}function Mc(e,t){if(e===null)return{expectedStart:0,timeToStart:0,expectedEnd:0,plannedEnd:0};const n=yt({timeStart:e.timeStart,delay:e.delay,dayOffset:e.dayOffset},{totalGap:e.totalGap,isLinkedToLoaded:e.isLinkedToLoaded,...t}),r=e.timeStart+e.duration+e.delay;return{expectedStart:n,timeToStart:n-t.clock,expectedEnd:e.countToEnd?Math.max(n+e.duration,r):n+e.duration,plannedEnd:r}}const Fe=sn(()=>({logs:[]})),To=()=>an(Fe),Nt=e=>Fe.setState(t=>({logs:[e,...t.logs]})),Po=()=>Fe.setState({logs:[]});function Ro(e){var t,n;if(h.isAxiosError(e)){const r=((t=e.response)==null?void 0:t.statusText)??"";let s=((n=e.response)==null?void 0:n.data)??"";return typeof s=="object"&&("message"in s?s=JSON.stringify(s.message):s=JSON.stringify(s)),`${r}: ${s}`}else return e instanceof Error?e.message:typeof e!="string"?JSON.stringify(e):e}function zc(e){return e instanceof Error?e.message:typeof e!="string"?JSON.stringify(e):e}function Bc(e,t){const n=`${e}: ${Ro(t)}`;Nt({id:uo(),origin:"SERVER",time:fo(Co()),level:ht.Error,text:n})}async function Xe(){await y.invalidateQueries()}function Wc(e,t){return new Blob([e],{type:t})}function Vc(e,t){const n=URL.createObjectURL(e),r=document.createElement("a");r.setAttribute("href",n),r.setAttribute("download",t),document.body.appendChild(r),r.click(),URL.revokeObjectURL(n)}function $o(e,t){const n=localStorage.getItem(e);return n?n==="true":(localStorage.setItem(e,String(t)),t)}function Do(e){return K?`${K}-${e}`:e}const It=Do("client-name");function Ao(e){localStorage.setItem(It,e)}const S=ye(e=>({name:localStorage.getItem(It)??void 0,setName:t=>e(()=>(Ao(t),{name:t})),id:"",setId:t=>e({id:t}),redirect:"",setRedirect:t=>e({redirect:t}),clients:{},setClients:t=>e({clients:t})}));function qo(){return S.getState().name}function Ye(e){S.getState().setName(e)}function Lo(e){S.getState().setId(e)}function et(){return S.getState().id}function Oo(e){S.getState().setRedirect(e)}function Uo(e){return S.getState().setClients(e)}const Fo=ye(e=>({showDialog:null,clearDialog:()=>e({showDialog:null}),setDialog:t=>e({showDialog:t})}));function Tt(e){Fo.getState().setDialog(e)}let R=null,O=null;const Y={reconnectBaseInterval:1e3,reconnectMaxInterval:3e4,reconnectMinInterval:500,reconnectJitter:.25,offlineAttemptsThreshold:2};let $e=!1,H=0;const Pt=()=>{R=new WebSocket(Gn);const e=qo();R.onopen=()=>{const t=$e;O&&(clearTimeout(O),O=null),$e=!0,H=0,m(N.ClientSet,{type:"ontime",origin:window.location.origin,path:window.location.pathname+window.location.search,name:e}),t&&Xe(),tt(!0)},R.onclose=()=>{console.warn("WebSocket disconnected"),O&&(clearTimeout(O),O=null);const t=Math.min(Y.reconnectBaseInterval*2**H,Y.reconnectMaxInterval),n=t*Y.reconnectJitter*(Math.random()*2-1),r=Math.max(Y.reconnectMinInterval,Math.round(t+n));O=setTimeout(()=>{O=null,H>Y.offlineAttemptsThreshold&&tt(!1),console.warn(`WebSocket: reconnecting now (#${H+1}, waited ${r}ms)`),R&&R.readyState===WebSocket.CLOSED&&(H+=1,Pt())},r)},R.onerror=t=>{console.error("WebSocket error:",t)},R.onmessage=async t=>{try{const n=JSON.parse(t.data),{tag:r,payload:s}=n;if(!r)return;switch(r){case N.Pong:{const a=(new Date().getTime()-new Date(s).getTime())*.5;Ct("ping",a);break}case N.ClientInit:{Lo(s.clientId),e||Ye(s.clientName);break}case N.ClientRename:{const a=et();s.target===a&&Ye(s.name);break}case N.ClientRedirect:{const a=et();s.target===a&&Oo(s.path);break}case N.ClientList:{Uo(s);break}case N.Dialog:{s.dialog==="welcome"&&Tt("welcome");break}case N.Log:{Nt(s);break}case N.RuntimeData:{So(s);break}case N.Refetch:{const{target:a,revision:i}=s;switch(a){case P.All:Xe();break;case P.CustomFields:y.invalidateQueries({queryKey:Ke});break;case P.ProjectData:y.invalidateQueries({queryKey:eo});break;case P.Report:y.invalidateQueries({queryKey:to});break;case P.Rundown:if(i===y.getQueryData(He).revision)break;y.invalidateQueries({queryKey:He}),y.invalidateQueries({queryKey:Ke});break;case P.UrlPresets:y.invalidateQueries({queryKey:oe});break;case P.ViewSettings:y.invalidateQueries({queryKey:_e});break;case P.Translation:y.invalidateQueries({queryKey:Oe});break;case P.Settings:y.invalidateQueries({queryKey:Le});break;default:break}break}default:break}}catch{}}};function m(e,t){R&&R.readyState===WebSocket.OPEN&&R.send(JSON.stringify({tag:e,payload:t}))}function tt(e){Ct("ping",e?1:-1)}const Mo="_errorContainer_35w9k_17",zo="_error_35w9k_17",Bo="_report_35w9k_30",ue={errorContainer:Mo,error:zo,report:Bo};class nt extends ct.Component{constructor(n){super(n);Be(this,"reportContent","");this.state={error:null,errorInfo:null}}static getDerivedStateFromError(n){return{errorMessage:n.toString()}}componentDidCatch(n,r){this.setState({error:n,errorInfo:r}),this.reportContent=`${n} ${r.componentStack}`;const s=G.getState();s.ping<0||cn(a=>{a.setExtras({error:n,store:s,hasSocket:{hasConnected:$e,reconnectAttempts:H}});const i=ln(n);this.setState({eventId:i,info:r})})}render(){return this.state.errorMessage?o.jsx("div",{className:ue.errorContainer,"data-testid":"error-container",children:o.jsxs("div",{children:[o.jsx("p",{className:ue.error,children:": /"}),o.jsx("p",{children:"Something went wrong."}),o.jsx("a",{className:ue.report,href:`mailto:mail@getontime.no?subject=Error%20Report&body=${encodeURIComponent(this.reportContent)}`,children:"Report error"}),o.jsx("div",{role:"button",className:ue.report,onClick:()=>{var n;((n=window==null?void 0:window.process)==null?void 0:n.type)==="renderer"?window.ipcRenderer.send("reload"):window.location.reload()},children:"Reload interface"})]})}):this.props.children}}const Wo="_overlay_9onby_17",Vo="_name_9onby_35",Ko="_message_9onby_43",Ce={overlay:Wo,name:Vo,message:Ko};function Ho(){var s;const e=S(a=>a.clients),t=S(a=>a.id);if(!((s=e[t])==null?void 0:s.identify))return null;const r=document.getElementById("identify-portal");return r?un.createPortal(o.jsx(Qo,{}),r):null}function Qo(){var l;const e=S(d=>d.clients),t=S(d=>d.id),n=S(d=>d.name),r=c.useRef(null),{setIdentify:s}=Et,a=(l=e[t])==null?void 0:l.identify,i=c.useCallback(()=>{r.current&&clearTimeout(r.current),s({target:t,identify:!1})},[t,s]);return c.useEffect(()=>(a&&(r.current=setTimeout(i,Q)),()=>{r.current&&clearTimeout(r.current)}),[a,t,s,i]),o.jsxs("div",{className:Ce.overlay,"data-testid":"identify-overlay",onClick:i,children:[o.jsx("div",{className:Ce.name,children:n}),o.jsx("div",{className:Ce.message,children:"Click to close"})]})}const ce=`${ie}/settings`;async function Go(e){return(await h.get(ce,{signal:e==null?void 0:e.signal})).data}async function Kc(e){return h.post(ce,e)}async function Hc(e){h.post(`${ce}/welcomedialog`,{show:e})}async function Qc(){return(await h.get(`${ce}/serverport`)).data}async function Gc(e){return h.post(`${ce}/serverport`,{serverPort:e})}const Jo={version:"4.0.0",editorKey:null,operatorKey:null,timeFormat:"24",language:"en"};function Rt(){const{data:e,status:t,isFetching:n,isError:r,refetch:s}=se({queryKey:Le,queryFn:({signal:a})=>Go({signal:a}),placeholderData:(a,i)=>a,select:a=>{const i={...a};return a.editorKey&&(i.editorKey=Ge(a.editorKey)),a.operatorKey&&(i.operatorKey=Ge(a.operatorKey)),i}});return{data:e??Jo,status:t,isFetching:n,isError:r,refetch:s}}const Zo=c.createContext({editorAuth:!1,operatorAuth:!1,validate:()=>!1}),de={editor:"ontime-editor-entry",operator:"ontime-operator-entry"},Xo=({children:e})=>{const{status:t,data:n}=Rt(),[r,s]=c.useState(!0),[a,i]=c.useState(!0);c.useEffect(()=>{if(t==="pending")return;const d=sessionStorage.getItem(de.editor);d&&d===n.editorKey?s(!0):s(n.editorKey==null||n.editorKey==="");const _=sessionStorage.getItem(de.operator);_&&_===n.operatorKey?i(!0):i(n.operatorKey==null||n.operatorKey==="")},[n,t]);const l=c.useCallback((d,_)=>{function j(b,C){return C==null||C===""||b===C}if(_==="editor"){const b=j(d,n.editorKey);return b&&sessionStorage.setItem(de.editor,d),s(b),b}else if(_==="operator"){const b=j(d,n.operatorKey);return b&&sessionStorage.setItem(de.operator,d),i(b),b}return!1},[n]);return o.jsx(Zo.Provider,{value:{editorAuth:r,operatorAuth:a,validate:l},children:e})},$t=c.createContext(void 0),Dt=typeof window<"u"&&"wakeLock"in navigator;function Yo(){const{keepAwake:e}=At(),t=c.useRef(null);c.useEffect(()=>{const n=()=>{t.current&&t.current.release().finally(()=>{t.current=null})},r=()=>{const a=t.current;if(!a||a.released){if(t.current=null,!Dt)return;navigator.wakeLock.request("screen").then(i=>{t.current=i}).catch(console.error)}},s=new AbortController;return e?(r(),document.addEventListener("visibilitychange",()=>{t.current!==null&&document.visibilityState==="visible"&&r()},{signal:s.signal})):n(),()=>{s.abort(),n()}},[e])}const ve="keep-awake";function er(e,t){return(t==null?void 0:t.has(ve))||e.has(ve)}function At(){const[e,t]=dn(),n=c.use($t),r=c.useMemo(()=>{const a=n?new URLSearchParams(n.search):void 0;return er(e,a)},[n,e]),s=c.useCallback(()=>{t(a=>(r?a.delete(ve):a.set(ve,"1"),a))},[r,t]);return{keepAwake:r,toggleKeepAwake:s}}function tr(){return Yo(),null}const Se=`${ie}/assets`;async function Jc(e){return(await h.get(`${Se}/css`,{signal:e==null?void 0:e.signal})).data}async function Zc(e){await h.post(`${Se}/css`,{css:e})}async function Xc(){return(await h.post(`${Se}/css/restore`)).data}async function nr(e){return(await h.get(so,{signal:e==null?void 0:e.signal})).data}async function or(e){await h.post(`${Se}/translations`,{translation:e}),await y.invalidateQueries({queryKey:Oe})}const Me=12e4,Yc={cuesheetMode:"cuesheet-mode",editorMode:"editor-mode"};var rr=(e=>(e.Run="run",e.Edit="edit",e))(rr||{});function sr(){const{data:e,status:t,refetch:n}=se({queryKey:Oe,queryFn:({signal:r})=>nr({signal:r}),placeholderData:(r,s)=>r,refetchInterval:Me});return{data:e??we,status:t,refetch:n}}const ar={"common.expected_finish":"Erwartetes Ende","common.minutes":"min","common.seconds":"sek","common.now":"Jetzt","common.next":"Nächste","common.scheduled_start":"Geplanter beginn","common.scheduled_end":"Geplantes ende","common.expected_start":"Erwartetes beginn","common.expected_end":"Erwartetes ende","common.stage_timer":"Bühnen-Timer","common.started_at":"Gestartet am","common.time_now":"Aktuelle Zeit","common.no_data":"Keine Daten","countdown.ended":"Veranstaltung endete um","countdown.running":"Veranstaltung läuft","countdown.loaded":"Veranstaltung geladen","countdown.select_event":"Wählen Sie eine Veranstaltung aus, um sie zu verfolgen","countdown.to_start":"Zeit bis zum Start","countdown.waiting":"Warten auf den Veranstaltungsbeginn","countdown.overtime":"überfällig","countdown.all_have_finished":"Alle ausgewählten Veranstaltungen sind beendet","timeline.live":"live","timeline.done":"Beendet","timeline.due":"fällig","timeline.followedby":"Gefolgt von","project.title":"Titel","project.description":"Beschreibung","project.info":"Projektinfo","project.url":"Projekt-URL"},ir={"common.expected_finish":"Finalización esperada","common.minutes":"min","common.seconds":"sec","common.now":"Ahora","common.next":"Siguiente","common.scheduled_start":"Inicio programado","common.scheduled_end":"Fin programado","common.expected_start":"Inicio previsto","common.expected_end":"Fin previsto","common.stage_timer":"Temporizador de presentador","common.started_at":"Iniciado en","common.time_now":"Ahora","common.no_data":"Sin datos","countdown.ended":"Evento finalizado a las","countdown.running":"Evento en curso","countdown.loaded":"Evento está cargado","countdown.select_event":"Seleccionar un evento para seguir","countdown.to_start":"Tiempo para comenzar","countdown.waiting":"Esperando el inicio del evento","countdown.overtime":"en tiempo extra","countdown.all_have_finished":"Todos los eventos seleccionados han terminado","timeline.live":"live","timeline.done":"Terminado","timeline.due":"pendiente","timeline.followedby":"Seguido por","project.title":"Título","project.description":"Descripción","project.info":"Información del proyecto","project.url":"URL del proyecto"},cr={"common.expected_finish":"Fin estimée à","common.minutes":"min","common.seconds":"sec","common.now":"Maintenant","common.next":"A suivre","common.scheduled_start":"Début prévu","common.scheduled_end":"Fin prévue","common.expected_start":"Début projeté","common.expected_end":"Fin projetée","common.stage_timer":"Minuteur de scène","common.started_at":"Commencé à","common.time_now":"Heure","common.no_data":"Aucune donnée","countdown.ended":"Évènement terminé à","countdown.running":"Évènement en cours","countdown.loaded":"Évènement chargé","countdown.select_event":"Sélectionnez un évènement à suivre","countdown.to_start":"Évènement commence dans","countdown.waiting":"En attente du début de l’évènement","countdown.overtime":"en dépassement","countdown.all_have_finished":"Tous les évènements sélectionnés ont terminé","timeline.live":"live","timeline.done":"Terminé","timeline.due":"dû","timeline.followedby":"Suivi de","project.title":"Titre","project.description":"Description","project.info":"Informations du projet","project.url":"URL du projet"},lr={"common.expected_finish":"Fine Prevista","common.minutes":"min","common.seconds":"sec","common.now":"Adesso","common.next":"Prossimo","common.scheduled_start":"Inizio programmato","common.scheduled_end":"Fine programmata","common.expected_start":"Inizio previsto","common.expected_end":"Fine prevista","common.stage_timer":"Orologio Palco","common.started_at":"Iniziato Alle","common.time_now":"Ora attuale","common.no_data":"Nessun dato disponibile","countdown.ended":"Evento finito alle","countdown.running":"Evento in corso","countdown.loaded":"Evento caricato","countdown.select_event":"Seleziona un evento da seguire","countdown.to_start":"Tempo alla partenza","countdown.waiting":"In attesa dell'inizio dell'evento","countdown.overtime":"in ritardo","countdown.all_have_finished":"Tutti gli eventi selezionati sono finiti","timeline.live":"live","timeline.done":"Terminato","timeline.due":"previsto","timeline.followedby":"Seguito da","project.title":"Titolo","project.description":"Descrizione","project.info":"Informazioni sul progetto","project.url":"URL del progetto"},ur={"common.expected_finish":"Término esperado","common.minutes":"min","common.seconds":"sec","common.now":"Agora","common.next":"Próximo","common.scheduled_start":"Início programado","common.scheduled_end":"Fim programado","common.expected_start":"Início previsto","common.expected_end":"Fim previsto","common.stage_timer":"Temporizador do presentador","common.started_at":"Iniciado em","common.time_now":"Hora atual","common.no_data":"Sem dados","countdown.ended":"Evento encerrado às","countdown.running":"Evento em andamento","countdown.loaded":"Evento carregado","countdown.select_event":"Selecione um evento para acompanhar","countdown.to_start":"Tempo para iniciar","countdown.waiting":"Aguardando o início do evento","countdown.overtime":"em tempo extra","countdown.all_have_finished":"Todos os eventos selecionados terminaram","timeline.live":"live","timeline.done":"Concluído","timeline.due":"Pendente","timeline.followedby":"Seguido por","project.title":"Título","project.description":"Descrição","project.info":"Informações do projeto","project.url":"URL do projeto"},Ee={en:we,es:ir,fr:cr,it:lr,de:ar,pt:ur},qt=c.createContext({userTranslation:we,getLocalizedString:()=>"",postUserTranslation:async()=>{}}),dr=({children:e})=>{const{data:t}=Rt(),{data:n}=sr(),r=c.useCallback((a,i=(t==null?void 0:t.language)||"en")=>{if(i in Ee){if(a in Ee[i])return Ee[i][a]}else if(i==="custom")return n[a];return we[a]},[t==null?void 0:t.language,n]),s={userTranslation:n,getLocalizedString:r,postUserTranslation:or};return o.jsx(qt.Provider,{value:s,children:e})},el=()=>{const{userTranslation:e,getLocalizedString:t,postUserTranslation:n}=c.useContext(qt);return{userTranslation:e,getLocalizedString:t,postUserTranslation:n}},mr=ye(e=>({isOpen:!1,open:()=>e({isOpen:!0}),close:()=>e({isOpen:!1}),toggle:()=>e(t=>({isOpen:!t.isOpen}))}));function fr(e,t){let n;return(...r)=>{n||(n=setTimeout(()=>{n=null,e(...r)},t))}}const pr=3e3,Lt=(e=!1)=>{const[t,n]=c.useState(e);return c.useEffect(()=>{let r=null;const a=fr(()=>{n(!0),r&&clearTimeout(r),r=setTimeout(()=>n(!1),pr)},1e3);return a(),document.addEventListener("mousemove",a),document.addEventListener("keydown",a),()=>{document.removeEventListener("mousemove",a),document.removeEventListener("keydown",a),r&&clearTimeout(r)}},[]),t},gr={red:26,green:26,blue:26},tl=e=>{if(!e)return{backgroundColor:"#1a1a1a",color:"#fffffa"};const t=wt(e);if(!t)return{backgroundColor:"#1a1a1a",color:"#fffffa"};const n=vo(gr,t,1-t.alpha),r=yo(n)?"black":"#fffffa";return{backgroundColor:xt(n),color:r}},k=e=>e.filter(Boolean).join(" "),nl="–",ol="––:––:––",rl="––:––";function sl(e,t){const n=wt(e);return n?(n.alpha=t,xt(n)):e}const hr="_blink_bz8cs_1",_r="_fourtyfive_bz8cs_13",br="_mirror_bz8cs_17",vr="_subtle_bz8cs_21",yr="_primary_bz8cs_51",xr="_destructive_bz8cs_66",wr="_ghosted_bz8cs_92",Sr="_baseIconButton_bz8cs_140",kr="_small_bz8cs_157",jr="_medium_bz8cs_162",Cr="_large_bz8cs_167",Er="_xlarge_bz8cs_172",Ne={blink:hr,fourtyfive:_r,mirror:br,subtle:vr,"subtle-white":"_subtle-white_bz8cs_35",primary:yr,destructive:xr,"subtle-destructive":"_subtle-destructive_bz8cs_79",ghosted:wr,"ghosted-white":"_ghosted-white_bz8cs_108","ghosted-destructive":"_ghosted-destructive_bz8cs_124",baseIconButton:Sr,small:kr,medium:jr,large:Cr,xlarge:Er},J=c.forwardRef(({className:e,children:t,variant:n="subtle",size:r="medium",...s},a)=>o.jsx("button",{ref:a,className:k([Ne.baseIconButton,Ne[n],Ne[r],e]),type:"button",...s,children:t}));J.displayName="IconButton";const Nr="_fadeable_1nsno_17",Ir="_hidden_1nsno_22",Tr="_buttonContainer_1nsno_27",Ie={fadeable:Nr,hidden:Ir,buttonContainer:Tr};function Pr({toggleMenu:e,toggleSettings:t}){const n=Lt(!0);return o.jsxs("div",{id:"fadeable-navigation",className:k([Ie.fadeable,Ie.buttonContainer,!n&&Ie.hidden]),children:[e&&o.jsx(J,{variant:"subtle-white",size:"xlarge",onClick:e,"aria-label":"toggle menu","data-testid":"navigation__toggle-menu",children:o.jsx(mn,{})}),t&&o.jsx(J,{variant:"subtle-white",size:"xlarge",onClick:t,"aria-label":"toggle settings","data-testid":"navigation__toggle-settings",children:o.jsx(fn,{})})]})}const Rr="_fadeable_1y6b8_17",$r="_hidden_1y6b8_22",Dr="_lockIcon_1y6b8_27",Te={fadeable:Rr,hidden:$r,lockIcon:Dr};function Ar(){const e=Lt();return o.jsx("div",{className:k([Te.fadeable,Te.lockIcon,!e&&Te.hidden]),children:o.jsx(W,{})})}function qr(){const{width:e}=lt();return c.useMemo(()=>e<1300,[e])}const Lr=ye()(e=>({mirror:$o("view-mirror",!1),toggleMirror:t=>e(n=>{const r=typeof t>"u"?!n.mirror:t;return localStorage.setItem("view-mirror",String(r)),{mirror:r}})})),Or="_blink_1erat_1",Ur="_fourtyfive_1erat_13",Fr="_mirror_1erat_17",Mr="_subtle_1erat_21",zr="_primary_1erat_51",Br="_destructive_1erat_66",Wr="_ghosted_1erat_92",Vr="_baseButton_1erat_140",Kr="_loading_1erat_161",Hr="_content_1erat_164",Qr="_loadingOverlay_1erat_174",Gr="_spinner_1erat_180",Jr="_spin_1erat_180",Zr="_small_1erat_190",Xr="_medium_1erat_195",Yr="_large_1erat_200",es="_xlarge_1erat_205",ts="_fluid_1erat_210",U={blink:Or,fourtyfive:Ur,mirror:Fr,subtle:Mr,"subtle-white":"_subtle-white_1erat_35",primary:zr,destructive:Br,"subtle-destructive":"_subtle-destructive_1erat_79",ghosted:Wr,"ghosted-white":"_ghosted-white_1erat_108","ghosted-destructive":"_ghosted-destructive_1erat_124",baseButton:Vr,loading:Kr,content:Hr,loadingOverlay:Qr,spinner:Gr,spin:Jr,small:Zr,medium:Xr,large:Yr,xlarge:es,fluid:ts},T=c.forwardRef(({className:e,children:t,variant:n="subtle",size:r="medium",fluid:s,loading:a,...i},l)=>o.jsxs("button",{ref:l,className:k([U.baseButton,U[n],U[r],s&&U.fluid,a&&U.loading,e]),type:"button",disabled:a||i.disabled,...i,children:[o.jsx("span",{className:U.content,children:t}),a&&o.jsx("div",{className:U.loadingOverlay,children:o.jsx(pn,{className:U.spinner})})]}));T.displayName="Button";const ns="_dialog_qv1xq_17",os="_backdrop_qv1xq_32",rs="_title_qv1xq_42",ss="_body_qv1xq_51",as="_footer_qv1xq_59",ee={dialog:ns,backdrop:os,title:rs,body:ss,footer:as};function is({isOpen:e,title:t,showCloseButton:n,showBackdrop:r,bodyElements:s,footerElements:a,onClose:i}){return o.jsx(ut,{open:e,onOpenChange:l=>{l||i()},children:o.jsxs(dt,{children:[r&&o.jsx(mt,{className:ee.backdrop}),o.jsxs(ft,{className:ee.dialog,children:[o.jsxs("div",{className:ee.title,children:[t,n&&o.jsx(J,{variant:"subtle-white",onClick:i,children:o.jsx(qe,{})})]}),o.jsx("div",{className:ee.body,children:s}),o.jsx("div",{className:ee.footer,children:a})]})]})})}const cs="_blink_1r8lg_1",ls="_fourtyfive_1r8lg_13",us="_input_1r8lg_17",ds="_subtle_1r8lg_47",ms="_ghosted_1r8lg_51",fs="_medium_1r8lg_56",ps="_large_1r8lg_60",gs="_fluid_1r8lg_64",me={blink:cs,fourtyfive:ls,input:us,subtle:ds,ghosted:ms,medium:fs,large:ps,fluid:gs},hs=c.forwardRef(function({className:t,variant:n="subtle",height:r="medium",fluid:s,...a},i){return o.jsx("input",{ref:i,type:"text",autoCorrect:"off",autoComplete:"off",spellCheck:"false",className:k([me.input,me[n],me[r],s&&me.fluid,t]),...a})});function _s({id:e,name:t="",isOpen:n,onClose:r}){const[s,a]=c.useState(t),{setClientName:i}=Et,l=()=>{s!==t&&s!==""&&i({target:e,rename:s}),r()},d=s!==t&&s!=="";return o.jsx(is,{isOpen:n,title:`Rename Client: ${t}`,showCloseButton:!0,onClose:r,bodyElements:o.jsx(hs,{height:"large",placeholder:"New name",value:s,onChange:_=>a(_.target.value)}),footerElements:o.jsxs(o.Fragment,{children:[o.jsx(T,{variant:"subtle",size:"large",onClick:r,children:"Cancel"}),o.jsx(T,{variant:"primary",size:"large",onClick:l,disabled:!d,children:"Submit"})]})})}var it;const De=((it=window.process)==null?void 0:it.type)==="renderer",B=De?window.require("electron").ipcRenderer:null;function Ot(){const e=c.useCallback((t,n)=>{De&&B&&B.send(t,n)},[]);return{isElectron:De,sendToElectron:e}}function al(){const e=ae(),{isElectron:t}=Ot();c.useEffect(()=>(t&&(B.on("request-editor-location",(n,r)=>{e(r,{relative:"route"})}),B.on("dialog",(n,r)=>{r==="welcome"&&Tt("welcome")})),()=>{B==null||B.removeAllListeners()}),[t,e])}function Ut(e){var t;((t=window.process)==null?void 0:t.type)==="renderer"?window.ipcRenderer.send("send-to-link",e):window.open(e)}function bs(e,t,n=X,r=K){t==null||t.preventDefault();const s=new URL(n);s.pathname=r?`${r}/${e}`:e,Ut(s.toString())}function vs(e,t,n=X,r=K){const s=new URL(n);return s.hostname=e,t&&(s.pathname=r?`${r}/${t}`:t),s.toString()}function ys(e){return e.key==="Enter"}function xs(e){return e.key==="Escape"}function il(e,t){xs(e)&&(e.preventDefault(),e.stopPropagation(),t==null||t())}const ws="_link_pmy0j_17",Ss="_current_pmy0j_41",ot={link:ws,current:Ss};function D({active:e,className:t,children:n,onClick:r}){return o.jsx("div",{className:k([ot.link,e&&ot.current,t]),tabIndex:0,role:"button",onClick:r,onKeyDown:s=>{ys(s)&&r()},children:n})}const ks="_linkIcon_1wpyp_17",js={linkIcon:ks};function Pe({current:e,to:t,postAction:n,children:r}){const{isElectron:s}=Ot(),a=ae();return s?o.jsxs(D,{active:e,onClick:()=>{bs(t),n==null||n()},children:[r,o.jsx(pt,{className:js.linkIcon})]}):o.jsx(D,{active:e,onClick:()=>{a(`/${t}`),n==null||n()},children:r})}function Cs(){const{width:e}=lt(),t=gn();return c.useMemo(()=>(t==="ios"||t==="android")&&e<1300,[e,t])}function Es(){const e=ae();return Cs()?o.jsxs(o.Fragment,{children:[o.jsxs(D,{active:location.pathname==="/timercontrol",onClick:()=>e("/timercontrol"),children:[o.jsx(W,{}),"Timer Controls"]}),o.jsxs(D,{active:location.pathname==="/messagecontrol",onClick:()=>e("/messagecontrol"),children:[o.jsx(W,{}),"Message Controls"]}),o.jsxs(D,{active:location.pathname==="/rundown",onClick:()=>e("/rundown"),children:[o.jsx(W,{}),"Rundown"]})]}):o.jsxs(D,{active:location.pathname==="/editor",onClick:()=>e("/editor"),children:[o.jsx(W,{}),"Editor"]})}const Ft=`${ie}/session`;async function Ns(e){return(await h.get(`${Ft}/info`,{signal:e==null?void 0:e.signal})).data}async function cl(e){return(await h.post(`${Ft}/url`,e)).data.url}const Is={networkInterfaces:[],version:"4.0.0",serverPort:4001,publicDir:""};function Ts(){const{data:e,status:t,isError:n,refetch:r,isFetching:s}=se({queryKey:Yn,queryFn:({signal:a})=>Ns({signal:a}),placeholderData:(a,i)=>a,refetchInterval:Me});return{data:e??Is,status:t,isError:n,refetch:r,isFetching:s}}async function Mt(e){var t;await((t=navigator.clipboard)==null?void 0:t.writeText(e))}async function ll(e){try{await Mt(e)}catch{}}const Ps="_blink_1pu1m_1",Rs="_fourtyfive_1pu1m_13",$s="_copytag_1pu1m_17",Ds="_action_1pu1m_22",As="_label_1pu1m_27",qs="_small_1pu1m_38",Ls="_medium_1pu1m_43",Os="_large_1pu1m_48",Us="_copy_1pu1m_17",te={blink:Ps,fourtyfive:Rs,copytag:$s,action:Ds,label:As,small:qs,medium:Ls,large:Os,copy:Us};function Fs({copyValue:e,disabled:t,size:n="medium",children:r,onClick:s}){const[a,i]=c.useState(!1),l=c.useRef(null),d=async()=>{try{await Mt(e),i(!0),l.current&&clearTimeout(l.current),l.current=setTimeout(()=>i(!1),2e3)}catch{}};return o.jsxs("div",{className:te.copytag,children:[s!==void 0?o.jsx(T,{className:te.action,size:n,onClick:s,disabled:t,children:r}):o.jsx("div",{className:k([te.label,te[n]]),children:r}),o.jsx(J,{className:te.copy,variant:"primary",size:n,onClick:d,disabled:t,children:a?o.jsx(hn,{}):o.jsx(_n,{})})]})}const Ms="_header_elv9y_17",zs="_interfaces_elv9y_23",Bs="_interfaceCopy_elv9y_30",Ws="_goIcon_elv9y_35",fe={header:Ms,interfaces:zs,interfaceCopy:Bs,goIcon:Ws};function Vs({currentLocation:e}){var n;const{data:t}=Ts();return t.networkInterfaces.length<2?null:o.jsxs(o.Fragment,{children:[o.jsx("div",{className:fe.header,children:"Accessible on external networks"}),o.jsx("div",{className:fe.interfaces,children:(n=t==null?void 0:t.networkInterfaces)==null?void 0:n.map(r=>{if(r.name==="localhost")return null;const s=vs(r.address,e);return o.jsx(Fs,{copyValue:s,onClick:()=>Ut(s),size:"small",children:o.jsxs("span",{className:fe.interfaceCopy,children:[r.address," ",o.jsx(pt,{className:fe.goIcon})]})},r.name)})})]})}const Ks="_separator_1f3q6_17",Hs="_backdrop_1f3q6_21",Qs="_drawer_1f3q6_31",Gs="_header_1f3q6_60",Js="_body_1f3q6_70",Zs="_note_1f3q6_75",F={separator:Ks,backdrop:Hs,drawer:Qs,header:Gs,body:Js,note:Zs},Xs=c.memo(Ys);function Ys({isOpen:e,onClose:t}){const n=S(w=>w.id),r=S(w=>w.name),s=qr(),[a,i]=gt(!1),{fullscreen:l,toggle:d}=bn(),{mirror:_,toggleMirror:j}=Lr(),{keepAwake:b,toggleKeepAwake:C}=At(),x=xe();return o.jsx(ut,{open:e,onOpenChange:w=>{w||t()},children:o.jsxs(dt,{children:[o.jsx(mt,{className:F.backdrop}),o.jsx(_s,{id:n,name:r,isOpen:a,onClose:i.close}),o.jsxs(ft,{className:F.drawer,children:[o.jsxs("div",{className:F.header,children:[o.jsx(vn,{children:"Ontime"}),o.jsx(J,{variant:"subtle-white",size:"large",onClick:t,children:o.jsx(qe,{})})]}),o.jsxs("div",{className:F.body,children:[Qn&&o.jsxs(D,{active:l,onClick:d,children:["Toggle Fullscreen",l?o.jsx(yn,{}):o.jsx(xn,{})]}),o.jsxs(D,{active:_,onClick:()=>j(),children:["Flip Screen",o.jsx(wn,{}),_&&o.jsx("span",{className:F.note,children:"Active"})]}),Dt&&o.jsxs(D,{active:b,onClick:C,children:["Keep Awake",o.jsx(Sn,{}),b&&o.jsx("span",{className:F.note,children:"Active"})]}),o.jsx(D,{onClick:i.open,children:"Rename Client"}),o.jsx("hr",{className:F.separator}),o.jsx(Es,{}),o.jsxs(Pe,{to:"cuesheet",current:x.pathname==="/cuesheet",postAction:s?t:void 0,children:[o.jsx(W,{}),"Cuesheet"]}),o.jsxs(Pe,{to:"op",current:x.pathname==="/op",postAction:s?t:void 0,children:[o.jsx(W,{}),"Operator"]}),o.jsx("hr",{className:F.separator}),xo.map(w=>o.jsx(Pe,{to:w.url,current:x.pathname===`/${w.url}`,postAction:s?t:void 0,children:w.label},w.url))]}),Hn&&o.jsx("div",{children:o.jsx(Vs,{currentLocation:x.pathname})})]})]})})}const $=c.memo(ea);function ea({isNavigationLocked:e,suppressSettings:t}){const[n,r]=gt(),{open:s}=mr();return kn([["Space",()=>{e||r.toggle()},{preventDefault:!0}],["mod + ,",()=>{t||s()},{preventDefault:!0}]]),e&&t?o.jsx(Ar,{}):o.jsxs(o.Fragment,{children:[o.jsx(Pr,{toggleMenu:e?void 0:r.toggle,toggleSettings:t?void 0:s}),!e&&o.jsx(Xs,{isOpen:n,onClose:r.close})]})}const ta=()=>{const e=ae(),{pathname:t,search:n}=xe(),{redirect:r,setRedirect:s}=S(jn(i=>({redirect:i.redirect,setRedirect:i.setRedirect}))),a=jo();c.useEffect(()=>{a&&m(N.ClientSetPath,t+n)},[t,n,a]),c.useEffect(()=>{r!==""&&(s(""),r!==t+n&&e(r,{replace:!0}))},[e,t,r,n,s])},ke=`${ie}/url-presets`;async function na(e){return(await h.get(ke,{signal:e==null?void 0:e.signal})).data}async function oa(e){return(await h.post(ke,e)).data}async function ra(e,t){return(await h.put(`${ke}/${e}`,t)).data}async function sa(e){return(await h.delete(`${ke}/${e}`)).data}function ze({skip:e=!1}={}){const{data:t,status:n,isError:r,refetch:s}=se({queryKey:oe,queryFn:({signal:a})=>na({signal:a}),placeholderData:(a,i)=>a,refetchInterval:Me,enabled:!e});return{data:t??[],status:n,isError:r,refetch:s}}function ul(e){const{data:t}=ze();return{viewPresets:c.useMemo(()=>t.filter(r=>r.target===e),[t,e])}}function dl(){const e=Cn(),t=ge({mutationFn:oa,onSuccess:s=>{e.setQueryData(oe,s)}}),n=ge({mutationFn:({alias:s,data:a})=>ra(s,a),onSuccess:s=>{e.setQueryData(oe,s)}}),r=ge({mutationFn:sa,onSuccess:s=>{e.setQueryData(oe,s)}});return{addPreset:t.mutateAsync,updatePreset:(s,a)=>n.mutateAsync({alias:s,data:a}),deletePreset:r.mutateAsync,isMutating:t.isPending||n.isPending||r.isPending,isMutationError:t.isError||n.isError||r.isError}}function aa(e,t){if(ma(e))return null;const n=`${e.pathname}${e.search}`.substring(1),r=zt(e),s=new URLSearchParams(e.search),a=s.get("token");for(const i of t){if(!i.enabled)continue;const l=new URLSearchParams(i.search),d=s.get("n")==="1"||l.get("n")==="1";if(i.alias===r||i.target===r){const _=la(i)?ca(i.alias,d,a):ia(i.target,i.search,i.alias,d,a);return ua(n,_)?null:_}}return null}function zt(e){const n=e.pathname.split("?")[0].split("/").filter(Boolean);return n[0]==="preset"&&n.length>1?n[1]:n[n.length-1]||""}function ia(e,t,n,r,s){const a=En(`${e}?${t}`),i=new URLSearchParams(a.search);return i.set("alias",n),r&&i.set("n","1"),s&&i.set("token",s),`${a.pathname}?${i}`.substring(1)}function ca(e,t,n){const r=new URLSearchParams;t&&r.set("n","1"),n&&r.set("token",n);const s=`preset/${e}`,a=r.toString();return a?`${s}?${a}`:s}function la(e){return e.target===I.Cuesheet}function ua(e,t){const n=new URL(e,document.location.origin),r=new URL(t,document.location.origin);return n.pathname!==r.pathname?!1:n.pathname.startsWith("/preset/")?n.searchParams.get("n")===r.searchParams.get("n")&&n.searchParams.get("token")===r.searchParams.get("token"):(n.searchParams.delete("token"),n.searchParams.delete("n"),r.searchParams.delete("token"),r.searchParams.delete("n"),n.searchParams.toString()===r.searchParams.toString())}function ml(e,t){let n=t;ho.startsWithHttp(t.toLowerCase())||(n=`http://${n}`);const r=new URL(n),s=zt(r);if(!da(s))throw new Error(`Invalid target view: ${s}`);return{alias:e,target:s,search:r.searchParams.toString(),enabled:!0}}function da(e){return e!==I.Editor&&Object.values(I).includes(e)}function ma(e){return e.pathname.split("/").filter(Boolean)[0]==="preset"}const fa="_blink_oqrqg_1",pa="_fourtyfive_oqrqg_13",ga="_header_oqrqg_17",ha="_subheader_oqrqg_24",_a="_title_oqrqg_33",ba="_section_oqrqg_43",va="_indent_oqrqg_44",ya="_paragraph_oqrqg_63",xa="_card_oqrqg_67",wa="_highlight_oqrqg_75",Sa="_blockquote_oqrqg_81",ka="_error_oqrqg_87",ja="_pad_oqrqg_93",Ca="_table_oqrqg_99",Ea="_listGroup_oqrqg_130",Na="_listItem_oqrqg_137",Ia="_fieldTitle_oqrqg_145",Ta="_fieldDescription_oqrqg_150",Pa="_fieldError_oqrqg_155",Ra="_divider_oqrqg_160",$a="_overlay_oqrqg_166",Da="_loader_oqrqg_177",Aa="_animloader_oqrqg_1",qa="_empty_oqrqg_187",La="_inlineElements_oqrqg_200",Oa="_inner_oqrqg_204",Ua="_component_oqrqg_207",Fa="_start_oqrqg_210",Ma="_end_oqrqg_213",za="_apart_oqrqg_216",Ba="_wrap_oqrqg_219",g={blink:fa,fourtyfive:pa,header:ga,subheader:ha,title:_a,section:ba,indent:va,paragraph:ya,card:xa,highlight:wa,blockquote:Sa,error:ka,pad:ja,table:Ca,listGroup:Ea,listItem:Na,fieldTitle:Ia,fieldDescription:Ta,fieldError:Pa,divider:Ra,overlay:$a,loader:Da,animloader:Aa,empty:qa,inlineElements:La,inner:Oa,component:Ua,start:Fa,end:Ma,apart:za,wrap:Ba};function fl({children:e}){return o.jsx("h2",{className:g.header,children:e})}function pl({children:e}){return o.jsx("h3",{className:g.subheader,children:e})}function gl({children:e}){return o.jsx("h4",{className:g.title,children:e})}function hl({as:e,className:t,children:n,...r}){const s=e??"div";return o.jsx(s,{className:k([g.section,t]),...r,children:n})}function _l({as:e,className:t,children:n,...r}){const s=e??"div";return o.jsx(s,{className:k([g.indent,t]),...r,children:n})}function bl({children:e}){return o.jsx("p",{className:g.paragraph,children:e})}function vl({children:e,className:t,...n}){return o.jsx("div",{className:k([g.card,t]),...n,children:e})}function yl({className:e,children:t}){return o.jsx("div",{className:g.pad,children:o.jsx("table",{className:k([g.table,e]),children:t})})}function xl({label:e,handleClick:t}){return o.jsx("tr",{className:g.empty,children:o.jsxs("td",{colSpan:99,children:[o.jsx("div",{children:e??"No data yet"}),t&&o.jsxs(T,{onClick:t,disabled:!t,variant:"primary",children:["New ",o.jsx(Nn,{})]})]})})}function wl({className:e,children:t}){return o.jsx("ul",{className:k([g.listGroup,e]),children:t})}function Sl({children:e}){return o.jsx("li",{className:g.listItem,children:e})}function kl({title:e,description:t,error:n}){return o.jsxs("div",{className:g.fieldTitle,children:[e,n&&o.jsx(Va,{children:n}),!n&&t&&o.jsx(Wa,{children:t})]})}function Wa({children:e}){return o.jsx("div",{className:g.fieldDescription,children:e})}function jl({children:e}){return o.jsx("code",{className:g.highlight,children:e})}function Va({children:e,className:t}){return o.jsx("div",{className:k([g.fieldError,t]),children:e})}function Cl(){return o.jsx("hr",{className:g.divider})}function El({isLoading:e}){return e?o.jsx("div",{className:g.overlay,children:o.jsx("div",{className:g.loader})}):null}function Ka({children:e,as:t,relation:n="component",align:r="start",wrap:s="nowrap",className:a,...i}){const l=t??"div";return o.jsx(l,{...i,className:k([g.inlineElements,g[n],g[r],g[s],a]),children:e})}const Ha="_blink_hxuk5_1",Qa="_fourtyfive_hxuk5_13",Ga="_log_hxuk5_17",Ja="_apart_hxuk5_27",Za="_logEntry_hxuk5_31",Xa="_INFO_hxuk5_34",Ya="_WARN_hxuk5_37",ei="_ERROR_hxuk5_40",ti="_time_hxuk5_46",ni="_origin_hxuk5_49",oi="_msg_hxuk5_52",ri="_buttonBar_hxuk5_56",M={blink:Ha,fourtyfive:Qa,log:Ga,apart:Ja,logEntry:Za,INFO:Xa,WARN:Ya,ERROR:ei,time:ti,origin:ni,msg:oi,buttonBar:ri};function si(){const{logs:e}=To(),[t,n]=c.useState(!0),[r,s]=c.useState(!0),[a,i]=c.useState(!0),[l,d]=c.useState(!0),[_,j]=c.useState(!0),[b,C]=c.useState(!0),x=[];b&&x.push(p.User),t&&x.push(p.Client),r&&x.push(p.Server),a&&x.push(p.Rx),l&&x.push(p.Tx),_&&x.push(p.Playback);const w=e.filter(u=>x.some(le=>u.origin===le)),A=c.useCallback(u=>{u===p.User?C(!0):C(!1),u===p.Client?n(!0):n(!1),u===p.Server?s(!0):s(!1),u===p.Rx?i(!0):i(!1),u===p.Tx?d(!0):d(!1),u===p.Playback?j(!0):j(!1)},[]);return o.jsxs(o.Fragment,{children:[o.jsxs(Ka,{className:M.buttonBar,children:[o.jsx(T,{variant:b?"primary":"subtle",size:"small",onClick:()=>C(u=>!u),onAuxClick:()=>A(p.User),onContextMenu:u=>u.preventDefault(),children:p.User}),o.jsx(T,{variant:t?"primary":"subtle",size:"small",onClick:()=>n(u=>!u),onAuxClick:()=>A(p.Client),onContextMenu:u=>u.preventDefault(),children:p.Client}),o.jsx(T,{variant:r?"primary":"subtle",size:"small",onClick:()=>s(u=>!u),onAuxClick:()=>A(p.Server),onContextMenu:u=>u.preventDefault(),children:p.Server}),o.jsx(T,{variant:_?"primary":"subtle",size:"small",onClick:()=>j(u=>!u),onAuxClick:()=>A(p.Playback),onContextMenu:u=>u.preventDefault(),children:p.Playback}),o.jsx(T,{variant:a?"primary":"subtle",size:"small",onClick:()=>i(u=>!u),onAuxClick:()=>A(p.Rx),onContextMenu:u=>u.preventDefault(),children:p.Rx}),o.jsx(T,{variant:l?"primary":"subtle",size:"small",onClick:()=>d(u=>!u),onAuxClick:()=>A(p.Tx),onContextMenu:u=>u.preventDefault(),children:p.Tx}),o.jsxs(T,{variant:"subtle-destructive",size:"small",onClick:Po,className:M.apart,children:[o.jsx(qe,{})," Clear"]})]}),o.jsx("ul",{className:M.log,children:w.map(u=>o.jsxs("li",{className:`${M.logEntry} ${M[u.level]} `,children:[o.jsx("span",{className:M.time,children:u.time}),o.jsx("span",{className:M.origin,children:u.origin}),o.jsx("span",{className:M.msg,children:u.text})]},u.id))})]})}const ai="_loader_vno17_21",ii="_ellipsis_vno17_28",rt={loader:ai,ellipsis:ii};function je(){return o.jsx("div",{className:rt.loader,children:o.jsxs("div",{className:rt.ellipsis,children:[o.jsx("div",{}),o.jsx("div",{}),o.jsx("div",{}),o.jsx("div",{})]})})}const ci=e=>c.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:275,height:275,fill:"none",viewBox:"0 0 275 275",...e},c.createElement("path",{fill:"#4D4D4D",d:"M49.83 133.919c0-18.343 3.531-34.692 10.595-49.048 7.064-14.355 17.204-25.464 30.42-33.325 13.33-7.861 28.768-11.792 46.313-11.792 24.952 0 45.288 7.633 61.011 22.9 15.837 15.267 24.666 36.003 26.489 62.207l.342 12.647c0 28.369-7.918 51.155-23.755 68.359-15.836 17.09-37.085 25.635-63.745 25.635-26.66 0-47.965-8.545-63.916-25.635-15.836-17.09-23.755-40.332-23.755-69.726v-2.222zm49.389 3.589c0 17.545 3.304 30.989 9.912 40.332 6.608 9.228 16.064 13.843 28.369 13.843 11.963 0 21.305-4.558 28.028-13.672 6.722-9.229 10.083-23.926 10.083-44.092 0-17.204-3.361-30.534-10.083-39.99-6.723-9.457-16.179-14.185-28.37-14.185-12.076 0-21.419 4.728-28.027 14.185-6.608 9.342-9.912 23.869-9.912 43.579z"}),c.createElement("mask",{id:"a",width:177,height:193,x:49,y:39,maskUnits:"userSpaceOnUse"},c.createElement("path",{fill:"#fff",d:"M49.83 133.919c0-18.343 3.531-34.692 10.595-49.048 7.064-14.355 17.204-25.464 30.42-33.325 13.33-7.861 28.768-11.792 46.313-11.792 24.952 0 45.288 7.633 61.011 22.9 15.837 15.267 24.666 36.003 26.489 62.207l.342 12.647c0 28.369-7.918 51.155-23.755 68.359-15.836 17.09-37.085 25.635-63.745 25.635-26.66 0-47.965-8.545-63.916-25.635-15.836-17.09-23.755-40.332-23.755-69.726v-2.222zm49.389 3.589c0 17.545 3.304 30.989 9.912 40.332 6.608 9.228 16.064 13.843 28.369 13.843 11.963 0 21.305-4.558 28.028-13.672 6.722-9.229 10.083-23.926 10.083-44.092 0-17.204-3.361-30.534-10.083-39.99-6.723-9.457-16.179-14.185-28.37-14.185-12.076 0-21.419 4.728-28.027 14.185-6.608 9.342-9.912 23.869-9.912 43.579z"})),c.createElement("g",{mask:"url(#a)"},c.createElement("path",{fill:"url(#paint0_linear)",d:"M19.07 95.347c15.556-6.524 14.288-34.989 22.08-30.11 9.74 6.099 0-23.084 13.549-16.56 21.714 10.455-10.977 18.645 12.296 32.007 23.274 13.362 117.508 24.346 150.898 90.045 12.812 25.21 19.341 32.653 21.836 34.543 1.508-.13 1.78 1.349 0 0-.38.033-.838.168-1.362.476-5.516 3.245-106.876 85.867-148.54 34.124C48.162 188.129 2.25 140.221 14.31 127.463c9.648-10.205 1.393-25.103 4.76-32.116z"}),c.createElement("path",{fill:"url(#paint1_linear)",d:"M42.153 69.754c-7.791-4.88-.412 13.939-24.087 22.582-3.366 7.013 4.63 19.904-5.018 30.109-12.06 12.757 37.623 69.197 79.288 120.94 41.664 51.743 123.453-24.356 128.969-27.6 5.515-3.245 14.092 10.618-10.114-37.154-33.382-65.882-126.481-75.197-149.59-98.582-20.018-20.26 33.92-42.547 10.662-37.896-30.11 6.022-20.37 33.7-30.11 27.6z"})),c.createElement("defs",null,c.createElement("linearGradient",{id:"paint0_linear",x1:93.96,x2:67.62,y1:-33.993,y2:351.251,gradientUnits:"userSpaceOnUse"},c.createElement("stop",null),c.createElement("stop",{offset:1,stopColor:"#414141",stopOpacity:0})),c.createElement("linearGradient",{id:"paint1_linear",x1:88.433,x2:62.092,y1:-37.321,y2:347.924,gradientUnits:"userSpaceOnUse"},c.createElement("stop",{stopColor:"#FF005C",stopOpacity:.74}),c.createElement("stop",{offset:0}),c.createElement("stop",{offset:1,stopColor:"#242424",stopOpacity:0})))),li="_notFound_1d1tc_21",ui="_content_1d1tc_28",st={notFound:li,content:ui};function Ae(){return o.jsx("div",{className:st.notFound,children:o.jsxs("section",{className:st.content,children:[o.jsx(ci,{}),o.jsx("h1",{children:"Not found"}),o.jsxs("div",{children:["The page you are after was not found.",o.jsx("br",{}),"It may have moved or your URL may be incorrect.",o.jsx("br",{}),"Double check the URL and try again."]})]})})}const Re="ontime-override",di=e=>{const[t,n]=c.useState(!1);return c.useEffect(()=>{if(!e){r();return}if(document.getElementById(Re)){n(!0);return}n(!1),s(e).then(i=>{if(!i){console.error("Error loading stylesheet: no data");return}return a(i)}).catch(i=>{console.error(`Error loading stylesheet: ${i}`)}).finally(()=>{setTimeout(()=>n(!0),0)});function r(){var i;(i=document.getElementById(Re))==null||i.remove(),n(!0)}async function s(i){const l=await fetch(i);if(l.ok)return l.text()}async function a(i){const l=document.createElement("style");l.setAttribute("id",Re),l.innerHTML=i,document.head.append(l)}},[e]),{shouldRender:t}},Bt=`${ie}/view-settings`;async function mi(e){return(await h.get(Bt,{signal:e==null?void 0:e.signal})).data}async function fi(e){return(await h.post(Bt,e)).data}const pi={dangerColor:"#ff7300",normalColor:"#ffffffcc",overrideStyles:!1,warningColor:"#ffa528"};function gi(){const{data:e,status:t}=se({queryKey:_e,queryFn:({signal:r})=>mi({signal:r}),placeholderData:(r,s)=>r,staleTime:be}),{mutateAsync:n}=ge({mutationFn:fi,onMutate:()=>{y.cancelQueries({queryKey:_e})},onSuccess:r=>{y.setQueryData(_e,r)}});return{data:e??pi,status:t,mutateAsync:n}}function z({children:e}){const{data:t}=gi(),{shouldRender:n}=di(t.overrideStyles?ro:void 0),s=new URLSearchParams(window.location.search).get("keyColour")??"#101010";return n?o.jsxs(o.Fragment,{children:[o.jsx("style",{children:`body { background: var(--background-color-override, ${s}); }`}),e]}):o.jsxs(o.Fragment,{children:[o.jsx("style",{children:`body { background: var(--background-color-override, ${s}); }`}),o.jsx(je,{})]})}const hi="4.5.0",_i=["top.GLOBALS","originalCreateNotification","canvas.contentDocument","MyApp_RemoveAllHighlights","http://tt.epicplay.com","Can't find variable: ZiteReader","jigsaw is not defined","ComboSearch is not defined","http://loading.retry.widdit.com/","atomicFindClose","fb_xd_fragment","bmi_SafeAddOnload","EBCallBackMessageReceived","conduitPage"],bi="https://5e4d2c4b57ab409cb98d4c08b2014755@o4504288369836032.ingest.sentry.io/4504288371343360",vi=()=>(In({dsn:bi,integrations:[Tn({useEffect:ct.useEffect,useLocation:xe,useNavigationType:Dn,createRoutesFromChildren:$n,matchRoutes:Rn})],tracesSampleRate:.3,release:hi,enabled:!0,ignoreErrors:[..._i,/Unable to preload CSS/i,/dynamically imported module/i,/Failed to fetch dynamically imported module/i,/Loading chunk \d+ failed/i,/Loading CSS chunk \d+ failed/i,/ChunkLoadError/i,/Loading module .+ failed/i,/Cannot read propert.* of undefined/i,/Cannot read propert.* of null/i,/Network request failed/i,/Failed to fetch/i,/NetworkError/i,/The operation couldn't be completed/i],denyUrls:[/extensions\//i,/^chrome:\/\//i,/^chrome-extension:\/\//i,/external\//i],beforeSend(e){var n,r,s;const t=(s=(r=(n=e.exception)==null?void 0:n.values)==null?void 0:r[0])==null?void 0:s.value;return t&&(t.includes("Cannot read property")||t.includes("Cannot read properties")||t.includes("Network request failed")||t.includes("Failed to fetch"))?null:e}}),Pn(An)),Wt=c.lazy(()=>E(()=>import("./Timer-ahF-O2zN.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]),import.meta.url)),Vt=c.lazy(()=>E(()=>import("./Countdown-COte1yne.js"),__vite__mapDeps([31,1,2,29,9,10,13,14,15,16,17,4,18,19,20,21,22,23,25,32,33,34,35,27,28,36]),import.meta.url)),Kt=c.lazy(()=>E(()=>import("./Backstage-DQu8ne-1.js"),__vite__mapDeps([37,1,2,7,9,10,11,12,13,14,15,16,17,4,18,19,20,21,29,35,38,23,22,25,27,28,39]),import.meta.url)),Ht=c.lazy(()=>E(()=>import("./Studio-BSSiKd6k.js"),__vite__mapDeps([40,1,2,9,10,13,14,15,16,17,4,18,19,20,21,25,22,23,35,24,27,28,41]),import.meta.url)),Qt=c.lazy(()=>E(()=>import("./TimelinePage-pjff5TxG.js"),__vite__mapDeps([42,1,2,9,10,13,14,15,16,17,4,18,19,20,21,22,23,29,25,43,7,27,28,44]),import.meta.url)),Gt=c.lazy(()=>E(()=>import("./ProjectInfo-D0X9vdIX.js"),__vite__mapDeps([45,1,2,9,10,13,14,15,16,17,4,18,19,20,21,28,46]),import.meta.url)),yi=c.lazy(()=>E(()=>import("./ProtectedEditor-DNOiQqIU.js"),__vite__mapDeps([47,1,2,48,49,21,50,16,17,18,19,27,29,51,34,52,26,53,54,55,56,57,58,59,60,28,61,62,35,38,23,5,63,64,65,66,67,68]),import.meta.url)),Jt=c.lazy(()=>E(()=>import("./ProtectedCuesheet-DRTfZTZN.js"),__vite__mapDeps([69,1,2,48,49,70,50,16,17,18,19,27,29,51,54,55,58,59,60,26,56,57,71,52,53,43,72,35,9,10,73,21,62,38,23,5,63,64,28,65,6,7,8,74]),import.meta.url)),Zt=c.lazy(()=>E(()=>import("./OperatorExport-CmgIl1lz.js"),__vite__mapDeps([75,1,2,48,49,29,9,10,15,16,17,4,18,19,20,32,33,21,52,26,53,71,43,59,56,57,72,62,35,38,23,5,63,6,7,8,25,27,76]),import.meta.url)),pe=c.lazy(()=>E(()=>import("./EditorFeatureWrapper-DpDaCaJ3.js"),__vite__mapDeps([77,1,2,48,49,78]),import.meta.url)),xi=c.lazy(()=>E(()=>import("./RundownExport-Bvc1J50m.js"),__vite__mapDeps([79,1,2,54,55,48,49,70,50,16,17,18,19,27,29,51,58,59,60,26,56,57,71,52,53,43,72,35,9,10,73,61,34,5,7,80]),import.meta.url)),wi=c.lazy(()=>E(()=>import("./TimerControlExport-De2n8HWG.js"),__vite__mapDeps([81,1,2,54,55,48,49,58,59,60,66,67,56,57,34,82]),import.meta.url)),Si=c.lazy(()=>E(()=>import("./MessageControlExport-BN6OfADo.js"),__vite__mapDeps([83,1,2,54,55,48,49,18,19,56,57,84]),import.meta.url)),ki=vi();function ji(){return ta(),o.jsx(c.Suspense,{fallback:o.jsx(je,{}),children:o.jsxs(ki,{children:[o.jsx(v,{path:"/",element:o.jsx(qn,{to:"/timer"})}),o.jsx(v,{path:"timer",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:L()}),o.jsx(Wt,{})]})}),o.jsx(v,{path:"countdown",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:L()}),o.jsx(Vt,{})]})}),o.jsx(v,{path:"backstage",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:L()}),o.jsx(Kt,{})]})}),o.jsx(v,{path:"studio",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:L()}),o.jsx(Ht,{})]})}),o.jsx(v,{path:"timeline",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:L()}),o.jsx(Qt,{})]})}),o.jsx(v,{path:"info",element:o.jsxs(z,{children:[o.jsx($,{suppressSettings:!0,isNavigationLocked:L()}),o.jsx(Gt,{})]})}),o.jsx(v,{path:"editor",element:o.jsx(yi,{})}),o.jsx(v,{path:"cuesheet",element:o.jsx(Jt,{})}),o.jsx(v,{path:"op",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:L()}),o.jsx(Zt,{})]})}),o.jsx(v,{path:"rundown",element:o.jsx(pe,{children:o.jsx(xi,{})})}),o.jsx(v,{path:"timercontrol",element:o.jsx(pe,{children:o.jsx(wi,{})})}),o.jsx(v,{path:"messagecontrol",element:o.jsx(pe,{children:o.jsx(Si,{})})}),o.jsx(v,{path:"log",element:o.jsx(pe,{children:o.jsx(si,{})})}),o.jsx(v,{path:"preset/:alias",element:o.jsx(Ei,{})}),o.jsx(v,{path:"*",element:o.jsx(Ni,{})})]})})}const Ci={[I.Cuesheet]:Jt,[I.Operator]:Zt,[I.Timer]:Wt,[I.Backstage]:Kt,[I.Timeline]:Qt,[I.StudioClock]:Ht,[I.Countdown]:Vt,[I.ProjectInfo]:Gt};function Ei(){const{data:e,status:t}=ze(),{alias:n}=Ln(),r=c.useMemo(()=>{if(!(t==="pending"||!n))return e.find(i=>i.alias===n&&i.enabled)},[e,t,n]);if(t==="pending")return o.jsx(je,{});const s=Zn==="rw";if(!r)return o.jsxs(o.Fragment,{children:[o.jsx($,{isNavigationLocked:!s,suppressSettings:!0}),o.jsx(Ae,{})]});const a=Ci[r.target];return o.jsxs($t,{value:r,children:[o.jsx($,{isNavigationLocked:L(),suppressSettings:!0}),a?o.jsx(a,{}):o.jsx(Ae,{})]})}function Ni(){const{data:e,status:t}=ze(),n=ae(),r=xe(),s=c.useMemo(()=>t==="pending"?null:aa(r,e),[e,r,t]);return c.useEffect(()=>{s&&n(`/${s}`,{replace:!0})},[s,n]),t==="pending"?o.jsx(je,{}):o.jsxs(o.Fragment,{children:[o.jsx($,{isNavigationLocked:L(),suppressSettings:!0}),o.jsx(Ae,{})]})}Pt();function Ii(){return o.jsx(On,{client:y,children:o.jsx(Xo,{children:o.jsx(Un,{children:o.jsxs(Fn,{basename:K,children:[o.jsxs("div",{className:"App",children:[o.jsx(nt,{children:o.jsxs(dr,{children:[o.jsx(Ho,{}),o.jsx(tr,{}),o.jsx(ji,{})]})}),o.jsx(Mn,{initialIsOpen:!1})]}),o.jsx(nt,{children:o.jsx("div",{id:"identify-portal"})})]})})})})}const Ti=document.getElementById("root"),Pi=zn.createRoot(Ti);Pi.render(o.jsx(c.StrictMode,{children:o.jsx(Ii,{})}));export{hl as $,rl as A,T as B,Yi as C,qr as D,Ac as E,St as F,qc as G,mc as H,be as I,sl as J,vc as K,je as L,Q as M,Xi as N,I as O,$t as P,Ut as Q,Li as R,Vn as S,ne as T,Hn as U,Qi as V,bl as W,Vi as X,Va as Y,Ve as Z,fl as _,gi as a,ys as a$,vl as a0,pl as a1,Oi as a2,Bi as a3,Wi as a4,Mi as a5,qi as a6,Ui as a7,Fi as a8,Ka as a9,He as aA,Ke as aB,Do as aC,ho as aD,tl as aE,oc as aF,zi as aG,Zi as aH,Me as aI,is as aJ,xo as aK,Et as aL,S as aM,_s as aN,si as aO,Ki as aP,Xe as aQ,Ji as aR,eo as aS,Kc as aT,Qc as aU,Gc as aV,Xc as aW,Zc as aX,Jc as aY,Ot as aZ,jl as a_,Cl as aa,il as ab,El as ac,gl as ad,wl as ae,Sl as af,kl as ag,hs as ah,Ro as ai,_l as aj,J as ak,yl as al,xl as am,Ts as an,vs as ao,Fs as ap,Wc as aq,Vc as ar,dl as as,Wa as at,ml as au,zc as av,ze as aw,bs as ax,ie as ay,Bn as az,Rt as b,Hc as b0,Fo as b1,uc as b2,pc as b3,fc as b4,dc as b5,V as b6,he as b7,gc as b8,rr as b9,tc as bA,rc as bB,Cs as bC,$ as bD,nt as bE,uo as bF,ci as bG,wt as bH,xt as bI,Gi as bJ,X as bK,cl as bL,ll as bM,y as bN,Bc as bO,po as bP,$o as bQ,to as bR,cc as bS,sc as bT,lc as bU,ac as bV,ic as bW,Zo as bX,we as bY,Fc as ba,re as bb,al as bc,Xs as bd,wc as be,Yc as bf,Zn as bg,L as bh,jo as bi,nc as bj,Hi as bk,ul as bl,mr as bm,ol as bn,Cc as bo,Nc as bp,Ic as bq,Ec as br,Tc as bs,_c as bt,Z as bu,Pc as bv,xc as bw,Sc as bx,kc as by,bc as bz,Rc as c,el as d,k as e,Oc as f,Lc as g,_t as h,yt as i,$c as j,Uc as k,kt as l,fo as m,jc as n,hc as o,Lt as p,ko as q,ec as r,Qe as s,fr as t,Lr as u,yc as v,Mc as w,nl as x,bt as y,Dc as z};
3
+ //# sourceMappingURL=index-3aosT33y.js.map