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