@getontime/cli 4.4.1 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/assets/{Backstage-BY9GL_rk.js → Backstage-DQu8ne-1.js} +2 -2
- package/client/assets/Backstage-DQu8ne-1.js.br +0 -0
- package/client/assets/Backstage-DQu8ne-1.js.gz +0 -0
- package/client/assets/{Backstage-BY9GL_rk.js.map → Backstage-DQu8ne-1.js.map} +1 -1
- package/client/assets/{Countdown-CXFgDHND.js → Countdown-COte1yne.js} +2 -2
- package/client/assets/Countdown-COte1yne.js.br +0 -0
- package/client/assets/Countdown-COte1yne.js.gz +0 -0
- package/client/assets/{Countdown-CXFgDHND.js.map → Countdown-COte1yne.js.map} +1 -1
- package/client/assets/CuesheetTable-BQfxAp-I.js +2 -0
- package/client/assets/CuesheetTable-BQfxAp-I.js.br +0 -0
- package/client/assets/CuesheetTable-BQfxAp-I.js.gz +0 -0
- package/client/assets/CuesheetTable-BQfxAp-I.js.map +1 -0
- package/client/assets/CustomTranslationModal-C5mAtBjW.js +2 -0
- package/client/assets/CustomTranslationModal-C5mAtBjW.js.br +0 -0
- package/client/assets/CustomTranslationModal-C5mAtBjW.js.gz +0 -0
- package/client/assets/{CustomTranslationModal-4PVZBtkC.js.map → CustomTranslationModal-C5mAtBjW.js.map} +1 -1
- package/client/assets/{DelayIndicator-DUbpd6DG.js → DelayIndicator-B0cudY9N.js} +2 -2
- package/client/assets/DelayIndicator-B0cudY9N.js.br +0 -0
- package/client/assets/DelayIndicator-B0cudY9N.js.gz +0 -0
- package/client/assets/DelayIndicator-B0cudY9N.js.map +1 -0
- package/client/assets/{EditorFeatureWrapper-CV_zaDoG.js → EditorFeatureWrapper-DpDaCaJ3.js} +2 -2
- package/client/assets/EditorFeatureWrapper-DpDaCaJ3.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-DpDaCaJ3.js.gz +0 -0
- package/client/assets/{EditorFeatureWrapper-CV_zaDoG.js.map → EditorFeatureWrapper-DpDaCaJ3.js.map} +1 -1
- package/client/assets/{EditorUtils-CLBWDP4k.js → EditorUtils-k5KpETPG.js} +2 -2
- package/client/assets/EditorUtils-k5KpETPG.js.br +0 -0
- package/client/assets/EditorUtils-k5KpETPG.js.gz +0 -0
- package/client/assets/{EditorUtils-CLBWDP4k.js.map → EditorUtils-k5KpETPG.js.map} +1 -1
- package/client/assets/EmptyPage-aTb22KTq.js +2 -0
- package/client/assets/EmptyPage-aTb22KTq.js.br +0 -0
- package/client/assets/EmptyPage-aTb22KTq.js.gz +0 -0
- package/client/assets/{EmptyPage-DmpOAg7R.js.map → EmptyPage-aTb22KTq.js.map} +1 -1
- package/client/assets/{FollowButton-CAUWz5Ma.js → FollowButton--Bj9S6jO.js} +2 -2
- package/client/assets/FollowButton--Bj9S6jO.js.br +0 -0
- package/client/assets/FollowButton--Bj9S6jO.js.gz +0 -0
- package/client/assets/{FollowButton-CAUWz5Ma.js.map → FollowButton--Bj9S6jO.js.map} +1 -1
- package/client/assets/MessageControlExport-BN6OfADo.js +3 -0
- package/client/assets/MessageControlExport-BN6OfADo.js.br +0 -0
- package/client/assets/MessageControlExport-BN6OfADo.js.gz +0 -0
- package/client/assets/{MessageControlExport-Dm8IjSr4.js.map → MessageControlExport-BN6OfADo.js.map} +1 -1
- package/client/assets/{MultiPartProgressBar-Fp-sTN2u.js → MultiPartProgressBar-BlLJNQ0D.js} +2 -2
- package/client/assets/MultiPartProgressBar-BlLJNQ0D.js.br +0 -0
- package/client/assets/MultiPartProgressBar-BlLJNQ0D.js.gz +0 -0
- package/client/assets/{MultiPartProgressBar-Fp-sTN2u.js.map → MultiPartProgressBar-BlLJNQ0D.js.map} +1 -1
- package/client/assets/{OperatorExport-CE4ajLPS.js → OperatorExport-CmgIl1lz.js} +2 -2
- package/client/assets/OperatorExport-CmgIl1lz.js.br +0 -0
- package/client/assets/OperatorExport-CmgIl1lz.js.gz +0 -0
- package/client/assets/OperatorExport-CmgIl1lz.js.map +1 -0
- package/client/assets/OverviewWrapper-B4nU68Eq.js +2 -0
- package/client/assets/OverviewWrapper-B4nU68Eq.js.br +0 -0
- package/client/assets/OverviewWrapper-B4nU68Eq.js.gz +0 -0
- package/client/assets/{OverviewWrapper-BNnAIUP1.js.map → OverviewWrapper-B4nU68Eq.js.map} +1 -1
- package/client/assets/OverviewWrapper-fPfl6o_p.css +1 -0
- package/client/assets/OverviewWrapper-fPfl6o_p.css.br +0 -0
- package/client/assets/OverviewWrapper-fPfl6o_p.css.gz +0 -0
- package/client/assets/{PipHost-CbNFsfqp.js → PipHost-BZy7ouDv.js} +2 -2
- package/client/assets/PipHost-BZy7ouDv.js.br +0 -0
- package/client/assets/PipHost-BZy7ouDv.js.gz +0 -0
- package/client/assets/{PipHost-CbNFsfqp.js.map → PipHost-BZy7ouDv.js.map} +1 -1
- package/client/assets/{ProjectInfo-Bf5z4Xsv.js → ProjectInfo-D0X9vdIX.js} +2 -2
- package/client/assets/ProjectInfo-D0X9vdIX.js.br +0 -0
- package/client/assets/ProjectInfo-D0X9vdIX.js.gz +0 -0
- package/client/assets/{ProjectInfo-Bf5z4Xsv.js.map → ProjectInfo-D0X9vdIX.js.map} +1 -1
- package/client/assets/ProtectRoute-DSilyhst.js +2 -0
- package/client/assets/ProtectRoute-DSilyhst.js.br +0 -0
- package/client/assets/ProtectRoute-DSilyhst.js.gz +0 -0
- package/client/assets/{ProtectRoute-CCHzyy0I.js.map → ProtectRoute-DSilyhst.js.map} +1 -1
- package/client/assets/ProtectedCuesheet-DRTfZTZN.js +2 -0
- package/client/assets/ProtectedCuesheet-DRTfZTZN.js.br +0 -0
- package/client/assets/ProtectedCuesheet-DRTfZTZN.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-DRTfZTZN.js.map +1 -0
- package/client/assets/ProtectedEditor-DNOiQqIU.js +3 -0
- package/client/assets/ProtectedEditor-DNOiQqIU.js.br +0 -0
- package/client/assets/ProtectedEditor-DNOiQqIU.js.gz +0 -0
- package/client/assets/ProtectedEditor-DNOiQqIU.js.map +1 -0
- package/client/assets/ProtectedEditor-DyaLP0mG.css +1 -0
- package/client/assets/ProtectedEditor-DyaLP0mG.css.br +0 -0
- package/client/assets/ProtectedEditor-DyaLP0mG.css.gz +0 -0
- package/client/assets/{RundownExport-C_q3KYN_.js → RundownExport-Bvc1J50m.js} +2 -2
- package/client/assets/RundownExport-Bvc1J50m.js.br +0 -0
- package/client/assets/RundownExport-Bvc1J50m.js.gz +0 -0
- package/client/assets/RundownExport-Bvc1J50m.js.map +1 -0
- package/client/assets/{Select-DQwYPDyI.js → Select-CvUrsmYI.js} +2 -2
- package/client/assets/Select-CvUrsmYI.js.br +0 -0
- package/client/assets/Select-CvUrsmYI.js.gz +0 -0
- package/client/assets/{Select-DQwYPDyI.js.map → Select-CvUrsmYI.js.map} +1 -1
- package/client/assets/{Studio-DzXTmBx4.js → Studio-BSSiKd6k.js} +2 -2
- package/client/assets/Studio-BSSiKd6k.js.br +0 -0
- package/client/assets/Studio-BSSiKd6k.js.gz +0 -0
- package/client/assets/{Studio-DzXTmBx4.js.map → Studio-BSSiKd6k.js.map} +1 -1
- package/client/assets/{StyleEditor-ClMEMaWh.js → StyleEditor-buc-zQHR.js} +2 -2
- package/client/assets/StyleEditor-buc-zQHR.js.br +0 -0
- package/client/assets/StyleEditor-buc-zQHR.js.gz +0 -0
- package/client/assets/{StyleEditor-ClMEMaWh.js.map → StyleEditor-buc-zQHR.js.map} +1 -1
- package/client/assets/{SuperscriptPeriod-CBiZU34J.js → SuperscriptPeriod-CSX8zFgq.js} +2 -2
- package/client/assets/SuperscriptPeriod-CSX8zFgq.js.br +0 -0
- package/client/assets/SuperscriptPeriod-CSX8zFgq.js.gz +0 -0
- package/client/assets/{SuperscriptPeriod-CBiZU34J.js.map → SuperscriptPeriod-CSX8zFgq.js.map} +1 -1
- package/client/assets/{SuperscriptTime-DP1CDlOX.js → SuperscriptTime-retbmT5o.js} +2 -2
- package/client/assets/SuperscriptTime-retbmT5o.js.br +0 -0
- package/client/assets/SuperscriptTime-retbmT5o.js.gz +0 -0
- package/client/assets/{SuperscriptTime-DP1CDlOX.js.map → SuperscriptTime-retbmT5o.js.map} +1 -1
- package/client/assets/SwatchPicker-DuWAohyD.js +2 -0
- package/client/assets/SwatchPicker-DuWAohyD.js.br +0 -0
- package/client/assets/SwatchPicker-DuWAohyD.js.gz +0 -0
- package/client/assets/{SwatchPicker-Dyxkxf3_.js.map → SwatchPicker-DuWAohyD.js.map} +1 -1
- package/client/assets/TimeElements-BfxdLkpO.js +2 -0
- package/client/assets/TimeElements-BfxdLkpO.js.br +0 -0
- package/client/assets/TimeElements-BfxdLkpO.js.gz +0 -0
- package/client/assets/{TimeElements-pDYJeFbV.js.map → TimeElements-BfxdLkpO.js.map} +1 -1
- package/client/assets/{TimeInput-DTWDnaum.js → TimeInput-BjOTgjcv.js} +2 -2
- package/client/assets/TimeInput-BjOTgjcv.js.br +0 -0
- package/client/assets/TimeInput-BjOTgjcv.js.gz +0 -0
- package/client/assets/{TimeInput-DTWDnaum.js.map → TimeInput-BjOTgjcv.js.map} +1 -1
- package/client/assets/{TimelinePage-DbLt9rQi.js → TimelinePage-pjff5TxG.js} +2 -2
- package/client/assets/TimelinePage-pjff5TxG.js.br +0 -0
- package/client/assets/TimelinePage-pjff5TxG.js.gz +0 -0
- package/client/assets/TimelinePage-pjff5TxG.js.map +1 -0
- package/client/assets/{Timer-BfyVKQ8U.js → Timer-ahF-O2zN.js} +2 -2
- package/client/assets/Timer-ahF-O2zN.js.br +0 -0
- package/client/assets/Timer-ahF-O2zN.js.gz +0 -0
- package/client/assets/{Timer-BfyVKQ8U.js.map → Timer-ahF-O2zN.js.map} +1 -1
- package/client/assets/TimerControlExport-De2n8HWG.js +2 -0
- package/client/assets/TimerControlExport-De2n8HWG.js.br +0 -0
- package/client/assets/TimerControlExport-De2n8HWG.js.gz +0 -0
- package/client/assets/TimerControlExport-De2n8HWG.js.map +1 -0
- package/client/assets/TimerDisplay-DeFQvmo9.js +2 -0
- package/client/assets/TimerDisplay-DeFQvmo9.js.br +0 -0
- package/client/assets/TimerDisplay-DeFQvmo9.js.gz +0 -0
- package/client/assets/{TimerDisplay-Dgmbqf65.js.map → TimerDisplay-DeFQvmo9.js.map} +1 -1
- package/client/assets/{TitleCard-MUurHeZ7.js → TitleCard-BiaQE4ZK.js} +2 -2
- package/client/assets/TitleCard-BiaQE4ZK.js.br +0 -0
- package/client/assets/TitleCard-BiaQE4ZK.js.gz +0 -0
- package/client/assets/{TitleCard-MUurHeZ7.js.map → TitleCard-BiaQE4ZK.js.map} +1 -1
- package/client/assets/{Tooltip-DXph8P8p.js → Tooltip-C5iPq6NR.js} +2 -2
- package/client/assets/Tooltip-C5iPq6NR.js.br +0 -0
- package/client/assets/Tooltip-C5iPq6NR.js.gz +0 -0
- package/client/assets/{Tooltip-DXph8P8p.js.map → Tooltip-C5iPq6NR.js.map} +1 -1
- package/client/assets/{ViewLogo-Ckp7i75x.js → ViewLogo-DcDhyyIF.js} +2 -2
- package/client/assets/ViewLogo-DcDhyyIF.js.br +0 -0
- package/client/assets/ViewLogo-DcDhyyIF.js.gz +0 -0
- package/client/assets/{ViewLogo-Ckp7i75x.js.map → ViewLogo-DcDhyyIF.js.map} +1 -1
- package/client/assets/{ViewParamsEditor-Cxngd15h.js → ViewParamsEditor-DeMdkxxC.js} +2 -2
- package/client/assets/ViewParamsEditor-DeMdkxxC.js.br +0 -0
- package/client/assets/ViewParamsEditor-DeMdkxxC.js.gz +0 -0
- package/client/assets/{ViewParamsEditor-Cxngd15h.js.map → ViewParamsEditor-DeMdkxxC.js.map} +1 -1
- package/client/assets/{editorSettings-D4jfu68W.js → editorSettings-xk5GwlLv.js} +2 -2
- package/client/assets/editorSettings-xk5GwlLv.js.br +0 -0
- package/client/assets/editorSettings-xk5GwlLv.js.gz +0 -0
- package/client/assets/{editorSettings-D4jfu68W.js.map → editorSettings-xk5GwlLv.js.map} +1 -1
- package/client/assets/{getProgress-B9UANc25.js → getProgress-CWSCZOIN.js} +2 -2
- package/client/assets/getProgress-CWSCZOIN.js.br +0 -0
- package/client/assets/getProgress-CWSCZOIN.js.gz +0 -0
- package/client/assets/{getProgress-B9UANc25.js.map → getProgress-CWSCZOIN.js.map} +1 -1
- package/client/assets/index-3aosT33y.js +3 -0
- package/client/assets/index-3aosT33y.js.br +0 -0
- package/client/assets/index-3aosT33y.js.gz +0 -0
- package/client/assets/index-3aosT33y.js.map +1 -0
- package/client/assets/{offset-DAyBfv5b.js → offset-yVqq_CB1.js} +2 -2
- package/client/assets/offset-yVqq_CB1.js.br +0 -0
- package/client/assets/offset-yVqq_CB1.js.gz +0 -0
- package/client/assets/{offset-DAyBfv5b.js.map → offset-yVqq_CB1.js.map} +1 -1
- package/client/assets/parseUserTime-wAKk9aCJ.js +2 -0
- package/client/assets/parseUserTime-wAKk9aCJ.js.br +0 -0
- package/client/assets/parseUserTime-wAKk9aCJ.js.gz +0 -0
- package/client/assets/{parseUserTime-WkVNjkkE.js.map → parseUserTime-wAKk9aCJ.js.map} +1 -1
- package/client/assets/{playbackstate-znZk3SSJ.js → playbackstate-BZ9WYn2k.js} +2 -2
- package/client/assets/playbackstate-BZ9WYn2k.js.br +0 -0
- package/client/assets/playbackstate-BZ9WYn2k.js.gz +0 -0
- package/client/assets/{playbackstate-znZk3SSJ.js.map → playbackstate-BZ9WYn2k.js.map} +1 -1
- package/client/assets/{presentation.utils-CjjYs5II.js → presentation.utils-lyuuD4A5.js} +2 -2
- package/client/assets/presentation.utils-lyuuD4A5.js.br +0 -0
- package/client/assets/presentation.utils-lyuuD4A5.js.gz +0 -0
- package/client/assets/{presentation.utils-CjjYs5II.js.map → presentation.utils-lyuuD4A5.js.map} +1 -1
- package/client/assets/{rundownUtils-BTQ3EeqN.js → rundownUtils-XX_c4Pcl.js} +2 -2
- package/client/assets/rundownUtils-XX_c4Pcl.js.br +0 -0
- package/client/assets/rundownUtils-XX_c4Pcl.js.gz +0 -0
- package/client/assets/{rundownUtils-BTQ3EeqN.js.map → rundownUtils-XX_c4Pcl.js.map} +1 -1
- package/client/assets/timer.utils-CWHFVz06.js +2 -0
- package/client/assets/timer.utils-CWHFVz06.js.br +0 -0
- package/client/assets/timer.utils-CWHFVz06.js.gz +0 -0
- package/client/assets/{timer.utils-B-Ui91P7.js.map → timer.utils-CWHFVz06.js.map} +1 -1
- package/client/assets/useCustomFields-kBD1jvDA.js +2 -0
- package/client/assets/useCustomFields-kBD1jvDA.js.br +0 -0
- package/client/assets/useCustomFields-kBD1jvDA.js.gz +0 -0
- package/client/assets/{useCustomFields-zr9SUl5o.js.map → useCustomFields-kBD1jvDA.js.map} +1 -1
- package/client/assets/{useEventSelection-B9mbj1cM.js → useEventSelection-Cvdw9all.js} +2 -2
- package/client/assets/useEventSelection-Cvdw9all.js.br +0 -0
- package/client/assets/useEventSelection-Cvdw9all.js.gz +0 -0
- package/client/assets/{useEventSelection-B9mbj1cM.js.map → useEventSelection-Cvdw9all.js.map} +1 -1
- package/client/assets/{useProjectData-DD_BQ9eJ.js → useProjectData-gGT2eczr.js} +2 -2
- package/client/assets/useProjectData-gGT2eczr.js.br +0 -0
- package/client/assets/useProjectData-gGT2eczr.js.gz +0 -0
- package/client/assets/{useProjectData-DD_BQ9eJ.js.map → useProjectData-gGT2eczr.js.map} +1 -1
- package/client/assets/{useReport-DozG5uz5.js → useReport-CG6m_Zb0.js} +2 -2
- package/client/assets/useReport-CG6m_Zb0.js.br +0 -0
- package/client/assets/useReport-CG6m_Zb0.js.gz +0 -0
- package/client/assets/{useReport-DozG5uz5.js.map → useReport-CG6m_Zb0.js.map} +1 -1
- package/client/assets/{useRundown-D6vokFHi.js → useRundown-C6stroSA.js} +2 -2
- package/client/assets/useRundown-C6stroSA.js.br +0 -0
- package/client/assets/useRundown-C6stroSA.js.gz +0 -0
- package/client/assets/useRundown-C6stroSA.js.map +1 -0
- package/client/assets/{useSelectAndRevealEntry-Dd6MpVHe.js → useSelectAndRevealEntry-D79sYFHr.js} +2 -2
- package/client/assets/useSelectAndRevealEntry-D79sYFHr.js.br +0 -0
- package/client/assets/useSelectAndRevealEntry-D79sYFHr.js.gz +0 -0
- package/client/assets/{useSelectAndRevealEntry-Dd6MpVHe.js.map → useSelectAndRevealEntry-D79sYFHr.js.map} +1 -1
- package/client/assets/{useWindowTitle-bg-fLPOk.js → useWindowTitle-CQ8nEeel.js} +2 -2
- package/client/assets/useWindowTitle-CQ8nEeel.js.br +0 -0
- package/client/assets/useWindowTitle-CQ8nEeel.js.gz +0 -0
- package/client/assets/{useWindowTitle-bg-fLPOk.js.map → useWindowTitle-CQ8nEeel.js.map} +1 -1
- package/client/assets/{validateEvent-BUgLWn7x.js → validateEvent-BnwPmDph.js} +2 -2
- package/client/assets/validateEvent-BnwPmDph.js.br +0 -0
- package/client/assets/validateEvent-BnwPmDph.js.gz +0 -0
- package/client/assets/{validateEvent-BUgLWn7x.js.map → validateEvent-BnwPmDph.js.map} +1 -1
- package/client/assets/{vendor-CKDP5hij.js → vendor-Dt3_Fdfs.js} +2 -2
- package/client/assets/vendor-Dt3_Fdfs.js.br +0 -0
- package/client/assets/vendor-Dt3_Fdfs.js.gz +0 -0
- package/client/assets/{vendor-CKDP5hij.js.map → vendor-Dt3_Fdfs.js.map} +1 -1
- package/client/assets/{viewLoader.utils-Bn5zu5sz.js → viewLoader.utils-H7r-zNPP.js} +2 -2
- package/client/assets/viewLoader.utils-H7r-zNPP.js.br +0 -0
- package/client/assets/viewLoader.utils-H7r-zNPP.js.gz +0 -0
- package/client/assets/{viewLoader.utils-Bn5zu5sz.js.map → viewLoader.utils-H7r-zNPP.js.map} +1 -1
- package/client/assets/{viewUtils-DQFwr7hm.js → viewUtils-k0tARVDN.js} +2 -2
- package/client/assets/viewUtils-k0tARVDN.js.br +0 -0
- package/client/assets/viewUtils-k0tARVDN.js.gz +0 -0
- package/client/assets/{viewUtils-DQFwr7hm.js.map → viewUtils-k0tARVDN.js.map} +1 -1
- package/client/index.html +2 -2
- package/package.json +1 -1
- package/server/index.cjs +104 -104
- package/client/assets/Backstage-BY9GL_rk.js.br +0 -0
- package/client/assets/Backstage-BY9GL_rk.js.gz +0 -0
- package/client/assets/Countdown-CXFgDHND.js.br +0 -0
- package/client/assets/Countdown-CXFgDHND.js.gz +0 -0
- package/client/assets/CuesheetTable-BLICUNky.js +0 -2
- package/client/assets/CuesheetTable-BLICUNky.js.br +0 -0
- package/client/assets/CuesheetTable-BLICUNky.js.gz +0 -0
- package/client/assets/CuesheetTable-BLICUNky.js.map +0 -1
- package/client/assets/CustomTranslationModal-4PVZBtkC.js +0 -2
- package/client/assets/CustomTranslationModal-4PVZBtkC.js.br +0 -0
- package/client/assets/CustomTranslationModal-4PVZBtkC.js.gz +0 -0
- package/client/assets/DelayIndicator-DUbpd6DG.js.br +0 -0
- package/client/assets/DelayIndicator-DUbpd6DG.js.gz +0 -0
- package/client/assets/DelayIndicator-DUbpd6DG.js.map +0 -1
- package/client/assets/EditorFeatureWrapper-CV_zaDoG.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-CV_zaDoG.js.gz +0 -0
- package/client/assets/EditorUtils-CLBWDP4k.js.br +0 -0
- package/client/assets/EditorUtils-CLBWDP4k.js.gz +0 -0
- package/client/assets/EmptyPage-DmpOAg7R.js +0 -2
- package/client/assets/EmptyPage-DmpOAg7R.js.br +0 -2
- package/client/assets/EmptyPage-DmpOAg7R.js.gz +0 -0
- package/client/assets/FollowButton-CAUWz5Ma.js.br +0 -0
- package/client/assets/FollowButton-CAUWz5Ma.js.gz +0 -0
- package/client/assets/MessageControlExport-Dm8IjSr4.js +0 -3
- package/client/assets/MessageControlExport-Dm8IjSr4.js.br +0 -0
- package/client/assets/MessageControlExport-Dm8IjSr4.js.gz +0 -0
- package/client/assets/MultiPartProgressBar-Fp-sTN2u.js.br +0 -0
- package/client/assets/MultiPartProgressBar-Fp-sTN2u.js.gz +0 -0
- package/client/assets/OperatorExport-CE4ajLPS.js.br +0 -0
- package/client/assets/OperatorExport-CE4ajLPS.js.gz +0 -0
- package/client/assets/OperatorExport-CE4ajLPS.js.map +0 -1
- package/client/assets/OverviewWrapper-BNnAIUP1.js +0 -2
- package/client/assets/OverviewWrapper-BNnAIUP1.js.br +0 -0
- package/client/assets/OverviewWrapper-BNnAIUP1.js.gz +0 -0
- package/client/assets/OverviewWrapper-DOYzR0Ef.css +0 -1
- package/client/assets/OverviewWrapper-DOYzR0Ef.css.br +0 -0
- package/client/assets/OverviewWrapper-DOYzR0Ef.css.gz +0 -0
- package/client/assets/PipHost-CbNFsfqp.js.br +0 -0
- package/client/assets/PipHost-CbNFsfqp.js.gz +0 -0
- package/client/assets/ProjectInfo-Bf5z4Xsv.js.br +0 -0
- package/client/assets/ProjectInfo-Bf5z4Xsv.js.gz +0 -0
- package/client/assets/ProtectRoute-CCHzyy0I.js +0 -2
- package/client/assets/ProtectRoute-CCHzyy0I.js.br +0 -0
- package/client/assets/ProtectRoute-CCHzyy0I.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-COI1W_V3.js +0 -2
- package/client/assets/ProtectedCuesheet-COI1W_V3.js.br +0 -0
- package/client/assets/ProtectedCuesheet-COI1W_V3.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-COI1W_V3.js.map +0 -1
- package/client/assets/ProtectedEditor-BvTFmv-F.js +0 -3
- package/client/assets/ProtectedEditor-BvTFmv-F.js.br +0 -0
- package/client/assets/ProtectedEditor-BvTFmv-F.js.gz +0 -0
- package/client/assets/ProtectedEditor-BvTFmv-F.js.map +0 -1
- package/client/assets/ProtectedEditor-DID9cfOA.css +0 -1
- package/client/assets/ProtectedEditor-DID9cfOA.css.br +0 -0
- package/client/assets/ProtectedEditor-DID9cfOA.css.gz +0 -0
- package/client/assets/RundownExport-C_q3KYN_.js.br +0 -0
- package/client/assets/RundownExport-C_q3KYN_.js.gz +0 -0
- package/client/assets/RundownExport-C_q3KYN_.js.map +0 -1
- package/client/assets/Select-DQwYPDyI.js.br +0 -0
- package/client/assets/Select-DQwYPDyI.js.gz +0 -0
- package/client/assets/Studio-DzXTmBx4.js.br +0 -0
- package/client/assets/Studio-DzXTmBx4.js.gz +0 -0
- package/client/assets/StyleEditor-ClMEMaWh.js.br +0 -0
- package/client/assets/StyleEditor-ClMEMaWh.js.gz +0 -0
- package/client/assets/SuperscriptPeriod-CBiZU34J.js.br +0 -0
- package/client/assets/SuperscriptPeriod-CBiZU34J.js.gz +0 -0
- package/client/assets/SuperscriptTime-DP1CDlOX.js.br +0 -0
- package/client/assets/SuperscriptTime-DP1CDlOX.js.gz +0 -0
- package/client/assets/SwatchPicker-Dyxkxf3_.js +0 -2
- package/client/assets/SwatchPicker-Dyxkxf3_.js.br +0 -0
- package/client/assets/SwatchPicker-Dyxkxf3_.js.gz +0 -0
- package/client/assets/TimeElements-pDYJeFbV.js +0 -2
- package/client/assets/TimeElements-pDYJeFbV.js.br +0 -0
- package/client/assets/TimeElements-pDYJeFbV.js.gz +0 -0
- package/client/assets/TimeInput-DTWDnaum.js.br +0 -0
- package/client/assets/TimeInput-DTWDnaum.js.gz +0 -0
- package/client/assets/TimelinePage-DbLt9rQi.js.br +0 -0
- package/client/assets/TimelinePage-DbLt9rQi.js.gz +0 -0
- package/client/assets/TimelinePage-DbLt9rQi.js.map +0 -1
- package/client/assets/Timer-BfyVKQ8U.js.br +0 -0
- package/client/assets/Timer-BfyVKQ8U.js.gz +0 -0
- package/client/assets/TimerControlExport-BJfhJc07.js +0 -2
- package/client/assets/TimerControlExport-BJfhJc07.js.br +0 -0
- package/client/assets/TimerControlExport-BJfhJc07.js.gz +0 -0
- package/client/assets/TimerControlExport-BJfhJc07.js.map +0 -1
- package/client/assets/TimerDisplay-Dgmbqf65.js +0 -2
- package/client/assets/TimerDisplay-Dgmbqf65.js.br +0 -0
- package/client/assets/TimerDisplay-Dgmbqf65.js.gz +0 -0
- package/client/assets/TitleCard-MUurHeZ7.js.br +0 -0
- package/client/assets/TitleCard-MUurHeZ7.js.gz +0 -0
- package/client/assets/Tooltip-DXph8P8p.js.br +0 -0
- package/client/assets/Tooltip-DXph8P8p.js.gz +0 -0
- package/client/assets/ViewLogo-Ckp7i75x.js.br +0 -0
- package/client/assets/ViewLogo-Ckp7i75x.js.gz +0 -0
- package/client/assets/ViewParamsEditor-Cxngd15h.js.br +0 -0
- package/client/assets/ViewParamsEditor-Cxngd15h.js.gz +0 -0
- package/client/assets/editorSettings-D4jfu68W.js.br +0 -0
- package/client/assets/editorSettings-D4jfu68W.js.gz +0 -0
- package/client/assets/getProgress-B9UANc25.js.br +0 -0
- package/client/assets/getProgress-B9UANc25.js.gz +0 -0
- package/client/assets/index-2lQ-45a9.js +0 -3
- package/client/assets/index-2lQ-45a9.js.br +0 -0
- package/client/assets/index-2lQ-45a9.js.gz +0 -0
- package/client/assets/index-2lQ-45a9.js.map +0 -1
- package/client/assets/offset-DAyBfv5b.js.br +0 -4
- package/client/assets/offset-DAyBfv5b.js.gz +0 -0
- package/client/assets/parseUserTime-WkVNjkkE.js +0 -2
- package/client/assets/parseUserTime-WkVNjkkE.js.br +0 -0
- package/client/assets/parseUserTime-WkVNjkkE.js.gz +0 -0
- package/client/assets/playbackstate-znZk3SSJ.js.br +0 -0
- package/client/assets/playbackstate-znZk3SSJ.js.gz +0 -0
- package/client/assets/presentation.utils-CjjYs5II.js.br +0 -0
- package/client/assets/presentation.utils-CjjYs5II.js.gz +0 -0
- package/client/assets/rundownUtils-BTQ3EeqN.js.br +0 -0
- package/client/assets/rundownUtils-BTQ3EeqN.js.gz +0 -0
- package/client/assets/timer.utils-B-Ui91P7.js +0 -2
- package/client/assets/timer.utils-B-Ui91P7.js.br +0 -0
- package/client/assets/timer.utils-B-Ui91P7.js.gz +0 -0
- package/client/assets/useCustomFields-zr9SUl5o.js +0 -2
- package/client/assets/useCustomFields-zr9SUl5o.js.br +0 -0
- package/client/assets/useCustomFields-zr9SUl5o.js.gz +0 -0
- package/client/assets/useEventSelection-B9mbj1cM.js.br +0 -0
- package/client/assets/useEventSelection-B9mbj1cM.js.gz +0 -0
- package/client/assets/useProjectData-DD_BQ9eJ.js.br +0 -0
- package/client/assets/useProjectData-DD_BQ9eJ.js.gz +0 -0
- package/client/assets/useReport-DozG5uz5.js.br +0 -0
- package/client/assets/useReport-DozG5uz5.js.gz +0 -0
- package/client/assets/useRundown-D6vokFHi.js.br +0 -0
- package/client/assets/useRundown-D6vokFHi.js.gz +0 -0
- package/client/assets/useRundown-D6vokFHi.js.map +0 -1
- package/client/assets/useSelectAndRevealEntry-Dd6MpVHe.js.br +0 -0
- package/client/assets/useSelectAndRevealEntry-Dd6MpVHe.js.gz +0 -0
- package/client/assets/useWindowTitle-bg-fLPOk.js.br +0 -0
- package/client/assets/useWindowTitle-bg-fLPOk.js.gz +0 -0
- package/client/assets/validateEvent-BUgLWn7x.js.br +0 -0
- package/client/assets/validateEvent-BUgLWn7x.js.gz +0 -0
- package/client/assets/vendor-CKDP5hij.js.br +0 -0
- package/client/assets/vendor-CKDP5hij.js.gz +0 -0
- package/client/assets/viewLoader.utils-Bn5zu5sz.js.br +0 -0
- package/client/assets/viewLoader.utils-Bn5zu5sz.js.gz +0 -0
- package/client/assets/viewUtils-DQFwr7hm.js.br +0 -0
- package/client/assets/viewUtils-DQFwr7hm.js.gz +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,by as y,bT as b,bU as g,bV as w,A as k,bW as v,bX as C,bY as P,bZ as I,b_ as N,b$ as D,c0 as $,bC as S,bD as T,c1 as R,c2 as L,aV as A,c3 as h,c4 as E}from"./vendor-CKDP5hij.js";import{e as l,aD as p}from"./index-2lQ-45a9.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},o=new s.Error().stack;o&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[o]="3cbee6ae-5ecc-44c1-b698-0d6feda46d88",s._sentryDebugIdIdentifier="sentry-dbid-3cbee6ae-5ecc-44c1-b698-0d6feda46d88")}catch{}})();const O="_blink_177b4_1",V="_fourtyfive_177b4_13",W="_infoLabel_177b4_17",z="_info_177b4_17",F="_warning_177b4_37",H="_error_177b4_41",u={blink:O,fourtyfive:V,infoLabel:W,info:z,warning:F,error:H};function ie({className:s,type:o="info",children:c}){return e.jsxs("div",{className:l([u.infoLabel,u[o],s]),children:[o==="info"&&e.jsx(y,{}),o==="warning"&&e.jsx(b,{}),o==="error"&&e.jsx(b,{}),e.jsx("div",{children:c})]})}const U="_checkbox_175d8_17",X="_indicator_175d8_53",d={checkbox:U,indicator:X};function ae(s){return e.jsx(g,{className:d.checkbox,...s,children:e.jsx(w,{className:d.indicator,children:e.jsx(k,{className:d.icon})})})}const Y="_blink_10e6s_1",Z="_fourtyfive_10e6s_13",q="_medium_10e6s_43",B="_large_10e6s_51",G="_thumb_10e6s_59",_={blink:Y,fourtyfive:Z,switch:"_switch_10e6s_17",medium:q,large:B,thumb:G};function le({size:s="medium",...o}){return e.jsx(v,{className:l([_.switch,_[s]]),...o,children:e.jsx(C,{className:_.thumb})})}const J="_popup_1xpg9_17",K="_title_1xpg9_34",f={popup:J,title:K};function M({title:s,className:o,children:c,...n}){return e.jsx(P,{children:e.jsx(I,{sideOffset:8,...n,children:e.jsxs(N,{className:f.popup,children:[s&&e.jsx(D,{className:f.title,children:s}),e.jsx($,{className:o,render:e.jsx("div",{}),children:c})]})})})}const Q="_input_jz3ye_17",ee={input:Q};function x({color:s,onChange:o,children:c}){return e.jsxs(S,{children:[e.jsx(T,{children:c}),e.jsxs(M,{children:[e.jsx(R,{color:s,onChange:o}),e.jsx(L,{color:s,onChange:o,className:ee.input,prefixed:!0})]})]})}const se="_list_1tpdr_17",oe="_swatch_1tpdr_23",ce="_selected_1tpdr_33",ne="_selectable_1tpdr_36",i={list:se,swatch:oe,selected:ce,selectable:ne};function de(s){const{color:o,onChange:c,isSelected:n,alwaysDisplayColor:t}=s,a=A(j=>{c(j)},100),r=t||n?o:"",{color:m}=p(r);return e.jsx(x,{color:r,onChange:a,children:e.jsx("div",{className:l([i.swatch,n&&i.selected,i.selectable]),style:{backgroundColor:r},children:e.jsx(h,{color:m})})})}function _e(s){const{name:o,control:c}=s,{field:{onChange:n,value:t}}=E({control:c,name:o}),a=typeof t=="string"?t:"",{color:r}=p(a);return e.jsx(x,{color:t,onChange:n,children:e.jsx("div",{className:l([i.swatch,i.selectable]),style:{backgroundColor:a},children:e.jsx(h,{color:r})})})}export{ae as C,ie as I,M as P,le as S,_e as a,de as b,i as s};
|
|
2
|
-
//# sourceMappingURL=SwatchPicker-Dyxkxf3_.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,h as P,aO as y,aP as A,aQ as z,aR as V,aS as H,aT as W,aU as q}from"./vendor-CKDP5hij.js";import{m as g,bk as h,A as K,s as j,e as d,K as Q,y as B,v as J,f as $,bl as D,bm as M,k as L,x as k,bn as X,bo as Y,bp as Z,bq as ee,br as U,T as E,bs as te,bt as ae}from"./index-2lQ-45a9.js";import{T as u}from"./Tooltip-DXph8P8p.js";import{v as F}from"./useRundown-D6vokFHi.js";import{a as ne,g as se}from"./offset-DAyBfv5b.js";import{S as f}from"./SuperscriptPeriod-CBiZU34J.js";import{i as O}from"./playbackstate-znZk3SSJ.js";(function(){try{var a=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new a.Error().stack;n&&(a._sentryDebugIds=a._sentryDebugIds||{},a._sentryDebugIds[n]="6d160f26-5e22-40cd-b13d-b28cf022844f",a._sentryDebugIdIdentifier="sentry-dbid-6d160f26-5e22-40cd-b13d-b28cf022844f")}catch{}})();function S(a,n=3,s,l="due"){return a!==null&&a<=0?l:le(a,n,s)}function le(a,n=3,s){return g(a,{fallback:n===3?h:K,direction:s})}function C(a){return a!==null&&a>j?[a%j,Math.floor(a/j)]:[a,0]}const ce="_label_1ahsu_18",re="_clock_1ahsu_23",de="_column_1ahsu_35",ie="_over_1ahsu_47",oe="_under_1ahsu_48",m={label:ce,clock:re,column:de,over:ie,under:oe};function w({label:a,value:n,state:s="active",className:l,testId:r}){return e.jsxs("div",{className:d([m.column,l]),"data-state":s,children:[e.jsx("span",{className:m.label,children:a}),e.jsx("span",{className:m.clock,"data-testid":r,children:n})]})}function me({label:a,state:n="active",className:s,render:l}){return e.jsxs("div",{className:d([m.column,s]),"data-state":n,children:[e.jsx("span",{className:m.label,children:a}),l(m.clock)]})}function ue({state:a,value:n,testId:s}){return e.jsxs("div",{className:m.column,"data-state":a,children:[e.jsxs("div",{className:m.label,children:[e.jsx("span",{className:m.over,children:"Over"}),e.jsx("span",{children:"/"}),e.jsx("span",{className:m.under,children:"Under"})]}),e.jsx("span",{className:m.clock,"data-testid":s,children:n})]})}const xe="_column_1lv0k_17",pe="_row_1lv0k_26",fe="_row2_1lv0k_33",be="_metadataRow_1lv0k_40",je="_labelledElement_1lv0k_47",ve="_icon_1lv0k_53",Te="_label_1lv0k_47",Ne="_time_1lv0k_65",he="_daySpan_1lv0k_72",_e="_muted_1lv0k_87",ye="_labelTitle_1lv0k_91",Ee="_dueTime_1lv0k_100",t={column:xe,row:pe,row2:fe,metadataRow:be,labelledElement:je,icon:ve,label:Te,time:Ne,daySpan:he,muted:_e,labelTitle:ye,dueTime:Ee},Se={format12:"hh:mm:ss a",format24:"HH:mm:ss"};function v(a,n){return a===null?h:n?$(a,Se):g(a,{fallback:h})}function $e({shouldFormat:a}){const{plannedEnd:n,plannedStart:s,actualStart:l}=D(),r=v(s,a),i=v(l,a),[x,c]=P.useMemo(()=>C(n),[n]),o=v(x,a),p=c>0,b=p?`Planned end time (rundown spans over ${c+1} days)`:"Planned end time";return e.jsxs("div",{className:t.column,children:[e.jsxs("div",{className:t.row,children:[e.jsx("span",{className:t.label,children:"Start"}),e.jsx(u,{text:"Planned start time",render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(y,{className:t.icon}),e.jsx(f,{className:d([t.time,s===null&&t.muted]),time:r})]})}),e.jsx(u,{text:"Actual start time",render:e.jsxs("div",{className:t.labelledElement,"data-testid":"actual-start-time",children:[e.jsx(A,{className:t.icon}),e.jsx(f,{className:d([t.time,l===null&&t.muted]),time:i})]})})]}),e.jsxs("div",{className:t.row,children:[e.jsx("span",{className:t.label,children:"End"}),e.jsx(u,{text:b,render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(y,{className:t.icon}),e.jsx(f,{className:d([t.time,n===null&&t.muted]),time:o}),p&&e.jsx("span",{className:d([t.time,t.daySpan]),"data-day-offset":c})]})}),e.jsx(we,{shouldFormat:a})]})]})}function Me({shouldFormat:a}){const{plannedEnd:n,plannedStart:s}=D(),l=v(s,a),[r,i]=P.useMemo(()=>C(n),[n]),x=v(r,a),c=i>0,o=c?`Planned end time (rundown spans over ${i+1} days)`:"Planned end time";return e.jsxs("div",{className:t.column,children:[e.jsxs("div",{className:t.row2,children:[e.jsx("span",{className:t.label,children:"Start"}),e.jsx(u,{text:"Planned start time",render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(y,{className:t.icon}),e.jsx(f,{className:d([t.time,s===null&&t.muted]),time:l})]})})]}),e.jsxs("div",{className:t.row2,children:[e.jsx("span",{className:t.label,children:"End"}),e.jsx(u,{text:o,render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(y,{className:t.icon}),e.jsx(f,{className:d([t.time,n===null&&t.muted]),time:x}),c&&e.jsx("span",{className:d([t.time,t.daySpan]),"data-day-offset":i})]})})]})]})}function we({shouldFormat:a}){const n=Y(),[s,l]=P.useMemo(()=>C(n),[n]),r=v(s,a),i=s!==null&&l>0,x=i?`Expected end time (rundown spans over ${l+1} days)`:"Expected end time";return e.jsx(u,{text:x,render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(z,{className:t.icon}),e.jsx(f,{className:d([t.time,s===null&&t.muted]),time:r}),i&&e.jsx("span",{className:d([t.time,t.daySpan]),"data-day-offset":l})]})})}function Ue(){return e.jsxs("div",{className:t.column,children:[e.jsx(ge,{}),e.jsx(ke,{})]})}function ge(){const{clock:a,mode:n,groupExpectedEnd:s,actualGroupStart:l,currentDay:r,playback:i}=Z(),x=ee(),c=F(x),o=O(i),p=(()=>{if(!o||!c||c.timeStart===null)return null;const N=a+r*j;return n===U.Absolute?c.timeStart+c.duration-N:l+c.duration-N})(),b=S(p,3,E.CountDown),_=s!==null?s-a:null,T=S(_,3,E.CountDown);return e.jsxs("div",{className:t.metadataRow,children:[e.jsx("span",{className:c!=null&&c.title?t.labelTitle:t.label,children:`${(c==null?void 0:c.title)||"Group"} `}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(u,{text:"Time to planned group end",render:e.jsx(V,{className:t.icon})}),e.jsx("span",{className:d([t.time,(!c||!o)&&t.muted,b==="due"&&t.dueTime]),children:b})]}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(u,{text:"Time to expected group end",render:e.jsx(H,{className:t.icon})}),e.jsx("span",{className:d([t.time,!s&&t.muted,T==="due"&&t.dueTime]),children:T})]})]})}function ke(){const{clock:a,mode:n,actualStart:s,plannedStart:l,playback:r,currentDay:i}=te(),{id:x,expectedStart:c}=ae(),o=F(x),p=O(r),b=(()=>{if(!p||!o)return null;const R=o.timeStart+o.dayOffset*j,G=a+i*j;return n===U.Absolute?R-G:R+s-l-G})(),_=S(b,3,E.CountDown),T=c!==null?c-a:null,N=S(T,3,E.CountDown),I=(o==null?void 0:o.title)??null;return e.jsxs("div",{className:t.metadataRow,children:[e.jsx("span",{className:I?t.labelTitle:t.label,children:`${I||"Flag"} `}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(u,{text:"Time to next flag planned start",render:e.jsx(W,{className:t.icon})}),e.jsx("span",{"data-testid":"flag-plannedStart",className:d([t.time,(!o||!p)&&t.muted,_==="due"&&t.dueTime]),children:_})]}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(u,{text:"Time to next flag expected start",render:e.jsx(q,{className:t.icon})}),e.jsx("span",{"data-testid":"flag-expectedStart",className:d([t.time,T===null&&t.muted,N==="due"&&t.dueTime]),children:N})]})]})}function Fe(){const{numEvents:a,selectedEventIndex:n}=M(),s=n!==null?n+1:k,l=a?`${s} of ${a||k}`:k;return e.jsx(w,{label:"Progress",value:l,state:n===null?"muted":"active"})}function Ae(){const{offset:a,playback:n}=X(),s=O(n),l=se(s?a:null),r=ne(s?a:null);return e.jsx(ue,{state:l,value:r,testId:"offset"})}function ze({shouldFormat:a,className:n}){const s=J(),l=a?$(s):g(s);return e.jsx(me,{label:"Time now",className:n,render:r=>e.jsx(f,{className:r,time:l})})}function Ve({className:a}){const n=Q(),s=n.phase===B.Pending,l=s?"Count to start":"Running timer",r=g(s?n.secondaryTimer:n.current,{fallback:h});function i(){return s?"waiting":n.current===null?"muted":"active"}return e.jsx(w,{label:l,value:r,state:i(),className:a})}function He(){const{numEvents:a}=M(),{plannedEnd:n,plannedStart:s}=D(),r=s!==null&&n!==null?L(n-s):h;return e.jsxs(e.Fragment,{children:[e.jsx(w,{label:"Total duration",value:r}),e.jsx(w,{label:"Events",value:String(a)})]})}export{ze as C,Ue as M,Ae as O,He as P,Me as S,Ve as T,$e as a,Fe as b,le as f};
|
|
2
|
-
//# sourceMappingURL=TimeElements-pDYJeFbV.js.map
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimelinePage-DbLt9rQi.js","sources":["../../../../packages/utils/src/date-utils/getTimeFrom.ts","../../src/common/hooks/useHorizontalFollowComponent.ts","../../src/views/timeline/timeline.options.ts","../../src/views/timeline/timeline.utils.ts","../../src/views/timeline/timeline-markers/TimelineMarkers.tsx","../../src/views/timeline/TimelineEntry.tsx","../../src/views/timeline/Timeline.tsx","../../src/views/timeline/timeline-section/TimelineSection.tsx","../../src/views/timeline/TimelineSections.tsx","../../src/views/timeline/useTimelineData.ts","../../src/views/timeline/TimelinePage.tsx"],"sourcesContent":["import type { OntimeEvent } from 'ontime-types';\n\nimport { dayInMs } from './conversionUtils.js';\n\n/**\n * Utility returns the gap from a previous given event\n */\nexport function getTimeFrom(\n current: Pick<OntimeEvent, 'timeStart' | 'dayOffset'>,\n previous: Pick<OntimeEvent, 'timeStart' | 'duration' | 'dayOffset'> | null,\n): number {\n // there is no previous event\n if (!previous) {\n return 0;\n }\n\n const normalisedCurrentStart = current.timeStart + current.dayOffset * dayInMs;\n const normalisedPreviousEnd = previous.timeStart + previous.duration + previous.dayOffset * dayInMs;\n\n // event is linked to previous\n if (normalisedCurrentStart === normalisedPreviousEnd) {\n return 0;\n }\n\n // event has a gap from previous\n if (normalisedCurrentStart > normalisedPreviousEnd) {\n // time from previous is difference between start and previous end\n return normalisedCurrentStart - normalisedPreviousEnd;\n }\n\n // event overlaps with previous\n return normalisedCurrentStart - normalisedPreviousEnd;\n}\n","import { RefObject, useCallback, useEffect } from 'react';\nimport { EntryId } from 'ontime-types';\n\nfunction scrollToComponent<ComponentRef extends HTMLElement, ScrollRef extends HTMLElement>(\n componentRef: RefObject<ComponentRef> | null,\n scrollRef: RefObject<ScrollRef>,\n leftOffset: number,\n) {\n if (!scrollRef.current) {\n return;\n }\n\n if (!componentRef?.current) {\n // If no target component, scroll to start\n scrollRef.current.scrollTo({ left: 0, behavior: 'smooth' });\n return;\n }\n\n const componentRect = componentRef.current.getBoundingClientRect();\n const scrollRect = scrollRef.current.getBoundingClientRect();\n const left = componentRect.left - scrollRect.left + scrollRef.current.scrollLeft - leftOffset;\n\n scrollRef.current.scrollTo({ left, behavior: 'smooth' });\n}\n\ninterface UseHorizontalFollowComponentOptions {\n followRef: RefObject<HTMLElement | null>;\n scrollRef: RefObject<HTMLElement | null>;\n doFollow: boolean;\n selectedEventId: EntryId | null;\n leftOffset?: number;\n setScrollFlag?: (newValue: boolean) => void;\n}\n\n/**\n * This is a copy of useFollowComponent, but for horizontal scrolling\n * Designed with the timeline component in mind\n */\nexport default function useHorizontalFollowComponent({\n followRef,\n scrollRef,\n doFollow,\n selectedEventId,\n leftOffset = 0,\n setScrollFlag,\n}: UseHorizontalFollowComponentOptions) {\n useEffect(() => {\n if (!doFollow || !scrollRef.current) {\n return;\n }\n\n setScrollFlag?.(true);\n // Use requestAnimationFrame to ensure the component is fully loaded\n window.requestAnimationFrame(() => {\n scrollToComponent(\n selectedEventId !== null ? (followRef as RefObject<HTMLElement>) : null,\n scrollRef as RefObject<HTMLElement>,\n leftOffset,\n );\n setScrollFlag?.(false);\n });\n }, [followRef, scrollRef, doFollow, leftOffset, setScrollFlag, selectedEventId]);\n\n const scrollToRefComponent = useCallback(\n (componentRef = followRef, containerRef = scrollRef, offset = leftOffset) => {\n if (containerRef.current) {\n scrollToComponent(\n selectedEventId !== null ? (componentRef as RefObject<HTMLElement>) : null,\n containerRef as RefObject<HTMLElement>,\n offset,\n );\n }\n },\n [followRef, scrollRef, leftOffset, selectedEventId],\n );\n\n return scrollToRefComponent;\n}\n","import { use, useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\nimport { CustomFields, OntimeEvent } from 'ontime-types';\n\nimport { getTimeOption } from '../../common/components/view-params-editor/common.options';\nimport { OptionTitle } from '../../common/components/view-params-editor/constants';\nimport { ViewOption } from '../../common/components/view-params-editor/viewParams.types';\nimport { makeOptionsFromCustomFields } from '../../common/components/view-params-editor/viewParams.utils';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport { isStringBoolean } from '../common/viewUtils';\n\nexport const getTimelineOptions = (timeFormat: string, customFields: CustomFields): ViewOption[] => {\n const mainOptions = makeOptionsFromCustomFields(customFields, [{ value: 'title', label: 'Title' }]);\n\n return [\n { title: OptionTitle.ClockOptions, collapsible: true, options: [getTimeOption(timeFormat)] },\n {\n title: OptionTitle.DataSources,\n collapsible: true,\n options: [\n {\n id: 'main',\n title: 'Main text',\n description: 'Select the data source for the main text',\n type: 'option',\n values: mainOptions,\n defaultValue: 'title',\n },\n ],\n },\n {\n title: OptionTitle.ElementVisibility,\n collapsible: true,\n options: [\n {\n id: 'hidePast',\n title: 'Hide Past Events',\n description: 'Whether to hide events that have passed',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'fixedSize',\n title: 'Fixed timeline size',\n description: 'Timeline will have a fixed size to prevent scrolling',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n ];\n};\n\ntype TimelineOptions = {\n mainSource: keyof OntimeEvent | null;\n hidePast: boolean;\n fixedSize: boolean;\n};\n\n/**\n * Utility extract the view options from URL Params\n * the names and fallback are manually matched with timerOptions\n */\nfunction getOptionsFromParams(searchParams: URLSearchParams, defaultValues?: URLSearchParams): TimelineOptions {\n // Helper to get value from either source, prioritizing defaultValues\n const getValue = (key: string) => defaultValues?.get(key) ?? searchParams.get(key);\n\n return {\n mainSource: getValue('main') as keyof OntimeEvent | null,\n hidePast: isStringBoolean(getValue('hidePast')),\n fixedSize: isStringBoolean(getValue('fixedSize')),\n };\n}\n\n/**\n * Hook exposes the timeline view options\n */\nexport function useTimelineOptions(): TimelineOptions {\n const [searchParams] = useSearchParams();\n const maybePreset = use(PresetContext);\n\n const options = useMemo(() => {\n const defaultValues = maybePreset ? new URLSearchParams(maybePreset.search) : undefined;\n return getOptionsFromParams(searchParams, defaultValues);\n }, [maybePreset, searchParams]);\n\n return options;\n}\n","import { useMemo } from 'react';\nimport { isOntimeEvent, isPlayableEvent, MaybeString, OntimeEntry, OntimeEvent, PlayableEvent } from 'ontime-types';\nimport {\n dayInMs,\n getEventWithId,\n getFirstEvent,\n getNextEvent,\n getTimeFrom,\n isNewLatest,\n MILLIS_PER_HOUR,\n MILLIS_PER_MINUTE,\n} from 'ontime-utils';\n\nimport { ExtendedEntry } from '../../common/utils/rundownMetadata';\nimport { formatDuration } from '../../common/utils/time';\n\nimport { useTimelineOptions } from './timeline.options';\nimport type { ProgressStatus } from './TimelineEntry';\n\ntype CSSPosition = {\n left: number;\n width: number;\n};\n\n/**\n * Calculates the base position and width of an element based on schedule\n * The scaling of these values (if needed) is handled by calculateTimelineLayout\n */\nexport function getElementPosition(\n scheduleStart: number,\n scheduleEnd: number,\n eventStart: number,\n eventDuration: number,\n containerWidth: number,\n): CSSPosition {\n const normalEnd = scheduleEnd < scheduleStart ? scheduleEnd + dayInMs : scheduleEnd;\n const totalDuration = normalEnd - scheduleStart;\n\n // Calculate proportional width and position\n const width = (eventDuration * containerWidth) / totalDuration;\n const left = ((eventStart - scheduleStart) * containerWidth) / totalDuration;\n\n return { left, width };\n}\n\n/**\n * Gets rounded down hour for a given time\n */\nexport function getStartHour(startTime: number): number {\n const hours = Math.floor(startTime / MILLIS_PER_HOUR);\n return hours;\n}\n\n/**\n * Gets rounded up hour for a given time\n */\nexport function getEndHour(endTime: number): number {\n const hours = Math.ceil(endTime / MILLIS_PER_HOUR);\n return hours;\n}\n\n/**\n * converts a time span into an array of hours\n */\nexport function makeTimelineSections(firstHour: number, lastHour: number) {\n const timelineSections = [];\n for (let i = firstHour; i < lastHour; i++) {\n timelineSections.push(i);\n }\n return timelineSections;\n}\n\n/**\n * Returns a formatted label for a progress status\n */\nexport function getStatusLabel(timeToStart: number, status: ProgressStatus): string {\n if (status === 'done' || status === 'live') {\n return status;\n }\n\n if (timeToStart <= 0) {\n return 'pending';\n }\n\n return formatDuration(timeToStart, timeToStart > MILLIS_PER_MINUTE * 10);\n}\n\ninterface ScopedRundownData {\n scopedRundown: ExtendedEntry<PlayableEvent>[];\n firstStart: number;\n totalDuration: number;\n}\n\nexport function useScopedRundown(\n rundown: ExtendedEntry<OntimeEntry>[],\n selectedEventId: MaybeString,\n): ScopedRundownData {\n const { hidePast } = useTimelineOptions();\n\n const data = useMemo(() => {\n if (rundown.length === 0) {\n return { scopedRundown: [], firstStart: 0, totalDuration: 0 };\n }\n\n const scopedRundown: ExtendedEntry<PlayableEvent>[] = [];\n let selectedIndex = selectedEventId ? Infinity : -1;\n let firstStart = null;\n let totalDuration = 0;\n let lastEntry: ExtendedEntry<PlayableEvent> | null = null;\n\n for (let i = 0; i < rundown.length; i++) {\n const currentEntry = rundown[i];\n // we only deal with playableEvents\n if (isOntimeEvent(currentEntry) && isPlayableEvent(currentEntry)) {\n if (currentEntry.id === selectedEventId) {\n selectedIndex = i;\n }\n\n // maybe filter past\n if (hidePast && i < selectedIndex) {\n continue;\n }\n\n // add to scopedRundown\n scopedRundown.push(currentEntry);\n\n /**\n * Derive timers\n * This logic is partially from rundownCache.generate\n * With the addition of deriving the current day offset\n */\n if (firstStart === null) {\n firstStart = currentEntry.timeStart;\n }\n\n const timeFromPrevious: number = getTimeFrom(currentEntry, lastEntry);\n\n if (timeFromPrevious === 0) {\n totalDuration += currentEntry.duration;\n } else if (timeFromPrevious > 0) {\n totalDuration += timeFromPrevious + currentEntry.duration;\n } else if (timeFromPrevious < 0) {\n totalDuration += Math.max(currentEntry.duration + timeFromPrevious, 0);\n }\n if (isNewLatest(currentEntry, lastEntry)) {\n lastEntry = currentEntry;\n }\n }\n }\n\n return { scopedRundown, firstStart: firstStart ?? 0, totalDuration };\n }, [hidePast, rundown, selectedEventId]);\n\n return data;\n}\n\ntype UpcomingEvents = {\n now: ExtendedEntry<OntimeEvent> | null;\n next: ExtendedEntry<OntimeEvent> | null;\n followedBy: ExtendedEntry<OntimeEvent> | null;\n};\n\n/**\n * Returns upcoming events from current: now, next and followedBy\n */\nexport function getUpcomingEvents(events: ExtendedEntry<PlayableEvent>[], selectedId: MaybeString): UpcomingEvents {\n if (events.length === 0) {\n return { now: null, next: null, followedBy: null };\n }\n\n let now = selectedId ? (getEventWithId(events, selectedId) as ExtendedEntry<OntimeEvent>) : null;\n if (!isOntimeEvent(now)) {\n now = null;\n }\n\n const next = now\n ? (getNextEvent(events, now.id)?.nextEvent as ExtendedEntry<OntimeEvent> | null)\n : (getFirstEvent(events).firstEvent as ExtendedEntry<OntimeEvent> | null);\n const followedBy = next ? (getNextEvent(events, next.id)?.nextEvent as ExtendedEntry<OntimeEvent> | null) : null;\n\n // Return the titles, handling nulls appropriately\n return {\n now,\n next,\n followedBy,\n };\n}\n\n/**\n * Utility function calculates time to start\n */\nexport function getTimeToStart(now: number, start: number, delay: number, offset: number): number {\n return start + delay - now + offset;\n}\n\ninterface TimelineLayout {\n positions: CSSPosition[];\n scale: number;\n totalWidth: number;\n}\n\n/**\n * Calculates positions for all events and applies scaling if needed\n */\nexport function calculateTimelineLayout(\n events: Array<{ start: number; duration: number }>,\n scheduleStart: number,\n scheduleEnd: number,\n containerWidth: number,\n canScroll: boolean,\n minWidth = 100,\n): TimelineLayout {\n // Calculate positions and track minimum width\n let smallestWidth = Infinity;\n const positions = events.map(({ start, duration }) => {\n const position = getElementPosition(scheduleStart, scheduleEnd, start, duration, containerWidth);\n smallestWidth = Math.min(smallestWidth, position.width);\n return position;\n });\n\n if (!canScroll) {\n return {\n positions: positions,\n scale: 1,\n totalWidth: containerWidth,\n };\n }\n\n // Determine if scaling is needed\n const scale = smallestWidth < minWidth ? minWidth / smallestWidth : 1;\n\n // If no scaling is needed, return base positions\n if (scale === 1) {\n return {\n positions,\n scale: 1,\n totalWidth: containerWidth,\n };\n }\n\n // Apply scale to all positions\n const scaledPositions = positions.map((pos) => ({\n left: pos.left * scale,\n width: pos.width * scale,\n }));\n\n return {\n positions: scaledPositions,\n scale,\n totalWidth: containerWidth * scale,\n };\n}\n","import { makeTimelineSections } from '../timeline.utils';\n\nimport style from './TimelineMarkers.module.scss';\n\ninterface TimelineMarkersProps {\n startHour: number;\n endHour: number;\n}\n\n/** Creates a line for every hour in the timeline */\nexport default function TimelineMarkers(props: TimelineMarkersProps) {\n const { startHour, endHour } = props;\n\n const elements = makeTimelineSections(startHour, endHour);\n\n return (\n <div className={style.markers}>\n {elements.map((tag) => (\n <span key={tag} />\n ))}\n </div>\n );\n}\n","import { RefObject } from 'react';\n\nimport { useExpectedStartData, useTimer } from '../../common/hooks/useSocket';\nimport { getProgress } from '../../common/utils/getProgress';\nimport { alpha, cx } from '../../common/utils/styleUtils';\nimport { formatDuration, formatTime, getExpectedTimesFromExtendedEvent } from '../../common/utils/time';\nimport { useTranslation } from '../../translation/TranslationProvider';\n\nimport { getStatusLabel } from './timeline.utils';\n\nimport style from './Timeline.module.scss';\n\nexport type ProgressStatus = 'done' | 'live' | 'future';\n\ninterface TimelineEntryProps {\n colour: string;\n delay: number;\n duration: number;\n hasLink: boolean;\n left: number;\n status: ProgressStatus;\n start: number;\n dayOffset: number;\n totalGap: number;\n isLinkedToLoaded: boolean;\n title: string;\n width: number;\n cue: string;\n ref?: RefObject<HTMLDivElement | null>;\n}\n\nconst formatOptions = {\n format12: 'h:mm a',\n format24: 'HH:mm',\n};\n\nexport function TimelineEntry({\n colour,\n delay,\n duration,\n hasLink,\n left,\n status,\n start,\n dayOffset,\n totalGap,\n isLinkedToLoaded,\n title,\n width,\n cue,\n ref,\n}: TimelineEntryProps) {\n const formattedStartTime = formatTime(start, formatOptions);\n const formattedDuration = formatDuration(duration);\n const delayedStart = start + delay;\n const hasDelay = delay > 0;\n\n const lighterColour = alpha(colour, 0.7);\n const showTitle = width > 25;\n const smallArea = width < 40;\n\n return (\n <div\n ref={ref}\n className={cx([style.column, smallArea && style.smallArea])}\n style={{\n '--color': colour,\n '--lighter': lighterColour ?? '',\n left: `${left}px`,\n width: `${width}px`,\n }}\n data-testid={cue}\n >\n {status === 'live' ? <ActiveBlock /> : <div data-status={status} className={style.timelineBlock} />}\n <div\n className={cx([style.content, width < 20 && style.hide, !hasLink && style.separeLeft])}\n data-status={status}\n style={{\n '--color': colour,\n }}\n >\n <div className={style.maybeInline}>\n <div className={cx([hasDelay && style.cross])}>{formattedStartTime}</div>\n {hasDelay && <div className={style.delay}>{formatTime(delayedStart, formatOptions)}</div>}\n {smallArea && (\n <TimelineEntryStatus\n delay={delay}\n start={start}\n dayOffset={dayOffset}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n status={status}\n />\n )}\n </div>\n {showTitle && (\n <>\n {!smallArea && (\n <TimelineEntryStatus\n delay={delay}\n start={start}\n dayOffset={dayOffset}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n status={status}\n />\n )}\n <div>{title}</div>\n </>\n )}\n </div>\n <div className={style.timeOverview} data-status={status}>\n {status !== 'done' && <div className={style.duration}>{formattedDuration}</div>}\n </div>\n </div>\n );\n}\n\ninterface TimelineEntryStatusProps {\n delay: number;\n start: number;\n dayOffset: number;\n totalGap: number;\n isLinkedToLoaded: boolean;\n status: ProgressStatus;\n}\n\n// extract component to isolate re-renders provoked by the clock changes\nfunction TimelineEntryStatus({\n delay,\n start,\n dayOffset,\n totalGap,\n isLinkedToLoaded,\n status,\n}: TimelineEntryStatusProps) {\n const state = useExpectedStartData();\n\n const { getLocalizedString } = useTranslation();\n\n const { timeToStart } = getExpectedTimesFromExtendedEvent(\n { timeStart: start, delay, dayOffset, totalGap, isLinkedToLoaded, countToEnd: false, duration: 0 },\n state,\n );\n\n let statusText = getStatusLabel(timeToStart, status);\n if (statusText === 'live') {\n statusText = getLocalizedString('timeline.live');\n } else if (statusText === 'pending') {\n statusText = getLocalizedString('timeline.due');\n }\n\n const isDue = status === 'future' && timeToStart <= 0;\n\n return <div className={cx([style.status, isDue && style.due])}>{statusText}</div>;\n}\n\n/** Generates a block level progress bar */\nfunction ActiveBlock() {\n const { current, duration } = useTimer();\n const progress = getProgress(current, duration);\n return <div data-status='live' className={style.timelineBlock} style={{ '--progress': `${progress}%` }} />;\n}\n","import { memo, useMemo, useRef } from 'react';\nimport { useViewportSize } from '@mantine/hooks';\nimport { isOntimeEvent, isPlayableEvent, OntimeEntry, PlayableEvent } from 'ontime-types';\nimport { dayInMs, getLastEvent, MILLIS_PER_HOUR } from 'ontime-utils';\n\nimport useHorizontalFollowComponent from '../../common/hooks/useHorizontalFollowComponent';\nimport { ExtendedEntry } from '../../common/utils/rundownMetadata';\nimport { cx } from '../../common/utils/styleUtils';\nimport { getPropertyValue } from '../common/viewUtils';\n\nimport TimelineMarkers from './timeline-markers/TimelineMarkers';\nimport { useTimelineOptions } from './timeline.options';\nimport { calculateTimelineLayout, getEndHour, getStartHour } from './timeline.utils';\nimport { ProgressStatus, TimelineEntry } from './TimelineEntry';\n\nimport style from './Timeline.module.scss';\n\ninterface TimelineProps {\n firstStart: number;\n rundown: ExtendedEntry<OntimeEntry>[];\n selectedEventId: string | null;\n totalDuration: number;\n}\n\nexport default memo(Timeline);\nfunction Timeline({ firstStart, rundown, selectedEventId, totalDuration }: TimelineProps) {\n const { width: screenWidth } = useViewportSize();\n const { mainSource, hidePast, fixedSize } = useTimelineOptions();\n const selectedRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n const { lastEvent } = getLastEvent(rundown);\n const startHour = getStartHour(firstStart);\n const endHour = getEndHour(firstStart + totalDuration + (lastEvent?.delay ?? 0));\n const scheduleStart = startHour * MILLIS_PER_HOUR;\n const scheduleEnd = endHour * MILLIS_PER_HOUR;\n\n // use horizontal follow when scroll is enabled\n useHorizontalFollowComponent({\n followRef: selectedRef,\n scrollRef: scrollContainerRef,\n doFollow: !fixedSize,\n selectedEventId: selectedEventId,\n // No offset when hiding past events to ensure content starts at 0\n leftOffset: hidePast ? 0 : screenWidth / 6,\n });\n\n const { positions, totalWidth } = useMemo(() => {\n const playableEvents = rundown\n .filter((event): event is ExtendedEntry<PlayableEvent> => isOntimeEvent(event) && isPlayableEvent(event))\n .map((event) => ({\n start: event.timeStart + (event.dayOffset ?? 0) * dayInMs + (event.delay ?? 0),\n duration: event.duration,\n }));\n\n return calculateTimelineLayout(playableEvents, scheduleStart, scheduleEnd, screenWidth, !fixedSize);\n }, [rundown, scheduleStart, scheduleEnd, screenWidth, fixedSize]);\n\n if (totalDuration === 0) {\n return null;\n }\n\n // Pre-calculate event statuses\n let currentStatus: ProgressStatus = selectedEventId ? 'done' : 'future';\n const statusMap: Record<string, ProgressStatus> = {};\n rundown.forEach((event) => {\n if (isOntimeEvent(event) && isPlayableEvent(event)) {\n if (currentStatus === 'live') {\n currentStatus = 'future';\n }\n if (event.id === selectedEventId) {\n currentStatus = 'live';\n }\n statusMap[event.id] = currentStatus;\n }\n });\n\n return (\n <div ref={scrollContainerRef} className={cx([style.timelineContainer, !fixedSize && style.scroll])}>\n <div className={style.timeline} style={{ width: totalWidth }}>\n <TimelineMarkers startHour={startHour} endHour={endHour} />\n {rundown.map((event, index) => {\n if (!isOntimeEvent(event) || !isPlayableEvent(event)) {\n return null;\n }\n\n const position = positions[index];\n if (!position) return null;\n\n const displayTitle = getPropertyValue(event, mainSource ?? 'title') || event.title;\n\n return (\n <TimelineEntry\n key={event.id}\n ref={event.id === selectedEventId ? selectedRef : undefined}\n colour={event.colour}\n delay={event.delay ?? 0}\n duration={event.duration}\n hasLink={Boolean(event.linkStart)}\n left={position.left}\n status={statusMap[event.id]}\n start={event.timeStart + (event.dayOffset ?? 0) * dayInMs}\n totalGap={event.totalGap}\n isLinkedToLoaded={event.isLinkedToLoaded}\n dayOffset={event.dayOffset}\n title={displayTitle}\n cue={event.cue}\n width={position.width}\n />\n );\n })}\n </div>\n </div>\n );\n}\n","import { memo } from 'react';\nimport { MaybeString } from 'ontime-types';\n\nimport { cx } from '../../../common/utils/styleUtils';\n\ninterface SectionProps {\n category: 'now' | 'next' | 'followedBy';\n content: MaybeString;\n title: string;\n status?: string;\n}\n\nexport default memo(TimelineSection);\n\nfunction TimelineSection({ category, content, title, status }: SectionProps) {\n const sectionClasses = cx(['section', category === 'now' && 'section--now']);\n const contentClasses = cx(['section-content', content ? `section-content--${category}` : 'section-content--subdue']);\n return (\n <div className={sectionClasses} data-testid={category}>\n <div className='section-title'>\n <span className='section-title__label'>{title}</span>\n {status && <span className='section-title__status'>{status}</span>}\n </div>\n <div className={contentClasses}>{content ?? '-'}</div>\n </div>\n );\n}\n","import { OntimeEvent } from 'ontime-types';\nimport { MILLIS_PER_MINUTE } from 'ontime-utils';\n\nimport { useExpectedStartData } from '../../common/hooks/useSocket';\nimport { ExtendedEntry } from '../../common/utils/rundownMetadata';\nimport { formatDuration, getExpectedTimesFromExtendedEvent } from '../../common/utils/time';\nimport { useTranslation } from '../../translation/TranslationProvider';\nimport { getPropertyValue } from '../common/viewUtils';\n\nimport TimelineSection from './timeline-section/TimelineSection';\n\ninterface TimelineSectionsProps {\n now: ExtendedEntry<OntimeEvent> | null;\n next: ExtendedEntry<OntimeEvent> | null;\n followedBy: ExtendedEntry<OntimeEvent> | null;\n mainSource: keyof OntimeEvent | null;\n}\n\nexport default function TimelineSections({ now, next, followedBy, mainSource }: TimelineSectionsProps) {\n const { getLocalizedString } = useTranslation();\n const state = useExpectedStartData();\n\n // gather card data\n const titleNow = getPropertyValue(now, mainSource ?? 'title') ?? '-';\n const dueText = getLocalizedString('timeline.due').toUpperCase();\n const nextText = getPropertyValue(next, mainSource ?? 'title') ?? '-';\n const followedByText = getPropertyValue(followedBy, mainSource ?? 'title') ?? '-';\n let nextStatus: string | undefined;\n let followedByStatus: string | undefined;\n\n if (next !== null) {\n const { timeToStart } = getExpectedTimesFromExtendedEvent(next, state);\n if (timeToStart <= 0) {\n nextStatus = dueText;\n } else {\n nextStatus = formatDuration(timeToStart, timeToStart > MILLIS_PER_MINUTE * 10);\n }\n }\n\n if (followedBy !== null) {\n const { timeToStart } = getExpectedTimesFromExtendedEvent(followedBy, state);\n if (timeToStart <= 0) {\n followedByStatus = dueText;\n } else {\n followedByStatus = formatDuration(timeToStart, timeToStart > MILLIS_PER_MINUTE * 10);\n }\n }\n\n return (\n <div className='title-grid'>\n <TimelineSection title={getLocalizedString('timeline.live')} content={titleNow} category='now' />\n <TimelineSection\n title={getLocalizedString('common.next')}\n status={nextStatus}\n content={nextText}\n category='next'\n />\n <TimelineSection\n title={getLocalizedString('timeline.followedby')}\n status={followedByStatus}\n content={followedByText}\n category='followedBy'\n />\n </div>\n );\n}\n","import { CustomFields, OntimeEntry, ProjectData, Settings } from 'ontime-types';\n\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport { useFlatRundownWithMetadata } from '../../common/hooks-query/useRundown';\nimport useSettings from '../../common/hooks-query/useSettings';\nimport { ExtendedEntry } from '../../common/utils/rundownMetadata';\nimport { aggregateQueryStatus, ViewData } from '../utils/viewLoader.utils';\n\nexport interface TimelineData {\n events: ExtendedEntry<OntimeEntry>[];\n customFields: CustomFields;\n projectData: ProjectData;\n settings: Settings;\n}\n\nexport function useTimelineData(): ViewData<TimelineData> {\n // HTTP API data\n const { data: rundownData, status: rundownStatus } = useFlatRundownWithMetadata();\n const { data: projectData, status: projectDataStatus } = useProjectData();\n const { data: settings, status: settingsStatus } = useSettings();\n const { data: customFields, status: customFieldsStatus } = useCustomFields();\n\n return {\n data: {\n events: rundownData,\n customFields,\n projectData,\n settings,\n },\n status: aggregateQueryStatus([rundownStatus, projectDataStatus, settingsStatus, customFieldsStatus]),\n };\n}\n","import { useMemo } from 'react';\nimport { OntimeView } from 'ontime-types';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport ViewLogo from '../../common/components/view-logo/ViewLogo';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport { useClock, useSelectedEventId } from '../../common/hooks/useSocket';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { formatTime, getDefaultFormat } from '../../common/utils/time';\nimport { useTranslation } from '../../translation/TranslationProvider';\nimport Loader from '../common/loader/Loader';\nimport SuperscriptTime from '../common/superscript-time/SuperscriptTime';\n\nimport Timeline from './Timeline';\nimport { getTimelineOptions, useTimelineOptions } from './timeline.options';\nimport { getUpcomingEvents, useScopedRundown } from './timeline.utils';\nimport TimelineSections from './TimelineSections';\nimport { TimelineData, useTimelineData } from './useTimelineData';\n\nimport './TimelinePage.scss';\n\nexport default function TimelinePageLoader() {\n const { data, status } = useTimelineData();\n\n useWindowTitle('Timeline');\n\n if (status === 'pending') {\n return <Loader />;\n }\n\n if (status === 'error') {\n return <EmptyPage text='There was an error fetching data, please refresh the page.' />;\n }\n\n return <TimelinePage {...data} />;\n}\n\nfunction TimelinePage({ events, customFields, projectData, settings }: TimelineData) {\n const selectedEventId = useSelectedEventId();\n const { mainSource } = useTimelineOptions();\n // holds copy of the rundown with only relevant events\n const { scopedRundown, firstStart, totalDuration } = useScopedRundown(events, selectedEventId);\n\n // gather card options\n const { now, next, followedBy } = useMemo(() => {\n return getUpcomingEvents(scopedRundown, selectedEventId);\n }, [scopedRundown, selectedEventId]);\n\n // populate options\n const defaultFormat = getDefaultFormat(settings?.timeFormat);\n const progressOptions = useMemo(() => getTimelineOptions(defaultFormat, customFields), [defaultFormat, customFields]);\n\n return (\n <div className='timeline' data-testid='timeline-view'>\n <ViewParamsEditor target={OntimeView.Timeline} viewOptions={progressOptions} />\n <div className='project-header'>\n {projectData?.logo && <ViewLogo name={projectData.logo} className='logo' />}\n <div className='title'>{projectData.title}</div>\n <TimelineClock />\n </div>\n\n <TimelineSections now={now} next={next} followedBy={followedBy} mainSource={mainSource} />\n\n <Timeline\n firstStart={firstStart}\n rundown={scopedRundown}\n selectedEventId={selectedEventId}\n totalDuration={totalDuration}\n />\n </div>\n );\n}\n\nfunction TimelineClock() {\n const { getLocalizedString } = useTranslation();\n const clock = useClock();\n\n // gather timer data\n const formattedClock = formatTime(clock);\n\n return (\n <div className='clock-container'>\n <div className='label'>{getLocalizedString('common.time_now')}</div>\n <SuperscriptTime time={formattedClock} className='time' />\n </div>\n );\n}\n"],"names":["getTimeFrom","current","previous","normalisedCurrentStart","timeStart","dayOffset","dayInMs","normalisedPreviousEnd","duration","scrollToComponent","componentRef","scrollRef","leftOffset","scrollTo","left","behavior","componentRect","getBoundingClientRect","scrollRect","scrollLeft","useHorizontalFollowComponent","followRef","doFollow","selectedEventId","setScrollFlag","useEffect","window","requestAnimationFrame","useCallback","containerRef","offset","getTimelineOptions","timeFormat","customFields","mainOptions","makeOptionsFromCustomFields","value","label","title","OptionTitle","ClockOptions","collapsible","options","getTimeOption","DataSources","id","description","type","values","defaultValue","ElementVisibility","getOptionsFromParams","searchParams","defaultValues","getValue","key","get","mainSource","hidePast","isStringBoolean","fixedSize","useTimelineOptions","useSearchParams","maybePreset","use","PresetContext","useMemo","URLSearchParams","search","undefined","getElementPosition","scheduleStart","scheduleEnd","eventStart","eventDuration","containerWidth","totalDuration","width","getStartHour","startTime","hours","Math","floor","MILLIS_PER_HOUR","getEndHour","endTime","ceil","makeTimelineSections","firstHour","lastHour","timelineSections","i","push","getStatusLabel","timeToStart","status","formatDuration","MILLIS_PER_MINUTE","useScopedRundown","rundown","data","length","scopedRundown","firstStart","selectedIndex","Infinity","lastEntry","currentEntry","isOntimeEvent","isPlayableEvent","timeFromPrevious","max","isNewLatest","getUpcomingEvents","events","selectedId","now","next","followedBy","getEventWithId","getNextEvent","nextEvent","getFirstEvent","firstEvent","calculateTimelineLayout","canScroll","minWidth","smallestWidth","positions","map","start","position","min","scale","totalWidth","pos","TimelineMarkers","props","startHour","endHour","elements","jsx","style","markers","tag","formatOptions","format12","format24","TimelineEntry","colour","delay","hasLink","totalGap","isLinkedToLoaded","cue","ref","formattedStartTime","formatTime","formattedDuration","delayedStart","hasDelay","lighterColour","alpha","showTitle","smallArea","jsxs","cx","column","ActiveBlock","timelineBlock","content","hide","separeLeft","maybeInline","cross","TimelineEntryStatus","Fragment","timeOverview","state","useExpectedStartData","getLocalizedString","useTranslation","getExpectedTimesFromExtendedEvent","countToEnd","statusText","isDue","due","useTimer","progress","getProgress","memo","Timeline","screenWidth","useViewportSize","selectedRef","useRef","scrollContainerRef","lastEvent","getLastEvent","playableEvents","filter","event","currentStatus","statusMap","forEach","timelineContainer","scroll","timeline","index","displayTitle","getPropertyValue","Boolean","linkStart","TimelineSection","category","sectionClasses","contentClasses","TimelineSections","titleNow","dueText","toUpperCase","nextText","followedByText","nextStatus","followedByStatus","useTimelineData","rundownData","rundownStatus","useFlatRundownWithMetadata","projectData","projectDataStatus","useProjectData","settings","settingsStatus","useSettings","customFieldsStatus","useCustomFields","aggregateQueryStatus","TimelinePageLoader","useWindowTitle","Loader","EmptyPage","TimelinePage","useSelectedEventId","defaultFormat","getDefaultFormat","progressOptions","ViewParamsEditor","OntimeView","logo","ViewLogo","TimelineClock","clock","useClock","formattedClock","SuperscriptTime"],"mappings":"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"}
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{ay as M,j as t,aB as U,T as O,av as X,y as F,aA as I,aD as P,aC as A,c5 as H,az as G,bf as V,h as z}from"./vendor-CKDP5hij.js";import{P as K,C as W}from"./EditorUtils-CLBWDP4k.js";import{h as c,I as J,b2 as u,b0 as Q,b3 as k,b4 as h,b5 as v,b1 as Y,m as g,K as Z,y as C,k as T,s as tt,a$ as at,ax as st,bA as et,be as nt,bB as it}from"./index-2lQ-45a9.js";import{P as ot}from"./ProtectRoute-CCHzyy0I.js";import{T as S,A as lt}from"./TimeInput-DTWDnaum.js";import{T as i,g as rt,a as ct}from"./TimerDisplay-Dgmbqf65.js";import{p as R}from"./parseUserTime-WkVNjkkE.js";import{T as N}from"./Tooltip-DXph8P8p.js";import{u as dt}from"./useReport-DozG5uz5.js";(function(){try{var a=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new a.Error().stack;s&&(a._sentryDebugIds=a._sentryDebugIds||{},a._sentryDebugIds[s]="9687f8a4-2fac-4667-932b-52812007a83a",a._sentryDebugIdIdentifier="sentry-dbid-9687f8a4-2fac-4667-932b-52812007a83a")}catch{}})();const mt="_addTime_18oax_17",ut="_addButtons_18oax_24",xt="_tallButtons_18oax_30",b={addTime:mt,addButtons:ut,tallButtons:xt};function pt(a){const{playback:s}=a,[e,n]=M({key:"add-time",defaultValue:3e5}),l=(x,j)=>{const y=R(j);n(Math.min(y,J))},r=x=>{x==="add"?u.addTime(e):u.addTime(-1*e)},m=!(s===c.Play||s===c.Pause)||e===0;return t.jsxs("div",{className:b.addTime,children:[t.jsx(S,{name:"addtime",submitHandler:l,time:e,placeholder:"Add time"}),t.jsxs("div",{className:b.addButtons,children:[t.jsx(i,{onClick:()=>r("remove"),disabled:m,className:b.tallButtons,children:t.jsx(U,{})}),t.jsx(i,{onClick:()=>r("add"),disabled:m,className:b.tallButtons,children:t.jsx(O,{})})]})]})}const ht="_label_tat6w_17",_t="_controls_tat6w_24",bt="_input_tat6w_28",jt="_twoSides_tat6w_34",yt="_fakeInput_tat6w_42",_={label:ht,controls:_t,input:bt,twoSides:jt,fakeInput:yt};function f({index:a}){const{playback:s,direction:e}=Q(a),{stop:n,setDirection:l}=v,r=()=>{const x=e===h.CountDown?h.CountUp:h.CountDown;l(a,x)},d=s!==k.Stop,m=s===k.Start?"pause":"play";return t.jsxs("label",{className:_.label,children:["Aux Timer ",a,t.jsxs("div",{className:_.controls,children:[t.jsxs("div",{className:_.input,children:[t.jsx(ft,{index:a,isActive:d}),t.jsxs(i,{onClick:r,aspect:"tight",disabled:d,children:[e===h.CountDown&&t.jsx(X,{"data-testid":`aux-timer-direction-${a}`}),e===h.CountUp&&t.jsx(F,{"data-testid":`aux-timer-direction-${a}`})]})]}),t.jsxs("div",{className:_.twoSides,children:[t.jsx(gt,{index:a,action:m}),t.jsx(i,{onClick:()=>n(a),theme:c.Stop,disabled:!d,children:t.jsx(I,{"data-testid":`aux-timer-stop-${a}`})})]})]})]})}function ft({index:a,isActive:s}){const e=Y(a),{setDuration:n}=v,l=(r,d)=>{const m=R(d);n(a,m)};return s?t.jsx("div",{className:_.fakeInput,"data-testid":`time-label-aux${a}`,children:g(e)}):t.jsx(S,{submitHandler:l,name:`aux${a}`,time:e,placeholder:`Aux ${a}`})}function gt({index:a,action:s}){const{start:e,pause:n}=v;return s==="play"?t.jsx(i,{onClick:()=>e(a),theme:c.Play,children:t.jsx(P,{"data-testid":`aux-timer-start-${a}`})}):t.jsx(i,{onClick:()=>n(a),theme:c.Pause,children:t.jsx(A,{"data-testid":`aux-timer-pause-${a}`})})}const vt="_buttonContainer_1mqxq_17",kt="_go_1mqxq_25",Ct="_playbackContainer_1mqxq_30",Tt="_transportContainer_1mqxq_37",Nt="_extra_1mqxq_44",wt="_invertX_1mqxq_51",p={buttonContainer:vt,go:kt,playbackContainer:Ct,transportContainer:Tt,extra:Nt,invertX:wt};function It({playback:a,numEvents:s,selectedEventIndex:e,timerPhase:n}){const{isPlaying:l,isPaused:r,isRolling:d,disableGo:m,disableNext:x,disablePrev:j,disableStart:y,disablePause:q,disableRoll:D,disableStop:B,disableReload:$,goAction:E,goLabel:L}=rt({playback:a,numEvents:s,selectedEventIndex:e,timerPhase:n});return t.jsxs("div",{className:p.buttonContainer,children:[t.jsx(i,{disabled:m,onClick:E,aspect:"fill",className:p.go,children:L}),t.jsxs("div",{className:p.playbackContainer,children:[t.jsx(i,{onClick:u.start,disabled:y,theme:c.Play,active:l,children:t.jsx(P,{})}),t.jsx(i,{onClick:u.pause,disabled:q,theme:c.Pause,active:r,children:t.jsx(A,{})})]}),t.jsxs("div",{className:p.transportContainer,children:[t.jsx(i,{onClick:u.previous,disabled:j,children:t.jsx(H,{})}),t.jsx(i,{onClick:u.next,disabled:x,children:t.jsx(G,{})})]}),t.jsxs("div",{className:p.extra,children:[t.jsx(i,{onClick:u.roll,disabled:D,theme:c.Roll,active:d,children:"Roll"}),t.jsx(i,{onClick:u.reload,disabled:$,children:t.jsx(V,{className:p.invertX})}),t.jsx(i,{onClick:u.stop,disabled:B,theme:c.Stop,children:t.jsx(I,{})})]})]})}const Pt="_timeContainer_1ihqw_17",At="_indicators_1ihqw_32",St="_indicatorRoll_1ihqw_41",Rt="_indicatorDelay_1ihqw_42",qt="_indicatorNegative_1ihqw_43",Dt="_status_1ihqw_72",Bt="_tag_1ihqw_79",$t="_time_1ihqw_17",Et="_rolltag_1ihqw_91",o={timeContainer:Pt,indicators:At,indicatorRoll:St,indicatorDelay:Rt,indicatorNegative:qt,status:Dt,tag:Bt,time:$t,rolltag:Et};function Lt(a){return a>0?`Added ${T(a,!1)}`:a<0?`Removed ${T(Math.abs(a),!1)}`:""}function Mt({children:a}){const s=Z(),e=s.playback===c.Roll,n=s.phase===C.Pending,l=s.phase===C.Overtime,r=!!s.addedTime,d=e?"Roll mode active":"",m=Lt(s.addedTime);return t.jsxs("div",{className:o.timeContainer,children:[t.jsxs("div",{className:o.indicators,children:[t.jsx(N,{text:d,render:t.jsx("div",{}),className:o.indicatorRoll,"data-active":e}),t.jsx("div",{className:o.indicatorNegative,"data-active":l}),t.jsx(N,{text:m,render:t.jsx("div",{}),className:o.indicatorDelay,"data-active":r})]}),t.jsx(ct,{time:n?s.secondaryTimer:s.current,phase:s.phase}),t.jsx("div",{className:o.status,children:n?t.jsx("span",{className:o.rolltag,children:"Roll: Countdown to start"}):t.jsx(Ut,{startedAt:s.startedAt,expectedFinish:s.expectedFinish,playback:s.playback})}),a]})}function Ut({startedAt:a,expectedFinish:s,playback:e}){if(e===c.Stop)return t.jsx(Ot,{});const n=g(a),l=s!==null?s%tt:null,r=g(l);return t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:o.start,children:[t.jsx("span",{className:o.tag,children:"Started at"}),t.jsx("span",{className:o.time,children:n})]}),t.jsxs("span",{className:o.finish,children:[t.jsx("span",{className:o.tag,children:"Expect end"}),t.jsx("span",{className:o.time,children:r})]})]})}function Ot(){const{data:a}=dt();return Object.keys(a).length>0?t.jsx(lt,{search:"settings=sharing__report",children:"Go to report management"}):null}const Xt="_mainContainer_1qlxm_17",Ft="_auxTimers_1qlxm_22",w={mainContainer:Xt,auxTimers:Ft};function Ht(){const a=at();return t.jsxs("div",{className:w.mainContainer,children:[t.jsx(Mt,{children:t.jsx(pt,{playback:a.playback})}),t.jsx(It,{playback:a.playback,numEvents:a.numEvents,selectedEventIndex:a.selectedEventIndex,timerPhase:a.timerPhase}),t.jsxs("div",{className:w.auxTimers,children:[t.jsx(f,{index:1}),t.jsx(f,{index:2}),t.jsx(f,{index:3})]})]})}const Gt="_content_hnvy8_17",Vt={content:Gt},ea=z.memo(zt);function zt(){const a=window.location.pathname.includes("/timercontrol");return t.jsx(ot,{permission:"editor",children:t.jsxs(K,{"data-testid":"panel-timer-control",children:[!a&&t.jsx(W,{onClick:s=>st("timercontrol",s)}),a&&t.jsx(et,{suppressSettings:!0,isNavigationLocked:nt()}),t.jsx("div",{className:Vt.content,children:t.jsx(it,{children:t.jsx(Ht,{})})})]})})}export{ea as default};
|
|
2
|
-
//# sourceMappingURL=TimerControlExport-BJfhJc07.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimerControlExport-BJfhJc07.js","sources":["../../src/features/control/playback/add-time/AddTime.tsx","../../src/features/control/playback/aux-timer/AuxTimer.tsx","../../src/features/control/playback/playback-buttons/PlaybackButtons.tsx","../../src/features/control/playback/playback-timer/PlaybackTimer.tsx","../../src/features/control/playback/PlaybackControl.tsx","../../src/features/control/playback/TimerControlExport.tsx"],"sourcesContent":["import { IoAdd, IoRemove } from 'react-icons/io5';\nimport { useLocalStorage } from '@mantine/hooks';\nimport { Playback } from 'ontime-types';\nimport { MILLIS_PER_HOUR, parseUserTime } from 'ontime-utils';\n\nimport TimeInput from '../../../../common/components/input/time-input/TimeInput';\nimport { setPlayback } from '../../../../common/hooks/useSocket';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './AddTime.module.scss';\n\ninterface AddTimeProps {\n playback: Playback;\n}\n\nexport default function AddTime(props: AddTimeProps) {\n const { playback } = props;\n const [timeInMs, setTime] = useLocalStorage({ key: 'add-time', defaultValue: 300_000 }); // 5 minutes\n\n const handleTimeChange = (_field: string, value: string) => {\n const newTimeInMs = parseUserTime(value);\n // cap add time to 1 hour\n setTime(Math.min(newTimeInMs, MILLIS_PER_HOUR));\n };\n\n const handleAddTime = (direction: 'add' | 'remove') => {\n // API expects input in milliseconds\n if (direction === 'add') {\n setPlayback.addTime(timeInMs);\n } else {\n setPlayback.addTime(-1 * timeInMs);\n }\n };\n\n const canAddTime = playback === Playback.Play || playback === Playback.Pause;\n const doDisableButtons = !canAddTime || timeInMs === 0;\n\n return (\n <div className={style.addTime}>\n <TimeInput name='addtime' submitHandler={handleTimeChange} time={timeInMs} placeholder='Add time' />\n <div className={style.addButtons}>\n <TapButton onClick={() => handleAddTime('remove')} disabled={doDisableButtons} className={style.tallButtons}>\n <IoRemove />\n </TapButton>\n <TapButton onClick={() => handleAddTime('add')} disabled={doDisableButtons} className={style.tallButtons}>\n <IoAdd />\n </TapButton>\n </div>\n </div>\n );\n}\n","import { IoArrowDown, IoArrowUp, IoPause, IoPlay, IoStop } from 'react-icons/io5';\nimport { Playback, SimpleDirection, SimplePlayback } from 'ontime-types';\nimport { millisToString, parseUserTime } from 'ontime-utils';\n\nimport TimeInput from '../../../../common/components/input/time-input/TimeInput';\nimport { setAuxTimer, useAuxTimerControl, useAuxTimerTime } from '../../../../common/hooks/useSocket';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './AuxTimer.module.scss';\n\ninterface AuxTimerProps {\n index: number;\n}\n\nexport function AuxTimer({ index }: AuxTimerProps) {\n const { playback, direction } = useAuxTimerControl(index);\n\n const { stop, setDirection } = setAuxTimer;\n\n const toggleDirection = () => {\n const newDirection = direction === SimpleDirection.CountDown ? SimpleDirection.CountUp : SimpleDirection.CountDown;\n setDirection(index, newDirection);\n };\n\n const isActive = playback !== SimplePlayback.Stop;\n const playbackAction = playback === SimplePlayback.Start ? 'pause' : 'play';\n\n return (\n <label className={style.label}>\n Aux Timer {index}\n <div className={style.controls}>\n <div className={style.input}>\n <AuxTimerInput index={index} isActive={isActive} />\n <TapButton onClick={toggleDirection} aspect='tight' disabled={isActive}>\n {direction === SimpleDirection.CountDown && <IoArrowDown data-testid={`aux-timer-direction-${index}`} />}\n {direction === SimpleDirection.CountUp && <IoArrowUp data-testid={`aux-timer-direction-${index}`} />}\n </TapButton>\n </div>\n <div className={style.twoSides}>\n <AuxTogglePlay index={index} action={playbackAction} />\n <TapButton onClick={() => stop(index)} theme={Playback.Stop} disabled={!isActive}>\n <IoStop data-testid={`aux-timer-stop-${index}`} />\n </TapButton>\n </div>\n </div>\n </label>\n );\n}\n\ninterface AuxTimerInputProps {\n index: number;\n isActive: boolean;\n}\n\nfunction AuxTimerInput({ index, isActive }: AuxTimerInputProps) {\n const newTimeInMs = useAuxTimerTime(index);\n const { setDuration } = setAuxTimer;\n\n const handleTimeUpdate = (_field: string, value: string) => {\n const newTimeInMs = parseUserTime(value);\n setDuration(index, newTimeInMs);\n };\n\n if (isActive) {\n return (\n <div className={style.fakeInput} data-testid={`time-label-aux${index}`}>\n {millisToString(newTimeInMs)}\n </div>\n );\n }\n\n return (\n <TimeInput submitHandler={handleTimeUpdate} name={`aux${index}`} time={newTimeInMs} placeholder={`Aux ${index}`} />\n );\n}\n\ninterface AuxTogglePlayProps {\n index: number;\n action: 'play' | 'pause';\n}\n\nfunction AuxTogglePlay({ index, action }: AuxTogglePlayProps) {\n const { start, pause } = setAuxTimer;\n\n if (action === 'play') {\n return (\n <TapButton onClick={() => start(index)} theme={Playback.Play}>\n <IoPlay data-testid={`aux-timer-start-${index}`} />\n </TapButton>\n );\n }\n\n return (\n <TapButton onClick={() => pause(index)} theme={Playback.Pause}>\n <IoPause data-testid={`aux-timer-pause-${index}`} />\n </TapButton>\n );\n}\n","import { IoPause, IoPlay, IoPlaySkipBack, IoPlaySkipForward, IoReload, IoStop } from 'react-icons/io5';\nimport { Playback, TimerPhase } from 'ontime-types';\n\nimport { setPlayback } from '../../../../common/hooks/useSocket';\nimport { getPlaybackControlState } from '../playbackControl.utils';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './PlaybackButtons.module.scss';\n\ninterface PlaybackButtonsProps {\n playback: Playback;\n numEvents: number;\n selectedEventIndex: number | null;\n timerPhase: TimerPhase;\n}\n\nexport default function PlaybackButtons({ playback, numEvents, selectedEventIndex, timerPhase }: PlaybackButtonsProps) {\n const {\n isPlaying,\n isPaused,\n isRolling,\n disableGo,\n disableNext,\n disablePrev,\n disableStart,\n disablePause,\n disableRoll,\n disableStop,\n disableReload,\n goAction,\n goLabel,\n } = getPlaybackControlState({\n playback,\n numEvents,\n selectedEventIndex,\n timerPhase,\n });\n\n return (\n <div className={style.buttonContainer}>\n <TapButton disabled={disableGo} onClick={goAction} aspect='fill' className={style.go}>\n {goLabel}\n </TapButton>\n <div className={style.playbackContainer}>\n <TapButton onClick={setPlayback.start} disabled={disableStart} theme={Playback.Play} active={isPlaying}>\n <IoPlay />\n </TapButton>\n\n <TapButton onClick={setPlayback.pause} disabled={disablePause} theme={Playback.Pause} active={isPaused}>\n <IoPause />\n </TapButton>\n </div>\n <div className={style.transportContainer}>\n <TapButton onClick={setPlayback.previous} disabled={disablePrev}>\n <IoPlaySkipBack />\n </TapButton>\n <TapButton onClick={setPlayback.next} disabled={disableNext}>\n <IoPlaySkipForward />\n </TapButton>\n </div>\n <div className={style.extra}>\n <TapButton onClick={setPlayback.roll} disabled={disableRoll} theme={Playback.Roll} active={isRolling}>\n Roll\n </TapButton>\n <TapButton onClick={setPlayback.reload} disabled={disableReload}>\n <IoReload className={style.invertX} />\n </TapButton>\n <TapButton onClick={setPlayback.stop} disabled={disableStop} theme={Playback.Stop}>\n <IoStop />\n </TapButton>\n </div>\n </div>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { MaybeNumber, Playback, TimerPhase } from 'ontime-types';\nimport { dayInMs, millisToString } from 'ontime-utils';\n\nimport AppLink from '../../../../common/components/link/app-link/AppLink';\nimport Tooltip from '../../../../common/components/tooltip/Tooltip';\nimport { useTimer } from '../../../../common/hooks/useSocket';\nimport useReport from '../../../../common/hooks-query/useReport';\nimport { formatDuration } from '../../../../common/utils/time';\nimport TimerDisplay from '../timer-display/TimerDisplay';\n\nimport style from './PlaybackTimer.module.scss';\n\nfunction resolveAddedTimeLabel(addedTime: number) {\n if (addedTime > 0) {\n return `Added ${formatDuration(addedTime, false)}`;\n }\n\n if (addedTime < 0) {\n return `Removed ${formatDuration(Math.abs(addedTime), false)}`;\n }\n\n return '';\n}\n\nexport default function PlaybackTimer({ children }: PropsWithChildren) {\n const timer = useTimer();\n\n const isRolling = timer.playback === Playback.Roll;\n const isWaiting = timer.phase === TimerPhase.Pending;\n const isOvertime = timer.phase === TimerPhase.Overtime;\n const hasAddedTime = Boolean(timer.addedTime);\n\n const rollLabel = isRolling ? 'Roll mode active' : '';\n\n const addedTimeLabel = resolveAddedTimeLabel(timer.addedTime);\n\n return (\n <div className={style.timeContainer}>\n <div className={style.indicators}>\n <Tooltip text={rollLabel} render={<div />} className={style.indicatorRoll} data-active={isRolling} />\n <div className={style.indicatorNegative} data-active={isOvertime} />\n <Tooltip text={addedTimeLabel} render={<div />} className={style.indicatorDelay} data-active={hasAddedTime} />\n </div>\n <TimerDisplay time={isWaiting ? timer.secondaryTimer : timer.current} phase={timer.phase} />\n <div className={style.status}>\n {isWaiting ? (\n <span className={style.rolltag}>Roll: Countdown to start</span>\n ) : (\n <RunningStatus startedAt={timer.startedAt} expectedFinish={timer.expectedFinish} playback={timer.playback} />\n )}\n </div>\n {children}\n </div>\n );\n}\n\ninterface RunningStatusProps {\n startedAt: MaybeNumber;\n expectedFinish: MaybeNumber;\n playback: Playback;\n}\nfunction RunningStatus({ startedAt, expectedFinish, playback }: RunningStatusProps) {\n if (playback === Playback.Stop) {\n return <StoppedStatus />;\n }\n\n const started = millisToString(startedAt);\n const finishedMs = expectedFinish !== null ? expectedFinish % dayInMs : null;\n const finish = millisToString(finishedMs);\n\n return (\n <>\n <span className={style.start}>\n <span className={style.tag}>Started at</span>\n <span className={style.time}>{started}</span>\n </span>\n <span className={style.finish}>\n <span className={style.tag}>Expect end</span>\n <span className={style.time}>{finish}</span>\n </span>\n </>\n );\n}\n\nfunction StoppedStatus() {\n const { data } = useReport();\n const hasReport = Object.keys(data).length > 0;\n\n if (hasReport) {\n return <AppLink search='settings=sharing__report'>Go to report management</AppLink>;\n }\n\n return null;\n}\n","import { usePlaybackControl } from '../../../common/hooks/useSocket';\n\nimport AddTime from './add-time/AddTime';\nimport { AuxTimer } from './aux-timer/AuxTimer';\nimport PlaybackButtons from './playback-buttons/PlaybackButtons';\nimport PlaybackTimer from './playback-timer/PlaybackTimer';\n\nimport style from './PlaybackControl.module.scss';\n\nexport default function PlaybackControl() {\n const data = usePlaybackControl();\n\n return (\n <div className={style.mainContainer}>\n <PlaybackTimer>\n <AddTime playback={data.playback} />\n </PlaybackTimer>\n <PlaybackButtons\n playback={data.playback}\n numEvents={data.numEvents}\n selectedEventIndex={data.selectedEventIndex}\n timerPhase={data.timerPhase}\n />\n <div className={style.auxTimers}>\n <AuxTimer index={1} />\n <AuxTimer index={2} />\n <AuxTimer index={3} />\n </div>\n </div>\n );\n}\n","import { memo } from 'react';\n\nimport * as Editor from '../../../common/components/editor-utils/EditorUtils';\nimport ErrorBoundary from '../../../common/components/error-boundary/ErrorBoundary';\nimport ViewNavigationMenu from '../../../common/components/navigation-menu/ViewNavigationMenu';\nimport ProtectRoute from '../../../common/components/protect-route/ProtectRoute';\nimport { handleLinks } from '../../../common/utils/linkUtils';\nimport { getIsNavigationLocked } from '../../../externals';\n\nimport PlaybackControl from './PlaybackControl';\n\nimport style from './TimerControlExport.module.scss';\n\nexport default memo(TimerControlExport);\nfunction TimerControlExport() {\n const isExtracted = window.location.pathname.includes('/timercontrol');\n\n return (\n <ProtectRoute permission='editor'>\n <Editor.Panel data-testid='panel-timer-control'>\n {!isExtracted && <Editor.CornerExtract onClick={(event) => handleLinks('timercontrol', event)} />}\n {isExtracted && <ViewNavigationMenu suppressSettings isNavigationLocked={getIsNavigationLocked()} />}\n\n <div className={style.content}>\n <ErrorBoundary>\n <PlaybackControl />\n </ErrorBoundary>\n </div>\n </Editor.Panel>\n </ProtectRoute>\n );\n}\n"],"names":["AddTime","props","playback","timeInMs","setTime","useLocalStorage","key","defaultValue","handleTimeChange","_field","value","newTimeInMs","parseUserTime","Math","min","MILLIS_PER_HOUR","handleAddTime","direction","setPlayback","addTime","doDisableButtons","Playback","Play","Pause","jsxs","style","jsx","TimeInput","addButtons","TapButton","tallButtons","IoRemove","IoAdd","AuxTimer","index","useAuxTimerControl","stop","setDirection","setAuxTimer","toggleDirection","newDirection","SimpleDirection","CountDown","CountUp","isActive","SimplePlayback","Stop","playbackAction","Start","label","controls","input","AuxTimerInput","IoArrowDown","IoArrowUp","twoSides","AuxTogglePlay","IoStop","useAuxTimerTime","setDuration","handleTimeUpdate","fakeInput","millisToString","action","start","pause","IoPlay","IoPause","PlaybackButtons","numEvents","selectedEventIndex","timerPhase","isPlaying","isPaused","isRolling","disableGo","disableNext","disablePrev","disableStart","disablePause","disableRoll","disableStop","disableReload","goAction","goLabel","getPlaybackControlState","buttonContainer","go","playbackContainer","transportContainer","previous","IoPlaySkipBack","next","IoPlaySkipForward","extra","roll","Roll","reload","IoReload","invertX","resolveAddedTimeLabel","addedTime","formatDuration","abs","PlaybackTimer","children","timer","useTimer","isWaiting","phase","TimerPhase","Pending","isOvertime","Overtime","hasAddedTime","Boolean","rollLabel","addedTimeLabel","timeContainer","indicators","Tooltip","indicatorRoll","indicatorNegative","indicatorDelay","TimerDisplay","secondaryTimer","current","status","rolltag","RunningStatus","startedAt","expectedFinish","StoppedStatus","started","finishedMs","dayInMs","finish","Fragment","tag","time","data","useReport","Object","keys","length","AppLink","PlaybackControl","usePlaybackControl","mainContainer","auxTimers","memo","TimerControlExport","isExtracted","window","location","pathname","includes","ProtectRoute","Editor.Panel","Editor.CornerExtract","handleLinks","event","ViewNavigationMenu","getIsNavigationLocked","content","ErrorBoundary"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{h as m,j as u}from"./vendor-CKDP5hij.js";import{h as e,y as b,b2 as d,e as f,m as x,bk as g}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:{},s=new t.Error().stack;s&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[s]="c6d23acc-058e-410d-accc-af5a8ae6c2e6",t._sentryDebugIdIdentifier="sentry-dbid-c6d23acc-058e-410d-accc-af5a8ae6c2e6")}catch{}})();function w(t,s){return{start:t!==e.Stop&&t!==e.Play,pause:t===e.Play,roll:t!==e.Roll&&s!==b.Overtime,stop:t!==e.Stop,reload:t!==e.Stop&&t!==e.Roll}}function O({playback:t,numEvents:s,selectedEventIndex:a,timerPhase:n}){const c=a===0,r=a===s-1,o=s===0,l=t===e.Roll,i=w(t,n),{action:p,label:y}=h(t,a,r);return{isPlaying:t===e.Play,isPaused:t===e.Pause,isRolling:l,isArmed:t===e.Armed,isStopped:t===e.Stop,isFirst:c,isLast:r,noEvents:o,disableGo:l||o,disableNext:l||o||r,disablePrev:l||o||c,disableStart:!i.start,disablePause:!i.pause,disableRoll:!i.roll||o,disableStop:!i.stop,disableReload:!i.reload,disableAddTime:t!==e.Play&&t!==e.Pause,goAction:p,goLabel:y}}function h(t,s,a){return t===e.Armed?{action:d.start,label:"Start"}:a?{action:d.stop,label:"Finish"}:s===null?{action:d.startNext,label:"Start"}:{action:d.startNext,label:"Next"}}const z="_blink_yewzx_1",v="_fourtyfive_yewzx_13",S="_tapButton_yewzx_17",P="_neutral_yewzx_29",T="_active_yewzx_51",N="_play_yewzx_66",R="_roll_yewzx_93",A="_pause_yewzx_120",B="_ontime_yewzx_147",D="_stop_yewzx_174",j="_square_yewzx_201",q="_tight_yewzx_206",C="_fill_yewzx_211",_={blink:z,fourtyfive:v,tapButton:S,neutral:P,active:T,play:N,roll:R,pause:A,ontime:B,stop:D,square:j,tight:q,fill:C},I=m.forwardRef((t,s)=>{const{children:a,disabled:n,onClick:c,theme:r="neutral",aspect:o="normal",active:l,className:i}=t;return u.jsx("button",{className:f([_.tapButton,i,_[r],_[o],l&&_.active]),disabled:n,type:"button",onClick:c,ref:s,children:a})});I.displayName="TabButton";const F="_timer_kvqsa_21",G={timer:F};function $({time:t,phase:s,className:a}){const n=x(t,{fallback:g}).replace("-","");return u.jsx("div",{className:f([G.timer,a]),"data-phase":s,children:n})}export{I as T,$ as a,O as g};
|
|
2
|
-
//# sourceMappingURL=TimerDisplay-Dgmbqf65.js.map
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Timer-BfyVKQ8U.js","./vendor-CKDP5hij.js","./vendor-4xP-6xVS.css","./timer.utils-B-Ui91P7.js","./viewUtils-DQFwr7hm.js","./playbackstate-znZk3SSJ.js","./MultiPartProgressBar-Fp-sTN2u.js","./getProgress-B9UANc25.js","./MultiPartProgressBar-1_EFIx1M.css","./EmptyPage-DmpOAg7R.js","./EmptyPage-Ci10HwDK.css","./TitleCard-MUurHeZ7.js","./TitleCard-Bpf2kJHj.css","./ViewLogo-Ckp7i75x.js","./ViewLogo-Cu9JQggv.css","./ViewParamsEditor-Cxngd15h.js","./SwatchPicker-Dyxkxf3_.js","./SwatchPicker-DxatRu17.css","./Select-DQwYPDyI.js","./Select-Cd08aEcf.css","./ViewParamsEditor-CupOV30k.css","./useWindowTitle-bg-fLPOk.js","./SuperscriptTime-DP1CDlOX.js","./SuperscriptTime-Bk5IU6zG.css","./presentation.utils-CjjYs5II.js","./viewLoader.utils-Bn5zu5sz.js","./validateEvent-BUgLWn7x.js","./useCustomFields-zr9SUl5o.js","./useProjectData-DD_BQ9eJ.js","./useRundown-D6vokFHi.js","./Timer-Jjolf5Ra.css","./Countdown-CXFgDHND.js","./FollowButton-CAUWz5Ma.js","./FollowButton-Dab8w6zT.css","./useReport-DozG5uz5.js","./offset-DAyBfv5b.js","./Countdown-BYXg70ir.css","./Backstage-BY9GL_rk.js","./SuperscriptPeriod-CBiZU34J.js","./Backstage-BlanRQaw.css","./Studio-DzXTmBx4.js","./Studio-BbZ7w7aA.css","./TimelinePage-DbLt9rQi.js","./rundownUtils-BTQ3EeqN.js","./TimelinePage-CcFl3uul.css","./ProjectInfo-Bf5z4Xsv.js","./ProjectInfo-CTQGba6F.css","./ProtectedEditor-BvTFmv-F.js","./ProtectRoute-CCHzyy0I.js","./ProtectRoute-Bm5sjStK.css","./useEventSelection-B9mbj1cM.js","./useEventSelection-D_Et8xSN.css","./editorSettings-D4jfu68W.js","./editorSettings-BqHbWs9b.css","./EditorUtils-CLBWDP4k.js","./EditorUtils-L4Sg72o_.css","./Tooltip-DXph8P8p.js","./Tooltip-CKb7gU2M.css","./TimeInput-DTWDnaum.js","./parseUserTime-WkVNjkkE.js","./TimeInput-Cu-N5DmX.css","./useSelectAndRevealEntry-Dd6MpVHe.js","./TimeElements-pDYJeFbV.js","./TimeElements-B1xG3q8U.css","./OverviewWrapper-BNnAIUP1.js","./OverviewWrapper-DOYzR0Ef.css","./TimerDisplay-Dgmbqf65.js","./TimerDisplay-B-FvT2T-.css","./ProtectedEditor-DID9cfOA.css","./ProtectedCuesheet-COI1W_V3.js","./CuesheetTable-BLICUNky.js","./DelayIndicator-DUbpd6DG.js","./DelayIndicator-VuYhhwTj.css","./CuesheetTable-BJ30G538.css","./ProtectedCuesheet-_MUBZbf1.css","./OperatorExport-CE4ajLPS.js","./OperatorExport-CA5WcIt5.css","./EditorFeatureWrapper-CV_zaDoG.js","./EditorFeatureWrapper-MP8HHRxx.css","./RundownExport-C_q3KYN_.js","./RundownExport-CzaSrbaj.css","./TimerControlExport-BJfhJc07.js","./TimerControlExport-X_cQKSFg.css","./MessageControlExport-Dm8IjSr4.js","./MessageControlExport-D_pNX6Vj.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
var Xt=Object.defineProperty;var Yt=(e,t,n)=>t in e?Xt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Be=(e,t,n)=>Yt(e,typeof t!="symbol"?t+"":t,n);import{a as h,c as en,Q as tn,b as nn,u as on,i as rn,d as sn,e as an,f as ve,R as ct,w as cn,j as o,g as ln,r as un,h as c,k as se,l as dn,I as mn,m as fn,n as W,o as lt,p as pn,D as ut,q as dt,s as mt,t as ft,v as Ae,x as ae,y as pt,z as gn,A as hn,B as _n,C as gt,E as bn,F as ye,G as vn,H as yn,J as xn,K as wn,L as Sn,M as kn,N as jn,O as Cn,P as pe,S as En,T as Nn,U as In,V as Tn,W as Rn,X as Pn,Y as $n,Z as Dn,_ as An,$ as E,a0 as v,a1 as qn,a2 as On,a3 as Ln,a4 as Un,a5 as Fn,a6 as Mn,a7 as zn}from"./vendor-CKDP5hij.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]="1e338c25-2c38-4afa-af4e-b9bf1e044095",e._sentryDebugIdIdentifier="sentry-dbid-1e338c25-2c38-4afa-af4e-b9bf1e044095")}catch{}})();(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const a of s)if(a.type==="childList")for(const i of a.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(s){const a={};return s.integrity&&(a.integrity=s.integrity),s.referrerPolicy&&(a.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?a.credentials="include":s.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function r(s){if(s.ep)return;s.ep=!0;const a=n(s);fetch(s.href,a)}})();const Bn={shortTimeout:20*1e3,longTimeout:3*60*1e3};h.defaults.validateStatus=e=>e>=200&&e<300;h.defaults.timeout=Bn.shortTimeout;var ne=(e=>(e.CountDown="count-down",e.CountUp="count-up",e.Clock="clock",e.None="none",e))(ne||{}),T=(e=>(e.Editor="editor",e.Cuesheet="cuesheet",e.Operator="op",e.Timer="timer",e.Backstage="backstage",e.Timeline="timeline",e.StudioClock="studio",e.Countdown="countdown",e.ProjectInfo="info",e))(T||{}),N=(e=>(e.Ping="ping",e.Pong="pong",e.ClientInit="client-init",e.ClientSet="client-set",e.ClientSetPath="client-set-path",e.ClientRename="client-rename",e.ClientRedirect="client-redirect",e.ClientList="client-list",e.Dialog="dialog",e.Log="log",e.RuntimeData="runtime-data",e.Refetch="refetch",e))(N||{}),R=(e=>(e.All="all",e.CustomFields="custom-fields",e.ProjectData="project-data",e.Report="report",e.Rundown="rundown",e.UrlPresets="url-presets",e.ViewSettings="view-settings",e.Translation="translation",e.Settings="settings",e))(R||{}),ht=(e=>(e.Info="INFO",e.Warn="WARN",e.Error="ERROR",e.Severe="SEVERE",e))(ht||{}),p=(e=>(e.Client="CLIENT",e.Playback="PLAYBACK",e.Rx="RX",e.Server="SERVER",e.Tx="TX",e.User="USER",e))(p||{}),_t=(e=>(e.Roll="roll",e.Play="play",e.Pause="pause",e.Stop="stop",e.Armed="armed",e))(_t||{}),Z=(e=>(e.Absolute="absolute",e.Relative="relative",e))(Z||{}),V=(e=>(e.Start="start",e.Pause="pause",e.Stop="stop",e))(V||{}),ge=(e=>(e.CountUp="count-up",e.CountDown="count-down",e))(ge||{}),bt=(e=>(e.None="none",e.Default="default",e.Warning="warning",e.Danger="danger",e.Overtime="overtime",e.Pending="pending",e))(bt||{});const Wn={clock:0,timer:{addedTime:0,current:null,duration:null,elapsed:null,expectedFinish:null,phase:bt.None,playback:_t.Stop,secondaryTimer:null,startedAt:null},message:{timer:{text:"",visible:!1,blink:!1,blackout:!1,secondarySource:null},secondary:""},rundown:{selectedEventIndex:null,numEvents:0,plannedStart:0,plannedEnd:0,actualStart:null,actualGroupStart:null,currentDay:null},offset:{absolute:0,relative:0,mode:Z.Absolute,expectedFlagStart:null,expectedGroupEnd:null,expectedRundownEnd:null},groupNow:null,eventNow:null,eventNext:null,eventFlag:null,auxtimer1:{current:0,direction:ge.CountUp,duration:0,playback:V.Stop},auxtimer2:{current:0,direction:ge.CountUp,duration:0,playback:V.Stop},auxtimer3:{current:0,direction:ge.CountUp,duration:0,playback:V.Stop},ping:1},xe={"common.expected_finish":"Expected Finish","common.minutes":"min","common.seconds":"sec","common.now":"Now","common.next":"Next","common.scheduled_start":"Scheduled start","common.scheduled_end":"Scheduled end","common.expected_start":"Expected start","common.expected_end":"Expected end","common.stage_timer":"Stage Timer","common.started_at":"Started At","common.time_now":"Time now","common.no_data":"No data","countdown.ended":"Event ended at","countdown.running":"Event running","countdown.loaded":"Event loaded","countdown.select_event":"Select an event to follow","countdown.to_start":"Time to start","countdown.waiting":"Waiting for event start","countdown.overtime":"in overtime","countdown.all_have_finished":"All selected events have finished","timeline.live":"live","timeline.done":"done","timeline.due":"due","timeline.followedby":"Followed by","project.title":"Title","project.description":"Description","project.info":"Project Info","project.url":"Project URL"},Vn="4.4.1",Di="https://www.github.com/cpvalente/ontime",Ai="https://api.github.com/repos/cpvalente/ontime/releases/latest",qi="https://www.getontime.no",Oi="https://discord.com/invite/eje3CSUEXm",Li="https://www.reddit.com/r/ontimeapp/",Ui="https://docs.getontime.no",Fi="https://docs.getontime.no/features/custom-fields/",Mi="https://github.com/sponsors/cpvalente",zi="https://buymeacoffee.com/cpvalente",Bi=Vn,Wi=!1,Kn=!0,We=window.location.hostname,Hn=We==="localhost"||We==="127.0.0.1";var at;const Ve=(at=document.querySelector("base"))==null?void 0:at.hasAttribute("data-is-cloud"),Vi="ontouchstart"in window||navigator.maxTouchPoints>0,Qn=document.fullscreenEnabled,K=Jn(),X=vt("http",""),Gn=vt("ws","ws");function vt(e,t){const n=new URL(window.location.origin);if(e==="ws"){const s=window.location.protocol==="https:";n.protocol=s?"wss":"ws"}n.pathname=K?`${K}/${t}`:t;const r=n.toString();return r.endsWith("/")?r.slice(0,-1):r}function Jn(){var n;const t=((n=document.querySelector("base"))==null?void 0:n.getAttribute("href"))??"";return t.endsWith("/")?t.slice(0,-1):t}const Zn=Xn(),O=()=>new URLSearchParams(window.location.search).get("n")==="1";function Xn(){const e=document.cookie.split("; ").find(t=>t.startsWith("token="));if(e)try{const{scope:t}=JSON.parse(e.split("=")[1]);return t}catch{return"rw"}return"rw"}const Yn=["appinfo"],qe=["appSettings"],Ki=["appVersion"],Hi=["automation"],Ke=["customFields"],eo=["project"],Qi=["projectList"],Gi=["projectRundowns"],He=["rundown"],oe=["urlpresets"],he=["viewSettings"];const to=["report"],Oe=["translation"],ie=`${X}/data`,Le="user",no="styles/override.css",oo="translations/translations.json",ro=`${X}/${Le}/${no}`,Ji=`${X}/${Le}/logo`,so=`${X}/${Le}/${oo}`,re=1e3,Q=1e3*60,_e=1e3*60*60,Qe=864e5;function ao(e,t=ne.CountDown){if(e===null)return 0;let n=0;return t===ne.CountDown&&(n=Math.ceil(e/re)),t===ne.CountUp&&(n=Math.floor(e/re)),n===0?0:n}function io(e){return Math.floor(e/60)}function co(e){return Math.floor(e/3600)}function Zi(e){return e?Math.floor(e%Q/re):0}const lo=en("1234567890abcdef",6),uo=()=>lo();function mo(e){return String(e).padStart(2,"0")}function fo(e,t){if(e==null)return(t==null?void 0:t.fallback)??"...";const n=e<0,r=Math.abs(ao(e,t==null?void 0:t.direction)),s=r%60,a=io(r)%60,i=co(r);return`${n?"-":""}${[i,a,s].map(mo).join(":")}`}function Xi(e){return e.startsWith("00:0")?e.slice(4):e.startsWith("00:")?e.slice(3):e.startsWith("-00:0")?`-${e.slice(5)}`:e.startsWith("-00:")?`-${e.slice(4)}`:e}function Yi(e){return e.endsWith(":00")?e.slice(0,-3):e}function ec(e){return e.slice(0,-3)}function po(e,t){if(e<0)return;const n=new Date(e),r=n.getUTCHours().toString().padStart(2,"0"),s=n.getUTCHours().toString(),a=n.getUTCMinutes().toString().padStart(2,"0"),i=n.getUTCMinutes().toString(),l=n.getUTCSeconds().toString().padStart(2,"0"),f=n.getUTCSeconds().toString(),b=n.getUTCMilliseconds().toString().padStart(3,"0"),j=(n.getUTCHours()%12||12).toString(),_=j.padStart(2,"0"),C=n.getUTCHours()>=12?"PM":"AM";return go(t,{HH:r,H:s,hh:_,h:j,mm:a,m:i,ss:l,s:f,S:b,a:C})}function go(e,t){return Object.keys(t).reduce((n,r)=>{const s=new RegExp(`\\b${r}\\b`,"g");return n.replace(s,t[r])},e)}const q={isOnlyNumbers:/^\d+$/,isIPAddress:/^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/,startsWithHttp:/^https?:\/\//,startsWithSlash:/^\//,isAlphanumeric:/^[a-z0-9]+$/i,isAlphanumericWithSpace:/^[a-z0-9_ ]+$/i,isASCII:/^[ -~]+$/,isASCIIorEmpty:/^$|^[ -~]+$/,isNotEmpty:/\S/},ho={isOnlyNumbers:e=>q.isOnlyNumbers.test(e),isIPAddress:e=>q.isIPAddress.test(e),startsWithHttp:e=>q.startsWithHttp.test(e),startsWithSlash:e=>q.startsWithSlash.test(e),isAlphanumeric:e=>q.isAlphanumeric.test(e),isAlphanumericWithSpace:e=>q.isAlphanumericWithSpace.test(e),isASCII:e=>q.isASCII.test(e),isASCIIorEmpty:e=>q.isASCIIorEmpty.test(e),isNotEmpty:e=>q.isNotEmpty.test(e)},_o=e=>{const t=/^#((?:[a-f\d]{1}){3,4})$/i,n=/^#((?:[a-f\d]{2}){3,4})$/i;return t.test(e)||n.test(e)};function tc(e){return e instanceof Error?e.message:String(e)}function bo(e){const t=e.replace(/[a-zA-Z0-9]/g,n=>/[a-zA-Z]/.test(n)?String.fromCharCode((n<="Z"?90:122)>=(n=n.charCodeAt(0)+13)?n:n-26):String.fromCharCode((n<="4"?57:48)>=(n=n.charCodeAt(0)+5)?n:n-10));return e.startsWith("_")?t.replace("_",""):`_${t}`}function Ge(e){return e.startsWith("_")?bo(e):e}function yt(e,t){const{timeStart:n,dayOffset:r,delay:s}=e,{currentDay:a,totalGap:i,isLinkedToLoaded:l,offset:f,mode:b,actualStart:j,plannedStart:_}=t,C=r-a,w=Math.max(0,n+s)+C*Qe;let A=0;b===Z.Relative&&(A=(j??0)+a*Qe-(_??0));const u=w+A,ce=u+f;return l?ce:i>f?u:ce-i}function vo(e,t,n=.5){const r=n,s=1-r;return{red:Math.round(e.red*r+t.red*s),green:Math.round(e.green*r+t.green*s),blue:Math.round(e.blue*r+t.blue*s),alpha:1}}function xt(e){const t=Math.round(e.alpha*255).toString(16).padStart(2,"0"),n=e.red.toString(16).padStart(2,"0"),r=e.green.toString(16).padStart(2,"0"),s=e.blue.toString(16).padStart(2,"0");return"#"+n+r+s+t}function wt(e){if(e.startsWith("#"))return Je(e);const t=e.toLocaleLowerCase();return t in Ze?Je(Ze[t]):null}function Je(e){if(!_o(e))return null;let t=e.toLocaleLowerCase();t=t.replace(/^#/,"");let n=1;if(t.length===8){const l=t.slice(6,8);n=parseInt(l,16)/255,t=t.slice(0,6)}if(t.length===4){const l=t.slice(3,4).repeat(2);n=parseInt(l,16)/255,t=t.slice(0,3)}t.length===3&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]);const r=parseInt(t,16),s=r>>16,a=r>>8&255,i=r&255;return isNaN(s)||isNaN(a)||isNaN(i)||isNaN(n)?null:{red:s,green:a,blue:i,alpha:n}}function yo(e){return(e.red*299+e.green*587+e.blue*114)/1e3>=128}const Ze={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd3"},y=new tn({defaultOptions:{queries:{gcTime:10*Q,networkMode:Ve?"online":"always",refetchOnWindowFocus:!1,retry:(e,t)=>h.isCancel(t)?!1:e<5,retryDelay:e=>Math.min(1e3*2**e,5e3)},mutations:{networkMode:Ve?"online":"always",retry:0}}}),xo=[{url:"timer",label:"Timer"},{url:"backstage",label:"Backstage"},{url:"timeline",label:"Timeline"},{url:"studio",label:"Studio Clock"},{url:"countdown",label:"Countdown"},{url:"info",label:"Project Info"}],St="h:mm:ss a",kt="HH:mm:ss",jt=(e,t)=>rn(e,t),G=nn(()=>({...Wn}),jt),wo=e=>on(G,e,jt);function Ct(e,t){const n=G.getState();n[e]=t,G.setState({...n})}function So(e){const t=G.getState();G.setState({...t,...e})}const m=e=>()=>wo(e),Et={setIdentify:e=>d("client",e),setRedirect:e=>{d("client",e)},setClientName:e=>d("client",e)},nc=m(e=>{var t,n;return{playback:e.timer.playback,selectedEventId:((t=e.eventNow)==null?void 0:t.id)??null,nextEventId:((n=e.eventNext)==null?void 0:n.id)??null}}),oc=m(e=>({blackout:e.message.timer.blackout,blink:e.message.timer.blink,secondarySource:e.message.timer.secondarySource})),rc=m(e=>({text:e.message.timer.text,visible:e.message.timer.visible})),sc=m(e=>({text:e.message.secondary,visible:e.message.timer.secondarySource==="secondary"})),ac=m(e=>{var t,n;return{blink:e.message.timer.blink,blackout:e.message.timer.blackout,phase:e.timer.phase,secondarySource:e.message.timer.secondarySource,showTimerMessage:e.message.timer.visible&&!!e.message.timer.text,timerType:((t=e.eventNow)==null?void 0:t.timerType)??null,countToEnd:((n=e.eventNow)==null?void 0:n.countToEnd)??!1}}),ic={timerText:e=>d("message",{timer:{text:e}}),timerVisible:e=>d("message",{timer:{visible:e}}),secondaryMessage:e=>d("message",{secondary:e}),timerBlink:e=>d("message",{timer:{blink:e}}),timerBlackout:e=>d("message",{timer:{blackout:e}}),timerSecondarySource:e=>d("message",{timer:{secondarySource:e}})},cc=m(e=>({playback:e.timer.playback,selectedEventIndex:e.rundown.selectedEventIndex,numEvents:e.rundown.numEvents,timerPhase:e.timer.phase})),lc={start:()=>d("start",void 0),pause:()=>d("pause",void 0),roll:()=>d("roll",void 0),startNext:()=>d("start","next"),previous:()=>{d("load","previous")},next:()=>{d("load","next")},stop:()=>{d("stop",void 0)},reload:()=>{d("reload",void 0)},addTime:e=>{d("addtime",e)}},uc=m(e=>({aux1:e.auxtimer1.current,aux2:e.auxtimer2.current,aux3:e.auxtimer3.current})),dc=e=>m(t=>e===1?t.auxtimer1.current:e===2?t.auxtimer2.current:t.auxtimer3.current)(),mc=e=>m(t=>e===1?{playback:t.auxtimer1.playback,direction:t.auxtimer1.direction}:e===2?{playback:t.auxtimer2.playback,direction:t.auxtimer2.direction}:{playback:t.auxtimer3.playback,direction:t.auxtimer3.direction})(),fc={start:e=>d("auxtimer",{[e]:V.Start}),pause:e=>d("auxtimer",{[e]:V.Pause}),stop:e=>d("auxtimer",{[e]:V.Stop}),setDirection:(e,t)=>d("auxtimer",{[e]:{direction:t}}),setDuration:(e,t)=>d("auxtimer",{[e]:{duration:t}})},pc=m(e=>{var t;return((t=e.eventNow)==null?void 0:t.id)??null}),gc=m(e=>{var t;return((t=e.groupNow)==null?void 0:t.id)??null}),hc={loadEvent:e=>d("load",{id:e}),startEvent:e=>d("start",{id:e}),start:()=>d("start",void 0),pause:()=>d("pause",void 0)},_c=m(e=>({...e.timer})),bc=m(e=>e.clock),vc=m(e=>{var t;return{id:((t=e.eventFlag)==null?void 0:t.id)??null,expectedStart:e.offset.expectedFlagStart}}),yc=m(e=>{var t,n;return{current:e.timer.current,duration:e.timer.duration,timeWarning:((t=e.eventNow)==null?void 0:t.timeWarning)??null,timeDanger:((n=e.eventNow)==null?void 0:n.timeDanger)??null}}),ko=m(e=>({offset:e.offset.mode===Z.Absolute?e.offset.absolute:e.offset.relative,mode:e.offset.mode,currentDay:e.rundown.currentDay??0,actualStart:e.rundown.actualStart,plannedStart:e.rundown.plannedStart,clock:e.clock})),jo=m(e=>e.ping>0),xc=m(e=>e.offset.mode),wc=e=>d("offsetmode",e),Sc=m(e=>e.timer.playback),kc=m(e=>({plannedStart:e.rundown.plannedStart,actualStart:e.rundown.actualStart,plannedEnd:e.rundown.plannedEnd})),jc=m(e=>e.offset.expectedRundownEnd),Cc=m(e=>({numEvents:e.rundown.numEvents,selectedEventIndex:e.rundown.selectedEventIndex})),Ec=m(e=>({offset:e.offset.mode===Z.Absolute?e.offset.absolute:e.offset.relative,playback:e.timer.playback})),Nc=m(e=>{var t;return{clock:e.clock,mode:e.offset.mode,groupExpectedEnd:e.offset.expectedGroupEnd,actualGroupStart:e.rundown.actualGroupStart??0,currentDay:((t=e.eventNow)==null?void 0:t.dayOffset)??0,playback:e.timer.playback}}),Ic=m(e=>{var t;return{clock:e.clock,mode:e.offset.mode,actualStart:e.rundown.actualStart??0,plannedStart:e.rundown.plannedStart??0,currentDay:((t=e.eventNow)==null?void 0:t.dayOffset)??0,playback:e.timer.playback}}),Tc=m(e=>{var t,n;return{eventNext:e.eventNext,eventNow:e.eventNow,message:e.message,time:e.timer,clock:e.clock,timerTypeNow:((t=e.eventNow)==null?void 0:t.timerType)??ne.CountDown,countToEndNow:((n=e.eventNow)==null?void 0:n.countToEnd)??!1,auxTimer:{aux1:e.auxtimer1.current,aux2:e.auxtimer2.current,aux3:e.auxtimer3.current}}}),Rc=m(e=>({playback:e.timer.playback,current:e.timer.current,clock:e.clock})),Pc=m(e=>{var t;return{eventNext:e.eventNext,eventNow:e.eventNow,rundown:e.rundown,selectedEventId:((t=e.eventNow)==null?void 0:t.id)??null,time:e.timer}}),$c=m(e=>({clock:e.clock,playback:e.timer.playback})),Dc=m(e=>({eventNext:e.eventNext,eventNow:e.eventNow,message:e.message,time:e.timer,offset:e.offset.mode===Z.Absolute?e.offset.absolute:e.offset.relative,rundown:e.rundown,expectedRundownEnd:e.offset.expectedRundownEnd}));function Co(){const e=new Date;let t=e.getHours()*_e;return t+=e.getMinutes()*Q,t+=e.getSeconds()*re,t+=e.getMilliseconds(),t}function Eo(){return new URL(document.location.href).searchParams.get("timeformat")}function No(){const e=y.getQueryData(qe);return(e==null?void 0:e.timeFormat)??"24"}function Ac(e,t=St,n=kt){return e==="12"?t:n}function Io(e,t){const n=Eo();return n||(No()==="12"?e:t)}const qc=(e,t,n=Io)=>{if(e===null)return"...";const r=n((t==null?void 0:t.format12)??St,(t==null?void 0:t.format24)??kt),s=po(Math.abs(e),r);return`${e<0?"-":""}${s}`};function Oc(e,t=!0){if(e<=0)return"0m";const n=Math.floor(e/_e),r=Math.floor(e%_e/Q);let s="";if(n>0&&(s+=`${n}h`),r>0&&(s+=`${r}m`),!t){const i=e%Q/re,l=Math.min(59,Math.ceil(i));l>0&&(s+=`${l}s`)}return s}function Lc(e,t){const{offset:n,currentDay:r,mode:s,actualStart:a,plannedStart:i,clock:l}=ko();return e===null?0:yt({...e},{...t,currentDay:r,offset:n,mode:s,actualStart:a,plannedStart:i})-l}function Uc(e,t){if(e===null)return{expectedStart:0,timeToStart:0,expectedEnd:0,plannedEnd:0};const n=yt({timeStart:e.timeStart,delay:e.delay,dayOffset:e.dayOffset},{totalGap:e.totalGap,isLinkedToLoaded:e.isLinkedToLoaded,...t}),r=e.timeStart+e.duration+e.delay;return{expectedStart:n,timeToStart:n-t.clock,expectedEnd:e.countToEnd?Math.max(n+e.duration,r):n+e.duration,plannedEnd:r}}const Ue=sn(()=>({logs:[]})),To=()=>an(Ue),Nt=e=>Ue.setState(t=>({logs:[e,...t.logs]})),Ro=()=>Ue.setState({logs:[]});function Po(e){var t,n;if(h.isAxiosError(e)){const r=((t=e.response)==null?void 0:t.statusText)??"";let s=((n=e.response)==null?void 0:n.data)??"";return typeof s=="object"&&("message"in s?s=JSON.stringify(s.message):s=JSON.stringify(s)),`${r}: ${s}`}else return e instanceof Error?e.message:typeof e!="string"?JSON.stringify(e):e}function Fc(e){return e instanceof Error?e.message:typeof e!="string"?JSON.stringify(e):e}function Mc(e,t){const n=`${e}: ${Po(t)}`;Nt({id:uo(),origin:"SERVER",time:fo(Co()),level:ht.Error,text:n})}async function Xe(){await y.invalidateQueries()}function zc(e,t){return new Blob([e],{type:t})}function Bc(e,t){const n=URL.createObjectURL(e),r=document.createElement("a");r.setAttribute("href",n),r.setAttribute("download",t),document.body.appendChild(r),r.click(),URL.revokeObjectURL(n)}function $o(e,t){const n=localStorage.getItem(e);return n?n==="true":(localStorage.setItem(e,String(t)),t)}function Do(e){return K?`${K}-${e}`:e}const It=Do("client-name");function Ao(e){localStorage.setItem(It,e)}const S=ve(e=>({name:localStorage.getItem(It)??void 0,setName:t=>e(()=>(Ao(t),{name:t})),id:"",setId:t=>e({id:t}),redirect:"",setRedirect:t=>e({redirect:t}),clients:{},setClients:t=>e({clients:t})}));function qo(){return S.getState().name}function Ye(e){S.getState().setName(e)}function Oo(e){S.getState().setId(e)}function et(){return S.getState().id}function Lo(e){S.getState().setRedirect(e)}function Uo(e){return S.getState().setClients(e)}const Fo=ve(e=>({showDialog:null,clearDialog:()=>e({showDialog:null}),setDialog:t=>e({showDialog:t})}));function Tt(e){Fo.getState().setDialog(e)}let P=null,L=null;const Y={reconnectBaseInterval:1e3,reconnectMaxInterval:3e4,reconnectMinInterval:500,reconnectJitter:.25,offlineAttemptsThreshold:2};let Pe=!1,H=0;const Rt=()=>{P=new WebSocket(Gn);const e=qo();P.onopen=()=>{const t=Pe;L&&(clearTimeout(L),L=null),Pe=!0,H=0,d(N.ClientSet,{type:"ontime",origin:window.location.origin,path:window.location.pathname+window.location.search,name:e}),t&&Xe(),tt(!0)},P.onclose=()=>{console.warn("WebSocket disconnected"),L&&(clearTimeout(L),L=null);const t=Math.min(Y.reconnectBaseInterval*2**H,Y.reconnectMaxInterval),n=t*Y.reconnectJitter*(Math.random()*2-1),r=Math.max(Y.reconnectMinInterval,Math.round(t+n));L=setTimeout(()=>{L=null,H>Y.offlineAttemptsThreshold&&tt(!1),console.warn(`WebSocket: reconnecting now (#${H+1}, waited ${r}ms)`),P&&P.readyState===WebSocket.CLOSED&&(H+=1,Rt())},r)},P.onerror=t=>{console.error("WebSocket error:",t)},P.onmessage=async t=>{try{const n=JSON.parse(t.data),{tag:r,payload:s}=n;if(!r)return;switch(r){case N.Pong:{const a=(new Date().getTime()-new Date(s).getTime())*.5;Ct("ping",a);break}case N.ClientInit:{Oo(s.clientId),e||Ye(s.clientName);break}case N.ClientRename:{const a=et();s.target===a&&Ye(s.name);break}case N.ClientRedirect:{const a=et();s.target===a&&Lo(s.path);break}case N.ClientList:{Uo(s);break}case N.Dialog:{s.dialog==="welcome"&&Tt("welcome");break}case N.Log:{Nt(s);break}case N.RuntimeData:{So(s);break}case N.Refetch:{const{target:a,revision:i}=s;switch(a){case R.All:Xe();break;case R.CustomFields:y.invalidateQueries({queryKey:Ke});break;case R.ProjectData:y.invalidateQueries({queryKey:eo});break;case R.Report:y.invalidateQueries({queryKey:to});break;case R.Rundown:if(i===y.getQueryData(He).revision)break;y.invalidateQueries({queryKey:He}),y.invalidateQueries({queryKey:Ke});break;case R.UrlPresets:y.invalidateQueries({queryKey:oe});break;case R.ViewSettings:y.invalidateQueries({queryKey:he});break;case R.Translation:y.invalidateQueries({queryKey:Oe});break;case R.Settings:y.invalidateQueries({queryKey:qe});break;default:break}break}default:break}}catch{}}};function d(e,t){P&&P.readyState===WebSocket.OPEN&&P.send(JSON.stringify({tag:e,payload:t}))}function tt(e){Ct("ping",e?1:-1)}const Mo="_errorContainer_35w9k_17",zo="_error_35w9k_17",Bo="_report_35w9k_30",le={errorContainer:Mo,error:zo,report:Bo};class nt extends ct.Component{constructor(n){super(n);Be(this,"reportContent","");this.state={error:null,errorInfo:null}}static getDerivedStateFromError(n){return{errorMessage:n.toString()}}componentDidCatch(n,r){this.setState({error:n,errorInfo:r}),this.reportContent=`${n} ${r.componentStack}`;const s=G.getState();s.ping<0||cn(a=>{a.setExtras({error:n,store:s,hasSocket:{hasConnected:Pe,reconnectAttempts:H}});const i=ln(n);this.setState({eventId:i,info:r})})}render(){return this.state.errorMessage?o.jsx("div",{className:le.errorContainer,"data-testid":"error-container",children:o.jsxs("div",{children:[o.jsx("p",{className:le.error,children:": /"}),o.jsx("p",{children:"Something went wrong."}),o.jsx("a",{className:le.report,href:`mailto:mail@getontime.no?subject=Error%20Report&body=${encodeURIComponent(this.reportContent)}`,children:"Report error"}),o.jsx("div",{role:"button",className:le.report,onClick:()=>{var n;((n=window==null?void 0:window.process)==null?void 0:n.type)==="renderer"?window.ipcRenderer.send("reload"):window.location.reload()},children:"Reload interface"})]})}):this.props.children}}const Wo="_overlay_9onby_17",Vo="_name_9onby_35",Ko="_message_9onby_43",je={overlay:Wo,name:Vo,message:Ko};function Ho(){var s;const e=S(a=>a.clients),t=S(a=>a.id);if(!((s=e[t])==null?void 0:s.identify))return null;const r=document.getElementById("identify-portal");return r?un.createPortal(o.jsx(Qo,{}),r):null}function Qo(){var l;const e=S(f=>f.clients),t=S(f=>f.id),n=S(f=>f.name),r=c.useRef(null),{setIdentify:s}=Et,a=(l=e[t])==null?void 0:l.identify,i=c.useCallback(()=>{r.current&&clearTimeout(r.current),s({target:t,identify:!1})},[t,s]);return c.useEffect(()=>(a&&(r.current=setTimeout(i,Q)),()=>{r.current&&clearTimeout(r.current)}),[a,t,s,i]),o.jsxs("div",{className:je.overlay,"data-testid":"identify-overlay",onClick:i,children:[o.jsx("div",{className:je.name,children:n}),o.jsx("div",{className:je.message,children:"Click to close"})]})}const Fe=`${ie}/settings`;async function Go(e){return(await h.get(Fe,{signal:e==null?void 0:e.signal})).data}async function Wc(e){return h.post(Fe,e)}async function Vc(e){h.post(`${Fe}/welcomedialog`,{show:e})}const Jo={version:"4.0.0",serverPort:4001,editorKey:null,operatorKey:null,timeFormat:"24",language:"en"};function Pt(){const{data:e,status:t,isFetching:n,isError:r,refetch:s}=se({queryKey:qe,queryFn:({signal:a})=>Go({signal:a}),placeholderData:(a,i)=>a,select:a=>{const i={...a};return a.editorKey&&(i.editorKey=Ge(a.editorKey)),a.operatorKey&&(i.operatorKey=Ge(a.operatorKey)),i}});return{data:e??Jo,status:t,isFetching:n,isError:r,refetch:s}}const Zo=c.createContext({editorAuth:!1,operatorAuth:!1,validate:()=>!1}),ue={editor:"ontime-editor-entry",operator:"ontime-operator-entry"},Xo=({children:e})=>{const{status:t,data:n}=Pt(),[r,s]=c.useState(!0),[a,i]=c.useState(!0);c.useEffect(()=>{if(t==="pending")return;const f=sessionStorage.getItem(ue.editor);f&&f===n.editorKey?s(!0):s(n.editorKey==null||n.editorKey==="");const b=sessionStorage.getItem(ue.operator);b&&b===n.operatorKey?i(!0):i(n.operatorKey==null||n.operatorKey==="")},[n,t]);const l=c.useCallback((f,b)=>{function j(_,C){return C==null||C===""||_===C}if(b==="editor"){const _=j(f,n.editorKey);return _&&sessionStorage.setItem(ue.editor,f),s(_),_}else if(b==="operator"){const _=j(f,n.operatorKey);return _&&sessionStorage.setItem(ue.operator,f),i(_),_}return!1},[n]);return o.jsx(Zo.Provider,{value:{editorAuth:r,operatorAuth:a,validate:l},children:e})},$t=c.createContext(void 0),Dt=typeof window<"u"&&"wakeLock"in navigator;function Yo(){const{keepAwake:e}=At(),t=c.useRef(null);c.useEffect(()=>{const n=()=>{t.current&&t.current.release().finally(()=>{t.current=null})},r=()=>{const a=t.current;if(!a||a.released){if(t.current=null,!Dt)return;navigator.wakeLock.request("screen").then(i=>{t.current=i}).catch(console.error)}},s=new AbortController;return e?(r(),document.addEventListener("visibilitychange",()=>{t.current!==null&&document.visibilityState==="visible"&&r()},{signal:s.signal})):n(),()=>{s.abort(),n()}},[e])}const be="keep-awake";function er(e,t){return(t==null?void 0:t.has(be))||e.has(be)}function At(){const[e,t]=dn(),n=c.use($t),r=c.useMemo(()=>{const a=n?new URLSearchParams(n.search):void 0;return er(e,a)},[n,e]),s=c.useCallback(()=>{t(a=>(r?a.delete(be):a.set(be,"1"),a))},[r,t]);return{keepAwake:r,toggleKeepAwake:s}}function tr(){return Yo(),null}const we=`${ie}/assets`;async function Kc(e){return(await h.get(`${we}/css`,{signal:e==null?void 0:e.signal})).data}async function Hc(e){await h.post(`${we}/css`,{css:e})}async function Qc(){return(await h.post(`${we}/css/restore`)).data}async function nr(e){return(await h.get(so,{signal:e==null?void 0:e.signal})).data}async function or(e){await h.post(`${we}/translations`,{translation:e}),await y.invalidateQueries({queryKey:Oe})}const Me=12e4,Gc={cuesheetMode:"cuesheet-mode",editorMode:"editor-mode"};var rr=(e=>(e.Run="run",e.Edit="edit",e))(rr||{});function sr(){const{data:e,status:t,refetch:n}=se({queryKey:Oe,queryFn:({signal:r})=>nr({signal:r}),placeholderData:(r,s)=>r,refetchInterval:Me});return{data:e??xe,status:t,refetch:n}}const ar={"common.expected_finish":"Erwartetes Ende","common.minutes":"min","common.seconds":"sek","common.now":"Jetzt","common.next":"Nächste","common.scheduled_start":"Geplanter beginn","common.scheduled_end":"Geplantes ende","common.expected_start":"Erwartetes beginn","common.expected_end":"Erwartetes ende","common.stage_timer":"Bühnen-Timer","common.started_at":"Gestartet am","common.time_now":"Aktuelle Zeit","common.no_data":"Keine Daten","countdown.ended":"Veranstaltung endete um","countdown.running":"Veranstaltung läuft","countdown.loaded":"Veranstaltung geladen","countdown.select_event":"Wählen Sie eine Veranstaltung aus, um sie zu verfolgen","countdown.to_start":"Zeit bis zum Start","countdown.waiting":"Warten auf den Veranstaltungsbeginn","countdown.overtime":"überfällig","countdown.all_have_finished":"Alle ausgewählten Veranstaltungen sind beendet","timeline.live":"live","timeline.done":"Beendet","timeline.due":"fällig","timeline.followedby":"Gefolgt von","project.title":"Titel","project.description":"Beschreibung","project.info":"Projektinfo","project.url":"Projekt-URL"},ir={"common.expected_finish":"Finalización esperada","common.minutes":"min","common.seconds":"sec","common.now":"Ahora","common.next":"Siguiente","common.scheduled_start":"Inicio programado","common.scheduled_end":"Fin programado","common.expected_start":"Inicio previsto","common.expected_end":"Fin previsto","common.stage_timer":"Temporizador de presentador","common.started_at":"Iniciado en","common.time_now":"Ahora","common.no_data":"Sin datos","countdown.ended":"Evento finalizado a las","countdown.running":"Evento en curso","countdown.loaded":"Evento está cargado","countdown.select_event":"Seleccionar un evento para seguir","countdown.to_start":"Tiempo para comenzar","countdown.waiting":"Esperando el inicio del evento","countdown.overtime":"en tiempo extra","countdown.all_have_finished":"Todos los eventos seleccionados han terminado","timeline.live":"live","timeline.done":"Terminado","timeline.due":"pendiente","timeline.followedby":"Seguido por","project.title":"Título","project.description":"Descripción","project.info":"Información del proyecto","project.url":"URL del proyecto"},cr={"common.expected_finish":"Fin estimée à","common.minutes":"min","common.seconds":"sec","common.now":"Maintenant","common.next":"A suivre","common.scheduled_start":"Début prévu","common.scheduled_end":"Fin prévue","common.expected_start":"Début projeté","common.expected_end":"Fin projetée","common.stage_timer":"Minuteur de scène","common.started_at":"Commencé à","common.time_now":"Heure","common.no_data":"Aucune donnée","countdown.ended":"Évènement terminé à","countdown.running":"Évènement en cours","countdown.loaded":"Évènement chargé","countdown.select_event":"Sélectionnez un évènement à suivre","countdown.to_start":"Évènement commence dans","countdown.waiting":"En attente du début de l’évènement","countdown.overtime":"en dépassement","countdown.all_have_finished":"Tous les évènements sélectionnés ont terminé","timeline.live":"live","timeline.done":"Terminé","timeline.due":"dû","timeline.followedby":"Suivi de","project.title":"Titre","project.description":"Description","project.info":"Informations du projet","project.url":"URL du projet"},lr={"common.expected_finish":"Fine Prevista","common.minutes":"min","common.seconds":"sec","common.now":"Adesso","common.next":"Prossimo","common.scheduled_start":"Inizio programmato","common.scheduled_end":"Fine programmata","common.expected_start":"Inizio previsto","common.expected_end":"Fine prevista","common.stage_timer":"Orologio Palco","common.started_at":"Iniziato Alle","common.time_now":"Ora attuale","common.no_data":"Nessun dato disponibile","countdown.ended":"Evento finito alle","countdown.running":"Evento in corso","countdown.loaded":"Evento caricato","countdown.select_event":"Seleziona un evento da seguire","countdown.to_start":"Tempo alla partenza","countdown.waiting":"In attesa dell'inizio dell'evento","countdown.overtime":"in ritardo","countdown.all_have_finished":"Tutti gli eventi selezionati sono finiti","timeline.live":"live","timeline.done":"Terminato","timeline.due":"previsto","timeline.followedby":"Seguito da","project.title":"Titolo","project.description":"Descrizione","project.info":"Informazioni sul progetto","project.url":"URL del progetto"},ur={"common.expected_finish":"Término esperado","common.minutes":"min","common.seconds":"sec","common.now":"Agora","common.next":"Próximo","common.scheduled_start":"Início programado","common.scheduled_end":"Fim programado","common.expected_start":"Início previsto","common.expected_end":"Fim previsto","common.stage_timer":"Temporizador do presentador","common.started_at":"Iniciado em","common.time_now":"Hora atual","common.no_data":"Sem dados","countdown.ended":"Evento encerrado às","countdown.running":"Evento em andamento","countdown.loaded":"Evento carregado","countdown.select_event":"Selecione um evento para acompanhar","countdown.to_start":"Tempo para iniciar","countdown.waiting":"Aguardando o início do evento","countdown.overtime":"em tempo extra","countdown.all_have_finished":"Todos os eventos selecionados terminaram","timeline.live":"live","timeline.done":"Concluído","timeline.due":"Pendente","timeline.followedby":"Seguido por","project.title":"Título","project.description":"Descrição","project.info":"Informações do projeto","project.url":"URL do projeto"},Ce={en:xe,es:ir,fr:cr,it:lr,de:ar,pt:ur},qt=c.createContext({userTranslation:xe,getLocalizedString:()=>"",postUserTranslation:async()=>{}}),dr=({children:e})=>{const{data:t}=Pt(),{data:n}=sr(),r=c.useCallback((a,i=(t==null?void 0:t.language)||"en")=>{if(i in Ce){if(a in Ce[i])return Ce[i][a]}else if(i==="custom")return n[a];return xe[a]},[t==null?void 0:t.language,n]),s={userTranslation:n,getLocalizedString:r,postUserTranslation:or};return o.jsx(qt.Provider,{value:s,children:e})},Jc=()=>{const{userTranslation:e,getLocalizedString:t,postUserTranslation:n}=c.useContext(qt);return{userTranslation:e,getLocalizedString:t,postUserTranslation:n}},mr=ve(e=>({isOpen:!1,open:()=>e({isOpen:!0}),close:()=>e({isOpen:!1}),toggle:()=>e(t=>({isOpen:!t.isOpen}))}));function fr(e,t){let n;return(...r)=>{n||(n=setTimeout(()=>{n=null,e(...r)},t))}}const pr=3e3,Ot=(e=!1)=>{const[t,n]=c.useState(e);return c.useEffect(()=>{let r=null;const a=fr(()=>{n(!0),r&&clearTimeout(r),r=setTimeout(()=>n(!1),pr)},1e3);return a(),document.addEventListener("mousemove",a),document.addEventListener("keydown",a),()=>{document.removeEventListener("mousemove",a),document.removeEventListener("keydown",a),r&&clearTimeout(r)}},[]),t},gr={red:26,green:26,blue:26},Zc=e=>{if(!e)return{backgroundColor:"#1a1a1a",color:"#fffffa"};const t=wt(e);if(!t)return{backgroundColor:"#1a1a1a",color:"#fffffa"};const n=vo(gr,t,1-t.alpha),r=yo(n)?"black":"#fffffa";return{backgroundColor:xt(n),color:r}},k=e=>e.filter(Boolean).join(" "),Xc="–",Yc="––:––:––",el="––:––";function tl(e,t){const n=wt(e);return n?(n.alpha=t,xt(n)):e}const hr="_blink_bz8cs_1",_r="_fourtyfive_bz8cs_13",br="_mirror_bz8cs_17",vr="_subtle_bz8cs_21",yr="_primary_bz8cs_51",xr="_destructive_bz8cs_66",wr="_ghosted_bz8cs_92",Sr="_baseIconButton_bz8cs_140",kr="_small_bz8cs_157",jr="_medium_bz8cs_162",Cr="_large_bz8cs_167",Er="_xlarge_bz8cs_172",Ee={blink:hr,fourtyfive:_r,mirror:br,subtle:vr,"subtle-white":"_subtle-white_bz8cs_35",primary:yr,destructive:xr,"subtle-destructive":"_subtle-destructive_bz8cs_79",ghosted:wr,"ghosted-white":"_ghosted-white_bz8cs_108","ghosted-destructive":"_ghosted-destructive_bz8cs_124",baseIconButton:Sr,small:kr,medium:jr,large:Cr,xlarge:Er},J=c.forwardRef(({className:e,children:t,variant:n="subtle",size:r="medium",...s},a)=>o.jsx("button",{ref:a,className:k([Ee.baseIconButton,Ee[n],Ee[r],e]),type:"button",...s,children:t}));J.displayName="IconButton";const Nr="_fadeable_1nsno_17",Ir="_hidden_1nsno_22",Tr="_buttonContainer_1nsno_27",Ne={fadeable:Nr,hidden:Ir,buttonContainer:Tr};function Rr({toggleMenu:e,toggleSettings:t}){const n=Ot(!0);return o.jsxs("div",{id:"fadeable-navigation",className:k([Ne.fadeable,Ne.buttonContainer,!n&&Ne.hidden]),children:[e&&o.jsx(J,{variant:"subtle-white",size:"xlarge",onClick:e,"aria-label":"toggle menu","data-testid":"navigation__toggle-menu",children:o.jsx(mn,{})}),t&&o.jsx(J,{variant:"subtle-white",size:"xlarge",onClick:t,"aria-label":"toggle settings","data-testid":"navigation__toggle-settings",children:o.jsx(fn,{})})]})}const Pr="_fadeable_1y6b8_17",$r="_hidden_1y6b8_22",Dr="_lockIcon_1y6b8_27",Ie={fadeable:Pr,hidden:$r,lockIcon:Dr};function Ar(){const e=Ot();return o.jsx("div",{className:k([Ie.fadeable,Ie.lockIcon,!e&&Ie.hidden]),children:o.jsx(W,{})})}function qr(){const{width:e}=lt();return c.useMemo(()=>e<1300,[e])}const Or=ve()(e=>({mirror:$o("view-mirror",!1),toggleMirror:t=>e(n=>{const r=typeof t>"u"?!n.mirror:t;return localStorage.setItem("view-mirror",String(r)),{mirror:r}})})),Lr="_blink_1erat_1",Ur="_fourtyfive_1erat_13",Fr="_mirror_1erat_17",Mr="_subtle_1erat_21",zr="_primary_1erat_51",Br="_destructive_1erat_66",Wr="_ghosted_1erat_92",Vr="_baseButton_1erat_140",Kr="_loading_1erat_161",Hr="_content_1erat_164",Qr="_loadingOverlay_1erat_174",Gr="_spinner_1erat_180",Jr="_spin_1erat_180",Zr="_small_1erat_190",Xr="_medium_1erat_195",Yr="_large_1erat_200",es="_xlarge_1erat_205",ts="_fluid_1erat_210",U={blink:Lr,fourtyfive:Ur,mirror:Fr,subtle:Mr,"subtle-white":"_subtle-white_1erat_35",primary:zr,destructive:Br,"subtle-destructive":"_subtle-destructive_1erat_79",ghosted:Wr,"ghosted-white":"_ghosted-white_1erat_108","ghosted-destructive":"_ghosted-destructive_1erat_124",baseButton:Vr,loading:Kr,content:Hr,loadingOverlay:Qr,spinner:Gr,spin:Jr,small:Zr,medium:Xr,large:Yr,xlarge:es,fluid:ts},I=c.forwardRef(({className:e,children:t,variant:n="subtle",size:r="medium",fluid:s,loading:a,...i},l)=>o.jsxs("button",{ref:l,className:k([U.baseButton,U[n],U[r],s&&U.fluid,a&&U.loading,e]),type:"button",disabled:a||i.disabled,...i,children:[o.jsx("span",{className:U.content,children:t}),a&&o.jsx("div",{className:U.loadingOverlay,children:o.jsx(pn,{className:U.spinner})})]}));I.displayName="Button";const ns="_dialog_qv1xq_17",os="_backdrop_qv1xq_32",rs="_title_qv1xq_42",ss="_body_qv1xq_51",as="_footer_qv1xq_59",ee={dialog:ns,backdrop:os,title:rs,body:ss,footer:as};function is({isOpen:e,title:t,showCloseButton:n,showBackdrop:r,bodyElements:s,footerElements:a,onClose:i}){return o.jsx(ut,{open:e,onOpenChange:l=>{l||i()},children:o.jsxs(dt,{children:[r&&o.jsx(mt,{className:ee.backdrop}),o.jsxs(ft,{className:ee.dialog,children:[o.jsxs("div",{className:ee.title,children:[t,n&&o.jsx(J,{variant:"subtle-white",onClick:i,children:o.jsx(Ae,{})})]}),o.jsx("div",{className:ee.body,children:s}),o.jsx("div",{className:ee.footer,children:a})]})]})})}const cs="_blink_1r8lg_1",ls="_fourtyfive_1r8lg_13",us="_input_1r8lg_17",ds="_subtle_1r8lg_47",ms="_ghosted_1r8lg_51",fs="_medium_1r8lg_56",ps="_large_1r8lg_60",gs="_fluid_1r8lg_64",de={blink:cs,fourtyfive:ls,input:us,subtle:ds,ghosted:ms,medium:fs,large:ps,fluid:gs},hs=c.forwardRef(function({className:t,variant:n="subtle",height:r="medium",fluid:s,...a},i){return o.jsx("input",{ref:i,type:"text",autoCorrect:"off",autoComplete:"off",spellCheck:"false",className:k([de.input,de[n],de[r],s&&de.fluid,t]),...a})});function _s({id:e,name:t="",isOpen:n,onClose:r}){const[s,a]=c.useState(t),{setClientName:i}=Et,l=()=>{s!==t&&s!==""&&i({target:e,rename:s}),r()},f=s!==t&&s!=="";return o.jsx(is,{isOpen:n,title:`Rename Client: ${t}`,showCloseButton:!0,onClose:r,bodyElements:o.jsx(hs,{height:"large",placeholder:"New name",value:s,onChange:b=>a(b.target.value)}),footerElements:o.jsxs(o.Fragment,{children:[o.jsx(I,{variant:"subtle",size:"large",onClick:r,children:"Cancel"}),o.jsx(I,{variant:"primary",size:"large",onClick:l,disabled:!f,children:"Submit"})]})})}var it;const $e=((it=window.process)==null?void 0:it.type)==="renderer",B=$e?window.require("electron").ipcRenderer:null;function Lt(){const e=c.useCallback((t,n)=>{$e&&B&&B.send(t,n)},[]);return{isElectron:$e,sendToElectron:e}}function nl(){const e=ae(),{isElectron:t}=Lt();c.useEffect(()=>(t&&(B.on("request-editor-location",(n,r)=>{e(r,{relative:"route"})}),B.on("dialog",(n,r)=>{r==="welcome"&&Tt("welcome")})),()=>{B==null||B.removeAllListeners()}),[t,e])}function Ut(e){var t;((t=window.process)==null?void 0:t.type)==="renderer"?window.ipcRenderer.send("send-to-link",e):window.open(e)}function bs(e,t,n=X,r=K){t==null||t.preventDefault();const s=new URL(n);s.pathname=r?`${r}/${e}`:e,Ut(s.toString())}function vs(e,t,n=X,r=K){const s=new URL(n);return s.hostname=e,t&&(s.pathname=r?`${r}/${t}`:t),s.toString()}function ys(e){return e.key==="Enter"}function xs(e){return e.key==="Escape"}function ol(e,t){xs(e)&&(e.preventDefault(),e.stopPropagation(),t==null||t())}const ws="_link_pmy0j_17",Ss="_current_pmy0j_41",ot={link:ws,current:Ss};function D({active:e,className:t,children:n,onClick:r}){return o.jsx("div",{className:k([ot.link,e&&ot.current,t]),tabIndex:0,role:"button",onClick:r,onKeyDown:s=>{ys(s)&&r()},children:n})}const ks="_linkIcon_1wpyp_17",js={linkIcon:ks};function Te({current:e,to:t,postAction:n,children:r}){const{isElectron:s}=Lt(),a=ae();return s?o.jsxs(D,{active:e,onClick:()=>{bs(t),n==null||n()},children:[r,o.jsx(pt,{className:js.linkIcon})]}):o.jsx(D,{active:e,onClick:()=>{a(`/${t}`),n==null||n()},children:r})}function Cs(){const{width:e}=lt(),t=gn();return c.useMemo(()=>(t==="ios"||t==="android")&&e<1300,[e,t])}function Es(){const e=ae();return Cs()?o.jsxs(o.Fragment,{children:[o.jsxs(D,{active:location.pathname==="/timercontrol",onClick:()=>e("/timercontrol"),children:[o.jsx(W,{}),"Timer Controls"]}),o.jsxs(D,{active:location.pathname==="/messagecontrol",onClick:()=>e("/messagecontrol"),children:[o.jsx(W,{}),"Message Controls"]}),o.jsxs(D,{active:location.pathname==="/rundown",onClick:()=>e("/rundown"),children:[o.jsx(W,{}),"Rundown"]})]}):o.jsxs(D,{active:location.pathname==="/editor",onClick:()=>e("/editor"),children:[o.jsx(W,{}),"Editor"]})}const Ft=`${ie}/session`;async function Ns(e){return(await h.get(`${Ft}/info`,{signal:e==null?void 0:e.signal})).data}async function rl(e){return(await h.post(`${Ft}/url`,e)).data.url}const Is={networkInterfaces:[],version:"4.0.0",serverPort:4001,publicDir:""};function Ts(){const{data:e,status:t,isError:n,refetch:r,isFetching:s}=se({queryKey:Yn,queryFn:({signal:a})=>Ns({signal:a}),placeholderData:(a,i)=>a,refetchInterval:Me});return{data:e??Is,status:t,isError:n,refetch:r,isFetching:s}}async function Mt(e){var t;await((t=navigator.clipboard)==null?void 0:t.writeText(e))}async function sl(e){try{await Mt(e)}catch{}}const Rs="_blink_1pu1m_1",Ps="_fourtyfive_1pu1m_13",$s="_copytag_1pu1m_17",Ds="_action_1pu1m_22",As="_label_1pu1m_27",qs="_small_1pu1m_38",Os="_medium_1pu1m_43",Ls="_large_1pu1m_48",Us="_copy_1pu1m_17",te={blink:Rs,fourtyfive:Ps,copytag:$s,action:Ds,label:As,small:qs,medium:Os,large:Ls,copy:Us};function Fs({copyValue:e,disabled:t,size:n="medium",children:r,onClick:s}){const[a,i]=c.useState(!1),l=c.useRef(null),f=async()=>{try{await Mt(e),i(!0),l.current&&clearTimeout(l.current),l.current=setTimeout(()=>i(!1),2e3)}catch{}};return o.jsxs("div",{className:te.copytag,children:[s!==void 0?o.jsx(I,{className:te.action,size:n,onClick:s,disabled:t,children:r}):o.jsx("div",{className:k([te.label,te[n]]),children:r}),o.jsx(J,{className:te.copy,variant:"primary",size:n,onClick:f,disabled:t,children:a?o.jsx(hn,{}):o.jsx(_n,{})})]})}const Ms="_header_elv9y_17",zs="_interfaces_elv9y_23",Bs="_interfaceCopy_elv9y_30",Ws="_goIcon_elv9y_35",me={header:Ms,interfaces:zs,interfaceCopy:Bs,goIcon:Ws};function Vs({currentLocation:e}){var n;const{data:t}=Ts();return t.networkInterfaces.length<2?null:o.jsxs(o.Fragment,{children:[o.jsx("div",{className:me.header,children:"Accessible on external networks"}),o.jsx("div",{className:me.interfaces,children:(n=t==null?void 0:t.networkInterfaces)==null?void 0:n.map(r=>{if(r.name==="localhost")return null;const s=vs(r.address,e);return o.jsx(Fs,{copyValue:s,onClick:()=>Ut(s),size:"small",children:o.jsxs("span",{className:me.interfaceCopy,children:[r.address," ",o.jsx(pt,{className:me.goIcon})]})},r.name)})})]})}const Ks="_separator_1f3q6_17",Hs="_backdrop_1f3q6_21",Qs="_drawer_1f3q6_31",Gs="_header_1f3q6_60",Js="_body_1f3q6_70",Zs="_note_1f3q6_75",F={separator:Ks,backdrop:Hs,drawer:Qs,header:Gs,body:Js,note:Zs},Xs=c.memo(Ys);function Ys({isOpen:e,onClose:t}){const n=S(w=>w.id),r=S(w=>w.name),s=qr(),[a,i]=gt(!1),{fullscreen:l,toggle:f}=bn(),{mirror:b,toggleMirror:j}=Or(),{keepAwake:_,toggleKeepAwake:C}=At(),x=ye();return o.jsx(ut,{open:e,onOpenChange:w=>{w||t()},children:o.jsxs(dt,{children:[o.jsx(mt,{className:F.backdrop}),o.jsx(_s,{id:n,name:r,isOpen:a,onClose:i.close}),o.jsxs(ft,{className:F.drawer,children:[o.jsxs("div",{className:F.header,children:[o.jsx(vn,{children:"Ontime"}),o.jsx(J,{variant:"subtle-white",size:"large",onClick:t,children:o.jsx(Ae,{})})]}),o.jsxs("div",{className:F.body,children:[Qn&&o.jsxs(D,{active:l,onClick:f,children:["Toggle Fullscreen",l?o.jsx(yn,{}):o.jsx(xn,{})]}),o.jsxs(D,{active:b,onClick:()=>j(),children:["Flip Screen",o.jsx(wn,{}),b&&o.jsx("span",{className:F.note,children:"Active"})]}),Dt&&o.jsxs(D,{active:_,onClick:C,children:["Keep Awake",o.jsx(Sn,{}),_&&o.jsx("span",{className:F.note,children:"Active"})]}),o.jsx(D,{onClick:i.open,children:"Rename Client"}),o.jsx("hr",{className:F.separator}),o.jsx(Es,{}),o.jsxs(Te,{to:"cuesheet",current:x.pathname==="/cuesheet",postAction:s?t:void 0,children:[o.jsx(W,{}),"Cuesheet"]}),o.jsxs(Te,{to:"op",current:x.pathname==="/op",postAction:s?t:void 0,children:[o.jsx(W,{}),"Operator"]}),o.jsx("hr",{className:F.separator}),xo.map(w=>o.jsx(Te,{to:w.url,current:x.pathname===`/${w.url}`,postAction:s?t:void 0,children:w.label},w.url))]}),Hn&&o.jsx("div",{children:o.jsx(Vs,{currentLocation:x.pathname})})]})]})})}const $=c.memo(ea);function ea({isNavigationLocked:e,suppressSettings:t}){const[n,r]=gt(),{open:s}=mr();return kn([["Space",()=>{e||r.toggle()},{preventDefault:!0}],["mod + ,",()=>{t||s()},{preventDefault:!0}]]),e&&t?o.jsx(Ar,{}):o.jsxs(o.Fragment,{children:[o.jsx(Rr,{toggleMenu:e?void 0:r.toggle,toggleSettings:t?void 0:s}),!e&&o.jsx(Xs,{isOpen:n,onClose:r.close})]})}const ta=()=>{const e=ae(),{pathname:t,search:n}=ye(),{redirect:r,setRedirect:s}=S(jn(i=>({redirect:i.redirect,setRedirect:i.setRedirect}))),a=jo();c.useEffect(()=>{a&&d(N.ClientSetPath,t+n)},[t,n,a]),c.useEffect(()=>{r!==""&&(s(""),r!==t+n&&e(r,{replace:!0}))},[e,t,r,n,s])},Se=`${ie}/url-presets`;async function na(e){return(await h.get(Se,{signal:e==null?void 0:e.signal})).data}async function oa(e){return(await h.post(Se,e)).data}async function ra(e,t){return(await h.put(`${Se}/${e}`,t)).data}async function sa(e){return(await h.delete(`${Se}/${e}`)).data}function ze({skip:e=!1}={}){const{data:t,status:n,isError:r,refetch:s}=se({queryKey:oe,queryFn:({signal:a})=>na({signal:a}),placeholderData:(a,i)=>a,refetchInterval:Me,enabled:!e});return{data:t??[],status:n,isError:r,refetch:s}}function al(e){const{data:t}=ze();return{viewPresets:c.useMemo(()=>t.filter(r=>r.target===e),[t,e])}}function il(){const e=Cn(),t=pe({mutationFn:oa,onSuccess:s=>{e.setQueryData(oe,s)}}),n=pe({mutationFn:({alias:s,data:a})=>ra(s,a),onSuccess:s=>{e.setQueryData(oe,s)}}),r=pe({mutationFn:sa,onSuccess:s=>{e.setQueryData(oe,s)}});return{addPreset:t.mutateAsync,updatePreset:(s,a)=>n.mutateAsync({alias:s,data:a}),deletePreset:r.mutateAsync,isMutating:t.isPending||n.isPending||r.isPending,isMutationError:t.isError||n.isError||r.isError}}function aa(e,t){if(ua(e))return null;const n=`${e.pathname}${e.search}`.substring(1),r=zt(e),s=new URLSearchParams(e.search).get("token"),a=e.search.includes("n=1");for(const i of t)if(i.enabled&&(i.alias===r||i.target===r)){const l=ia(i.target,i.search,i.alias,a,s);return ca(n,l)?null:l}return null}function zt(e){const n=e.pathname.split("?")[0].split("/").filter(Boolean);return n[0]==="preset"&&n.length>1?n[1]:n[n.length-1]||""}function ia(e,t,n,r,s){const a=En(`${e}?${t}`),i=new URLSearchParams(a.search);return i.set("alias",n),r&&i.set("n","1"),s&&i.set("token",s),`${a.pathname}?${i}`.substring(1)}function ca(e,t){const n=new URL(e,document.location.origin),r=new URL(t,document.location.origin);return n.pathname.startsWith("/preset/")||r.pathname.startsWith("/preset/")?n.pathname===r.pathname:n.pathname!==r.pathname?!1:(n.searchParams.delete("token"),n.searchParams.delete("n"),r.searchParams.delete("token"),r.searchParams.delete("n"),n.searchParams.toString()===r.searchParams.toString())}function cl(e,t){let n=t;ho.startsWithHttp(t.toLowerCase())||(n=`http://${n}`);const r=new URL(n),s=zt(r);if(!la(s))throw new Error(`Invalid target view: ${s}`);return{alias:e,target:s,search:r.searchParams.toString(),enabled:!0}}function la(e){return e!==T.Editor&&Object.values(T).includes(e)}function ua(e){return e.pathname.split("/").filter(Boolean)[0]==="preset"}const da="_blink_oqrqg_1",ma="_fourtyfive_oqrqg_13",fa="_header_oqrqg_17",pa="_subheader_oqrqg_24",ga="_title_oqrqg_33",ha="_section_oqrqg_43",_a="_indent_oqrqg_44",ba="_paragraph_oqrqg_63",va="_card_oqrqg_67",ya="_highlight_oqrqg_75",xa="_blockquote_oqrqg_81",wa="_error_oqrqg_87",Sa="_pad_oqrqg_93",ka="_table_oqrqg_99",ja="_listGroup_oqrqg_130",Ca="_listItem_oqrqg_137",Ea="_fieldTitle_oqrqg_145",Na="_fieldDescription_oqrqg_150",Ia="_fieldError_oqrqg_155",Ta="_divider_oqrqg_160",Ra="_overlay_oqrqg_166",Pa="_loader_oqrqg_177",$a="_animloader_oqrqg_1",Da="_empty_oqrqg_187",Aa="_inlineElements_oqrqg_200",qa="_inner_oqrqg_204",Oa="_component_oqrqg_207",La="_start_oqrqg_210",Ua="_end_oqrqg_213",Fa="_apart_oqrqg_216",Ma="_wrap_oqrqg_219",g={blink:da,fourtyfive:ma,header:fa,subheader:pa,title:ga,section:ha,indent:_a,paragraph:ba,card:va,highlight:ya,blockquote:xa,error:wa,pad:Sa,table:ka,listGroup:ja,listItem:Ca,fieldTitle:Ea,fieldDescription:Na,fieldError:Ia,divider:Ta,overlay:Ra,loader:Pa,animloader:$a,empty:Da,inlineElements:Aa,inner:qa,component:Oa,start:La,end:Ua,apart:Fa,wrap:Ma};function ll({children:e}){return o.jsx("h2",{className:g.header,children:e})}function ul({children:e}){return o.jsx("h3",{className:g.subheader,children:e})}function dl({children:e}){return o.jsx("h4",{className:g.title,children:e})}function ml({as:e,className:t,children:n,...r}){const s=e??"div";return o.jsx(s,{className:k([g.section,t]),...r,children:n})}function fl({as:e,className:t,children:n,...r}){const s=e??"div";return o.jsx(s,{className:k([g.indent,t]),...r,children:n})}function pl({children:e}){return o.jsx("p",{className:g.paragraph,children:e})}function gl({children:e,className:t,...n}){return o.jsx("div",{className:k([g.card,t]),...n,children:e})}function hl({className:e,children:t}){return o.jsx("div",{className:g.pad,children:o.jsx("table",{className:k([g.table,e]),children:t})})}function _l({label:e,handleClick:t}){return o.jsx("tr",{className:g.empty,children:o.jsxs("td",{colSpan:99,children:[o.jsx("div",{children:e??"No data yet"}),t&&o.jsxs(I,{onClick:t,disabled:!t,variant:"primary",children:["New ",o.jsx(Nn,{})]})]})})}function bl({className:e,children:t}){return o.jsx("ul",{className:k([g.listGroup,e]),children:t})}function vl({children:e}){return o.jsx("li",{className:g.listItem,children:e})}function yl({title:e,description:t,error:n}){return o.jsxs("div",{className:g.fieldTitle,children:[e,n&&o.jsx(Ba,{children:n}),!n&&t&&o.jsx(za,{children:t})]})}function za({children:e}){return o.jsx("div",{className:g.fieldDescription,children:e})}function xl({children:e}){return o.jsx("code",{className:g.highlight,children:e})}function Ba({children:e,className:t}){return o.jsx("div",{className:k([g.fieldError,t]),children:e})}function wl(){return o.jsx("hr",{className:g.divider})}function Sl({isLoading:e}){return e?o.jsx("div",{className:g.overlay,children:o.jsx("div",{className:g.loader})}):null}function Wa({children:e,as:t,relation:n="component",align:r="start",wrap:s="nowrap",className:a,...i}){const l=t??"div";return o.jsx(l,{...i,className:k([g.inlineElements,g[n],g[r],g[s],a]),children:e})}const Va="_blink_hxuk5_1",Ka="_fourtyfive_hxuk5_13",Ha="_log_hxuk5_17",Qa="_apart_hxuk5_27",Ga="_logEntry_hxuk5_31",Ja="_INFO_hxuk5_34",Za="_WARN_hxuk5_37",Xa="_ERROR_hxuk5_40",Ya="_time_hxuk5_46",ei="_origin_hxuk5_49",ti="_msg_hxuk5_52",ni="_buttonBar_hxuk5_56",M={blink:Va,fourtyfive:Ka,log:Ha,apart:Qa,logEntry:Ga,INFO:Ja,WARN:Za,ERROR:Xa,time:Ya,origin:ei,msg:ti,buttonBar:ni};function oi(){const{logs:e}=To(),[t,n]=c.useState(!0),[r,s]=c.useState(!0),[a,i]=c.useState(!0),[l,f]=c.useState(!0),[b,j]=c.useState(!0),[_,C]=c.useState(!0),x=[];_&&x.push(p.User),t&&x.push(p.Client),r&&x.push(p.Server),a&&x.push(p.Rx),l&&x.push(p.Tx),b&&x.push(p.Playback);const w=e.filter(u=>x.some(ce=>u.origin===ce)),A=c.useCallback(u=>{u===p.User?C(!0):C(!1),u===p.Client?n(!0):n(!1),u===p.Server?s(!0):s(!1),u===p.Rx?i(!0):i(!1),u===p.Tx?f(!0):f(!1),u===p.Playback?j(!0):j(!1)},[]);return o.jsxs(o.Fragment,{children:[o.jsxs(Wa,{className:M.buttonBar,children:[o.jsx(I,{variant:_?"primary":"subtle",size:"small",onClick:()=>C(u=>!u),onAuxClick:()=>A(p.User),onContextMenu:u=>u.preventDefault(),children:p.User}),o.jsx(I,{variant:t?"primary":"subtle",size:"small",onClick:()=>n(u=>!u),onAuxClick:()=>A(p.Client),onContextMenu:u=>u.preventDefault(),children:p.Client}),o.jsx(I,{variant:r?"primary":"subtle",size:"small",onClick:()=>s(u=>!u),onAuxClick:()=>A(p.Server),onContextMenu:u=>u.preventDefault(),children:p.Server}),o.jsx(I,{variant:b?"primary":"subtle",size:"small",onClick:()=>j(u=>!u),onAuxClick:()=>A(p.Playback),onContextMenu:u=>u.preventDefault(),children:p.Playback}),o.jsx(I,{variant:a?"primary":"subtle",size:"small",onClick:()=>i(u=>!u),onAuxClick:()=>A(p.Rx),onContextMenu:u=>u.preventDefault(),children:p.Rx}),o.jsx(I,{variant:l?"primary":"subtle",size:"small",onClick:()=>f(u=>!u),onAuxClick:()=>A(p.Tx),onContextMenu:u=>u.preventDefault(),children:p.Tx}),o.jsxs(I,{variant:"subtle-destructive",size:"small",onClick:Ro,className:M.apart,children:[o.jsx(Ae,{})," Clear"]})]}),o.jsx("ul",{className:M.log,children:w.map(u=>o.jsxs("li",{className:`${M.logEntry} ${M[u.level]} `,children:[o.jsx("span",{className:M.time,children:u.time}),o.jsx("span",{className:M.origin,children:u.origin}),o.jsx("span",{className:M.msg,children:u.text})]},u.id))})]})}const ri="_loader_vno17_21",si="_ellipsis_vno17_28",rt={loader:ri,ellipsis:si};function ke(){return o.jsx("div",{className:rt.loader,children:o.jsxs("div",{className:rt.ellipsis,children:[o.jsx("div",{}),o.jsx("div",{}),o.jsx("div",{}),o.jsx("div",{})]})})}const ai=e=>c.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:275,height:275,fill:"none",viewBox:"0 0 275 275",...e},c.createElement("path",{fill:"#4D4D4D",d:"M49.83 133.919c0-18.343 3.531-34.692 10.595-49.048 7.064-14.355 17.204-25.464 30.42-33.325 13.33-7.861 28.768-11.792 46.313-11.792 24.952 0 45.288 7.633 61.011 22.9 15.837 15.267 24.666 36.003 26.489 62.207l.342 12.647c0 28.369-7.918 51.155-23.755 68.359-15.836 17.09-37.085 25.635-63.745 25.635-26.66 0-47.965-8.545-63.916-25.635-15.836-17.09-23.755-40.332-23.755-69.726v-2.222zm49.389 3.589c0 17.545 3.304 30.989 9.912 40.332 6.608 9.228 16.064 13.843 28.369 13.843 11.963 0 21.305-4.558 28.028-13.672 6.722-9.229 10.083-23.926 10.083-44.092 0-17.204-3.361-30.534-10.083-39.99-6.723-9.457-16.179-14.185-28.37-14.185-12.076 0-21.419 4.728-28.027 14.185-6.608 9.342-9.912 23.869-9.912 43.579z"}),c.createElement("mask",{id:"a",width:177,height:193,x:49,y:39,maskUnits:"userSpaceOnUse"},c.createElement("path",{fill:"#fff",d:"M49.83 133.919c0-18.343 3.531-34.692 10.595-49.048 7.064-14.355 17.204-25.464 30.42-33.325 13.33-7.861 28.768-11.792 46.313-11.792 24.952 0 45.288 7.633 61.011 22.9 15.837 15.267 24.666 36.003 26.489 62.207l.342 12.647c0 28.369-7.918 51.155-23.755 68.359-15.836 17.09-37.085 25.635-63.745 25.635-26.66 0-47.965-8.545-63.916-25.635-15.836-17.09-23.755-40.332-23.755-69.726v-2.222zm49.389 3.589c0 17.545 3.304 30.989 9.912 40.332 6.608 9.228 16.064 13.843 28.369 13.843 11.963 0 21.305-4.558 28.028-13.672 6.722-9.229 10.083-23.926 10.083-44.092 0-17.204-3.361-30.534-10.083-39.99-6.723-9.457-16.179-14.185-28.37-14.185-12.076 0-21.419 4.728-28.027 14.185-6.608 9.342-9.912 23.869-9.912 43.579z"})),c.createElement("g",{mask:"url(#a)"},c.createElement("path",{fill:"url(#paint0_linear)",d:"M19.07 95.347c15.556-6.524 14.288-34.989 22.08-30.11 9.74 6.099 0-23.084 13.549-16.56 21.714 10.455-10.977 18.645 12.296 32.007 23.274 13.362 117.508 24.346 150.898 90.045 12.812 25.21 19.341 32.653 21.836 34.543 1.508-.13 1.78 1.349 0 0-.38.033-.838.168-1.362.476-5.516 3.245-106.876 85.867-148.54 34.124C48.162 188.129 2.25 140.221 14.31 127.463c9.648-10.205 1.393-25.103 4.76-32.116z"}),c.createElement("path",{fill:"url(#paint1_linear)",d:"M42.153 69.754c-7.791-4.88-.412 13.939-24.087 22.582-3.366 7.013 4.63 19.904-5.018 30.109-12.06 12.757 37.623 69.197 79.288 120.94 41.664 51.743 123.453-24.356 128.969-27.6 5.515-3.245 14.092 10.618-10.114-37.154-33.382-65.882-126.481-75.197-149.59-98.582-20.018-20.26 33.92-42.547 10.662-37.896-30.11 6.022-20.37 33.7-30.11 27.6z"})),c.createElement("defs",null,c.createElement("linearGradient",{id:"paint0_linear",x1:93.96,x2:67.62,y1:-33.993,y2:351.251,gradientUnits:"userSpaceOnUse"},c.createElement("stop",null),c.createElement("stop",{offset:1,stopColor:"#414141",stopOpacity:0})),c.createElement("linearGradient",{id:"paint1_linear",x1:88.433,x2:62.092,y1:-37.321,y2:347.924,gradientUnits:"userSpaceOnUse"},c.createElement("stop",{stopColor:"#FF005C",stopOpacity:.74}),c.createElement("stop",{offset:0}),c.createElement("stop",{offset:1,stopColor:"#242424",stopOpacity:0})))),ii="_notFound_1d1tc_21",ci="_content_1d1tc_28",st={notFound:ii,content:ci};function De(){return o.jsx("div",{className:st.notFound,children:o.jsxs("section",{className:st.content,children:[o.jsx(ai,{}),o.jsx("h1",{children:"Not found"}),o.jsxs("div",{children:["The page you are after was not found.",o.jsx("br",{}),"It may have moved or your URL may be incorrect.",o.jsx("br",{}),"Double check the URL and try again."]})]})})}const Re="ontime-override",li=e=>{const[t,n]=c.useState(!1);return c.useEffect(()=>{if(!e){r();return}if(document.getElementById(Re)){n(!0);return}n(!1),s(e).then(i=>{if(!i){console.error("Error loading stylesheet: no data");return}return a(i)}).catch(i=>{console.error(`Error loading stylesheet: ${i}`)}).finally(()=>{setTimeout(()=>n(!0),0)});function r(){var i;(i=document.getElementById(Re))==null||i.remove(),n(!0)}async function s(i){const l=await fetch(i);if(l.ok)return l.text()}async function a(i){const l=document.createElement("style");l.setAttribute("id",Re),l.innerHTML=i,document.head.append(l)}},[e]),{shouldRender:t}},Bt=`${ie}/view-settings`;async function ui(e){return(await h.get(Bt,{signal:e==null?void 0:e.signal})).data}async function di(e){return(await h.post(Bt,e)).data}const mi={dangerColor:"#ff7300",normalColor:"#ffffffcc",overrideStyles:!1,warningColor:"#ffa528"};function fi(){const{data:e,status:t}=se({queryKey:he,queryFn:({signal:r})=>ui({signal:r}),placeholderData:(r,s)=>r,staleTime:_e}),{mutateAsync:n}=pe({mutationFn:di,onMutate:()=>{y.cancelQueries({queryKey:he})},onSuccess:r=>{y.setQueryData(he,r)}});return{data:e??mi,status:t,mutateAsync:n}}function z({children:e}){const{data:t}=fi(),{shouldRender:n}=li(t.overrideStyles?ro:void 0),s=new URLSearchParams(window.location.search).get("keyColour")??"#101010";return n?o.jsxs(o.Fragment,{children:[o.jsx("style",{children:`body { background: var(--background-color-override, ${s}); }`}),e]}):o.jsxs(o.Fragment,{children:[o.jsx("style",{children:`body { background: var(--background-color-override, ${s}); }`}),o.jsx(ke,{})]})}const pi="4.4.1",gi=["top.GLOBALS","originalCreateNotification","canvas.contentDocument","MyApp_RemoveAllHighlights","http://tt.epicplay.com","Can't find variable: ZiteReader","jigsaw is not defined","ComboSearch is not defined","http://loading.retry.widdit.com/","atomicFindClose","fb_xd_fragment","bmi_SafeAddOnload","EBCallBackMessageReceived","conduitPage"],hi="https://5e4d2c4b57ab409cb98d4c08b2014755@o4504288369836032.ingest.sentry.io/4504288371343360",_i=()=>(In({dsn:hi,integrations:[Tn({useEffect:ct.useEffect,useLocation:ye,useNavigationType:Dn,createRoutesFromChildren:$n,matchRoutes:Pn})],tracesSampleRate:.3,release:pi,enabled:!0,ignoreErrors:[...gi,/Unable to preload CSS/i,/dynamically imported module/i,/Failed to fetch dynamically imported module/i,/Loading chunk \d+ failed/i,/Loading CSS chunk \d+ failed/i,/ChunkLoadError/i,/Loading module .+ failed/i,/Cannot read propert.* of undefined/i,/Cannot read propert.* of null/i,/Network request failed/i,/Failed to fetch/i,/NetworkError/i,/The operation couldn't be completed/i],denyUrls:[/extensions\//i,/^chrome:\/\//i,/^chrome-extension:\/\//i,/external\//i],beforeSend(e){var n,r,s;const t=(s=(r=(n=e.exception)==null?void 0:n.values)==null?void 0:r[0])==null?void 0:s.value;return t&&(t.includes("Cannot read property")||t.includes("Cannot read properties")||t.includes("Network request failed")||t.includes("Failed to fetch"))?null:e}}),Rn(An)),Wt=c.lazy(()=>E(()=>import("./Timer-BfyVKQ8U.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]),import.meta.url)),Vt=c.lazy(()=>E(()=>import("./Countdown-CXFgDHND.js"),__vite__mapDeps([31,1,2,29,9,10,13,14,15,16,17,4,18,19,20,21,22,23,25,32,33,34,35,27,28,36]),import.meta.url)),Kt=c.lazy(()=>E(()=>import("./Backstage-BY9GL_rk.js"),__vite__mapDeps([37,1,2,7,9,10,11,12,13,14,15,16,17,4,18,19,20,21,29,35,38,23,22,25,27,28,39]),import.meta.url)),Ht=c.lazy(()=>E(()=>import("./Studio-DzXTmBx4.js"),__vite__mapDeps([40,1,2,9,10,13,14,15,16,17,4,18,19,20,21,25,22,23,35,24,27,28,41]),import.meta.url)),Qt=c.lazy(()=>E(()=>import("./TimelinePage-DbLt9rQi.js"),__vite__mapDeps([42,1,2,9,10,13,14,15,16,17,4,18,19,20,21,22,23,29,25,43,7,27,28,44]),import.meta.url)),Gt=c.lazy(()=>E(()=>import("./ProjectInfo-Bf5z4Xsv.js"),__vite__mapDeps([45,1,2,9,10,13,14,15,16,17,4,18,19,20,21,28,46]),import.meta.url)),bi=c.lazy(()=>E(()=>import("./ProtectedEditor-BvTFmv-F.js"),__vite__mapDeps([47,1,2,48,49,21,50,16,17,18,19,27,29,51,34,52,26,53,54,55,56,57,58,59,60,28,61,62,35,38,23,5,63,64,65,66,67,68]),import.meta.url)),Jt=c.lazy(()=>E(()=>import("./ProtectedCuesheet-COI1W_V3.js"),__vite__mapDeps([69,1,2,48,49,70,50,16,17,18,19,27,29,51,54,55,58,59,60,26,56,57,71,52,53,43,72,35,9,10,73,21,62,38,23,5,63,64,28,65,6,7,8,74]),import.meta.url)),Zt=c.lazy(()=>E(()=>import("./OperatorExport-CE4ajLPS.js"),__vite__mapDeps([75,1,2,48,49,29,9,10,15,16,17,4,18,19,20,32,33,21,52,26,53,71,43,59,56,57,72,62,35,38,23,5,63,6,7,8,25,27,76]),import.meta.url)),fe=c.lazy(()=>E(()=>import("./EditorFeatureWrapper-CV_zaDoG.js"),__vite__mapDeps([77,1,2,48,49,78]),import.meta.url)),vi=c.lazy(()=>E(()=>import("./RundownExport-C_q3KYN_.js"),__vite__mapDeps([79,1,2,54,55,48,49,70,50,16,17,18,19,27,29,51,58,59,60,26,56,57,71,52,53,43,72,35,9,10,73,61,34,5,7,80]),import.meta.url)),yi=c.lazy(()=>E(()=>import("./TimerControlExport-BJfhJc07.js"),__vite__mapDeps([81,1,2,54,55,48,49,58,59,60,66,67,56,57,34,82]),import.meta.url)),xi=c.lazy(()=>E(()=>import("./MessageControlExport-Dm8IjSr4.js"),__vite__mapDeps([83,1,2,54,55,48,49,18,19,56,57,84]),import.meta.url)),wi=_i();function Si(){return ta(),o.jsx(c.Suspense,{fallback:o.jsx(ke,{}),children:o.jsxs(wi,{children:[o.jsx(v,{path:"/",element:o.jsx(qn,{to:"/timer"})}),o.jsx(v,{path:"timer",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Wt,{})]})}),o.jsx(v,{path:"countdown",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Vt,{})]})}),o.jsx(v,{path:"backstage",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Kt,{})]})}),o.jsx(v,{path:"studio",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Ht,{})]})}),o.jsx(v,{path:"timeline",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Qt,{})]})}),o.jsx(v,{path:"info",element:o.jsxs(z,{children:[o.jsx($,{suppressSettings:!0,isNavigationLocked:O()}),o.jsx(Gt,{})]})}),o.jsx(v,{path:"editor",element:o.jsx(bi,{})}),o.jsx(v,{path:"cuesheet",element:o.jsx(Jt,{})}),o.jsx(v,{path:"op",element:o.jsxs(z,{children:[o.jsx($,{isNavigationLocked:O()}),o.jsx(Zt,{})]})}),o.jsx(v,{path:"rundown",element:o.jsx(fe,{children:o.jsx(vi,{})})}),o.jsx(v,{path:"timercontrol",element:o.jsx(fe,{children:o.jsx(yi,{})})}),o.jsx(v,{path:"messagecontrol",element:o.jsx(fe,{children:o.jsx(xi,{})})}),o.jsx(v,{path:"log",element:o.jsx(fe,{children:o.jsx(oi,{})})}),o.jsx(v,{path:"preset/:alias",element:o.jsx(ji,{})}),o.jsx(v,{path:"*",element:o.jsx(Ci,{})})]})})}const ki={[T.Cuesheet]:Jt,[T.Operator]:Zt,[T.Timer]:Wt,[T.Backstage]:Kt,[T.Timeline]:Qt,[T.StudioClock]:Ht,[T.Countdown]:Vt,[T.ProjectInfo]:Gt};function ji(){const{data:e,status:t}=ze(),{alias:n}=On(),r=c.useMemo(()=>{if(!(t==="pending"||!n))return e.find(i=>i.alias===n&&i.enabled)},[e,t,n]);if(t==="pending")return o.jsx(ke,{});const s=Zn==="rw";if(!r)return o.jsxs(o.Fragment,{children:[o.jsx($,{isNavigationLocked:!s,suppressSettings:!0}),o.jsx(De,{})]});const a=ki[r.target];return o.jsxs($t,{value:r,children:[o.jsx($,{isNavigationLocked:O(),suppressSettings:!0}),a?o.jsx(a,{}):o.jsx(De,{})]})}function Ci(){const{data:e,status:t}=ze(),n=ae(),r=ye(),s=c.useMemo(()=>t==="pending"?null:aa(r,e),[e,r,t]);return c.useEffect(()=>{s&&n(`/${s}`,{replace:!0})},[s,n]),t==="pending"?o.jsx(ke,{}):o.jsxs(o.Fragment,{children:[o.jsx($,{isNavigationLocked:O(),suppressSettings:!0}),o.jsx(De,{})]})}Rt();function Ei(){return o.jsx(Ln,{client:y,children:o.jsx(Xo,{children:o.jsx(Un,{children:o.jsxs(Fn,{basename:K,children:[o.jsxs("div",{className:"App",children:[o.jsx(nt,{children:o.jsxs(dr,{children:[o.jsx(Ho,{}),o.jsx(tr,{}),o.jsx(Si,{})]})}),o.jsx(Mn,{initialIsOpen:!1})]}),o.jsx(nt,{children:o.jsx("div",{id:"identify-portal"})})]})})})})}const Ni=document.getElementById("root"),Ii=zn.createRoot(Ni);Ii.render(o.jsx(c.StrictMode,{children:o.jsx(Ei,{})}));export{ml as $,el as A,I as B,Zi as C,qr as D,$c as E,St as F,Dc as G,uc as H,_e as I,tl as J,_c as K,ke as L,Q as M,Ji as N,T as O,$t as P,Ut as Q,Ai as R,Vn as S,ne as T,Hn as U,Ki as V,pl as W,Bi as X,Ba as Y,Ve as Z,ll as _,fi as a,cc as a$,gl as a0,ul as a1,qi as a2,Mi as a3,zi as a4,Ui as a5,Di as a6,Oi as a7,Li as a8,Wa as a9,He as aA,Ke as aB,ho as aC,Zc as aD,tc as aE,Fi as aF,Gi as aG,Me as aH,is as aI,xo as aJ,Et as aK,S as aL,_s as aM,oi as aN,Wi as aO,Xe as aP,Qi as aQ,eo as aR,Wc as aS,Qc as aT,Hc as aU,Kc as aV,Lt as aW,xl as aX,ys as aY,Vc as aZ,Fo as a_,wl as aa,ol as ab,Sl as ac,dl as ad,bl as ae,vl as af,yl as ag,hs as ah,Po as ai,fl as aj,J as ak,hl as al,_l as am,Ts as an,vs as ao,Fs as ap,zc as aq,Bc as ar,il as as,za as at,cl as au,Fc as av,ze as aw,bs as ax,ie as ay,Bn as az,Pt as b,mc as b0,dc as b1,lc as b2,V as b3,ge as b4,fc as b5,rr as b6,Lc as b7,re as b8,nl as b9,$ as bA,nt as bB,uo as bC,Do as bD,ai as bE,wt as bF,xt as bG,Hi as bH,X as bI,rl as bJ,sl as bK,y as bL,Mc as bM,po as bN,$o as bO,to as bP,ac as bQ,oc as bR,ic as bS,rc as bT,sc as bU,Zo as bV,xe as bW,Xs as ba,yc as bb,Zn as bc,Gc as bd,O as be,jo as bf,ec as bg,Vi as bh,al as bi,mr as bj,Yc as bk,kc as bl,Cc as bm,Ec as bn,jc as bo,Nc as bp,gc as bq,Z as br,Ic as bs,vc as bt,xc as bu,wc as bv,hc as bw,Yi as bx,nc as by,Cs as bz,Tc as c,Jc as d,k as e,qc as f,Ac as g,_t as h,yt as i,Rc as j,Oc as k,kt as l,fo as m,Sc as n,pc as o,Ot as p,ko as q,Xi as r,Qe as s,fr as t,Or as u,bc as v,Uc as w,Xc as x,bt as y,Pc as z};
|
|
3
|
-
//# sourceMappingURL=index-2lQ-45a9.js.map
|
|
Binary file
|
|
Binary file
|