@getontime/cli 4.4.2 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/assets/{Backstage-BdrcXNr9.js → Backstage-DQu8ne-1.js} +2 -2
- package/client/assets/Backstage-DQu8ne-1.js.br +0 -0
- package/client/assets/Backstage-DQu8ne-1.js.gz +0 -0
- package/client/assets/{Backstage-BdrcXNr9.js.map → Backstage-DQu8ne-1.js.map} +1 -1
- package/client/assets/{Countdown-DQM2ppPg.js → Countdown-COte1yne.js} +2 -2
- package/client/assets/Countdown-COte1yne.js.br +0 -0
- package/client/assets/Countdown-COte1yne.js.gz +0 -0
- package/client/assets/{Countdown-DQM2ppPg.js.map → Countdown-COte1yne.js.map} +1 -1
- package/client/assets/CuesheetTable-BQfxAp-I.js +2 -0
- package/client/assets/CuesheetTable-BQfxAp-I.js.br +0 -0
- package/client/assets/CuesheetTable-BQfxAp-I.js.gz +0 -0
- package/client/assets/CuesheetTable-BQfxAp-I.js.map +1 -0
- package/client/assets/CustomTranslationModal-C5mAtBjW.js +2 -0
- package/client/assets/CustomTranslationModal-C5mAtBjW.js.br +0 -0
- package/client/assets/CustomTranslationModal-C5mAtBjW.js.gz +0 -0
- package/client/assets/{CustomTranslationModal-CML7Vsot.js.map → CustomTranslationModal-C5mAtBjW.js.map} +1 -1
- package/client/assets/{DelayIndicator-DKS6mZdB.js → DelayIndicator-B0cudY9N.js} +2 -2
- package/client/assets/DelayIndicator-B0cudY9N.js.br +0 -0
- package/client/assets/DelayIndicator-B0cudY9N.js.gz +0 -0
- package/client/assets/DelayIndicator-B0cudY9N.js.map +1 -0
- package/client/assets/{EditorFeatureWrapper-C1vLQxiy.js → EditorFeatureWrapper-DpDaCaJ3.js} +2 -2
- package/client/assets/EditorFeatureWrapper-DpDaCaJ3.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-DpDaCaJ3.js.gz +0 -0
- package/client/assets/{EditorFeatureWrapper-C1vLQxiy.js.map → EditorFeatureWrapper-DpDaCaJ3.js.map} +1 -1
- package/client/assets/{EditorUtils-BLcTuWz1.js → EditorUtils-k5KpETPG.js} +2 -2
- package/client/assets/EditorUtils-k5KpETPG.js.br +0 -0
- package/client/assets/EditorUtils-k5KpETPG.js.gz +0 -0
- package/client/assets/{EditorUtils-BLcTuWz1.js.map → EditorUtils-k5KpETPG.js.map} +1 -1
- package/client/assets/EmptyPage-aTb22KTq.js +2 -0
- package/client/assets/EmptyPage-aTb22KTq.js.br +0 -0
- package/client/assets/EmptyPage-aTb22KTq.js.gz +0 -0
- package/client/assets/{EmptyPage-CYVrjOvI.js.map → EmptyPage-aTb22KTq.js.map} +1 -1
- package/client/assets/{FollowButton-DcSbb4R_.js → FollowButton--Bj9S6jO.js} +2 -2
- package/client/assets/FollowButton--Bj9S6jO.js.br +0 -0
- package/client/assets/FollowButton--Bj9S6jO.js.gz +0 -0
- package/client/assets/{FollowButton-DcSbb4R_.js.map → FollowButton--Bj9S6jO.js.map} +1 -1
- package/client/assets/MessageControlExport-BN6OfADo.js +3 -0
- package/client/assets/MessageControlExport-BN6OfADo.js.br +0 -0
- package/client/assets/MessageControlExport-BN6OfADo.js.gz +0 -0
- package/client/assets/{MessageControlExport-BgT9JaXk.js.map → MessageControlExport-BN6OfADo.js.map} +1 -1
- package/client/assets/{MultiPartProgressBar-W2a-JWPY.js → MultiPartProgressBar-BlLJNQ0D.js} +2 -2
- package/client/assets/MultiPartProgressBar-BlLJNQ0D.js.br +0 -0
- package/client/assets/MultiPartProgressBar-BlLJNQ0D.js.gz +0 -0
- package/client/assets/{MultiPartProgressBar-W2a-JWPY.js.map → MultiPartProgressBar-BlLJNQ0D.js.map} +1 -1
- package/client/assets/{OperatorExport-CbWojpp6.js → OperatorExport-CmgIl1lz.js} +2 -2
- package/client/assets/OperatorExport-CmgIl1lz.js.br +0 -0
- package/client/assets/OperatorExport-CmgIl1lz.js.gz +0 -0
- package/client/assets/OperatorExport-CmgIl1lz.js.map +1 -0
- package/client/assets/OverviewWrapper-B4nU68Eq.js +2 -0
- package/client/assets/OverviewWrapper-B4nU68Eq.js.br +0 -0
- package/client/assets/OverviewWrapper-B4nU68Eq.js.gz +0 -0
- package/client/assets/{OverviewWrapper-B2i8d3rt.js.map → OverviewWrapper-B4nU68Eq.js.map} +1 -1
- package/client/assets/OverviewWrapper-fPfl6o_p.css +1 -0
- package/client/assets/OverviewWrapper-fPfl6o_p.css.br +0 -0
- package/client/assets/OverviewWrapper-fPfl6o_p.css.gz +0 -0
- package/client/assets/{PipHost-Dz2oy7XG.js → PipHost-BZy7ouDv.js} +2 -2
- package/client/assets/PipHost-BZy7ouDv.js.br +0 -0
- package/client/assets/PipHost-BZy7ouDv.js.gz +0 -0
- package/client/assets/{PipHost-Dz2oy7XG.js.map → PipHost-BZy7ouDv.js.map} +1 -1
- package/client/assets/{ProjectInfo-BR_7Hp5u.js → ProjectInfo-D0X9vdIX.js} +2 -2
- package/client/assets/ProjectInfo-D0X9vdIX.js.br +0 -0
- package/client/assets/ProjectInfo-D0X9vdIX.js.gz +0 -0
- package/client/assets/{ProjectInfo-BR_7Hp5u.js.map → ProjectInfo-D0X9vdIX.js.map} +1 -1
- package/client/assets/ProtectRoute-DSilyhst.js +2 -0
- package/client/assets/ProtectRoute-DSilyhst.js.br +0 -0
- package/client/assets/ProtectRoute-DSilyhst.js.gz +0 -0
- package/client/assets/{ProtectRoute-Bxq6q7ba.js.map → ProtectRoute-DSilyhst.js.map} +1 -1
- package/client/assets/ProtectedCuesheet-DRTfZTZN.js +2 -0
- package/client/assets/ProtectedCuesheet-DRTfZTZN.js.br +0 -0
- package/client/assets/ProtectedCuesheet-DRTfZTZN.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-DRTfZTZN.js.map +1 -0
- package/client/assets/ProtectedEditor-DNOiQqIU.js +3 -0
- package/client/assets/ProtectedEditor-DNOiQqIU.js.br +0 -0
- package/client/assets/ProtectedEditor-DNOiQqIU.js.gz +0 -0
- package/client/assets/ProtectedEditor-DNOiQqIU.js.map +1 -0
- package/client/assets/ProtectedEditor-DyaLP0mG.css +1 -0
- package/client/assets/ProtectedEditor-DyaLP0mG.css.br +0 -0
- package/client/assets/ProtectedEditor-DyaLP0mG.css.gz +0 -0
- package/client/assets/{RundownExport-25orDQIW.js → RundownExport-Bvc1J50m.js} +2 -2
- package/client/assets/RundownExport-Bvc1J50m.js.br +0 -0
- package/client/assets/RundownExport-Bvc1J50m.js.gz +0 -0
- package/client/assets/RundownExport-Bvc1J50m.js.map +1 -0
- package/client/assets/{Select-BnGTAeXJ.js → Select-CvUrsmYI.js} +2 -2
- package/client/assets/Select-CvUrsmYI.js.br +0 -0
- package/client/assets/Select-CvUrsmYI.js.gz +0 -0
- package/client/assets/{Select-BnGTAeXJ.js.map → Select-CvUrsmYI.js.map} +1 -1
- package/client/assets/{Studio-BK2Klo_K.js → Studio-BSSiKd6k.js} +2 -2
- package/client/assets/Studio-BSSiKd6k.js.br +0 -0
- package/client/assets/Studio-BSSiKd6k.js.gz +0 -0
- package/client/assets/{Studio-BK2Klo_K.js.map → Studio-BSSiKd6k.js.map} +1 -1
- package/client/assets/{StyleEditor-DIHQ1PUV.js → StyleEditor-buc-zQHR.js} +2 -2
- package/client/assets/StyleEditor-buc-zQHR.js.br +0 -0
- package/client/assets/StyleEditor-buc-zQHR.js.gz +0 -0
- package/client/assets/{StyleEditor-DIHQ1PUV.js.map → StyleEditor-buc-zQHR.js.map} +1 -1
- package/client/assets/{SuperscriptPeriod-EEedc9rG.js → SuperscriptPeriod-CSX8zFgq.js} +2 -2
- package/client/assets/SuperscriptPeriod-CSX8zFgq.js.br +0 -0
- package/client/assets/SuperscriptPeriod-CSX8zFgq.js.gz +0 -0
- package/client/assets/{SuperscriptPeriod-EEedc9rG.js.map → SuperscriptPeriod-CSX8zFgq.js.map} +1 -1
- package/client/assets/{SuperscriptTime-BVanhNvd.js → SuperscriptTime-retbmT5o.js} +2 -2
- package/client/assets/SuperscriptTime-retbmT5o.js.br +0 -0
- package/client/assets/SuperscriptTime-retbmT5o.js.gz +0 -0
- package/client/assets/{SuperscriptTime-BVanhNvd.js.map → SuperscriptTime-retbmT5o.js.map} +1 -1
- package/client/assets/SwatchPicker-DuWAohyD.js +2 -0
- package/client/assets/SwatchPicker-DuWAohyD.js.br +0 -0
- package/client/assets/SwatchPicker-DuWAohyD.js.gz +0 -0
- package/client/assets/{SwatchPicker-Ckpchvjo.js.map → SwatchPicker-DuWAohyD.js.map} +1 -1
- package/client/assets/TimeElements-BfxdLkpO.js +2 -0
- package/client/assets/TimeElements-BfxdLkpO.js.br +0 -0
- package/client/assets/TimeElements-BfxdLkpO.js.gz +0 -0
- package/client/assets/{TimeElements-CYIgGk0T.js.map → TimeElements-BfxdLkpO.js.map} +1 -1
- package/client/assets/{TimeInput-Cwl9vLWA.js → TimeInput-BjOTgjcv.js} +2 -2
- package/client/assets/TimeInput-BjOTgjcv.js.br +0 -0
- package/client/assets/TimeInput-BjOTgjcv.js.gz +0 -0
- package/client/assets/{TimeInput-Cwl9vLWA.js.map → TimeInput-BjOTgjcv.js.map} +1 -1
- package/client/assets/{TimelinePage-D4QNdk-Z.js → TimelinePage-pjff5TxG.js} +2 -2
- package/client/assets/TimelinePage-pjff5TxG.js.br +0 -0
- package/client/assets/TimelinePage-pjff5TxG.js.gz +0 -0
- package/client/assets/TimelinePage-pjff5TxG.js.map +1 -0
- package/client/assets/{Timer-BJQKNHfo.js → Timer-ahF-O2zN.js} +2 -2
- package/client/assets/Timer-ahF-O2zN.js.br +0 -0
- package/client/assets/Timer-ahF-O2zN.js.gz +0 -0
- package/client/assets/{Timer-BJQKNHfo.js.map → Timer-ahF-O2zN.js.map} +1 -1
- package/client/assets/TimerControlExport-De2n8HWG.js +2 -0
- package/client/assets/TimerControlExport-De2n8HWG.js.br +0 -0
- package/client/assets/TimerControlExport-De2n8HWG.js.gz +0 -0
- package/client/assets/TimerControlExport-De2n8HWG.js.map +1 -0
- package/client/assets/TimerDisplay-DeFQvmo9.js +2 -0
- package/client/assets/TimerDisplay-DeFQvmo9.js.br +0 -0
- package/client/assets/TimerDisplay-DeFQvmo9.js.gz +0 -0
- package/client/assets/{TimerDisplay-tVcUk9j3.js.map → TimerDisplay-DeFQvmo9.js.map} +1 -1
- package/client/assets/{TitleCard-BNjv58eq.js → TitleCard-BiaQE4ZK.js} +2 -2
- package/client/assets/TitleCard-BiaQE4ZK.js.br +0 -0
- package/client/assets/TitleCard-BiaQE4ZK.js.gz +0 -0
- package/client/assets/{TitleCard-BNjv58eq.js.map → TitleCard-BiaQE4ZK.js.map} +1 -1
- package/client/assets/{Tooltip-DZJ7u9gm.js → Tooltip-C5iPq6NR.js} +2 -2
- package/client/assets/Tooltip-C5iPq6NR.js.br +0 -0
- package/client/assets/Tooltip-C5iPq6NR.js.gz +0 -0
- package/client/assets/{Tooltip-DZJ7u9gm.js.map → Tooltip-C5iPq6NR.js.map} +1 -1
- package/client/assets/{ViewLogo-2I7w5Yms.js → ViewLogo-DcDhyyIF.js} +2 -2
- package/client/assets/ViewLogo-DcDhyyIF.js.br +0 -0
- package/client/assets/ViewLogo-DcDhyyIF.js.gz +0 -0
- package/client/assets/{ViewLogo-2I7w5Yms.js.map → ViewLogo-DcDhyyIF.js.map} +1 -1
- package/client/assets/{ViewParamsEditor-BX2RM8sx.js → ViewParamsEditor-DeMdkxxC.js} +2 -2
- package/client/assets/ViewParamsEditor-DeMdkxxC.js.br +0 -0
- package/client/assets/ViewParamsEditor-DeMdkxxC.js.gz +0 -0
- package/client/assets/{ViewParamsEditor-BX2RM8sx.js.map → ViewParamsEditor-DeMdkxxC.js.map} +1 -1
- package/client/assets/{editorSettings-_x6YKRfR.js → editorSettings-xk5GwlLv.js} +2 -2
- package/client/assets/editorSettings-xk5GwlLv.js.br +0 -0
- package/client/assets/editorSettings-xk5GwlLv.js.gz +0 -0
- package/client/assets/{editorSettings-_x6YKRfR.js.map → editorSettings-xk5GwlLv.js.map} +1 -1
- package/client/assets/{getProgress-ZUTmCn_v.js → getProgress-CWSCZOIN.js} +2 -2
- package/client/assets/getProgress-CWSCZOIN.js.br +0 -0
- package/client/assets/getProgress-CWSCZOIN.js.gz +0 -0
- package/client/assets/{getProgress-ZUTmCn_v.js.map → getProgress-CWSCZOIN.js.map} +1 -1
- package/client/assets/index-3aosT33y.js +3 -0
- package/client/assets/index-3aosT33y.js.br +0 -0
- package/client/assets/index-3aosT33y.js.gz +0 -0
- package/client/assets/index-3aosT33y.js.map +1 -0
- package/client/assets/{offset-VthsmtrO.js → offset-yVqq_CB1.js} +2 -2
- package/client/assets/offset-yVqq_CB1.js.br +0 -0
- package/client/assets/offset-yVqq_CB1.js.gz +0 -0
- package/client/assets/{offset-VthsmtrO.js.map → offset-yVqq_CB1.js.map} +1 -1
- package/client/assets/parseUserTime-wAKk9aCJ.js +2 -0
- package/client/assets/parseUserTime-wAKk9aCJ.js.br +0 -0
- package/client/assets/parseUserTime-wAKk9aCJ.js.gz +0 -0
- package/client/assets/{parseUserTime-sZbEBi61.js.map → parseUserTime-wAKk9aCJ.js.map} +1 -1
- package/client/assets/{playbackstate-Dl_ZJABT.js → playbackstate-BZ9WYn2k.js} +2 -2
- package/client/assets/playbackstate-BZ9WYn2k.js.br +0 -0
- package/client/assets/playbackstate-BZ9WYn2k.js.gz +0 -0
- package/client/assets/{playbackstate-Dl_ZJABT.js.map → playbackstate-BZ9WYn2k.js.map} +1 -1
- package/client/assets/{presentation.utils-Z61KykAH.js → presentation.utils-lyuuD4A5.js} +2 -2
- package/client/assets/presentation.utils-lyuuD4A5.js.br +0 -0
- package/client/assets/presentation.utils-lyuuD4A5.js.gz +0 -0
- package/client/assets/{presentation.utils-Z61KykAH.js.map → presentation.utils-lyuuD4A5.js.map} +1 -1
- package/client/assets/{rundownUtils-CXZRD6yP.js → rundownUtils-XX_c4Pcl.js} +2 -2
- package/client/assets/rundownUtils-XX_c4Pcl.js.br +0 -0
- package/client/assets/rundownUtils-XX_c4Pcl.js.gz +0 -0
- package/client/assets/{rundownUtils-CXZRD6yP.js.map → rundownUtils-XX_c4Pcl.js.map} +1 -1
- package/client/assets/{timer.utils-B4bvsns3.js → timer.utils-CWHFVz06.js} +2 -2
- package/client/assets/timer.utils-CWHFVz06.js.br +0 -0
- package/client/assets/timer.utils-CWHFVz06.js.gz +0 -0
- package/client/assets/{timer.utils-B4bvsns3.js.map → timer.utils-CWHFVz06.js.map} +1 -1
- package/client/assets/useCustomFields-kBD1jvDA.js +2 -0
- package/client/assets/useCustomFields-kBD1jvDA.js.br +0 -0
- package/client/assets/useCustomFields-kBD1jvDA.js.gz +0 -0
- package/client/assets/{useCustomFields-BBE4LBBr.js.map → useCustomFields-kBD1jvDA.js.map} +1 -1
- package/client/assets/{useEventSelection-Bpbu89c7.js → useEventSelection-Cvdw9all.js} +2 -2
- package/client/assets/useEventSelection-Cvdw9all.js.br +0 -0
- package/client/assets/useEventSelection-Cvdw9all.js.gz +0 -0
- package/client/assets/{useEventSelection-Bpbu89c7.js.map → useEventSelection-Cvdw9all.js.map} +1 -1
- package/client/assets/{useProjectData-C110zIXC.js → useProjectData-gGT2eczr.js} +2 -2
- package/client/assets/useProjectData-gGT2eczr.js.br +0 -0
- package/client/assets/useProjectData-gGT2eczr.js.gz +0 -0
- package/client/assets/{useProjectData-C110zIXC.js.map → useProjectData-gGT2eczr.js.map} +1 -1
- package/client/assets/{useReport-DqSBq4MG.js → useReport-CG6m_Zb0.js} +2 -2
- package/client/assets/useReport-CG6m_Zb0.js.br +0 -0
- package/client/assets/useReport-CG6m_Zb0.js.gz +0 -0
- package/client/assets/{useReport-DqSBq4MG.js.map → useReport-CG6m_Zb0.js.map} +1 -1
- package/client/assets/{useRundown-DAo6huE4.js → useRundown-C6stroSA.js} +2 -2
- package/client/assets/useRundown-C6stroSA.js.br +0 -0
- package/client/assets/useRundown-C6stroSA.js.gz +0 -0
- package/client/assets/useRundown-C6stroSA.js.map +1 -0
- package/client/assets/{useSelectAndRevealEntry-DTg0hmxA.js → useSelectAndRevealEntry-D79sYFHr.js} +2 -2
- package/client/assets/useSelectAndRevealEntry-D79sYFHr.js.br +0 -0
- package/client/assets/useSelectAndRevealEntry-D79sYFHr.js.gz +0 -0
- package/client/assets/{useSelectAndRevealEntry-DTg0hmxA.js.map → useSelectAndRevealEntry-D79sYFHr.js.map} +1 -1
- package/client/assets/{useWindowTitle-DM8dIp8L.js → useWindowTitle-CQ8nEeel.js} +2 -2
- package/client/assets/useWindowTitle-CQ8nEeel.js.br +0 -0
- package/client/assets/useWindowTitle-CQ8nEeel.js.gz +0 -0
- package/client/assets/{useWindowTitle-DM8dIp8L.js.map → useWindowTitle-CQ8nEeel.js.map} +1 -1
- package/client/assets/{validateEvent-GnPt-e9-.js → validateEvent-BnwPmDph.js} +2 -2
- package/client/assets/validateEvent-BnwPmDph.js.br +0 -0
- package/client/assets/validateEvent-BnwPmDph.js.gz +0 -0
- package/client/assets/{validateEvent-GnPt-e9-.js.map → validateEvent-BnwPmDph.js.map} +1 -1
- package/client/assets/{vendor-BKUJ0_Du.js → vendor-Dt3_Fdfs.js} +2 -2
- package/client/assets/vendor-Dt3_Fdfs.js.br +0 -0
- package/client/assets/vendor-Dt3_Fdfs.js.gz +0 -0
- package/client/assets/{vendor-BKUJ0_Du.js.map → vendor-Dt3_Fdfs.js.map} +1 -1
- package/client/assets/{viewLoader.utils-4lL4PiNI.js → viewLoader.utils-H7r-zNPP.js} +2 -2
- package/client/assets/viewLoader.utils-H7r-zNPP.js.br +0 -0
- package/client/assets/viewLoader.utils-H7r-zNPP.js.gz +0 -0
- package/client/assets/{viewLoader.utils-4lL4PiNI.js.map → viewLoader.utils-H7r-zNPP.js.map} +1 -1
- package/client/assets/{viewUtils-29a3Mmiu.js → viewUtils-k0tARVDN.js} +2 -2
- package/client/assets/viewUtils-k0tARVDN.js.br +0 -0
- package/client/assets/viewUtils-k0tARVDN.js.gz +0 -0
- package/client/assets/{viewUtils-29a3Mmiu.js.map → viewUtils-k0tARVDN.js.map} +1 -1
- package/client/index.html +2 -2
- package/package.json +1 -1
- package/server/index.cjs +104 -104
- package/client/assets/Backstage-BdrcXNr9.js.br +0 -0
- package/client/assets/Backstage-BdrcXNr9.js.gz +0 -0
- package/client/assets/Countdown-DQM2ppPg.js.br +0 -0
- package/client/assets/Countdown-DQM2ppPg.js.gz +0 -0
- package/client/assets/CuesheetTable-B5LQVh5m.js +0 -2
- package/client/assets/CuesheetTable-B5LQVh5m.js.br +0 -0
- package/client/assets/CuesheetTable-B5LQVh5m.js.gz +0 -0
- package/client/assets/CuesheetTable-B5LQVh5m.js.map +0 -1
- package/client/assets/CustomTranslationModal-CML7Vsot.js +0 -2
- package/client/assets/CustomTranslationModal-CML7Vsot.js.br +0 -0
- package/client/assets/CustomTranslationModal-CML7Vsot.js.gz +0 -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 +0 -1
- package/client/assets/EditorFeatureWrapper-C1vLQxiy.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-C1vLQxiy.js.gz +0 -0
- package/client/assets/EditorUtils-BLcTuWz1.js.br +0 -0
- package/client/assets/EditorUtils-BLcTuWz1.js.gz +0 -0
- package/client/assets/EmptyPage-CYVrjOvI.js +0 -2
- package/client/assets/EmptyPage-CYVrjOvI.js.br +0 -0
- package/client/assets/EmptyPage-CYVrjOvI.js.gz +0 -0
- package/client/assets/FollowButton-DcSbb4R_.js.br +0 -0
- package/client/assets/FollowButton-DcSbb4R_.js.gz +0 -0
- package/client/assets/MessageControlExport-BgT9JaXk.js +0 -3
- package/client/assets/MessageControlExport-BgT9JaXk.js.br +0 -0
- package/client/assets/MessageControlExport-BgT9JaXk.js.gz +0 -0
- package/client/assets/MultiPartProgressBar-W2a-JWPY.js.br +0 -0
- package/client/assets/MultiPartProgressBar-W2a-JWPY.js.gz +0 -0
- package/client/assets/OperatorExport-CbWojpp6.js.br +0 -0
- package/client/assets/OperatorExport-CbWojpp6.js.gz +0 -0
- package/client/assets/OperatorExport-CbWojpp6.js.map +0 -1
- package/client/assets/OverviewWrapper-B2i8d3rt.js +0 -2
- package/client/assets/OverviewWrapper-B2i8d3rt.js.br +0 -0
- package/client/assets/OverviewWrapper-B2i8d3rt.js.gz +0 -0
- package/client/assets/OverviewWrapper-DOYzR0Ef.css +0 -1
- package/client/assets/OverviewWrapper-DOYzR0Ef.css.br +0 -0
- package/client/assets/OverviewWrapper-DOYzR0Ef.css.gz +0 -0
- package/client/assets/PipHost-Dz2oy7XG.js.br +0 -0
- package/client/assets/PipHost-Dz2oy7XG.js.gz +0 -0
- package/client/assets/ProjectInfo-BR_7Hp5u.js.br +0 -0
- package/client/assets/ProjectInfo-BR_7Hp5u.js.gz +0 -0
- package/client/assets/ProtectRoute-Bxq6q7ba.js +0 -2
- package/client/assets/ProtectRoute-Bxq6q7ba.js.br +0 -0
- package/client/assets/ProtectRoute-Bxq6q7ba.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-C7AqD2dy.js +0 -2
- package/client/assets/ProtectedCuesheet-C7AqD2dy.js.br +0 -0
- package/client/assets/ProtectedCuesheet-C7AqD2dy.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-C7AqD2dy.js.map +0 -1
- package/client/assets/ProtectedEditor-CsfvVyOU.js +0 -3
- 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 +0 -1
- package/client/assets/ProtectedEditor-DID9cfOA.css +0 -1
- package/client/assets/ProtectedEditor-DID9cfOA.css.br +0 -0
- package/client/assets/ProtectedEditor-DID9cfOA.css.gz +0 -0
- package/client/assets/RundownExport-25orDQIW.js.br +0 -0
- package/client/assets/RundownExport-25orDQIW.js.gz +0 -0
- package/client/assets/RundownExport-25orDQIW.js.map +0 -1
- package/client/assets/Select-BnGTAeXJ.js.br +0 -0
- package/client/assets/Select-BnGTAeXJ.js.gz +0 -0
- package/client/assets/Studio-BK2Klo_K.js.br +0 -0
- package/client/assets/Studio-BK2Klo_K.js.gz +0 -0
- package/client/assets/StyleEditor-DIHQ1PUV.js.br +0 -0
- package/client/assets/StyleEditor-DIHQ1PUV.js.gz +0 -0
- package/client/assets/SuperscriptPeriod-EEedc9rG.js.br +0 -0
- package/client/assets/SuperscriptPeriod-EEedc9rG.js.gz +0 -0
- package/client/assets/SuperscriptTime-BVanhNvd.js.br +0 -0
- package/client/assets/SuperscriptTime-BVanhNvd.js.gz +0 -0
- package/client/assets/SwatchPicker-Ckpchvjo.js +0 -2
- package/client/assets/SwatchPicker-Ckpchvjo.js.br +0 -0
- package/client/assets/SwatchPicker-Ckpchvjo.js.gz +0 -0
- package/client/assets/TimeElements-CYIgGk0T.js +0 -2
- package/client/assets/TimeElements-CYIgGk0T.js.br +0 -0
- package/client/assets/TimeElements-CYIgGk0T.js.gz +0 -0
- package/client/assets/TimeInput-Cwl9vLWA.js.br +0 -0
- package/client/assets/TimeInput-Cwl9vLWA.js.gz +0 -0
- package/client/assets/TimelinePage-D4QNdk-Z.js.br +0 -0
- package/client/assets/TimelinePage-D4QNdk-Z.js.gz +0 -0
- package/client/assets/TimelinePage-D4QNdk-Z.js.map +0 -1
- package/client/assets/Timer-BJQKNHfo.js.br +0 -0
- package/client/assets/Timer-BJQKNHfo.js.gz +0 -0
- package/client/assets/TimerControlExport-Ba1vifNg.js +0 -2
- package/client/assets/TimerControlExport-Ba1vifNg.js.br +0 -0
- package/client/assets/TimerControlExport-Ba1vifNg.js.gz +0 -0
- package/client/assets/TimerControlExport-Ba1vifNg.js.map +0 -1
- package/client/assets/TimerDisplay-tVcUk9j3.js +0 -2
- package/client/assets/TimerDisplay-tVcUk9j3.js.br +0 -0
- package/client/assets/TimerDisplay-tVcUk9j3.js.gz +0 -0
- package/client/assets/TitleCard-BNjv58eq.js.br +0 -0
- package/client/assets/TitleCard-BNjv58eq.js.gz +0 -0
- package/client/assets/Tooltip-DZJ7u9gm.js.br +0 -4
- package/client/assets/Tooltip-DZJ7u9gm.js.gz +0 -0
- package/client/assets/ViewLogo-2I7w5Yms.js.br +0 -0
- package/client/assets/ViewLogo-2I7w5Yms.js.gz +0 -0
- package/client/assets/ViewParamsEditor-BX2RM8sx.js.br +0 -0
- package/client/assets/ViewParamsEditor-BX2RM8sx.js.gz +0 -0
- package/client/assets/editorSettings-_x6YKRfR.js.br +0 -6
- package/client/assets/editorSettings-_x6YKRfR.js.gz +0 -0
- package/client/assets/getProgress-ZUTmCn_v.js.br +0 -0
- package/client/assets/getProgress-ZUTmCn_v.js.gz +0 -0
- package/client/assets/index-Dm-4OTmY.js +0 -3
- 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 +0 -1
- package/client/assets/offset-VthsmtrO.js.br +0 -0
- package/client/assets/offset-VthsmtrO.js.gz +0 -0
- package/client/assets/parseUserTime-sZbEBi61.js +0 -2
- package/client/assets/parseUserTime-sZbEBi61.js.br +0 -0
- package/client/assets/parseUserTime-sZbEBi61.js.gz +0 -0
- package/client/assets/playbackstate-Dl_ZJABT.js.br +0 -0
- package/client/assets/playbackstate-Dl_ZJABT.js.gz +0 -0
- package/client/assets/presentation.utils-Z61KykAH.js.br +0 -0
- package/client/assets/presentation.utils-Z61KykAH.js.gz +0 -0
- package/client/assets/rundownUtils-CXZRD6yP.js.br +0 -0
- package/client/assets/rundownUtils-CXZRD6yP.js.gz +0 -0
- package/client/assets/timer.utils-B4bvsns3.js.br +0 -0
- package/client/assets/timer.utils-B4bvsns3.js.gz +0 -0
- package/client/assets/useCustomFields-BBE4LBBr.js +0 -2
- package/client/assets/useCustomFields-BBE4LBBr.js.br +0 -0
- package/client/assets/useCustomFields-BBE4LBBr.js.gz +0 -0
- package/client/assets/useEventSelection-Bpbu89c7.js.br +0 -0
- package/client/assets/useEventSelection-Bpbu89c7.js.gz +0 -0
- package/client/assets/useProjectData-C110zIXC.js.br +0 -0
- package/client/assets/useProjectData-C110zIXC.js.gz +0 -0
- package/client/assets/useReport-DqSBq4MG.js.br +0 -0
- package/client/assets/useReport-DqSBq4MG.js.gz +0 -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 +0 -1
- package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.br +0 -0
- package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.gz +0 -0
- package/client/assets/useWindowTitle-DM8dIp8L.js.br +0 -0
- package/client/assets/useWindowTitle-DM8dIp8L.js.gz +0 -0
- package/client/assets/validateEvent-GnPt-e9-.js.br +0 -0
- package/client/assets/validateEvent-GnPt-e9-.js.gz +0 -0
- package/client/assets/vendor-BKUJ0_Du.js.br +0 -0
- package/client/assets/vendor-BKUJ0_Du.js.gz +0 -0
- package/client/assets/viewLoader.utils-4lL4PiNI.js.br +0 -0
- package/client/assets/viewLoader.utils-4lL4PiNI.js.gz +0 -0
- package/client/assets/viewUtils-29a3Mmiu.js.br +0 -0
- package/client/assets/viewUtils-29a3Mmiu.js.gz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Timer-BJQKNHfo.js","sources":["../../src/views/timer/timer.options.ts","../../src/views/timer/useTimerData.ts","../../src/views/timer/Timer.tsx"],"sourcesContent":["import { use, useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\nimport { CustomFields, OntimeEvent, TimerType } from 'ontime-types';\nimport { validateTimerType } from 'ontime-utils';\n\nimport type { SelectOption } from '../../common/components/select/Select';\nimport {\n getTimeOption,\n hideTimerSeconds,\n showLeadingZeros,\n} from '../../common/components/view-params-editor/common.options';\nimport { OptionTitle } from '../../common/components/view-params-editor/constants';\nimport { ViewOption } from '../../common/components/view-params-editor/viewParams.types';\nimport { makeOptionsFromCustomFields } from '../../common/components/view-params-editor/viewParams.utils';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport { isStringBoolean, makeColourString } from '../common/viewUtils';\n\n// manually match the properties of TimerType excluding the None\nconst timerDisplayOptions: SelectOption[] = [\n { value: 'no-overrides', label: 'No Overrides' },\n { value: TimerType.CountUp, label: 'Count Up' },\n { value: TimerType.CountDown, label: 'Count Down' },\n { value: TimerType.Clock, label: 'Clock' },\n];\n\nexport const getTimerOptions = (timeFormat: string, customFields: CustomFields): ViewOption[] => {\n const mainOptions = makeOptionsFromCustomFields(customFields, [\n { value: 'none', label: 'None' },\n { value: 'title', label: 'Title' },\n ]);\n const secondaryOptions = makeOptionsFromCustomFields(customFields, [\n { value: 'none', label: 'None' },\n { value: 'title', label: 'Title' },\n { value: 'note', label: 'Note' },\n { value: 'parent', label: 'Group Title' },\n ]);\n\n return [\n { title: OptionTitle.ClockOptions, collapsible: true, options: [getTimeOption(timeFormat)] },\n {\n title: OptionTitle.TimerOptions,\n collapsible: true,\n options: [\n hideTimerSeconds,\n showLeadingZeros,\n {\n id: 'timerType',\n title: 'Timer type',\n description: 'Override the timer type',\n type: 'option',\n values: timerDisplayOptions,\n defaultValue: 'no-overrides',\n },\n {\n id: 'freezeOvertime',\n title: 'Freeze Overtime',\n description: 'If active, the timer will not count into negative numbers',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'freezeMessage',\n title: 'Freeze Message',\n description:\n 'An optional message to show when the timer is in overtime (must be set in combination with Freeze Overtime)',\n type: 'string',\n defaultValue: '',\n placeholder: 'e.g. Time is up!',\n },\n {\n id: 'hidePhase',\n title: 'Hide progress styles',\n description: 'Whether to suppress the progress styles (warning, danger and overtime)',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n {\n title: OptionTitle.DataSources,\n collapsible: true,\n options: [\n {\n id: 'main',\n title: 'Main text',\n description: 'Select the data source for the main text',\n type: 'option',\n values: mainOptions,\n defaultValue: 'title',\n },\n {\n id: 'secondary-src',\n title: 'Secondary text',\n description: 'Select the data source for the secondary text',\n type: 'option',\n values: secondaryOptions,\n defaultValue: 'none',\n },\n ],\n },\n {\n title: OptionTitle.ElementVisibility,\n collapsible: true,\n options: [\n {\n id: 'hideClock',\n title: 'Hide Time Now',\n description: 'Hides the Time Now field',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'hideCards',\n title: 'Hide Cards',\n description: 'Hides the Now and Next cards',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'hideProgress',\n title: 'Hide progress bar',\n description: 'Hides the progress bar',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'hideMessage',\n title: 'Hide Timer Message',\n description: 'Prevents displaying fullscreen messages in the timer',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'hideSecondary',\n title: 'Hide Auxiliary timer / Secondary message',\n description: 'Prevents the screen from displaying the secondary timer field',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'hideLogo',\n title: 'Hide the project logo',\n description: 'Prevents the screen from displaying the given project logo',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n {\n title: OptionTitle.StyleOverride,\n collapsible: true,\n options: [\n {\n id: 'font',\n title: 'Font',\n description: 'Font family, will use the fonts available in the system',\n type: 'string',\n placeholder: 'Open Sans (default)',\n },\n {\n id: 'keyColour',\n title: 'Key Colour',\n description: 'Background or key colour for entire view. Default: #101010',\n type: 'colour',\n defaultValue: '101010',\n },\n {\n id: 'timerColour',\n title: 'Timer Colour',\n description: 'Timer colour. Default: #f6f6f6',\n type: 'colour',\n defaultValue: 'f6f6f6',\n },\n ],\n },\n ];\n};\n\ntype TimerOptions = {\n hideClock: boolean;\n hideCards: boolean;\n hideProgress: boolean;\n hideMessage: boolean;\n hideSecondary: boolean;\n hideLogo: boolean;\n hideTimerSeconds: boolean;\n removeLeadingZeros: boolean;\n mainSource: keyof OntimeEvent | null | 'none';\n secondarySource: keyof OntimeEvent | null | 'none';\n timerType?: TimerType;\n freezeOvertime: boolean;\n freezeMessage: string;\n hidePhase: boolean;\n font?: string;\n keyColour?: string;\n timerColour?: string;\n};\n\n/**\n * Utility extract the view options from URL Params\n * the names and fallbacks are manually matched with timerOptions\n */\nfunction getOptionsFromParams(searchParams: URLSearchParams, defaultValues?: URLSearchParams): TimerOptions {\n // Helper to get value from either source, prioritizing defaultValues\n const getValue = (key: string) => defaultValues?.get(key) ?? searchParams.get(key);\n\n // Get timerType from either source\n const timerType = validateTimerType(getValue('timerType'), TimerType.None);\n\n return {\n hideClock: isStringBoolean(getValue('hideClock')),\n hideCards: isStringBoolean(getValue('hideCards')),\n hideProgress: isStringBoolean(getValue('hideProgress')),\n hideMessage: isStringBoolean(getValue('hideMessage')),\n hideSecondary: isStringBoolean(getValue('hideSecondary')),\n hideLogo: isStringBoolean(getValue('hideLogo')),\n hideTimerSeconds: isStringBoolean(getValue('hideTimerSeconds')),\n removeLeadingZeros: !isStringBoolean(getValue('showLeadingZeros')),\n\n mainSource: getValue('main') as keyof OntimeEvent | null,\n secondarySource: getValue('secondary-src') as keyof OntimeEvent | null,\n\n // none doesnt make sense as a configuration of the view\n timerType: timerType === TimerType.None ? undefined : timerType,\n freezeOvertime: isStringBoolean(getValue('freezeOvertime')),\n freezeMessage: getValue('freezeMessage') ?? '',\n hidePhase: isStringBoolean(getValue('hidePhase')),\n\n font: getValue('font') ?? undefined,\n keyColour: makeColourString(getValue('keyColour')),\n timerColour: makeColourString(getValue('timerColour')),\n };\n}\n\n/**\n * Hook exposes the timer view options\n */\nexport function useTimerOptions(): TimerOptions {\n const [searchParams] = useSearchParams();\n const maybePreset = use(PresetContext);\n\n const options = useMemo(() => {\n const defaultValues = maybePreset ? new URLSearchParams(maybePreset.search) : undefined;\n return getOptionsFromParams(searchParams, defaultValues);\n }, [maybePreset, searchParams]);\n\n return options;\n}\n","import { CustomFields, ProjectData, RundownEntries, Settings, ViewSettings } from 'ontime-types';\n\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport useRundown from '../../common/hooks-query/useRundown';\nimport useSettings from '../../common/hooks-query/useSettings';\nimport useViewSettings from '../../common/hooks-query/useViewSettings';\nimport { useViewOptionsStore } from '../../common/stores/viewOptions';\nimport { aggregateQueryStatus, ViewData } from '../utils/viewLoader.utils';\n\nexport interface TimerData {\n customFields: CustomFields;\n projectData: ProjectData;\n isMirrored: boolean;\n settings: Settings;\n viewSettings: ViewSettings;\n entries: RundownEntries;\n}\n\nexport function useTimerData(): ViewData<TimerData> {\n // persisted app state\n const isMirrored = useViewOptionsStore((state) => state.mirror);\n\n // HTTP API data\n const { data: projectData, status: projectDataStatus } = useProjectData();\n const { data: viewSettings, status: viewSettingsStatus } = useViewSettings();\n const { data: settings, status: settingsStatus } = useSettings();\n const { data: customFields, status: customFieldsStatus } = useCustomFields();\n const { data: rundown, status: rundownStatus } = useRundown();\n const { entries } = rundown;\n\n return {\n data: {\n customFields,\n projectData,\n isMirrored,\n settings,\n viewSettings,\n entries,\n },\n status: aggregateQueryStatus([\n projectDataStatus,\n viewSettingsStatus,\n settingsStatus,\n customFieldsStatus,\n rundownStatus,\n ]),\n };\n}\n","import { useMemo } from 'react';\nimport { OntimeView, TimerType } from 'ontime-types';\n\nimport { FitText } from '../../common/components/fit-text/FitText';\nimport MultiPartProgressBar from '../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport TitleCard from '../../common/components/title-card/TitleCard';\nimport ViewLogo from '../../common/components/view-logo/ViewLogo';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport { useTimerSocket } from '../../common/hooks/useSocket';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { cx } from '../../common/utils/styleUtils';\nimport { formatTime, getDefaultFormat } from '../../common/utils/time';\nimport { useTranslation } from '../../translation/TranslationProvider';\nimport Loader from '../common/loader/Loader';\nimport SuperscriptTime from '../common/superscript-time/SuperscriptTime';\nimport { getFormattedTimer, getTimerByType } from '../common/viewUtils';\nimport { getTimerColour } from '../utils/presentation.utils';\n\nimport { getTimerOptions, useTimerOptions } from './timer.options';\nimport {\n getCardData,\n getEstimatedFontSize,\n getIsPlaying,\n getSecondaryDisplay,\n getShowClock,\n getShowMessage,\n getShowModifiers,\n getShowProgressBar,\n getTotalTime,\n} from './timer.utils';\nimport { TimerData, useTimerData } from './useTimerData';\n\nimport './Timer.scss';\n\nexport default function TimerLoader() {\n const { data, status } = useTimerData();\n\n useWindowTitle('Timer');\n\n if (status === 'pending') {\n return <Loader />;\n }\n\n if (status === 'error') {\n return <EmptyPage text='There was an error fetching data, please refresh the page.' />;\n }\n\n return <Timer {...data} />;\n}\n\nfunction Timer({ customFields, projectData, isMirrored, settings, viewSettings, entries }: TimerData) {\n const { eventNext, eventNow, message, time, clock, timerTypeNow, countToEndNow, auxTimer } = useTimerSocket();\n const {\n hideClock,\n hideCards,\n hideProgress,\n hideMessage,\n hideSecondary,\n hideLogo,\n hideTimerSeconds,\n removeLeadingZeros,\n mainSource,\n secondarySource,\n timerType,\n freezeOvertime,\n freezeMessage,\n hidePhase,\n font,\n keyColour,\n timerColour,\n } = useTimerOptions();\n\n const { getLocalizedString } = useTranslation();\n const localisedMinutes = getLocalizedString('common.minutes');\n\n // gather modifiers\n const viewTimerType = timerType ?? timerTypeNow;\n const showOverlay = getShowMessage(message.timer);\n const { showEndMessage, showFinished, showWarning, showDanger } = getShowModifiers(\n timerTypeNow,\n countToEndNow,\n time.phase,\n freezeOvertime,\n freezeMessage,\n hidePhase,\n );\n const isPlaying = getIsPlaying(time.playback);\n const showClock = !hideClock && getShowClock(viewTimerType);\n const showProgressBar = !hideProgress && getShowProgressBar(viewTimerType);\n\n // gather card data\n const { showNow, nowMain, nowSecondary, showNext, nextMain, nextSecondary } = getCardData(\n eventNow,\n eventNext,\n mainSource,\n secondarySource,\n time.playback,\n time.phase,\n entries,\n );\n\n // gather timer data\n const totalTime = getTotalTime(time.duration, time.addedTime);\n const formattedClock = formatTime(clock);\n const stageTimer = getTimerByType(freezeOvertime, timerTypeNow, clock, time, timerType);\n const display = getFormattedTimer(stageTimer, viewTimerType, localisedMinutes, {\n removeSeconds: hideTimerSeconds,\n removeLeadingZero: removeLeadingZeros,\n });\n\n const currentAux = (() => {\n if (message.timer.secondarySource === 'aux1') {\n return auxTimer.aux1;\n }\n if (message.timer.secondarySource === 'aux2') {\n return auxTimer.aux2;\n }\n if (message.timer.secondarySource === 'aux3') {\n return auxTimer.aux3;\n }\n return null;\n })();\n\n const secondaryContent = getSecondaryDisplay(\n message,\n currentAux,\n localisedMinutes,\n hideTimerSeconds,\n removeLeadingZeros,\n hideSecondary,\n );\n\n // gather presentation styles\n const resolvedTimerColour = getTimerColour(viewSettings, timerColour, showWarning, showDanger);\n const timerFontSize = getEstimatedFontSize(display, secondaryContent);\n const subduePaused = !isPlaying && viewTimerType !== TimerType.Clock;\n const userStyles = {\n ...(keyColour && { '--timer-bg': keyColour }),\n ...(resolvedTimerColour && { '--timer-colour': resolvedTimerColour }),\n ...(font && { '--timer-font': font }),\n };\n\n // gather option data\n const defaultFormat = getDefaultFormat(settings?.timeFormat);\n const timerOptions = useMemo(() => getTimerOptions(defaultFormat, customFields), [customFields, defaultFormat]);\n\n return (\n <div\n data-testid='timer-view'\n className={cx(['stage-timer', isMirrored && 'mirror', showFinished && 'stage-timer--finished'])}\n style={userStyles}\n >\n {!hideLogo && projectData?.logo && <ViewLogo name={projectData.logo} className='logo' />}\n\n <ViewParamsEditor target={OntimeView.Timer} viewOptions={timerOptions} />\n\n <div className={cx(['blackout', message.timer.blackout && 'blackout--active'])} />\n\n {!hideMessage && (\n <div className={cx(['message-overlay', showOverlay && 'message-overlay--active'])}>\n <FitText mode='multi' min={32} max={256} className={cx(['message', message.timer.blink && 'blink'])}>\n {message.timer.text}\n </FitText>\n </div>\n )}\n\n {showClock && (\n <div className='clock-container'>\n <div className='label'>{getLocalizedString('common.time_now')}</div>\n <SuperscriptTime time={formattedClock} className='clock' />\n </div>\n )}\n\n <div className={cx(['timer-container', message.timer.blink && !showOverlay && 'blink'])}>\n {showEndMessage ? (\n <FitText mode='multi' min={64} max={256} className='end-message'>\n {freezeMessage}\n </FitText>\n ) : (\n <div\n className={cx(['timer', subduePaused && 'timer--paused', showFinished && 'timer--finished'])}\n style={{ fontSize: `${timerFontSize}vw` }}\n data-type={viewTimerType}\n data-phase={time.phase}\n >\n {display}\n </div>\n )}\n <div className={cx(['secondary', !secondaryContent && 'secondary--hidden'])}>\n <FitText mode='multi' min={64} max={256}>\n {secondaryContent}\n </FitText>\n </div>\n </div>\n\n {showProgressBar && (\n <MultiPartProgressBar\n className={cx(['progress-container', !isPlaying && 'progress-container--paused'])}\n now={time.current}\n complete={totalTime}\n normalColor={viewSettings.normalColor}\n warning={eventNow?.timeWarning}\n warningColor={viewSettings.warningColor}\n danger={eventNow?.timeDanger}\n dangerColor={viewSettings.dangerColor}\n hideOvertime={!showFinished}\n />\n )}\n\n {!hideCards && (\n <>\n {showNow && <TitleCard className='event now' label='now' title={nowMain} secondary={nowSecondary} />}\n {showNext && <TitleCard className='event next' label='next' title={nextMain} secondary={nextSecondary} />}\n </>\n )}\n </div>\n );\n}\n"],"names":["timerDisplayOptions","value","label","TimerType","CountUp","CountDown","Clock","getTimerOptions","timeFormat","customFields","mainOptions","makeOptionsFromCustomFields","secondaryOptions","title","OptionTitle","ClockOptions","collapsible","options","getTimeOption","TimerOptions","hideTimerSeconds","showLeadingZeros","id","description","type","values","defaultValue","placeholder","DataSources","ElementVisibility","StyleOverride","getOptionsFromParams","searchParams","defaultValues","getValue","key","get","timerType","validateTimerType","None","hideClock","isStringBoolean","hideCards","hideProgress","hideMessage","hideSecondary","hideLogo","removeLeadingZeros","mainSource","secondarySource","undefined","freezeOvertime","freezeMessage","hidePhase","font","keyColour","makeColourString","timerColour","useTimerOptions","useSearchParams","maybePreset","use","PresetContext","useMemo","URLSearchParams","search","useTimerData","isMirrored","useViewOptionsStore","state","mirror","data","projectData","status","projectDataStatus","useProjectData","viewSettings","viewSettingsStatus","useViewSettings","settings","settingsStatus","useSettings","customFieldsStatus","useCustomFields","rundown","rundownStatus","useRundown","entries","aggregateQueryStatus","TimerLoader","useWindowTitle","Loader","jsx","EmptyPage","Timer","eventNext","eventNow","message","time","clock","timerTypeNow","countToEndNow","auxTimer","useTimerSocket","getLocalizedString","useTranslation","localisedMinutes","viewTimerType","showOverlay","getShowMessage","timer","showEndMessage","showFinished","showWarning","showDanger","getShowModifiers","phase","isPlaying","getIsPlaying","playback","showClock","getShowClock","showProgressBar","getShowProgressBar","showNow","nowMain","nowSecondary","showNext","nextMain","nextSecondary","getCardData","totalTime","getTotalTime","duration","addedTime","formattedClock","formatTime","stageTimer","getTimerByType","display","getFormattedTimer","removeSeconds","removeLeadingZero","currentAux","aux1","aux2","aux3","secondaryContent","getSecondaryDisplay","resolvedTimerColour","getTimerColour","timerFontSize","getEstimatedFontSize","subduePaused","userStyles","defaultFormat","getDefaultFormat","timerOptions","jsxs","cx","logo","ViewLogo","ViewParamsEditor","OntimeView","blackout","FitText","blink","text","SuperscriptTime","fontSize","MultiPartProgressBar","current","normalColor","timeWarning","warningColor","timeDanger","dangerColor","TitleCard"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Timer-ahF-O2zN.js","sources":["../../src/views/timer/timer.options.ts","../../src/views/timer/useTimerData.ts","../../src/views/timer/Timer.tsx"],"sourcesContent":["import { use, useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\nimport { CustomFields, OntimeEvent, TimerType } from 'ontime-types';\nimport { validateTimerType } from 'ontime-utils';\n\nimport type { SelectOption } from '../../common/components/select/Select';\nimport {\n getTimeOption,\n hideTimerSeconds,\n showLeadingZeros,\n} from '../../common/components/view-params-editor/common.options';\nimport { OptionTitle } from '../../common/components/view-params-editor/constants';\nimport { ViewOption } from '../../common/components/view-params-editor/viewParams.types';\nimport { makeOptionsFromCustomFields } from '../../common/components/view-params-editor/viewParams.utils';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport { isStringBoolean, makeColourString } from '../common/viewUtils';\n\n// manually match the properties of TimerType excluding the None\nconst timerDisplayOptions: SelectOption[] = [\n { value: 'no-overrides', label: 'No Overrides' },\n { value: TimerType.CountUp, label: 'Count Up' },\n { value: TimerType.CountDown, label: 'Count Down' },\n { value: TimerType.Clock, label: 'Clock' },\n];\n\nexport const getTimerOptions = (timeFormat: string, customFields: CustomFields): ViewOption[] => {\n const mainOptions = makeOptionsFromCustomFields(customFields, [\n { value: 'none', label: 'None' },\n { value: 'title', label: 'Title' },\n ]);\n const secondaryOptions = makeOptionsFromCustomFields(customFields, [\n { value: 'none', label: 'None' },\n { value: 'title', label: 'Title' },\n { value: 'note', label: 'Note' },\n { value: 'parent', label: 'Group Title' },\n ]);\n\n return [\n { title: OptionTitle.ClockOptions, collapsible: true, options: [getTimeOption(timeFormat)] },\n {\n title: OptionTitle.TimerOptions,\n collapsible: true,\n options: [\n hideTimerSeconds,\n showLeadingZeros,\n {\n id: 'timerType',\n title: 'Timer type',\n description: 'Override the timer type',\n type: 'option',\n values: timerDisplayOptions,\n defaultValue: 'no-overrides',\n },\n {\n id: 'freezeOvertime',\n title: 'Freeze Overtime',\n description: 'If active, the timer will not count into negative numbers',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'freezeMessage',\n title: 'Freeze Message',\n description:\n 'An optional message to show when the timer is in overtime (must be set in combination with Freeze Overtime)',\n type: 'string',\n defaultValue: '',\n placeholder: 'e.g. Time is up!',\n },\n {\n id: 'hidePhase',\n title: 'Hide progress styles',\n description: 'Whether to suppress the progress styles (warning, danger and overtime)',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n {\n title: OptionTitle.DataSources,\n collapsible: true,\n options: [\n {\n id: 'main',\n title: 'Main text',\n description: 'Select the data source for the main text',\n type: 'option',\n values: mainOptions,\n defaultValue: 'title',\n },\n {\n id: 'secondary-src',\n title: 'Secondary text',\n description: 'Select the data source for the secondary text',\n type: 'option',\n values: secondaryOptions,\n defaultValue: 'none',\n },\n ],\n },\n {\n title: OptionTitle.ElementVisibility,\n collapsible: true,\n options: [\n {\n id: 'hideClock',\n title: 'Hide Time Now',\n description: 'Hides the Time Now field',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'hideCards',\n title: 'Hide Cards',\n description: 'Hides the Now and Next cards',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'hideProgress',\n title: 'Hide progress bar',\n description: 'Hides the progress bar',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'hideMessage',\n title: 'Hide Timer Message',\n description: 'Prevents displaying fullscreen messages in the timer',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'hideSecondary',\n title: 'Hide Auxiliary timer / Secondary message',\n description: 'Prevents the screen from displaying the secondary timer field',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'hideLogo',\n title: 'Hide the project logo',\n description: 'Prevents the screen from displaying the given project logo',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n {\n title: OptionTitle.StyleOverride,\n collapsible: true,\n options: [\n {\n id: 'font',\n title: 'Font',\n description: 'Font family, will use the fonts available in the system',\n type: 'string',\n placeholder: 'Open Sans (default)',\n },\n {\n id: 'keyColour',\n title: 'Key Colour',\n description: 'Background or key colour for entire view. Default: #101010',\n type: 'colour',\n defaultValue: '101010',\n },\n {\n id: 'timerColour',\n title: 'Timer Colour',\n description: 'Timer colour. Default: #f6f6f6',\n type: 'colour',\n defaultValue: 'f6f6f6',\n },\n ],\n },\n ];\n};\n\ntype TimerOptions = {\n hideClock: boolean;\n hideCards: boolean;\n hideProgress: boolean;\n hideMessage: boolean;\n hideSecondary: boolean;\n hideLogo: boolean;\n hideTimerSeconds: boolean;\n removeLeadingZeros: boolean;\n mainSource: keyof OntimeEvent | null | 'none';\n secondarySource: keyof OntimeEvent | null | 'none';\n timerType?: TimerType;\n freezeOvertime: boolean;\n freezeMessage: string;\n hidePhase: boolean;\n font?: string;\n keyColour?: string;\n timerColour?: string;\n};\n\n/**\n * Utility extract the view options from URL Params\n * the names and fallbacks are manually matched with timerOptions\n */\nfunction getOptionsFromParams(searchParams: URLSearchParams, defaultValues?: URLSearchParams): TimerOptions {\n // Helper to get value from either source, prioritizing defaultValues\n const getValue = (key: string) => defaultValues?.get(key) ?? searchParams.get(key);\n\n // Get timerType from either source\n const timerType = validateTimerType(getValue('timerType'), TimerType.None);\n\n return {\n hideClock: isStringBoolean(getValue('hideClock')),\n hideCards: isStringBoolean(getValue('hideCards')),\n hideProgress: isStringBoolean(getValue('hideProgress')),\n hideMessage: isStringBoolean(getValue('hideMessage')),\n hideSecondary: isStringBoolean(getValue('hideSecondary')),\n hideLogo: isStringBoolean(getValue('hideLogo')),\n hideTimerSeconds: isStringBoolean(getValue('hideTimerSeconds')),\n removeLeadingZeros: !isStringBoolean(getValue('showLeadingZeros')),\n\n mainSource: getValue('main') as keyof OntimeEvent | null,\n secondarySource: getValue('secondary-src') as keyof OntimeEvent | null,\n\n // none doesnt make sense as a configuration of the view\n timerType: timerType === TimerType.None ? undefined : timerType,\n freezeOvertime: isStringBoolean(getValue('freezeOvertime')),\n freezeMessage: getValue('freezeMessage') ?? '',\n hidePhase: isStringBoolean(getValue('hidePhase')),\n\n font: getValue('font') ?? undefined,\n keyColour: makeColourString(getValue('keyColour')),\n timerColour: makeColourString(getValue('timerColour')),\n };\n}\n\n/**\n * Hook exposes the timer view options\n */\nexport function useTimerOptions(): TimerOptions {\n const [searchParams] = useSearchParams();\n const maybePreset = use(PresetContext);\n\n const options = useMemo(() => {\n const defaultValues = maybePreset ? new URLSearchParams(maybePreset.search) : undefined;\n return getOptionsFromParams(searchParams, defaultValues);\n }, [maybePreset, searchParams]);\n\n return options;\n}\n","import { CustomFields, ProjectData, RundownEntries, Settings, ViewSettings } from 'ontime-types';\n\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport useRundown from '../../common/hooks-query/useRundown';\nimport useSettings from '../../common/hooks-query/useSettings';\nimport useViewSettings from '../../common/hooks-query/useViewSettings';\nimport { useViewOptionsStore } from '../../common/stores/viewOptions';\nimport { aggregateQueryStatus, ViewData } from '../utils/viewLoader.utils';\n\nexport interface TimerData {\n customFields: CustomFields;\n projectData: ProjectData;\n isMirrored: boolean;\n settings: Settings;\n viewSettings: ViewSettings;\n entries: RundownEntries;\n}\n\nexport function useTimerData(): ViewData<TimerData> {\n // persisted app state\n const isMirrored = useViewOptionsStore((state) => state.mirror);\n\n // HTTP API data\n const { data: projectData, status: projectDataStatus } = useProjectData();\n const { data: viewSettings, status: viewSettingsStatus } = useViewSettings();\n const { data: settings, status: settingsStatus } = useSettings();\n const { data: customFields, status: customFieldsStatus } = useCustomFields();\n const { data: rundown, status: rundownStatus } = useRundown();\n const { entries } = rundown;\n\n return {\n data: {\n customFields,\n projectData,\n isMirrored,\n settings,\n viewSettings,\n entries,\n },\n status: aggregateQueryStatus([\n projectDataStatus,\n viewSettingsStatus,\n settingsStatus,\n customFieldsStatus,\n rundownStatus,\n ]),\n };\n}\n","import { useMemo } from 'react';\nimport { OntimeView, TimerType } from 'ontime-types';\n\nimport { FitText } from '../../common/components/fit-text/FitText';\nimport MultiPartProgressBar from '../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport TitleCard from '../../common/components/title-card/TitleCard';\nimport ViewLogo from '../../common/components/view-logo/ViewLogo';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport { useTimerSocket } from '../../common/hooks/useSocket';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { cx } from '../../common/utils/styleUtils';\nimport { formatTime, getDefaultFormat } from '../../common/utils/time';\nimport { useTranslation } from '../../translation/TranslationProvider';\nimport Loader from '../common/loader/Loader';\nimport SuperscriptTime from '../common/superscript-time/SuperscriptTime';\nimport { getFormattedTimer, getTimerByType } from '../common/viewUtils';\nimport { getTimerColour } from '../utils/presentation.utils';\n\nimport { getTimerOptions, useTimerOptions } from './timer.options';\nimport {\n getCardData,\n getEstimatedFontSize,\n getIsPlaying,\n getSecondaryDisplay,\n getShowClock,\n getShowMessage,\n getShowModifiers,\n getShowProgressBar,\n getTotalTime,\n} from './timer.utils';\nimport { TimerData, useTimerData } from './useTimerData';\n\nimport './Timer.scss';\n\nexport default function TimerLoader() {\n const { data, status } = useTimerData();\n\n useWindowTitle('Timer');\n\n if (status === 'pending') {\n return <Loader />;\n }\n\n if (status === 'error') {\n return <EmptyPage text='There was an error fetching data, please refresh the page.' />;\n }\n\n return <Timer {...data} />;\n}\n\nfunction Timer({ customFields, projectData, isMirrored, settings, viewSettings, entries }: TimerData) {\n const { eventNext, eventNow, message, time, clock, timerTypeNow, countToEndNow, auxTimer } = useTimerSocket();\n const {\n hideClock,\n hideCards,\n hideProgress,\n hideMessage,\n hideSecondary,\n hideLogo,\n hideTimerSeconds,\n removeLeadingZeros,\n mainSource,\n secondarySource,\n timerType,\n freezeOvertime,\n freezeMessage,\n hidePhase,\n font,\n keyColour,\n timerColour,\n } = useTimerOptions();\n\n const { getLocalizedString } = useTranslation();\n const localisedMinutes = getLocalizedString('common.minutes');\n\n // gather modifiers\n const viewTimerType = timerType ?? timerTypeNow;\n const showOverlay = getShowMessage(message.timer);\n const { showEndMessage, showFinished, showWarning, showDanger } = getShowModifiers(\n timerTypeNow,\n countToEndNow,\n time.phase,\n freezeOvertime,\n freezeMessage,\n hidePhase,\n );\n const isPlaying = getIsPlaying(time.playback);\n const showClock = !hideClock && getShowClock(viewTimerType);\n const showProgressBar = !hideProgress && getShowProgressBar(viewTimerType);\n\n // gather card data\n const { showNow, nowMain, nowSecondary, showNext, nextMain, nextSecondary } = getCardData(\n eventNow,\n eventNext,\n mainSource,\n secondarySource,\n time.playback,\n time.phase,\n entries,\n );\n\n // gather timer data\n const totalTime = getTotalTime(time.duration, time.addedTime);\n const formattedClock = formatTime(clock);\n const stageTimer = getTimerByType(freezeOvertime, timerTypeNow, clock, time, timerType);\n const display = getFormattedTimer(stageTimer, viewTimerType, localisedMinutes, {\n removeSeconds: hideTimerSeconds,\n removeLeadingZero: removeLeadingZeros,\n });\n\n const currentAux = (() => {\n if (message.timer.secondarySource === 'aux1') {\n return auxTimer.aux1;\n }\n if (message.timer.secondarySource === 'aux2') {\n return auxTimer.aux2;\n }\n if (message.timer.secondarySource === 'aux3') {\n return auxTimer.aux3;\n }\n return null;\n })();\n\n const secondaryContent = getSecondaryDisplay(\n message,\n currentAux,\n localisedMinutes,\n hideTimerSeconds,\n removeLeadingZeros,\n hideSecondary,\n );\n\n // gather presentation styles\n const resolvedTimerColour = getTimerColour(viewSettings, timerColour, showWarning, showDanger);\n const timerFontSize = getEstimatedFontSize(display, secondaryContent);\n const subduePaused = !isPlaying && viewTimerType !== TimerType.Clock;\n const userStyles = {\n ...(keyColour && { '--timer-bg': keyColour }),\n ...(resolvedTimerColour && { '--timer-colour': resolvedTimerColour }),\n ...(font && { '--timer-font': font }),\n };\n\n // gather option data\n const defaultFormat = getDefaultFormat(settings?.timeFormat);\n const timerOptions = useMemo(() => getTimerOptions(defaultFormat, customFields), [customFields, defaultFormat]);\n\n return (\n <div\n data-testid='timer-view'\n className={cx(['stage-timer', isMirrored && 'mirror', showFinished && 'stage-timer--finished'])}\n style={userStyles}\n >\n {!hideLogo && projectData?.logo && <ViewLogo name={projectData.logo} className='logo' />}\n\n <ViewParamsEditor target={OntimeView.Timer} viewOptions={timerOptions} />\n\n <div className={cx(['blackout', message.timer.blackout && 'blackout--active'])} />\n\n {!hideMessage && (\n <div className={cx(['message-overlay', showOverlay && 'message-overlay--active'])}>\n <FitText mode='multi' min={32} max={256} className={cx(['message', message.timer.blink && 'blink'])}>\n {message.timer.text}\n </FitText>\n </div>\n )}\n\n {showClock && (\n <div className='clock-container'>\n <div className='label'>{getLocalizedString('common.time_now')}</div>\n <SuperscriptTime time={formattedClock} className='clock' />\n </div>\n )}\n\n <div className={cx(['timer-container', message.timer.blink && !showOverlay && 'blink'])}>\n {showEndMessage ? (\n <FitText mode='multi' min={64} max={256} className='end-message'>\n {freezeMessage}\n </FitText>\n ) : (\n <div\n className={cx(['timer', subduePaused && 'timer--paused', showFinished && 'timer--finished'])}\n style={{ fontSize: `${timerFontSize}vw` }}\n data-type={viewTimerType}\n data-phase={time.phase}\n >\n {display}\n </div>\n )}\n <div className={cx(['secondary', !secondaryContent && 'secondary--hidden'])}>\n <FitText mode='multi' min={64} max={256}>\n {secondaryContent}\n </FitText>\n </div>\n </div>\n\n {showProgressBar && (\n <MultiPartProgressBar\n className={cx(['progress-container', !isPlaying && 'progress-container--paused'])}\n now={time.current}\n complete={totalTime}\n normalColor={viewSettings.normalColor}\n warning={eventNow?.timeWarning}\n warningColor={viewSettings.warningColor}\n danger={eventNow?.timeDanger}\n dangerColor={viewSettings.dangerColor}\n hideOvertime={!showFinished}\n />\n )}\n\n {!hideCards && (\n <>\n {showNow && <TitleCard className='event now' label='now' title={nowMain} secondary={nowSecondary} />}\n {showNext && <TitleCard className='event next' label='next' title={nextMain} secondary={nextSecondary} />}\n </>\n )}\n </div>\n );\n}\n"],"names":["timerDisplayOptions","value","label","TimerType","CountUp","CountDown","Clock","getTimerOptions","timeFormat","customFields","mainOptions","makeOptionsFromCustomFields","secondaryOptions","title","OptionTitle","ClockOptions","collapsible","options","getTimeOption","TimerOptions","hideTimerSeconds","showLeadingZeros","id","description","type","values","defaultValue","placeholder","DataSources","ElementVisibility","StyleOverride","getOptionsFromParams","searchParams","defaultValues","getValue","key","get","timerType","validateTimerType","None","hideClock","isStringBoolean","hideCards","hideProgress","hideMessage","hideSecondary","hideLogo","removeLeadingZeros","mainSource","secondarySource","undefined","freezeOvertime","freezeMessage","hidePhase","font","keyColour","makeColourString","timerColour","useTimerOptions","useSearchParams","maybePreset","use","PresetContext","useMemo","URLSearchParams","search","useTimerData","isMirrored","useViewOptionsStore","state","mirror","data","projectData","status","projectDataStatus","useProjectData","viewSettings","viewSettingsStatus","useViewSettings","settings","settingsStatus","useSettings","customFieldsStatus","useCustomFields","rundown","rundownStatus","useRundown","entries","aggregateQueryStatus","TimerLoader","useWindowTitle","Loader","jsx","EmptyPage","Timer","eventNext","eventNow","message","time","clock","timerTypeNow","countToEndNow","auxTimer","useTimerSocket","getLocalizedString","useTranslation","localisedMinutes","viewTimerType","showOverlay","getShowMessage","timer","showEndMessage","showFinished","showWarning","showDanger","getShowModifiers","phase","isPlaying","getIsPlaying","playback","showClock","getShowClock","showProgressBar","getShowProgressBar","showNow","nowMain","nowSecondary","showNext","nextMain","nextSecondary","getCardData","totalTime","getTotalTime","duration","addedTime","formattedClock","formatTime","stageTimer","getTimerByType","display","getFormattedTimer","removeSeconds","removeLeadingZero","currentAux","aux1","aux2","aux3","secondaryContent","getSecondaryDisplay","resolvedTimerColour","getTimerColour","timerFontSize","getEstimatedFontSize","subduePaused","userStyles","defaultFormat","getDefaultFormat","timerOptions","jsxs","cx","logo","ViewLogo","ViewParamsEditor","OntimeView","blackout","FitText","blink","text","SuperscriptTime","fontSize","MultiPartProgressBar","current","normalColor","timeWarning","warningColor","timeDanger","dangerColor","TitleCard"],"mappings":"giDAkBA,MAAMA,GAAsC,CAC1C,CAAEC,MAAO,eAAgBC,MAAO,cAAe,EAC/C,CAAED,MAAOE,EAAUC,QAASF,MAAO,UAAW,EAC9C,CAAED,MAAOE,EAAUE,UAAWH,MAAO,YAAa,EAClD,CAAED,MAAOE,EAAUG,MAAOJ,MAAO,OAAQ,CAAC,EAG/BK,GAAkBA,CAACC,EAAoBC,IAA6C,CACzFC,MAAAA,EAAcC,EAA4BF,EAAc,CAC5D,CAAER,MAAO,OAAQC,MAAO,MAAA,EACxB,CAAED,MAAO,QAASC,MAAO,OAAA,CAAS,CACnC,EACKU,EAAmBD,EAA4BF,EAAc,CACjE,CAAER,MAAO,OAAQC,MAAO,MAAA,EACxB,CAAED,MAAO,QAASC,MAAO,OAAA,EACzB,CAAED,MAAO,OAAQC,MAAO,MAAA,EACxB,CAAED,MAAO,SAAUC,MAAO,aAAA,CAAe,CAC1C,EAED,MAAO,CACL,CAAEW,MAAOC,EAAYC,aAAcC,YAAa,GAAMC,QAAS,CAACC,GAAcV,CAAU,CAAC,CAAA,EACzF,CACEK,MAAOC,EAAYK,aACnBH,YAAa,GACbC,QAAS,CACPG,GACAC,GACA,CACEC,GAAI,YACJT,MAAO,aACPU,YAAa,0BACbC,KAAM,SACNC,OAAQzB,GACR0B,aAAc,cAAA,EAEhB,CACEJ,GAAI,iBACJT,MAAO,kBACPU,YAAa,4DACbC,KAAM,UACNE,aAAc,EAAA,EAEhB,CACEJ,GAAI,gBACJT,MAAO,iBACPU,YACE,8GACFC,KAAM,SACNE,aAAc,GACdC,YAAa,kBAAA,EAEf,CACEL,GAAI,YACJT,MAAO,uBACPU,YAAa,yEACbC,KAAM,UACNE,aAAc,EACf,CAAA,CAAA,EAGL,CACEb,MAAOC,EAAYc,YACnBZ,YAAa,GACbC,QAAS,CACP,CACEK,GAAI,OACJT,MAAO,YACPU,YAAa,2CACbC,KAAM,SACNC,OAAQf,EACRgB,aAAc,OAAA,EAEhB,CACEJ,GAAI,gBACJT,MAAO,iBACPU,YAAa,gDACbC,KAAM,SACNC,OAAQb,EACRc,aAAc,MACf,CAAA,CAAA,EAGL,CACEb,MAAOC,EAAYe,kBACnBb,YAAa,GACbC,QAAS,CACP,CACEK,GAAI,YACJT,MAAO,gBACPU,YAAa,2BACbC,KAAM,UACNE,aAAc,EAAA,EAEhB,CACEJ,GAAI,YACJT,MAAO,aACPU,YAAa,+BACbC,KAAM,UACNE,aAAc,EAAA,EAEhB,CACEJ,GAAI,eACJT,MAAO,oBACPU,YAAa,yBACbC,KAAM,UACNE,aAAc,EAAA,EAEhB,CACEJ,GAAI,cACJT,MAAO,qBACPU,YAAa,uDACbC,KAAM,UACNE,aAAc,EAAA,EAEhB,CACEJ,GAAI,gBACJT,MAAO,2CACPU,YAAa,gEACbC,KAAM,UACNE,aAAc,EAAA,EAEhB,CACEJ,GAAI,WACJT,MAAO,wBACPU,YAAa,6DACbC,KAAM,UACNE,aAAc,EACf,CAAA,CAAA,EAGL,CACEb,MAAOC,EAAYgB,cACnBd,YAAa,GACbC,QAAS,CACP,CACEK,GAAI,OACJT,MAAO,OACPU,YAAa,0DACbC,KAAM,SACNG,YAAa,qBAAA,EAEf,CACEL,GAAI,YACJT,MAAO,aACPU,YAAa,6DACbC,KAAM,SACNE,aAAc,QAAA,EAEhB,CACEJ,GAAI,cACJT,MAAO,eACPU,YAAa,iCACbC,KAAM,SACNE,aAAc,QACf,CAAA,CAAA,CAEJ,CAEL,EA0BA,SAASK,GAAqBC,EAA+BC,EAA+C,CAEpGC,MAAAA,EAAYC,IAAgBF,GAAAA,YAAAA,EAAeG,IAAID,KAAQH,EAAaI,IAAID,CAAG,EAG3EE,EAAYC,GAAkBJ,EAAS,WAAW,EAAG/B,EAAUoC,IAAI,EAElE,MAAA,CACLC,UAAWC,EAAgBP,EAAS,WAAW,CAAC,EAChDQ,UAAWD,EAAgBP,EAAS,WAAW,CAAC,EAChDS,aAAcF,EAAgBP,EAAS,cAAc,CAAC,EACtDU,YAAaH,EAAgBP,EAAS,aAAa,CAAC,EACpDW,cAAeJ,EAAgBP,EAAS,eAAe,CAAC,EACxDY,SAAUL,EAAgBP,EAAS,UAAU,CAAC,EAC9Cd,iBAAkBqB,EAAgBP,EAAS,kBAAkB,CAAC,EAC9Da,mBAAoB,CAACN,EAAgBP,EAAS,kBAAkB,CAAC,EAEjEc,WAAYd,EAAS,MAAM,EAC3Be,gBAAiBf,EAAS,eAAe,EAGzCG,UAAWA,IAAclC,EAAUoC,KAAOW,OAAYb,EACtDc,eAAgBV,EAAgBP,EAAS,gBAAgB,CAAC,EAC1DkB,cAAelB,EAAS,eAAe,GAAK,GAC5CmB,UAAWZ,EAAgBP,EAAS,WAAW,CAAC,EAEhDoB,KAAMpB,EAAS,MAAM,GAAKgB,OAC1BK,UAAWC,EAAiBtB,EAAS,WAAW,CAAC,EACjDuB,YAAaD,EAAiBtB,EAAS,aAAa,CAAC,CACvD,CACF,CAKO,SAASwB,IAAgC,CACxC,KAAA,CAAC1B,CAAY,EAAI2B,GAAgB,EACjCC,EAAcC,MAAIC,EAAa,EAO9B7C,OALS8C,EAAAA,QAAQ,IAAM,CAC5B,MAAM9B,EAAgB2B,EAAc,IAAII,gBAAgBJ,EAAYK,MAAM,EAAIf,OACvEnB,OAAAA,GAAqBC,EAAcC,CAAa,CAAA,EACtD,CAAC2B,EAAa5B,CAAY,CAAC,CAGhC,CCpOO,SAASkC,IAAoC,CAElD,MAAMC,EAAaC,GAA+BC,GAAAA,EAAMC,MAAM,EAGxD,CAAEC,KAAMC,EAAaC,OAAQC,GAAsBC,GAAe,EAClE,CAAEJ,KAAMK,EAAcH,OAAQI,GAAuBC,GAAgB,EACrE,CAAEP,KAAMQ,EAAUN,OAAQO,GAAmBC,GAAY,EACzD,CAAEV,KAAM9D,EAAcgE,OAAQS,GAAuBC,GAAgB,EACrE,CAAEZ,KAAMa,EAASX,OAAQY,GAAkBC,GAAW,EACtD,CAAEC,QAAAA,CAAAA,EAAYH,EAEb,MAAA,CACLb,KAAM,CACJ9D,aAAAA,EACA+D,YAAAA,EACAL,WAAAA,EACAY,SAAAA,EACAH,aAAAA,EACAW,QAAAA,CACF,EACAd,OAAQe,GAAqB,CAC3Bd,EACAG,EACAG,EACAE,EACAG,CAAa,CACd,CACH,CACF,CCbA,SAAwBI,IAAc,CAC9B,KAAA,CAAElB,KAAAA,EAAME,OAAAA,GAAWP,GAAa,EAItC,OAFAwB,GAAe,OAAO,EAElBjB,IAAW,gBACLkB,GAAS,EAAA,EAGflB,IAAW,QACNmB,EAAA,IAACC,GAAU,CAAA,KAAK,4DAA+D,CAAA,EAGjFD,MAACE,GAAUvB,CAAAA,GAAAA,CAAQ,CAAA,CAC5B,CAEA,SAASuB,GAAM,CAAErF,aAAAA,EAAc+D,YAAAA,EAAaL,WAAAA,EAAYY,SAAAA,EAAUH,aAAAA,EAAcW,QAAAA,CAAmB,EAAG,CAC9F,KAAA,CAAEQ,UAAAA,EAAWC,SAAAA,EAAUC,QAAAA,EAASC,KAAAA,EAAMC,MAAAA,EAAOC,aAAAA,EAAcC,cAAAA,EAAeC,SAAAA,GAAaC,GAAe,EACtG,CACJ/D,UAAAA,EACAE,UAAAA,EACAC,aAAAA,EACAC,YAAAA,EACAC,cAAAA,EACAC,SAAAA,EACA1B,iBAAAA,EACA2B,mBAAAA,EACAC,WAAAA,EACAC,gBAAAA,EACAZ,UAAAA,EACAc,eAAAA,EACAC,cAAAA,EACAC,UAAAA,EACAC,KAAAA,EACAC,UAAAA,EACAE,YAAAA,GACEC,GAAgB,EAEd,CAAE8C,mBAAAA,GAAuBC,GAAe,EACxCC,EAAmBF,EAAmB,gBAAgB,EAGtDG,EAAgBtE,GAAa+D,EAC7BQ,EAAcC,GAAeZ,EAAQa,KAAK,EAC1C,CAAEC,eAAAA,EAAgBC,aAAAA,EAAcC,YAAAA,EAAaC,WAAAA,CAAAA,EAAeC,GAChEf,EACAC,EACAH,EAAKkB,MACLjE,EACAC,EACAC,CACF,EACMgE,EAAYC,GAAapB,EAAKqB,QAAQ,EACtCC,GAAY,CAAChF,GAAaiF,GAAad,CAAa,EACpDe,GAAkB,CAAC/E,GAAgBgF,GAAmBhB,CAAa,EAGnE,CAAEiB,QAAAA,GAASC,QAAAA,GAASC,aAAAA,GAAcC,SAAAA,GAAUC,SAAAA,GAAUC,cAAAA,EAAc,EAAIC,GAC5ElC,EACAD,EACA/C,EACAC,EACAiD,EAAKqB,SACLrB,EAAKkB,MACL7B,CACF,EAGM4C,GAAYC,GAAalC,EAAKmC,SAAUnC,EAAKoC,SAAS,EACtDC,GAAiBC,GAAWrC,CAAK,EACjCsC,GAAaC,GAAevF,EAAgBiD,EAAcD,EAAOD,EAAM7D,CAAS,EAChFsG,EAAUC,GAAkBH,GAAY9B,EAAeD,EAAkB,CAC7EmC,cAAezH,EACf0H,kBAAmB/F,CAAAA,CACpB,EAEKgG,GACA9C,EAAQa,MAAM7D,kBAAoB,OAC7BqD,EAAS0C,KAEd/C,EAAQa,MAAM7D,kBAAoB,OAC7BqD,EAAS2C,KAEdhD,EAAQa,MAAM7D,kBAAoB,OAC7BqD,EAAS4C,KAEX,KAGHC,EAAmBC,GACvBnD,EACA8C,GACArC,EACAtF,EACA2B,EACAF,CACF,EAGMwG,EAAsBC,GAAe1E,EAAcnB,EAAawD,EAAaC,CAAU,EACvFqC,GAAgBC,GAAqBb,EAASQ,CAAgB,EAC9DM,GAAe,CAACpC,GAAaV,IAAkBxG,EAAUG,MACzDoJ,GAAa,CACjB,GAAInG,GAAa,CAAE,aAAcA,CAAU,EAC3C,GAAI8F,GAAuB,CAAE,iBAAkBA,CAAoB,EACnE,GAAI/F,GAAQ,CAAE,eAAgBA,CAAAA,CAChC,EAGMqG,EAAgBC,GAAiB7E,GAAAA,YAAAA,EAAUvE,UAAU,EACrDqJ,GAAe9F,UAAQ,IAAMxD,GAAgBoJ,EAAelJ,CAAY,EAAG,CAACA,EAAckJ,CAAa,CAAC,EAE9G,OACGG,EAAAA,KAAA,MAAA,CACC,cAAY,aACZ,UAAWC,EAAG,CAAC,cAAe5F,GAAc,SAAU6C,GAAgB,uBAAuB,CAAC,EAC9F,MAAO0C,GAEN,SAAA,CAAC5G,CAAAA,IAAY0B,GAAAA,YAAAA,EAAawF,OAAQpE,EAAA,IAACqE,IAAS,KAAMzF,EAAYwF,KAAM,UAAU,MAAS,CAAA,QAEvFE,GAAiB,CAAA,OAAQC,GAAWrE,MAAO,YAAa+D,GAAa,EAEtEjE,EAAAA,IAAC,MAAI,CAAA,UAAWmE,EAAG,CAAC,WAAY9D,EAAQa,MAAMsD,UAAY,kBAAkB,CAAC,CAAE,CAAA,EAE9E,CAACxH,GACCgD,EAAAA,IAAA,MAAA,CAAI,UAAWmE,EAAG,CAAC,kBAAmBnD,GAAe,yBAAyB,CAAC,EAC9E,SAAAhB,EAAAA,IAACyE,GAAQ,KAAK,QAAQ,IAAK,GAAI,IAAK,IAAK,UAAWN,EAAG,CAAC,UAAW9D,EAAQa,MAAMwD,OAAS,OAAO,CAAC,EAC/FrE,SAAQa,EAAAA,MAAMyD,IACjB,CAAA,EACF,EAGD/C,IACCsC,EAAA,KAAC,MAAI,CAAA,UAAU,kBACb,SAAA,CAAAlE,MAAC,MAAI,CAAA,UAAU,QAASY,SAAAA,EAAmB,iBAAiB,EAAE,EAC7DZ,EAAA,IAAA4E,GAAA,CAAgB,KAAMjC,GAAgB,UAAU,OAAO,CAAA,CAAA,EAC1D,EAGDuB,EAAAA,KAAA,MAAA,CAAI,UAAWC,EAAG,CAAC,kBAAmB9D,EAAQa,MAAMwD,OAAS,CAAC1D,GAAe,OAAO,CAAC,EACnFG,SAAAA,CACCA,EAAAnB,EAAAA,IAACyE,EAAQ,CAAA,KAAK,QAAQ,IAAK,GAAI,IAAK,IAAK,UAAU,cAChDjH,SACHA,EAAA,QAEC,MACC,CAAA,UAAW2G,EAAG,CAAC,QAASN,IAAgB,gBAAiBzC,GAAgB,iBAAiB,CAAC,EAC3F,MAAO,CAAEyD,SAAU,GAAGlB,EAAa,IAAA,EACnC,YAAW5C,EACX,aAAYT,EAAKkB,MAEhBuB,SACHA,EAAA,EAEF/C,MAAC,OAAI,UAAWmE,EAAG,CAAC,YAAa,CAACZ,GAAoB,mBAAmB,CAAC,EACxE,SAACvD,MAAAyE,EAAA,CAAQ,KAAK,QAAQ,IAAK,GAAI,IAAK,IACjClB,WACH,CACF,CAAA,CAAA,EACF,EAECzB,IACC9B,EAAA,IAAC8E,GACC,CAAA,UAAWX,EAAG,CAAC,qBAAsB,CAAC1C,GAAa,4BAA4B,CAAC,EAChF,IAAKnB,EAAKyE,QACV,SAAUxC,GACV,YAAavD,EAAagG,YAC1B,QAAS5E,GAAAA,YAAAA,EAAU6E,YACnB,aAAcjG,EAAakG,aAC3B,OAAQ9E,GAAAA,YAAAA,EAAU+E,WAClB,YAAanG,EAAaoG,YAC1B,aAAc,CAAChE,EAElB,EAEA,CAACtE,GAEGkF,EAAAA,KAAAA,EAAAA,SAAAA,CAAAA,SAAAA,CAAWA,IAAAhC,EAAA,IAACqF,GAAU,UAAU,YAAY,MAAM,MAAM,MAAOpD,GAAS,UAAWC,EAAgB,CAAA,EACnGC,IAAanC,EAAA,IAAAqF,EAAA,CAAU,UAAU,aAAa,MAAM,OAAO,MAAOjD,GAAU,UAAWC,EAAiB,CAAA,CAAA,CAC3G,CAAA,CAAA,EAEJ,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ay as M,j as t,aB as U,T as O,av as X,y as F,aA as I,aD as P,aC as A,c5 as H,az as G,bf as V,h as z}from"./vendor-Dt3_Fdfs.js";import{P as K,C as W}from"./EditorUtils-k5KpETPG.js";import{h as c,I as J,b5 as u,b3 as Q,b6 as k,b7 as h,b8 as v,b4 as Y,m as g,K as Z,y as C,k as T,s as tt,b2 as st,ax as at,bD as et,bh as nt,bE as it}from"./index-3aosT33y.js";import{P as ot}from"./ProtectRoute-DSilyhst.js";import{T as D,A as lt}from"./TimeInput-BjOTgjcv.js";import{T as i,g as rt,a as ct}from"./TimerDisplay-DeFQvmo9.js";import{p as S}from"./parseUserTime-wAKk9aCJ.js";import{T as N}from"./Tooltip-C5iPq6NR.js";import{u as dt}from"./useReport-CG6m_Zb0.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new s.Error().stack;a&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[a]="b7c9e232-3c30-46a1-a752-8cc87272dfef",s._sentryDebugIdIdentifier="sentry-dbid-b7c9e232-3c30-46a1-a752-8cc87272dfef")}catch{}})();const mt="_addTime_18oax_17",ut="_addButtons_18oax_24",xt="_tallButtons_18oax_30",b={addTime:mt,addButtons:ut,tallButtons:xt};function pt(s){const{playback:a}=s,[e,n]=M({key:"add-time",defaultValue:3e5}),l=(x,j)=>{const y=S(j);n(Math.min(y,J))},r=x=>{x==="add"?u.addTime(e):u.addTime(-1*e)},m=!(a===c.Play||a===c.Pause)||e===0;return t.jsxs("div",{className:b.addTime,children:[t.jsx(D,{name:"addtime",submitHandler:l,time:e,placeholder:"Add time"}),t.jsxs("div",{className:b.addButtons,children:[t.jsx(i,{onClick:()=>r("remove"),disabled:m,className:b.tallButtons,children:t.jsx(U,{})}),t.jsx(i,{onClick:()=>r("add"),disabled:m,className:b.tallButtons,children:t.jsx(O,{})})]})]})}const ht="_label_tat6w_17",_t="_controls_tat6w_24",bt="_input_tat6w_28",jt="_twoSides_tat6w_34",yt="_fakeInput_tat6w_42",_={label:ht,controls:_t,input:bt,twoSides:jt,fakeInput:yt};function f({index:s}){const{playback:a,direction:e}=Q(s),{stop:n,setDirection:l}=v,r=()=>{const x=e===h.CountDown?h.CountUp:h.CountDown;l(s,x)},d=a!==k.Stop,m=a===k.Start?"pause":"play";return t.jsxs("label",{className:_.label,children:["Aux Timer ",s,t.jsxs("div",{className:_.controls,children:[t.jsxs("div",{className:_.input,children:[t.jsx(ft,{index:s,isActive:d}),t.jsxs(i,{onClick:r,aspect:"tight",disabled:d,children:[e===h.CountDown&&t.jsx(X,{"data-testid":`aux-timer-direction-${s}`}),e===h.CountUp&&t.jsx(F,{"data-testid":`aux-timer-direction-${s}`})]})]}),t.jsxs("div",{className:_.twoSides,children:[t.jsx(gt,{index:s,action:m}),t.jsx(i,{onClick:()=>n(s),theme:c.Stop,disabled:!d,children:t.jsx(I,{"data-testid":`aux-timer-stop-${s}`})})]})]})]})}function ft({index:s,isActive:a}){const e=Y(s),{setDuration:n}=v,l=(r,d)=>{const m=S(d);n(s,m)};return a?t.jsx("div",{className:_.fakeInput,"data-testid":`time-label-aux${s}`,children:g(e)}):t.jsx(D,{submitHandler:l,name:`aux${s}`,time:e,placeholder:`Aux ${s}`})}function gt({index:s,action:a}){const{start:e,pause:n}=v;return a==="play"?t.jsx(i,{onClick:()=>e(s),theme:c.Play,children:t.jsx(P,{"data-testid":`aux-timer-start-${s}`})}):t.jsx(i,{onClick:()=>n(s),theme:c.Pause,children:t.jsx(A,{"data-testid":`aux-timer-pause-${s}`})})}const vt="_buttonContainer_1mqxq_17",kt="_go_1mqxq_25",Ct="_playbackContainer_1mqxq_30",Tt="_transportContainer_1mqxq_37",Nt="_extra_1mqxq_44",wt="_invertX_1mqxq_51",p={buttonContainer:vt,go:kt,playbackContainer:Ct,transportContainer:Tt,extra:Nt,invertX:wt};function It({playback:s,numEvents:a,selectedEventIndex:e,timerPhase:n}){const{isPlaying:l,isPaused:r,isRolling:d,disableGo:m,disableNext:x,disablePrev:j,disableStart:y,disablePause:q,disableRoll:R,disableStop:B,disableReload:$,goAction:E,goLabel:L}=rt({playback:s,numEvents:a,selectedEventIndex:e,timerPhase:n});return t.jsxs("div",{className:p.buttonContainer,children:[t.jsx(i,{disabled:m,onClick:E,aspect:"fill",className:p.go,children:L}),t.jsxs("div",{className:p.playbackContainer,children:[t.jsx(i,{onClick:u.start,disabled:y,theme:c.Play,active:l,children:t.jsx(P,{})}),t.jsx(i,{onClick:u.pause,disabled:q,theme:c.Pause,active:r,children:t.jsx(A,{})})]}),t.jsxs("div",{className:p.transportContainer,children:[t.jsx(i,{onClick:u.previous,disabled:j,children:t.jsx(H,{})}),t.jsx(i,{onClick:u.next,disabled:x,children:t.jsx(G,{})})]}),t.jsxs("div",{className:p.extra,children:[t.jsx(i,{onClick:u.roll,disabled:R,theme:c.Roll,active:d,children:"Roll"}),t.jsx(i,{onClick:u.reload,disabled:$,children:t.jsx(V,{className:p.invertX})}),t.jsx(i,{onClick:u.stop,disabled:B,theme:c.Stop,children:t.jsx(I,{})})]})]})}const Pt="_timeContainer_1ihqw_17",At="_timerDisplay_1ihqw_25",Dt="_indicators_1ihqw_32",St="_indicatorRoll_1ihqw_41",qt="_indicatorDelay_1ihqw_42",Rt="_indicatorNegative_1ihqw_43",Bt="_status_1ihqw_72",$t="_tag_1ihqw_79",Et="_time_1ihqw_17",Lt="_rolltag_1ihqw_91",o={timeContainer:Pt,timerDisplay:At,indicators:Dt,indicatorRoll:St,indicatorDelay:qt,indicatorNegative:Rt,status:Bt,tag:$t,time:Et,rolltag:Lt};function Mt(s){return s>0?`Added ${T(s,!1)}`:s<0?`Removed ${T(Math.abs(s),!1)}`:""}function Ut({children:s}){const a=Z(),e=a.playback===c.Roll,n=a.phase===C.Pending,l=a.phase===C.Overtime,r=!!a.addedTime,d=e?"Roll mode active":"",m=Mt(a.addedTime);return t.jsxs("div",{className:o.timeContainer,children:[t.jsxs("div",{className:o.indicators,children:[t.jsx(N,{text:d,render:t.jsx("div",{}),className:o.indicatorRoll,"data-active":e}),t.jsx("div",{className:o.indicatorNegative,"data-active":l}),t.jsx(N,{text:m,render:t.jsx("div",{}),className:o.indicatorDelay,"data-active":r})]}),t.jsx(ct,{className:o.timerDisplay,time:n?a.secondaryTimer:a.current,phase:a.phase}),t.jsx("div",{className:o.status,children:n?t.jsx("span",{className:o.rolltag,children:"Roll: Countdown to start"}):t.jsx(Ot,{startedAt:a.startedAt,expectedFinish:a.expectedFinish,playback:a.playback})}),s]})}function Ot({startedAt:s,expectedFinish:a,playback:e}){if(e===c.Stop)return t.jsx(Xt,{});const n=g(s),l=a!==null?a%tt:null,r=g(l);return t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:o.start,children:[t.jsx("span",{className:o.tag,children:"Started at"}),t.jsx("span",{className:o.time,children:n})]}),t.jsxs("span",{className:o.finish,children:[t.jsx("span",{className:o.tag,children:"Expect end"}),t.jsx("span",{className:o.time,children:r})]})]})}function Xt(){const{data:s}=dt();return Object.keys(s).length>0?t.jsx(lt,{search:"settings=sharing__report",children:"Go to report management"}):null}const Ft="_mainContainer_1qlxm_17",Ht="_auxTimers_1qlxm_22",w={mainContainer:Ft,auxTimers:Ht};function Gt(){const s=st();return t.jsxs("div",{className:w.mainContainer,children:[t.jsx(Ut,{children:t.jsx(pt,{playback:s.playback})}),t.jsx(It,{playback:s.playback,numEvents:s.numEvents,selectedEventIndex:s.selectedEventIndex,timerPhase:s.timerPhase}),t.jsxs("div",{className:w.auxTimers,children:[t.jsx(f,{index:1}),t.jsx(f,{index:2}),t.jsx(f,{index:3})]})]})}const Vt="_content_hnvy8_17",zt={content:Vt},ns=z.memo(Kt);function Kt(){const s=window.location.pathname.includes("/timercontrol");return t.jsx(ot,{permission:"editor",children:t.jsxs(K,{"data-testid":"panel-timer-control",children:[!s&&t.jsx(W,{onClick:a=>at("timercontrol",a)}),s&&t.jsx(et,{suppressSettings:!0,isNavigationLocked:nt()}),t.jsx("div",{className:zt.content,children:t.jsx(it,{children:t.jsx(Gt,{})})})]})})}export{ns as default};
|
|
2
|
+
//# sourceMappingURL=TimerControlExport-De2n8HWG.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimerControlExport-De2n8HWG.js","sources":["../../src/features/control/playback/add-time/AddTime.tsx","../../src/features/control/playback/aux-timer/AuxTimer.tsx","../../src/features/control/playback/playback-buttons/PlaybackButtons.tsx","../../src/features/control/playback/playback-timer/PlaybackTimer.tsx","../../src/features/control/playback/PlaybackControl.tsx","../../src/features/control/playback/TimerControlExport.tsx"],"sourcesContent":["import { IoAdd, IoRemove } from 'react-icons/io5';\nimport { useLocalStorage } from '@mantine/hooks';\nimport { Playback } from 'ontime-types';\nimport { MILLIS_PER_HOUR, parseUserTime } from 'ontime-utils';\n\nimport TimeInput from '../../../../common/components/input/time-input/TimeInput';\nimport { setPlayback } from '../../../../common/hooks/useSocket';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './AddTime.module.scss';\n\ninterface AddTimeProps {\n playback: Playback;\n}\n\nexport default function AddTime(props: AddTimeProps) {\n const { playback } = props;\n const [timeInMs, setTime] = useLocalStorage({ key: 'add-time', defaultValue: 300_000 }); // 5 minutes\n\n const handleTimeChange = (_field: string, value: string) => {\n const newTimeInMs = parseUserTime(value);\n // cap add time to 1 hour\n setTime(Math.min(newTimeInMs, MILLIS_PER_HOUR));\n };\n\n const handleAddTime = (direction: 'add' | 'remove') => {\n // API expects input in milliseconds\n if (direction === 'add') {\n setPlayback.addTime(timeInMs);\n } else {\n setPlayback.addTime(-1 * timeInMs);\n }\n };\n\n const canAddTime = playback === Playback.Play || playback === Playback.Pause;\n const doDisableButtons = !canAddTime || timeInMs === 0;\n\n return (\n <div className={style.addTime}>\n <TimeInput name='addtime' submitHandler={handleTimeChange} time={timeInMs} placeholder='Add time' />\n <div className={style.addButtons}>\n <TapButton onClick={() => handleAddTime('remove')} disabled={doDisableButtons} className={style.tallButtons}>\n <IoRemove />\n </TapButton>\n <TapButton onClick={() => handleAddTime('add')} disabled={doDisableButtons} className={style.tallButtons}>\n <IoAdd />\n </TapButton>\n </div>\n </div>\n );\n}\n","import { IoArrowDown, IoArrowUp, IoPause, IoPlay, IoStop } from 'react-icons/io5';\nimport { Playback, SimpleDirection, SimplePlayback } from 'ontime-types';\nimport { millisToString, parseUserTime } from 'ontime-utils';\n\nimport TimeInput from '../../../../common/components/input/time-input/TimeInput';\nimport { setAuxTimer, useAuxTimerControl, useAuxTimerTime } from '../../../../common/hooks/useSocket';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './AuxTimer.module.scss';\n\ninterface AuxTimerProps {\n index: number;\n}\n\nexport function AuxTimer({ index }: AuxTimerProps) {\n const { playback, direction } = useAuxTimerControl(index);\n\n const { stop, setDirection } = setAuxTimer;\n\n const toggleDirection = () => {\n const newDirection = direction === SimpleDirection.CountDown ? SimpleDirection.CountUp : SimpleDirection.CountDown;\n setDirection(index, newDirection);\n };\n\n const isActive = playback !== SimplePlayback.Stop;\n const playbackAction = playback === SimplePlayback.Start ? 'pause' : 'play';\n\n return (\n <label className={style.label}>\n Aux Timer {index}\n <div className={style.controls}>\n <div className={style.input}>\n <AuxTimerInput index={index} isActive={isActive} />\n <TapButton onClick={toggleDirection} aspect='tight' disabled={isActive}>\n {direction === SimpleDirection.CountDown && <IoArrowDown data-testid={`aux-timer-direction-${index}`} />}\n {direction === SimpleDirection.CountUp && <IoArrowUp data-testid={`aux-timer-direction-${index}`} />}\n </TapButton>\n </div>\n <div className={style.twoSides}>\n <AuxTogglePlay index={index} action={playbackAction} />\n <TapButton onClick={() => stop(index)} theme={Playback.Stop} disabled={!isActive}>\n <IoStop data-testid={`aux-timer-stop-${index}`} />\n </TapButton>\n </div>\n </div>\n </label>\n );\n}\n\ninterface AuxTimerInputProps {\n index: number;\n isActive: boolean;\n}\n\nfunction AuxTimerInput({ index, isActive }: AuxTimerInputProps) {\n const newTimeInMs = useAuxTimerTime(index);\n const { setDuration } = setAuxTimer;\n\n const handleTimeUpdate = (_field: string, value: string) => {\n const newTimeInMs = parseUserTime(value);\n setDuration(index, newTimeInMs);\n };\n\n if (isActive) {\n return (\n <div className={style.fakeInput} data-testid={`time-label-aux${index}`}>\n {millisToString(newTimeInMs)}\n </div>\n );\n }\n\n return (\n <TimeInput submitHandler={handleTimeUpdate} name={`aux${index}`} time={newTimeInMs} placeholder={`Aux ${index}`} />\n );\n}\n\ninterface AuxTogglePlayProps {\n index: number;\n action: 'play' | 'pause';\n}\n\nfunction AuxTogglePlay({ index, action }: AuxTogglePlayProps) {\n const { start, pause } = setAuxTimer;\n\n if (action === 'play') {\n return (\n <TapButton onClick={() => start(index)} theme={Playback.Play}>\n <IoPlay data-testid={`aux-timer-start-${index}`} />\n </TapButton>\n );\n }\n\n return (\n <TapButton onClick={() => pause(index)} theme={Playback.Pause}>\n <IoPause data-testid={`aux-timer-pause-${index}`} />\n </TapButton>\n );\n}\n","import { IoPause, IoPlay, IoPlaySkipBack, IoPlaySkipForward, IoReload, IoStop } from 'react-icons/io5';\nimport { Playback, TimerPhase } from 'ontime-types';\n\nimport { setPlayback } from '../../../../common/hooks/useSocket';\nimport { getPlaybackControlState } from '../playbackControl.utils';\nimport TapButton from '../tap-button/TapButton';\n\nimport style from './PlaybackButtons.module.scss';\n\ninterface PlaybackButtonsProps {\n playback: Playback;\n numEvents: number;\n selectedEventIndex: number | null;\n timerPhase: TimerPhase;\n}\n\nexport default function PlaybackButtons({ playback, numEvents, selectedEventIndex, timerPhase }: PlaybackButtonsProps) {\n const {\n isPlaying,\n isPaused,\n isRolling,\n disableGo,\n disableNext,\n disablePrev,\n disableStart,\n disablePause,\n disableRoll,\n disableStop,\n disableReload,\n goAction,\n goLabel,\n } = getPlaybackControlState({\n playback,\n numEvents,\n selectedEventIndex,\n timerPhase,\n });\n\n return (\n <div className={style.buttonContainer}>\n <TapButton disabled={disableGo} onClick={goAction} aspect='fill' className={style.go}>\n {goLabel}\n </TapButton>\n <div className={style.playbackContainer}>\n <TapButton onClick={setPlayback.start} disabled={disableStart} theme={Playback.Play} active={isPlaying}>\n <IoPlay />\n </TapButton>\n\n <TapButton onClick={setPlayback.pause} disabled={disablePause} theme={Playback.Pause} active={isPaused}>\n <IoPause />\n </TapButton>\n </div>\n <div className={style.transportContainer}>\n <TapButton onClick={setPlayback.previous} disabled={disablePrev}>\n <IoPlaySkipBack />\n </TapButton>\n <TapButton onClick={setPlayback.next} disabled={disableNext}>\n <IoPlaySkipForward />\n </TapButton>\n </div>\n <div className={style.extra}>\n <TapButton onClick={setPlayback.roll} disabled={disableRoll} theme={Playback.Roll} active={isRolling}>\n Roll\n </TapButton>\n <TapButton onClick={setPlayback.reload} disabled={disableReload}>\n <IoReload className={style.invertX} />\n </TapButton>\n <TapButton onClick={setPlayback.stop} disabled={disableStop} theme={Playback.Stop}>\n <IoStop />\n </TapButton>\n </div>\n </div>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { MaybeNumber, Playback, TimerPhase } from 'ontime-types';\nimport { dayInMs, millisToString } from 'ontime-utils';\n\nimport AppLink from '../../../../common/components/link/app-link/AppLink';\nimport Tooltip from '../../../../common/components/tooltip/Tooltip';\nimport { useTimer } from '../../../../common/hooks/useSocket';\nimport useReport from '../../../../common/hooks-query/useReport';\nimport { formatDuration } from '../../../../common/utils/time';\nimport TimerDisplay from '../timer-display/TimerDisplay';\n\nimport style from './PlaybackTimer.module.scss';\n\nfunction resolveAddedTimeLabel(addedTime: number) {\n if (addedTime > 0) {\n return `Added ${formatDuration(addedTime, false)}`;\n }\n\n if (addedTime < 0) {\n return `Removed ${formatDuration(Math.abs(addedTime), false)}`;\n }\n\n return '';\n}\n\nexport default function PlaybackTimer({ children }: PropsWithChildren) {\n const timer = useTimer();\n\n const isRolling = timer.playback === Playback.Roll;\n const isWaiting = timer.phase === TimerPhase.Pending;\n const isOvertime = timer.phase === TimerPhase.Overtime;\n const hasAddedTime = Boolean(timer.addedTime);\n\n const rollLabel = isRolling ? 'Roll mode active' : '';\n\n const addedTimeLabel = resolveAddedTimeLabel(timer.addedTime);\n\n return (\n <div className={style.timeContainer}>\n <div className={style.indicators}>\n <Tooltip text={rollLabel} render={<div />} className={style.indicatorRoll} data-active={isRolling} />\n <div className={style.indicatorNegative} data-active={isOvertime} />\n <Tooltip text={addedTimeLabel} render={<div />} className={style.indicatorDelay} data-active={hasAddedTime} />\n </div>\n <TimerDisplay\n className={style.timerDisplay}\n time={isWaiting ? timer.secondaryTimer : timer.current}\n phase={timer.phase}\n />\n <div className={style.status}>\n {isWaiting ? (\n <span className={style.rolltag}>Roll: Countdown to start</span>\n ) : (\n <RunningStatus startedAt={timer.startedAt} expectedFinish={timer.expectedFinish} playback={timer.playback} />\n )}\n </div>\n {children}\n </div>\n );\n}\n\ninterface RunningStatusProps {\n startedAt: MaybeNumber;\n expectedFinish: MaybeNumber;\n playback: Playback;\n}\nfunction RunningStatus({ startedAt, expectedFinish, playback }: RunningStatusProps) {\n if (playback === Playback.Stop) {\n return <StoppedStatus />;\n }\n\n const started = millisToString(startedAt);\n const finishedMs = expectedFinish !== null ? expectedFinish % dayInMs : null;\n const finish = millisToString(finishedMs);\n\n return (\n <>\n <span className={style.start}>\n <span className={style.tag}>Started at</span>\n <span className={style.time}>{started}</span>\n </span>\n <span className={style.finish}>\n <span className={style.tag}>Expect end</span>\n <span className={style.time}>{finish}</span>\n </span>\n </>\n );\n}\n\nfunction StoppedStatus() {\n const { data } = useReport();\n const hasReport = Object.keys(data).length > 0;\n\n if (hasReport) {\n return <AppLink search='settings=sharing__report'>Go to report management</AppLink>;\n }\n\n return null;\n}\n","import { usePlaybackControl } from '../../../common/hooks/useSocket';\n\nimport AddTime from './add-time/AddTime';\nimport { AuxTimer } from './aux-timer/AuxTimer';\nimport PlaybackButtons from './playback-buttons/PlaybackButtons';\nimport PlaybackTimer from './playback-timer/PlaybackTimer';\n\nimport style from './PlaybackControl.module.scss';\n\nexport default function PlaybackControl() {\n const data = usePlaybackControl();\n\n return (\n <div className={style.mainContainer}>\n <PlaybackTimer>\n <AddTime playback={data.playback} />\n </PlaybackTimer>\n <PlaybackButtons\n playback={data.playback}\n numEvents={data.numEvents}\n selectedEventIndex={data.selectedEventIndex}\n timerPhase={data.timerPhase}\n />\n <div className={style.auxTimers}>\n <AuxTimer index={1} />\n <AuxTimer index={2} />\n <AuxTimer index={3} />\n </div>\n </div>\n );\n}\n","import { memo } from 'react';\n\nimport * as Editor from '../../../common/components/editor-utils/EditorUtils';\nimport ErrorBoundary from '../../../common/components/error-boundary/ErrorBoundary';\nimport ViewNavigationMenu from '../../../common/components/navigation-menu/ViewNavigationMenu';\nimport ProtectRoute from '../../../common/components/protect-route/ProtectRoute';\nimport { handleLinks } from '../../../common/utils/linkUtils';\nimport { getIsNavigationLocked } from '../../../externals';\n\nimport PlaybackControl from './PlaybackControl';\n\nimport style from './TimerControlExport.module.scss';\n\nexport default memo(TimerControlExport);\nfunction TimerControlExport() {\n const isExtracted = window.location.pathname.includes('/timercontrol');\n\n return (\n <ProtectRoute permission='editor'>\n <Editor.Panel data-testid='panel-timer-control'>\n {!isExtracted && <Editor.CornerExtract onClick={(event) => handleLinks('timercontrol', event)} />}\n {isExtracted && <ViewNavigationMenu suppressSettings isNavigationLocked={getIsNavigationLocked()} />}\n\n <div className={style.content}>\n <ErrorBoundary>\n <PlaybackControl />\n </ErrorBoundary>\n </div>\n </Editor.Panel>\n </ProtectRoute>\n );\n}\n"],"names":["AddTime","props","playback","timeInMs","setTime","useLocalStorage","key","defaultValue","handleTimeChange","_field","value","newTimeInMs","parseUserTime","Math","min","MILLIS_PER_HOUR","handleAddTime","direction","setPlayback","addTime","doDisableButtons","Playback","Play","Pause","jsxs","style","jsx","TimeInput","addButtons","TapButton","tallButtons","IoRemove","IoAdd","AuxTimer","index","useAuxTimerControl","stop","setDirection","setAuxTimer","toggleDirection","newDirection","SimpleDirection","CountDown","CountUp","isActive","SimplePlayback","Stop","playbackAction","Start","label","controls","input","AuxTimerInput","IoArrowDown","IoArrowUp","twoSides","AuxTogglePlay","IoStop","useAuxTimerTime","setDuration","handleTimeUpdate","fakeInput","millisToString","action","start","pause","IoPlay","IoPause","PlaybackButtons","numEvents","selectedEventIndex","timerPhase","isPlaying","isPaused","isRolling","disableGo","disableNext","disablePrev","disableStart","disablePause","disableRoll","disableStop","disableReload","goAction","goLabel","getPlaybackControlState","buttonContainer","go","playbackContainer","transportContainer","previous","IoPlaySkipBack","next","IoPlaySkipForward","extra","roll","Roll","reload","IoReload","invertX","resolveAddedTimeLabel","addedTime","formatDuration","abs","PlaybackTimer","children","timer","useTimer","isWaiting","phase","TimerPhase","Pending","isOvertime","Overtime","hasAddedTime","Boolean","rollLabel","addedTimeLabel","timeContainer","indicators","Tooltip","indicatorRoll","indicatorNegative","indicatorDelay","TimerDisplay","timerDisplay","secondaryTimer","current","status","rolltag","RunningStatus","startedAt","expectedFinish","StoppedStatus","started","finishedMs","dayInMs","finish","Fragment","tag","time","data","useReport","Object","keys","length","AppLink","PlaybackControl","usePlaybackControl","mainContainer","auxTimers","memo","TimerControlExport","isExtracted","window","location","pathname","includes","ProtectRoute","Editor.Panel","Editor.CornerExtract","handleLinks","event","ViewNavigationMenu","getIsNavigationLocked","content","ErrorBoundary"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{h as b,j as c}from"./vendor-Dt3_Fdfs.js";import{h as e,y as m,b5 as _,e as f,m as x,bn as g}from"./index-3aosT33y.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new t.Error().stack;s&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[s]="491546e8-774b-49c2-a9f5-1d6f5ed086d0",t._sentryDebugIdIdentifier="sentry-dbid-491546e8-774b-49c2-a9f5-1d6f5ed086d0")}catch{}})();function w(t,s){return{start:t!==e.Stop&&t!==e.Play,pause:t===e.Play,roll:t!==e.Roll&&s!==m.Overtime,stop:t!==e.Stop,reload:t!==e.Stop&&t!==e.Roll}}function O({playback:t,numEvents:s,selectedEventIndex:o,timerPhase:n}){const d=o===0,r=o===s-1,a=s===0,l=t===e.Roll,i=w(t,n),{action:p,label:y}=h(t,o,r);return{isPlaying:t===e.Play,isPaused:t===e.Pause,isRolling:l,isArmed:t===e.Armed,isStopped:t===e.Stop,isFirst:d,isLast:r,noEvents:a,disableGo:l||a,disableNext:l||a||r,disablePrev:l||a||d,disableStart:!i.start,disablePause:!i.pause,disableRoll:!i.roll||a,disableStop:!i.stop,disableReload:!i.reload,disableAddTime:t!==e.Play&&t!==e.Pause,goAction:p,goLabel:y}}function h(t,s,o){return t===e.Armed?{action:_.start,label:"Start"}:o?{action:_.stop,label:"Finish"}:s===null?{action:_.startNext,label:"Start"}:{action:_.startNext,label:"Next"}}const z="_blink_yewzx_1",v="_fourtyfive_yewzx_13",S="_tapButton_yewzx_17",P="_neutral_yewzx_29",T="_active_yewzx_51",N="_play_yewzx_66",R="_roll_yewzx_93",A="_pause_yewzx_120",B="_ontime_yewzx_147",D="_stop_yewzx_174",j="_square_yewzx_201",q="_tight_yewzx_206",C="_fill_yewzx_211",u={blink:z,fourtyfive:v,tapButton:S,neutral:P,active:T,play:N,roll:R,pause:A,ontime:B,stop:D,square:j,tight:q,fill:C},I=b.forwardRef((t,s)=>{const{children:o,disabled:n,onClick:d,theme:r="neutral",aspect:a="normal",active:l,className:i}=t;return c.jsx("button",{className:f([u.tapButton,i,u[r],u[a],l&&u.active]),disabled:n,type:"button",onClick:d,ref:s,children:o})});I.displayName="TabButton";const F="_timer_kvqsa_21",G={timer:F};function $({time:t,phase:s,className:o}){const n=x(t,{fallback:g}).replace("-","");return c.jsx("div",{className:f([G.timer,o]),"data-phase":s,children:n})}export{I as T,$ as a,O as g};
|
|
2
|
+
//# sourceMappingURL=TimerDisplay-DeFQvmo9.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimerDisplay-
|
|
1
|
+
{"version":3,"file":"TimerDisplay-DeFQvmo9.js","sources":["../../../../packages/utils/src/validate-action/validatePlayback.ts","../../src/features/control/playback/playbackControl.utils.ts","../../src/features/control/playback/tap-button/TapButton.tsx","../../src/features/control/playback/timer-display/TimerDisplay.tsx"],"sourcesContent":["import { Playback, TimerPhase } from 'ontime-types';\n\n/**\n * Simple rules to determine whether a playback action is valid\n */\nexport function validatePlayback(currentPlayback: Playback, timerPhase: TimerPhase) {\n return {\n start: currentPlayback !== Playback.Stop && currentPlayback !== Playback.Play,\n pause: currentPlayback === Playback.Play,\n roll: currentPlayback !== Playback.Roll && timerPhase !== TimerPhase.Overtime,\n stop: currentPlayback !== Playback.Stop,\n reload: currentPlayback !== Playback.Stop && currentPlayback !== Playback.Roll,\n };\n}\n","import { Playback, TimerPhase } from 'ontime-types';\nimport { validatePlayback } from 'ontime-utils';\n\nimport { setPlayback } from '../../../common/hooks/useSocket';\n\nexport interface PlaybackControlInput {\n playback: Playback;\n numEvents: number;\n selectedEventIndex: number | null;\n timerPhase: TimerPhase;\n}\n\nexport interface PlaybackControlState {\n // Playback states\n isPlaying: boolean;\n isPaused: boolean;\n isRolling: boolean;\n isArmed: boolean;\n isStopped: boolean;\n\n // Position states\n isFirst: boolean;\n isLast: boolean;\n noEvents: boolean;\n\n // Disable flags\n disableGo: boolean;\n disableNext: boolean;\n disablePrev: boolean;\n disableStart: boolean;\n disablePause: boolean;\n disableRoll: boolean;\n disableStop: boolean;\n disableReload: boolean;\n disableAddTime: boolean;\n\n // Go button configuration\n goAction: () => void;\n goLabel: 'Start' | 'Next' | 'Finish';\n}\n\n/**\n * Centralized playback control state calculator.\n * Consolidates all playback logic, disable states, and derived values in one place.\n */\nexport function getPlaybackControlState({\n playback,\n numEvents,\n selectedEventIndex,\n timerPhase,\n}: PlaybackControlInput): PlaybackControlState {\n const isFirst = selectedEventIndex === 0;\n const isLast = selectedEventIndex === numEvents - 1;\n const noEvents = numEvents === 0;\n const isRolling = playback === Playback.Roll;\n\n const playbackCan = validatePlayback(playback, timerPhase);\n const { action: goAction, label: goLabel } = getGoAction(playback, selectedEventIndex, isLast);\n\n return {\n isPlaying: playback === Playback.Play,\n isPaused: playback === Playback.Pause,\n isRolling,\n isArmed: playback === Playback.Armed,\n isStopped: playback === Playback.Stop,\n isFirst,\n isLast,\n noEvents,\n disableGo: isRolling || noEvents,\n disableNext: isRolling || noEvents || isLast,\n disablePrev: isRolling || noEvents || isFirst,\n disableStart: !playbackCan.start,\n disablePause: !playbackCan.pause,\n disableRoll: !playbackCan.roll || noEvents,\n disableStop: !playbackCan.stop,\n disableReload: !playbackCan.reload,\n disableAddTime: playback !== Playback.Play && playback !== Playback.Pause,\n goAction,\n goLabel,\n };\n}\n\n/**\n * Determines the action and label for the \"Go\" button based on playback state.\n */\nfunction getGoAction(\n playback: Playback,\n selectedEventIndex: number | null,\n isLast: boolean,\n): { action: () => void; label: 'Start' | 'Next' | 'Finish' } {\n if (playback === Playback.Armed) return { action: setPlayback.start, label: 'Start' };\n if (isLast) return { action: setPlayback.stop, label: 'Finish' };\n if (selectedEventIndex === null) return { action: setPlayback.startNext, label: 'Start' };\n return { action: setPlayback.startNext, label: 'Next' };\n}\n","import { ForwardedRef, forwardRef, PropsWithChildren } from 'react';\nimport { Playback } from 'ontime-types';\n\nimport { cx } from '../../../../common/utils/styleUtils';\n\nimport style from './TapButton.module.scss';\n\ninterface TapButtonProps {\n disabled?: boolean;\n aspect?: 'normal' | 'square' | 'fill' | 'tight';\n free?: boolean;\n onClick: () => void;\n theme?: Playback | 'neutral';\n active?: boolean;\n className?: string;\n}\n\nconst TapButton = forwardRef((props: PropsWithChildren<TapButtonProps>, ref: ForwardedRef<HTMLButtonElement>) => {\n const { children, disabled, onClick, theme = 'neutral', aspect = 'normal', active, className } = props;\n\n return (\n <button\n className={cx([style.tapButton, className, style[theme], style[aspect], active && style.active])}\n disabled={disabled}\n type='button'\n onClick={onClick}\n ref={ref}\n >\n {children}\n </button>\n );\n});\n\nTapButton.displayName = 'TabButton';\nexport default TapButton;\n","import { MaybeNumber, TimerPhase } from 'ontime-types';\nimport { millisToString } from 'ontime-utils';\n\nimport { cx, timerPlaceholder } from '../../../../common/utils/styleUtils';\n\nimport style from './TimerDisplay.module.scss';\n\ninterface TimerDisplayProps {\n time: MaybeNumber;\n phase: TimerPhase;\n className?: string;\n}\n\n/**\n * Displays time in ms in formatted timetag\n * Used in editor\n */\nexport default function TimerDisplay({ time, phase, className }: TimerDisplayProps) {\n const display = millisToString(time, { fallback: timerPlaceholder }).replace('-', '');\n\n return (\n <div className={cx([style.timer, className])} data-phase={phase}>\n {display}\n </div>\n );\n}\n"],"names":["validatePlayback","currentPlayback","timerPhase","start","Playback","Stop","Play","pause","roll","Roll","TimerPhase","Overtime","stop","reload","getPlaybackControlState","playback","numEvents","selectedEventIndex","isFirst","isLast","noEvents","isRolling","playbackCan","action","goAction","label","goLabel","getGoAction","isPlaying","isPaused","Pause","isArmed","Armed","isStopped","disableGo","disableNext","disablePrev","disableStart","disablePause","disableRoll","disableStop","disableReload","disableAddTime","setPlayback","startNext","TapButton","forwardRef","props","ref","children","disabled","onClick","theme","aspect","active","className","jsx","cx","style","tapButton","displayName","TimerDisplay","time","phase","display","millisToString","fallback","timerPlaceholder","replace","timer"],"mappings":"udAKgBA,SAAAA,EAAiBC,EAA2BC,EAAwB,CAC3E,MAAA,CACLC,MAAOF,IAAoBG,EAASC,MAAQJ,IAAoBG,EAASE,KACzEC,MAAON,IAAoBG,EAASE,KACpCE,KAAMP,IAAoBG,EAASK,MAAQP,IAAeQ,EAAWC,SACrEC,KAAMX,IAAoBG,EAASC,KACnCQ,OAAQZ,IAAoBG,EAASC,MAAQJ,IAAoBG,EAASK,IAC5E,CACF,CCgCO,SAASK,EAAwB,CACtCC,SAAAA,EACAC,UAAAA,EACAC,mBAAAA,EACAf,WAAAA,CACoB,EAAyB,CAC7C,MAAMgB,EAAUD,IAAuB,EACjCE,EAASF,IAAuBD,EAAY,EAC5CI,EAAWJ,IAAc,EACzBK,EAAYN,IAAaX,EAASK,KAElCa,EAActB,EAAiBe,EAAUb,CAAU,EACnD,CAAEqB,OAAQC,EAAUC,MAAOC,CAAYC,EAAAA,EAAYZ,EAAUE,EAAoBE,CAAM,EAEtF,MAAA,CACLS,UAAWb,IAAaX,EAASE,KACjCuB,SAAUd,IAAaX,EAAS0B,MAChCT,UAAAA,EACAU,QAAShB,IAAaX,EAAS4B,MAC/BC,UAAWlB,IAAaX,EAASC,KACjCa,QAAAA,EACAC,OAAAA,EACAC,SAAAA,EACAc,UAAWb,GAAaD,EACxBe,YAAad,GAAaD,GAAYD,EACtCiB,YAAaf,GAAaD,GAAYF,EACtCmB,aAAc,CAACf,EAAYnB,MAC3BmC,aAAc,CAAChB,EAAYf,MAC3BgC,YAAa,CAACjB,EAAYd,MAAQY,EAClCoB,YAAa,CAAClB,EAAYV,KAC1B6B,cAAe,CAACnB,EAAYT,OAC5B6B,eAAgB3B,IAAaX,EAASE,MAAQS,IAAaX,EAAS0B,MACpEN,SAAAA,EACAE,QAAAA,CACF,CACF,CAKA,SAASC,EACPZ,EACAE,EACAE,EAC4D,CACxDJ,OAAAA,IAAaX,EAAS4B,MAAc,CAAET,OAAQoB,EAAYxC,MAAOsB,MAAO,OAAQ,EAChFN,EAAe,CAAEI,OAAQoB,EAAY/B,KAAMa,MAAO,QAAS,EAC3DR,IAAuB,KAAa,CAAEM,OAAQoB,EAAYC,UAAWnB,MAAO,OAAQ,EACjF,CAAEF,OAAQoB,EAAYC,UAAWnB,MAAO,MAAO,CACxD,gZC7EMoB,EAAYC,EAAAA,WAAW,CAACC,EAA0CC,IAAyC,CACzG,KAAA,CAAEC,SAAAA,EAAUC,SAAAA,EAAUC,QAAAA,EAASC,MAAAA,EAAQ,UAAWC,OAAAA,EAAS,SAAUC,OAAAA,EAAQC,UAAAA,CAAAA,EAAcR,EAG/F,OAAAS,MAAC,SACC,CAAA,UAAWC,EAAG,CAACC,EAAMC,UAAWJ,EAAWG,EAAMN,CAAK,EAAGM,EAAML,CAAM,EAAGC,GAAUI,EAAMJ,MAAM,CAAC,EAC/F,SAAAJ,EACA,KAAK,SACL,QAAAC,EACA,IAAAH,EAECC,SAAAA,CACH,CAAA,CAEJ,CAAC,EAEDJ,EAAUe,YAAc,kDChBxB,SAAwBC,EAAa,CAAEC,KAAAA,EAAMC,MAAAA,EAAOR,UAAAA,CAA6B,EAAG,CAC5ES,MAAAA,EAAUC,EAAeH,EAAM,CAAEI,SAAUC,CAAAA,CAAkB,EAAEC,QAAQ,IAAK,EAAE,EAEpF,OACGZ,EAAA,IAAA,MAAA,CAAI,UAAWC,EAAG,CAACC,EAAMW,MAAOd,CAAS,CAAC,EAAG,aAAYQ,EACvDC,SACHA,CAAA,CAAA,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{h as o,j as t}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=TitleCard-
|
|
1
|
+
import{h as o,j as t}from"./vendor-Dt3_Fdfs.js";import{d as f,e as n}from"./index-3aosT33y.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new e.Error().stack;a&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[a]="730f5ea8-2753-4e71-b032-7d755a9f78cc",e._sentryDebugIdIdentifier="sentry-dbid-730f5ea8-2753-4e71-b032-7d755a9f78cc")}catch{}})();const b=o.forwardRef((e,a)=>{const{label:s,title:d,secondary:r,className:l=""}=e,{getLocalizedString:c}=f(),i=s==="now";return t.jsxs("div",{className:n(["title-card",l]),ref:a,children:[t.jsx("span",{className:"title-card__title",children:d}),t.jsx("span",{className:n(["title-card__label",i&&"title-card__label--accent"]),children:s&&c(`common.${s}`)}),t.jsx("div",{className:"title-card__secondary",children:r})]})});b.displayName="TitleCard";export{b as T};
|
|
2
|
+
//# sourceMappingURL=TitleCard-BiaQE4ZK.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TitleCard-
|
|
1
|
+
{"version":3,"file":"TitleCard-BiaQE4ZK.js","sources":["../../src/common/components/title-card/TitleCard.tsx"],"sourcesContent":["import { ForwardedRef, forwardRef } from 'react';\n\nimport { useTranslation } from '../../../translation/TranslationProvider';\nimport { cx } from '../../utils/styleUtils';\n\nimport './TitleCard.scss';\n\ninterface TitleCardProps {\n title?: string;\n label?: 'now' | 'next';\n secondary?: string;\n className?: string;\n}\n\nconst TitleCard = forwardRef((props: TitleCardProps, ref: ForwardedRef<HTMLDivElement>) => {\n const { label, title, secondary, className = '' } = props;\n const { getLocalizedString } = useTranslation();\n\n const accent = label === 'now';\n\n return (\n <div className={cx(['title-card', className])} ref={ref}>\n <span className='title-card__title'>{title}</span>\n <span className={cx(['title-card__label', accent && 'title-card__label--accent'])}>\n {label && getLocalizedString(`common.${label}`)}\n </span>\n <div className='title-card__secondary'>{secondary}</div>\n </div>\n );\n});\n\nTitleCard.displayName = 'TitleCard';\nexport default TitleCard;\n"],"names":["TitleCard","forwardRef","props","ref","label","title","secondary","className","getLocalizedString","useTranslation","accent","jsxs","cx","jsx","displayName"],"mappings":"ybAcA,MAAMA,EAAYC,EAAAA,WAAW,CAACC,EAAuBC,IAAsC,CACnF,KAAA,CAAEC,MAAAA,EAAOC,MAAAA,EAAOC,UAAAA,EAAWC,UAAAA,EAAY,EAAA,EAAOL,EAC9C,CAAEM,mBAAAA,GAAuBC,EAAe,EAExCC,EAASN,IAAU,MAGvB,OAAAO,OAAC,OAAI,UAAWC,EAAG,CAAC,aAAcL,CAAS,CAAC,EAAG,IAAAJ,EAC7C,SAAA,CAACU,EAAA,IAAA,OAAA,CAAK,UAAU,oBAAqBR,SAAMA,EAAA,EAC1CQ,EAAA,IAAA,OAAA,CAAK,UAAWD,EAAG,CAAC,oBAAqBF,GAAU,2BAA2B,CAAC,EAC7EN,SAASI,GAAAA,EAAmB,UAAUJ,CAAK,EAAE,EAChD,EACCS,EAAA,IAAA,MAAA,CAAI,UAAU,wBAAyBP,SAAUA,CAAA,CAAA,CAAA,EACpD,CAEJ,CAAC,EAEDN,EAAUc,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as t,co as i,cp as n,cq as l,cr as r,cs as d,ct as f}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=Tooltip-
|
|
1
|
+
import{j as t,co as i,cp as n,cq as l,cr as r,cs as d,ct as f}from"./vendor-Dt3_Fdfs.js";(function(){try{var o=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new o.Error().stack;e&&(o._sentryDebugIds=o._sentryDebugIds||{},o._sentryDebugIds[e]="f98e3f03-2dce-4864-983f-fe75768554b9",o._sentryDebugIdIdentifier="sentry-dbid-f98e3f03-2dce-4864-983f-fe75768554b9")}catch{}})();const p="_tooltip_1391b_17",c={tooltip:p};function b({text:o,children:e,...s}){return t.jsxs(i,{children:[t.jsx(n,{...s,children:e}),t.jsx(l,{children:t.jsx(r,{side:"bottom",sideOffset:4,children:t.jsxs(d,{className:c.tooltip,children:[t.jsx(f,{}),o]})})})]})}export{b as T};
|
|
2
|
+
//# sourceMappingURL=Tooltip-C5iPq6NR.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip-
|
|
1
|
+
{"version":3,"file":"Tooltip-C5iPq6NR.js","sources":["../../src/common/components/tooltip/Tooltip.tsx"],"sourcesContent":["import { PropsWithChildren } from 'react';\nimport { Tooltip as BaseTooltip } from '@base-ui/react/tooltip';\n\nimport style from './Tooltip.module.scss';\n\ninterface TooltipProps extends BaseTooltip.Trigger.Props {\n text: string;\n}\n\nexport default function Tooltip({ text, children, ...triggerProps }: PropsWithChildren<TooltipProps>) {\n return (\n <BaseTooltip.Root>\n <BaseTooltip.Trigger {...triggerProps}>{children}</BaseTooltip.Trigger>\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner side='bottom' sideOffset={4}>\n <BaseTooltip.Popup className={style.tooltip}>\n <BaseTooltip.Arrow />\n {text}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n </BaseTooltip.Root>\n );\n}\n"],"names":["Tooltip","text","children","triggerProps","jsxs","BaseTooltip.Root","jsx","BaseTooltip.Trigger","BaseTooltip.Portal","BaseTooltip.Positioner","BaseTooltip.Popup","style","tooltip","BaseTooltip.Arrow"],"mappings":"6dASA,SAAwBA,EAAQ,CAAEC,KAAAA,EAAMC,SAAAA,EAAU,GAAGC,CAA8C,EAAG,CAElG,OAAAC,EAAA,KAACC,EAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAwBJ,GAAAA,EAAeD,SAAAA,CAAS,CAAA,QAChDM,EAAA,CACC,SAACF,EAAA,IAAAG,EAAA,CAAuB,KAAK,SAAS,WAAY,EAChD,SAACL,EAAAA,KAAAM,EAAA,CAAkB,UAAWC,EAAMC,QAClC,SAAA,CAACN,EAAA,IAAAO,EAAA,EAAiB,EACjBZ,CAAAA,CACH,CAAA,CACF,CAAA,CACF,CAAA,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{h as a,j as o}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=ViewLogo-
|
|
1
|
+
import{h as a,j as o}from"./vendor-Dt3_Fdfs.js";import{N as s}from"./index-3aosT33y.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new e.Error().stack;r&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[r]="6bf22d2d-1cd6-4a1c-a028-becb64aafaad",e._sentryDebugIdIdentifier="sentry-dbid-6bf22d2d-1cd6-4a1c-a028-becb64aafaad")}catch{}})();function f({name:e,className:r}){const n=a.useRef(null),t=()=>{n.current&&(n.current.style.display="none")};return o.jsx("div",{className:r,children:o.jsx("img",{ref:n,alt:"",src:`${s}/${e}`,className:"viewLogo",onError:t})})}export{f as V};
|
|
2
|
+
//# sourceMappingURL=ViewLogo-DcDhyyIF.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewLogo-
|
|
1
|
+
{"version":3,"file":"ViewLogo-DcDhyyIF.js","sources":["../../src/common/components/view-logo/ViewLogo.tsx"],"sourcesContent":["import { useRef } from 'react';\n\nimport { projectLogoPath } from '../../api/constants';\n\nimport './ViewLogo.scss';\n\ninterface ViewLogoProps {\n name: string;\n className: string;\n}\n\nexport default function ViewLogo({ name, className }: ViewLogoProps) {\n const imageRef = useRef<HTMLImageElement>(null);\n\n const hideImage = () => {\n if (!imageRef.current) return;\n\n imageRef.current.style.display = 'none';\n };\n\n // we wrap the image in a div to help maintain the aspect ratio\n return (\n <div className={className}>\n <img ref={imageRef} alt='' src={`${projectLogoPath}/${name}`} className='viewLogo' onError={hideImage} />\n </div>\n );\n}\n"],"names":["ViewLogo","name","className","imageRef","useRef","hideImage","current","style","display","projectLogoPath"],"mappings":"kbAWA,SAAwBA,EAAS,CAAEC,KAAAA,EAAMC,UAAAA,CAAyB,EAAG,CAC7DC,MAAAA,EAAWC,SAAyB,IAAI,EAExCC,EAAYA,IAAM,CACjBF,EAASG,UAELA,EAAAA,QAAQC,MAAMC,QAAU,OACnC,EAGA,aACG,MAAI,CAAA,UAAAN,EACH,eAAC,MAAI,CAAA,IAAKC,EAAU,IAAI,GAAG,IAAK,GAAGM,CAAe,IAAIR,CAAI,GAAI,UAAU,WAAW,QAASI,EAAU,CACxG,CAAA,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{l as S,j as t,h as d,ay as E,aN as D,D as F,q as I,s as $,t as O,G as A,v as H}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=ViewParamsEditor-
|
|
1
|
+
import{l as S,j as t,h as d,ay as E,aN as D,D as F,q as I,s as $,t as O,G as A,v as H}from"./vendor-Dt3_Fdfs.js";import{bl as L,e as _,B as j,ah as v,a as z,bm as R,D as B,ak as U}from"./index-3aosT33y.js";import{b as q,C as W,S as M,I as G}from"./SwatchPicker-DuWAohyD.js";import{i as J}from"./viewUtils-k0tARVDN.js";import{S as K}from"./Select-CvUrsmYI.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new e.Error().stack;s&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[s]="457dc24a-f88c-416d-aaa8-95df28dfb3df",e._sentryDebugIdIdentifier="sentry-dbid-457dc24a-f88c-416d-aaa8-95df28dfb3df")}catch{}})();function Re(e,s=[],a=!0){const n=[...s];for(const[r,o]of Object.entries(e))a&&o.type==="image"||n.push({value:`custom-${r}`,label:`Custom: ${o.label}`});return n}function Be(e,s=!0){const a=[];for(const[n,r]of Object.entries(e))s&&r.type==="image"||a.push({value:n,label:r.label,colour:r.colour});return a}function Ue(e,s=[]){const a=e.custom.map((n,r)=>({value:`${r}-${n.title}`,label:n.title}));return[...s,...a]}function Q(e){return e.startsWith("#")?e.substring(1):e}function X(e){const s={defaultValues:{},colorFields:new Set,booleanFields:new Set,isPersistedField:new Set,persistedValues:{}};return e.forEach(a=>{a.options.forEach(n=>{n.type==="persist"?(s.isPersistedField.add(n.id),n.values&&(s.persistedValues[n.id]=n.values)):s.defaultValues[n.id]=String(n.defaultValue),n.type==="colour"?s.colorFields.add(n.id):n.type==="boolean"&&s.booleanFields.add(n.id)})}),s}function Y(e,s){const a=new URLSearchParams,n=new Set,r=X(s),o=(i,l)=>{const c=`${i}:${l}`;n.has(c)||(n.add(c),a.append(i,l))};return Object.entries(r.persistedValues).forEach(([i,l])=>{l.forEach(c=>{c&&o(i,c)})}),Object.entries(e).forEach(([i,l])=>{typeof l=="string"&&l.length&&(r.isPersistedField.has(i)&&(Array.from(n).forEach(c=>{c.startsWith(`${i}:`)&&n.delete(c)}),a.delete(i)),l.split(",").forEach(c=>{const u=r.colorFields.has(i)?Q(c):r.booleanFields.has(i)?c==="on"?"true":"false":c;(r.isPersistedField.has(i)||r.defaultValues[i]!==u)&&o(i,u)}))}),a}function Z(e,s){const a=new Set;s.forEach(r=>{r.options.forEach(o=>{a.add(o.id)})});const n=new URLSearchParams;return e.forEach((r,o)=>{a.has(o)||n.append(o,r)}),n}const T="_presetSection_gc8wt_17",ee="_preset_gc8wt_17",se="_active_gc8wt_34",te="_presetActions_gc8wt_38",p={presetSection:T,preset:ee,active:se,presetActions:te};function ae({target:e}){const{viewPresets:s}=L(e),[a,n]=S(),r=o=>{const i=new URLSearchParams(o.search);i.set("alias",o.alias),n(i)};return s.length===0?null:t.jsx("div",{className:p.presetSection,children:s.map(o=>{const i=a.get("alias")===o.alias;return t.jsxs("div",{className:_([p.preset,i&&p.active]),children:[t.jsx("div",{children:o.alias}),t.jsx(j,{variant:i?"ghosted":"subtle-white",onClick:()=>r(o),disabled:i,className:p.presetActions,children:i?"Applied":"Apply"})]},o.alias)})})}var w=(e=>(e.ClockOptions="Clock Options",e.TimerOptions="Timer Options",e.DataSources="Data sources",e.ElementVisibility="Element visibility",e.BehaviourOptions="View behaviour",e.StyleOverride="View style override",e.Animation="View animation",e.Schedule="Schedule options",e.Hidden="Hidden options",e))(w||{});const ne="_inline_4jmjk_17",re={inline:ne},y=e=>e.startsWith("#")?e:`#${e}`;function oe({name:e,value:s}){const[a,n]=d.useState(()=>y(s));return d.useEffect(()=>{n(y(s))},[s]),t.jsxs("div",{className:re.inline,children:[t.jsx(q,{color:a,onChange:n,alwaysDisplayColor:!0}),t.jsx("span",{children:a}),t.jsx("input",{type:"hidden",name:e,value:a})]})}const ie="_inline_7qz4u_17",le="_toggleSelect_7qz4u_24",ce="_empty_7qz4u_52",g={inline:ie,toggleSelect:le,empty:ce};function P({paramField:e}){const[s]=S(),{id:a,type:n,defaultValue:r}=e;if(n==="persist")return!e.values||!e.values.length?null:t.jsx("input",{hidden:!0,name:a,readOnly:!0,value:e.values.join(",")});if(n==="option"){const c=s.get(a)||r;return e.values.length===0?t.jsx("span",{className:g.empty,children:"No options available"}):t.jsx(fe,{id:a,initialValue:c,options:e.values})}if(n==="multi-option"){const l=s.getAll(a);return t.jsx(de,{paramField:e,options:l.length?l:e.defaultValue??[""]})}if(n==="boolean")return t.jsx(ue,{id:a,initialValue:J(s.get(a))??r});if(n==="number"){const{placeholder:l}=e,c=s.get(a)??r;return t.jsx(v,{height:"large",type:"number",step:"any",name:a,defaultValue:c,placeholder:l})}if(n==="colour")return t.jsx(oe,{name:a,value:s.get(a)??r});const o=s.get(a)??r??"",{placeholder:i}=e;return t.jsx(me,{id:a,initialValue:o,placeholder:i})}function de({paramField:e,options:s}){const{id:a,values:n}=e,[r,o]=d.useState(s);d.useEffect(()=>{o(s)},[s]);const i=(l,c)=>{o(c?u=>[...u,l]:u=>u.filter(b=>b!==l))};return n.length===0?t.jsx("span",{className:g.empty,children:"No options available"}):t.jsxs(t.Fragment,{children:[t.jsx("input",{name:a,hidden:!0,readOnly:!0,value:r.join(",")}),t.jsx("div",{className:g.inline,children:n.map(l=>t.jsxs("label",{className:g.toggleSelect,style:{"--user-bg":l.colour},children:[t.jsx(W,{checked:r.includes(l.value),onCheckedChange:c=>i(l.value,c)}),l.label]},l.value))})]})}function ue({id:e,initialValue:s}){const[a,n]=d.useState(s);return d.useEffect(()=>{n(s)},[s]),t.jsx(M,{size:"large",name:e,checked:a,onCheckedChange:n})}function fe({id:e,initialValue:s,options:a}){const[n,r]=d.useState(s);return d.useEffect(()=>{r(s)},[s]),t.jsx(K,{size:"large",name:e,options:a,value:n,onValueChange:o=>{o!==null&&r(o)}})}function me({id:e,initialValue:s,...a}){const[n,r]=d.useState(s);return d.useEffect(()=>{r(s)},[s]),t.jsx(v,{height:"large",name:e,value:n,onChange:o=>r(o.target.value),...a})}const he="_section_1ssto_17",pe="_sectionHeader_1ssto_22",ge="_collapsible_1ssto_28",_e="_label_1ssto_32",be="_title_1ssto_41",je="_description_1ssto_47",Se="_closed_1ssto_53",xe="_open_1ssto_58",ye="_hidden_1ssto_63",m={section:he,sectionHeader:pe,collapsible:ge,label:_e,title:be,description:je,closed:Se,open:xe,hidden:ye};function ve({title:e,collapsible:s,options:a}){const[n,r]=E({key:`params-${e}`,defaultValue:!1}),o=()=>{s&&r(i=>!i)};return t.jsx("section",{className:m.section,children:e===w.Hidden?t.jsx(Pe,{options:a}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:_([m.sectionHeader,s&&m.collapsible]),onClick:o,children:[e,s&&t.jsx(D,{className:_([n?m.closed:m.open])})]}),t.jsx(we,{options:a,collapsed:n})]})})}function we({options:e,collapsed:s}){return t.jsx(t.Fragment,{children:e.map(a=>t.jsxs("label",{className:_([m.label,s&&m.hidden]),children:[t.jsx("span",{className:m.title,children:a.title}),t.jsx("span",{className:m.description,children:a.description}),t.jsx(P,{paramField:a})]},a.title))})}function Pe({options:e}){return t.jsx(t.Fragment,{children:e.map((s,a)=>t.jsx(P,{paramField:s},s.title+a))})}const Ce="_backdrop_1pnpt_26",ke="_drawer_1pnpt_17",Ve="_header_1pnpt_67",Ne="_body_1pnpt_77",Ee="_footer_1pnpt_84",De="_sectionList_1pnpt_92",Fe="_info_1pnpt_99",h={backdrop:Ce,drawer:ke,header:Ve,body:Ne,footer:Ee,sectionList:De,info:Fe},qe=d.memo(Ie);function Ie({target:e,viewOptions:s}){const[a,n]=S(),{data:r}=z(),{isOpen:o,close:i}=R(),l=B(),c=()=>Z(a,s),u=()=>{i()},b=()=>{n(c())},C=f=>{f.preventDefault();const k=Object.fromEntries(new FormData(f.currentTarget)),x=Y(k,s);c().forEach((V,N)=>{x.append(N,V)}),n(x),l&&i()};return t.jsx(F,{open:o,onOpenChange:f=>{f||u()},children:t.jsxs(I,{children:[t.jsx($,{className:h.backdrop}),t.jsxs(O,{className:h.drawer,children:[t.jsxs("div",{className:h.header,children:[t.jsx(A,{children:"Customise"}),t.jsx(U,{variant:"subtle-white",size:"large","data-testid":"close-view-params",onClick:u,children:t.jsx(H,{})})]}),t.jsxs("div",{className:h.body,children:[r.overrideStyles&&t.jsx(G,{className:h.info,children:"This view style is being modified by a custom CSS file."}),t.jsx(ae,{target:e}),t.jsx("form",{id:"edit-params-form",onSubmit:C,className:h.sectionList,children:s.map(f=>t.jsx(ve,{title:f.title,collapsible:f.collapsible,options:f.options},f.title))})]}),t.jsxs("div",{className:h.footer,children:[t.jsx(j,{variant:"subtle",size:"large",onClick:b,type:"reset",children:"Reset to default"}),t.jsx(j,{variant:"primary",size:"large",form:"edit-params-form",type:"submit","data-testid":"apply-view-params",children:"Apply"})]})]})]})})}export{w as O,qe as V,Ue as a,Be as b,Re as m};
|
|
2
|
+
//# sourceMappingURL=ViewParamsEditor-DeMdkxxC.js.map
|
|
Binary file
|
|
Binary file
|