@getontime/cli 4.4.1 → 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 (333) hide show
  1. package/client/assets/{Backstage-BY9GL_rk.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-BY9GL_rk.js.map → Backstage-BdrcXNr9.js.map} +1 -1
  5. package/client/assets/{Countdown-CXFgDHND.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-CXFgDHND.js.map → Countdown-DQM2ppPg.js.map} +1 -1
  9. package/client/assets/{CuesheetTable-BLICUNky.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-BLICUNky.js.map → CuesheetTable-B5LQVh5m.js.map} +1 -1
  13. package/client/assets/{CustomTranslationModal-4PVZBtkC.js → CustomTranslationModal-CML7Vsot.js} +2 -2
  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-4PVZBtkC.js.map → CustomTranslationModal-CML7Vsot.js.map} +1 -1
  17. package/client/assets/{DelayIndicator-DUbpd6DG.js → DelayIndicator-DKS6mZdB.js} +2 -2
  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-DUbpd6DG.js.map → DelayIndicator-DKS6mZdB.js.map} +1 -1
  21. package/client/assets/{EditorFeatureWrapper-CV_zaDoG.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-CV_zaDoG.js.map → EditorFeatureWrapper-C1vLQxiy.js.map} +1 -1
  25. package/client/assets/{EditorUtils-CLBWDP4k.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-CLBWDP4k.js.map → EditorUtils-BLcTuWz1.js.map} +1 -1
  29. package/client/assets/{EmptyPage-DmpOAg7R.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-DmpOAg7R.js.map → EmptyPage-CYVrjOvI.js.map} +1 -1
  33. package/client/assets/{FollowButton-CAUWz5Ma.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-CAUWz5Ma.js.map → FollowButton-DcSbb4R_.js.map} +1 -1
  37. package/client/assets/{MessageControlExport-Dm8IjSr4.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-Dm8IjSr4.js.map → MessageControlExport-BgT9JaXk.js.map} +1 -1
  41. package/client/assets/{MultiPartProgressBar-Fp-sTN2u.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-Fp-sTN2u.js.map → MultiPartProgressBar-W2a-JWPY.js.map} +1 -1
  45. package/client/assets/{OperatorExport-CE4ajLPS.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-CE4ajLPS.js.map → OperatorExport-CbWojpp6.js.map} +1 -1
  49. package/client/assets/{OverviewWrapper-BNnAIUP1.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-BNnAIUP1.js.map → OverviewWrapper-B2i8d3rt.js.map} +1 -1
  53. package/client/assets/{PipHost-CbNFsfqp.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-CbNFsfqp.js.map → PipHost-Dz2oy7XG.js.map} +1 -1
  57. package/client/assets/{ProjectInfo-Bf5z4Xsv.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-Bf5z4Xsv.js.map → ProjectInfo-BR_7Hp5u.js.map} +1 -1
  61. package/client/assets/{ProtectRoute-CCHzyy0I.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-CCHzyy0I.js.map → ProtectRoute-Bxq6q7ba.js.map} +1 -1
  65. package/client/assets/{ProtectedCuesheet-COI1W_V3.js → ProtectedCuesheet-C7AqD2dy.js} +2 -2
  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-COI1W_V3.js.map → ProtectedCuesheet-C7AqD2dy.js.map} +1 -1
  69. package/client/assets/{ProtectedEditor-BvTFmv-F.js → ProtectedEditor-CsfvVyOU.js} +3 -3
  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-BvTFmv-F.js.map → ProtectedEditor-CsfvVyOU.js.map} +1 -1
  73. package/client/assets/{RundownExport-C_q3KYN_.js → RundownExport-25orDQIW.js} +2 -2
  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-C_q3KYN_.js.map → RundownExport-25orDQIW.js.map} +1 -1
  77. package/client/assets/{Select-DQwYPDyI.js → Select-BnGTAeXJ.js} +2 -2
  78. package/client/assets/Select-BnGTAeXJ.js.br +0 -0
  79. package/client/assets/Select-BnGTAeXJ.js.gz +0 -0
  80. package/client/assets/{Select-DQwYPDyI.js.map → Select-BnGTAeXJ.js.map} +1 -1
  81. package/client/assets/{Studio-DzXTmBx4.js → Studio-BK2Klo_K.js} +2 -2
  82. package/client/assets/Studio-BK2Klo_K.js.br +0 -0
  83. package/client/assets/Studio-BK2Klo_K.js.gz +0 -0
  84. package/client/assets/{Studio-DzXTmBx4.js.map → Studio-BK2Klo_K.js.map} +1 -1
  85. package/client/assets/{StyleEditor-ClMEMaWh.js → StyleEditor-DIHQ1PUV.js} +2 -2
  86. package/client/assets/StyleEditor-DIHQ1PUV.js.br +0 -0
  87. package/client/assets/StyleEditor-DIHQ1PUV.js.gz +0 -0
  88. package/client/assets/{StyleEditor-ClMEMaWh.js.map → StyleEditor-DIHQ1PUV.js.map} +1 -1
  89. package/client/assets/{SuperscriptPeriod-CBiZU34J.js → SuperscriptPeriod-EEedc9rG.js} +2 -2
  90. package/client/assets/SuperscriptPeriod-EEedc9rG.js.br +0 -0
  91. package/client/assets/SuperscriptPeriod-EEedc9rG.js.gz +0 -0
  92. package/client/assets/{SuperscriptPeriod-CBiZU34J.js.map → SuperscriptPeriod-EEedc9rG.js.map} +1 -1
  93. package/client/assets/{SuperscriptTime-DP1CDlOX.js → SuperscriptTime-BVanhNvd.js} +2 -2
  94. package/client/assets/SuperscriptTime-BVanhNvd.js.br +0 -0
  95. package/client/assets/SuperscriptTime-BVanhNvd.js.gz +0 -0
  96. package/client/assets/{SuperscriptTime-DP1CDlOX.js.map → SuperscriptTime-BVanhNvd.js.map} +1 -1
  97. package/client/assets/{SwatchPicker-Dyxkxf3_.js → SwatchPicker-Ckpchvjo.js} +2 -2
  98. package/client/assets/SwatchPicker-Ckpchvjo.js.br +0 -0
  99. package/client/assets/SwatchPicker-Ckpchvjo.js.gz +0 -0
  100. package/client/assets/{SwatchPicker-Dyxkxf3_.js.map → SwatchPicker-Ckpchvjo.js.map} +1 -1
  101. package/client/assets/{TimeElements-pDYJeFbV.js → TimeElements-CYIgGk0T.js} +2 -2
  102. package/client/assets/TimeElements-CYIgGk0T.js.br +0 -0
  103. package/client/assets/TimeElements-CYIgGk0T.js.gz +0 -0
  104. package/client/assets/{TimeElements-pDYJeFbV.js.map → TimeElements-CYIgGk0T.js.map} +1 -1
  105. package/client/assets/{TimeInput-DTWDnaum.js → TimeInput-Cwl9vLWA.js} +2 -2
  106. package/client/assets/TimeInput-Cwl9vLWA.js.br +0 -0
  107. package/client/assets/TimeInput-Cwl9vLWA.js.gz +0 -0
  108. package/client/assets/{TimeInput-DTWDnaum.js.map → TimeInput-Cwl9vLWA.js.map} +1 -1
  109. package/client/assets/{TimelinePage-DbLt9rQi.js → TimelinePage-D4QNdk-Z.js} +2 -2
  110. package/client/assets/TimelinePage-D4QNdk-Z.js.br +0 -0
  111. package/client/assets/TimelinePage-D4QNdk-Z.js.gz +0 -0
  112. package/client/assets/{TimelinePage-DbLt9rQi.js.map → TimelinePage-D4QNdk-Z.js.map} +1 -1
  113. package/client/assets/{Timer-BfyVKQ8U.js → Timer-BJQKNHfo.js} +2 -2
  114. package/client/assets/Timer-BJQKNHfo.js.br +0 -0
  115. package/client/assets/Timer-BJQKNHfo.js.gz +0 -0
  116. package/client/assets/{Timer-BfyVKQ8U.js.map → Timer-BJQKNHfo.js.map} +1 -1
  117. package/client/assets/{TimerControlExport-BJfhJc07.js → TimerControlExport-Ba1vifNg.js} +2 -2
  118. package/client/assets/TimerControlExport-Ba1vifNg.js.br +0 -0
  119. package/client/assets/TimerControlExport-Ba1vifNg.js.gz +0 -0
  120. package/client/assets/{TimerControlExport-BJfhJc07.js.map → TimerControlExport-Ba1vifNg.js.map} +1 -1
  121. package/client/assets/{TimerDisplay-Dgmbqf65.js → TimerDisplay-tVcUk9j3.js} +2 -2
  122. package/client/assets/TimerDisplay-tVcUk9j3.js.br +0 -0
  123. package/client/assets/TimerDisplay-tVcUk9j3.js.gz +0 -0
  124. package/client/assets/{TimerDisplay-Dgmbqf65.js.map → TimerDisplay-tVcUk9j3.js.map} +1 -1
  125. package/client/assets/{TitleCard-MUurHeZ7.js → TitleCard-BNjv58eq.js} +2 -2
  126. package/client/assets/TitleCard-BNjv58eq.js.br +0 -0
  127. package/client/assets/TitleCard-BNjv58eq.js.gz +0 -0
  128. package/client/assets/{TitleCard-MUurHeZ7.js.map → TitleCard-BNjv58eq.js.map} +1 -1
  129. package/client/assets/{Tooltip-DXph8P8p.js → Tooltip-DZJ7u9gm.js} +2 -2
  130. package/client/assets/Tooltip-DZJ7u9gm.js.br +4 -0
  131. package/client/assets/Tooltip-DZJ7u9gm.js.gz +0 -0
  132. package/client/assets/{Tooltip-DXph8P8p.js.map → Tooltip-DZJ7u9gm.js.map} +1 -1
  133. package/client/assets/{ViewLogo-Ckp7i75x.js → ViewLogo-2I7w5Yms.js} +2 -2
  134. package/client/assets/ViewLogo-2I7w5Yms.js.br +0 -0
  135. package/client/assets/ViewLogo-2I7w5Yms.js.gz +0 -0
  136. package/client/assets/{ViewLogo-Ckp7i75x.js.map → ViewLogo-2I7w5Yms.js.map} +1 -1
  137. package/client/assets/{ViewParamsEditor-Cxngd15h.js → ViewParamsEditor-BX2RM8sx.js} +2 -2
  138. package/client/assets/ViewParamsEditor-BX2RM8sx.js.br +0 -0
  139. package/client/assets/ViewParamsEditor-BX2RM8sx.js.gz +0 -0
  140. package/client/assets/{ViewParamsEditor-Cxngd15h.js.map → ViewParamsEditor-BX2RM8sx.js.map} +1 -1
  141. package/client/assets/{editorSettings-D4jfu68W.js → editorSettings-_x6YKRfR.js} +2 -2
  142. package/client/assets/editorSettings-_x6YKRfR.js.br +6 -0
  143. package/client/assets/editorSettings-_x6YKRfR.js.gz +0 -0
  144. package/client/assets/{editorSettings-D4jfu68W.js.map → editorSettings-_x6YKRfR.js.map} +1 -1
  145. package/client/assets/{getProgress-B9UANc25.js → getProgress-ZUTmCn_v.js} +2 -2
  146. package/client/assets/getProgress-ZUTmCn_v.js.br +0 -0
  147. package/client/assets/getProgress-ZUTmCn_v.js.gz +0 -0
  148. package/client/assets/{getProgress-B9UANc25.js.map → getProgress-ZUTmCn_v.js.map} +1 -1
  149. package/client/assets/{index-2lQ-45a9.js → index-Dm-4OTmY.js} +3 -3
  150. package/client/assets/index-Dm-4OTmY.js.br +0 -0
  151. package/client/assets/index-Dm-4OTmY.js.gz +0 -0
  152. package/client/assets/{index-2lQ-45a9.js.map → index-Dm-4OTmY.js.map} +1 -1
  153. package/client/assets/{offset-DAyBfv5b.js → offset-VthsmtrO.js} +2 -2
  154. package/client/assets/offset-VthsmtrO.js.br +0 -0
  155. package/client/assets/offset-VthsmtrO.js.gz +0 -0
  156. package/client/assets/{offset-DAyBfv5b.js.map → offset-VthsmtrO.js.map} +1 -1
  157. package/client/assets/{parseUserTime-WkVNjkkE.js → parseUserTime-sZbEBi61.js} +2 -2
  158. package/client/assets/parseUserTime-sZbEBi61.js.br +0 -0
  159. package/client/assets/parseUserTime-sZbEBi61.js.gz +0 -0
  160. package/client/assets/{parseUserTime-WkVNjkkE.js.map → parseUserTime-sZbEBi61.js.map} +1 -1
  161. package/client/assets/{playbackstate-znZk3SSJ.js → playbackstate-Dl_ZJABT.js} +2 -2
  162. package/client/assets/playbackstate-Dl_ZJABT.js.br +0 -0
  163. package/client/assets/playbackstate-Dl_ZJABT.js.gz +0 -0
  164. package/client/assets/{playbackstate-znZk3SSJ.js.map → playbackstate-Dl_ZJABT.js.map} +1 -1
  165. package/client/assets/{presentation.utils-CjjYs5II.js → presentation.utils-Z61KykAH.js} +2 -2
  166. package/client/assets/presentation.utils-Z61KykAH.js.br +0 -0
  167. package/client/assets/presentation.utils-Z61KykAH.js.gz +0 -0
  168. package/client/assets/{presentation.utils-CjjYs5II.js.map → presentation.utils-Z61KykAH.js.map} +1 -1
  169. package/client/assets/{rundownUtils-BTQ3EeqN.js → rundownUtils-CXZRD6yP.js} +2 -2
  170. package/client/assets/rundownUtils-CXZRD6yP.js.br +0 -0
  171. package/client/assets/rundownUtils-CXZRD6yP.js.gz +0 -0
  172. package/client/assets/{rundownUtils-BTQ3EeqN.js.map → rundownUtils-CXZRD6yP.js.map} +1 -1
  173. package/client/assets/timer.utils-B4bvsns3.js +2 -0
  174. package/client/assets/timer.utils-B4bvsns3.js.br +0 -0
  175. package/client/assets/timer.utils-B4bvsns3.js.gz +0 -0
  176. package/client/assets/{timer.utils-B-Ui91P7.js.map → timer.utils-B4bvsns3.js.map} +1 -1
  177. package/client/assets/{useCustomFields-zr9SUl5o.js → useCustomFields-BBE4LBBr.js} +2 -2
  178. package/client/assets/useCustomFields-BBE4LBBr.js.br +0 -0
  179. package/client/assets/useCustomFields-BBE4LBBr.js.gz +0 -0
  180. package/client/assets/{useCustomFields-zr9SUl5o.js.map → useCustomFields-BBE4LBBr.js.map} +1 -1
  181. package/client/assets/{useEventSelection-B9mbj1cM.js → useEventSelection-Bpbu89c7.js} +2 -2
  182. package/client/assets/useEventSelection-Bpbu89c7.js.br +0 -0
  183. package/client/assets/useEventSelection-Bpbu89c7.js.gz +0 -0
  184. package/client/assets/{useEventSelection-B9mbj1cM.js.map → useEventSelection-Bpbu89c7.js.map} +1 -1
  185. package/client/assets/{useProjectData-DD_BQ9eJ.js → useProjectData-C110zIXC.js} +2 -2
  186. package/client/assets/useProjectData-C110zIXC.js.br +0 -0
  187. package/client/assets/useProjectData-C110zIXC.js.gz +0 -0
  188. package/client/assets/{useProjectData-DD_BQ9eJ.js.map → useProjectData-C110zIXC.js.map} +1 -1
  189. package/client/assets/{useReport-DozG5uz5.js → useReport-DqSBq4MG.js} +2 -2
  190. package/client/assets/useReport-DqSBq4MG.js.br +0 -0
  191. package/client/assets/useReport-DqSBq4MG.js.gz +0 -0
  192. package/client/assets/{useReport-DozG5uz5.js.map → useReport-DqSBq4MG.js.map} +1 -1
  193. package/client/assets/{useRundown-D6vokFHi.js → useRundown-DAo6huE4.js} +2 -2
  194. package/client/assets/useRundown-DAo6huE4.js.br +0 -0
  195. package/client/assets/useRundown-DAo6huE4.js.gz +0 -0
  196. package/client/assets/{useRundown-D6vokFHi.js.map → useRundown-DAo6huE4.js.map} +1 -1
  197. package/client/assets/{useSelectAndRevealEntry-Dd6MpVHe.js → useSelectAndRevealEntry-DTg0hmxA.js} +2 -2
  198. package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.br +0 -0
  199. package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.gz +0 -0
  200. package/client/assets/{useSelectAndRevealEntry-Dd6MpVHe.js.map → useSelectAndRevealEntry-DTg0hmxA.js.map} +1 -1
  201. package/client/assets/{useWindowTitle-bg-fLPOk.js → useWindowTitle-DM8dIp8L.js} +2 -2
  202. package/client/assets/useWindowTitle-DM8dIp8L.js.br +0 -0
  203. package/client/assets/useWindowTitle-DM8dIp8L.js.gz +0 -0
  204. package/client/assets/{useWindowTitle-bg-fLPOk.js.map → useWindowTitle-DM8dIp8L.js.map} +1 -1
  205. package/client/assets/{validateEvent-BUgLWn7x.js → validateEvent-GnPt-e9-.js} +2 -2
  206. package/client/assets/validateEvent-GnPt-e9-.js.br +0 -0
  207. package/client/assets/validateEvent-GnPt-e9-.js.gz +0 -0
  208. package/client/assets/{validateEvent-BUgLWn7x.js.map → validateEvent-GnPt-e9-.js.map} +1 -1
  209. package/client/assets/{vendor-CKDP5hij.js → vendor-BKUJ0_Du.js} +2 -2
  210. package/client/assets/vendor-BKUJ0_Du.js.br +0 -0
  211. package/client/assets/{vendor-CKDP5hij.js.gz → vendor-BKUJ0_Du.js.gz} +0 -0
  212. package/client/assets/{vendor-CKDP5hij.js.map → vendor-BKUJ0_Du.js.map} +1 -1
  213. package/client/assets/{viewLoader.utils-Bn5zu5sz.js → viewLoader.utils-4lL4PiNI.js} +2 -2
  214. package/client/assets/viewLoader.utils-4lL4PiNI.js.br +0 -0
  215. package/client/assets/viewLoader.utils-4lL4PiNI.js.gz +0 -0
  216. package/client/assets/{viewLoader.utils-Bn5zu5sz.js.map → viewLoader.utils-4lL4PiNI.js.map} +1 -1
  217. package/client/assets/{viewUtils-DQFwr7hm.js → viewUtils-29a3Mmiu.js} +2 -2
  218. package/client/assets/viewUtils-29a3Mmiu.js.br +0 -0
  219. package/client/assets/viewUtils-29a3Mmiu.js.gz +0 -0
  220. package/client/assets/{viewUtils-DQFwr7hm.js.map → viewUtils-29a3Mmiu.js.map} +1 -1
  221. package/client/index.html +2 -2
  222. package/package.json +1 -1
  223. package/server/index.cjs +1 -1
  224. package/client/assets/Backstage-BY9GL_rk.js.br +0 -0
  225. package/client/assets/Backstage-BY9GL_rk.js.gz +0 -0
  226. package/client/assets/Countdown-CXFgDHND.js.br +0 -0
  227. package/client/assets/Countdown-CXFgDHND.js.gz +0 -0
  228. package/client/assets/CuesheetTable-BLICUNky.js.br +0 -0
  229. package/client/assets/CuesheetTable-BLICUNky.js.gz +0 -0
  230. package/client/assets/CustomTranslationModal-4PVZBtkC.js.br +0 -0
  231. package/client/assets/CustomTranslationModal-4PVZBtkC.js.gz +0 -0
  232. package/client/assets/DelayIndicator-DUbpd6DG.js.br +0 -0
  233. package/client/assets/DelayIndicator-DUbpd6DG.js.gz +0 -0
  234. package/client/assets/EditorFeatureWrapper-CV_zaDoG.js.br +0 -0
  235. package/client/assets/EditorFeatureWrapper-CV_zaDoG.js.gz +0 -0
  236. package/client/assets/EditorUtils-CLBWDP4k.js.br +0 -0
  237. package/client/assets/EditorUtils-CLBWDP4k.js.gz +0 -0
  238. package/client/assets/EmptyPage-DmpOAg7R.js.br +0 -2
  239. package/client/assets/EmptyPage-DmpOAg7R.js.gz +0 -0
  240. package/client/assets/FollowButton-CAUWz5Ma.js.br +0 -0
  241. package/client/assets/FollowButton-CAUWz5Ma.js.gz +0 -0
  242. package/client/assets/MessageControlExport-Dm8IjSr4.js.br +0 -0
  243. package/client/assets/MessageControlExport-Dm8IjSr4.js.gz +0 -0
  244. package/client/assets/MultiPartProgressBar-Fp-sTN2u.js.br +0 -0
  245. package/client/assets/MultiPartProgressBar-Fp-sTN2u.js.gz +0 -0
  246. package/client/assets/OperatorExport-CE4ajLPS.js.br +0 -0
  247. package/client/assets/OperatorExport-CE4ajLPS.js.gz +0 -0
  248. package/client/assets/OverviewWrapper-BNnAIUP1.js.br +0 -0
  249. package/client/assets/OverviewWrapper-BNnAIUP1.js.gz +0 -0
  250. package/client/assets/PipHost-CbNFsfqp.js.br +0 -0
  251. package/client/assets/PipHost-CbNFsfqp.js.gz +0 -0
  252. package/client/assets/ProjectInfo-Bf5z4Xsv.js.br +0 -0
  253. package/client/assets/ProjectInfo-Bf5z4Xsv.js.gz +0 -0
  254. package/client/assets/ProtectRoute-CCHzyy0I.js.br +0 -0
  255. package/client/assets/ProtectRoute-CCHzyy0I.js.gz +0 -0
  256. package/client/assets/ProtectedCuesheet-COI1W_V3.js.br +0 -0
  257. package/client/assets/ProtectedCuesheet-COI1W_V3.js.gz +0 -0
  258. package/client/assets/ProtectedEditor-BvTFmv-F.js.br +0 -0
  259. package/client/assets/ProtectedEditor-BvTFmv-F.js.gz +0 -0
  260. package/client/assets/RundownExport-C_q3KYN_.js.br +0 -0
  261. package/client/assets/RundownExport-C_q3KYN_.js.gz +0 -0
  262. package/client/assets/Select-DQwYPDyI.js.br +0 -0
  263. package/client/assets/Select-DQwYPDyI.js.gz +0 -0
  264. package/client/assets/Studio-DzXTmBx4.js.br +0 -0
  265. package/client/assets/Studio-DzXTmBx4.js.gz +0 -0
  266. package/client/assets/StyleEditor-ClMEMaWh.js.br +0 -0
  267. package/client/assets/StyleEditor-ClMEMaWh.js.gz +0 -0
  268. package/client/assets/SuperscriptPeriod-CBiZU34J.js.br +0 -0
  269. package/client/assets/SuperscriptPeriod-CBiZU34J.js.gz +0 -0
  270. package/client/assets/SuperscriptTime-DP1CDlOX.js.br +0 -0
  271. package/client/assets/SuperscriptTime-DP1CDlOX.js.gz +0 -0
  272. package/client/assets/SwatchPicker-Dyxkxf3_.js.br +0 -0
  273. package/client/assets/SwatchPicker-Dyxkxf3_.js.gz +0 -0
  274. package/client/assets/TimeElements-pDYJeFbV.js.br +0 -0
  275. package/client/assets/TimeElements-pDYJeFbV.js.gz +0 -0
  276. package/client/assets/TimeInput-DTWDnaum.js.br +0 -0
  277. package/client/assets/TimeInput-DTWDnaum.js.gz +0 -0
  278. package/client/assets/TimelinePage-DbLt9rQi.js.br +0 -0
  279. package/client/assets/TimelinePage-DbLt9rQi.js.gz +0 -0
  280. package/client/assets/Timer-BfyVKQ8U.js.br +0 -0
  281. package/client/assets/Timer-BfyVKQ8U.js.gz +0 -0
  282. package/client/assets/TimerControlExport-BJfhJc07.js.br +0 -0
  283. package/client/assets/TimerControlExport-BJfhJc07.js.gz +0 -0
  284. package/client/assets/TimerDisplay-Dgmbqf65.js.br +0 -0
  285. package/client/assets/TimerDisplay-Dgmbqf65.js.gz +0 -0
  286. package/client/assets/TitleCard-MUurHeZ7.js.br +0 -0
  287. package/client/assets/TitleCard-MUurHeZ7.js.gz +0 -0
  288. package/client/assets/Tooltip-DXph8P8p.js.br +0 -0
  289. package/client/assets/Tooltip-DXph8P8p.js.gz +0 -0
  290. package/client/assets/ViewLogo-Ckp7i75x.js.br +0 -0
  291. package/client/assets/ViewLogo-Ckp7i75x.js.gz +0 -0
  292. package/client/assets/ViewParamsEditor-Cxngd15h.js.br +0 -0
  293. package/client/assets/ViewParamsEditor-Cxngd15h.js.gz +0 -0
  294. package/client/assets/editorSettings-D4jfu68W.js.br +0 -0
  295. package/client/assets/editorSettings-D4jfu68W.js.gz +0 -0
  296. package/client/assets/getProgress-B9UANc25.js.br +0 -0
  297. package/client/assets/getProgress-B9UANc25.js.gz +0 -0
  298. package/client/assets/index-2lQ-45a9.js.br +0 -0
  299. package/client/assets/index-2lQ-45a9.js.gz +0 -0
  300. package/client/assets/offset-DAyBfv5b.js.br +0 -4
  301. package/client/assets/offset-DAyBfv5b.js.gz +0 -0
  302. package/client/assets/parseUserTime-WkVNjkkE.js.br +0 -0
  303. package/client/assets/parseUserTime-WkVNjkkE.js.gz +0 -0
  304. package/client/assets/playbackstate-znZk3SSJ.js.br +0 -0
  305. package/client/assets/playbackstate-znZk3SSJ.js.gz +0 -0
  306. package/client/assets/presentation.utils-CjjYs5II.js.br +0 -0
  307. package/client/assets/presentation.utils-CjjYs5II.js.gz +0 -0
  308. package/client/assets/rundownUtils-BTQ3EeqN.js.br +0 -0
  309. package/client/assets/rundownUtils-BTQ3EeqN.js.gz +0 -0
  310. package/client/assets/timer.utils-B-Ui91P7.js +0 -2
  311. package/client/assets/timer.utils-B-Ui91P7.js.br +0 -0
  312. package/client/assets/timer.utils-B-Ui91P7.js.gz +0 -0
  313. package/client/assets/useCustomFields-zr9SUl5o.js.br +0 -0
  314. package/client/assets/useCustomFields-zr9SUl5o.js.gz +0 -0
  315. package/client/assets/useEventSelection-B9mbj1cM.js.br +0 -0
  316. package/client/assets/useEventSelection-B9mbj1cM.js.gz +0 -0
  317. package/client/assets/useProjectData-DD_BQ9eJ.js.br +0 -0
  318. package/client/assets/useProjectData-DD_BQ9eJ.js.gz +0 -0
  319. package/client/assets/useReport-DozG5uz5.js.br +0 -0
  320. package/client/assets/useReport-DozG5uz5.js.gz +0 -0
  321. package/client/assets/useRundown-D6vokFHi.js.br +0 -0
  322. package/client/assets/useRundown-D6vokFHi.js.gz +0 -0
  323. package/client/assets/useSelectAndRevealEntry-Dd6MpVHe.js.br +0 -0
  324. package/client/assets/useSelectAndRevealEntry-Dd6MpVHe.js.gz +0 -0
  325. package/client/assets/useWindowTitle-bg-fLPOk.js.br +0 -0
  326. package/client/assets/useWindowTitle-bg-fLPOk.js.gz +0 -0
  327. package/client/assets/validateEvent-BUgLWn7x.js.br +0 -0
  328. package/client/assets/validateEvent-BUgLWn7x.js.gz +0 -0
  329. package/client/assets/vendor-CKDP5hij.js.br +0 -0
  330. package/client/assets/viewLoader.utils-Bn5zu5sz.js.br +0 -0
  331. package/client/assets/viewLoader.utils-Bn5zu5sz.js.gz +0 -0
  332. package/client/assets/viewUtils-DQFwr7hm.js.br +0 -0
  333. package/client/assets/viewUtils-DQFwr7hm.js.gz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useEventSelection-B9mbj1cM.js","sources":["../../src/common/api/automation.ts","../../src/common/models/AutomationSettings.ts","../../src/common/hooks-query/useAutomationSettings.ts","../../src/common/utils/regex.ts","../../src/common/components/tag/Tag.tsx","../../src/common/components/radio-group/RadioGroup.tsx","../../src/views/cuesheet/cuesheet.options.ts","../../src/features/sharing/composite/CuesheetLinkOptions.tsx","../../src/features/sharing/GenerateLinkForm.tsx","../../src/features/sharing/GenerateLinkFormExport.tsx","../../src/common/components/input/colour-input/Swatch.tsx","../../src/common/components/input/colour-input/SwatchSelect.tsx","../../src/common/components/dropdown-menu/DropdownMenu.tsx","../../src/common/components/modal/Modal.tsx","../../src/common/utils/deviceUtils.ts","../../src/features/rundown/useEventSelection.ts"],"sourcesContent":["import axios from 'axios';\nimport type {\n Automation,\n AutomationDTO,\n AutomationOutput,\n AutomationSettings,\n Trigger,\n TriggerDTO,\n} from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\nimport type { RequestOptions } from './requestOptions';\n\nconst automationsPath = `${apiEntryUrl}/automations`;\n\n/**\n * HTTP request to get the automations settings\n */\nexport async function getAutomationSettings(options?: RequestOptions): Promise<AutomationSettings> {\n const res = await axios.get(automationsPath, { signal: options?.signal });\n return res.data;\n}\n\n/**\n * HTTP request to edit the automations settings\n */\nexport async function editAutomationSettings(\n automationSettings: Partial<AutomationSettings>,\n): Promise<AutomationSettings> {\n const res = await axios.post(automationsPath, automationSettings);\n return res.data;\n}\n\n/**\n * HTTP request to create a new automation trigger\n */\nexport async function addTrigger(trigger: TriggerDTO): Promise<Trigger> {\n const res = await axios.post(`${automationsPath}/trigger`, trigger);\n return res.data;\n}\n\n/**\n * HTTP request to update an automation trigger\n */\nexport async function editTrigger(id: string, trigger: Trigger): Promise<Trigger> {\n const res = await axios.put(`${automationsPath}/trigger/${id}`, trigger);\n return res.data;\n}\n\n/**\n * HTTP request to delete an automation trigger\n */\nexport function deleteTrigger(id: string): Promise<void> {\n return axios.delete(`${automationsPath}/trigger/${id}`);\n}\n\n/**\n * HTTP request to create a new automation\n */\nexport async function addAutomation(automation: AutomationDTO): Promise<Automation> {\n const res = await axios.post(`${automationsPath}/automation`, automation);\n return res.data;\n}\n\n/**\n * HTTP request to update a automation\n */\nexport async function editAutomation(id: string, automation: Automation): Promise<Automation> {\n const res = await axios.put(`${automationsPath}/automation/${id}`, automation);\n return res.data;\n}\n\n/**\n * HTTP request to delete a automation\n */\nexport function deleteAutomation(id: string): Promise<void> {\n return axios.delete(`${automationsPath}/automation/${id}`);\n}\n\n/**\n * HTTP request to test automation output\n * The return is irrelevant as we care for the resolution of the promise\n */\nexport function testOutput(output: AutomationOutput): Promise<void> {\n return axios.post(`${automationsPath}/test`, output);\n}\n","import { AutomationSettings } from 'ontime-types';\n\nexport const automationPlaceholderSettings: AutomationSettings = {\n enabledAutomations: false,\n enabledOscIn: false,\n oscPortIn: 8888,\n triggers: [],\n automations: {},\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { getAutomationSettings } from '../api/automation';\nimport { AUTOMATION } from '../api/constants';\nimport { automationPlaceholderSettings } from '../models/AutomationSettings';\n\nexport default function useAutomationSettings() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: AUTOMATION,\n queryFn: ({ signal }) => getAutomationSettings({ signal }),\n placeholderData: (previousData, _previousQuery) => previousData,\n refetchInterval: queryRefetchIntervalSlow,\n });\n\n return { data: data ?? automationPlaceholderSettings, status, isFetching, isError, refetch };\n}\n","/**\n * Simple regex patterns for common use cases\n * mostly used in form validation\n */\n\nexport const isOnlyNumbers = /^\\d+$/;\nexport const isIPAddress = /^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$/;\nexport const startsWithHttp = /^https?:\\/\\//;\nexport const startsWithSlash = /^\\//;\nexport const isAlphanumeric = /^[a-z0-9]+$/i;\nexport const isASCII = /^[ -~]+$/; //https://catonmat.net/my-favorite-regex\nexport const isASCIIorEmpty = /^$|^[ -~]+$/; //https://catonmat.net/my-favorite-regex\nexport const isNotEmpty = /\\S/;\nexport const isUrlSafe = /^[a-zA-Z0-9_-]*$/; // https://stackoverflow.com/questions/24419067/validate-a-string-to-be-url-safe-using-regex\n","import { PropsWithChildren } from 'react';\n\nimport style from './Tag.module.scss';\n\ninterface TagProps {\n className?: string;\n}\n\nexport default function Tag({ className, children }: PropsWithChildren<TagProps>) {\n return <span className={`${style.tag} ${className || ''}`}>{children}</span>;\n}\n","import { Radio } from '@base-ui/react/radio';\nimport { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport style from './RadioGroup.module.scss';\n\ninterface RadioGroupProps<T extends string | number | boolean> extends Omit<BaseRadioGroup.Props, 'onValueChange'> {\n items: {\n value: T;\n label: string;\n }[];\n onValueChange?: (value: T) => void;\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport default function RadioGroup<T extends string | number | boolean>({\n items,\n className,\n orientation = 'vertical',\n onValueChange,\n ...elementProps\n}: RadioGroupProps<T>) {\n return (\n <BaseRadioGroup\n onValueChange={(value) => onValueChange?.(value as T)}\n className={cx([style.radioGroup, style[orientation], className])}\n {...elementProps}\n >\n {items.map((item) => (\n <label className={style.item} key={item.value.toString()}>\n <Radio.Root value={item.value.toString()} className={style.radio}>\n <Radio.Indicator className={style.indicator} />\n </Radio.Root>\n {item.label}\n </label>\n ))}\n </BaseRadioGroup>\n );\n}\n","import { CustomFields } from 'ontime-types';\nimport { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\ntype OptionValues = {\n hideTableSeconds: boolean;\n hideIndexColumn: boolean;\n showDelayedTimes: boolean;\n hideDelays: boolean;\n};\n\nconst defaultOptions: OptionValues = {\n hideTableSeconds: false,\n hideIndexColumn: false,\n showDelayedTimes: false,\n hideDelays: false,\n};\n\nexport type CuesheetOptionKeys = keyof OptionValues;\n\nexport interface CuesheetOptions extends OptionValues {\n setOption: <K extends CuesheetOptionKeys>(key: K, value: OptionValues[K]) => void;\n toggleOption: (key: CuesheetOptionKeys) => void;\n resetOptions: () => void;\n}\n\nexport const usePersistedCuesheetOptions = create<CuesheetOptions>()(\n persist(\n (set) => {\n return {\n ...defaultOptions,\n setOption: (key, value) => set((state) => ({ ...state, [key]: value })),\n toggleOption: (key) => set((state) => ({ ...state, [key]: !state[key] })),\n resetOptions: () => set(defaultOptions),\n };\n },\n {\n name: 'cuesheet-options',\n },\n ),\n);\n\nexport const cuesheetDefaultColumns = [\n { value: 'flag', label: 'Flag' },\n { value: 'cue', label: 'Cue' },\n { value: 'title', label: 'Title' },\n { value: 'timeStart', label: 'Time start' },\n { value: 'timeEnd', label: 'Time end' },\n { value: 'duration', label: 'Duration' },\n { value: 'note', label: 'Note' },\n];\n\nexport function makeCuesheetCustomColumns(customFields: CustomFields) {\n return Object.entries(customFields).map(([key, field]) => {\n return {\n value: `custom-${key}`,\n label: field.label,\n };\n });\n}\n","import { Fragment, RefObject, useMemo, useState } from 'react';\n\nimport RadioGroup from '../../../common/components/radio-group/RadioGroup';\nimport Switch from '../../../common/components/switch/Switch';\nimport useCustomFields from '../../../common/hooks-query/useCustomFields';\nimport { cuesheetDefaultColumns, makeCuesheetCustomColumns } from '../../../views/cuesheet/cuesheet.options';\nimport * as Panel from '../../app-settings/panel-utils/PanelUtils';\n\nimport style from './CuesheetLinkOptions.module.scss';\n\ntype AccessMode = 'full' | 'custom';\n\ninterface CuesheetLinkOptionsProps {\n readRef?: RefObject<HTMLInputElement | null>;\n writeRef?: RefObject<HTMLInputElement | null>;\n}\n\nexport default function CuesheetLinkOptions({ readRef, writeRef }: CuesheetLinkOptionsProps) {\n const { data } = useCustomFields();\n const customFieldColumns = useMemo(() => makeCuesheetCustomColumns(data), [data]);\n\n const [readPermissions, setReadPermissions] = useState<AccessMode>('full');\n const [writePermissions, setWritePermissions] = useState<AccessMode>('full');\n\n const [readSwitches, setReadSwitches] = useState<Record<string, boolean>>(() => {\n const initialState: Record<string, boolean> = {};\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n initialState[column.value] = true;\n });\n return initialState;\n });\n\n const [writeSwitches, setWriteSwitches] = useState<Record<string, boolean>>(() => {\n const initialState: Record<string, boolean> = {};\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n initialState[column.value] = true;\n });\n return initialState;\n });\n\n const handleReadModeChange = (value: AccessMode) => {\n setReadPermissions(value);\n\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches };\n Object.keys(updatedReadSwitches).forEach((key) => {\n updatedReadSwitches[key] = true;\n });\n return updatedReadSwitches;\n });\n };\n\n const handleWriteModeChange = (value: AccessMode) => {\n if (value === 'full') {\n setReadPermissions('full');\n }\n setWritePermissions(value);\n\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches };\n setWriteSwitches((prevWriteSwitches) => {\n const updatedWriteSwitches = { ...prevWriteSwitches };\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n updatedReadSwitches[column.value] = true;\n updatedWriteSwitches[column.value] = true;\n });\n return updatedWriteSwitches;\n });\n return updatedReadSwitches;\n });\n };\n\n const handleSwitchChange = (key: string, type: 'read' | 'write', value: boolean) => {\n if (type === 'read') {\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches, [key]: value };\n return updatedReadSwitches;\n });\n } else {\n setWriteSwitches((prevWriteSwitches) => {\n const updatedWriteSwitches = { ...prevWriteSwitches, [key]: value };\n return updatedWriteSwitches;\n });\n }\n };\n\n const getReadPermissions = () => {\n if (readPermissions === 'full' || writePermissions === 'full') {\n return 'full';\n }\n\n return Object.entries(readSwitches)\n .filter(([_, value]) => value)\n .map(([key]) => key)\n .join(',');\n };\n\n const getWritePermissions = () => {\n if (writePermissions === 'full') {\n return 'full';\n }\n\n return Object.entries(writeSwitches)\n .filter(([_, value]) => value)\n .map(([key]) => key)\n .join(',');\n };\n\n return (\n <Panel.Indent>\n <input name='read' hidden readOnly ref={readRef} value={getReadPermissions() || '-'} />\n <input name='write' hidden readOnly ref={writeRef} value={getWritePermissions() || '-'} />\n <div>\n <Panel.Field title='Access mode' description='Which parts of the data will the link give access to' />\n <div>\n <RadioGroup\n value={writePermissions}\n onValueChange={handleWriteModeChange}\n orientation='horizontal'\n items={[\n { value: 'full', label: 'Full write (edit all existing and future columns)' },\n { value: 'custom', label: 'Custom write' },\n ]}\n />\n <RadioGroup\n value={readPermissions}\n onValueChange={handleReadModeChange}\n orientation='horizontal'\n disabled={writePermissions === 'full'}\n items={[\n { value: 'full', label: 'Full read (view all existing and future columns)' },\n { value: 'custom', label: 'Custom read' },\n ]}\n />\n </div>\n </div>\n <div className={style.twoCols}>\n <div className={style.grid}>\n <Panel.Description>Ontime columns</Panel.Description>\n <Panel.Description>Read</Panel.Description>\n <Panel.Description>Write</Panel.Description>\n {cuesheetDefaultColumns.map((column) => (\n <Fragment key={column.value}>\n <div>{column.label}</div>\n <Switch\n checked={Boolean(readSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'read', value)}\n disabled={readPermissions === 'full' || writePermissions === 'full'}\n data-testid={`read-${column.value}`}\n />\n <Switch\n checked={Boolean(writeSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'write', value)}\n disabled={writePermissions === 'full'}\n data-testid={`write-${column.value}`}\n />\n </Fragment>\n ))}\n </div>\n {customFieldColumns.length > 0 && (\n <div className={style.grid}>\n <Panel.Description>Custom fields</Panel.Description>\n <Panel.Description>Read</Panel.Description>\n <Panel.Description>Write</Panel.Description>\n {customFieldColumns.map((column) => (\n <Fragment key={column.value}>\n {column.label}\n <Switch\n checked={Boolean(readSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'read', value)}\n disabled={readPermissions === 'full' || writePermissions === 'full'}\n data-testid={`read-${column.value}`}\n />\n <Switch\n checked={Boolean(writeSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'write', value)}\n disabled={writePermissions === 'full'}\n data-testid={`write-${column.value}`}\n />\n </Fragment>\n ))}\n </div>\n )}\n </div>\n </Panel.Indent>\n );\n}\n","import { useRef, useState } from 'react';\nimport { FieldErrors, useForm } from 'react-hook-form';\nimport QRCode from 'react-qr-code';\nimport { OntimeView, URLPreset } from 'ontime-types';\nimport { generateId } from 'ontime-utils';\n\nimport { generateUrl } from '../../common/api/session';\nimport { maybeAxiosError } from '../../common/api/utils';\nimport Button from '../../common/components/buttons/Button';\nimport CopyTag from '../../common/components/copy-tag/CopyTag';\nimport Info from '../../common/components/info/Info';\nimport Input from '../../common/components/input/input/Input';\nimport Select from '../../common/components/select/Select';\nimport Switch from '../../common/components/switch/Switch';\nimport { useUpdateUrlPreset } from '../../common/hooks-query/useUrlPresets';\nimport { safeCopyToClipboard } from '../../common/utils/copyToClipboard';\nimport { preventEscape } from '../../common/utils/keyEvent';\nimport { isUrlSafe } from '../../common/utils/regex';\nimport { isOntimeCloud, serverURL } from '../../externals';\nimport * as Panel from '../app-settings/panel-utils/PanelUtils';\n\nimport CuesheetLinkOptions from './composite/CuesheetLinkOptions';\n\nimport style from './GenerateLinkForm.module.scss';\n\ninterface GenerateLinkFormProps {\n hostOptions: { value: string; label: string }[];\n pathOptions: { value: OntimeView | string; label: string }[];\n presets: URLPreset[];\n isLockedToView?: boolean;\n}\n\ntype GenericLinkOptions = {\n baseUrl: string;\n path: OntimeView | string; // we use empty string for Companion view\n authenticate: boolean;\n lockConfig: boolean;\n lockNav: boolean;\n};\n\ntype CuesheetLinkOptions = GenericLinkOptions & {\n path: OntimeView.Cuesheet;\n\n alias: string;\n options: {\n read?: string;\n write?: string;\n };\n};\n\ntype GenerateLinkFormOptions = GenericLinkOptions | CuesheetLinkOptions;\n\ntype GenerateLinkState = 'pending' | 'loading' | 'success' | 'error';\n\nexport default function GenerateLinkForm({ hostOptions, pathOptions, presets, isLockedToView }: GenerateLinkFormProps) {\n const [formState, setFormState] = useState<GenerateLinkState>('pending');\n const [url, setUrl] = useState(serverURL);\n const cuesheetReadRef = useRef<HTMLInputElement>(null);\n const cuesheetWriteRef = useRef<HTMLInputElement>(null);\n const generatedAlias = useRef<string>(`cuesheet-${generateId()}`);\n\n const { addPreset } = useUpdateUrlPreset();\n\n const {\n handleSubmit,\n setError,\n watch,\n setValue,\n reset,\n register,\n formState: { errors, isDirty },\n } = useForm<GenerateLinkFormOptions>({\n mode: 'onChange',\n defaultValues: {\n baseUrl: serverURL,\n path: isLockedToView ? pathOptions[0].value : OntimeView.Timer,\n authenticate: false,\n lockConfig: false,\n lockNav: false,\n },\n });\n\n /**\n * If the user is generating a link to the cuesheet we gather extra options\n * The extra options are saved into a URL preset which we then request a share link for\n */\n const createPresetFromOptions = async (\n alias: string,\n options: Required<CuesheetLinkOptions['options']>,\n ): Promise<URLPreset | undefined> => {\n if (options.read === '-') {\n throw new Error('Cannot create a share with no read permissions');\n }\n const presets = await addPreset({\n target: OntimeView.Cuesheet,\n enabled: true,\n alias,\n search: '',\n options: {\n read: options.read,\n write: options.write,\n },\n });\n return presets.find((preset) => preset.alias === alias);\n };\n\n const onSubmit = async (options: GenerateLinkFormOptions) => {\n try {\n setFormState('loading');\n if (options.path === OntimeView.Cuesheet) {\n const urlPreset = await createPresetFromOptions((options as CuesheetLinkOptions).alias, {\n read: cuesheetReadRef.current?.value ?? 'full',\n write: cuesheetWriteRef.current?.value ?? 'full',\n });\n\n if (!urlPreset) {\n throw new Error('Failed to create URL preset for Cuesheet');\n }\n\n const url = await generateUrl({\n baseUrl: options.baseUrl,\n path: options.path,\n authenticate: options.authenticate,\n lockConfig: options.lockConfig,\n lockNav: options.lockNav,\n preset: urlPreset.alias,\n });\n await safeCopyToClipboard(url);\n setUrl(url);\n } else {\n const presetPath = options.path.startsWith('preset-') ? options.path.replace('preset-', '') : undefined;\n const path = presetPath ? presets.find((preset) => preset.alias === presetPath)?.target : options.path;\n if (!path) {\n throw new Error(`Could not resolve preset: ${path}`);\n }\n\n const url = await generateUrl({\n baseUrl: options.baseUrl,\n path,\n authenticate: options.authenticate,\n lockConfig: options.lockConfig,\n lockNav: options.lockNav,\n preset: presetPath,\n });\n\n await safeCopyToClipboard(url);\n setUrl(url);\n }\n reset(options, {\n keepValues: true,\n keepDirty: false,\n });\n setFormState('success');\n } catch (error) {\n const message = maybeAxiosError(error);\n setError('root', { message });\n setFormState('error');\n }\n };\n\n const canSubmit = isDirty || formState !== 'success';\n\n return (\n <form onSubmit={handleSubmit(onSubmit)} onKeyDown={(event) => preventEscape(event)}>\n {!isLockedToView && (\n <Info>You can generate a link to share with your team or to use in automation (such as companion).</Info>\n )}\n <div className={style.shareInline}>\n <div className={style.column}>\n <Panel.ListGroup>\n {isOntimeCloud ? (\n <input hidden readOnly name='baseUrl' value={serverURL} />\n ) : (\n <Panel.ListItem>\n <Panel.Field\n title='Host IP'\n description={`Which IP address will be used${isOntimeCloud ? ' (not applicable in Ontime Cloud)' : ''}`}\n />\n <Select\n options={hostOptions}\n value={watch('baseUrl')}\n onValueChange={(value: string | null) => {\n if (value === null) return;\n setValue('baseUrl', value);\n }}\n />\n </Panel.ListItem>\n )}\n {isLockedToView ? (\n <input type='hidden' value={watch('path')} />\n ) : (\n <Panel.ListItem>\n <Panel.Field title='Ontime view' description='Which view or preset will the link point to' />\n <Select\n options={pathOptions}\n value={watch('path')}\n onValueChange={(value: OntimeView | string | null) => {\n if (value === null) return;\n setValue('path', value, { shouldDirty: true });\n }}\n />\n </Panel.ListItem>\n )}\n\n {watch('path') === OntimeView.Cuesheet && (\n <>\n <Panel.ListItem>\n <Panel.Field\n title='Preset alias'\n description='The name of the preset we will create to hold this options'\n error={(errors as FieldErrors<CuesheetLinkOptions>).alias?.message}\n />\n <Input\n defaultValue={generatedAlias.current}\n {...register('alias', {\n required: 'Alias cannot be empty and must be unique',\n pattern: {\n value: isUrlSafe,\n message: 'Field can only contain URL safe characters (a-z, 0-9, _ and -)',\n },\n })}\n />\n </Panel.ListItem>\n <CuesheetLinkOptions readRef={cuesheetReadRef} writeRef={cuesheetWriteRef} />\n </>\n )}\n\n <Panel.ListItem>\n <Panel.Field title='Lock navigation' description='Whether to hide the navigation menu' />\n <Switch\n size='large'\n name='lockNav'\n data-testid='lockNav'\n checked={watch('lockNav')}\n onCheckedChange={(checked) => setValue('lockNav', checked, { shouldDirty: true })}\n disabled={watch('lockConfig')}\n />\n </Panel.ListItem>\n {watch('path') !== OntimeView.Cuesheet && (\n <Panel.ListItem>\n <Panel.Field\n title='Lock configuration'\n description='Whether to hide the configuration panel (also hides navigation)'\n />\n <Switch\n size='large'\n name='lockConfig'\n data-testid='lockConfig'\n checked={watch('lockConfig')}\n onCheckedChange={(checked) => {\n if (checked) {\n setValue('lockNav', checked, { shouldDirty: true });\n }\n setValue('lockConfig', checked, { shouldDirty: true });\n }}\n />\n </Panel.ListItem>\n )}\n <Panel.ListItem>\n <Panel.Field title='Authenticate' description='Whether the URL should be pre-authenticated' />\n <Switch\n size='large'\n name='authenticate'\n data-testid='authenticate'\n checked={watch('authenticate')}\n onCheckedChange={(checked) => setValue('authenticate', checked, { shouldDirty: true })}\n />\n </Panel.ListItem>\n </Panel.ListGroup>\n <Panel.Error>{errors.root?.message}</Panel.Error>\n <Panel.InlineElements align='end' className={style.end}>\n <Button type='submit' variant={canSubmit ? 'primary' : 'subtle'} loading={formState === 'loading'}>\n {canSubmit ? 'Create share link' : 'Link copied to clipboard!'}\n </Button>\n </Panel.InlineElements>\n </div>\n <Panel.Section className={style.column}>\n <Panel.Description>Share this link</Panel.Description>\n <QRCode size={172} value={url} className={style.qrCode} />\n <div className={style.copiableLink} data-testid='copy-link'>\n {url}\n </div>\n <CopyTag copyValue={url}>Copy link</CopyTag>\n </Panel.Section>\n </div>\n </form>\n );\n}\n","import { useMemo } from 'react';\nimport { OntimeView } from 'ontime-types';\n\nimport useInfo from '../../common/hooks-query/useInfo';\nimport useUrlPresets from '../../common/hooks-query/useUrlPresets';\n\nimport GenerateLinkForm from './GenerateLinkForm';\n\ninterface GenerateLinkFormExportProps {\n lockedPath?: { value: OntimeView; label: string };\n}\n\nexport default function GenerateLinkFormExport({ lockedPath }: GenerateLinkFormExportProps) {\n const { data: infoData } = useInfo();\n const { data: urlPresetData } = useUrlPresets({ skip: lockedPath === undefined });\n\n /**\n * hostOptions are only used for local networks\n * the NIF address is a local IP address: 192.168.x.x or 10.x.x.x\n * We need to inject the port and protocol to create a valid URL\n * eg: http://192.168.x.x:port\n */\n const hostOptions = useMemo(() => {\n return infoData.networkInterfaces.map((nif) => ({\n value: `http://${nif.address}:${infoData.serverPort}`,\n label: `${nif.name} - ${nif.address}`,\n }));\n }, [infoData.networkInterfaces, infoData.serverPort]);\n\n const pathOptions = useMemo(() => {\n if (lockedPath) {\n return [{ value: lockedPath.value, label: lockedPath.label }];\n }\n return [\n { value: OntimeView.Timer, label: 'Timer' },\n { value: OntimeView.Cuesheet, label: 'Cuesheet' },\n { value: OntimeView.Operator, label: 'Operator' },\n { value: '<<companion>>', label: 'Companion' },\n ...urlPresetData.map((preset) => ({\n value: `preset-${preset.alias}`,\n label: `URL Preset: ${preset.alias}`,\n })),\n ];\n }, [lockedPath, urlPresetData]);\n\n return (\n <GenerateLinkForm\n hostOptions={hostOptions}\n pathOptions={pathOptions}\n presets={urlPresetData}\n isLockedToView={Boolean(lockedPath)}\n />\n );\n}\n","import { MouseEvent } from 'react';\nimport { IoBan } from 'react-icons/io5';\n\nimport { cx } from '../../../utils/styleUtils';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface SwatchProps {\n color: string;\n onClick?: (color: string) => void;\n isSelected?: boolean;\n}\n\nexport default function Swatch({ color, isSelected, onClick }: SwatchProps) {\n const handleClick = (event: MouseEvent) => {\n onClick?.(color);\n event.preventDefault();\n event.stopPropagation();\n };\n\n const classes = cx([style.swatch, isSelected && style.selected, onClick && style.selectable]);\n\n if (!color) {\n return (\n <div className={classes} onClick={handleClick}>\n <IoBan />\n </div>\n );\n }\n return <div className={classes} style={{ backgroundColor: `${color}` }} onClick={handleClick} />;\n}\n","import { useCallback } from 'react';\n\nimport Swatch from './Swatch';\nimport SwatchPicker from './SwatchPicker';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface ColourInputProps {\n value: string;\n name: 'colour';\n handleChange: (newValue: 'colour', name: string) => void;\n}\n\nconst colours = [\n '',\n '#FFCC78', // $orange-400\n '#FFAB33', // $orange-600\n '#77C785', // $green-400\n '#339E4E', // $green-600\n '#779BE7', // $blue-400\n '#3E75E8', // $blue-600\n '#FF7878', // $red-400\n '#ED3333', // $red-600\n '#A790F5', // $violet-400\n '#8064E1', // $violet-600\n '#9d9d9d', // $gray-500\n '#ececec', // $gray-100\n];\n\nexport default function SwatchSelect(props: ColourInputProps) {\n const { value, name, handleChange } = props;\n\n const setColour = useCallback(\n (newValue: string) => {\n if (newValue !== value) {\n handleChange(name, newValue);\n }\n },\n [handleChange, name, value],\n );\n\n return (\n <div className={style.list}>\n {colours.map((colour) => (\n <Swatch key={colour} color={colour} onClick={setColour} isSelected={value === colour} />\n ))}\n <SwatchPicker color={value} onChange={setColour} isSelected={!colours.includes(value)} />\n </div>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { IconType } from 'react-icons';\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\n\nimport style from './DropdownMenu.module.scss';\n\ntype DropdownMenuItemDivider = { type: 'divider' };\ntype DropdownMenuItem = {\n type: 'item' | 'destructive';\n label: string;\n description?: string;\n icon?: IconType;\n disabled?: boolean;\n onClick: () => void;\n shortcut?: string;\n};\n\nexport type DropdownMenuOption = DropdownMenuItemDivider | DropdownMenuItem;\n\ninterface DropdownMenuProps extends BaseMenu.Trigger.Props {\n items: DropdownMenuOption[];\n}\n\nexport function DropdownMenu({ items, children, ...triggerProps }: PropsWithChildren<DropdownMenuProps>) {\n return (\n <BaseMenu.Root>\n <BaseMenu.Trigger {...triggerProps}>{children}</BaseMenu.Trigger>\n <BaseMenu.Portal>\n <BaseMenu.Positioner className={style.positioner} align='start' sideOffset={8}>\n <BaseMenu.Popup className={style.popup}>\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return <BaseMenu.Separator key={index} className={style.separator} />;\n }\n return (\n <BaseMenu.Item\n key={index}\n className={style.item}\n onClick={item.onClick}\n disabled={item.disabled}\n data-type={item.type}\n >\n <span className={style.content}>\n <span className={style.label}>\n {item.icon && <item.icon />}\n {item.label}\n </span>\n {item.description && <span className={style.description}>{item.description}</span>}\n </span>\n {item.shortcut && <span className={style.shortcut}>{item.shortcut}</span>}\n </BaseMenu.Item>\n );\n })}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n\ninterface PositionedDropdownMenuProps {\n items: Array<DropdownMenuItemDivider | DropdownMenuItem>;\n isOpen: boolean;\n onClose: () => void;\n position: { x: number; y: number };\n}\n\nexport function PositionedDropdownMenu({ items, isOpen, position, onClose }: PositionedDropdownMenuProps) {\n return (\n <BaseMenu.Root\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) onClose();\n }}\n >\n <BaseMenu.Trigger style={{ position: 'fixed', left: position.x, top: position.y }} aria-hidden />\n <BaseMenu.Portal>\n <BaseMenu.Positioner className={style.positioner} align='start' sideOffset={8} alignOffset={8}>\n <BaseMenu.Popup className={style.popup}>\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return <BaseMenu.Separator key={index} className={style.separator} />;\n }\n return (\n <BaseMenu.Item key={index} className={style.item} onClick={item.onClick} disabled={item.disabled}>\n <span className={style.content}>\n <span className={style.label}>\n {item.icon && <item.icon />}\n {item.label}\n </span>\n {item.description && <span className={style.description}>{item.description}</span>}\n </span>\n {item.shortcut && <span className={style.shortcut}>{item.shortcut}</span>}\n </BaseMenu.Item>\n );\n })}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n","import type { ReactNode } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\n\nimport IconButton from '../buttons/IconButton';\n\nimport style from './Modal.module.scss';\n\ninterface ModalProps {\n isOpen: boolean;\n title?: string;\n showCloseButton?: boolean;\n showBackdrop?: boolean;\n bodyElements: ReactNode;\n footerElements?: ReactNode;\n onClose: () => void;\n}\n\nexport default function Modal({\n isOpen,\n title,\n showCloseButton,\n showBackdrop,\n bodyElements,\n footerElements,\n onClose,\n}: ModalProps) {\n return (\n <BaseDialog.Root\n open={isOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) onClose();\n }}\n disablePointerDismissal\n >\n <BaseDialog.Portal>\n {showBackdrop && <BaseDialog.Backdrop className={style.backdrop} />}\n <BaseDialog.Popup className={style.modal}>\n <div className={style.title}>\n {title}\n {showCloseButton && (\n <IconButton variant='subtle-white' onClick={onClose}>\n <IoClose />\n </IconButton>\n )}\n </div>\n <div className={style.body}>{bodyElements}</div>\n <div className={style.footer}>{footerElements}</div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n","export function isMacOS() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('macintosh') || userAgent.includes('mac os');\n}\n\nexport const deviceAlt = isMacOS() ? 'Option' : 'Alt';\n\nexport const deviceMod = isMacOS() ? 'Cmd' : 'Ctrl';\n","import { MouseEvent } from 'react';\nimport { EntryId, isOntimeEvent, MaybeNumber, Rundown } from 'ontime-types';\nimport { create } from 'zustand';\n\nimport { RUNDOWN } from '../../common/api/constants';\nimport { ontimeQueryClient } from '../../common/queryClient';\nimport { isMacOS } from '../../common/utils/deviceUtils';\n\nexport type SelectionMode = 'shift' | 'click' | 'ctrl';\n\ninterface EventSelectionStore {\n selectedEvents: Set<EntryId>;\n anchoredIndex: MaybeNumber;\n cursor: EntryId | null;\n entryMode: 'event' | 'single' | null;\n scrollHandler: ((id: EntryId) => void) | null;\n setSingleEntrySelection: (selectionArgs: { id: EntryId }) => void;\n setSelectedEvents: (selectionArgs: { id: EntryId; index: number; selectMode: SelectionMode }) => void;\n clearSelectedEvents: () => void;\n clearMultiSelect: () => void;\n unselect: (id: EntryId) => void;\n setScrollHandler: (handler: ((id: EntryId) => void) | null) => void;\n scrollToEntry: (id: EntryId) => void;\n}\n\n/**\n * Keeps track of the selected entries and selection mode\n * Provides methods to update the selection based on user interactions\n */\nexport const useEventSelection = create<EventSelectionStore>()((set, get) => ({\n selectedEvents: new Set(),\n anchoredIndex: null,\n cursor: null,\n entryMode: null,\n scrollHandler: null,\n setSingleEntrySelection: ({ id }) => {\n set({ selectedEvents: new Set([id]), anchoredIndex: null, cursor: id, entryMode: 'single' });\n },\n setSelectedEvents: ({ id, index, selectMode }) => {\n const { selectedEvents, anchoredIndex, entryMode } = get();\n\n // if we are in single mode, we replace the selection and change the mode\n if (entryMode === 'single') {\n return set({ selectedEvents: new Set([id]), anchoredIndex: index, cursor: id, entryMode: 'event' });\n }\n\n // on click, we replace selection with event\n if (selectMode === 'click') {\n return set({ selectedEvents: new Set([id]), anchoredIndex: index, cursor: id, entryMode: 'event' });\n }\n\n // on ctrl + click, we toggle the selection of that event\n if (selectMode === 'ctrl') {\n const rundownData = ontimeQueryClient.getQueryData<Rundown>(RUNDOWN);\n if (!rundownData) return;\n\n // if it doesnt exist, simply add to the list and set an anchor\n if (!selectedEvents.has(id)) {\n return set({\n selectedEvents: selectedEvents.add(id),\n anchoredIndex: index,\n cursor: id,\n entryMode: 'event',\n });\n }\n\n // if event is already selected, we remove it from selection\n // and set the anchor to the event after\n selectedEvents.delete(id);\n\n const nextIndex = rundownData.order.findIndex(\n (eventId, i) => i > index && isOntimeEvent(rundownData.entries[eventId]) && selectedEvents.has(eventId),\n );\n\n // if we didnt find anything after, set the anchor to the last event\n return set({\n selectedEvents,\n anchoredIndex: nextIndex < 0 ? rundownData.order.length - 1 : nextIndex,\n entryMode: 'event',\n });\n }\n\n // on shift + click, we select a range of events up to the clicked event\n if (selectMode === 'shift') {\n const rundownData = ontimeQueryClient.getQueryData<Rundown>(RUNDOWN);\n if (!rundownData) return;\n\n // get list of rundown with only ontime events\n const eventIds: EntryId[] = [];\n rundownData.flatOrder.forEach((eventId) => {\n const event = rundownData.entries[eventId];\n if (isOntimeEvent(event)) {\n eventIds.push(event.id);\n }\n });\n\n const start = anchoredIndex === null ? 0 : Math.min(anchoredIndex, index);\n const end = anchoredIndex === null ? index : Math.max(anchoredIndex, index + 1);\n\n // create new set with range of ids from start to end\n const selectedEventIds = eventIds.slice(start, end);\n\n return set({\n selectedEvents: new Set([...selectedEvents, ...selectedEventIds]),\n anchoredIndex: index,\n entryMode: 'event',\n });\n }\n },\n clearSelectedEvents: () => set({ selectedEvents: new Set(), anchoredIndex: null, cursor: null, entryMode: null }),\n clearMultiSelect: () => {\n const { selectedEvents } = get();\n const [firstSelected] = selectedEvents;\n set({\n selectedEvents: new Set(firstSelected ? [firstSelected] : []),\n anchoredIndex: null,\n entryMode: null,\n });\n },\n unselect: (id: string) => {\n const { entryMode, selectedEvents } = get();\n selectedEvents.delete(id);\n set({\n selectedEvents,\n entryMode: selectedEvents.size === 0 ? null : entryMode,\n });\n },\n // Sets the scroll handler for programmatic scrolling to entries\n setScrollHandler: (handler) => set({ scrollHandler: handler }),\n // Scrolls to the specified entry using the registered scroll handler\n scrollToEntry: (id: EntryId) => {\n const handler = get().scrollHandler;\n if (handler) {\n handler(id);\n }\n },\n}));\n\nexport function getSelectionMode(event: MouseEvent): SelectionMode {\n if ((isMacOS() && event.metaKey) || event.ctrlKey) {\n return 'ctrl';\n }\n\n if (event.shiftKey) {\n return 'shift';\n }\n\n return 'click';\n}\n"],"names":["automationsPath","apiEntryUrl","getAutomationSettings","options","axios","get","signal","data","editAutomationSettings","automationSettings","post","addTrigger","trigger","editTrigger","id","put","deleteTrigger","delete","addAutomation","automation","editAutomation","deleteAutomation","testOutput","output","automationPlaceholderSettings","enabledAutomations","enabledOscIn","oscPortIn","triggers","automations","useAutomationSettings","status","isFetching","isError","refetch","useQuery","queryKey","AUTOMATION","queryFn","placeholderData","previousData","_previousQuery","refetchInterval","queryRefetchIntervalSlow","isOnlyNumbers","startsWithHttp","isAlphanumeric","isUrlSafe","Tag","className","children","jsx","style","tag","RadioGroup","items","orientation","onValueChange","elementProps","BaseRadioGroup","value","cx","radioGroup","map","item","jsxs","Radio.Root","toString","radio","Radio.Indicator","indicator","label","defaultOptions","hideTableSeconds","hideIndexColumn","showDelayedTimes","hideDelays","usePersistedCuesheetOptions","create","persist","set","setOption","key","state","toggleOption","resetOptions","name","cuesheetDefaultColumns","makeCuesheetCustomColumns","customFields","Object","entries","field","CuesheetLinkOptions","readRef","writeRef","useCustomFields","customFieldColumns","useMemo","readPermissions","setReadPermissions","useState","writePermissions","setWritePermissions","readSwitches","setReadSwitches","initialState","forEach","column","writeSwitches","setWriteSwitches","handleReadModeChange","prevReadSwitches","updatedReadSwitches","keys","handleWriteModeChange","prevWriteSwitches","updatedWriteSwitches","handleSwitchChange","type","getReadPermissions","filter","_","join","getWritePermissions","Panel.Indent","Panel.Field","twoCols","grid","Panel.Description","Fragment","Switch","Boolean","length","GenerateLinkForm","hostOptions","pathOptions","presets","isLockedToView","formState","setFormState","url","setUrl","serverURL","cuesheetReadRef","useRef","cuesheetWriteRef","generatedAlias","generateId","addPreset","useUpdateUrlPreset","handleSubmit","setError","watch","setValue","reset","register","errors","isDirty","useForm","mode","defaultValues","baseUrl","path","OntimeView","Timer","authenticate","lockConfig","lockNav","createPresetFromOptions","alias","read","Error","target","Cuesheet","enabled","search","write","find","preset","onSubmit","urlPreset","current","generateUrl","safeCopyToClipboard","presetPath","startsWith","replace","undefined","keepValues","keepDirty","error","message","maybeAxiosError","canSubmit","event","preventEscape","Info","shareInline","Panel.ListGroup","isOntimeCloud","Panel.ListItem","Select","shouldDirty","Input","required","pattern","checked","Panel.Error","root","Panel.InlineElements","end","Button","Panel.Section","QRCode","qrCode","copiableLink","CopyTag","GenerateLinkFormExport","lockedPath","infoData","useInfo","urlPresetData","useUrlPresets","skip","networkInterfaces","nif","address","serverPort","Operator","Swatch","color","isSelected","onClick","handleClick","preventDefault","stopPropagation","classes","swatch","selected","selectable","backgroundColor","IoBan","colours","SwatchSelect","props","handleChange","setColour","useCallback","newValue","list","colour","SwatchPicker","includes","DropdownMenu","triggerProps","BaseMenu.Root","BaseMenu.Trigger","BaseMenu.Portal","BaseMenu.Positioner","positioner","BaseMenu.Popup","popup","index","BaseMenu.Separator","separator","BaseMenu.Item","disabled","content","icon","description","shortcut","PositionedDropdownMenu","isOpen","position","onClose","open","left","x","top","y","Modal","title","showCloseButton","showBackdrop","bodyElements","footerElements","BaseDialog.Root","BaseDialog.Portal","BaseDialog.Backdrop","backdrop","BaseDialog.Popup","modal","IconButton","IoClose","body","footer","isMacOS","userAgent","navigator","toLowerCase","deviceAlt","deviceMod","useEventSelection","selectedEvents","Set","anchoredIndex","cursor","entryMode","scrollHandler","setSingleEntrySelection","setSelectedEvents","selectMode","rundownData","ontimeQueryClient","getQueryData","RUNDOWN","has","add","nextIndex","order","findIndex","eventId","i","isOntimeEvent","eventIds","flatOrder","push","start","Math","min","max","selectedEventIds","slice","clearSelectedEvents","clearMultiSelect","firstSelected","unselect","size","setScrollHandler","handler","scrollToEntry","getSelectionMode","metaKey","ctrlKey","shiftKey"],"mappings":"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"}
1
+ {"version":3,"file":"useEventSelection-Bpbu89c7.js","sources":["../../src/common/api/automation.ts","../../src/common/models/AutomationSettings.ts","../../src/common/hooks-query/useAutomationSettings.ts","../../src/common/utils/regex.ts","../../src/common/components/tag/Tag.tsx","../../src/common/components/radio-group/RadioGroup.tsx","../../src/views/cuesheet/cuesheet.options.ts","../../src/features/sharing/composite/CuesheetLinkOptions.tsx","../../src/features/sharing/GenerateLinkForm.tsx","../../src/features/sharing/GenerateLinkFormExport.tsx","../../src/common/components/input/colour-input/Swatch.tsx","../../src/common/components/input/colour-input/SwatchSelect.tsx","../../src/common/components/dropdown-menu/DropdownMenu.tsx","../../src/common/components/modal/Modal.tsx","../../src/common/utils/deviceUtils.ts","../../src/features/rundown/useEventSelection.ts"],"sourcesContent":["import axios from 'axios';\nimport type {\n Automation,\n AutomationDTO,\n AutomationOutput,\n AutomationSettings,\n Trigger,\n TriggerDTO,\n} from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\nimport type { RequestOptions } from './requestOptions';\n\nconst automationsPath = `${apiEntryUrl}/automations`;\n\n/**\n * HTTP request to get the automations settings\n */\nexport async function getAutomationSettings(options?: RequestOptions): Promise<AutomationSettings> {\n const res = await axios.get(automationsPath, { signal: options?.signal });\n return res.data;\n}\n\n/**\n * HTTP request to edit the automations settings\n */\nexport async function editAutomationSettings(\n automationSettings: Partial<AutomationSettings>,\n): Promise<AutomationSettings> {\n const res = await axios.post(automationsPath, automationSettings);\n return res.data;\n}\n\n/**\n * HTTP request to create a new automation trigger\n */\nexport async function addTrigger(trigger: TriggerDTO): Promise<Trigger> {\n const res = await axios.post(`${automationsPath}/trigger`, trigger);\n return res.data;\n}\n\n/**\n * HTTP request to update an automation trigger\n */\nexport async function editTrigger(id: string, trigger: Trigger): Promise<Trigger> {\n const res = await axios.put(`${automationsPath}/trigger/${id}`, trigger);\n return res.data;\n}\n\n/**\n * HTTP request to delete an automation trigger\n */\nexport function deleteTrigger(id: string): Promise<void> {\n return axios.delete(`${automationsPath}/trigger/${id}`);\n}\n\n/**\n * HTTP request to create a new automation\n */\nexport async function addAutomation(automation: AutomationDTO): Promise<Automation> {\n const res = await axios.post(`${automationsPath}/automation`, automation);\n return res.data;\n}\n\n/**\n * HTTP request to update a automation\n */\nexport async function editAutomation(id: string, automation: Automation): Promise<Automation> {\n const res = await axios.put(`${automationsPath}/automation/${id}`, automation);\n return res.data;\n}\n\n/**\n * HTTP request to delete a automation\n */\nexport function deleteAutomation(id: string): Promise<void> {\n return axios.delete(`${automationsPath}/automation/${id}`);\n}\n\n/**\n * HTTP request to test automation output\n * The return is irrelevant as we care for the resolution of the promise\n */\nexport function testOutput(output: AutomationOutput): Promise<void> {\n return axios.post(`${automationsPath}/test`, output);\n}\n","import { AutomationSettings } from 'ontime-types';\n\nexport const automationPlaceholderSettings: AutomationSettings = {\n enabledAutomations: false,\n enabledOscIn: false,\n oscPortIn: 8888,\n triggers: [],\n automations: {},\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { getAutomationSettings } from '../api/automation';\nimport { AUTOMATION } from '../api/constants';\nimport { automationPlaceholderSettings } from '../models/AutomationSettings';\n\nexport default function useAutomationSettings() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: AUTOMATION,\n queryFn: ({ signal }) => getAutomationSettings({ signal }),\n placeholderData: (previousData, _previousQuery) => previousData,\n refetchInterval: queryRefetchIntervalSlow,\n });\n\n return { data: data ?? automationPlaceholderSettings, status, isFetching, isError, refetch };\n}\n","/**\n * Simple regex patterns for common use cases\n * mostly used in form validation\n */\n\nexport const isOnlyNumbers = /^\\d+$/;\nexport const isIPAddress = /^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$/;\nexport const startsWithHttp = /^https?:\\/\\//;\nexport const startsWithSlash = /^\\//;\nexport const isAlphanumeric = /^[a-z0-9]+$/i;\nexport const isASCII = /^[ -~]+$/; //https://catonmat.net/my-favorite-regex\nexport const isASCIIorEmpty = /^$|^[ -~]+$/; //https://catonmat.net/my-favorite-regex\nexport const isNotEmpty = /\\S/;\nexport const isUrlSafe = /^[a-zA-Z0-9_-]*$/; // https://stackoverflow.com/questions/24419067/validate-a-string-to-be-url-safe-using-regex\n","import { PropsWithChildren } from 'react';\n\nimport style from './Tag.module.scss';\n\ninterface TagProps {\n className?: string;\n}\n\nexport default function Tag({ className, children }: PropsWithChildren<TagProps>) {\n return <span className={`${style.tag} ${className || ''}`}>{children}</span>;\n}\n","import { Radio } from '@base-ui/react/radio';\nimport { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport style from './RadioGroup.module.scss';\n\ninterface RadioGroupProps<T extends string | number | boolean> extends Omit<BaseRadioGroup.Props, 'onValueChange'> {\n items: {\n value: T;\n label: string;\n }[];\n onValueChange?: (value: T) => void;\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport default function RadioGroup<T extends string | number | boolean>({\n items,\n className,\n orientation = 'vertical',\n onValueChange,\n ...elementProps\n}: RadioGroupProps<T>) {\n return (\n <BaseRadioGroup\n onValueChange={(value) => onValueChange?.(value as T)}\n className={cx([style.radioGroup, style[orientation], className])}\n {...elementProps}\n >\n {items.map((item) => (\n <label className={style.item} key={item.value.toString()}>\n <Radio.Root value={item.value.toString()} className={style.radio}>\n <Radio.Indicator className={style.indicator} />\n </Radio.Root>\n {item.label}\n </label>\n ))}\n </BaseRadioGroup>\n );\n}\n","import { CustomFields } from 'ontime-types';\nimport { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\ntype OptionValues = {\n hideTableSeconds: boolean;\n hideIndexColumn: boolean;\n showDelayedTimes: boolean;\n hideDelays: boolean;\n};\n\nconst defaultOptions: OptionValues = {\n hideTableSeconds: false,\n hideIndexColumn: false,\n showDelayedTimes: false,\n hideDelays: false,\n};\n\nexport type CuesheetOptionKeys = keyof OptionValues;\n\nexport interface CuesheetOptions extends OptionValues {\n setOption: <K extends CuesheetOptionKeys>(key: K, value: OptionValues[K]) => void;\n toggleOption: (key: CuesheetOptionKeys) => void;\n resetOptions: () => void;\n}\n\nexport const usePersistedCuesheetOptions = create<CuesheetOptions>()(\n persist(\n (set) => {\n return {\n ...defaultOptions,\n setOption: (key, value) => set((state) => ({ ...state, [key]: value })),\n toggleOption: (key) => set((state) => ({ ...state, [key]: !state[key] })),\n resetOptions: () => set(defaultOptions),\n };\n },\n {\n name: 'cuesheet-options',\n },\n ),\n);\n\nexport const cuesheetDefaultColumns = [\n { value: 'flag', label: 'Flag' },\n { value: 'cue', label: 'Cue' },\n { value: 'title', label: 'Title' },\n { value: 'timeStart', label: 'Time start' },\n { value: 'timeEnd', label: 'Time end' },\n { value: 'duration', label: 'Duration' },\n { value: 'note', label: 'Note' },\n];\n\nexport function makeCuesheetCustomColumns(customFields: CustomFields) {\n return Object.entries(customFields).map(([key, field]) => {\n return {\n value: `custom-${key}`,\n label: field.label,\n };\n });\n}\n","import { Fragment, RefObject, useMemo, useState } from 'react';\n\nimport RadioGroup from '../../../common/components/radio-group/RadioGroup';\nimport Switch from '../../../common/components/switch/Switch';\nimport useCustomFields from '../../../common/hooks-query/useCustomFields';\nimport { cuesheetDefaultColumns, makeCuesheetCustomColumns } from '../../../views/cuesheet/cuesheet.options';\nimport * as Panel from '../../app-settings/panel-utils/PanelUtils';\n\nimport style from './CuesheetLinkOptions.module.scss';\n\ntype AccessMode = 'full' | 'custom';\n\ninterface CuesheetLinkOptionsProps {\n readRef?: RefObject<HTMLInputElement | null>;\n writeRef?: RefObject<HTMLInputElement | null>;\n}\n\nexport default function CuesheetLinkOptions({ readRef, writeRef }: CuesheetLinkOptionsProps) {\n const { data } = useCustomFields();\n const customFieldColumns = useMemo(() => makeCuesheetCustomColumns(data), [data]);\n\n const [readPermissions, setReadPermissions] = useState<AccessMode>('full');\n const [writePermissions, setWritePermissions] = useState<AccessMode>('full');\n\n const [readSwitches, setReadSwitches] = useState<Record<string, boolean>>(() => {\n const initialState: Record<string, boolean> = {};\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n initialState[column.value] = true;\n });\n return initialState;\n });\n\n const [writeSwitches, setWriteSwitches] = useState<Record<string, boolean>>(() => {\n const initialState: Record<string, boolean> = {};\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n initialState[column.value] = true;\n });\n return initialState;\n });\n\n const handleReadModeChange = (value: AccessMode) => {\n setReadPermissions(value);\n\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches };\n Object.keys(updatedReadSwitches).forEach((key) => {\n updatedReadSwitches[key] = true;\n });\n return updatedReadSwitches;\n });\n };\n\n const handleWriteModeChange = (value: AccessMode) => {\n if (value === 'full') {\n setReadPermissions('full');\n }\n setWritePermissions(value);\n\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches };\n setWriteSwitches((prevWriteSwitches) => {\n const updatedWriteSwitches = { ...prevWriteSwitches };\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n updatedReadSwitches[column.value] = true;\n updatedWriteSwitches[column.value] = true;\n });\n return updatedWriteSwitches;\n });\n return updatedReadSwitches;\n });\n };\n\n const handleSwitchChange = (key: string, type: 'read' | 'write', value: boolean) => {\n if (type === 'read') {\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches, [key]: value };\n return updatedReadSwitches;\n });\n } else {\n setWriteSwitches((prevWriteSwitches) => {\n const updatedWriteSwitches = { ...prevWriteSwitches, [key]: value };\n return updatedWriteSwitches;\n });\n }\n };\n\n const getReadPermissions = () => {\n if (readPermissions === 'full' || writePermissions === 'full') {\n return 'full';\n }\n\n return Object.entries(readSwitches)\n .filter(([_, value]) => value)\n .map(([key]) => key)\n .join(',');\n };\n\n const getWritePermissions = () => {\n if (writePermissions === 'full') {\n return 'full';\n }\n\n return Object.entries(writeSwitches)\n .filter(([_, value]) => value)\n .map(([key]) => key)\n .join(',');\n };\n\n return (\n <Panel.Indent>\n <input name='read' hidden readOnly ref={readRef} value={getReadPermissions() || '-'} />\n <input name='write' hidden readOnly ref={writeRef} value={getWritePermissions() || '-'} />\n <div>\n <Panel.Field title='Access mode' description='Which parts of the data will the link give access to' />\n <div>\n <RadioGroup\n value={writePermissions}\n onValueChange={handleWriteModeChange}\n orientation='horizontal'\n items={[\n { value: 'full', label: 'Full write (edit all existing and future columns)' },\n { value: 'custom', label: 'Custom write' },\n ]}\n />\n <RadioGroup\n value={readPermissions}\n onValueChange={handleReadModeChange}\n orientation='horizontal'\n disabled={writePermissions === 'full'}\n items={[\n { value: 'full', label: 'Full read (view all existing and future columns)' },\n { value: 'custom', label: 'Custom read' },\n ]}\n />\n </div>\n </div>\n <div className={style.twoCols}>\n <div className={style.grid}>\n <Panel.Description>Ontime columns</Panel.Description>\n <Panel.Description>Read</Panel.Description>\n <Panel.Description>Write</Panel.Description>\n {cuesheetDefaultColumns.map((column) => (\n <Fragment key={column.value}>\n <div>{column.label}</div>\n <Switch\n checked={Boolean(readSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'read', value)}\n disabled={readPermissions === 'full' || writePermissions === 'full'}\n data-testid={`read-${column.value}`}\n />\n <Switch\n checked={Boolean(writeSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'write', value)}\n disabled={writePermissions === 'full'}\n data-testid={`write-${column.value}`}\n />\n </Fragment>\n ))}\n </div>\n {customFieldColumns.length > 0 && (\n <div className={style.grid}>\n <Panel.Description>Custom fields</Panel.Description>\n <Panel.Description>Read</Panel.Description>\n <Panel.Description>Write</Panel.Description>\n {customFieldColumns.map((column) => (\n <Fragment key={column.value}>\n {column.label}\n <Switch\n checked={Boolean(readSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'read', value)}\n disabled={readPermissions === 'full' || writePermissions === 'full'}\n data-testid={`read-${column.value}`}\n />\n <Switch\n checked={Boolean(writeSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'write', value)}\n disabled={writePermissions === 'full'}\n data-testid={`write-${column.value}`}\n />\n </Fragment>\n ))}\n </div>\n )}\n </div>\n </Panel.Indent>\n );\n}\n","import { useRef, useState } from 'react';\nimport { FieldErrors, useForm } from 'react-hook-form';\nimport QRCode from 'react-qr-code';\nimport { OntimeView, URLPreset } from 'ontime-types';\nimport { generateId } from 'ontime-utils';\n\nimport { generateUrl } from '../../common/api/session';\nimport { maybeAxiosError } from '../../common/api/utils';\nimport Button from '../../common/components/buttons/Button';\nimport CopyTag from '../../common/components/copy-tag/CopyTag';\nimport Info from '../../common/components/info/Info';\nimport Input from '../../common/components/input/input/Input';\nimport Select from '../../common/components/select/Select';\nimport Switch from '../../common/components/switch/Switch';\nimport { useUpdateUrlPreset } from '../../common/hooks-query/useUrlPresets';\nimport { safeCopyToClipboard } from '../../common/utils/copyToClipboard';\nimport { preventEscape } from '../../common/utils/keyEvent';\nimport { isUrlSafe } from '../../common/utils/regex';\nimport { isOntimeCloud, serverURL } from '../../externals';\nimport * as Panel from '../app-settings/panel-utils/PanelUtils';\n\nimport CuesheetLinkOptions from './composite/CuesheetLinkOptions';\n\nimport style from './GenerateLinkForm.module.scss';\n\ninterface GenerateLinkFormProps {\n hostOptions: { value: string; label: string }[];\n pathOptions: { value: OntimeView | string; label: string }[];\n presets: URLPreset[];\n isLockedToView?: boolean;\n}\n\ntype GenericLinkOptions = {\n baseUrl: string;\n path: OntimeView | string; // we use empty string for Companion view\n authenticate: boolean;\n lockConfig: boolean;\n lockNav: boolean;\n};\n\ntype CuesheetLinkOptions = GenericLinkOptions & {\n path: OntimeView.Cuesheet;\n\n alias: string;\n options: {\n read?: string;\n write?: string;\n };\n};\n\ntype GenerateLinkFormOptions = GenericLinkOptions | CuesheetLinkOptions;\n\ntype GenerateLinkState = 'pending' | 'loading' | 'success' | 'error';\n\nexport default function GenerateLinkForm({ hostOptions, pathOptions, presets, isLockedToView }: GenerateLinkFormProps) {\n const [formState, setFormState] = useState<GenerateLinkState>('pending');\n const [url, setUrl] = useState(serverURL);\n const cuesheetReadRef = useRef<HTMLInputElement>(null);\n const cuesheetWriteRef = useRef<HTMLInputElement>(null);\n const generatedAlias = useRef<string>(`cuesheet-${generateId()}`);\n\n const { addPreset } = useUpdateUrlPreset();\n\n const {\n handleSubmit,\n setError,\n watch,\n setValue,\n reset,\n register,\n formState: { errors, isDirty },\n } = useForm<GenerateLinkFormOptions>({\n mode: 'onChange',\n defaultValues: {\n baseUrl: serverURL,\n path: isLockedToView ? pathOptions[0].value : OntimeView.Timer,\n authenticate: false,\n lockConfig: false,\n lockNav: false,\n },\n });\n\n /**\n * If the user is generating a link to the cuesheet we gather extra options\n * The extra options are saved into a URL preset which we then request a share link for\n */\n const createPresetFromOptions = async (\n alias: string,\n options: Required<CuesheetLinkOptions['options']>,\n ): Promise<URLPreset | undefined> => {\n if (options.read === '-') {\n throw new Error('Cannot create a share with no read permissions');\n }\n const presets = await addPreset({\n target: OntimeView.Cuesheet,\n enabled: true,\n alias,\n search: '',\n options: {\n read: options.read,\n write: options.write,\n },\n });\n return presets.find((preset) => preset.alias === alias);\n };\n\n const onSubmit = async (options: GenerateLinkFormOptions) => {\n try {\n setFormState('loading');\n if (options.path === OntimeView.Cuesheet) {\n const urlPreset = await createPresetFromOptions((options as CuesheetLinkOptions).alias, {\n read: cuesheetReadRef.current?.value ?? 'full',\n write: cuesheetWriteRef.current?.value ?? 'full',\n });\n\n if (!urlPreset) {\n throw new Error('Failed to create URL preset for Cuesheet');\n }\n\n const url = await generateUrl({\n baseUrl: options.baseUrl,\n path: options.path,\n authenticate: options.authenticate,\n lockConfig: options.lockConfig,\n lockNav: options.lockNav,\n preset: urlPreset.alias,\n });\n await safeCopyToClipboard(url);\n setUrl(url);\n } else {\n const presetPath = options.path.startsWith('preset-') ? options.path.replace('preset-', '') : undefined;\n const path = presetPath ? presets.find((preset) => preset.alias === presetPath)?.target : options.path;\n if (!path) {\n throw new Error(`Could not resolve preset: ${path}`);\n }\n\n const url = await generateUrl({\n baseUrl: options.baseUrl,\n path,\n authenticate: options.authenticate,\n lockConfig: options.lockConfig,\n lockNav: options.lockNav,\n preset: presetPath,\n });\n\n await safeCopyToClipboard(url);\n setUrl(url);\n }\n reset(options, {\n keepValues: true,\n keepDirty: false,\n });\n setFormState('success');\n } catch (error) {\n const message = maybeAxiosError(error);\n setError('root', { message });\n setFormState('error');\n }\n };\n\n const canSubmit = isDirty || formState !== 'success';\n\n return (\n <form onSubmit={handleSubmit(onSubmit)} onKeyDown={(event) => preventEscape(event)}>\n {!isLockedToView && (\n <Info>You can generate a link to share with your team or to use in automation (such as companion).</Info>\n )}\n <div className={style.shareInline}>\n <div className={style.column}>\n <Panel.ListGroup>\n {isOntimeCloud ? (\n <input hidden readOnly name='baseUrl' value={serverURL} />\n ) : (\n <Panel.ListItem>\n <Panel.Field\n title='Host IP'\n description={`Which IP address will be used${isOntimeCloud ? ' (not applicable in Ontime Cloud)' : ''}`}\n />\n <Select\n options={hostOptions}\n value={watch('baseUrl')}\n onValueChange={(value: string | null) => {\n if (value === null) return;\n setValue('baseUrl', value);\n }}\n />\n </Panel.ListItem>\n )}\n {isLockedToView ? (\n <input type='hidden' value={watch('path')} />\n ) : (\n <Panel.ListItem>\n <Panel.Field title='Ontime view' description='Which view or preset will the link point to' />\n <Select\n options={pathOptions}\n value={watch('path')}\n onValueChange={(value: OntimeView | string | null) => {\n if (value === null) return;\n setValue('path', value, { shouldDirty: true });\n }}\n />\n </Panel.ListItem>\n )}\n\n {watch('path') === OntimeView.Cuesheet && (\n <>\n <Panel.ListItem>\n <Panel.Field\n title='Preset alias'\n description='The name of the preset we will create to hold this options'\n error={(errors as FieldErrors<CuesheetLinkOptions>).alias?.message}\n />\n <Input\n defaultValue={generatedAlias.current}\n {...register('alias', {\n required: 'Alias cannot be empty and must be unique',\n pattern: {\n value: isUrlSafe,\n message: 'Field can only contain URL safe characters (a-z, 0-9, _ and -)',\n },\n })}\n />\n </Panel.ListItem>\n <CuesheetLinkOptions readRef={cuesheetReadRef} writeRef={cuesheetWriteRef} />\n </>\n )}\n\n <Panel.ListItem>\n <Panel.Field title='Lock navigation' description='Whether to hide the navigation menu' />\n <Switch\n size='large'\n name='lockNav'\n data-testid='lockNav'\n checked={watch('lockNav')}\n onCheckedChange={(checked) => setValue('lockNav', checked, { shouldDirty: true })}\n disabled={watch('lockConfig')}\n />\n </Panel.ListItem>\n {watch('path') !== OntimeView.Cuesheet && (\n <Panel.ListItem>\n <Panel.Field\n title='Lock configuration'\n description='Whether to hide the configuration panel (also hides navigation)'\n />\n <Switch\n size='large'\n name='lockConfig'\n data-testid='lockConfig'\n checked={watch('lockConfig')}\n onCheckedChange={(checked) => {\n if (checked) {\n setValue('lockNav', checked, { shouldDirty: true });\n }\n setValue('lockConfig', checked, { shouldDirty: true });\n }}\n />\n </Panel.ListItem>\n )}\n <Panel.ListItem>\n <Panel.Field title='Authenticate' description='Whether the URL should be pre-authenticated' />\n <Switch\n size='large'\n name='authenticate'\n data-testid='authenticate'\n checked={watch('authenticate')}\n onCheckedChange={(checked) => setValue('authenticate', checked, { shouldDirty: true })}\n />\n </Panel.ListItem>\n </Panel.ListGroup>\n <Panel.Error>{errors.root?.message}</Panel.Error>\n <Panel.InlineElements align='end' className={style.end}>\n <Button type='submit' variant={canSubmit ? 'primary' : 'subtle'} loading={formState === 'loading'}>\n {canSubmit ? 'Create share link' : 'Link copied to clipboard!'}\n </Button>\n </Panel.InlineElements>\n </div>\n <Panel.Section className={style.column}>\n <Panel.Description>Share this link</Panel.Description>\n <QRCode size={172} value={url} className={style.qrCode} />\n <div className={style.copiableLink} data-testid='copy-link'>\n {url}\n </div>\n <CopyTag copyValue={url}>Copy link</CopyTag>\n </Panel.Section>\n </div>\n </form>\n );\n}\n","import { useMemo } from 'react';\nimport { OntimeView } from 'ontime-types';\n\nimport useInfo from '../../common/hooks-query/useInfo';\nimport useUrlPresets from '../../common/hooks-query/useUrlPresets';\n\nimport GenerateLinkForm from './GenerateLinkForm';\n\ninterface GenerateLinkFormExportProps {\n lockedPath?: { value: OntimeView; label: string };\n}\n\nexport default function GenerateLinkFormExport({ lockedPath }: GenerateLinkFormExportProps) {\n const { data: infoData } = useInfo();\n const { data: urlPresetData } = useUrlPresets({ skip: lockedPath === undefined });\n\n /**\n * hostOptions are only used for local networks\n * the NIF address is a local IP address: 192.168.x.x or 10.x.x.x\n * We need to inject the port and protocol to create a valid URL\n * eg: http://192.168.x.x:port\n */\n const hostOptions = useMemo(() => {\n return infoData.networkInterfaces.map((nif) => ({\n value: `http://${nif.address}:${infoData.serverPort}`,\n label: `${nif.name} - ${nif.address}`,\n }));\n }, [infoData.networkInterfaces, infoData.serverPort]);\n\n const pathOptions = useMemo(() => {\n if (lockedPath) {\n return [{ value: lockedPath.value, label: lockedPath.label }];\n }\n return [\n { value: OntimeView.Timer, label: 'Timer' },\n { value: OntimeView.Cuesheet, label: 'Cuesheet' },\n { value: OntimeView.Operator, label: 'Operator' },\n { value: '<<companion>>', label: 'Companion' },\n ...urlPresetData.map((preset) => ({\n value: `preset-${preset.alias}`,\n label: `URL Preset: ${preset.alias}`,\n })),\n ];\n }, [lockedPath, urlPresetData]);\n\n return (\n <GenerateLinkForm\n hostOptions={hostOptions}\n pathOptions={pathOptions}\n presets={urlPresetData}\n isLockedToView={Boolean(lockedPath)}\n />\n );\n}\n","import { MouseEvent } from 'react';\nimport { IoBan } from 'react-icons/io5';\n\nimport { cx } from '../../../utils/styleUtils';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface SwatchProps {\n color: string;\n onClick?: (color: string) => void;\n isSelected?: boolean;\n}\n\nexport default function Swatch({ color, isSelected, onClick }: SwatchProps) {\n const handleClick = (event: MouseEvent) => {\n onClick?.(color);\n event.preventDefault();\n event.stopPropagation();\n };\n\n const classes = cx([style.swatch, isSelected && style.selected, onClick && style.selectable]);\n\n if (!color) {\n return (\n <div className={classes} onClick={handleClick}>\n <IoBan />\n </div>\n );\n }\n return <div className={classes} style={{ backgroundColor: `${color}` }} onClick={handleClick} />;\n}\n","import { useCallback } from 'react';\n\nimport Swatch from './Swatch';\nimport SwatchPicker from './SwatchPicker';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface ColourInputProps {\n value: string;\n name: 'colour';\n handleChange: (newValue: 'colour', name: string) => void;\n}\n\nconst colours = [\n '',\n '#FFCC78', // $orange-400\n '#FFAB33', // $orange-600\n '#77C785', // $green-400\n '#339E4E', // $green-600\n '#779BE7', // $blue-400\n '#3E75E8', // $blue-600\n '#FF7878', // $red-400\n '#ED3333', // $red-600\n '#A790F5', // $violet-400\n '#8064E1', // $violet-600\n '#9d9d9d', // $gray-500\n '#ececec', // $gray-100\n];\n\nexport default function SwatchSelect(props: ColourInputProps) {\n const { value, name, handleChange } = props;\n\n const setColour = useCallback(\n (newValue: string) => {\n if (newValue !== value) {\n handleChange(name, newValue);\n }\n },\n [handleChange, name, value],\n );\n\n return (\n <div className={style.list}>\n {colours.map((colour) => (\n <Swatch key={colour} color={colour} onClick={setColour} isSelected={value === colour} />\n ))}\n <SwatchPicker color={value} onChange={setColour} isSelected={!colours.includes(value)} />\n </div>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { IconType } from 'react-icons';\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\n\nimport style from './DropdownMenu.module.scss';\n\ntype DropdownMenuItemDivider = { type: 'divider' };\ntype DropdownMenuItem = {\n type: 'item' | 'destructive';\n label: string;\n description?: string;\n icon?: IconType;\n disabled?: boolean;\n onClick: () => void;\n shortcut?: string;\n};\n\nexport type DropdownMenuOption = DropdownMenuItemDivider | DropdownMenuItem;\n\ninterface DropdownMenuProps extends BaseMenu.Trigger.Props {\n items: DropdownMenuOption[];\n}\n\nexport function DropdownMenu({ items, children, ...triggerProps }: PropsWithChildren<DropdownMenuProps>) {\n return (\n <BaseMenu.Root>\n <BaseMenu.Trigger {...triggerProps}>{children}</BaseMenu.Trigger>\n <BaseMenu.Portal>\n <BaseMenu.Positioner className={style.positioner} align='start' sideOffset={8}>\n <BaseMenu.Popup className={style.popup}>\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return <BaseMenu.Separator key={index} className={style.separator} />;\n }\n return (\n <BaseMenu.Item\n key={index}\n className={style.item}\n onClick={item.onClick}\n disabled={item.disabled}\n data-type={item.type}\n >\n <span className={style.content}>\n <span className={style.label}>\n {item.icon && <item.icon />}\n {item.label}\n </span>\n {item.description && <span className={style.description}>{item.description}</span>}\n </span>\n {item.shortcut && <span className={style.shortcut}>{item.shortcut}</span>}\n </BaseMenu.Item>\n );\n })}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n\ninterface PositionedDropdownMenuProps {\n items: Array<DropdownMenuItemDivider | DropdownMenuItem>;\n isOpen: boolean;\n onClose: () => void;\n position: { x: number; y: number };\n}\n\nexport function PositionedDropdownMenu({ items, isOpen, position, onClose }: PositionedDropdownMenuProps) {\n return (\n <BaseMenu.Root\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) onClose();\n }}\n >\n <BaseMenu.Trigger style={{ position: 'fixed', left: position.x, top: position.y }} aria-hidden />\n <BaseMenu.Portal>\n <BaseMenu.Positioner className={style.positioner} align='start' sideOffset={8} alignOffset={8}>\n <BaseMenu.Popup className={style.popup}>\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return <BaseMenu.Separator key={index} className={style.separator} />;\n }\n return (\n <BaseMenu.Item key={index} className={style.item} onClick={item.onClick} disabled={item.disabled}>\n <span className={style.content}>\n <span className={style.label}>\n {item.icon && <item.icon />}\n {item.label}\n </span>\n {item.description && <span className={style.description}>{item.description}</span>}\n </span>\n {item.shortcut && <span className={style.shortcut}>{item.shortcut}</span>}\n </BaseMenu.Item>\n );\n })}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n","import type { ReactNode } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\n\nimport IconButton from '../buttons/IconButton';\n\nimport style from './Modal.module.scss';\n\ninterface ModalProps {\n isOpen: boolean;\n title?: string;\n showCloseButton?: boolean;\n showBackdrop?: boolean;\n bodyElements: ReactNode;\n footerElements?: ReactNode;\n onClose: () => void;\n}\n\nexport default function Modal({\n isOpen,\n title,\n showCloseButton,\n showBackdrop,\n bodyElements,\n footerElements,\n onClose,\n}: ModalProps) {\n return (\n <BaseDialog.Root\n open={isOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) onClose();\n }}\n disablePointerDismissal\n >\n <BaseDialog.Portal>\n {showBackdrop && <BaseDialog.Backdrop className={style.backdrop} />}\n <BaseDialog.Popup className={style.modal}>\n <div className={style.title}>\n {title}\n {showCloseButton && (\n <IconButton variant='subtle-white' onClick={onClose}>\n <IoClose />\n </IconButton>\n )}\n </div>\n <div className={style.body}>{bodyElements}</div>\n <div className={style.footer}>{footerElements}</div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n","export function isMacOS() {\n const userAgent = navigator.userAgent.toLowerCase();\n return userAgent.includes('macintosh') || userAgent.includes('mac os');\n}\n\nexport const deviceAlt = isMacOS() ? 'Option' : 'Alt';\n\nexport const deviceMod = isMacOS() ? 'Cmd' : 'Ctrl';\n","import { MouseEvent } from 'react';\nimport { EntryId, isOntimeEvent, MaybeNumber, Rundown } from 'ontime-types';\nimport { create } from 'zustand';\n\nimport { RUNDOWN } from '../../common/api/constants';\nimport { ontimeQueryClient } from '../../common/queryClient';\nimport { isMacOS } from '../../common/utils/deviceUtils';\n\nexport type SelectionMode = 'shift' | 'click' | 'ctrl';\n\ninterface EventSelectionStore {\n selectedEvents: Set<EntryId>;\n anchoredIndex: MaybeNumber;\n cursor: EntryId | null;\n entryMode: 'event' | 'single' | null;\n scrollHandler: ((id: EntryId) => void) | null;\n setSingleEntrySelection: (selectionArgs: { id: EntryId }) => void;\n setSelectedEvents: (selectionArgs: { id: EntryId; index: number; selectMode: SelectionMode }) => void;\n clearSelectedEvents: () => void;\n clearMultiSelect: () => void;\n unselect: (id: EntryId) => void;\n setScrollHandler: (handler: ((id: EntryId) => void) | null) => void;\n scrollToEntry: (id: EntryId) => void;\n}\n\n/**\n * Keeps track of the selected entries and selection mode\n * Provides methods to update the selection based on user interactions\n */\nexport const useEventSelection = create<EventSelectionStore>()((set, get) => ({\n selectedEvents: new Set(),\n anchoredIndex: null,\n cursor: null,\n entryMode: null,\n scrollHandler: null,\n setSingleEntrySelection: ({ id }) => {\n set({ selectedEvents: new Set([id]), anchoredIndex: null, cursor: id, entryMode: 'single' });\n },\n setSelectedEvents: ({ id, index, selectMode }) => {\n const { selectedEvents, anchoredIndex, entryMode } = get();\n\n // if we are in single mode, we replace the selection and change the mode\n if (entryMode === 'single') {\n return set({ selectedEvents: new Set([id]), anchoredIndex: index, cursor: id, entryMode: 'event' });\n }\n\n // on click, we replace selection with event\n if (selectMode === 'click') {\n return set({ selectedEvents: new Set([id]), anchoredIndex: index, cursor: id, entryMode: 'event' });\n }\n\n // on ctrl + click, we toggle the selection of that event\n if (selectMode === 'ctrl') {\n const rundownData = ontimeQueryClient.getQueryData<Rundown>(RUNDOWN);\n if (!rundownData) return;\n\n // if it doesnt exist, simply add to the list and set an anchor\n if (!selectedEvents.has(id)) {\n return set({\n selectedEvents: selectedEvents.add(id),\n anchoredIndex: index,\n cursor: id,\n entryMode: 'event',\n });\n }\n\n // if event is already selected, we remove it from selection\n // and set the anchor to the event after\n selectedEvents.delete(id);\n\n const nextIndex = rundownData.order.findIndex(\n (eventId, i) => i > index && isOntimeEvent(rundownData.entries[eventId]) && selectedEvents.has(eventId),\n );\n\n // if we didnt find anything after, set the anchor to the last event\n return set({\n selectedEvents,\n anchoredIndex: nextIndex < 0 ? rundownData.order.length - 1 : nextIndex,\n entryMode: 'event',\n });\n }\n\n // on shift + click, we select a range of events up to the clicked event\n if (selectMode === 'shift') {\n const rundownData = ontimeQueryClient.getQueryData<Rundown>(RUNDOWN);\n if (!rundownData) return;\n\n // get list of rundown with only ontime events\n const eventIds: EntryId[] = [];\n rundownData.flatOrder.forEach((eventId) => {\n const event = rundownData.entries[eventId];\n if (isOntimeEvent(event)) {\n eventIds.push(event.id);\n }\n });\n\n const start = anchoredIndex === null ? 0 : Math.min(anchoredIndex, index);\n const end = anchoredIndex === null ? index : Math.max(anchoredIndex, index + 1);\n\n // create new set with range of ids from start to end\n const selectedEventIds = eventIds.slice(start, end);\n\n return set({\n selectedEvents: new Set([...selectedEvents, ...selectedEventIds]),\n anchoredIndex: index,\n entryMode: 'event',\n });\n }\n },\n clearSelectedEvents: () => set({ selectedEvents: new Set(), anchoredIndex: null, cursor: null, entryMode: null }),\n clearMultiSelect: () => {\n const { selectedEvents } = get();\n const [firstSelected] = selectedEvents;\n set({\n selectedEvents: new Set(firstSelected ? [firstSelected] : []),\n anchoredIndex: null,\n entryMode: null,\n });\n },\n unselect: (id: string) => {\n const { entryMode, selectedEvents } = get();\n selectedEvents.delete(id);\n set({\n selectedEvents,\n entryMode: selectedEvents.size === 0 ? null : entryMode,\n });\n },\n // Sets the scroll handler for programmatic scrolling to entries\n setScrollHandler: (handler) => set({ scrollHandler: handler }),\n // Scrolls to the specified entry using the registered scroll handler\n scrollToEntry: (id: EntryId) => {\n const handler = get().scrollHandler;\n if (handler) {\n handler(id);\n }\n },\n}));\n\nexport function getSelectionMode(event: MouseEvent): SelectionMode {\n if ((isMacOS() && event.metaKey) || event.ctrlKey) {\n return 'ctrl';\n }\n\n if (event.shiftKey) {\n return 'shift';\n }\n\n return 'click';\n}\n"],"names":["automationsPath","apiEntryUrl","getAutomationSettings","options","axios","get","signal","data","editAutomationSettings","automationSettings","post","addTrigger","trigger","editTrigger","id","put","deleteTrigger","delete","addAutomation","automation","editAutomation","deleteAutomation","testOutput","output","automationPlaceholderSettings","enabledAutomations","enabledOscIn","oscPortIn","triggers","automations","useAutomationSettings","status","isFetching","isError","refetch","useQuery","queryKey","AUTOMATION","queryFn","placeholderData","previousData","_previousQuery","refetchInterval","queryRefetchIntervalSlow","isOnlyNumbers","startsWithHttp","isAlphanumeric","isUrlSafe","Tag","className","children","jsx","style","tag","RadioGroup","items","orientation","onValueChange","elementProps","BaseRadioGroup","value","cx","radioGroup","map","item","jsxs","Radio.Root","toString","radio","Radio.Indicator","indicator","label","defaultOptions","hideTableSeconds","hideIndexColumn","showDelayedTimes","hideDelays","usePersistedCuesheetOptions","create","persist","set","setOption","key","state","toggleOption","resetOptions","name","cuesheetDefaultColumns","makeCuesheetCustomColumns","customFields","Object","entries","field","CuesheetLinkOptions","readRef","writeRef","useCustomFields","customFieldColumns","useMemo","readPermissions","setReadPermissions","useState","writePermissions","setWritePermissions","readSwitches","setReadSwitches","initialState","forEach","column","writeSwitches","setWriteSwitches","handleReadModeChange","prevReadSwitches","updatedReadSwitches","keys","handleWriteModeChange","prevWriteSwitches","updatedWriteSwitches","handleSwitchChange","type","getReadPermissions","filter","_","join","getWritePermissions","Panel.Indent","Panel.Field","twoCols","grid","Panel.Description","Fragment","Switch","Boolean","length","GenerateLinkForm","hostOptions","pathOptions","presets","isLockedToView","formState","setFormState","url","setUrl","serverURL","cuesheetReadRef","useRef","cuesheetWriteRef","generatedAlias","generateId","addPreset","useUpdateUrlPreset","handleSubmit","setError","watch","setValue","reset","register","errors","isDirty","useForm","mode","defaultValues","baseUrl","path","OntimeView","Timer","authenticate","lockConfig","lockNav","createPresetFromOptions","alias","read","Error","target","Cuesheet","enabled","search","write","find","preset","onSubmit","urlPreset","current","generateUrl","safeCopyToClipboard","presetPath","startsWith","replace","undefined","keepValues","keepDirty","error","message","maybeAxiosError","canSubmit","event","preventEscape","Info","shareInline","Panel.ListGroup","isOntimeCloud","Panel.ListItem","Select","shouldDirty","Input","required","pattern","checked","Panel.Error","root","Panel.InlineElements","end","Button","Panel.Section","QRCode","qrCode","copiableLink","CopyTag","GenerateLinkFormExport","lockedPath","infoData","useInfo","urlPresetData","useUrlPresets","skip","networkInterfaces","nif","address","serverPort","Operator","Swatch","color","isSelected","onClick","handleClick","preventDefault","stopPropagation","classes","swatch","selected","selectable","backgroundColor","IoBan","colours","SwatchSelect","props","handleChange","setColour","useCallback","newValue","list","colour","SwatchPicker","includes","DropdownMenu","triggerProps","BaseMenu.Root","BaseMenu.Trigger","BaseMenu.Portal","BaseMenu.Positioner","positioner","BaseMenu.Popup","popup","index","BaseMenu.Separator","separator","BaseMenu.Item","disabled","content","icon","description","shortcut","PositionedDropdownMenu","isOpen","position","onClose","open","left","x","top","y","Modal","title","showCloseButton","showBackdrop","bodyElements","footerElements","BaseDialog.Root","BaseDialog.Portal","BaseDialog.Backdrop","backdrop","BaseDialog.Popup","modal","IconButton","IoClose","body","footer","isMacOS","userAgent","navigator","toLowerCase","deviceAlt","deviceMod","useEventSelection","selectedEvents","Set","anchoredIndex","cursor","entryMode","scrollHandler","setSingleEntrySelection","setSelectedEvents","selectMode","rundownData","ontimeQueryClient","getQueryData","RUNDOWN","has","add","nextIndex","order","findIndex","eventId","i","isOntimeEvent","eventIds","flatOrder","push","start","Math","min","max","selectedEventIds","slice","clearSelectedEvents","clearMultiSelect","firstSelected","unselect","size","setScrollHandler","handler","scrollToEntry","getSelectionMode","metaKey","ctrlKey","shiftKey"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{a as n,k as c,O as d,P as l}from"./vendor-CKDP5hij.js";import{ay as f,az as y,aR as o,aH as g}from"./index-2lQ-45a9.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]="1162ea55-dab1-46e1-8922-5422e45894e0",e._sentryDebugIdIdentifier="sentry-dbid-1162ea55-dab1-46e1-8922-5422e45894e0")}catch{}})();const s=`${f}/project`;async function p(e){return(await n.get(s,{signal:e==null?void 0:e.signal,timeout:e==null?void 0:e.timeout})).data}async function m(e){return n.post(s,e)}async function j(e){const t=new FormData;return t.append("image",e),await n.post(`${s}/upload`,t,{timeout:y.longTimeout,headers:{"Content-Type":"multipart/form-data"}})}const D={title:"",description:"",url:"",info:"",logo:null,custom:[]};function w(){const{data:e,status:t,isFetching:a,isError:u,refetch:i}=c({queryKey:o,queryFn:({signal:r})=>p({signal:r}),placeholderData:(r,b)=>r,refetchInterval:g});return{data:e??D,status:t,isFetching:a,isError:u,refetch:i}}function I(){const e=d(),t=l({mutationFn:m,onSuccess:a=>{e.setQueryData(o,a)}});return{updateProjectData:t.mutateAsync,isMutating:t.isPending,isMutatingError:t.isError}}export{I as a,j as b,w as u};
2
- //# sourceMappingURL=useProjectData-DD_BQ9eJ.js.map
1
+ import{a as n,k as c,O as d,P as l}from"./vendor-BKUJ0_Du.js";import{ay as f,az as y,aR as o,aH as g}from"./index-Dm-4OTmY.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]="1162ea55-dab1-46e1-8922-5422e45894e0",e._sentryDebugIdIdentifier="sentry-dbid-1162ea55-dab1-46e1-8922-5422e45894e0")}catch{}})();const s=`${f}/project`;async function p(e){return(await n.get(s,{signal:e==null?void 0:e.signal,timeout:e==null?void 0:e.timeout})).data}async function m(e){return n.post(s,e)}async function j(e){const t=new FormData;return t.append("image",e),await n.post(`${s}/upload`,t,{timeout:y.longTimeout,headers:{"Content-Type":"multipart/form-data"}})}const D={title:"",description:"",url:"",info:"",logo:null,custom:[]};function w(){const{data:e,status:t,isFetching:a,isError:u,refetch:i}=c({queryKey:o,queryFn:({signal:r})=>p({signal:r}),placeholderData:(r,b)=>r,refetchInterval:g});return{data:e??D,status:t,isFetching:a,isError:u,refetch:i}}function I(){const e=d(),t=l({mutationFn:m,onSuccess:a=>{e.setQueryData(o,a)}});return{updateProjectData:t.mutateAsync,isMutating:t.isPending,isMutatingError:t.isError}}export{I as a,j as b,w as u};
2
+ //# sourceMappingURL=useProjectData-C110zIXC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useProjectData-DD_BQ9eJ.js","sources":["../../src/common/api/project.ts","../../src/common/models/ProjectData.ts","../../src/common/hooks-query/useProjectData.ts"],"sourcesContent":["import axios, { AxiosResponse } from 'axios';\nimport { ProjectData, ProjectLogoResponse } from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\nimport type { RequestOptions } from './requestOptions';\nimport { axiosConfig } from './requestTimeouts';\n\nconst projectPath = `${apiEntryUrl}/project`;\n\n/**\n * HTTP request to fetch project data\n */\nexport async function getProjectData(options?: RequestOptions): Promise<ProjectData> {\n const res = await axios.get(projectPath, {\n signal: options?.signal,\n timeout: options?.timeout,\n });\n return res.data;\n}\n\n/**\n * HTTP request to mutate project data\n */\nexport async function postProjectData(data: ProjectData): Promise<AxiosResponse<ProjectData>> {\n return axios.post(projectPath, data);\n}\n\n/**\n * HTTP request to upload a project logo\n */\nexport async function uploadProjectLogo(file: File): Promise<AxiosResponse<ProjectLogoResponse>> {\n const formData = new FormData();\n formData.append('image', file);\n const response = await axios.post(`${projectPath}/upload`, formData, {\n timeout: axiosConfig.longTimeout,\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n\n return response;\n}\n","import { ProjectData } from 'ontime-types';\n\nexport const projectDataPlaceholder: ProjectData = {\n title: '',\n description: '',\n url: '',\n info: '',\n logo: null,\n custom: [],\n};\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { PROJECT_DATA } from '../api/constants';\nimport { getProjectData, postProjectData } from '../api/project';\nimport { projectDataPlaceholder } from '../models/ProjectData';\n\nexport default function useProjectData() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: PROJECT_DATA,\n queryFn: ({ signal }) => getProjectData({ signal }),\n placeholderData: (previousData, _previousQuery) => previousData,\n refetchInterval: queryRefetchIntervalSlow,\n });\n\n return { data: data ?? projectDataPlaceholder, status, isFetching, isError, refetch };\n}\n\nexport function useUpdateProjectData() {\n const queryClient = useQueryClient();\n\n const updateFn = useMutation({\n mutationFn: postProjectData,\n onSuccess: (newProjectData) => {\n queryClient.setQueryData(PROJECT_DATA, newProjectData);\n },\n });\n\n return {\n updateProjectData: updateFn.mutateAsync,\n isMutating: updateFn.isPending,\n isMutatingError: updateFn.isError,\n };\n}\n"],"names":["projectPath","apiEntryUrl","getProjectData","options","axios","get","signal","timeout","data","postProjectData","post","uploadProjectLogo","file","formData","FormData","append","axiosConfig","longTimeout","headers","projectDataPlaceholder","title","description","url","info","logo","custom","useProjectData","status","isFetching","isError","refetch","useQuery","queryKey","PROJECT_DATA","queryFn","placeholderData","previousData","_previousQuery","refetchInterval","queryRefetchIntervalSlow","useUpdateProjectData","queryClient","useQueryClient","updateFn","useMutation","mutationFn","onSuccess","newProjectData","setQueryData","updateProjectData","mutateAsync","isMutating","isPending","isMutatingError"],"mappings":"ydAOA,MAAMA,EAAc,GAAGC,CAAW,WAKlC,eAAsBC,EAAeC,EAAgD,CAKnF,OAJY,MAAMC,EAAMC,IAAIL,EAAa,CACvCM,OAAQH,GAAAA,YAAAA,EAASG,OACjBC,QAASJ,GAAAA,YAAAA,EAASI,OAAAA,CACnB,GACUC,IACb,CAKA,eAAsBC,EAAgBD,EAAwD,CACrFJ,OAAAA,EAAMM,KAAKV,EAAaQ,CAAI,CACrC,CAKA,eAAsBG,EAAkBC,EAAyD,CACzFC,MAAAA,EAAW,IAAIC,SACZC,OAAAA,EAAAA,OAAO,QAASH,CAAI,EACZ,MAAMR,EAAMM,KAAK,GAAGV,CAAW,UAAWa,EAAU,CACnEN,QAASS,EAAYC,YACrBC,QAAS,CACP,eAAgB,qBAAA,CAClB,CACD,CAGH,CCvCO,MAAMC,EAAsC,CACjDC,MAAO,GACPC,YAAa,GACbC,IAAK,GACLC,KAAM,GACNC,KAAM,KACNC,OAAQ,CAAA,CACV,ECFA,SAAwBC,GAAiB,CACjC,KAAA,CAAElB,KAAAA,EAAMmB,OAAAA,EAAQC,WAAAA,EAAYC,QAAAA,EAASC,QAAAA,GAAYC,EAAS,CAC9DC,SAAUC,EACVC,QAASA,CAAC,CAAE5B,OAAAA,KAAaJ,EAAe,CAAEI,OAAAA,CAAAA,CAAQ,EAClD6B,gBAAiBA,CAACC,EAAcC,IAAmBD,EACnDE,gBAAiBC,CAAAA,CAClB,EAEM,MAAA,CAAE/B,KAAMA,GAAQW,EAAwBQ,OAAAA,EAAQC,WAAAA,EAAYC,QAAAA,EAASC,QAAAA,CAAQ,CACtF,CAEO,SAASU,GAAuB,CACrC,MAAMC,EAAcC,EAAe,EAE7BC,EAAWC,EAAY,CAC3BC,WAAYpC,EACZqC,UAA+BC,GAAA,CACjBC,EAAAA,aAAaf,EAAcc,CAAc,CAAA,CACvD,CACD,EAEM,MAAA,CACLE,kBAAmBN,EAASO,YAC5BC,WAAYR,EAASS,UACrBC,gBAAiBV,EAASd,OAC5B,CACF"}
1
+ {"version":3,"file":"useProjectData-C110zIXC.js","sources":["../../src/common/api/project.ts","../../src/common/models/ProjectData.ts","../../src/common/hooks-query/useProjectData.ts"],"sourcesContent":["import axios, { AxiosResponse } from 'axios';\nimport { ProjectData, ProjectLogoResponse } from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\nimport type { RequestOptions } from './requestOptions';\nimport { axiosConfig } from './requestTimeouts';\n\nconst projectPath = `${apiEntryUrl}/project`;\n\n/**\n * HTTP request to fetch project data\n */\nexport async function getProjectData(options?: RequestOptions): Promise<ProjectData> {\n const res = await axios.get(projectPath, {\n signal: options?.signal,\n timeout: options?.timeout,\n });\n return res.data;\n}\n\n/**\n * HTTP request to mutate project data\n */\nexport async function postProjectData(data: ProjectData): Promise<AxiosResponse<ProjectData>> {\n return axios.post(projectPath, data);\n}\n\n/**\n * HTTP request to upload a project logo\n */\nexport async function uploadProjectLogo(file: File): Promise<AxiosResponse<ProjectLogoResponse>> {\n const formData = new FormData();\n formData.append('image', file);\n const response = await axios.post(`${projectPath}/upload`, formData, {\n timeout: axiosConfig.longTimeout,\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n\n return response;\n}\n","import { ProjectData } from 'ontime-types';\n\nexport const projectDataPlaceholder: ProjectData = {\n title: '',\n description: '',\n url: '',\n info: '',\n logo: null,\n custom: [],\n};\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { PROJECT_DATA } from '../api/constants';\nimport { getProjectData, postProjectData } from '../api/project';\nimport { projectDataPlaceholder } from '../models/ProjectData';\n\nexport default function useProjectData() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: PROJECT_DATA,\n queryFn: ({ signal }) => getProjectData({ signal }),\n placeholderData: (previousData, _previousQuery) => previousData,\n refetchInterval: queryRefetchIntervalSlow,\n });\n\n return { data: data ?? projectDataPlaceholder, status, isFetching, isError, refetch };\n}\n\nexport function useUpdateProjectData() {\n const queryClient = useQueryClient();\n\n const updateFn = useMutation({\n mutationFn: postProjectData,\n onSuccess: (newProjectData) => {\n queryClient.setQueryData(PROJECT_DATA, newProjectData);\n },\n });\n\n return {\n updateProjectData: updateFn.mutateAsync,\n isMutating: updateFn.isPending,\n isMutatingError: updateFn.isError,\n };\n}\n"],"names":["projectPath","apiEntryUrl","getProjectData","options","axios","get","signal","timeout","data","postProjectData","post","uploadProjectLogo","file","formData","FormData","append","axiosConfig","longTimeout","headers","projectDataPlaceholder","title","description","url","info","logo","custom","useProjectData","status","isFetching","isError","refetch","useQuery","queryKey","PROJECT_DATA","queryFn","placeholderData","previousData","_previousQuery","refetchInterval","queryRefetchIntervalSlow","useUpdateProjectData","queryClient","useQueryClient","updateFn","useMutation","mutationFn","onSuccess","newProjectData","setQueryData","updateProjectData","mutateAsync","isMutating","isPending","isMutatingError"],"mappings":"ydAOA,MAAMA,EAAc,GAAGC,CAAW,WAKlC,eAAsBC,EAAeC,EAAgD,CAKnF,OAJY,MAAMC,EAAMC,IAAIL,EAAa,CACvCM,OAAQH,GAAAA,YAAAA,EAASG,OACjBC,QAASJ,GAAAA,YAAAA,EAASI,OAAAA,CACnB,GACUC,IACb,CAKA,eAAsBC,EAAgBD,EAAwD,CACrFJ,OAAAA,EAAMM,KAAKV,EAAaQ,CAAI,CACrC,CAKA,eAAsBG,EAAkBC,EAAyD,CACzFC,MAAAA,EAAW,IAAIC,SACZC,OAAAA,EAAAA,OAAO,QAASH,CAAI,EACZ,MAAMR,EAAMM,KAAK,GAAGV,CAAW,UAAWa,EAAU,CACnEN,QAASS,EAAYC,YACrBC,QAAS,CACP,eAAgB,qBAAA,CAClB,CACD,CAGH,CCvCO,MAAMC,EAAsC,CACjDC,MAAO,GACPC,YAAa,GACbC,IAAK,GACLC,KAAM,GACNC,KAAM,KACNC,OAAQ,CAAA,CACV,ECFA,SAAwBC,GAAiB,CACjC,KAAA,CAAElB,KAAAA,EAAMmB,OAAAA,EAAQC,WAAAA,EAAYC,QAAAA,EAASC,QAAAA,GAAYC,EAAS,CAC9DC,SAAUC,EACVC,QAASA,CAAC,CAAE5B,OAAAA,KAAaJ,EAAe,CAAEI,OAAAA,CAAAA,CAAQ,EAClD6B,gBAAiBA,CAACC,EAAcC,IAAmBD,EACnDE,gBAAiBC,CAAAA,CAClB,EAEM,MAAA,CAAE/B,KAAMA,GAAQW,EAAwBQ,OAAAA,EAAQC,WAAAA,EAAYC,QAAAA,EAASC,QAAAA,CAAQ,CACtF,CAEO,SAASU,GAAuB,CACrC,MAAMC,EAAcC,EAAe,EAE7BC,EAAWC,EAAY,CAC3BC,WAAYpC,EACZqC,UAA+BC,GAAA,CACjBC,EAAAA,aAAaf,EAAcc,CAAc,CAAA,CACvD,CACD,EAEM,MAAA,CACLE,kBAAmBN,EAASO,YAC5BC,WAAYR,EAASS,UACrBC,gBAAiBV,EAASd,OAC5B,CACF"}
@@ -1,2 +1,2 @@
1
- import{a as r,k as d}from"./vendor-CKDP5hij.js";import{ay as i,bL as l,bP as n,I as u}from"./index-2lQ-45a9.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new e.Error().stack;a&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[a]="7e0197f6-b639-4a30-8529-d80fea71c42a",e._sentryDebugIdIdentifier="sentry-dbid-7e0197f6-b639-4a30-8529-d80fea71c42a")}catch{}})();const s=`${i}/report`;async function o(e){return(await r.get(s,{signal:e==null?void 0:e.signal})).data}async function b(){await r.delete(`${s}/all`),await l.invalidateQueries({queryKey:n})}function g(){const{data:e,refetch:a}=d({queryKey:n,queryFn:({signal:t})=>o({signal:t}),placeholderData:(t,f)=>t,staleTime:u});return{data:e??{},refetch:a}}export{b as d,g as u};
2
- //# sourceMappingURL=useReport-DozG5uz5.js.map
1
+ import{a as r,k as d}from"./vendor-BKUJ0_Du.js";import{ay as i,bL as l,bP as n,I as u}from"./index-Dm-4OTmY.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new e.Error().stack;a&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[a]="7e0197f6-b639-4a30-8529-d80fea71c42a",e._sentryDebugIdIdentifier="sentry-dbid-7e0197f6-b639-4a30-8529-d80fea71c42a")}catch{}})();const s=`${i}/report`;async function o(e){return(await r.get(s,{signal:e==null?void 0:e.signal})).data}async function b(){await r.delete(`${s}/all`),await l.invalidateQueries({queryKey:n})}function g(){const{data:e,refetch:a}=d({queryKey:n,queryFn:({signal:t})=>o({signal:t}),placeholderData:(t,f)=>t,staleTime:u});return{data:e??{},refetch:a}}export{b as d,g as u};
2
+ //# sourceMappingURL=useReport-DqSBq4MG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useReport-DozG5uz5.js","sources":["../../src/common/api/report.ts","../../src/common/hooks-query/useReport.ts"],"sourcesContent":["import axios from 'axios';\nimport { OntimeReport } from 'ontime-types';\n\nimport { ontimeQueryClient } from '../../common/queryClient';\n\nimport { apiEntryUrl, REPORT } from './constants';\nimport type { RequestOptions } from './requestOptions';\n\nexport const reportUrl = `${apiEntryUrl}/report`;\n\n/**\n * HTTP request to fetch all reports\n */\nexport async function fetchReport(options?: RequestOptions): Promise<OntimeReport> {\n const res = await axios.get(reportUrl, { signal: options?.signal });\n return res.data;\n}\n\nexport async function deleteReport(id: string) {\n await axios.delete(`${reportUrl}/${id}`);\n await ontimeQueryClient.invalidateQueries({ queryKey: REPORT });\n}\n\nexport async function deleteAllReport() {\n await axios.delete(`${reportUrl}/all`);\n await ontimeQueryClient.invalidateQueries({ queryKey: REPORT });\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { OntimeReport } from 'ontime-types';\nimport { MILLIS_PER_HOUR } from 'ontime-utils';\n\nimport { REPORT } from '../api/constants';\nimport { fetchReport } from '../api/report';\n\nexport default function useReport() {\n const { data, refetch } = useQuery<OntimeReport>({\n queryKey: REPORT,\n queryFn: ({ signal }) => fetchReport({ signal }),\n placeholderData: (previousData, _previousQuery) => previousData,\n staleTime: MILLIS_PER_HOUR,\n });\n\n return { data: data ?? {}, refetch };\n}\n"],"names":["reportUrl","apiEntryUrl","fetchReport","options","axios","get","signal","data","deleteAllReport","delete","ontimeQueryClient","invalidateQueries","queryKey","REPORT","useReport","refetch","useQuery","queryFn","placeholderData","previousData","_previousQuery","staleTime","MILLIS_PER_HOUR"],"mappings":"0cAQaA,MAAAA,EAAY,GAAGC,CAAW,UAKvC,eAAsBC,EAAYC,EAAiD,CAEjF,OADY,MAAMC,EAAMC,IAAIL,EAAW,CAAEM,OAAQH,GAAAA,YAAAA,EAASG,MAAAA,CAAQ,GACvDC,IACb,CAOA,eAAsBC,GAAkB,CACtC,MAAMJ,EAAMK,OAAO,GAAGT,CAAS,MAAM,EACrC,MAAMU,EAAkBC,kBAAkB,CAAEC,SAAUC,CAAAA,CAAQ,CAChE,CCnBA,SAAwBC,GAAY,CAC5B,KAAA,CAAEP,KAAAA,EAAMQ,QAAAA,GAAYC,EAAuB,CAC/CJ,SAAUC,EACVI,QAASA,CAAC,CAAEX,OAAAA,KAAaJ,EAAY,CAAEI,OAAAA,CAAAA,CAAQ,EAC/CY,gBAAiBA,CAACC,EAAcC,IAAmBD,EACnDE,UAAWC,CAAAA,CACZ,EAEM,MAAA,CAAEf,KAAMA,GAAQ,CAAC,EAAGQ,QAAAA,CAAQ,CACrC"}
1
+ {"version":3,"file":"useReport-DqSBq4MG.js","sources":["../../src/common/api/report.ts","../../src/common/hooks-query/useReport.ts"],"sourcesContent":["import axios from 'axios';\nimport { OntimeReport } from 'ontime-types';\n\nimport { ontimeQueryClient } from '../../common/queryClient';\n\nimport { apiEntryUrl, REPORT } from './constants';\nimport type { RequestOptions } from './requestOptions';\n\nexport const reportUrl = `${apiEntryUrl}/report`;\n\n/**\n * HTTP request to fetch all reports\n */\nexport async function fetchReport(options?: RequestOptions): Promise<OntimeReport> {\n const res = await axios.get(reportUrl, { signal: options?.signal });\n return res.data;\n}\n\nexport async function deleteReport(id: string) {\n await axios.delete(`${reportUrl}/${id}`);\n await ontimeQueryClient.invalidateQueries({ queryKey: REPORT });\n}\n\nexport async function deleteAllReport() {\n await axios.delete(`${reportUrl}/all`);\n await ontimeQueryClient.invalidateQueries({ queryKey: REPORT });\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { OntimeReport } from 'ontime-types';\nimport { MILLIS_PER_HOUR } from 'ontime-utils';\n\nimport { REPORT } from '../api/constants';\nimport { fetchReport } from '../api/report';\n\nexport default function useReport() {\n const { data, refetch } = useQuery<OntimeReport>({\n queryKey: REPORT,\n queryFn: ({ signal }) => fetchReport({ signal }),\n placeholderData: (previousData, _previousQuery) => previousData,\n staleTime: MILLIS_PER_HOUR,\n });\n\n return { data: data ?? {}, refetch };\n}\n"],"names":["reportUrl","apiEntryUrl","fetchReport","options","axios","get","signal","data","deleteAllReport","delete","ontimeQueryClient","invalidateQueries","queryKey","REPORT","useReport","refetch","useQuery","queryFn","placeholderData","previousData","_previousQuery","staleTime","MILLIS_PER_HOUR"],"mappings":"0cAQaA,MAAAA,EAAY,GAAGC,CAAW,UAKvC,eAAsBC,EAAYC,EAAiD,CAEjF,OADY,MAAMC,EAAMC,IAAIL,EAAW,CAAEM,OAAQH,GAAAA,YAAAA,EAASG,MAAAA,CAAQ,GACvDC,IACb,CAOA,eAAsBC,GAAkB,CACtC,MAAMJ,EAAMK,OAAO,GAAGT,CAAS,MAAM,EACrC,MAAMU,EAAkBC,kBAAkB,CAAEC,SAAUC,CAAAA,CAAQ,CAChE,CCnBA,SAAwBC,GAAY,CAC5B,KAAA,CAAEP,KAAAA,EAAMQ,QAAAA,GAAYC,EAAuB,CAC/CJ,SAAUC,EACVI,QAASA,CAAC,CAAEX,OAAAA,KAAaJ,EAAY,CAAEI,OAAAA,CAAAA,CAAQ,EAC/CY,gBAAiBA,CAACC,EAAcC,IAAmBD,EACnDE,UAAWC,CAAAA,CACZ,EAEM,MAAA,CAAEf,KAAMA,GAAQ,CAAC,EAAGQ,QAAAA,CAAQ,CACrC"}
@@ -1,2 +1,2 @@
1
- import{a as r,k as g,h as c}from"./vendor-CKDP5hij.js";import{s as f,ay as $,o as p,aH as h,aA as E}from"./index-2lQ-45a9.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new t.Error().stack;n&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[n]="39005c73-6142-46a3-acec-2ec7d570c767",t._sentryDebugIdIdentifier="sentry-dbid-39005c73-6142-46a3-acec-2ec7d570c767")}catch{}})();var i=(t=>(t.Event="event",t.Delay="delay",t.Group="group",t.Milestone="milestone",t))(i||{});function m(t){return(t==null?void 0:t.type)===i.Event}function R(t){return!t.skip}function G(t){return(t==null?void 0:t.type)===i.Delay}function I(t){return(t==null?void 0:t.type)===i.Group}function C(t){return(t==null?void 0:t.type)===i.Milestone}function F(t,n){return t in n}function S(t){return t.type==="osc"}function N(t){return t.type==="http"}function W(t){return t.type==="ontime"}function M(t,n){return!(!n||t.dayOffset<=n.dayOffset||n.timeStart+n.duration>f)}function O(t,n){if(!n)return!0;const a=t.timeStart+t.duration+t.dayOffset*f,e=n.timeStart+n.duration+n.dayOffset*f;return a>=e}const s=`${$}/rundowns`;async function j(t){return(await r.get(s,{signal:t==null?void 0:t.signal})).data}async function D(t){const n=await r.get(`${s}/current`,{signal:t==null?void 0:t.signal});if(!a(n.data))throw new Error("Invalid rundown payload");return n.data;function a(e){return e&&typeof e=="object"&&typeof e.id=="string"&&Array.isArray(e.order)&&Array.isArray(e.flatOrder)&&e.entries&&typeof e.entries=="object"&&typeof e.revision=="number"}}async function x(t){return r.post(`${s}/${t}/load`)}async function B(t){return r.post(s,{title:t})}async function _(t){return r.post(`${s}/${t}/duplicate`)}async function H(t,n){return r.patch(`${s}/${t}`,{title:n})}async function K(t){return r.delete(`${s}/${t}`)}async function U(t,n){return r.post(`${s}/${t}/entry`,n)}async function z(t,n){return r.put(`${s}/${t}/entry`,n)}async function Q(t,n){return r.put(`${s}/${t}/batch`,n)}async function V(t,n){return r.patch(`${s}/${t}/reorder`,n)}async function J(t,n,a){return r.patch(`${s}/${t}/swap`,{from:n,to:a})}async function X(t,n){return r.patch(`${s}/${t}/applydelay/${n}`)}async function Y(t,n,a){return r.post(`${s}/${t}/clone/${n}`,a)}async function Z(t,n){return r.post(`${s}/${t}/group`,{ids:n})}async function tt(t,n){return r.post(`${s}/${t}/ungroup/${n}`)}async function nt(t,n){return r.delete(`${s}/${t}/entries`,{data:{ids:n}})}async function et(t){return r.delete(`${s}/${t}/all`)}const v="LAST";function L(t,n){const{metadata:a,process:e}=y(n);let o=a;const u={};for(const d of t.flatOrder){const w=t.entries[d];o=e(w),u[d]=o}return u[v]=o,u}function b(t,n){const{process:a}=y(n),e=[];for(const o of t.flatOrder){const u=t.entries[o],d={...u,...a(u)};e.push(d)}return e}function y(t){let n={previousEvent:null,latestEvent:null,previousEntryId:null,thisId:null,eventIndex:0,isPast:!!t,isNextDay:!1,totalGap:0,isLinkedToLoaded:!1,isLoaded:!1,groupId:null,groupColour:void 0,groupEntries:void 0,isFirstAfterGroup:!1};function a(e){return n=A(n,t,e),n}return{metadata:n,process:a}}function A(t,n,a){var o,u;const e={...t};return e.isNextDay=!1,e.isLoaded=!1,e.previousEntryId=e.thisId,e.thisId=a.id,e.previousEvent=e.latestEvent,a.id===n&&(e.isLoaded=!0,e.isPast=!1,e.isLinkedToLoaded=!0),I(a)?(e.groupId=a.id,e.groupColour=a.colour,e.groupEntries=a.entries.length):(a.parent!==e.groupId&&(e.groupId=a.parent,e.groupEntries=void 0,a.parent===null&&(e.groupColour=void 0)),m(a)&&(e.eventIndex+=1,e.isFirstAfterGroup=!!((o=e.previousEvent)!=null&&o.parent)&&a.parent===null,R(a)&&(e.isNextDay=M(a,e.previousEvent),!e.isPast&&!e.isLoaded&&(e.totalGap+=a.gap,e.isLinkedToLoaded=a.linkStart&&!((u=e.previousEvent)!=null&&u.countToEnd)&&e.isLinkedToLoaded),O(a,e.latestEvent)&&(e.latestEvent=a)))),e}const T={id:"default",title:"",order:[],flatOrder:[],entries:{},revision:-1};function l(){const{data:t,status:n,isError:a,refetch:e,isFetching:o}=g({queryKey:E,queryFn:({signal:u})=>D({signal:u}),refetchInterval:h});return{data:t??T,status:n,isError:a,refetch:e,isFetching:o}}function at(){const{data:t,status:n}=l(),a=p(),e=c.useMemo(()=>L(t,a),[t,a]);return{data:t,status:n,rundownMetadata:e}}function rt(){const{data:t,status:n}=l();return{data:c.useMemo(()=>t.revision===-1?[]:t.flatOrder.map(e=>t.entries[e]).filter(e=>e!==void 0),[t]),rundownId:t.id,status:n}}function k(){const{data:t,status:n}=l(),a=p();return{data:c.useMemo(()=>b(t,a),[t,a]),status:n}}function st(t){const{data:n,status:a}=k();return{data:c.useMemo(()=>n.filter(t),[n,t]),status:a}}function ot(t){const{data:n}=l();return t===null?null:n.entries[t]??null}export{z as A,Q as B,nt as C,et as D,X as E,tt as F,Z as G,V as H,J as I,i as S,k as a,R as b,st as c,rt as d,O as e,S as f,N as g,W as h,m as i,I as j,C as k,B as l,_ as m,K as n,x as o,j as p,F as q,H as r,b as s,at as t,l as u,ot as v,G as w,v as x,U as y,Y as z};
2
- //# sourceMappingURL=useRundown-D6vokFHi.js.map
1
+ import{a as r,k as g,h as c}from"./vendor-BKUJ0_Du.js";import{s as f,ay as $,o as p,aH as h,aA as E}from"./index-Dm-4OTmY.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new t.Error().stack;n&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[n]="39005c73-6142-46a3-acec-2ec7d570c767",t._sentryDebugIdIdentifier="sentry-dbid-39005c73-6142-46a3-acec-2ec7d570c767")}catch{}})();var i=(t=>(t.Event="event",t.Delay="delay",t.Group="group",t.Milestone="milestone",t))(i||{});function m(t){return(t==null?void 0:t.type)===i.Event}function R(t){return!t.skip}function G(t){return(t==null?void 0:t.type)===i.Delay}function I(t){return(t==null?void 0:t.type)===i.Group}function C(t){return(t==null?void 0:t.type)===i.Milestone}function F(t,n){return t in n}function S(t){return t.type==="osc"}function N(t){return t.type==="http"}function W(t){return t.type==="ontime"}function M(t,n){return!(!n||t.dayOffset<=n.dayOffset||n.timeStart+n.duration>f)}function O(t,n){if(!n)return!0;const a=t.timeStart+t.duration+t.dayOffset*f,e=n.timeStart+n.duration+n.dayOffset*f;return a>=e}const s=`${$}/rundowns`;async function j(t){return(await r.get(s,{signal:t==null?void 0:t.signal})).data}async function D(t){const n=await r.get(`${s}/current`,{signal:t==null?void 0:t.signal});if(!a(n.data))throw new Error("Invalid rundown payload");return n.data;function a(e){return e&&typeof e=="object"&&typeof e.id=="string"&&Array.isArray(e.order)&&Array.isArray(e.flatOrder)&&e.entries&&typeof e.entries=="object"&&typeof e.revision=="number"}}async function x(t){return r.post(`${s}/${t}/load`)}async function B(t){return r.post(s,{title:t})}async function _(t){return r.post(`${s}/${t}/duplicate`)}async function H(t,n){return r.patch(`${s}/${t}`,{title:n})}async function K(t){return r.delete(`${s}/${t}`)}async function U(t,n){return r.post(`${s}/${t}/entry`,n)}async function z(t,n){return r.put(`${s}/${t}/entry`,n)}async function Q(t,n){return r.put(`${s}/${t}/batch`,n)}async function V(t,n){return r.patch(`${s}/${t}/reorder`,n)}async function J(t,n,a){return r.patch(`${s}/${t}/swap`,{from:n,to:a})}async function X(t,n){return r.patch(`${s}/${t}/applydelay/${n}`)}async function Y(t,n,a){return r.post(`${s}/${t}/clone/${n}`,a)}async function Z(t,n){return r.post(`${s}/${t}/group`,{ids:n})}async function tt(t,n){return r.post(`${s}/${t}/ungroup/${n}`)}async function nt(t,n){return r.delete(`${s}/${t}/entries`,{data:{ids:n}})}async function et(t){return r.delete(`${s}/${t}/all`)}const v="LAST";function L(t,n){const{metadata:a,process:e}=y(n);let o=a;const u={};for(const d of t.flatOrder){const w=t.entries[d];o=e(w),u[d]=o}return u[v]=o,u}function b(t,n){const{process:a}=y(n),e=[];for(const o of t.flatOrder){const u=t.entries[o],d={...u,...a(u)};e.push(d)}return e}function y(t){let n={previousEvent:null,latestEvent:null,previousEntryId:null,thisId:null,eventIndex:0,isPast:!!t,isNextDay:!1,totalGap:0,isLinkedToLoaded:!1,isLoaded:!1,groupId:null,groupColour:void 0,groupEntries:void 0,isFirstAfterGroup:!1};function a(e){return n=A(n,t,e),n}return{metadata:n,process:a}}function A(t,n,a){var o,u;const e={...t};return e.isNextDay=!1,e.isLoaded=!1,e.previousEntryId=e.thisId,e.thisId=a.id,e.previousEvent=e.latestEvent,a.id===n&&(e.isLoaded=!0,e.isPast=!1,e.isLinkedToLoaded=!0),I(a)?(e.groupId=a.id,e.groupColour=a.colour,e.groupEntries=a.entries.length):(a.parent!==e.groupId&&(e.groupId=a.parent,e.groupEntries=void 0,a.parent===null&&(e.groupColour=void 0)),m(a)&&(e.eventIndex+=1,e.isFirstAfterGroup=!!((o=e.previousEvent)!=null&&o.parent)&&a.parent===null,R(a)&&(e.isNextDay=M(a,e.previousEvent),!e.isPast&&!e.isLoaded&&(e.totalGap+=a.gap,e.isLinkedToLoaded=a.linkStart&&!((u=e.previousEvent)!=null&&u.countToEnd)&&e.isLinkedToLoaded),O(a,e.latestEvent)&&(e.latestEvent=a)))),e}const T={id:"default",title:"",order:[],flatOrder:[],entries:{},revision:-1};function l(){const{data:t,status:n,isError:a,refetch:e,isFetching:o}=g({queryKey:E,queryFn:({signal:u})=>D({signal:u}),refetchInterval:h});return{data:t??T,status:n,isError:a,refetch:e,isFetching:o}}function at(){const{data:t,status:n}=l(),a=p(),e=c.useMemo(()=>L(t,a),[t,a]);return{data:t,status:n,rundownMetadata:e}}function rt(){const{data:t,status:n}=l();return{data:c.useMemo(()=>t.revision===-1?[]:t.flatOrder.map(e=>t.entries[e]).filter(e=>e!==void 0),[t]),rundownId:t.id,status:n}}function k(){const{data:t,status:n}=l(),a=p();return{data:c.useMemo(()=>b(t,a),[t,a]),status:n}}function st(t){const{data:n,status:a}=k();return{data:c.useMemo(()=>n.filter(t),[n,t]),status:a}}function ot(t){const{data:n}=l();return t===null?null:n.entries[t]??null}export{z as A,Q as B,nt as C,et as D,X as E,tt as F,Z as G,V as H,J as I,i as S,k as a,R as b,st as c,rt as d,O as e,S as f,N as g,W as h,m as i,I as j,C as k,B as l,_ as m,K as n,x as o,j as p,F as q,H as r,b as s,at as t,l as u,ot as v,G as w,v as x,U as y,Y as z};
2
+ //# sourceMappingURL=useRundown-DAo6huE4.js.map