@getontime/cli 4.4.0 → 4.4.2

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 (377) hide show
  1. package/client/assets/{Backstage-ScLTYJAt.js → Backstage-BdrcXNr9.js} +2 -2
  2. package/client/assets/Backstage-BdrcXNr9.js.br +0 -0
  3. package/client/assets/Backstage-BdrcXNr9.js.gz +0 -0
  4. package/client/assets/{Backstage-ScLTYJAt.js.map → Backstage-BdrcXNr9.js.map} +1 -1
  5. package/client/assets/{Countdown-DA_Lph2k.js → Countdown-DQM2ppPg.js} +2 -2
  6. package/client/assets/Countdown-DQM2ppPg.js.br +0 -0
  7. package/client/assets/Countdown-DQM2ppPg.js.gz +0 -0
  8. package/client/assets/{Countdown-DA_Lph2k.js.map → Countdown-DQM2ppPg.js.map} +1 -1
  9. package/client/assets/{CuesheetTable-C7hP6tMi.js → CuesheetTable-B5LQVh5m.js} +2 -2
  10. package/client/assets/CuesheetTable-B5LQVh5m.js.br +0 -0
  11. package/client/assets/CuesheetTable-B5LQVh5m.js.gz +0 -0
  12. package/client/assets/{CuesheetTable-C7hP6tMi.js.map → CuesheetTable-B5LQVh5m.js.map} +1 -1
  13. package/client/assets/CustomTranslationModal-CML7Vsot.js +2 -0
  14. package/client/assets/CustomTranslationModal-CML7Vsot.js.br +0 -0
  15. package/client/assets/CustomTranslationModal-CML7Vsot.js.gz +0 -0
  16. package/client/assets/{CustomTranslationModal-0ROtCxPC.js.map → CustomTranslationModal-CML7Vsot.js.map} +1 -1
  17. package/client/assets/DelayIndicator-DKS6mZdB.js +2 -0
  18. package/client/assets/DelayIndicator-DKS6mZdB.js.br +0 -0
  19. package/client/assets/DelayIndicator-DKS6mZdB.js.gz +0 -0
  20. package/client/assets/DelayIndicator-DKS6mZdB.js.map +1 -0
  21. package/client/assets/{EditorFeatureWrapper-B_KH_YqU.js → EditorFeatureWrapper-C1vLQxiy.js} +2 -2
  22. package/client/assets/EditorFeatureWrapper-C1vLQxiy.js.br +0 -0
  23. package/client/assets/EditorFeatureWrapper-C1vLQxiy.js.gz +0 -0
  24. package/client/assets/{EditorFeatureWrapper-B_KH_YqU.js.map → EditorFeatureWrapper-C1vLQxiy.js.map} +1 -1
  25. package/client/assets/{EditorUtils-BxN0w0-D.js → EditorUtils-BLcTuWz1.js} +2 -2
  26. package/client/assets/EditorUtils-BLcTuWz1.js.br +0 -0
  27. package/client/assets/EditorUtils-BLcTuWz1.js.gz +0 -0
  28. package/client/assets/{EditorUtils-BxN0w0-D.js.map → EditorUtils-BLcTuWz1.js.map} +1 -1
  29. package/client/assets/{EmptyPage-CcO33dlE.js → EmptyPage-CYVrjOvI.js} +2 -2
  30. package/client/assets/EmptyPage-CYVrjOvI.js.br +0 -0
  31. package/client/assets/EmptyPage-CYVrjOvI.js.gz +0 -0
  32. package/client/assets/{EmptyPage-CcO33dlE.js.map → EmptyPage-CYVrjOvI.js.map} +1 -1
  33. package/client/assets/{FollowButton-DJCtYYXt.js → FollowButton-DcSbb4R_.js} +2 -2
  34. package/client/assets/FollowButton-DcSbb4R_.js.br +0 -0
  35. package/client/assets/FollowButton-DcSbb4R_.js.gz +0 -0
  36. package/client/assets/{FollowButton-DJCtYYXt.js.map → FollowButton-DcSbb4R_.js.map} +1 -1
  37. package/client/assets/{MessageControlExport-DGo2ZNMw.js → MessageControlExport-BgT9JaXk.js} +3 -3
  38. package/client/assets/MessageControlExport-BgT9JaXk.js.br +0 -0
  39. package/client/assets/MessageControlExport-BgT9JaXk.js.gz +0 -0
  40. package/client/assets/{MessageControlExport-DGo2ZNMw.js.map → MessageControlExport-BgT9JaXk.js.map} +1 -1
  41. package/client/assets/{MultiPartProgressBar-IIU35-x9.js → MultiPartProgressBar-W2a-JWPY.js} +2 -2
  42. package/client/assets/MultiPartProgressBar-W2a-JWPY.js.br +0 -0
  43. package/client/assets/MultiPartProgressBar-W2a-JWPY.js.gz +0 -0
  44. package/client/assets/{MultiPartProgressBar-IIU35-x9.js.map → MultiPartProgressBar-W2a-JWPY.js.map} +1 -1
  45. package/client/assets/{OperatorExport-C-KafSVE.js → OperatorExport-CbWojpp6.js} +2 -2
  46. package/client/assets/OperatorExport-CbWojpp6.js.br +0 -0
  47. package/client/assets/OperatorExport-CbWojpp6.js.gz +0 -0
  48. package/client/assets/{OperatorExport-C-KafSVE.js.map → OperatorExport-CbWojpp6.js.map} +1 -1
  49. package/client/assets/{OverviewWrapper-B6AeBRb6.js → OverviewWrapper-B2i8d3rt.js} +2 -2
  50. package/client/assets/OverviewWrapper-B2i8d3rt.js.br +0 -0
  51. package/client/assets/OverviewWrapper-B2i8d3rt.js.gz +0 -0
  52. package/client/assets/{OverviewWrapper-B6AeBRb6.js.map → OverviewWrapper-B2i8d3rt.js.map} +1 -1
  53. package/client/assets/{PipHost-BueqKsmJ.js → PipHost-Dz2oy7XG.js} +2 -2
  54. package/client/assets/PipHost-Dz2oy7XG.js.br +0 -0
  55. package/client/assets/PipHost-Dz2oy7XG.js.gz +0 -0
  56. package/client/assets/{PipHost-BueqKsmJ.js.map → PipHost-Dz2oy7XG.js.map} +1 -1
  57. package/client/assets/{ProjectInfo-DiD9lzzx.js → ProjectInfo-BR_7Hp5u.js} +2 -2
  58. package/client/assets/ProjectInfo-BR_7Hp5u.js.br +0 -0
  59. package/client/assets/ProjectInfo-BR_7Hp5u.js.gz +0 -0
  60. package/client/assets/{ProjectInfo-DiD9lzzx.js.map → ProjectInfo-BR_7Hp5u.js.map} +1 -1
  61. package/client/assets/{ProtectRoute-CcDK6JVA.js → ProtectRoute-Bxq6q7ba.js} +2 -2
  62. package/client/assets/ProtectRoute-Bxq6q7ba.js.br +0 -0
  63. package/client/assets/ProtectRoute-Bxq6q7ba.js.gz +0 -0
  64. package/client/assets/{ProtectRoute-CcDK6JVA.js.map → ProtectRoute-Bxq6q7ba.js.map} +1 -1
  65. package/client/assets/ProtectedCuesheet-C7AqD2dy.js +2 -0
  66. package/client/assets/ProtectedCuesheet-C7AqD2dy.js.br +0 -0
  67. package/client/assets/ProtectedCuesheet-C7AqD2dy.js.gz +0 -0
  68. package/client/assets/{ProtectedCuesheet-D19INqhI.js.map → ProtectedCuesheet-C7AqD2dy.js.map} +1 -1
  69. package/client/assets/ProtectedEditor-CsfvVyOU.js +3 -0
  70. package/client/assets/ProtectedEditor-CsfvVyOU.js.br +0 -0
  71. package/client/assets/ProtectedEditor-CsfvVyOU.js.gz +0 -0
  72. package/client/assets/ProtectedEditor-CsfvVyOU.js.map +1 -0
  73. package/client/assets/RundownExport-25orDQIW.js +2 -0
  74. package/client/assets/RundownExport-25orDQIW.js.br +0 -0
  75. package/client/assets/RundownExport-25orDQIW.js.gz +0 -0
  76. package/client/assets/RundownExport-25orDQIW.js.map +1 -0
  77. package/client/assets/RundownExport-CzaSrbaj.css +1 -0
  78. package/client/assets/RundownExport-CzaSrbaj.css.br +0 -0
  79. package/client/assets/RundownExport-CzaSrbaj.css.gz +0 -0
  80. package/client/assets/Select-BnGTAeXJ.js +2 -0
  81. package/client/assets/Select-BnGTAeXJ.js.br +0 -0
  82. package/client/assets/Select-BnGTAeXJ.js.gz +0 -0
  83. package/client/assets/{Select-B3zdv0Ng.js.map → Select-BnGTAeXJ.js.map} +1 -1
  84. package/client/assets/{Studio-DS_uXtgn.js → Studio-BK2Klo_K.js} +2 -2
  85. package/client/assets/Studio-BK2Klo_K.js.br +0 -0
  86. package/client/assets/Studio-BK2Klo_K.js.gz +0 -0
  87. package/client/assets/{Studio-DS_uXtgn.js.map → Studio-BK2Klo_K.js.map} +1 -1
  88. package/client/assets/StyleEditor-DIHQ1PUV.js +2 -0
  89. package/client/assets/StyleEditor-DIHQ1PUV.js.br +0 -0
  90. package/client/assets/StyleEditor-DIHQ1PUV.js.gz +0 -0
  91. package/client/assets/{StyleEditor-DcyJgmAF.js.map → StyleEditor-DIHQ1PUV.js.map} +1 -1
  92. package/client/assets/{SuperscriptPeriod-DswX2aei.js → SuperscriptPeriod-EEedc9rG.js} +2 -2
  93. package/client/assets/SuperscriptPeriod-EEedc9rG.js.br +0 -0
  94. package/client/assets/SuperscriptPeriod-EEedc9rG.js.gz +0 -0
  95. package/client/assets/{SuperscriptPeriod-DswX2aei.js.map → SuperscriptPeriod-EEedc9rG.js.map} +1 -1
  96. package/client/assets/{SuperscriptTime-COS4JWHJ.js → SuperscriptTime-BVanhNvd.js} +2 -2
  97. package/client/assets/SuperscriptTime-BVanhNvd.js.br +0 -0
  98. package/client/assets/SuperscriptTime-BVanhNvd.js.gz +0 -0
  99. package/client/assets/{SuperscriptTime-COS4JWHJ.js.map → SuperscriptTime-BVanhNvd.js.map} +1 -1
  100. package/client/assets/SwatchPicker-Ckpchvjo.js +2 -0
  101. package/client/assets/SwatchPicker-Ckpchvjo.js.br +0 -0
  102. package/client/assets/SwatchPicker-Ckpchvjo.js.gz +0 -0
  103. package/client/assets/{SwatchPicker-DPyJv7aS.js.map → SwatchPicker-Ckpchvjo.js.map} +1 -1
  104. package/client/assets/TimeElements-CYIgGk0T.js +2 -0
  105. package/client/assets/TimeElements-CYIgGk0T.js.br +0 -0
  106. package/client/assets/TimeElements-CYIgGk0T.js.gz +0 -0
  107. package/client/assets/{TimeElements-8rNLGU60.js.map → TimeElements-CYIgGk0T.js.map} +1 -1
  108. package/client/assets/{TimeInput-OX4LMRQl.js → TimeInput-Cwl9vLWA.js} +2 -2
  109. package/client/assets/TimeInput-Cwl9vLWA.js.br +0 -0
  110. package/client/assets/TimeInput-Cwl9vLWA.js.gz +0 -0
  111. package/client/assets/{TimeInput-OX4LMRQl.js.map → TimeInput-Cwl9vLWA.js.map} +1 -1
  112. package/client/assets/{TimelinePage-7kRpUl6P.js → TimelinePage-D4QNdk-Z.js} +2 -2
  113. package/client/assets/TimelinePage-D4QNdk-Z.js.br +0 -0
  114. package/client/assets/TimelinePage-D4QNdk-Z.js.gz +0 -0
  115. package/client/assets/{TimelinePage-7kRpUl6P.js.map → TimelinePage-D4QNdk-Z.js.map} +1 -1
  116. package/client/assets/{Timer-Bg9pVhup.js → Timer-BJQKNHfo.js} +2 -2
  117. package/client/assets/Timer-BJQKNHfo.js.br +0 -0
  118. package/client/assets/Timer-BJQKNHfo.js.gz +0 -0
  119. package/client/assets/{Timer-Bg9pVhup.js.map → Timer-BJQKNHfo.js.map} +1 -1
  120. package/client/assets/TimerControlExport-Ba1vifNg.js +2 -0
  121. package/client/assets/TimerControlExport-Ba1vifNg.js.br +0 -0
  122. package/client/assets/TimerControlExport-Ba1vifNg.js.gz +0 -0
  123. package/client/assets/{TimerControlExport-BNfZ99Im.js.map → TimerControlExport-Ba1vifNg.js.map} +1 -1
  124. package/client/assets/TimerDisplay-tVcUk9j3.js +2 -0
  125. package/client/assets/TimerDisplay-tVcUk9j3.js.br +0 -0
  126. package/client/assets/TimerDisplay-tVcUk9j3.js.gz +0 -0
  127. package/client/assets/{TimerDisplay-DQQ7sMDc.js.map → TimerDisplay-tVcUk9j3.js.map} +1 -1
  128. package/client/assets/{TitleCard-De0WhlN2.js → TitleCard-BNjv58eq.js} +2 -2
  129. package/client/assets/TitleCard-BNjv58eq.js.br +0 -0
  130. package/client/assets/TitleCard-BNjv58eq.js.gz +0 -0
  131. package/client/assets/{TitleCard-De0WhlN2.js.map → TitleCard-BNjv58eq.js.map} +1 -1
  132. package/client/assets/Tooltip-DZJ7u9gm.js +2 -0
  133. package/client/assets/Tooltip-DZJ7u9gm.js.br +4 -0
  134. package/client/assets/Tooltip-DZJ7u9gm.js.gz +0 -0
  135. package/client/assets/{Tooltip-B4PEP32j.js.map → Tooltip-DZJ7u9gm.js.map} +1 -1
  136. package/client/assets/{ViewLogo-CHqiH4C0.js → ViewLogo-2I7w5Yms.js} +2 -2
  137. package/client/assets/ViewLogo-2I7w5Yms.js.br +0 -0
  138. package/client/assets/ViewLogo-2I7w5Yms.js.gz +0 -0
  139. package/client/assets/{ViewLogo-CHqiH4C0.js.map → ViewLogo-2I7w5Yms.js.map} +1 -1
  140. package/client/assets/{ViewParamsEditor-BHIK3qtx.js → ViewParamsEditor-BX2RM8sx.js} +2 -2
  141. package/client/assets/ViewParamsEditor-BX2RM8sx.js.br +0 -0
  142. package/client/assets/ViewParamsEditor-BX2RM8sx.js.gz +0 -0
  143. package/client/assets/{ViewParamsEditor-BHIK3qtx.js.map → ViewParamsEditor-BX2RM8sx.js.map} +1 -1
  144. package/client/assets/{editorSettings-VcitNPq1.js → editorSettings-_x6YKRfR.js} +2 -2
  145. package/client/assets/editorSettings-_x6YKRfR.js.br +6 -0
  146. package/client/assets/editorSettings-_x6YKRfR.js.gz +0 -0
  147. package/client/assets/{editorSettings-VcitNPq1.js.map → editorSettings-_x6YKRfR.js.map} +1 -1
  148. package/client/assets/{getProgress-mRMYlU96.js → getProgress-ZUTmCn_v.js} +2 -2
  149. package/client/assets/getProgress-ZUTmCn_v.js.br +0 -0
  150. package/client/assets/getProgress-ZUTmCn_v.js.gz +0 -0
  151. package/client/assets/{getProgress-mRMYlU96.js.map → getProgress-ZUTmCn_v.js.map} +1 -1
  152. package/client/assets/index-Dm-4OTmY.js +3 -0
  153. package/client/assets/index-Dm-4OTmY.js.br +0 -0
  154. package/client/assets/index-Dm-4OTmY.js.gz +0 -0
  155. package/client/assets/index-Dm-4OTmY.js.map +1 -0
  156. package/client/assets/{offset-Bs6CY1IK.js → offset-VthsmtrO.js} +2 -2
  157. package/client/assets/offset-VthsmtrO.js.br +0 -0
  158. package/client/assets/offset-VthsmtrO.js.gz +0 -0
  159. package/client/assets/{offset-Bs6CY1IK.js.map → offset-VthsmtrO.js.map} +1 -1
  160. package/client/assets/{parseUserTime-CI7s8pYc.js → parseUserTime-sZbEBi61.js} +2 -2
  161. package/client/assets/parseUserTime-sZbEBi61.js.br +0 -0
  162. package/client/assets/parseUserTime-sZbEBi61.js.gz +0 -0
  163. package/client/assets/{parseUserTime-CI7s8pYc.js.map → parseUserTime-sZbEBi61.js.map} +1 -1
  164. package/client/assets/{playbackstate-DisgQbHM.js → playbackstate-Dl_ZJABT.js} +2 -2
  165. package/client/assets/playbackstate-Dl_ZJABT.js.br +0 -0
  166. package/client/assets/playbackstate-Dl_ZJABT.js.gz +0 -0
  167. package/client/assets/{playbackstate-DisgQbHM.js.map → playbackstate-Dl_ZJABT.js.map} +1 -1
  168. package/client/assets/{presentation.utils-Bv3PuMWv.js → presentation.utils-Z61KykAH.js} +2 -2
  169. package/client/assets/presentation.utils-Z61KykAH.js.br +0 -0
  170. package/client/assets/presentation.utils-Z61KykAH.js.gz +0 -0
  171. package/client/assets/{presentation.utils-Bv3PuMWv.js.map → presentation.utils-Z61KykAH.js.map} +1 -1
  172. package/client/assets/rundownUtils-CXZRD6yP.js +2 -0
  173. package/client/assets/rundownUtils-CXZRD6yP.js.br +0 -0
  174. package/client/assets/rundownUtils-CXZRD6yP.js.gz +0 -0
  175. package/client/assets/rundownUtils-CXZRD6yP.js.map +1 -0
  176. package/client/assets/timer.utils-B4bvsns3.js +2 -0
  177. package/client/assets/timer.utils-B4bvsns3.js.br +0 -0
  178. package/client/assets/timer.utils-B4bvsns3.js.gz +0 -0
  179. package/client/assets/{timer.utils-P25ngopd.js.map → timer.utils-B4bvsns3.js.map} +1 -1
  180. package/client/assets/useCustomFields-BBE4LBBr.js +2 -0
  181. package/client/assets/useCustomFields-BBE4LBBr.js.br +0 -0
  182. package/client/assets/useCustomFields-BBE4LBBr.js.gz +0 -0
  183. package/client/assets/useCustomFields-BBE4LBBr.js.map +1 -0
  184. package/client/assets/useEventSelection-Bpbu89c7.js +2 -0
  185. package/client/assets/useEventSelection-Bpbu89c7.js.br +0 -0
  186. package/client/assets/useEventSelection-Bpbu89c7.js.gz +0 -0
  187. package/client/assets/useEventSelection-Bpbu89c7.js.map +1 -0
  188. package/client/assets/useProjectData-C110zIXC.js +2 -0
  189. package/client/assets/useProjectData-C110zIXC.js.br +0 -0
  190. package/client/assets/useProjectData-C110zIXC.js.gz +0 -0
  191. package/client/assets/useProjectData-C110zIXC.js.map +1 -0
  192. package/client/assets/useReport-DqSBq4MG.js +2 -0
  193. package/client/assets/useReport-DqSBq4MG.js.br +0 -0
  194. package/client/assets/useReport-DqSBq4MG.js.gz +0 -0
  195. package/client/assets/useReport-DqSBq4MG.js.map +1 -0
  196. package/client/assets/useRundown-DAo6huE4.js +2 -0
  197. package/client/assets/useRundown-DAo6huE4.js.br +0 -0
  198. package/client/assets/useRundown-DAo6huE4.js.gz +0 -0
  199. package/client/assets/useRundown-DAo6huE4.js.map +1 -0
  200. package/client/assets/{useSelectAndRevealEntry-CzSIOtzH.js → useSelectAndRevealEntry-DTg0hmxA.js} +2 -2
  201. package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.br +0 -0
  202. package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.gz +0 -0
  203. package/client/assets/{useSelectAndRevealEntry-CzSIOtzH.js.map → useSelectAndRevealEntry-DTg0hmxA.js.map} +1 -1
  204. package/client/assets/{useWindowTitle-Cl1AVD9_.js → useWindowTitle-DM8dIp8L.js} +2 -2
  205. package/client/assets/useWindowTitle-DM8dIp8L.js.br +0 -0
  206. package/client/assets/useWindowTitle-DM8dIp8L.js.gz +0 -0
  207. package/client/assets/{useWindowTitle-Cl1AVD9_.js.map → useWindowTitle-DM8dIp8L.js.map} +1 -1
  208. package/client/assets/validateEvent-GnPt-e9-.js +2 -0
  209. package/client/assets/validateEvent-GnPt-e9-.js.br +0 -0
  210. package/client/assets/validateEvent-GnPt-e9-.js.gz +0 -0
  211. package/client/assets/{validateEvent-DhFtLvz_.js.map → validateEvent-GnPt-e9-.js.map} +1 -1
  212. package/client/assets/{vendor-dQa48psh.js → vendor-BKUJ0_Du.js} +12 -12
  213. package/client/assets/vendor-BKUJ0_Du.js.br +0 -0
  214. package/client/assets/vendor-BKUJ0_Du.js.gz +0 -0
  215. package/client/assets/{vendor-dQa48psh.js.map → vendor-BKUJ0_Du.js.map} +1 -1
  216. package/client/assets/{viewLoader.utils-ndDejZHN.js → viewLoader.utils-4lL4PiNI.js} +2 -2
  217. package/client/assets/viewLoader.utils-4lL4PiNI.js.br +0 -0
  218. package/client/assets/viewLoader.utils-4lL4PiNI.js.gz +0 -0
  219. package/client/assets/{viewLoader.utils-ndDejZHN.js.map → viewLoader.utils-4lL4PiNI.js.map} +1 -1
  220. package/client/assets/{viewUtils-rcOl1-o8.js → viewUtils-29a3Mmiu.js} +2 -2
  221. package/client/assets/viewUtils-29a3Mmiu.js.br +0 -0
  222. package/client/assets/viewUtils-29a3Mmiu.js.gz +0 -0
  223. package/client/assets/{viewUtils-rcOl1-o8.js.map → viewUtils-29a3Mmiu.js.map} +1 -1
  224. package/client/index.html +2 -2
  225. package/package.json +1 -1
  226. package/server/index.cjs +87 -87
  227. package/client/assets/Backstage-ScLTYJAt.js.br +0 -0
  228. package/client/assets/Backstage-ScLTYJAt.js.gz +0 -0
  229. package/client/assets/Countdown-DA_Lph2k.js.br +0 -0
  230. package/client/assets/Countdown-DA_Lph2k.js.gz +0 -0
  231. package/client/assets/CuesheetTable-C7hP6tMi.js.br +0 -0
  232. package/client/assets/CuesheetTable-C7hP6tMi.js.gz +0 -0
  233. package/client/assets/CustomTranslationModal-0ROtCxPC.js +0 -2
  234. package/client/assets/CustomTranslationModal-0ROtCxPC.js.br +0 -0
  235. package/client/assets/CustomTranslationModal-0ROtCxPC.js.gz +0 -0
  236. package/client/assets/DelayIndicator-OEjcqoIx.js +0 -2
  237. package/client/assets/DelayIndicator-OEjcqoIx.js.br +0 -0
  238. package/client/assets/DelayIndicator-OEjcqoIx.js.gz +0 -0
  239. package/client/assets/DelayIndicator-OEjcqoIx.js.map +0 -1
  240. package/client/assets/EditorFeatureWrapper-B_KH_YqU.js.br +0 -0
  241. package/client/assets/EditorFeatureWrapper-B_KH_YqU.js.gz +0 -0
  242. package/client/assets/EditorUtils-BxN0w0-D.js.br +0 -0
  243. package/client/assets/EditorUtils-BxN0w0-D.js.gz +0 -0
  244. package/client/assets/EmptyPage-CcO33dlE.js.br +0 -0
  245. package/client/assets/EmptyPage-CcO33dlE.js.gz +0 -0
  246. package/client/assets/FollowButton-DJCtYYXt.js.br +0 -0
  247. package/client/assets/FollowButton-DJCtYYXt.js.gz +0 -0
  248. package/client/assets/MessageControlExport-DGo2ZNMw.js.br +0 -0
  249. package/client/assets/MessageControlExport-DGo2ZNMw.js.gz +0 -0
  250. package/client/assets/MultiPartProgressBar-IIU35-x9.js.br +0 -0
  251. package/client/assets/MultiPartProgressBar-IIU35-x9.js.gz +0 -0
  252. package/client/assets/OperatorExport-C-KafSVE.js.br +0 -0
  253. package/client/assets/OperatorExport-C-KafSVE.js.gz +0 -0
  254. package/client/assets/OverviewWrapper-B6AeBRb6.js.br +0 -0
  255. package/client/assets/OverviewWrapper-B6AeBRb6.js.gz +0 -0
  256. package/client/assets/PipHost-BueqKsmJ.js.br +0 -0
  257. package/client/assets/PipHost-BueqKsmJ.js.gz +0 -0
  258. package/client/assets/ProjectInfo-DiD9lzzx.js.br +0 -0
  259. package/client/assets/ProjectInfo-DiD9lzzx.js.gz +0 -0
  260. package/client/assets/ProtectRoute-CcDK6JVA.js.br +0 -0
  261. package/client/assets/ProtectRoute-CcDK6JVA.js.gz +0 -0
  262. package/client/assets/ProtectedCuesheet-D19INqhI.js +0 -2
  263. package/client/assets/ProtectedCuesheet-D19INqhI.js.br +0 -0
  264. package/client/assets/ProtectedCuesheet-D19INqhI.js.gz +0 -0
  265. package/client/assets/ProtectedEditor-BVabJfIz.js +0 -3
  266. package/client/assets/ProtectedEditor-BVabJfIz.js.br +0 -0
  267. package/client/assets/ProtectedEditor-BVabJfIz.js.gz +0 -0
  268. package/client/assets/ProtectedEditor-BVabJfIz.js.map +0 -1
  269. package/client/assets/RundownEntry-C5kdIHbb.js +0 -2
  270. package/client/assets/RundownEntry-C5kdIHbb.js.br +0 -0
  271. package/client/assets/RundownEntry-C5kdIHbb.js.gz +0 -0
  272. package/client/assets/RundownEntry-C5kdIHbb.js.map +0 -1
  273. package/client/assets/RundownEntry-jE09YkV2.css +0 -1
  274. package/client/assets/RundownEntry-jE09YkV2.css.br +0 -0
  275. package/client/assets/RundownEntry-jE09YkV2.css.gz +0 -0
  276. package/client/assets/RundownExport-BFn7H24P.css +0 -1
  277. package/client/assets/RundownExport-BFn7H24P.css.br +0 -0
  278. package/client/assets/RundownExport-BFn7H24P.css.gz +0 -0
  279. package/client/assets/RundownExport-DhzzqPCD.js +0 -3
  280. package/client/assets/RundownExport-DhzzqPCD.js.br +0 -0
  281. package/client/assets/RundownExport-DhzzqPCD.js.gz +0 -0
  282. package/client/assets/RundownExport-DhzzqPCD.js.map +0 -1
  283. package/client/assets/Select-B3zdv0Ng.js +0 -2
  284. package/client/assets/Select-B3zdv0Ng.js.br +0 -0
  285. package/client/assets/Select-B3zdv0Ng.js.gz +0 -0
  286. package/client/assets/Studio-DS_uXtgn.js.br +0 -0
  287. package/client/assets/Studio-DS_uXtgn.js.gz +0 -0
  288. package/client/assets/StyleEditor-DcyJgmAF.js +0 -2
  289. package/client/assets/StyleEditor-DcyJgmAF.js.br +0 -0
  290. package/client/assets/StyleEditor-DcyJgmAF.js.gz +0 -0
  291. package/client/assets/SuperscriptPeriod-DswX2aei.js.br +0 -0
  292. package/client/assets/SuperscriptPeriod-DswX2aei.js.gz +0 -0
  293. package/client/assets/SuperscriptTime-COS4JWHJ.js.br +0 -0
  294. package/client/assets/SuperscriptTime-COS4JWHJ.js.gz +0 -0
  295. package/client/assets/SwatchPicker-DPyJv7aS.js +0 -2
  296. package/client/assets/SwatchPicker-DPyJv7aS.js.br +0 -0
  297. package/client/assets/SwatchPicker-DPyJv7aS.js.gz +0 -0
  298. package/client/assets/TimeElements-8rNLGU60.js +0 -2
  299. package/client/assets/TimeElements-8rNLGU60.js.br +0 -0
  300. package/client/assets/TimeElements-8rNLGU60.js.gz +0 -0
  301. package/client/assets/TimeInput-OX4LMRQl.js.br +0 -0
  302. package/client/assets/TimeInput-OX4LMRQl.js.gz +0 -0
  303. package/client/assets/TimelinePage-7kRpUl6P.js.br +0 -0
  304. package/client/assets/TimelinePage-7kRpUl6P.js.gz +0 -0
  305. package/client/assets/Timer-Bg9pVhup.js.br +0 -0
  306. package/client/assets/Timer-Bg9pVhup.js.gz +0 -0
  307. package/client/assets/TimerControlExport-BNfZ99Im.js +0 -2
  308. package/client/assets/TimerControlExport-BNfZ99Im.js.br +0 -0
  309. package/client/assets/TimerControlExport-BNfZ99Im.js.gz +0 -0
  310. package/client/assets/TimerDisplay-DQQ7sMDc.js +0 -2
  311. package/client/assets/TimerDisplay-DQQ7sMDc.js.br +0 -0
  312. package/client/assets/TimerDisplay-DQQ7sMDc.js.gz +0 -0
  313. package/client/assets/TitleCard-De0WhlN2.js.br +0 -0
  314. package/client/assets/TitleCard-De0WhlN2.js.gz +0 -0
  315. package/client/assets/Tooltip-B4PEP32j.js +0 -2
  316. package/client/assets/Tooltip-B4PEP32j.js.br +0 -0
  317. package/client/assets/Tooltip-B4PEP32j.js.gz +0 -0
  318. package/client/assets/ViewLogo-CHqiH4C0.js.br +0 -0
  319. package/client/assets/ViewLogo-CHqiH4C0.js.gz +0 -0
  320. package/client/assets/ViewParamsEditor-BHIK3qtx.js.br +0 -0
  321. package/client/assets/ViewParamsEditor-BHIK3qtx.js.gz +0 -0
  322. package/client/assets/editorSettings-VcitNPq1.js.br +0 -0
  323. package/client/assets/editorSettings-VcitNPq1.js.gz +0 -0
  324. package/client/assets/getProgress-mRMYlU96.js.br +0 -0
  325. package/client/assets/getProgress-mRMYlU96.js.gz +0 -0
  326. package/client/assets/index-DYkg-xOk.js +0 -3
  327. package/client/assets/index-DYkg-xOk.js.br +0 -0
  328. package/client/assets/index-DYkg-xOk.js.gz +0 -0
  329. package/client/assets/index-DYkg-xOk.js.map +0 -1
  330. package/client/assets/offset-Bs6CY1IK.js.br +0 -3
  331. package/client/assets/offset-Bs6CY1IK.js.gz +0 -0
  332. package/client/assets/parseUserTime-CI7s8pYc.js.br +0 -0
  333. package/client/assets/parseUserTime-CI7s8pYc.js.gz +0 -0
  334. package/client/assets/playbackstate-DisgQbHM.js.br +0 -0
  335. package/client/assets/playbackstate-DisgQbHM.js.gz +0 -0
  336. package/client/assets/presentation.utils-Bv3PuMWv.js.br +0 -0
  337. package/client/assets/presentation.utils-Bv3PuMWv.js.gz +0 -0
  338. package/client/assets/rundownUtils-CJxEqFha.js +0 -2
  339. package/client/assets/rundownUtils-CJxEqFha.js.br +0 -0
  340. package/client/assets/rundownUtils-CJxEqFha.js.gz +0 -0
  341. package/client/assets/rundownUtils-CJxEqFha.js.map +0 -1
  342. package/client/assets/timer.utils-P25ngopd.js +0 -2
  343. package/client/assets/timer.utils-P25ngopd.js.br +0 -0
  344. package/client/assets/timer.utils-P25ngopd.js.gz +0 -0
  345. package/client/assets/useCustomFields-DUYgd-E7.js +0 -2
  346. package/client/assets/useCustomFields-DUYgd-E7.js.br +0 -0
  347. package/client/assets/useCustomFields-DUYgd-E7.js.gz +0 -0
  348. package/client/assets/useCustomFields-DUYgd-E7.js.map +0 -1
  349. package/client/assets/useEventSelection-R7JdgAzy.js +0 -2
  350. package/client/assets/useEventSelection-R7JdgAzy.js.br +0 -0
  351. package/client/assets/useEventSelection-R7JdgAzy.js.gz +0 -0
  352. package/client/assets/useEventSelection-R7JdgAzy.js.map +0 -1
  353. package/client/assets/useProjectData-DdITd09M.js +0 -2
  354. package/client/assets/useProjectData-DdITd09M.js.br +0 -0
  355. package/client/assets/useProjectData-DdITd09M.js.gz +0 -0
  356. package/client/assets/useProjectData-DdITd09M.js.map +0 -1
  357. package/client/assets/useReport-CR0k0b85.js +0 -2
  358. package/client/assets/useReport-CR0k0b85.js.br +0 -0
  359. package/client/assets/useReport-CR0k0b85.js.gz +0 -0
  360. package/client/assets/useReport-CR0k0b85.js.map +0 -1
  361. package/client/assets/useRundown-CR9Ah1Fa.js +0 -2
  362. package/client/assets/useRundown-CR9Ah1Fa.js.br +0 -0
  363. package/client/assets/useRundown-CR9Ah1Fa.js.gz +0 -0
  364. package/client/assets/useRundown-CR9Ah1Fa.js.map +0 -1
  365. package/client/assets/useSelectAndRevealEntry-CzSIOtzH.js.br +0 -0
  366. package/client/assets/useSelectAndRevealEntry-CzSIOtzH.js.gz +0 -0
  367. package/client/assets/useWindowTitle-Cl1AVD9_.js.br +0 -0
  368. package/client/assets/useWindowTitle-Cl1AVD9_.js.gz +0 -0
  369. package/client/assets/validateEvent-DhFtLvz_.js +0 -2
  370. package/client/assets/validateEvent-DhFtLvz_.js.br +0 -0
  371. package/client/assets/validateEvent-DhFtLvz_.js.gz +0 -0
  372. package/client/assets/vendor-dQa48psh.js.br +0 -0
  373. package/client/assets/vendor-dQa48psh.js.gz +0 -0
  374. package/client/assets/viewLoader.utils-ndDejZHN.js.br +0 -0
  375. package/client/assets/viewLoader.utils-ndDejZHN.js.gz +0 -0
  376. package/client/assets/viewUtils-rcOl1-o8.js.br +0 -0
  377. package/client/assets/viewUtils-rcOl1-o8.js.gz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ViewParamsEditor-BHIK3qtx.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":"isBAUO,SAASA,GACdC,EACAC,EAAoC,CAAA,EACpCC,EAAkB,GACF,CACVC,MAAAA,EAA0B,CAAC,GAAGF,CAAiB,EAGrD,SAAW,CAACG,EAAKC,CAAK,IAAKC,OAAOC,QAAQP,CAAY,EAChDE,GAAmBG,EAAMG,OAAS,SAItCL,EAAQM,KAAK,CACXJ,MAAO,UAAUD,CAAG,GACpBM,MAAO,WAAWL,EAAMK,KAAK,EAAA,CAC9B,EAGIP,OAAAA,CACT,CAMgBQ,SAAAA,GAA6BX,EAA4BE,EAAkB,GAA2B,CACpH,MAAMC,EAA+B,CAAE,EAGvC,SAAW,CAACC,EAAKC,CAAK,IAAKC,OAAOC,QAAQP,CAAY,EAChDE,GAAmBG,EAAMG,OAAS,SAItCL,EAAQM,KAAK,CACXJ,MAAOD,EACPM,MAAOL,EAAMK,MACbE,OAAQP,EAAMO,MAAAA,CACf,EAGIT,OAAAA,CACT,CAKO,SAASU,GACdC,EACAb,EAAoC,GACpB,CAChB,MAAMc,EAAmBD,EAAYE,OAAOC,IAAI,CAACC,EAAOC,KAC/C,CACLd,MAAO,GAAGc,CAAK,IAAID,EAAME,KAAK,GAC9BV,MAAOQ,EAAME,KACf,EACD,EAED,MAAO,CAAC,GAAGnB,EAAmB,GAAGc,CAAgB,CACnD,CAOA,SAASM,EAAeT,EAAgB,CAClCA,OAAAA,EAAOU,WAAW,GAAG,EAChBV,EAAOW,UAAU,CAAC,EAEpBX,CACT,CAgBA,SAASY,EAAqBC,EAA0C,CACtE,MAAMC,EAA0B,CAC9BC,cAAe,CAAC,EAChBC,gBAAiBC,IACjBC,kBAAmBD,IACnBE,qBAAsBF,IACtBG,gBAAiB,CAAA,CACnB,EAEAP,OAAAA,EAAYQ,QAAqBC,GAAA,CACvB/B,EAAAA,QAAQ8B,QAAoBE,GAAA,CAC9BA,EAAO3B,OAAS,WACTuB,EAAAA,iBAAiBK,IAAID,EAAOE,EAAE,EACnCF,EAAOG,SACTZ,EAASM,gBAAgBG,EAAOE,EAAE,EAAIF,EAAOG,SAG/CZ,EAASC,cAAcQ,EAAOE,EAAE,EAAIE,OAAOJ,EAAOK,YAAY,EAG5DL,EAAO3B,OAAS,SACToB,EAAAA,YAAYQ,IAAID,EAAOE,EAAE,EACzBF,EAAO3B,OAAS,WAChBsB,EAAAA,cAAcM,IAAID,EAAOE,EAAE,CACtC,CACD,CAAA,CACF,EAEMX,CACT,CAQgBe,SAAAA,EAA0BC,EAA0BjB,EAA2B,CACvFkB,MAAAA,EAAkB,IAAIC,gBACtBC,MAAiBhB,IACjBH,EAAWF,EAAqBC,CAAW,EAG3CqB,EAAiBA,CAACT,EAAYhC,IAAkB,CACpD,MAAM0C,EAAO,GAAGV,CAAE,IAAIhC,CAAK,GACtBwC,EAAWG,IAAID,CAAI,IACtBF,EAAWT,IAAIW,CAAI,EACHE,EAAAA,OAAOZ,EAAIhC,CAAK,EAEpC,EAGOE,cAAAA,QAAQmB,EAASM,eAAe,EAAEC,QAAQ,CAAC,CAACI,EAAIC,CAAM,IAAM,CACjEA,EAAOL,QAAmB5B,GAAA,CACpBA,GACFyC,EAAeT,EAAIhC,CAAK,CAC1B,CACD,CAAA,CACF,EAGME,OAAAA,QAAQmC,CAAS,EAAET,QAAQ,CAAC,CAACI,EAAIhC,CAAK,IAAM,CAC7C,OAAOA,GAAU,UAAYA,EAAM6C,SAEjCxB,EAASK,iBAAiBiB,IAAIX,CAAE,IAElCc,MAAMC,KAAKP,CAAU,EAAEZ,QAAkBc,GAAA,CACnCA,EAAKzB,WAAW,GAAGe,CAAE,GAAG,GAC1BQ,EAAWQ,OAAON,CAAI,CACxB,CACD,EACDJ,EAAgBU,OAAOhB,CAAE,GAI3BhC,EAAMiD,MAAM,GAAG,EAAErB,QAAesB,GAAA,CAE9B,MAAMC,EACA9B,EAASE,YAAYoB,IAAIX,CAAE,EACtBhB,EAAekC,CAAC,EAErB7B,EAASI,cAAckB,IAAIX,CAAE,EACxBkB,IAAM,KAAO,OAAS,QAExBA,GAEL7B,EAASK,iBAAiBiB,IAAIX,CAAE,GAAKX,EAASC,cAAcU,CAAE,IAAMmB,IACtEV,EAAeT,EAAImB,CAAc,CACnC,CACD,EACH,CACD,EAEMb,CACT,CAQgBc,SAAAA,EAAyBC,EAAgCjC,EAA2B,CAC5FkC,MAAAA,MAAsB9B,IAC5BJ,EAAYQ,QAAqBC,GAAA,CACvB/B,EAAAA,QAAQ8B,QAAoBE,GAAA,CAClBC,EAAAA,IAAID,EAAOE,EAAE,CAAA,CAC9B,CAAA,CACF,EAEKuB,MAAAA,EAAY,IAAIhB,gBACRX,OAAAA,EAAAA,QAAQ,CAAC5B,EAAOD,IAAQ,CAC/BuD,EAAgBX,IAAI5C,CAAG,GAChB6C,EAAAA,OAAO7C,EAAKC,CAAK,CAC7B,CACD,EACMuD,CACT,qKC3MO,SAASC,GAAkB,CAAEC,OAAAA,CAA+B,EAAG,CAC9D,KAAA,CAAEC,YAAAA,CAAAA,EAAgBC,EAAkBF,CAAM,EAC1C,CAACG,EAAcC,CAAe,EAAIC,EAAgB,EAElDC,EAAgBC,GAAsB,CAC1C,MAAMC,EAAY,IAAI1B,gBAAgByB,EAAOE,MAAM,EACzCC,EAAAA,IAAI,QAASH,EAAOI,KAAK,EACnCP,EAAgBI,CAAS,CAC3B,EAEIP,OAAAA,EAAYb,SAAW,EAClB,WAIN,MAAI,CAAA,UAAWwB,EAAMC,cACnBZ,SAAAA,EAAY9C,IAAgBoD,GAAA,CAC3B,MAAMO,EAASX,EAAaY,IAAI,OAAO,IAAMR,EAAOI,MAElD,OAAAK,EAAA,KAAC,MAAuB,CAAA,UAAWC,EAAG,CAACL,EAAML,OAAQO,GAAUF,EAAME,MAAM,CAAC,EAC1E,SAAA,CAACI,EAAAA,IAAA,MAAA,CAAKX,WAAOI,KAAM,CAAA,QAClBQ,EACC,CAAA,QAASL,EAAS,UAAY,eAC9B,QAAS,IAAMR,EAAaC,CAAM,EAClC,SAAUO,EACV,UAAWF,EAAMQ,cAEhBN,SAAAA,EAAS,UAAY,OACxB,CAAA,CAAA,CAAA,EATQP,EAAOI,KAUjB,CAEH,CAAA,EACH,CAEJ,CC3CYU,IAAAA,GAAAA,IACVC,EAAAA,aAAe,gBACfC,EAAAA,aAAe,gBACfC,EAAAA,YAAc,eACdC,EAAAA,kBAAoB,qBACpBC,EAAAA,iBAAmB,iBACnBC,EAAAA,cAAgB,sBAChBC,EAAAA,UAAY,iBACZC,EAAAA,SAAW,mBAGXC,EAAAA,OAAS,iBAXCT,IAAAA,GAAAA,CAAAA,CAAAA,6CCQNU,EAAaxF,GACZA,EAAMiB,WAAW,GAAG,EAGlBjB,EAFE,IAAIA,CAAK,GAKpB,SAAwByF,GAAmB,CAAEC,KAAAA,EAAM1F,MAAAA,CAA+B,EAAG,CAC7E,KAAA,CAACO,EAAQoF,CAAS,EAAIC,WAAS,IAAMJ,EAAUxF,CAAK,CAAC,EAE3D6F,OAAAA,EAAAA,UAAU,IAAM,CACJL,EAAAA,EAAUxF,CAAK,CAAC,CAAA,EACzB,CAACA,CAAK,CAAC,EAGPyE,EAAAA,KAAA,MAAA,CAAI,UAAWJ,GAAMyB,OACpB,SAAA,CAAAnB,MAACoB,GAAa,MAAOxF,EAAQ,SAAUoF,EAAW,mBAAkB,GAAA,EACpEhB,EAAAA,IAAC,QAAMpE,SAAOA,CAAA,CAAA,QACb,QAAM,CAAA,KAAK,SAAS,KAAAmF,EAAY,MAAOnF,CAAO,CAAA,CAAA,EACjD,CAEJ,qHCdA,SAAwByF,EAAW,CAAEC,WAAAA,CAA4B,EAAG,CAC5D,KAAA,CAACrC,CAAY,EAAIE,EAAgB,EACjC,CAAE9B,GAAAA,EAAI7B,KAAAA,EAAMgC,aAAAA,CAAAA,EAAiB8D,EAEnC,GAAI9F,IAAS,UACX,MAAI,CAAC8F,EAAWhE,QAAU,CAACgE,EAAWhE,OAAOY,OACpC,KAED8B,EAAAA,IAAA,QAAA,CAAM,OAAM,GAAC,KAAM3C,EAAI,SAAQ,GAAC,MAAOiE,EAAWhE,OAAOiE,KAAK,GAAG,EAAK,EAGhF,GAAI/F,IAAS,SAAU,CAErB,MAAMgG,EADmBvC,EAAaY,IAAIxC,CAAE,GACGG,EAE3C8D,OAAAA,EAAWhE,OAAOY,SAAW,EACvB8B,EAAA,IAAA,OAAA,CAAK,UAAWN,EAAM+B,MAAO,SAAoB,uBAAA,QAGnDC,GAAiB,CAAA,GAAArE,EAAQ,aAAcmE,EAAoB,QAASF,EAAWhE,OAAU,CAAA,CAGnG,GAAI9B,IAAS,eAAgB,CACrBmG,MAAAA,EAAmB1C,EAAa2C,OAAOvE,CAAE,EAG7C,OAAA2C,EAAA,IAAC6B,GACC,CAAA,WAAAP,EACA,QAASK,EAAiBzD,OAASyD,EAAmBL,EAAW9D,cAAgB,CAAC,EAAE,CACpF,CAAA,CAAA,CAIN,GAAIhC,IAAS,UACJ,OAAAwE,MAAC8B,GAAiB,CAAA,GAAAzE,EAAQ,aAAc0E,EAAgB9C,EAAaY,IAAIxC,CAAE,CAAC,GAAKG,CAAgB,CAAA,EAG1G,GAAIhC,IAAS,SAAU,CACf,KAAA,CAAEwG,YAAAA,CAAAA,EAAgBV,EAClBW,EAAqBhD,EAAaY,IAAIxC,CAAE,GAAKG,EAEnD,OACGwC,EAAAA,IAAAkC,EAAA,CACC,OAAO,QACP,KAAK,SACL,KAAK,MACL,KAAM7E,EACN,aAAc4E,EACd,YAAaD,EACb,CAAA,CAIN,GAAIxG,IAAS,SACJ,OAAAwE,MAACc,IAAmB,KAAMzD,EAAI,MAAO4B,EAAaY,IAAIxC,CAAE,GAAKG,CAAgB,CAAA,EAGtF,MAAM2E,EAAqBlD,EAAaY,IAAIxC,CAAE,GAAKG,GAAgB,GAC7D,CAAEwE,YAAAA,CAAAA,EAAgBV,EAExB,OAAQtB,EAAAA,IAAAoC,GAAA,CAAgB,GAAA/E,EAAQ,aAAc8E,EAAoB,YAAAH,EAA4B,CAChG,CAOA,SAASH,GAAY,CAAEP,WAAAA,EAAYnG,QAAAA,CAAkC,EAAG,CAChE,KAAA,CAAEkC,GAAAA,EAAIC,OAAAA,CAAAA,EAAWgE,EACjB,CAACe,EAAYC,CAAa,EAAIrB,EAAAA,SAAmB9F,CAAO,EAG9D+F,EAAAA,UAAU,IAAM,CACdoB,EAAcnH,CAAO,CAAA,EACpB,CAACA,CAAO,CAAC,EAENoH,MAAAA,EAAcA,CAAClH,EAAemH,IAAqB,CAErDF,EADEE,EACsBC,GAAA,CAAC,GAAGA,EAAMpH,CAAK,KAEfoH,EAAKC,OAAcnE,GAAAA,IAAMlD,CAAK,CAFd,CAI5C,EAEIiC,OAAAA,EAAOY,SAAW,EACZ8B,EAAA,IAAA,OAAA,CAAK,UAAWN,EAAM+B,MAAO,SAAoB,uBAAA,EAKvD3B,EAAA,KAAA6C,WAAA,CAAA,SAAA,CAAC3C,EAAAA,IAAA,QAAA,CAAM,KAAM3C,EAAI,OAAM,GAAC,SAAQ,GAAC,MAAOgF,EAAWd,KAAK,GAAG,CAAE,CAAA,QAC5D,MAAI,CAAA,UAAW7B,EAAMyB,OACnB7D,SAAAA,EAAOrB,IAAgBkB,GAEnB2C,EAAAA,KAAA,QAAA,CAEC,UAAWJ,EAAMkD,aACjB,MAAO,CACL,YAAazF,EAAOvB,MAGtB,EAAA,SAAA,CAAAoE,EAAA,IAAC6C,EACC,CAAA,QAASR,EAAWS,SAAS3F,EAAO9B,KAAK,EACzC,gBAA8BkH,GAAAA,EAAYpF,EAAO9B,MAAOmH,CAAkB,EAAE,EAE7ErF,EAAOzB,KAAAA,CAAAA,EAVHyB,EAAO9B,KAWd,CAEH,CACH,CAAA,CAAA,EACF,CAEJ,CAMA,SAASyG,GAAiB,CAAEzE,GAAAA,EAAI0F,aAAAA,CAAoC,EAAG,CACrE,KAAM,CAACP,EAASQ,CAAU,EAAI/B,EAAAA,SAAS8B,CAAY,EAGnD7B,OAAAA,EAAAA,UAAU,IAAM,CACd8B,EAAWD,CAAY,CAAA,EACtB,CAACA,CAAY,CAAC,EAEV/C,MAACiD,GAAO,KAAK,QAAQ,KAAM5F,EAAI,QAAAmF,EAAkB,gBAAiBQ,EAAc,CACzF,CAOA,SAAStB,GAAiB,CAAErE,GAAAA,EAAI0F,aAAAA,EAAc5H,QAAAA,CAA+B,EAAG,CAC9E,KAAM,CAAC+H,EAAUC,CAAW,EAAIlC,EAAAA,SAAS8B,CAAY,EAGrD7B,OAAAA,EAAAA,UAAU,IAAM,CACdiC,EAAYJ,CAAY,CAAA,EACvB,CAACA,CAAY,CAAC,EAGf/C,EAAA,IAACoD,EACC,CAAA,KAAK,QACL,KAAM/F,EACN,QAAAlC,EACA,MAAO+H,EACP,cAA0B7H,GAAA,CACpBA,IAAU,MACd8H,EAAY9H,CAAK,CAAA,EAEnB,CAEN,CAMA,SAAS+G,GAA2C,CAAE/E,GAAAA,EAAI0F,aAAAA,EAAc,GAAGM,CAAoC,EAAG,CAChH,KAAM,CAAChI,EAAOiI,CAAQ,EAAIrC,EAAAA,SAAS8B,CAAY,EAG/C7B,OAAAA,EAAAA,UAAU,IAAM,CACdoC,EAASP,CAAY,CAAA,EACpB,CAACA,CAAY,CAAC,EAGd/C,EAAAA,IAAAkC,EAAA,CACC,OAAO,QACP,KAAM7E,EACN,MAAAhC,EACA,SAAWkI,GAAUD,EAASC,EAAMzE,OAAOzD,KAAU,EACjDgI,GAAAA,EACJ,CAEN,uUCnLA,SAAwBG,GAAkB,CAAEpH,MAAAA,EAAOqH,YAAAA,EAAatI,QAAAA,CAAgC,EAAG,CACjG,KAAM,CAACuI,EAAWC,CAAY,EAAIC,EAAgB,CAAExI,IAAK,UAAUgB,CAAK,GAAIoB,aAAc,EAAA,CAAO,EAE3FqG,EAAiBA,IAAM,CACvBJ,GACYhB,EAAAA,GAAS,CAACA,CAAI,CAEhC,EAEA,OACGzC,EAAAA,IAAA,UAAA,CAAQ,UAAWN,EAAMxC,QACvBd,SAAAA,IAAU+D,EAAYS,OACpBZ,EAAA,IAAA8D,GAAA,CAAe,QAAA3I,IAGd2E,OAAA6C,EAAAA,SAAA,CAAA,SAAA,CAAA7C,EAAAA,KAAC,MAAI,CAAA,UAAWC,EAAG,CAACL,EAAMqE,cAAeN,GAAe/D,EAAM+D,WAAW,CAAC,EAAG,QAASI,EACnFzH,SAAAA,CAAAA,EACAqH,GAAezD,EAAA,IAACgE,EAAc,CAAA,UAAWjE,EAAG,CAAC2D,EAAYhE,EAAMuE,OAASvE,EAAMwE,IAAI,CAAC,CAAK,CAAA,CAAA,EAC3F,EACAlE,EAAAA,IAACmE,GAAgB,CAAA,QAAAhJ,EAAkB,UAAAuI,CAAqB,CAAA,CAAA,CAAA,CAC1D,CAEJ,CAAA,CAEJ,CAOA,SAASS,GAAgB,CAAEhJ,QAAAA,EAASuI,UAAAA,CAAgC,EAAG,CAEnE,OAAA1D,EAAAA,IAAA2C,EAAAA,SAAA,CACGxH,SAAQc,EAAAA,IAAgBkB,GAErB2C,EAAA,KAAC,QAAyB,CAAA,UAAWC,EAAG,CAACL,EAAMhE,MAAOgI,GAAahE,EAAM0E,MAAM,CAAC,EAC9E,SAAA,CAAApE,MAAC,OAAK,CAAA,UAAWN,EAAMtD,MAAQe,WAAOf,MAAM,QAC3C,OAAK,CAAA,UAAWsD,EAAM2E,YAAclH,WAAOkH,YAAY,EACxDrE,EAAAA,IAACqB,EAAW,CAAA,WAAYlE,CAAO,CAAA,CAAA,CAAA,EAHrBA,EAAOf,KAInB,CAEH,EACH,CAEJ,CAEA,SAAS0H,GAAe,CAAE3I,QAAAA,CAAmC,EAAG,CAC9D,OAEKA,EAAAA,IAAAA,EAAAA,SAAAA,CAAAA,SAAAA,EAAQc,IAAI,CAACkB,EAAQhB,UACZkF,EAAsC,CAAA,WAAYlE,CAAlCA,EAAAA,EAAOf,MAAQD,CAA6B,CACrE,EACH,CAEJ,iPC/CemI,GAAAA,EAAAA,KAAKC,EAAgB,EACpC,SAASA,GAAiB,CAAEzF,OAAAA,EAAQ0F,YAAAA,CAAiC,EAAG,CACtE,KAAM,CAACvF,EAAcC,CAAe,EAAIC,EAAgB,EAClD,CAAEsF,KAAMC,GAAiBC,EAAgB,EACzC,CAAEC,OAAAA,EAAQC,MAAAA,GAAUC,EAAyB,EAC7CC,EAAgBC,EAAiB,EAEjCC,EAAqBA,IAAMxG,EAAyBQ,EAAcuF,CAAW,EAE7EU,EAAcA,IAAM,CAClBL,EAAA,CACR,EAEMM,EAAcA,IAAM,CACxBjG,EAAgB+F,GAAoB,CACtC,EAEMG,EAAsBC,GAA0C,CACpEA,EAAUC,eAAe,EAEzB,MAAMC,EAAkBjK,OAAOkK,YAAY,IAAIC,SAASJ,EAAUK,aAAa,CAAC,EAC1E/H,EAAkBF,EAA0B8H,EAAiBf,CAAW,EACtDS,EAAmB,EAC3BhI,QAAQ,CAAC5B,EAAOD,IAAQ,CACtB6C,EAAAA,OAAO7C,EAAKC,CAAK,CAAA,CAClC,EACD6D,EAAgBvB,CAAe,EAE3BoH,GACIF,EAAA,CAEV,EAEA,aACGc,EAAA,CACC,KAAMf,EACN,aAAwBV,GAAA,CACjBA,GACSgB,EAAA,CAIhB,EAAA,SAAApF,EAAAA,KAAC8F,EAAA,CACC,SAAA,CAAA5F,EAAAA,IAAC6F,EAAA,CAAgB,UAAWnG,EAAMoG,QAAS,CAAA,SAC1CC,EAAA,CAAa,UAAWrG,EAAMsG,OAC7B,SAAA,CAAClG,EAAA,KAAA,MAAA,CAAI,UAAWJ,EAAMuG,OACpB,SAAA,CAACjG,EAAAA,IAAAkG,EAAA,CAAa,SAAS,WAAA,CAAA,EACtBlG,EAAA,IAAAmG,EAAA,CAAW,QAAQ,eAAe,KAAK,QAAQ,cAAY,oBAAoB,QAASjB,EACvF,SAAClF,EAAAA,IAAAoG,EAAA,CAAA,CAAO,CACV,CAAA,CAAA,EACF,EACCtG,EAAA,KAAA,MAAA,CAAI,UAAWJ,EAAM2G,KACnB3B,SAAAA,CAAAA,EAAa4B,gBACXtG,EAAA,IAAAuG,EAAA,CAAK,UAAW7G,EAAM8G,KAAM,SAAuD,0DAAA,EAEtFxG,MAACnB,IAAkB,OAAAC,EAAe,EAClCkB,EAAAA,IAAC,OAAK,CAAA,GAAG,mBAAmB,SAAUoF,EAAoB,UAAW1F,EAAM+G,YACxEjC,SAAYvI,EAAAA,IACXiB,GAAA8C,MAACwD,IAEC,MAAOtG,EAAQd,MACf,YAAac,EAAQuG,YACrB,QAASvG,EAAQ/B,OAHZ+B,EAAAA,EAAQd,MAKhB,CACH,CAAA,CAAA,EACF,EACC0D,EAAA,KAAA,MAAA,CAAI,UAAWJ,EAAMgH,OACpB,SAAA,CAAC1G,EAAAA,IAAAC,EAAA,CAAO,QAAQ,SAAS,KAAK,QAAQ,QAASkF,EAAa,KAAK,QAAO,SAExE,kBAAA,CAAA,EACCnF,EAAA,IAAAC,EAAA,CACC,QAAQ,UACR,KAAK,QACL,KAAK,mBACL,KAAK,SACL,cAAY,oBAAmB,SAGjC,OAAA,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAEJ"}
1
+ {"version":3,"file":"ViewParamsEditor-BX2RM8sx.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 m,j as f,f as g}from"./vendor-dQa48psh.js";import{e as c,bL as y,T as S}from"./index-DYkg-xOk.js";import{a as b,v as T,b as _,E as p,T as I}from"./validateEvent-DhFtLvz_.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]="88df530a-ad4b-42db-a601-f77d10d635bd",t._sentryDebugIdIdentifier="sentry-dbid-88df530a-ad4b-42db-a601-f77d10d635bd")}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},L=m.forwardRef(function({className:e,variant:r="subtle",fluid:n,rows:i=5,resize:l="none",style:s,...d},u){return f.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]),...d})}),a={duration:"00:10:00",linkPrevious:!0,timeStrategy:I.LockDuration,warnTime:"00:02:00",dangerTime:"00:01:00",timerType:S.CountDown,endAction:p.None},j=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:T(localStorage.getItem("ontime-default-timer-type"),a.timerType),defaultEndAction:b(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{L as T,a as e,j as u};
2
- //# sourceMappingURL=editorSettings-VcitNPq1.js.map
1
+ import{h as f,j as d,f as g}from"./vendor-BKUJ0_Du.js";import{e as c,bO as y,T as S}from"./index-Dm-4OTmY.js";import{b as T,v as b,a as _,E as p,T as I}from"./validateEvent-GnPt-e9-.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-_x6YKRfR.js.map
@@ -0,0 +1,6 @@
1
+ � @���i�^N�owךyR���b�(9�R�c�s���\�B����,%�ړЛ���� ���SَXp�ϩC��+�n!����%05i�J��z�n���?������[�x��=1��%��!��b�?�����U2��,[!d>��((*���x|�ns4�'=n�Ɋ�ީ76�Gc?iA��hi%��$�"�������B"K�0Tf9��U���,�%օ񠣿���mQS����*39��������SQl��J�Z�aۄ�V��yT�E�^_����q�nȷ'��s{��犬��'Q/�x�
2
+ �U?��U�GT��/�î�˄�!'r�ې6~��X��X�73&�"rC���f�@��*���z5c5h���iz�u��(ܓ]��!��M���.��*�Y'W9�ʈŽ;mS�MIO����sEh� jƘj����C��ȡ���a�z6Z!9F�;&�o�E��`�c��A���X��n�.�r�hz�ʨW�2
3
+ 2��LT�Ȝˑ���{��`�0y�b���D���?YTCX��,Y�u���J%Y.�R��ͨ��#wK� ��"OE�I}�Qc��&#��RE
4
+ �� �r����C/#B�
5
+ T?g�.$�g3a�t!��r|W������q�|(��Gޞʷ���H6ԩ�o�ൾ�R��%a*�xd�;`�T�~9�c��Y�h|�֌�r�:g������Ovn�'�e8��s���'wط��<t��E ^���d��l�h!�����)d�N�z���[2I|����OK��̐i\�]䝝bq��N�oѾǻ � ���s�x=�3w�1
6
+ �;
@@ -1 +1 @@
1
- {"version":3,"file":"editorSettings-VcitNPq1.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-_x6YKRfR.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-dQa48psh.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-mRMYlU96.js.map
1
+ import"./vendor-BKUJ0_Du.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-ZUTmCn_v.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getProgress-mRMYlU96.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-ZUTmCn_v.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-BJQKNHfo.js","./vendor-BKUJ0_Du.js","./vendor-4xP-6xVS.css","./timer.utils-B4bvsns3.js","./viewUtils-29a3Mmiu.js","./playbackstate-Dl_ZJABT.js","./MultiPartProgressBar-W2a-JWPY.js","./getProgress-ZUTmCn_v.js","./MultiPartProgressBar-1_EFIx1M.css","./EmptyPage-CYVrjOvI.js","./EmptyPage-Ci10HwDK.css","./TitleCard-BNjv58eq.js","./TitleCard-Bpf2kJHj.css","./ViewLogo-2I7w5Yms.js","./ViewLogo-Cu9JQggv.css","./ViewParamsEditor-BX2RM8sx.js","./SwatchPicker-Ckpchvjo.js","./SwatchPicker-DxatRu17.css","./Select-BnGTAeXJ.js","./Select-Cd08aEcf.css","./ViewParamsEditor-CupOV30k.css","./useWindowTitle-DM8dIp8L.js","./SuperscriptTime-BVanhNvd.js","./SuperscriptTime-Bk5IU6zG.css","./presentation.utils-Z61KykAH.js","./viewLoader.utils-4lL4PiNI.js","./validateEvent-GnPt-e9-.js","./useCustomFields-BBE4LBBr.js","./useProjectData-C110zIXC.js","./useRundown-DAo6huE4.js","./Timer-Jjolf5Ra.css","./Countdown-DQM2ppPg.js","./FollowButton-DcSbb4R_.js","./FollowButton-Dab8w6zT.css","./useReport-DqSBq4MG.js","./offset-VthsmtrO.js","./Countdown-BYXg70ir.css","./Backstage-BdrcXNr9.js","./SuperscriptPeriod-EEedc9rG.js","./Backstage-BlanRQaw.css","./Studio-BK2Klo_K.js","./Studio-BbZ7w7aA.css","./TimelinePage-D4QNdk-Z.js","./rundownUtils-CXZRD6yP.js","./TimelinePage-CcFl3uul.css","./ProjectInfo-BR_7Hp5u.js","./ProjectInfo-CTQGba6F.css","./ProtectedEditor-CsfvVyOU.js","./ProtectRoute-Bxq6q7ba.js","./ProtectRoute-Bm5sjStK.css","./useEventSelection-Bpbu89c7.js","./useEventSelection-D_Et8xSN.css","./editorSettings-_x6YKRfR.js","./editorSettings-BqHbWs9b.css","./EditorUtils-BLcTuWz1.js","./EditorUtils-L4Sg72o_.css","./Tooltip-DZJ7u9gm.js","./Tooltip-CKb7gU2M.css","./TimeInput-Cwl9vLWA.js","./parseUserTime-sZbEBi61.js","./TimeInput-Cu-N5DmX.css","./useSelectAndRevealEntry-DTg0hmxA.js","./TimeElements-CYIgGk0T.js","./TimeElements-B1xG3q8U.css","./OverviewWrapper-B2i8d3rt.js","./OverviewWrapper-DOYzR0Ef.css","./TimerDisplay-tVcUk9j3.js","./TimerDisplay-B-FvT2T-.css","./ProtectedEditor-DID9cfOA.css","./ProtectedCuesheet-C7AqD2dy.js","./CuesheetTable-B5LQVh5m.js","./DelayIndicator-DKS6mZdB.js","./DelayIndicator-VuYhhwTj.css","./CuesheetTable-BJ30G538.css","./ProtectedCuesheet-_MUBZbf1.css","./OperatorExport-CbWojpp6.js","./OperatorExport-CA5WcIt5.css","./EditorFeatureWrapper-C1vLQxiy.js","./EditorFeatureWrapper-MP8HHRxx.css","./RundownExport-25orDQIW.js","./RundownExport-CzaSrbaj.css","./TimerControlExport-Ba1vifNg.js","./TimerControlExport-X_cQKSFg.css","./MessageControlExport-BgT9JaXk.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 ve,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 Ae,x as ae,y as pt,z as gn,A as hn,B as _n,C as gt,E as bn,F as ye,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 pe,S as En,T as Nn,U as In,V as Tn,W as Rn,X as Pn,Y as $n,Z as Dn,_ as An,$ as E,a0 as v,a1 as qn,a2 as On,a3 as Ln,a4 as Un,a5 as Fn,a6 as Mn,a7 as zn}from"./vendor-BKUJ0_Du.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]="a3b83d14-d56e-400b-988f-14d558434324",e._sentryDebugIdIdentifier="sentry-dbid-a3b83d14-d56e-400b-988f-14d558434324")}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||{}),T=(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))(T||{}),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||{}),R=(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))(R||{}),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||{}),ge=(e=>(e.CountUp="count-up",e.CountDown="count-down",e))(ge||{}),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:ge.CountUp,duration:0,playback:V.Stop},auxtimer2:{current:0,direction:ge.CountUp,duration:0,playback:V.Stop},auxtimer3:{current:0,direction:ge.CountUp,duration:0,playback:V.Stop},ping:1},xe={"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.4.2",Di="https://www.github.com/cpvalente/ontime",Ai="https://api.github.com/repos/cpvalente/ontime/releases/latest",qi="https://www.getontime.no",Oi="https://discord.com/invite/eje3CSUEXm",Li="https://www.reddit.com/r/ontimeapp/",Ui="https://docs.getontime.no",Fi="https://docs.getontime.no/features/custom-fields/",Mi="https://github.com/sponsors/cpvalente",zi="https://buymeacoffee.com/cpvalente",Bi=Vn,Wi=!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"),Vi="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(),O=()=>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"],qe=["appSettings"],Ki=["appVersion"],Hi=["automation"],Ke=["customFields"],eo=["project"],Qi=["projectList"],Gi=["projectRundowns"],He=["rundown"],oe=["urlpresets"],he=["viewSettings"];const to=["report"],Oe=["translation"],ie=`${X}/data`,Le="user",no="styles/override.css",oo="translations/translations.json",ro=`${X}/${Le}/${no}`,Ji=`${X}/${Le}/logo`,so=`${X}/${Le}/${oo}`,re=1e3,Q=1e3*60,_e=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 Zi(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 Xi(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 Yi(e){return e.endsWith(":00")?e.slice(0,-3):e}function ec(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"),f=n.getUTCSeconds().toString(),b=n.getUTCMilliseconds().toString().padStart(3,"0"),j=(n.getUTCHours()%12||12).toString(),_=j.padStart(2,"0"),C=n.getUTCHours()>=12?"PM":"AM";return go(t,{HH:r,H:s,hh:_,h:j,mm:a,m:i,ss:l,s:f,S:b,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 tc(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:f,mode:b,actualStart:j,plannedStart:_}=t,C=r-a,w=Math.max(0,n+s)+C*Qe;let A=0;b===Z.Relative&&(A=(j??0)+a*Qe-(_??0));const u=w+A,ce=u+f;return l?ce:i>f?u:ce-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 m=e=>()=>wo(e),Et={setIdentify:e=>d("client",e),setRedirect:e=>{d("client",e)},setClientName:e=>d("client",e)},nc=m(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}}),oc=m(e=>({blackout:e.message.timer.blackout,blink:e.message.timer.blink,secondarySource:e.message.timer.secondarySource})),rc=m(e=>({text:e.message.timer.text,visible:e.message.timer.visible})),sc=m(e=>({text:e.message.secondary,visible:e.message.timer.secondarySource==="secondary"})),ac=m(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}}),ic={timerText:e=>d("message",{timer:{text:e}}),timerVisible:e=>d("message",{timer:{visible:e}}),secondaryMessage:e=>d("message",{secondary:e}),timerBlink:e=>d("message",{timer:{blink:e}}),timerBlackout:e=>d("message",{timer:{blackout:e}}),timerSecondarySource:e=>d("message",{timer:{secondarySource:e}})},cc=m(e=>({playback:e.timer.playback,selectedEventIndex:e.rundown.selectedEventIndex,numEvents:e.rundown.numEvents,timerPhase:e.timer.phase})),lc={start:()=>d("start",void 0),pause:()=>d("pause",void 0),roll:()=>d("roll",void 0),startNext:()=>d("start","next"),previous:()=>{d("load","previous")},next:()=>{d("load","next")},stop:()=>{d("stop",void 0)},reload:()=>{d("reload",void 0)},addTime:e=>{d("addtime",e)}},uc=m(e=>({aux1:e.auxtimer1.current,aux2:e.auxtimer2.current,aux3:e.auxtimer3.current})),dc=e=>m(t=>e===1?t.auxtimer1.current:e===2?t.auxtimer2.current:t.auxtimer3.current)(),mc=e=>m(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})(),fc={start:e=>d("auxtimer",{[e]:V.Start}),pause:e=>d("auxtimer",{[e]:V.Pause}),stop:e=>d("auxtimer",{[e]:V.Stop}),setDirection:(e,t)=>d("auxtimer",{[e]:{direction:t}}),setDuration:(e,t)=>d("auxtimer",{[e]:{duration:t}})},pc=m(e=>{var t;return((t=e.eventNow)==null?void 0:t.id)??null}),gc=m(e=>{var t;return((t=e.groupNow)==null?void 0:t.id)??null}),hc={loadEvent:e=>d("load",{id:e}),startEvent:e=>d("start",{id:e}),start:()=>d("start",void 0),pause:()=>d("pause",void 0)},_c=m(e=>({...e.timer})),bc=m(e=>e.clock),vc=m(e=>{var t;return{id:((t=e.eventFlag)==null?void 0:t.id)??null,expectedStart:e.offset.expectedFlagStart}}),yc=m(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=m(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=m(e=>e.ping>0),xc=m(e=>e.offset.mode),wc=e=>d("offsetmode",e),Sc=m(e=>e.timer.playback),kc=m(e=>({plannedStart:e.rundown.plannedStart,actualStart:e.rundown.actualStart,plannedEnd:e.rundown.plannedEnd})),jc=m(e=>e.offset.expectedRundownEnd),Cc=m(e=>({numEvents:e.rundown.numEvents,selectedEventIndex:e.rundown.selectedEventIndex})),Ec=m(e=>({offset:e.offset.mode===Z.Absolute?e.offset.absolute:e.offset.relative,playback:e.timer.playback})),Nc=m(e=>{var t;return{clock:e.clock,mode:e.offset.mode,groupExpectedEnd:e.offset.expectedGroupEnd,actualGroupStart:e.rundown.actualGroupStart??0,currentDay:((t=e.eventNow)==null?void 0:t.dayOffset)??0,playback:e.timer.playback}}),Ic=m(e=>{var t;return{clock:e.clock,mode:e.offset.mode,actualStart:e.rundown.actualStart??0,plannedStart:e.rundown.plannedStart??0,currentDay:((t=e.eventNow)==null?void 0:t.dayOffset)??0,playback:e.timer.playback}}),Tc=m(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}}}),Rc=m(e=>({playback:e.timer.playback,current:e.timer.current,clock:e.clock})),Pc=m(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}}),$c=m(e=>({clock:e.clock,playback:e.timer.playback})),Dc=m(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()*_e;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(qe);return(e==null?void 0:e.timeFormat)??"24"}function Ac(e,t=St,n=kt){return e==="12"?t:n}function Io(e,t){const n=Eo();return n||(No()==="12"?e:t)}const qc=(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 Oc(e,t=!0){if(e<=0)return"0m";const n=Math.floor(e/_e),r=Math.floor(e%_e/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 Lc(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 Uc(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 Ue=sn(()=>({logs:[]})),To=()=>an(Ue),Nt=e=>Ue.setState(t=>({logs:[e,...t.logs]})),Ro=()=>Ue.setState({logs:[]});function Po(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 Fc(e){return e instanceof Error?e.message:typeof e!="string"?JSON.stringify(e):e}function Mc(e,t){const n=`${e}: ${Po(t)}`;Nt({id:uo(),origin:"SERVER",time:fo(Co()),level:ht.Error,text:n})}async function Xe(){await y.invalidateQueries()}function zc(e,t){return new Blob([e],{type:t})}function Bc(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=ve(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 Oo(e){S.getState().setId(e)}function et(){return S.getState().id}function Lo(e){S.getState().setRedirect(e)}function Uo(e){return S.getState().setClients(e)}const Fo=ve(e=>({showDialog:null,clearDialog:()=>e({showDialog:null}),setDialog:t=>e({showDialog:t})}));function Tt(e){Fo.getState().setDialog(e)}let P=null,L=null;const Y={reconnectBaseInterval:1e3,reconnectMaxInterval:3e4,reconnectMinInterval:500,reconnectJitter:.25,offlineAttemptsThreshold:2};let Pe=!1,H=0;const Rt=()=>{P=new WebSocket(Gn);const e=qo();P.onopen=()=>{const t=Pe;L&&(clearTimeout(L),L=null),Pe=!0,H=0,d(N.ClientSet,{type:"ontime",origin:window.location.origin,path:window.location.pathname+window.location.search,name:e}),t&&Xe(),tt(!0)},P.onclose=()=>{console.warn("WebSocket disconnected"),L&&(clearTimeout(L),L=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));L=setTimeout(()=>{L=null,H>Y.offlineAttemptsThreshold&&tt(!1),console.warn(`WebSocket: reconnecting now (#${H+1}, waited ${r}ms)`),P&&P.readyState===WebSocket.CLOSED&&(H+=1,Rt())},r)},P.onerror=t=>{console.error("WebSocket error:",t)},P.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:{Oo(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&&Lo(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 R.All:Xe();break;case R.CustomFields:y.invalidateQueries({queryKey:Ke});break;case R.ProjectData:y.invalidateQueries({queryKey:eo});break;case R.Report:y.invalidateQueries({queryKey:to});break;case R.Rundown:if(i===y.getQueryData(He).revision)break;y.invalidateQueries({queryKey:He}),y.invalidateQueries({queryKey:Ke});break;case R.UrlPresets:y.invalidateQueries({queryKey:oe});break;case R.ViewSettings:y.invalidateQueries({queryKey:he});break;case R.Translation:y.invalidateQueries({queryKey:Oe});break;case R.Settings:y.invalidateQueries({queryKey:qe});break;default:break}break}default:break}}catch{}}};function d(e,t){P&&P.readyState===WebSocket.OPEN&&P.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",le={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:Pe,reconnectAttempts:H}});const i=ln(n);this.setState({eventId:i,info:r})})}render(){return this.state.errorMessage?o.jsx("div",{className:le.errorContainer,"data-testid":"error-container",children:o.jsxs("div",{children:[o.jsx("p",{className:le.error,children:": /"}),o.jsx("p",{children:"Something went wrong."}),o.jsx("a",{className:le.report,href:`mailto:mail@getontime.no?subject=Error%20Report&body=${encodeURIComponent(this.reportContent)}`,children:"Report error"}),o.jsx("div",{role:"button",className:le.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",je={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(f=>f.clients),t=S(f=>f.id),n=S(f=>f.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:je.overlay,"data-testid":"identify-overlay",onClick:i,children:[o.jsx("div",{className:je.name,children:n}),o.jsx("div",{className:je.message,children:"Click to close"})]})}const Fe=`${ie}/settings`;async function Go(e){return(await h.get(Fe,{signal:e==null?void 0:e.signal})).data}async function Wc(e){return h.post(Fe,e)}async function Vc(e){h.post(`${Fe}/welcomedialog`,{show:e})}const Jo={version:"4.0.0",serverPort:4001,editorKey:null,operatorKey:null,timeFormat:"24",language:"en"};function Pt(){const{data:e,status:t,isFetching:n,isError:r,refetch:s}=se({queryKey:qe,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}),ue={editor:"ontime-editor-entry",operator:"ontime-operator-entry"},Xo=({children:e})=>{const{status:t,data:n}=Pt(),[r,s]=c.useState(!0),[a,i]=c.useState(!0);c.useEffect(()=>{if(t==="pending")return;const f=sessionStorage.getItem(ue.editor);f&&f===n.editorKey?s(!0):s(n.editorKey==null||n.editorKey==="");const b=sessionStorage.getItem(ue.operator);b&&b===n.operatorKey?i(!0):i(n.operatorKey==null||n.operatorKey==="")},[n,t]);const l=c.useCallback((f,b)=>{function j(_,C){return C==null||C===""||_===C}if(b==="editor"){const _=j(f,n.editorKey);return _&&sessionStorage.setItem(ue.editor,f),s(_),_}else if(b==="operator"){const _=j(f,n.operatorKey);return _&&sessionStorage.setItem(ue.operator,f),i(_),_}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 be="keep-awake";function er(e,t){return(t==null?void 0:t.has(be))||e.has(be)}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(be):a.set(be,"1"),a))},[r,t]);return{keepAwake:r,toggleKeepAwake:s}}function tr(){return Yo(),null}const we=`${ie}/assets`;async function Kc(e){return(await h.get(`${we}/css`,{signal:e==null?void 0:e.signal})).data}async function Hc(e){await h.post(`${we}/css`,{css:e})}async function Qc(){return(await h.post(`${we}/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(`${we}/translations`,{translation:e}),await y.invalidateQueries({queryKey:Oe})}const Me=12e4,Gc={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??xe,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"},Ce={en:xe,es:ir,fr:cr,it:lr,de:ar,pt:ur},qt=c.createContext({userTranslation:xe,getLocalizedString:()=>"",postUserTranslation:async()=>{}}),dr=({children:e})=>{const{data:t}=Pt(),{data:n}=sr(),r=c.useCallback((a,i=(t==null?void 0:t.language)||"en")=>{if(i in Ce){if(a in Ce[i])return Ce[i][a]}else if(i==="custom")return n[a];return xe[a]},[t==null?void 0:t.language,n]),s={userTranslation:n,getLocalizedString:r,postUserTranslation:or};return o.jsx(qt.Provider,{value:s,children:e})},Jc=()=>{const{userTranslation:e,getLocalizedString:t,postUserTranslation:n}=c.useContext(qt);return{userTranslation:e,getLocalizedString:t,postUserTranslation:n}},mr=ve(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,Ot=(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},Zc=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(" "),Xc="–",Yc="––:––:––",el="––:––";function tl(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",Ee={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([Ee.baseIconButton,Ee[n],Ee[r],e]),type:"button",...s,children:t}));J.displayName="IconButton";const Nr="_fadeable_1nsno_17",Ir="_hidden_1nsno_22",Tr="_buttonContainer_1nsno_27",Ne={fadeable:Nr,hidden:Ir,buttonContainer:Tr};function Rr({toggleMenu:e,toggleSettings:t}){const n=Ot(!0);return o.jsxs("div",{id:"fadeable-navigation",className:k([Ne.fadeable,Ne.buttonContainer,!n&&Ne.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 Pr="_fadeable_1y6b8_17",$r="_hidden_1y6b8_22",Dr="_lockIcon_1y6b8_27",Ie={fadeable:Pr,hidden:$r,lockIcon:Dr};function Ar(){const e=Ot();return o.jsx("div",{className:k([Ie.fadeable,Ie.lockIcon,!e&&Ie.hidden]),children:o.jsx(W,{})})}function qr(){const{width:e}=lt();return c.useMemo(()=>e<1300,[e])}const Or=ve()(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}})})),Lr="_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:Lr,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},I=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})})]}));I.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(Ae,{})})]}),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",de={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([de.input,de[n],de[r],s&&de.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()},f=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:b=>a(b.target.value)}),footerElements:o.jsxs(o.Fragment,{children:[o.jsx(I,{variant:"subtle",size:"large",onClick:r,children:"Cancel"}),o.jsx(I,{variant:"primary",size:"large",onClick:l,disabled:!f,children:"Submit"})]})})}var it;const $e=((it=window.process)==null?void 0:it.type)==="renderer",B=$e?window.require("electron").ipcRenderer:null;function Lt(){const e=c.useCallback((t,n)=>{$e&&B&&B.send(t,n)},[]);return{isElectron:$e,sendToElectron:e}}function nl(){const e=ae(),{isElectron:t}=Lt();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 ol(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 Te({current:e,to:t,postAction:n,children:r}){const{isElectron:s}=Lt(),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 rl(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 sl(e){try{await Mt(e)}catch{}}const Rs="_blink_1pu1m_1",Ps="_fourtyfive_1pu1m_13",$s="_copytag_1pu1m_17",Ds="_action_1pu1m_22",As="_label_1pu1m_27",qs="_small_1pu1m_38",Os="_medium_1pu1m_43",Ls="_large_1pu1m_48",Us="_copy_1pu1m_17",te={blink:Rs,fourtyfive:Ps,copytag:$s,action:Ds,label:As,small:qs,medium:Os,large:Ls,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),f=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(I,{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:f,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",me={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:me.header,children:"Accessible on external networks"}),o.jsx("div",{className:me.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:me.interfaceCopy,children:[r.address," ",o.jsx(pt,{className:me.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:f}=bn(),{mirror:b,toggleMirror:j}=Or(),{keepAwake:_,toggleKeepAwake:C}=At(),x=ye();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(Ae,{})})]}),o.jsxs("div",{className:F.body,children:[Qn&&o.jsxs(D,{active:l,onClick:f,children:["Toggle Fullscreen",l?o.jsx(yn,{}):o.jsx(xn,{})]}),o.jsxs(D,{active:b,onClick:()=>j(),children:["Flip Screen",o.jsx(wn,{}),b&&o.jsx("span",{className:F.note,children:"Active"})]}),Dt&&o.jsxs(D,{active:_,onClick:C,children:["Keep Awake",o.jsx(Sn,{}),_&&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(Te,{to:"cuesheet",current:x.pathname==="/cuesheet",postAction:s?t:void 0,children:[o.jsx(W,{}),"Cuesheet"]}),o.jsxs(Te,{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(Te,{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(Rr,{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}=ye(),{redirect:r,setRedirect:s}=S(jn(i=>({redirect:i.redirect,setRedirect:i.setRedirect}))),a=jo();c.useEffect(()=>{a&&d(N.ClientSetPath,t+n)},[t,n,a]),c.useEffect(()=>{r!==""&&(s(""),r!==t+n&&e(r,{replace:!0}))},[e,t,r,n,s])},Se=`${ie}/url-presets`;async function na(e){return(await h.get(Se,{signal:e==null?void 0:e.signal})).data}async function oa(e){return(await h.post(Se,e)).data}async function ra(e,t){return(await h.put(`${Se}/${e}`,t)).data}async function sa(e){return(await h.delete(`${Se}/${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 al(e){const{data:t}=ze();return{viewPresets:c.useMemo(()=>t.filter(r=>r.target===e),[t,e])}}function il(){const e=Cn(),t=pe({mutationFn:oa,onSuccess:s=>{e.setQueryData(oe,s)}}),n=pe({mutationFn:({alias:s,data:a})=>ra(s,a),onSuccess:s=>{e.setQueryData(oe,s)}}),r=pe({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(ua(e))return null;const n=`${e.pathname}${e.search}`.substring(1),r=zt(e),s=new URLSearchParams(e.search).get("token"),a=e.search.includes("n=1");for(const i of t)if(i.enabled&&(i.alias===r||i.target===r)){const l=ia(i.target,i.search,i.alias,a,s);return ca(n,l)?null:l}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){const n=new URL(e,document.location.origin),r=new URL(t,document.location.origin);return n.pathname.startsWith("/preset/")||r.pathname.startsWith("/preset/")?n.pathname===r.pathname:n.pathname!==r.pathname?!1:(n.searchParams.delete("token"),n.searchParams.delete("n"),r.searchParams.delete("token"),r.searchParams.delete("n"),n.searchParams.toString()===r.searchParams.toString())}function cl(e,t){let n=t;ho.startsWithHttp(t.toLowerCase())||(n=`http://${n}`);const r=new URL(n),s=zt(r);if(!la(s))throw new Error(`Invalid target view: ${s}`);return{alias:e,target:s,search:r.searchParams.toString(),enabled:!0}}function la(e){return e!==T.Editor&&Object.values(T).includes(e)}function ua(e){return e.pathname.split("/").filter(Boolean)[0]==="preset"}const da="_blink_oqrqg_1",ma="_fourtyfive_oqrqg_13",fa="_header_oqrqg_17",pa="_subheader_oqrqg_24",ga="_title_oqrqg_33",ha="_section_oqrqg_43",_a="_indent_oqrqg_44",ba="_paragraph_oqrqg_63",va="_card_oqrqg_67",ya="_highlight_oqrqg_75",xa="_blockquote_oqrqg_81",wa="_error_oqrqg_87",Sa="_pad_oqrqg_93",ka="_table_oqrqg_99",ja="_listGroup_oqrqg_130",Ca="_listItem_oqrqg_137",Ea="_fieldTitle_oqrqg_145",Na="_fieldDescription_oqrqg_150",Ia="_fieldError_oqrqg_155",Ta="_divider_oqrqg_160",Ra="_overlay_oqrqg_166",Pa="_loader_oqrqg_177",$a="_animloader_oqrqg_1",Da="_empty_oqrqg_187",Aa="_inlineElements_oqrqg_200",qa="_inner_oqrqg_204",Oa="_component_oqrqg_207",La="_start_oqrqg_210",Ua="_end_oqrqg_213",Fa="_apart_oqrqg_216",Ma="_wrap_oqrqg_219",g={blink:da,fourtyfive:ma,header:fa,subheader:pa,title:ga,section:ha,indent:_a,paragraph:ba,card:va,highlight:ya,blockquote:xa,error:wa,pad:Sa,table:ka,listGroup:ja,listItem:Ca,fieldTitle:Ea,fieldDescription:Na,fieldError:Ia,divider:Ta,overlay:Ra,loader:Pa,animloader:$a,empty:Da,inlineElements:Aa,inner:qa,component:Oa,start:La,end:Ua,apart:Fa,wrap:Ma};function ll({children:e}){return o.jsx("h2",{className:g.header,children:e})}function ul({children:e}){return o.jsx("h3",{className:g.subheader,children:e})}function dl({children:e}){return o.jsx("h4",{className:g.title,children:e})}function ml({as:e,className:t,children:n,...r}){const s=e??"div";return o.jsx(s,{className:k([g.section,t]),...r,children:n})}function fl({as:e,className:t,children:n,...r}){const s=e??"div";return o.jsx(s,{className:k([g.indent,t]),...r,children:n})}function pl({children:e}){return o.jsx("p",{className:g.paragraph,children:e})}function gl({children:e,className:t,...n}){return o.jsx("div",{className:k([g.card,t]),...n,children:e})}function hl({className:e,children:t}){return o.jsx("div",{className:g.pad,children:o.jsx("table",{className:k([g.table,e]),children:t})})}function _l({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(I,{onClick:t,disabled:!t,variant:"primary",children:["New ",o.jsx(Nn,{})]})]})})}function bl({className:e,children:t}){return o.jsx("ul",{className:k([g.listGroup,e]),children:t})}function vl({children:e}){return o.jsx("li",{className:g.listItem,children:e})}function yl({title:e,description:t,error:n}){return o.jsxs("div",{className:g.fieldTitle,children:[e,n&&o.jsx(Ba,{children:n}),!n&&t&&o.jsx(za,{children:t})]})}function za({children:e}){return o.jsx("div",{className:g.fieldDescription,children:e})}function xl({children:e}){return o.jsx("code",{className:g.highlight,children:e})}function Ba({children:e,className:t}){return o.jsx("div",{className:k([g.fieldError,t]),children:e})}function wl(){return o.jsx("hr",{className:g.divider})}function Sl({isLoading:e}){return e?o.jsx("div",{className:g.overlay,children:o.jsx("div",{className:g.loader})}):null}function Wa({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 Va="_blink_hxuk5_1",Ka="_fourtyfive_hxuk5_13",Ha="_log_hxuk5_17",Qa="_apart_hxuk5_27",Ga="_logEntry_hxuk5_31",Ja="_INFO_hxuk5_34",Za="_WARN_hxuk5_37",Xa="_ERROR_hxuk5_40",Ya="_time_hxuk5_46",ei="_origin_hxuk5_49",ti="_msg_hxuk5_52",ni="_buttonBar_hxuk5_56",M={blink:Va,fourtyfive:Ka,log:Ha,apart:Qa,logEntry:Ga,INFO:Ja,WARN:Za,ERROR:Xa,time:Ya,origin:ei,msg:ti,buttonBar:ni};function oi(){const{logs:e}=To(),[t,n]=c.useState(!0),[r,s]=c.useState(!0),[a,i]=c.useState(!0),[l,f]=c.useState(!0),[b,j]=c.useState(!0),[_,C]=c.useState(!0),x=[];_&&x.push(p.User),t&&x.push(p.Client),r&&x.push(p.Server),a&&x.push(p.Rx),l&&x.push(p.Tx),b&&x.push(p.Playback);const w=e.filter(u=>x.some(ce=>u.origin===ce)),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?f(!0):f(!1),u===p.Playback?j(!0):j(!1)},[]);return o.jsxs(o.Fragment,{children:[o.jsxs(Wa,{className:M.buttonBar,children:[o.jsx(I,{variant:_?"primary":"subtle",size:"small",onClick:()=>C(u=>!u),onAuxClick:()=>A(p.User),onContextMenu:u=>u.preventDefault(),children:p.User}),o.jsx(I,{variant:t?"primary":"subtle",size:"small",onClick:()=>n(u=>!u),onAuxClick:()=>A(p.Client),onContextMenu:u=>u.preventDefault(),children:p.Client}),o.jsx(I,{variant:r?"primary":"subtle",size:"small",onClick:()=>s(u=>!u),onAuxClick:()=>A(p.Server),onContextMenu:u=>u.preventDefault(),children:p.Server}),o.jsx(I,{variant:b?"primary":"subtle",size:"small",onClick:()=>j(u=>!u),onAuxClick:()=>A(p.Playback),onContextMenu:u=>u.preventDefault(),children:p.Playback}),o.jsx(I,{variant:a?"primary":"subtle",size:"small",onClick:()=>i(u=>!u),onAuxClick:()=>A(p.Rx),onContextMenu:u=>u.preventDefault(),children:p.Rx}),o.jsx(I,{variant:l?"primary":"subtle",size:"small",onClick:()=>f(u=>!u),onAuxClick:()=>A(p.Tx),onContextMenu:u=>u.preventDefault(),children:p.Tx}),o.jsxs(I,{variant:"subtle-destructive",size:"small",onClick:Ro,className:M.apart,children:[o.jsx(Ae,{})," 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 ri="_loader_vno17_21",si="_ellipsis_vno17_28",rt={loader:ri,ellipsis:si};function ke(){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 ai=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})))),ii="_notFound_1d1tc_21",ci="_content_1d1tc_28",st={notFound:ii,content:ci};function De(){return o.jsx("div",{className:st.notFound,children:o.jsxs("section",{className:st.content,children:[o.jsx(ai,{}),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",li=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 ui(e){return(await h.get(Bt,{signal:e==null?void 0:e.signal})).data}async function di(e){return(await h.post(Bt,e)).data}const mi={dangerColor:"#ff7300",normalColor:"#ffffffcc",overrideStyles:!1,warningColor:"#ffa528"};function fi(){const{data:e,status:t}=se({queryKey:he,queryFn:({signal:r})=>ui({signal:r}),placeholderData:(r,s)=>r,staleTime:_e}),{mutateAsync:n}=pe({mutationFn:di,onMutate:()=>{y.cancelQueries({queryKey:he})},onSuccess:r=>{y.setQueryData(he,r)}});return{data:e??mi,status:t,mutateAsync:n}}function z({children:e}){const{data:t}=fi(),{shouldRender:n}=li(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(ke,{})]})}const pi="4.4.2",gi=["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"],hi="https://5e4d2c4b57ab409cb98d4c08b2014755@o4504288369836032.ingest.sentry.io/4504288371343360",_i=()=>(In({dsn:hi,integrations:[Tn({useEffect:ct.useEffect,useLocation:ye,useNavigationType:Dn,createRoutesFromChildren:$n,matchRoutes:Pn})],tracesSampleRate:.3,release:pi,enabled:!0,ignoreErrors:[...gi,/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}}),Rn(An)),Wt=c.lazy(()=>E(()=>import("./Timer-BJQKNHfo.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-DQM2ppPg.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-BdrcXNr9.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-BK2Klo_K.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-D4QNdk-Z.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-BR_7Hp5u.js"),__vite__mapDeps([45,1,2,9,10,13,14,15,16,17,4,18,19,20,21,28,46]),import.meta.url)),bi=c.lazy(()=>E(()=>import("./ProtectedEditor-CsfvVyOU.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-C7AqD2dy.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-CbWojpp6.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)),fe=c.lazy(()=>E(()=>import("./EditorFeatureWrapper-C1vLQxiy.js"),__vite__mapDeps([77,1,2,48,49,78]),import.meta.url)),vi=c.lazy(()=>E(()=>import("./RundownExport-25orDQIW.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)),yi=c.lazy(()=>E(()=>import("./TimerControlExport-Ba1vifNg.js"),__vite__mapDeps([81,1,2,54,55,48,49,58,59,60,66,67,56,57,34,82]),import.meta.url)),xi=c.lazy(()=>E(()=>import("./MessageControlExport-BgT9JaXk.js"),__vite__mapDeps([83,1,2,54,55,48,49,18,19,56,57,84]),import.meta.url)),wi=_i();function Si(){return ta(),o.jsx(c.Suspense,{fallback:o.jsx(ke,{}),children:o.jsxs(wi,{children:[o.jsx(v,{path:"/",element:o.jsx(qn,{to:"/timer"})}),o.jsx(v,{path:"timer",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Wt,{})]})}),o.jsx(v,{path:"countdown",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Vt,{})]})}),o.jsx(v,{path:"backstage",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Kt,{})]})}),o.jsx(v,{path:"studio",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Ht,{})]})}),o.jsx(v,{path:"timeline",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Qt,{})]})}),o.jsx(v,{path:"info",element:o.jsxs(z,{children:[o.jsx($,{suppressSettings:!0,isNavigationLocked:O()}),o.jsx(Gt,{})]})}),o.jsx(v,{path:"editor",element:o.jsx(bi,{})}),o.jsx(v,{path:"cuesheet",element:o.jsx(Jt,{})}),o.jsx(v,{path:"op",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Zt,{})]})}),o.jsx(v,{path:"rundown",element:o.jsx(fe,{children:o.jsx(vi,{})})}),o.jsx(v,{path:"timercontrol",element:o.jsx(fe,{children:o.jsx(yi,{})})}),o.jsx(v,{path:"messagecontrol",element:o.jsx(fe,{children:o.jsx(xi,{})})}),o.jsx(v,{path:"log",element:o.jsx(fe,{children:o.jsx(oi,{})})}),o.jsx(v,{path:"preset/:alias",element:o.jsx(ji,{})}),o.jsx(v,{path:"*",element:o.jsx(Ci,{})})]})})}const ki={[T.Cuesheet]:Jt,[T.Operator]:Zt,[T.Timer]:Wt,[T.Backstage]:Kt,[T.Timeline]:Qt,[T.StudioClock]:Ht,[T.Countdown]:Vt,[T.ProjectInfo]:Gt};function ji(){const{data:e,status:t}=ze(),{alias:n}=On(),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(ke,{});const s=Zn==="rw";if(!r)return o.jsxs(o.Fragment,{children:[o.jsx($,{isNavigationLocked:!s,suppressSettings:!0}),o.jsx(De,{})]});const a=ki[r.target];return o.jsxs($t,{value:r,children:[o.jsx($,{isNavigationLocked:O(),suppressSettings:!0}),a?o.jsx(a,{}):o.jsx(De,{})]})}function Ci(){const{data:e,status:t}=ze(),n=ae(),r=ye(),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(ke,{}):o.jsxs(o.Fragment,{children:[o.jsx($,{isNavigationLocked:O(),suppressSettings:!0}),o.jsx(De,{})]})}Rt();function Ei(){return o.jsx(Ln,{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(Si,{})]})}),o.jsx(Mn,{initialIsOpen:!1})]}),o.jsx(nt,{children:o.jsx("div",{id:"identify-portal"})})]})})})})}const Ni=document.getElementById("root"),Ii=zn.createRoot(Ni);Ii.render(o.jsx(c.StrictMode,{children:o.jsx(Ei,{})}));export{ml as $,el as A,I as B,Zi as C,qr as D,$c as E,St as F,Dc as G,uc as H,_e as I,tl as J,_c as K,ke as L,Q as M,Ji as N,T as O,$t as P,Ut as Q,Ai as R,Vn as S,ne as T,Hn as U,Ki as V,pl as W,Bi as X,Ba as Y,Ve as Z,ll as _,fi as a,cc as a$,gl as a0,ul as a1,qi as a2,Mi as a3,zi as a4,Ui as a5,Di as a6,Oi as a7,Li as a8,Wa as a9,He as aA,Ke as aB,ho as aC,Zc as aD,tc as aE,Fi as aF,Gi as aG,Me as aH,is as aI,xo as aJ,Et as aK,S as aL,_s as aM,oi as aN,Wi as aO,Xe as aP,Qi as aQ,eo as aR,Wc as aS,Qc as aT,Hc as aU,Kc as aV,Lt as aW,xl as aX,ys as aY,Vc as aZ,Fo as a_,wl as aa,ol as ab,Sl as ac,dl as ad,bl as ae,vl as af,yl as ag,hs as ah,Po as ai,fl as aj,J as ak,hl as al,_l as am,Ts as an,vs as ao,Fs as ap,zc as aq,Bc as ar,il as as,za as at,cl as au,Fc as av,ze as aw,bs as ax,ie as ay,Bn as az,Pt as b,mc as b0,dc as b1,lc as b2,V as b3,ge as b4,fc as b5,rr as b6,Lc as b7,re as b8,nl as b9,$ as bA,nt as bB,uo as bC,Do as bD,ai as bE,wt as bF,xt as bG,Hi as bH,X as bI,rl as bJ,sl as bK,y as bL,Mc as bM,po as bN,$o as bO,to as bP,ac as bQ,oc as bR,ic as bS,rc as bT,sc as bU,Zo as bV,xe as bW,Xs as ba,yc as bb,Zn as bc,Gc as bd,O as be,jo as bf,ec as bg,Vi as bh,al as bi,mr as bj,Yc as bk,kc as bl,Cc as bm,Ec as bn,jc as bo,Nc as bp,gc as bq,Z as br,Ic as bs,vc as bt,xc as bu,wc as bv,hc as bw,Yi as bx,nc as by,Cs as bz,Tc as c,Jc as d,k as e,qc as f,Ac as g,_t as h,yt as i,Rc as j,Oc as k,kt as l,fo as m,Sc as n,pc as o,Ot as p,ko as q,Xi as r,Qe as s,fr as t,Or as u,bc as v,Uc as w,Xc as x,bt as y,Pc as z};
3
+ //# sourceMappingURL=index-Dm-4OTmY.js.map