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