@getontime/cli 4.2.0 → 4.2.1
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-WSlbFC9X.js +2 -0
- package/client/assets/Backstage-WSlbFC9X.js.br +0 -0
- package/client/assets/Backstage-WSlbFC9X.js.gz +0 -0
- package/client/assets/{Backstage-DG-hwPI3.js.map → Backstage-WSlbFC9X.js.map} +1 -1
- package/client/assets/{Countdown-C8LGl1pp.js → Countdown-B32qlxYT.js} +2 -2
- package/client/assets/Countdown-B32qlxYT.js.br +0 -0
- package/client/assets/Countdown-B32qlxYT.js.gz +0 -0
- package/client/assets/{Countdown-C8LGl1pp.js.map → Countdown-B32qlxYT.js.map} +1 -1
- package/client/assets/{CustomTranslationModal-CJ9-aDjl.js → CustomTranslationModal-CtBvokyt.js} +2 -2
- package/client/assets/CustomTranslationModal-CtBvokyt.js.br +0 -0
- package/client/assets/CustomTranslationModal-CtBvokyt.js.gz +0 -0
- package/client/assets/{CustomTranslationModal-CJ9-aDjl.js.map → CustomTranslationModal-CtBvokyt.js.map} +1 -1
- package/client/assets/DelayIndicator-BFZFpsY5.js +2 -0
- package/client/assets/DelayIndicator-BFZFpsY5.js.br +0 -0
- package/client/assets/DelayIndicator-BFZFpsY5.js.gz +0 -0
- package/client/assets/{DelayIndicator-F4GdgsGh.js.map → DelayIndicator-BFZFpsY5.js.map} +1 -1
- package/client/assets/EditorFeatureWrapper-DaMxgBMP.js +2 -0
- package/client/assets/EditorFeatureWrapper-DaMxgBMP.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-DaMxgBMP.js.gz +0 -0
- package/client/assets/{EditorFeatureWrapper-eIpSr_UK.js.map → EditorFeatureWrapper-DaMxgBMP.js.map} +1 -1
- package/client/assets/EditorUtils-DoaSwWiz.js +2 -0
- package/client/assets/EditorUtils-DoaSwWiz.js.br +0 -0
- package/client/assets/EditorUtils-DoaSwWiz.js.gz +0 -0
- package/client/assets/{EditorUtils-Bd3J5Dvf.js.map → EditorUtils-DoaSwWiz.js.map} +1 -1
- package/client/assets/Empty-D1UteOYj.js +2 -0
- package/client/assets/Empty-D1UteOYj.js.br +0 -0
- package/client/assets/Empty-D1UteOYj.js.gz +0 -0
- package/client/assets/{Empty-C0IdV_kI.js.map → Empty-D1UteOYj.js.map} +1 -1
- package/client/assets/EmptyPage-DeRjpRKZ.js +2 -0
- package/client/assets/EmptyPage-DeRjpRKZ.js.br +0 -0
- package/client/assets/EmptyPage-DeRjpRKZ.js.gz +0 -0
- package/client/assets/{EmptyPage-Ct3d0DqJ.js.map → EmptyPage-DeRjpRKZ.js.map} +1 -1
- package/client/assets/FollowButton-FodezDem.js +2 -0
- package/client/assets/FollowButton-FodezDem.js.br +0 -0
- package/client/assets/FollowButton-FodezDem.js.gz +0 -0
- package/client/assets/{FollowButton-BG-ycRWu.js.map → FollowButton-FodezDem.js.map} +1 -1
- package/client/assets/{MessageControlExport-X-4dl9QT.js → MessageControlExport-CFGgiwk_.js} +3 -3
- package/client/assets/MessageControlExport-CFGgiwk_.js.br +0 -0
- package/client/assets/MessageControlExport-CFGgiwk_.js.gz +0 -0
- package/client/assets/MessageControlExport-CFGgiwk_.js.map +1 -0
- package/client/assets/{MilestoneEditor-rgBQSXVU.js → MilestoneEditor-B5BdJ5ju.js} +2 -2
- package/client/assets/MilestoneEditor-B5BdJ5ju.js.br +0 -0
- package/client/assets/MilestoneEditor-B5BdJ5ju.js.gz +0 -0
- package/client/assets/{MilestoneEditor-rgBQSXVU.js.map → MilestoneEditor-B5BdJ5ju.js.map} +1 -1
- package/client/assets/Modal-B8ZZbVMg.js +2 -0
- package/client/assets/Modal-B8ZZbVMg.js.br +0 -0
- package/client/assets/Modal-B8ZZbVMg.js.gz +0 -0
- package/client/assets/{Modal-Bn1bZkwb.js.map → Modal-B8ZZbVMg.js.map} +1 -1
- package/client/assets/{MultiPartProgressBar-Cmw-gisu.js → MultiPartProgressBar-BKHk19Hb.js} +2 -2
- package/client/assets/MultiPartProgressBar-BKHk19Hb.js.br +0 -0
- package/client/assets/MultiPartProgressBar-BKHk19Hb.js.gz +0 -0
- package/client/assets/{MultiPartProgressBar-Cmw-gisu.js.map → MultiPartProgressBar-BKHk19Hb.js.map} +1 -1
- package/client/assets/{OperatorExport-CJd8jmY4.js → OperatorExport-DQM14DsN.js} +2 -2
- package/client/assets/OperatorExport-DQM14DsN.js.br +0 -0
- package/client/assets/OperatorExport-DQM14DsN.js.gz +0 -0
- package/client/assets/{OperatorExport-CJd8jmY4.js.map → OperatorExport-DQM14DsN.js.map} +1 -1
- package/client/assets/{OverviewWrapper-1Vj3_ojX.js → OverviewWrapper-D1hUkrRi.js} +2 -2
- package/client/assets/OverviewWrapper-D1hUkrRi.js.br +0 -0
- package/client/assets/OverviewWrapper-D1hUkrRi.js.gz +0 -0
- package/client/assets/{OverviewWrapper-1Vj3_ojX.js.map → OverviewWrapper-D1hUkrRi.js.map} +1 -1
- package/client/assets/PipHost-B9-cZ8Lm.js +2 -0
- package/client/assets/PipHost-B9-cZ8Lm.js.br +0 -0
- package/client/assets/PipHost-B9-cZ8Lm.js.gz +0 -0
- package/client/assets/PipHost-B9-cZ8Lm.js.map +1 -0
- package/client/assets/PipHost-DEhjTbGT.css +1 -0
- package/client/assets/PipHost-DEhjTbGT.css.br +0 -0
- package/client/assets/PipHost-DEhjTbGT.css.gz +0 -0
- package/client/assets/{ProjectInfo-BduQgjcz.js → ProjectInfo-Dp1TZyBd.js} +2 -2
- package/client/assets/ProjectInfo-Dp1TZyBd.js.br +0 -0
- package/client/assets/ProjectInfo-Dp1TZyBd.js.gz +0 -0
- package/client/assets/{ProjectInfo-BduQgjcz.js.map → ProjectInfo-Dp1TZyBd.js.map} +1 -1
- package/client/assets/ProtectRoute-EejQ5o_H.js +2 -0
- package/client/assets/ProtectRoute-EejQ5o_H.js.br +0 -0
- package/client/assets/ProtectRoute-EejQ5o_H.js.gz +0 -0
- package/client/assets/{ProtectRoute-Ci_AIozP.js.map → ProtectRoute-EejQ5o_H.js.map} +1 -1
- package/client/assets/{ProtectedCuesheet-D_zdkwM-.js → ProtectedCuesheet-DvYSgueA.js} +2 -2
- package/client/assets/ProtectedCuesheet-DvYSgueA.js.br +0 -0
- package/client/assets/ProtectedCuesheet-DvYSgueA.js.gz +0 -0
- package/client/assets/{ProtectedCuesheet-D_zdkwM-.js.map → ProtectedCuesheet-DvYSgueA.js.map} +1 -1
- package/client/assets/{ProtectedEditor-CNL2ig79.js → ProtectedEditor-B0l0X3QP.js} +3 -3
- package/client/assets/ProtectedEditor-B0l0X3QP.js.br +0 -0
- package/client/assets/ProtectedEditor-B0l0X3QP.js.gz +0 -0
- package/client/assets/ProtectedEditor-B0l0X3QP.js.map +1 -0
- package/client/assets/RundownEntry-CwiStTnR.js +2 -0
- package/client/assets/RundownEntry-CwiStTnR.js.br +0 -0
- package/client/assets/RundownEntry-CwiStTnR.js.gz +0 -0
- package/client/assets/RundownEntry-CwiStTnR.js.map +1 -0
- package/client/assets/RundownExport-CCaOfHIr.js +3 -0
- package/client/assets/RundownExport-CCaOfHIr.js.br +0 -0
- package/client/assets/RundownExport-CCaOfHIr.js.gz +0 -0
- package/client/assets/RundownExport-CCaOfHIr.js.map +1 -0
- package/client/assets/Select-cHK8JrMG.js +2 -0
- package/client/assets/Select-cHK8JrMG.js.br +0 -0
- package/client/assets/Select-cHK8JrMG.js.gz +0 -0
- package/client/assets/{Select-B5xNi_tM.js.map → Select-cHK8JrMG.js.map} +1 -1
- package/client/assets/{Studio-D4hRKhJ1.js → Studio-BzwFDYzk.js} +2 -2
- package/client/assets/Studio-BzwFDYzk.js.br +0 -0
- package/client/assets/Studio-BzwFDYzk.js.gz +0 -0
- package/client/assets/{Studio-D4hRKhJ1.js.map → Studio-BzwFDYzk.js.map} +1 -1
- package/client/assets/StyleEditor-RZvkKHdf.js +2 -0
- package/client/assets/StyleEditor-RZvkKHdf.js.br +0 -0
- package/client/assets/StyleEditor-RZvkKHdf.js.gz +0 -0
- package/client/assets/{StyleEditor-BvcE8dkA.js.map → StyleEditor-RZvkKHdf.js.map} +1 -1
- package/client/assets/SuperscriptPeriod-DaZq1rr6.js +2 -0
- package/client/assets/SuperscriptPeriod-DaZq1rr6.js.br +0 -0
- package/client/assets/SuperscriptPeriod-DaZq1rr6.js.gz +0 -0
- package/client/assets/{SuperscriptPeriod-BmHAoSBy.js.map → SuperscriptPeriod-DaZq1rr6.js.map} +1 -1
- package/client/assets/SuperscriptTime-Mc0ZGBMo.js +2 -0
- package/client/assets/SuperscriptTime-Mc0ZGBMo.js.br +0 -0
- package/client/assets/SuperscriptTime-Mc0ZGBMo.js.gz +0 -0
- package/client/assets/{SuperscriptTime-Nou92D8X.js.map → SuperscriptTime-Mc0ZGBMo.js.map} +1 -1
- package/client/assets/{TimeElements-XpRwBsaa.js → TimeElements-dIvFHgcd.js} +2 -2
- package/client/assets/TimeElements-dIvFHgcd.js.br +0 -0
- package/client/assets/TimeElements-dIvFHgcd.js.gz +0 -0
- package/client/assets/{TimeElements-XpRwBsaa.js.map → TimeElements-dIvFHgcd.js.map} +1 -1
- package/client/assets/TimeInput-Duzx40TC.js +2 -0
- package/client/assets/TimeInput-Duzx40TC.js.br +0 -0
- package/client/assets/TimeInput-Duzx40TC.js.gz +0 -0
- package/client/assets/{TimeInput-Bu_5GlHP.js.map → TimeInput-Duzx40TC.js.map} +1 -1
- package/client/assets/{TimelinePage-CQqUB1KT.js → TimelinePage-C-OHrCR8.js} +2 -2
- package/client/assets/TimelinePage-C-OHrCR8.js.br +0 -0
- package/client/assets/TimelinePage-C-OHrCR8.js.gz +0 -0
- package/client/assets/{TimelinePage-CQqUB1KT.js.map → TimelinePage-C-OHrCR8.js.map} +1 -1
- package/client/assets/Timer-CGqVtVEC.js +2 -0
- package/client/assets/Timer-CGqVtVEC.js.br +0 -0
- package/client/assets/Timer-CGqVtVEC.js.gz +0 -0
- package/client/assets/{Timer-CIr2L3gJ.js.map → Timer-CGqVtVEC.js.map} +1 -1
- package/client/assets/{Timer-B7nk3TMf.css → Timer-Jjolf5Ra.css} +1 -1
- package/client/assets/Timer-Jjolf5Ra.css.br +0 -0
- package/client/assets/Timer-Jjolf5Ra.css.gz +0 -0
- package/client/assets/{TimerControlExport-4a3Cd9x8.js → TimerControlExport-GJn4WWdH.js} +2 -2
- package/client/assets/TimerControlExport-GJn4WWdH.js.br +0 -0
- package/client/assets/TimerControlExport-GJn4WWdH.js.gz +0 -0
- package/client/assets/{TimerControlExport-4a3Cd9x8.js.map → TimerControlExport-GJn4WWdH.js.map} +1 -1
- package/client/assets/TitleCard-BqbrUnHO.js +2 -0
- package/client/assets/TitleCard-BqbrUnHO.js.br +0 -0
- package/client/assets/TitleCard-BqbrUnHO.js.gz +0 -0
- package/client/assets/{TitleCard-1U35ek0D.js.map → TitleCard-BqbrUnHO.js.map} +1 -1
- package/client/assets/Tooltip-BQBvaIZx.js +2 -0
- package/client/assets/Tooltip-BQBvaIZx.js.br +0 -0
- package/client/assets/Tooltip-BQBvaIZx.js.gz +0 -0
- package/client/assets/{Tooltip-B8y25e3n.js.map → Tooltip-BQBvaIZx.js.map} +1 -1
- package/client/assets/ViewLogo-BdL1hUV1.js +2 -0
- package/client/assets/ViewLogo-BdL1hUV1.js.br +0 -0
- package/client/assets/ViewLogo-BdL1hUV1.js.gz +0 -0
- package/client/assets/{ViewLogo-BHsV7Faa.js.map → ViewLogo-BdL1hUV1.js.map} +1 -1
- package/client/assets/{ViewParamsEditor-BMHXOv-K.js → ViewParamsEditor-CFedpp6w.js} +2 -2
- package/client/assets/ViewParamsEditor-CFedpp6w.js.br +0 -0
- package/client/assets/ViewParamsEditor-CFedpp6w.js.gz +0 -0
- package/client/assets/{ViewParamsEditor-BMHXOv-K.js.map → ViewParamsEditor-CFedpp6w.js.map} +1 -1
- package/client/assets/dateConfig-BU1RZfIK.js +2 -0
- package/client/assets/dateConfig-BU1RZfIK.js.br +0 -0
- package/client/assets/dateConfig-BU1RZfIK.js.gz +0 -0
- package/client/assets/dateConfig-BU1RZfIK.js.map +1 -0
- package/client/assets/editorSettings-BMt-7s8I.js +2 -0
- package/client/assets/editorSettings-BMt-7s8I.js.br +0 -0
- package/client/assets/editorSettings-BMt-7s8I.js.gz +0 -0
- package/client/assets/{editorSettings-DH9ca-nB.js.map → editorSettings-BMt-7s8I.js.map} +1 -1
- package/client/assets/{getProgress-DlrSzpnf.js → getProgress-sdxPEEPi.js} +2 -2
- package/client/assets/getProgress-sdxPEEPi.js.br +0 -0
- package/client/assets/getProgress-sdxPEEPi.js.gz +0 -0
- package/client/assets/{getProgress-DlrSzpnf.js.map → getProgress-sdxPEEPi.js.map} +1 -1
- package/client/assets/index-CoGiopcb.js +3 -0
- package/client/assets/index-CoGiopcb.js.br +0 -0
- package/client/assets/index-CoGiopcb.js.gz +0 -0
- package/client/assets/index-CoGiopcb.js.map +1 -0
- package/client/assets/{offset-CLG4o744.js → offset-BS90Rks2.js} +2 -2
- package/client/assets/offset-BS90Rks2.js.br +0 -0
- package/client/assets/offset-BS90Rks2.js.gz +0 -0
- package/client/assets/{offset-CLG4o744.js.map → offset-BS90Rks2.js.map} +1 -1
- package/client/assets/parseUserTime-DZJMcfuJ.js +2 -0
- package/client/assets/parseUserTime-DZJMcfuJ.js.br +0 -0
- package/client/assets/parseUserTime-DZJMcfuJ.js.gz +0 -0
- package/client/assets/{parseUserTime-Cp5iWS7y.js.map → parseUserTime-DZJMcfuJ.js.map} +1 -1
- package/client/assets/{playbackstate-B3BKJ8cT.js → playbackstate-CWexoP3a.js} +2 -2
- package/client/assets/playbackstate-CWexoP3a.js.br +0 -0
- package/client/assets/playbackstate-CWexoP3a.js.gz +0 -0
- package/client/assets/{playbackstate-B3BKJ8cT.js.map → playbackstate-CWexoP3a.js.map} +1 -1
- package/client/assets/{presentation.utils-B-wIv_a5.js → presentation.utils-Zo5hNQje.js} +2 -2
- package/client/assets/presentation.utils-Zo5hNQje.js.br +0 -0
- package/client/assets/presentation.utils-Zo5hNQje.js.gz +0 -0
- package/client/assets/{presentation.utils-B-wIv_a5.js.map → presentation.utils-Zo5hNQje.js.map} +1 -1
- package/client/assets/rundownUtils-Dl1x6NDv.js +2 -0
- package/client/assets/rundownUtils-Dl1x6NDv.js.br +0 -0
- package/client/assets/rundownUtils-Dl1x6NDv.js.gz +0 -0
- package/client/assets/{rundownUtils-DJKMt8Ih.js.map → rundownUtils-Dl1x6NDv.js.map} +1 -1
- package/client/assets/timer.utils-BnMyVO6Z.js +2 -0
- package/client/assets/timer.utils-BnMyVO6Z.js.br +0 -0
- package/client/assets/timer.utils-BnMyVO6Z.js.gz +0 -0
- package/client/assets/timer.utils-BnMyVO6Z.js.map +1 -0
- package/client/assets/useCustomFields-CcTb-GQM.js +2 -0
- package/client/assets/useCustomFields-CcTb-GQM.js.br +0 -0
- package/client/assets/useCustomFields-CcTb-GQM.js.gz +0 -0
- package/client/assets/{useCustomFields-BUJkzZvM.js.map → useCustomFields-CcTb-GQM.js.map} +1 -1
- package/client/assets/useFollowComponent-BjhV6Uv8.js +2 -0
- package/client/assets/useFollowComponent-BjhV6Uv8.js.br +0 -0
- package/client/assets/useFollowComponent-BjhV6Uv8.js.gz +0 -0
- package/client/assets/{useFollowComponent-Eyo4hWVG.js.map → useFollowComponent-BjhV6Uv8.js.map} +1 -1
- package/client/assets/{useProjectData-DGA6K2Zs.js → useProjectData-B5mjXsMj.js} +2 -2
- package/client/assets/useProjectData-B5mjXsMj.js.br +0 -0
- package/client/assets/useProjectData-B5mjXsMj.js.gz +0 -0
- package/client/assets/{useProjectData-DGA6K2Zs.js.map → useProjectData-B5mjXsMj.js.map} +1 -1
- package/client/assets/useReport-zMbyWwpn.js +2 -0
- package/client/assets/useReport-zMbyWwpn.js.br +0 -0
- package/client/assets/useReport-zMbyWwpn.js.gz +0 -0
- package/client/assets/{useReport-BUCsRa2T.js.map → useReport-zMbyWwpn.js.map} +1 -1
- package/client/assets/useRundown-CHsh5rnl.js +2 -0
- package/client/assets/useRundown-CHsh5rnl.js.br +0 -0
- package/client/assets/useRundown-CHsh5rnl.js.gz +0 -0
- package/client/assets/useRundown-CHsh5rnl.js.map +1 -0
- package/client/assets/useWindowTitle-mLKt65i7.js +2 -0
- package/client/assets/useWindowTitle-mLKt65i7.js.br +0 -0
- package/client/assets/useWindowTitle-mLKt65i7.js.gz +0 -0
- package/client/assets/{useWindowTitle-DU8NlxIu.js.map → useWindowTitle-mLKt65i7.js.map} +1 -1
- package/client/assets/{validateEvent-3adKsP1N.js → validateEvent-CUmvjN95.js} +2 -2
- package/client/assets/validateEvent-CUmvjN95.js.br +0 -0
- package/client/assets/validateEvent-CUmvjN95.js.gz +0 -0
- package/client/assets/{validateEvent-3adKsP1N.js.map → validateEvent-CUmvjN95.js.map} +1 -1
- package/client/assets/{vendor-BoH5HFNN.js → vendor-Cdwxo8bP.js} +21 -21
- package/client/assets/vendor-Cdwxo8bP.js.br +0 -0
- package/client/assets/vendor-Cdwxo8bP.js.gz +0 -0
- package/client/assets/{vendor-BoH5HFNN.js.map → vendor-Cdwxo8bP.js.map} +1 -1
- package/client/assets/{viewLoader.utils-BPOG1xso.js → viewLoader.utils-DuXjY5zb.js} +2 -2
- package/client/assets/viewLoader.utils-DuXjY5zb.js.br +0 -0
- package/client/assets/viewLoader.utils-DuXjY5zb.js.gz +0 -0
- package/client/assets/{viewLoader.utils-BPOG1xso.js.map → viewLoader.utils-DuXjY5zb.js.map} +1 -1
- package/client/assets/viewUtils-dKRKkb_F.js +2 -0
- package/client/assets/viewUtils-dKRKkb_F.js.br +0 -0
- package/client/assets/viewUtils-dKRKkb_F.js.gz +0 -0
- package/client/assets/viewUtils-dKRKkb_F.js.map +1 -0
- package/client/index.html +2 -2
- package/package.json +1 -1
- package/server/index.cjs +89 -89
- package/client/assets/Backstage-DG-hwPI3.js +0 -2
- package/client/assets/Backstage-DG-hwPI3.js.br +0 -0
- package/client/assets/Backstage-DG-hwPI3.js.gz +0 -0
- package/client/assets/Countdown-C8LGl1pp.js.br +0 -0
- package/client/assets/Countdown-C8LGl1pp.js.gz +0 -0
- package/client/assets/CustomTranslationModal-CJ9-aDjl.js.br +0 -0
- package/client/assets/CustomTranslationModal-CJ9-aDjl.js.gz +0 -0
- package/client/assets/DelayIndicator-F4GdgsGh.js +0 -2
- package/client/assets/DelayIndicator-F4GdgsGh.js.br +0 -0
- package/client/assets/DelayIndicator-F4GdgsGh.js.gz +0 -0
- package/client/assets/EditorFeatureWrapper-eIpSr_UK.js +0 -2
- package/client/assets/EditorFeatureWrapper-eIpSr_UK.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-eIpSr_UK.js.gz +0 -0
- package/client/assets/EditorUtils-Bd3J5Dvf.js +0 -2
- package/client/assets/EditorUtils-Bd3J5Dvf.js.br +0 -0
- package/client/assets/EditorUtils-Bd3J5Dvf.js.gz +0 -0
- package/client/assets/Empty-C0IdV_kI.js +0 -2
- package/client/assets/Empty-C0IdV_kI.js.br +0 -0
- package/client/assets/Empty-C0IdV_kI.js.gz +0 -0
- package/client/assets/EmptyPage-Ct3d0DqJ.js +0 -2
- package/client/assets/EmptyPage-Ct3d0DqJ.js.br +0 -0
- package/client/assets/EmptyPage-Ct3d0DqJ.js.gz +0 -0
- package/client/assets/FollowButton-BG-ycRWu.js +0 -2
- package/client/assets/FollowButton-BG-ycRWu.js.br +0 -0
- package/client/assets/FollowButton-BG-ycRWu.js.gz +0 -0
- package/client/assets/MessageControlExport-X-4dl9QT.js.br +0 -0
- package/client/assets/MessageControlExport-X-4dl9QT.js.gz +0 -0
- package/client/assets/MessageControlExport-X-4dl9QT.js.map +0 -1
- package/client/assets/MilestoneEditor-rgBQSXVU.js.br +0 -0
- package/client/assets/MilestoneEditor-rgBQSXVU.js.gz +0 -0
- package/client/assets/Modal-Bn1bZkwb.js +0 -2
- package/client/assets/Modal-Bn1bZkwb.js.br +0 -0
- package/client/assets/Modal-Bn1bZkwb.js.gz +0 -0
- package/client/assets/MultiPartProgressBar-Cmw-gisu.js.br +0 -0
- package/client/assets/MultiPartProgressBar-Cmw-gisu.js.gz +0 -0
- package/client/assets/OperatorExport-CJd8jmY4.js.br +0 -0
- package/client/assets/OperatorExport-CJd8jmY4.js.gz +0 -0
- package/client/assets/OverviewWrapper-1Vj3_ojX.js.br +0 -0
- package/client/assets/OverviewWrapper-1Vj3_ojX.js.gz +0 -0
- package/client/assets/PipHost-BUF7n-lT.css +0 -1
- package/client/assets/PipHost-BUF7n-lT.css.br +0 -0
- package/client/assets/PipHost-BUF7n-lT.css.gz +0 -0
- package/client/assets/PipHost-D7liNR4M.js +0 -2
- package/client/assets/PipHost-D7liNR4M.js.br +0 -0
- package/client/assets/PipHost-D7liNR4M.js.gz +0 -0
- package/client/assets/PipHost-D7liNR4M.js.map +0 -1
- package/client/assets/ProjectInfo-BduQgjcz.js.br +0 -0
- package/client/assets/ProjectInfo-BduQgjcz.js.gz +0 -0
- package/client/assets/ProtectRoute-Ci_AIozP.js +0 -2
- package/client/assets/ProtectRoute-Ci_AIozP.js.br +0 -0
- package/client/assets/ProtectRoute-Ci_AIozP.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-D_zdkwM-.js.br +0 -0
- package/client/assets/ProtectedCuesheet-D_zdkwM-.js.gz +0 -0
- package/client/assets/ProtectedEditor-CNL2ig79.js.br +0 -0
- package/client/assets/ProtectedEditor-CNL2ig79.js.gz +0 -0
- package/client/assets/ProtectedEditor-CNL2ig79.js.map +0 -1
- package/client/assets/RundownEntry-Bs1ombtH.js +0 -2
- package/client/assets/RundownEntry-Bs1ombtH.js.br +0 -0
- package/client/assets/RundownEntry-Bs1ombtH.js.gz +0 -0
- package/client/assets/RundownEntry-Bs1ombtH.js.map +0 -1
- package/client/assets/RundownExport-BCT0ybxy.js +0 -3
- package/client/assets/RundownExport-BCT0ybxy.js.br +0 -0
- package/client/assets/RundownExport-BCT0ybxy.js.gz +0 -0
- package/client/assets/RundownExport-BCT0ybxy.js.map +0 -1
- package/client/assets/Select-B5xNi_tM.js +0 -2
- package/client/assets/Select-B5xNi_tM.js.br +0 -0
- package/client/assets/Select-B5xNi_tM.js.gz +0 -0
- package/client/assets/Studio-D4hRKhJ1.js.br +0 -0
- package/client/assets/Studio-D4hRKhJ1.js.gz +0 -0
- package/client/assets/StyleEditor-BvcE8dkA.js +0 -2
- package/client/assets/StyleEditor-BvcE8dkA.js.br +0 -3
- package/client/assets/StyleEditor-BvcE8dkA.js.gz +0 -0
- package/client/assets/SuperscriptPeriod-BmHAoSBy.js +0 -2
- package/client/assets/SuperscriptPeriod-BmHAoSBy.js.br +0 -0
- package/client/assets/SuperscriptPeriod-BmHAoSBy.js.gz +0 -0
- package/client/assets/SuperscriptTime-Nou92D8X.js +0 -2
- package/client/assets/SuperscriptTime-Nou92D8X.js.br +0 -0
- package/client/assets/SuperscriptTime-Nou92D8X.js.gz +0 -0
- package/client/assets/TimeElements-XpRwBsaa.js.br +0 -0
- package/client/assets/TimeElements-XpRwBsaa.js.gz +0 -0
- package/client/assets/TimeInput-Bu_5GlHP.js +0 -2
- package/client/assets/TimeInput-Bu_5GlHP.js.br +0 -0
- package/client/assets/TimeInput-Bu_5GlHP.js.gz +0 -0
- package/client/assets/TimelinePage-CQqUB1KT.js.br +0 -0
- package/client/assets/TimelinePage-CQqUB1KT.js.gz +0 -0
- package/client/assets/Timer-B7nk3TMf.css.br +0 -0
- package/client/assets/Timer-B7nk3TMf.css.gz +0 -0
- package/client/assets/Timer-CIr2L3gJ.js +0 -2
- package/client/assets/Timer-CIr2L3gJ.js.br +0 -0
- package/client/assets/Timer-CIr2L3gJ.js.gz +0 -0
- package/client/assets/TimerControlExport-4a3Cd9x8.js.br +0 -0
- package/client/assets/TimerControlExport-4a3Cd9x8.js.gz +0 -0
- package/client/assets/TitleCard-1U35ek0D.js +0 -2
- package/client/assets/TitleCard-1U35ek0D.js.br +0 -0
- package/client/assets/TitleCard-1U35ek0D.js.gz +0 -0
- package/client/assets/Tooltip-B8y25e3n.js +0 -2
- package/client/assets/Tooltip-B8y25e3n.js.br +0 -0
- package/client/assets/Tooltip-B8y25e3n.js.gz +0 -0
- package/client/assets/ViewLogo-BHsV7Faa.js +0 -2
- package/client/assets/ViewLogo-BHsV7Faa.js.br +0 -0
- package/client/assets/ViewLogo-BHsV7Faa.js.gz +0 -0
- package/client/assets/ViewParamsEditor-BMHXOv-K.js.br +0 -0
- package/client/assets/ViewParamsEditor-BMHXOv-K.js.gz +0 -0
- package/client/assets/dateConfig-_BhycZza.js +0 -2
- package/client/assets/dateConfig-_BhycZza.js.br +0 -0
- package/client/assets/dateConfig-_BhycZza.js.gz +0 -0
- package/client/assets/dateConfig-_BhycZza.js.map +0 -1
- package/client/assets/editorSettings-DH9ca-nB.js +0 -2
- package/client/assets/editorSettings-DH9ca-nB.js.br +0 -0
- package/client/assets/editorSettings-DH9ca-nB.js.gz +0 -0
- package/client/assets/getProgress-DlrSzpnf.js.br +0 -0
- package/client/assets/getProgress-DlrSzpnf.js.gz +0 -0
- package/client/assets/index-CDBQg2fh.js +0 -3
- package/client/assets/index-CDBQg2fh.js.br +0 -0
- package/client/assets/index-CDBQg2fh.js.gz +0 -0
- package/client/assets/index-CDBQg2fh.js.map +0 -1
- package/client/assets/offset-CLG4o744.js.br +0 -0
- package/client/assets/offset-CLG4o744.js.gz +0 -0
- package/client/assets/parseUserTime-Cp5iWS7y.js +0 -2
- package/client/assets/parseUserTime-Cp5iWS7y.js.br +0 -0
- package/client/assets/parseUserTime-Cp5iWS7y.js.gz +0 -0
- package/client/assets/playbackstate-B3BKJ8cT.js.br +0 -0
- package/client/assets/playbackstate-B3BKJ8cT.js.gz +0 -0
- package/client/assets/presentation.utils-B-wIv_a5.js.br +0 -0
- package/client/assets/presentation.utils-B-wIv_a5.js.gz +0 -0
- package/client/assets/rundownUtils-DJKMt8Ih.js +0 -2
- package/client/assets/rundownUtils-DJKMt8Ih.js.br +0 -0
- package/client/assets/rundownUtils-DJKMt8Ih.js.gz +0 -0
- package/client/assets/timer.utils-ByC_bcT9.js +0 -2
- package/client/assets/timer.utils-ByC_bcT9.js.br +0 -0
- package/client/assets/timer.utils-ByC_bcT9.js.gz +0 -0
- package/client/assets/timer.utils-ByC_bcT9.js.map +0 -1
- package/client/assets/useCustomFields-BUJkzZvM.js +0 -2
- package/client/assets/useCustomFields-BUJkzZvM.js.br +0 -2
- package/client/assets/useCustomFields-BUJkzZvM.js.gz +0 -0
- package/client/assets/useFollowComponent-Eyo4hWVG.js +0 -2
- package/client/assets/useFollowComponent-Eyo4hWVG.js.br +0 -0
- package/client/assets/useFollowComponent-Eyo4hWVG.js.gz +0 -0
- package/client/assets/useProjectData-DGA6K2Zs.js.br +0 -0
- package/client/assets/useProjectData-DGA6K2Zs.js.gz +0 -0
- package/client/assets/useReport-BUCsRa2T.js +0 -2
- package/client/assets/useReport-BUCsRa2T.js.br +0 -0
- package/client/assets/useReport-BUCsRa2T.js.gz +0 -0
- package/client/assets/useRundown-BFae0_bU.js +0 -2
- package/client/assets/useRundown-BFae0_bU.js.br +0 -0
- package/client/assets/useRundown-BFae0_bU.js.gz +0 -0
- package/client/assets/useRundown-BFae0_bU.js.map +0 -1
- package/client/assets/useWindowTitle-DU8NlxIu.js +0 -2
- package/client/assets/useWindowTitle-DU8NlxIu.js.br +0 -0
- package/client/assets/useWindowTitle-DU8NlxIu.js.gz +0 -0
- package/client/assets/validateEvent-3adKsP1N.js.br +0 -0
- package/client/assets/validateEvent-3adKsP1N.js.gz +0 -0
- package/client/assets/vendor-BoH5HFNN.js.br +0 -0
- package/client/assets/vendor-BoH5HFNN.js.gz +0 -0
- package/client/assets/viewLoader.utils-BPOG1xso.js.br +0 -0
- package/client/assets/viewLoader.utils-BPOG1xso.js.gz +0 -0
- package/client/assets/viewUtils-DI8_kmUZ.js +0 -2
- package/client/assets/viewUtils-DI8_kmUZ.js.br +0 -0
- package/client/assets/viewUtils-DI8_kmUZ.js.gz +0 -0
- package/client/assets/viewUtils-DI8_kmUZ.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{x as t,r,m as i}from"./index-
|
|
2
|
-
//# sourceMappingURL=offset-
|
|
1
|
+
import{x as t,r,m as i}from"./index-CoGiopcb.js";import"./vendor-Cdwxo8bP.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ae43b062-a1cb-469a-9062-0929317fbf5f",e._sentryDebugIdIdentifier="sentry-dbid-ae43b062-a1cb-469a-9062-0929317fbf5f")}catch{}})();function d(e){if(e===null)return t;let n="";return e<0&&(n+="-"),e>0&&(n+="+"),n+=r(i(Math.abs(e))),n}function l(e){return e===null?"muted":e===0?null:e>0?"over":"under"}export{d as a,l as g};
|
|
2
|
+
//# sourceMappingURL=offset-BS90Rks2.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offset-
|
|
1
|
+
{"version":3,"file":"offset-BS90Rks2.js","sources":["../../src/common/utils/offset.ts"],"sourcesContent":["import { MaybeNumber } from 'ontime-types';\nimport { millisToString, removeLeadingZero } from 'ontime-utils';\n\nimport { enDash } from './styleUtils';\n\n/**\n * Formats offset text\n */\nexport function getOffsetText(offset: MaybeNumber): string {\n if (offset === null) {\n return enDash;\n }\n\n let offsetText = '';\n if (offset < 0) offsetText += '-';\n if (offset > 0) offsetText += '+';\n offsetText += removeLeadingZero(millisToString(Math.abs(offset)));\n return offsetText;\n}\n\nexport function getOffsetState(offset: MaybeNumber): 'over' | 'under' | 'muted' | null {\n if (offset === null) return 'muted';\n if (offset === 0) return null;\n // a positive value means that we are in over time aka behind schedule\n return offset > 0 ? 'over' : 'under';\n}\n"],"names":["getOffsetText","offset","enDash","offsetText","removeLeadingZero","millisToString","Math","abs","getOffsetState"],"mappings":"waAQO,SAASA,EAAcC,EAA6B,CACzD,GAAIA,IAAW,KACNC,OAAAA,EAGT,IAAIC,EAAa,GACbF,OAAAA,EAAS,IAAiBE,GAAA,KAC1BF,EAAS,IAAiBE,GAAA,KAC9BA,GAAcC,EAAkBC,EAAeC,KAAKC,IAAIN,CAAM,CAAC,CAAC,EACzDE,CACT,CAEO,SAASK,EAAeP,EAAwD,CACjFA,OAAAA,IAAW,KAAa,QACxBA,IAAW,EAAU,KAElBA,EAAS,EAAI,OAAS,OAC/B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{I as o,M as u,bg as h}from"./index-CoGiopcb.js";import"./vendor-Cdwxo8bP.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new s.Error().stack;e&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[e]="6208b6b5-d1dd-4f61-b7d8-3566cfd8f3a5",s._sentryDebugIdIdentifier="sentry-dbid-6208b6b5-d1dd-4f61-b7d8-3566cfd8f3a5")}catch{}})();function P(s){const{isAM:e,isPM:f,value:r}=I(s.toLowerCase()),n=m(r);if(n!==null)return n;const a=/[\s,:.]+/,[t,l,b]=r.split(a);let d=0,M=f;if(t!=null&&l!=null&&b!=null){let c=i(t);c===12&&(e&&(c=0),M=!1),d=c*o,d+=i(l)*u,d+=i(b)*h}else if(t!=null&&l==null&&b==null){const{inferredMillis:c,addAM:g}=p(t,e,f);d=c,M=g<12&&f}else if(t!=null&&l!=null&&b==null){let c=i(t);c===12&&(e&&(c=0),M=!1),d=c*o,d+=i(l)*u}return M&&(d+=12*o),d}function p(s,e,f){const r=s.length;let n=0,a=0;if(r===1)f||e?(n=i(s)*o,e&&(a=n)):n=i(s)*u;else if(r===2)f||e?(s==="12"&&e?n=0:n=i(s)*o,(e||s==="12")&&(a=12)):n=i(s)*u;else if(r===3)n=i(s[0])*o+i(s.substring(1))*u;else if(r===4)n=i(s.substring(0,2))*o+i(s.substring(2))*u;else if(r>=5){const t=i(s.substring(0,2)),l=i(s.substring(2,4)),b=i(s.substring(4));n=t*o+l*u+b*h}return{inferredMillis:n,addAM:a}}function m(s){const e=/(\d+)h(?:(\d+)(?!s))?/i.exec(s),f=e?i(e[1]):0,r=e!=null&&e[2]?i(e[2]):0,n=/(\d+)m/i.exec(s),a=n?i(n[1]):r,t=/(\d+)s/i.exec(s),l=t?i(t[1]):0;return e||n||t?f*o+a*u+l*h:null}function I(s){return s.endsWith("pm")?{isAM:!1,isPM:!0,value:s.slice(0,-2)}:s.endsWith("p")?{isAM:!1,isPM:!0,value:s.slice(0,-1)}:s.endsWith("am")?{isAM:!0,isPM:!1,value:s.slice(0,-2)}:s.endsWith("a")?{isAM:!0,isPM:!1,value:s.slice(0,-1)}:{isAM:!1,isPM:!1,value:s}}function i(s){const e=Number(s);return isNaN(e)?0:Math.abs(e)}export{P as p};
|
|
2
|
+
//# sourceMappingURL=parseUserTime-DZJMcfuJ.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseUserTime-
|
|
1
|
+
{"version":3,"file":"parseUserTime-DZJMcfuJ.js","sources":["../../../../packages/utils/src/date-utils/parseUserTime.ts"],"sourcesContent":["import { MILLIS_PER_HOUR, MILLIS_PER_MINUTE, MILLIS_PER_SECOND } from './conversionUtils.js';\n\n/**\n * @description Parses a user given time string to a value in milliseconds\n * @param {string} value - time string\n * @returns {number} - value in milliseconds\n */\nexport function parseUserTime(value: string): number {\n const { isAM, isPM, value: parsingValue } = checkAmPm(value.toLowerCase());\n const maybeMillisFromMatchers = checkMatchers(parsingValue);\n if (maybeMillisFromMatchers !== null) {\n return maybeMillisFromMatchers;\n }\n\n // split string at known separators : , .\n const separatorRegex = /[\\s,:.]+/;\n const [first, second, third] = parsingValue.split(separatorRegex);\n\n let millis = 0;\n let addTwelve = isPM;\n\n if (first != null && second != null && third != null) {\n // if string has three sections, treat as [hours] [minutes] [seconds]\n let hours = parse(first);\n if (hours === 12) {\n if (isAM) {\n hours = 0;\n }\n addTwelve = false;\n }\n millis = hours * MILLIS_PER_HOUR;\n millis += parse(second) * MILLIS_PER_MINUTE;\n millis += parse(third) * MILLIS_PER_SECOND;\n } else if (first != null && second == null && third == null) {\n // we only have one section, infer separators\n const { inferredMillis, addAM } = inferSeparators(first, isAM, isPM);\n millis = inferredMillis;\n addTwelve = addAM < 12 && isPM;\n } else if (first != null && second != null && third == null) {\n // if string has two sections, treat as [hours] [minutes]\n let hours = parse(first);\n if (hours === 12) {\n if (isAM) {\n hours = 0;\n }\n addTwelve = false;\n }\n millis = hours * MILLIS_PER_HOUR;\n millis += parse(second) * MILLIS_PER_MINUTE;\n }\n\n if (addTwelve) {\n millis += 12 * MILLIS_PER_HOUR;\n }\n\n return millis;\n}\n\n/**\n * @description Utility function to infer separators from a whole string\n * @param {string} value\n * @param {boolean} isAM\n * @param {boolean} isPM\n */\nfunction inferSeparators(value: string, isAM: boolean, isPM: boolean) {\n const length = value.length;\n let inferredMillis = 0;\n let addAM = 0;\n\n if (length === 1) {\n if (isPM || isAM) {\n inferredMillis = parse(value) * MILLIS_PER_HOUR;\n if (isAM) {\n // this ensures we dont add 12 hours in the end\n addAM = inferredMillis;\n }\n } else {\n inferredMillis = parse(value) * MILLIS_PER_MINUTE;\n }\n } else if (length === 2) {\n if (isPM || isAM) {\n if (value === '12' && isAM) {\n inferredMillis = 0;\n } else {\n inferredMillis = parse(value) * MILLIS_PER_HOUR;\n }\n\n if (isAM || value === '12') {\n // this ensures we dont add 12 hours in the end\n addAM = 12;\n }\n } else {\n inferredMillis = parse(value) * MILLIS_PER_MINUTE;\n }\n } else if (length === 3) {\n inferredMillis = parse(value[0]) * MILLIS_PER_HOUR + parse(value.substring(1)) * MILLIS_PER_MINUTE;\n } else if (length === 4) {\n inferredMillis = parse(value.substring(0, 2)) * MILLIS_PER_HOUR + parse(value.substring(2)) * MILLIS_PER_MINUTE;\n } else if (length >= 5) {\n const hours = parse(value.substring(0, 2));\n const minutes = parse(value.substring(2, 4));\n const seconds = parse(value.substring(4));\n inferredMillis = hours * MILLIS_PER_HOUR + minutes * MILLIS_PER_MINUTE + seconds * MILLIS_PER_SECOND;\n }\n return { inferredMillis, addAM };\n}\n\n/**\n * @description Utility function to check if a string contain h / m / s indicators\n * @param {string} value\n */\nfunction checkMatchers(value: string): number | null {\n // match hours with any digits after, but don't match digits that are part of seconds\n const hoursMatch = /(\\d+)h(?:(\\d+)(?!s))?/i.exec(value);\n const hoursMatchValue = hoursMatch ? parse(hoursMatch[1]) : 0;\n // if there's a number after 'h' without a unit and it's not followed by 's', treat it as minutes\n const implicitMinutesValue = hoursMatch?.[2] ? parse(hoursMatch[2]) : 0;\n\n const minutesMatch = /(\\d+)m/i.exec(value);\n // only use implicit minutes if there's no explicit minutes match\n const minutesMatchValue = minutesMatch ? parse(minutesMatch[1]) : implicitMinutesValue;\n\n const secondsMatch = /(\\d+)s/i.exec(value);\n const secondsMatchValue = secondsMatch ? parse(secondsMatch[1]) : 0;\n\n if (hoursMatch || minutesMatch || secondsMatch) {\n return (\n hoursMatchValue * MILLIS_PER_HOUR + minutesMatchValue * MILLIS_PER_MINUTE + secondsMatchValue * MILLIS_PER_SECOND\n );\n }\n return null;\n}\n\n/**\n * @description Utility function to check if a string contain am/pm indicators\n * @description expects the value to be lowercased\n * @param {string} value\n * @returns {Object}\n * @returns {boolean} result.isAM - Whether we parsed an AM indicator\n * @returns {boolean} result.isPM - Whether we parsed a PM indicator\n * @returns {string} result.value - The original string with AM/PM indicator removed\n */\nfunction checkAmPm(value: string): { isAM: boolean; isPM: boolean; value: string } {\n if (value.endsWith('pm')) {\n return { isAM: false, isPM: true, value: value.slice(0, -2) };\n }\n\n if (value.endsWith('p')) {\n return { isAM: false, isPM: true, value: value.slice(0, -1) };\n }\n\n if (value.endsWith('am')) {\n return { isAM: true, isPM: false, value: value.slice(0, -2) };\n }\n\n if (value.endsWith('a')) {\n return { isAM: true, isPM: false, value: value.slice(0, -1) };\n }\n\n return { isAM: false, isPM: false, value };\n}\n\n/**\n * @description safe parse string to int\n * @param {string} valueAsString\n * @return {number}\n */\nfunction parse(valueAsString: string): number {\n const parsed = Number(valueAsString);\n if (isNaN(parsed)) {\n return 0;\n }\n return Math.abs(parsed);\n}\n"],"names":["parseUserTime","value","isAM","isPM","parsingValue","checkAmPm","toLowerCase","maybeMillisFromMatchers","checkMatchers","separatorRegex","first","second","third","split","millis","addTwelve","hours","parse","MILLIS_PER_HOUR","MILLIS_PER_MINUTE","MILLIS_PER_SECOND","inferredMillis","addAM","inferSeparators","length","substring","minutes","seconds","hoursMatch","exec","hoursMatchValue","implicitMinutesValue","minutesMatch","minutesMatchValue","secondsMatch","secondsMatchValue","endsWith","slice","valueAsString","parsed","Number","isNaN","Math","abs"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./vendor-
|
|
2
|
-
//# sourceMappingURL=playbackstate-
|
|
1
|
+
import"./vendor-Cdwxo8bP.js";import{h as d}from"./index-CoGiopcb.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]="c3dd2455-175d-4b86-9a69-48ba65f5aa3c",e._sentryDebugIdIdentifier="sentry-dbid-c3dd2455-175d-4b86-9a69-48ba65f5aa3c")}catch{}})();function r(e){return e===d.Play||e===d.Pause||e===d.Roll}export{r as i};
|
|
2
|
+
//# sourceMappingURL=playbackstate-CWexoP3a.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playbackstate-
|
|
1
|
+
{"version":3,"file":"playbackstate-CWexoP3a.js","sources":["../../../../packages/utils/src/playback-utils/playbackstate.ts"],"sourcesContent":["import { Playback } from 'ontime-types';\n\n/**\n * Utility checks whether the playback is considered to be active\n * @param state\n * @returns\n */\nexport function isPlaybackActive(state: Playback): boolean {\n return state === Playback.Play || state === Playback.Pause || state === Playback.Roll;\n}\n"],"names":["isPlaybackActive","state","Playback","Play","Pause","Roll"],"mappings":"+ZAOO,SAASA,EAAiBC,EAA0B,CACzD,OAAOA,IAAUC,EAASC,MAAQF,IAAUC,EAASE,OAASH,IAAUC,EAASG,IACnF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./vendor-
|
|
2
|
-
//# sourceMappingURL=presentation.utils-
|
|
1
|
+
import"./vendor-Cdwxo8bP.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]="a093213b-6fe4-4c44-8290-167b0bc050c8",e._sentryDebugIdIdentifier="sentry-dbid-a093213b-6fe4-4c44-8290-167b0bc050c8")}catch{}})();function f(e,r,n,o){return n?e.warningColor:o?e.dangerColor:r||e.normalColor}export{f as g};
|
|
2
|
+
//# sourceMappingURL=presentation.utils-Zo5hNQje.js.map
|
|
Binary file
|
|
Binary file
|
package/client/assets/{presentation.utils-B-wIv_a5.js.map → presentation.utils-Zo5hNQje.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation.utils-
|
|
1
|
+
{"version":3,"file":"presentation.utils-Zo5hNQje.js","sources":["../../src/views/utils/presentation.utils.ts"],"sourcesContent":["import { ViewSettings } from 'ontime-types';\n\n/**\n * Which colour should the timer have at a given moment\n */\nexport function getTimerColour(\n viewSettings: ViewSettings,\n timerColour: string | undefined,\n showWarning: boolean,\n showDanger: boolean,\n) {\n if (showWarning) return viewSettings.warningColor;\n if (showDanger) return viewSettings.dangerColor;\n return timerColour || viewSettings.normalColor;\n}\n"],"names":["getTimerColour","viewSettings","timerColour","showWarning","showDanger","warningColor","dangerColor","normalColor"],"mappings":"uXAKO,SAASA,EACdC,EACAC,EACAC,EACAC,EACA,CACID,OAAAA,EAAoBF,EAAaI,aACjCD,EAAmBH,EAAaK,YAC7BJ,GAAeD,EAAaM,WACrC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./vendor-Cdwxo8bP.js";import"./index-CoGiopcb.js";import{i as u,a,j as d}from"./useRundown-CHsh5rnl.js";(function(){try{var n=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new n.Error().stack;t&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[t]="dcbdd3f3-ebfd-4327-944f-7b9cb91ab0f9",n._sentryDebugIdIdentifier="sentry-dbid-dcbdd3f3-ebfd-4327-944f-7b9cb91ab0f9")}catch{}})();function x(n,t){if(!t.length)return null;const e=t[0];return n[e]??null}function g(n){for(let t=0;t<n.length;t++){const e=n[t];if(u(e)&&a(e))return{firstEvent:e,firstIndex:t}}return{firstEvent:null,firstIndex:null}}function y(n,t){const e=t.at(-1);return e===void 0?null:n[e]??null}function I(n){if(n.length<1)return{lastEvent:null,lastIndex:null};for(let t=n.length-1;t>=0;t--){const e=n[t];if(u(e)&&a(e))return{lastEvent:e,lastIndex:t}}return{lastEvent:null,lastIndex:null}}function E(n,t,e){const i=t.findIndex(r=>r===e);if(i!==-1&&i+1<t.length){const r=i+1,l=t[r];return{entry:n[l],index:r}}else return{entry:null,index:null}}function b(n,t){const e=n.findIndex(i=>i.id===t);if(e<0)return{nextEvent:null,nextIndex:null};for(let i=e+1;i<n.length;i++){const r=n[i];if(u(r))return{nextEvent:r,nextIndex:i}}return{nextEvent:null,nextIndex:null}}function p(n,t,e){const i=t.findIndex(r=>r===e);if(i!==-1&&i-1>=0){const r=i-1,l=t[r];return{entry:n[l],index:r}}else return{entry:null,index:null}}const m=(n,t)=>{const e={...t,id:n.id,timeStart:n.timeStart,timeEnd:n.timeEnd,duration:n.duration,linkStart:n.linkStart,parent:n.parent,delay:n.delay,gap:n.gap,dayOffset:n.dayOffset,revision:n.revision},i={...n,id:t.id,timeStart:t.timeStart,timeEnd:t.timeEnd,duration:t.duration,linkStart:t.linkStart,parent:t.parent,delay:t.delay,gap:t.gap,dayOffset:t.dayOffset,revision:t.revision};return[e,i]};function h(n,t){return n.find(e=>e.id===t)}function N(n,t,e){let i=!1;for(let r=t.length-1;r>=0;r--){const l=t[r];if(!i&&l===e){i=!0;continue}const s=n[l];if(i&&d(s))return{entry:s,index:r}}return{entry:null,index:null}}function S(n,t,e){let i=!1;for(let r=0;r<t.length;r++){const l=t[r];if(!i&&l===e){i=!0;continue}const s=n[l];if(i&&d(s))return{entry:s,index:r}}return{entry:null,index:null}}export{b as a,g as b,I as c,p as d,y as e,x as f,h as g,N as h,S as i,E as j,m as s};
|
|
2
|
+
//# sourceMappingURL=rundownUtils-Dl1x6NDv.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rundownUtils-DJKMt8Ih.js","sources":["../../../../packages/utils/src/rundown-utils/rundownUtils.ts"],"sourcesContent":["import type {\n EntryId,\n OntimeEntry,\n OntimeEvent,\n OntimeGroup,\n PlayableEvent,\n Rundown,\n RundownEntries,\n} from 'ontime-types';\nimport { isOntimeEvent, isOntimeGroup, isPlayableEvent } from 'ontime-types';\n\ntype IndexAndEntry = { entry: OntimeEntry | null; index: number | null };\n\n/**\n * Gets first event in a normalised rundown, if it exists\n */\nexport function getFirstNormal(entries: RundownEntries, order: EntryId[]): OntimeEntry | null {\n if (!order.length) {\n return null;\n }\n const eventId = order[0];\n return entries[eventId] ?? null;\n}\n\n/**\n * Gets first scheduled event in rundown, if it exists\n */\nexport function getFirstEvent(rundown: OntimeEntry[]): {\n firstEvent: PlayableEvent | null;\n firstIndex: number | null;\n} {\n for (let i = 0; i < rundown.length; i++) {\n const firstEvent = rundown[i];\n if (isOntimeEvent(firstEvent) && isPlayableEvent(firstEvent)) {\n return { firstEvent, firstIndex: i };\n }\n }\n return { firstEvent: null, firstIndex: null };\n}\n\n/**\n * Gets first scheduled event in a normalised rundown, if it exists\n */\nexport function getFirstEventNormal(\n rundown: RundownEntries,\n order: EntryId[],\n): {\n firstEvent: PlayableEvent | null;\n firstIndex: number | null;\n} {\n for (let i = 0; i < order.length; i++) {\n const firstId = order[i];\n const firstEvent = rundown[firstId];\n if (isOntimeEvent(firstEvent) && isPlayableEvent(firstEvent)) {\n return { firstEvent, firstIndex: i };\n }\n }\n return { firstEvent: null, firstIndex: null };\n}\n\n/**\n * Gets last event in a normalised rundown, if it exists\n */\nexport function getLastNormal(entries: RundownEntries, order: EntryId[]): OntimeEntry | null {\n const lastId = order.at(-1);\n if (lastId === undefined) {\n return null;\n }\n return entries[lastId] ?? null;\n}\n\n/**\n * Gets last scheduled event in rundown, if it exists\n */\nexport function getLastEvent(rundown: OntimeEntry[]): {\n lastEvent: PlayableEvent | null;\n lastIndex: number | null;\n} {\n if (rundown.length < 1) {\n return { lastEvent: null, lastIndex: null };\n }\n\n for (let i = rundown.length - 1; i >= 0; i--) {\n const lastEvent = rundown[i];\n if (isOntimeEvent(lastEvent) && isPlayableEvent(lastEvent)) {\n return { lastEvent, lastIndex: i };\n }\n }\n return { lastEvent: null, lastIndex: null };\n}\n\n/**\n * Gets last scheduled event in a normalised rundown, if it exists\n */\nexport function getLastEventNormal(\n rundown: RundownEntries,\n order: string[],\n): {\n lastEvent: OntimeEvent | null;\n lastIndex: number | null;\n} {\n if (order.length < 1) {\n return { lastEvent: null, lastIndex: null };\n }\n\n for (let i = order.length - 1; i >= 0; i--) {\n const lastId = order[i];\n const lastEvent = rundown[lastId];\n if (isOntimeEvent(lastEvent) && !lastEvent.skip) {\n return { lastEvent, lastIndex: i };\n }\n }\n return { lastEvent: null, lastIndex: null };\n}\n\n/**\n * Gets next entry in rundown, if it exists\n */\nexport function getNext(\n rundown: Pick<Rundown, 'entries' | 'order'>,\n currentId: string,\n): { nextEvent: OntimeEntry | null; nextIndex: number | null } {\n const index = rundown.order.findIndex((entryId) => entryId === currentId);\n if (index !== -1 && index + 1 < rundown.order.length) {\n const nextIndex = index + 1;\n const nextId = rundown.order[nextIndex];\n const nextEvent = rundown.entries[nextId];\n return { nextEvent, nextIndex };\n } else {\n return { nextEvent: null, nextIndex: null };\n }\n}\n\n/**\n * Gets next entry in rundown, if it exists\n */\nexport function getNextNormal(rundown: RundownEntries, order: string[], currentId: string): IndexAndEntry {\n const currentIndex = order.findIndex((id) => id === currentId);\n if (currentIndex !== -1 && currentIndex + 1 < order.length) {\n const index = currentIndex + 1;\n const nextId = order[index];\n const entry = rundown[nextId];\n return { entry, index };\n } else {\n return { entry: null, index: null };\n }\n}\n\n/**\n * Gets next scheduled event in rundown, if it exists\n */\nexport function getNextEvent(\n rundown: OntimeEntry[],\n currentId: string,\n): { nextEvent: OntimeEvent | null; nextIndex: number | null } {\n const index = rundown.findIndex((entry) => entry.id === currentId);\n if (index < 0) {\n return { nextEvent: null, nextIndex: null };\n }\n\n for (let i = index + 1; i < rundown.length; i++) {\n const nextEvent = rundown[i];\n if (isOntimeEvent(nextEvent)) {\n return { nextEvent, nextIndex: i };\n }\n }\n return { nextEvent: null, nextIndex: null };\n}\n\n/**\n * Gets next scheduled event in a normalised rundown, if it exists\n */\nexport function getNextEventNormal(\n entries: RundownEntries,\n order: EntryId[],\n currentId: string,\n): { nextEvent: OntimeEvent | null; nextIndex: number | null } {\n const index = order.findIndex((entryId) => entryId === currentId);\n if (index < 0) {\n return { nextEvent: null, nextIndex: null };\n }\n\n for (let i = index + 1; i < order.length; i++) {\n const nextId = order[i];\n const nextEvent = entries[nextId];\n if (isOntimeEvent(nextEvent)) {\n return { nextEvent, nextIndex: i };\n }\n }\n return { nextEvent: null, nextIndex: null };\n}\n\n/**\n * Gets previous entry in rundown, if it exists\n */\nexport function getPrevious(rundown: Pick<Rundown, 'entries' | 'order'>, currentId: string): IndexAndEntry {\n const currentIndex = rundown.order.findIndex((entryId) => entryId === currentId);\n\n if (currentIndex > 1) {\n const index = currentIndex - 1;\n const previousId = rundown.order[index];\n const entry = rundown.entries[previousId];\n return { entry, index };\n } else {\n return { entry: null, index: null };\n }\n}\n\n/**\n * Gets previous entry in a normalised rundown, if it exists\n */\nexport function getPreviousNormal(entries: RundownEntries, order: string[], currentId: string): IndexAndEntry {\n const currentIndex = order.findIndex((id) => id === currentId);\n\n if (currentIndex !== -1 && currentIndex - 1 >= 0) {\n const index = currentIndex - 1;\n const previousId = order[index];\n const entry = entries[previousId];\n return { entry, index };\n } else {\n return { entry: null, index: null };\n }\n}\n\n/**\n * Gets previous scheduled event in rundown, if it exists\n */\nexport function getPreviousEvent(\n rundown: Pick<Rundown, 'entries' | 'order'>,\n currentId: string,\n): { previousEvent: OntimeEvent | null; previousIndex: number | null } {\n const index = rundown.order.findIndex((entryId) => entryId === currentId);\n if (index < 0) {\n return { previousEvent: null, previousIndex: null };\n }\n for (let i = index - 1; i >= 0; i--) {\n const previousId = rundown.order[i];\n const previousEvent = rundown.entries[previousId];\n if (isOntimeEvent(previousEvent)) {\n return { previousEvent, previousIndex: i };\n }\n }\n return { previousEvent: null, previousIndex: null };\n}\n\n/**\n * Gets previous scheduled event in a normalised rundown, if it exists\n */\nexport function getPreviousEventNormal(\n entries: RundownEntries,\n order: EntryId[],\n currentId: string,\n): { previousEvent: OntimeEvent | null; previousIndex: number | null } {\n const index = order.findIndex((entryId) => entryId === currentId);\n if (index < 0) {\n return { previousEvent: null, previousIndex: null };\n }\n for (let i = index - 1; i >= 0; i--) {\n const previousId = order[i];\n const previousEvent = entries[previousId];\n if (isOntimeEvent(previousEvent)) {\n return { previousEvent, previousIndex: i };\n }\n }\n return { previousEvent: null, previousIndex: null };\n}\n\n/**\n * @description swaps two OntimeEvents in the rundown\n */\nexport const swapEventData = (eventA: OntimeEvent, eventB: OntimeEvent): [newA: OntimeEvent, newB: OntimeEvent] => {\n const newA = {\n ...eventB,\n // events keep the ID\n id: eventA.id,\n // events keep the schedule\n timeStart: eventA.timeStart,\n timeEnd: eventA.timeEnd,\n duration: eventA.duration,\n linkStart: eventA.linkStart,\n parent: eventA.parent,\n // keep schedule metadata\n delay: eventA.delay,\n gap: eventA.gap,\n dayOffset: eventA.dayOffset,\n // keep revision number\n revision: eventA.revision,\n };\n\n const newB = {\n ...eventA,\n // events keep the ID\n id: eventB.id,\n // events keep the schedule\n timeStart: eventB.timeStart,\n timeEnd: eventB.timeEnd,\n duration: eventB.duration,\n linkStart: eventB.linkStart,\n parent: eventB.parent,\n // keep schedule metadata\n delay: eventB.delay,\n gap: eventB.gap,\n dayOffset: eventB.dayOffset,\n // keep revision number\n revision: eventB.revision,\n };\n\n return [newA, newB];\n};\n\nexport function getEventWithId(rundown: OntimeEntry[], id: string): OntimeEntry | undefined {\n return rundown.find((event) => event.id === id);\n}\n\n/**\n * Gets relevant group element for a given ID\n */\nexport function getPreviousGroupNormal(rundown: RundownEntries, order: string[], currentId: string): IndexAndEntry {\n let foundCurrentEvent = false;\n // Iterate backwards through the rundown to find the current event\n for (let index = order.length - 1; index >= 0; index--) {\n const id = order[index];\n if (!foundCurrentEvent && id === currentId) {\n // set the flag when the current event is found\n foundCurrentEvent = true;\n continue;\n }\n // the first group before the current event is the relevant one\n const entry = rundown[id];\n if (foundCurrentEvent && isOntimeGroup(entry)) {\n return { entry, index };\n }\n }\n // no groups exist before current event\n return { entry: null, index: null };\n}\n\n/**\n * Gets next group element for a given ID\n */\nexport function getNextGroupNormal(rundown: RundownEntries, order: string[], currentId: string): IndexAndEntry {\n let foundCurrentEvent = false;\n // Iterate backwards through the rundown to find the current event\n for (let index = 0; index < order.length; index++) {\n const id = order[index];\n if (!foundCurrentEvent && id === currentId) {\n // set the flag when the current event is found\n foundCurrentEvent = true;\n continue;\n }\n // the first group before the current event is the relevant one\n const entry = rundown[id];\n if (foundCurrentEvent && isOntimeGroup(entry)) {\n return { entry, index };\n }\n }\n // no groups exist before current event\n return { entry: null, index: null };\n}\n\n/**\n * Gets relevant group element for a given ID\n */\nexport function getPreviousGroup(rundown: Pick<Rundown, 'entries' | 'order'>, currentId: EntryId): OntimeGroup | null {\n const currentEvent = rundown.entries[currentId];\n\n // check if event is inside a group\n if (isOntimeEvent(currentEvent) && currentEvent.parent) {\n return rundown.entries[currentEvent.parent] as OntimeGroup;\n }\n\n let foundCurrentEvent = false;\n // Iterate backwards through the rundown to find the current event\n for (let i = rundown.order.length - 1; i >= 0; i--) {\n const entryId = rundown.order[i];\n const entry = rundown.entries[entryId];\n if (!foundCurrentEvent && entry.id === currentId) {\n // set the flag when the current event is found\n foundCurrentEvent = true;\n continue;\n }\n // the first group before the current event is the relevant one\n if (foundCurrentEvent && isOntimeGroup(entry)) {\n return entry;\n }\n }\n // no groups exist before null event\n return null;\n}\n"],"names":["getFirstNormal","entries","order","eventId","getFirstEvent","rundown","i","firstEvent","isOntimeEvent","isPlayableEvent","getLastNormal","lastId","getLastEvent","lastEvent","getNextNormal","currentId","currentIndex","id","index","nextId","getNextEvent","entry","nextEvent","getPreviousNormal","previousId","swapEventData","eventA","eventB","newA","newB","getEventWithId","event","getPreviousGroupNormal","foundCurrentEvent","isOntimeGroup","getNextGroupNormal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rundownUtils-Dl1x6NDv.js","sources":["../../../../packages/utils/src/rundown-utils/rundownUtils.ts"],"sourcesContent":["import type {\n EntryId,\n OntimeEntry,\n OntimeEvent,\n OntimeGroup,\n PlayableEvent,\n Rundown,\n RundownEntries,\n} from 'ontime-types';\nimport { isOntimeEvent, isOntimeGroup, isPlayableEvent } from 'ontime-types';\n\ntype IndexAndEntry = { entry: OntimeEntry | null; index: number | null };\n\n/**\n * Gets first event in a normalised rundown, if it exists\n */\nexport function getFirstNormal(entries: RundownEntries, order: EntryId[]): OntimeEntry | null {\n if (!order.length) {\n return null;\n }\n const eventId = order[0];\n return entries[eventId] ?? null;\n}\n\n/**\n * Gets first scheduled event in rundown, if it exists\n */\nexport function getFirstEvent(rundown: OntimeEntry[]): {\n firstEvent: PlayableEvent | null;\n firstIndex: number | null;\n} {\n for (let i = 0; i < rundown.length; i++) {\n const firstEvent = rundown[i];\n if (isOntimeEvent(firstEvent) && isPlayableEvent(firstEvent)) {\n return { firstEvent, firstIndex: i };\n }\n }\n return { firstEvent: null, firstIndex: null };\n}\n\n/**\n * Gets first scheduled event in a normalised rundown, if it exists\n */\nexport function getFirstEventNormal(\n rundown: RundownEntries,\n order: EntryId[],\n): {\n firstEvent: PlayableEvent | null;\n firstIndex: number | null;\n} {\n for (let i = 0; i < order.length; i++) {\n const firstId = order[i];\n const firstEvent = rundown[firstId];\n if (isOntimeEvent(firstEvent) && isPlayableEvent(firstEvent)) {\n return { firstEvent, firstIndex: i };\n }\n }\n return { firstEvent: null, firstIndex: null };\n}\n\n/**\n * Gets last event in a normalised rundown, if it exists\n */\nexport function getLastNormal(entries: RundownEntries, order: EntryId[]): OntimeEntry | null {\n const lastId = order.at(-1);\n if (lastId === undefined) {\n return null;\n }\n return entries[lastId] ?? null;\n}\n\n/**\n * Gets last scheduled event in rundown, if it exists\n */\nexport function getLastEvent(rundown: OntimeEntry[]): {\n lastEvent: PlayableEvent | null;\n lastIndex: number | null;\n} {\n if (rundown.length < 1) {\n return { lastEvent: null, lastIndex: null };\n }\n\n for (let i = rundown.length - 1; i >= 0; i--) {\n const lastEvent = rundown[i];\n if (isOntimeEvent(lastEvent) && isPlayableEvent(lastEvent)) {\n return { lastEvent, lastIndex: i };\n }\n }\n return { lastEvent: null, lastIndex: null };\n}\n\n/**\n * Gets last scheduled event in a normalised rundown, if it exists\n */\nexport function getLastEventNormal(\n rundown: RundownEntries,\n order: string[],\n): {\n lastEvent: OntimeEvent | null;\n lastIndex: number | null;\n} {\n if (order.length < 1) {\n return { lastEvent: null, lastIndex: null };\n }\n\n for (let i = order.length - 1; i >= 0; i--) {\n const lastId = order[i];\n const lastEvent = rundown[lastId];\n if (isOntimeEvent(lastEvent) && !lastEvent.skip) {\n return { lastEvent, lastIndex: i };\n }\n }\n return { lastEvent: null, lastIndex: null };\n}\n\n/**\n * Gets next entry in rundown, if it exists\n */\nexport function getNext(\n rundown: Pick<Rundown, 'entries' | 'order'>,\n currentId: string,\n): { nextEvent: OntimeEntry | null; nextIndex: number | null } {\n const index = rundown.order.findIndex((entryId) => entryId === currentId);\n if (index !== -1 && index + 1 < rundown.order.length) {\n const nextIndex = index + 1;\n const nextId = rundown.order[nextIndex];\n const nextEvent = rundown.entries[nextId];\n return { nextEvent, nextIndex };\n } else {\n return { nextEvent: null, nextIndex: null };\n }\n}\n\n/**\n * Gets next entry in rundown, if it exists\n */\nexport function getNextNormal(rundown: RundownEntries, order: string[], currentId: string): IndexAndEntry {\n const currentIndex = order.findIndex((id) => id === currentId);\n if (currentIndex !== -1 && currentIndex + 1 < order.length) {\n const index = currentIndex + 1;\n const nextId = order[index];\n const entry = rundown[nextId];\n return { entry, index };\n } else {\n return { entry: null, index: null };\n }\n}\n\n/**\n * Gets next scheduled event in rundown, if it exists\n */\nexport function getNextEvent(\n rundown: OntimeEntry[],\n currentId: string,\n): { nextEvent: OntimeEvent | null; nextIndex: number | null } {\n const index = rundown.findIndex((entry) => entry.id === currentId);\n if (index < 0) {\n return { nextEvent: null, nextIndex: null };\n }\n\n for (let i = index + 1; i < rundown.length; i++) {\n const nextEvent = rundown[i];\n if (isOntimeEvent(nextEvent)) {\n return { nextEvent, nextIndex: i };\n }\n }\n return { nextEvent: null, nextIndex: null };\n}\n\n/**\n * Gets next scheduled event in a normalised rundown, if it exists\n */\nexport function getNextEventNormal(\n entries: RundownEntries,\n order: EntryId[],\n currentId: string,\n): { nextEvent: OntimeEvent | null; nextIndex: number | null } {\n const index = order.findIndex((entryId) => entryId === currentId);\n if (index < 0) {\n return { nextEvent: null, nextIndex: null };\n }\n\n for (let i = index + 1; i < order.length; i++) {\n const nextId = order[i];\n const nextEvent = entries[nextId];\n if (isOntimeEvent(nextEvent)) {\n return { nextEvent, nextIndex: i };\n }\n }\n return { nextEvent: null, nextIndex: null };\n}\n\n/**\n * Gets previous entry in rundown, if it exists\n */\nexport function getPrevious(rundown: Pick<Rundown, 'entries' | 'order'>, currentId: string): IndexAndEntry {\n const currentIndex = rundown.order.findIndex((entryId) => entryId === currentId);\n\n if (currentIndex > 1) {\n const index = currentIndex - 1;\n const previousId = rundown.order[index];\n const entry = rundown.entries[previousId];\n return { entry, index };\n } else {\n return { entry: null, index: null };\n }\n}\n\n/**\n * Gets previous entry in a normalised rundown, if it exists\n */\nexport function getPreviousNormal(entries: RundownEntries, order: string[], currentId: string): IndexAndEntry {\n const currentIndex = order.findIndex((id) => id === currentId);\n\n if (currentIndex !== -1 && currentIndex - 1 >= 0) {\n const index = currentIndex - 1;\n const previousId = order[index];\n const entry = entries[previousId];\n return { entry, index };\n } else {\n return { entry: null, index: null };\n }\n}\n\n/**\n * Gets previous scheduled event in rundown, if it exists\n */\nexport function getPreviousEvent(\n rundown: Pick<Rundown, 'entries' | 'order'>,\n currentId: string,\n): { previousEvent: OntimeEvent | null; previousIndex: number | null } {\n const index = rundown.order.findIndex((entryId) => entryId === currentId);\n if (index < 0) {\n return { previousEvent: null, previousIndex: null };\n }\n for (let i = index - 1; i >= 0; i--) {\n const previousId = rundown.order[i];\n const previousEvent = rundown.entries[previousId];\n if (isOntimeEvent(previousEvent)) {\n return { previousEvent, previousIndex: i };\n }\n }\n return { previousEvent: null, previousIndex: null };\n}\n\n/**\n * Gets previous scheduled event in a normalised rundown, if it exists\n */\nexport function getPreviousEventNormal(\n entries: RundownEntries,\n order: EntryId[],\n currentId: string,\n): { previousEvent: OntimeEvent | null; previousIndex: number | null } {\n const index = order.findIndex((entryId) => entryId === currentId);\n if (index < 0) {\n return { previousEvent: null, previousIndex: null };\n }\n for (let i = index - 1; i >= 0; i--) {\n const previousId = order[i];\n const previousEvent = entries[previousId];\n if (isOntimeEvent(previousEvent)) {\n return { previousEvent, previousIndex: i };\n }\n }\n return { previousEvent: null, previousIndex: null };\n}\n\n/**\n * @description swaps two OntimeEvents in the rundown\n */\nexport const swapEventData = (eventA: OntimeEvent, eventB: OntimeEvent): [newA: OntimeEvent, newB: OntimeEvent] => {\n const newA = {\n ...eventB,\n // events keep the ID\n id: eventA.id,\n // events keep the schedule\n timeStart: eventA.timeStart,\n timeEnd: eventA.timeEnd,\n duration: eventA.duration,\n linkStart: eventA.linkStart,\n parent: eventA.parent,\n // keep schedule metadata\n delay: eventA.delay,\n gap: eventA.gap,\n dayOffset: eventA.dayOffset,\n // keep revision number\n revision: eventA.revision,\n };\n\n const newB = {\n ...eventA,\n // events keep the ID\n id: eventB.id,\n // events keep the schedule\n timeStart: eventB.timeStart,\n timeEnd: eventB.timeEnd,\n duration: eventB.duration,\n linkStart: eventB.linkStart,\n parent: eventB.parent,\n // keep schedule metadata\n delay: eventB.delay,\n gap: eventB.gap,\n dayOffset: eventB.dayOffset,\n // keep revision number\n revision: eventB.revision,\n };\n\n return [newA, newB];\n};\n\nexport function getEventWithId(rundown: OntimeEntry[], id: string): OntimeEntry | undefined {\n return rundown.find((event) => event.id === id);\n}\n\n/**\n * Gets relevant group element for a given ID\n */\nexport function getPreviousGroupNormal(rundown: RundownEntries, order: string[], currentId: string): IndexAndEntry {\n let foundCurrentEvent = false;\n // Iterate backwards through the rundown to find the current event\n for (let index = order.length - 1; index >= 0; index--) {\n const id = order[index];\n if (!foundCurrentEvent && id === currentId) {\n // set the flag when the current event is found\n foundCurrentEvent = true;\n continue;\n }\n // the first group before the current event is the relevant one\n const entry = rundown[id];\n if (foundCurrentEvent && isOntimeGroup(entry)) {\n return { entry, index };\n }\n }\n // no groups exist before current event\n return { entry: null, index: null };\n}\n\n/**\n * Gets next group element for a given ID\n */\nexport function getNextGroupNormal(rundown: RundownEntries, order: string[], currentId: string): IndexAndEntry {\n let foundCurrentEvent = false;\n // Iterate backwards through the rundown to find the current event\n for (let index = 0; index < order.length; index++) {\n const id = order[index];\n if (!foundCurrentEvent && id === currentId) {\n // set the flag when the current event is found\n foundCurrentEvent = true;\n continue;\n }\n // the first group before the current event is the relevant one\n const entry = rundown[id];\n if (foundCurrentEvent && isOntimeGroup(entry)) {\n return { entry, index };\n }\n }\n // no groups exist before current event\n return { entry: null, index: null };\n}\n\n/**\n * Gets relevant group element for a given ID\n */\nexport function getPreviousGroup(rundown: Pick<Rundown, 'entries' | 'order'>, currentId: EntryId): OntimeGroup | null {\n const currentEvent = rundown.entries[currentId];\n\n // check if event is inside a group\n if (isOntimeEvent(currentEvent) && currentEvent.parent) {\n return rundown.entries[currentEvent.parent] as OntimeGroup;\n }\n\n let foundCurrentEvent = false;\n // Iterate backwards through the rundown to find the current event\n for (let i = rundown.order.length - 1; i >= 0; i--) {\n const entryId = rundown.order[i];\n const entry = rundown.entries[entryId];\n if (!foundCurrentEvent && entry.id === currentId) {\n // set the flag when the current event is found\n foundCurrentEvent = true;\n continue;\n }\n // the first group before the current event is the relevant one\n if (foundCurrentEvent && isOntimeGroup(entry)) {\n return entry;\n }\n }\n // no groups exist before null event\n return null;\n}\n"],"names":["getFirstNormal","entries","order","length","eventId","getFirstEvent","rundown","i","firstEvent","isOntimeEvent","isPlayableEvent","firstIndex","getLastNormal","lastId","at","undefined","getLastEvent","lastEvent","lastIndex","getNextNormal","currentId","currentIndex","findIndex","id","index","nextId","entry","getNextEvent","nextEvent","nextIndex","getPreviousNormal","previousId","swapEventData","eventA","eventB","newA","timeStart","timeEnd","duration","linkStart","parent","delay","gap","dayOffset","revision","newB","getEventWithId","find","event","getPreviousGroupNormal","foundCurrentEvent","isOntimeGroup","getNextGroupNormal"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{h as y,j as S}from"./vendor-Cdwxo8bP.js";import{T as u,y as d,h as g}from"./index-CoGiopcb.js";import{b as f,a as v}from"./viewUtils-dKRKkb_F.js";import{i as x}from"./playbackstate-CWexoP3a.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="6e251596-f07c-46e5-91d1-d829893d3245",e._sentryDebugIdIdentifier="sentry-dbid-6e251596-f07c-46e5-91d1-d829893d3245")}catch{}})();const m=(e,t,n)=>{for(;e<t;){const o=Math.floor((e+t)/2);if(o===e)break;n(o)?e=o:t=o}return e};function C({children:e,mode:t="multi",min:n=16,max:o=256,...s}){const i=y.useRef(null),a=y.useCallback(()=>{const r=i.current;return r?r.scrollHeight>r.clientHeight||r.scrollWidth>r.clientWidth:!1},[]),c=y.useCallback(()=>{const r=i.current;if(!r)return;const l=r.style.visibility;r.style.visibility="hidden";const h=m(n,o+1,b=>(r.style.fontSize=`${b}px`,!a()));r.style.fontSize=`${h}px`,r.style.visibility=l},[a,n,o]);return y.useEffect(()=>{const r=i.current;if(!r)return;c();const l=new ResizeObserver(c);return l.observe(r),()=>l.disconnect()},[e,t,c]),S.jsx("div",{ref:i,style:{whiteSpace:t==="single"?"nowrap":"normal"},...s,children:e})}function F(e){return e.text!==""&&e.visible}function z(e){return e===g.Play||e===g.Roll}function E(e,t){return(e??0)+(t??0)}function P(e){return e!==u.None&&e!==u.Clock}function k(e){return e!==u.Clock}const w={4:28,5:28,6:25,8:18,9:18};function I(e,t){const n=e.length;let o=100/(n-1)*1.25;return w[n]&&(o=w[n]),t&&(o*=.6),o}function W(e,t,n,o,s,i){return i?{showEndMessage:!1,showFinished:!1,showWarning:!1,showDanger:!1}:e===u.CountDown||t?{showEndMessage:n===d.Overtime&&o&&s!=="",showFinished:n===d.Overtime,showWarning:n===d.Warning,showDanger:n===d.Danger}:{showEndMessage:!1,showFinished:!1,showWarning:!1,showDanger:!1}}function B(e,t,n,o,s,i){if(!i){if(e.timer.secondarySource==="aux1"||e.timer.secondarySource==="aux2"||e.timer.secondarySource==="aux3")return v(t,u.CountDown,n,{removeSeconds:o,removeLeadingZero:s});if(e.timer.secondarySource==="secondary"&&e.secondary)return e.secondary}}function O(e,t,n,o,s,i){if(s===g.Stop)return{showNow:!1,nowMain:void 0,nowSecondary:void 0,showNext:!1,nextMain:void 0,nextSecondary:void 0};const a=x(s)&&i!==d.Pending,c=a?f(e,n??"title"):void 0,r=a?f(e,o):void 0,l=a?f(t,n??"title"):f(e,n??"title"),h=a?f(t,o):f(e,o);return{showNow:!!c||!!r,nowMain:c,nowSecondary:r,showNext:!!l||!!h,nextMain:l,nextSecondary:h}}export{C as F,W as a,z as b,k as c,P as d,O as e,E as f,F as g,B as h,I as i};
|
|
2
|
+
//# sourceMappingURL=timer.utils-BnMyVO6Z.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.utils-BnMyVO6Z.js","sources":["../../src/common/components/fit-text/fitText.utils.ts","../../src/common/components/fit-text/FitText.tsx","../../src/views/timer/timer.utils.ts"],"sourcesContent":["/**\n * @param low inclusive, must be true on predicate function\n * @param high exclusive,\n * @param predicate predicate function\n */\nexport const bsearch = (low: number, high: number, predicate: (mid: number) => boolean): number => {\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (mid === low) break;\n\n if (predicate(mid)) {\n low = mid;\n } else {\n high = mid;\n }\n }\n return low;\n};\n","/**\n * Copied from\n * https://github.com/namhong2001/react-textfit/blob/master/index.tsx\n */\n\nimport { HTMLAttributes, PropsWithChildren, useCallback, useEffect, useRef } from 'react';\n\nimport { bsearch } from './fitText.utils';\n\ninterface FitTextProps extends HTMLAttributes<HTMLDivElement> {\n mode?: 'single' | 'multi';\n min?: number; // inclusive\n max?: number; // inclusive\n}\n\nexport function FitText({\n children,\n mode = 'multi',\n min = 16,\n max = 256,\n ...elementProps\n}: PropsWithChildren<FitTextProps>) {\n const ref = useRef<HTMLDivElement>(null);\n\n const isOverflown = useCallback(() => {\n const el = ref.current;\n if (!el) return false;\n return el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth;\n }, []);\n\n const setFontSize = useCallback(() => {\n const el = ref.current;\n if (!el) return;\n\n const originVisibility = el.style.visibility;\n\n el.style.visibility = 'hidden';\n const fontSize = bsearch(min, max + 1, (mid) => {\n el.style.fontSize = `${mid}px`;\n return !isOverflown();\n });\n el.style.fontSize = `${fontSize}px`;\n el.style.visibility = originVisibility;\n }, [isOverflown, min, max]);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n setFontSize();\n const observer = new ResizeObserver(setFontSize);\n observer.observe(el);\n\n return () => observer.disconnect();\n }, [children, mode, setFontSize]);\n\n return (\n <div\n ref={ref}\n style={{\n whiteSpace: mode === 'single' ? 'nowrap' : 'normal',\n }}\n {...elementProps}\n >\n {children}\n </div>\n );\n}\n","import { MaybeNumber, MessageState, OntimeEvent, Playback, TimerMessage, TimerPhase, TimerType } from 'ontime-types';\nimport { isPlaybackActive } from 'ontime-utils';\n\nimport { getFormattedTimer, getPropertyValue } from '../../features/viewers/common/viewUtils';\n\n/**\n * Whether a message should be shown\n */\nexport function getShowMessage(message: TimerMessage): boolean {\n return message.text !== '' && message.visible;\n}\n\n/**\n * Whether the playback is playing\n */\nexport function getIsPlaying(playback: Playback): boolean {\n return playback === Playback.Play || playback === Playback.Roll;\n}\n\n/**\n * Gets the total time from the duration and added time of an event\n */\nexport function getTotalTime(duration: MaybeNumber, addedTime: MaybeNumber): number {\n return (duration ?? 0) + (addedTime ?? 0);\n}\n\n/**\n * Whether the progress bar should be shown for this timer type\n */\nexport function getShowProgressBar(timerType: TimerType) {\n return timerType !== TimerType.None && timerType !== TimerType.Clock;\n}\n\n/**\n * Whether the clock should be shown with this timer type\n */\nexport function getShowClock(timerType: TimerType) {\n return timerType !== TimerType.Clock;\n}\n\nconst fontSizeMap: { [key: number]: number } = {\n 4: 28, // 9:01\n 5: 28, // -9:01, 10:01, 9 min\n 6: 25, // -10:01, 10 min\n 8: 18, // 23:01:01\n 9: 18, // -23:01:01\n};\n\n/**\n * Finds a font size that fits the timer in the screen\n * Unfortunately hand tweaked\n */\nexport function getEstimatedFontSize(stageTimer: string, secondaryContent?: string): number {\n const stageTimerCharacters = stageTimer.length;\n let timerFontSize = (100 / (stageTimerCharacters - 1)) * 1.25;\n\n if (fontSizeMap[stageTimerCharacters]) {\n timerFontSize = fontSizeMap[stageTimerCharacters];\n }\n\n // we need to shrink the timer if the external is going to be there\n // this number has been tweaked to fit in a landscape mobile screen\n if (secondaryContent) {\n timerFontSize *= 0.6;\n }\n\n return timerFontSize;\n}\n\n/**\n * which, if any, modifier should be shown at any time\n */\nexport function getShowModifiers(\n timerType: TimerType,\n countToEnd: boolean,\n phase: TimerPhase,\n freezeOvertime: boolean,\n freezeMessage: string,\n hidePhase: boolean,\n) {\n if (hidePhase) {\n return {\n showEndMessage: false,\n showFinished: false,\n showWarning: false,\n showDanger: false,\n };\n }\n\n const showModifiers = timerType === TimerType.CountDown || countToEnd;\n if (!showModifiers) {\n return {\n showEndMessage: false,\n showFinished: false,\n showWarning: false,\n showDanger: false,\n };\n }\n\n return {\n showEndMessage: phase === TimerPhase.Overtime && freezeOvertime && freezeMessage !== '',\n showFinished: phase === TimerPhase.Overtime,\n showWarning: phase === TimerPhase.Warning,\n showDanger: phase === TimerPhase.Danger,\n };\n}\n\n/**\n * What, if anything, should be displayed in the secondary field\n */\nexport function getSecondaryDisplay(\n message: MessageState,\n currentAux: MaybeNumber,\n localisedMinutes: string,\n removeSeconds: boolean,\n removeLeadingZero: boolean,\n hideSecondary: boolean,\n): string | undefined {\n if (hideSecondary) {\n return;\n }\n if (\n message.timer.secondarySource === 'aux1' ||\n message.timer.secondarySource === 'aux2' ||\n message.timer.secondarySource === 'aux3'\n ) {\n return getFormattedTimer(currentAux, TimerType.CountDown, localisedMinutes, {\n removeSeconds,\n removeLeadingZero,\n });\n }\n if (message.timer.secondarySource === 'secondary' && message.secondary) {\n return message.secondary;\n }\n return;\n}\n\n/**\n * What should we be showing in the cards?\n */\nexport function getCardData(\n eventNow: OntimeEvent | null,\n eventNext: OntimeEvent | null,\n mainSource: keyof OntimeEvent | null,\n secondarySource: keyof OntimeEvent | null,\n playback: Playback,\n phase: TimerPhase,\n) {\n if (playback === Playback.Stop) {\n return {\n showNow: false,\n nowMain: undefined,\n nowSecondary: undefined,\n showNext: false,\n nextMain: undefined,\n nextSecondary: undefined,\n };\n }\n\n // pending roll timers would be classified as active\n const hasActiveTimer = isPlaybackActive(playback) && phase !== TimerPhase.Pending;\n\n // if we are loaded, we show the upcoming event as next\n const nowMain = hasActiveTimer ? getPropertyValue(eventNow, mainSource ?? 'title') : undefined;\n const nowSecondary = hasActiveTimer ? getPropertyValue(eventNow, secondarySource) : undefined;\n const nextMain = hasActiveTimer\n ? getPropertyValue(eventNext, mainSource ?? 'title')\n : getPropertyValue(eventNow, mainSource ?? 'title');\n const nextSecondary = hasActiveTimer\n ? getPropertyValue(eventNext, secondarySource)\n : getPropertyValue(eventNow, secondarySource);\n\n return {\n showNow: Boolean(nowMain) || Boolean(nowSecondary),\n nowMain,\n nowSecondary,\n showNext: Boolean(nextMain) || Boolean(nextSecondary),\n nextMain,\n nextSecondary,\n };\n}\n"],"names":["bsearch","low","high","predicate","mid","Math","floor","FitText","children","mode","min","max","elementProps","ref","useRef","isOverflown","useCallback","el","current","scrollHeight","clientHeight","scrollWidth","clientWidth","setFontSize","originVisibility","style","visibility","fontSize","useEffect","observer","ResizeObserver","observe","disconnect","jsx","whiteSpace","getShowMessage","message","text","visible","getIsPlaying","playback","Playback","Play","Roll","getTotalTime","duration","addedTime","getShowProgressBar","timerType","TimerType","None","Clock","getShowClock","fontSizeMap","getEstimatedFontSize","stageTimer","secondaryContent","stageTimerCharacters","length","timerFontSize","getShowModifiers","countToEnd","phase","freezeOvertime","freezeMessage","hidePhase","showEndMessage","showFinished","showWarning","showDanger","CountDown","TimerPhase","Overtime","Warning","Danger","getSecondaryDisplay","currentAux","localisedMinutes","removeSeconds","removeLeadingZero","hideSecondary","timer","secondarySource","getFormattedTimer","secondary","getCardData","eventNow","eventNext","mainSource","Stop","showNow","nowMain","undefined","nowSecondary","showNext","nextMain","nextSecondary","hasActiveTimer","isPlaybackActive","Pending","getPropertyValue","Boolean"],"mappings":"miBAKO,MAAMA,EAAUA,CAACC,EAAaC,EAAcC,IAAgD,CACjG,KAAOF,EAAMC,GAAM,CACjB,MAAME,EAAMC,KAAKC,OAAOL,EAAMC,GAAQ,CAAC,EACvC,GAAIE,IAAQH,EAAK,MAEbE,EAAUC,CAAG,EACTA,EAAAA,EAECA,EAAAA,CACT,CAEKH,OAAAA,CACT,ECFO,SAASM,EAAQ,CACtBC,SAAAA,EACAC,KAAAA,EAAO,QACPC,IAAAA,EAAM,GACNC,IAAAA,EAAM,IACN,GAAGC,CAC4B,EAAG,CAC5BC,MAAAA,EAAMC,SAAuB,IAAI,EAEjCC,EAAcC,EAAAA,YAAY,IAAM,CACpC,MAAMC,EAAKJ,EAAIK,QACX,OAACD,EACEA,EAAGE,aAAeF,EAAGG,cAAgBH,EAAGI,YAAcJ,EAAGK,YADhD,EAElB,EAAG,EAAE,EAECC,EAAcP,EAAAA,YAAY,IAAM,CACpC,MAAMC,EAAKJ,EAAIK,QACf,GAAI,CAACD,EAAI,OAEHO,MAAAA,EAAmBP,EAAGQ,MAAMC,WAElCT,EAAGQ,MAAMC,WAAa,SACtB,MAAMC,EAAW3B,EAAQU,EAAKC,EAAM,EAAYP,IAC3CqB,EAAAA,MAAME,SAAW,GAAGvB,CAAG,KACnB,CAACW,EAAY,EACrB,EACEU,EAAAA,MAAME,SAAW,GAAGA,CAAQ,KAC/BV,EAAGQ,MAAMC,WAAaF,CACrB,EAAA,CAACT,EAAaL,EAAKC,CAAG,CAAC,EAE1BiB,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMX,EAAKJ,EAAIK,QACf,GAAI,CAACD,EAAI,OAEGM,EAAA,EACNM,MAAAA,EAAW,IAAIC,eAAeP,CAAW,EAC/CM,OAAAA,EAASE,QAAQd,CAAE,EAEZ,IAAMY,EAASG,WAAW,CAChC,EAAA,CAACxB,EAAUC,EAAMc,CAAW,CAAC,EAG9BU,MAAC,MACC,CAAA,IAAApB,EACA,MAAO,CACLqB,WAAYzB,IAAS,SAAW,SAAW,QAAA,EAEzCG,GAAAA,EAEHJ,SAAAA,EACH,CAEJ,CC3DO,SAAS2B,EAAeC,EAAgC,CACtDA,OAAAA,EAAQC,OAAS,IAAMD,EAAQE,OACxC,CAKO,SAASC,EAAaC,EAA6B,CACxD,OAAOA,IAAaC,EAASC,MAAQF,IAAaC,EAASE,IAC7D,CAKgBC,SAAAA,EAAaC,EAAuBC,EAAgC,CAC1ED,OAAAA,GAAY,IAAMC,GAAa,EACzC,CAKO,SAASC,EAAmBC,EAAsB,CACvD,OAAOA,IAAcC,EAAUC,MAAQF,IAAcC,EAAUE,KACjE,CAKO,SAASC,EAAaJ,EAAsB,CACjD,OAAOA,IAAcC,EAAUE,KACjC,CAEA,MAAME,EAAyC,CAC7C,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,EACL,EAMgBC,SAAAA,EAAqBC,EAAoBC,EAAmC,CAC1F,MAAMC,EAAuBF,EAAWG,OACpCC,IAAAA,EAAiB,KAAOF,EAAuB,GAAM,KAErDJ,OAAAA,EAAYI,CAAoB,IAClCE,EAAgBN,EAAYI,CAAoB,GAK9CD,IACeG,GAAA,IAGZA,CACT,CAKO,SAASC,EACdZ,EACAa,EACAC,EACAC,EACAC,EACAC,EACA,CACA,OAAIA,EACK,CACLC,eAAgB,GAChBC,aAAc,GACdC,YAAa,GACbC,WAAY,EACd,EAGoBrB,IAAcC,EAAUqB,WAAaT,EAUpD,CACLK,eAAgBJ,IAAUS,EAAWC,UAAYT,GAAkBC,IAAkB,GACrFG,aAAcL,IAAUS,EAAWC,SACnCJ,YAAaN,IAAUS,EAAWE,QAClCJ,WAAYP,IAAUS,EAAWG,MACnC,EAbS,CACLR,eAAgB,GAChBC,aAAc,GACdC,YAAa,GACbC,WAAY,EACd,CASJ,CAKO,SAASM,EACdvC,EACAwC,EACAC,EACAC,EACAC,EACAC,EACoB,CACpB,GAAIA,CAAAA,EAIF5C,IAAAA,EAAQ6C,MAAMC,kBAAoB,QAClC9C,EAAQ6C,MAAMC,kBAAoB,QAClC9C,EAAQ6C,MAAMC,kBAAoB,OAElC,OAAOC,EAAkBP,EAAY3B,EAAUqB,UAAWO,EAAkB,CAC1EC,cAAAA,EACAC,kBAAAA,CAAAA,CACD,EAEH,GAAI3C,EAAQ6C,MAAMC,kBAAoB,aAAe9C,EAAQgD,UAC3D,OAAOhD,EAAQgD,UAGnB,CAKO,SAASC,EACdC,EACAC,EACAC,EACAN,EACA1C,EACAsB,EACA,CACItB,GAAAA,IAAaC,EAASgD,KACjB,MAAA,CACLC,QAAS,GACTC,QAASC,OACTC,aAAcD,OACdE,SAAU,GACVC,SAAUH,OACVI,cAAeJ,MACjB,EAIF,MAAMK,EAAiBC,EAAiB1D,CAAQ,GAAKsB,IAAUS,EAAW4B,QAGpER,EAAUM,EAAiBG,EAAiBd,EAAUE,GAAc,OAAO,EAAII,OAC/EC,EAAeI,EAAiBG,EAAiBd,EAAUJ,CAAe,EAAIU,OAC9EG,EAAWE,EACbG,EAAiBb,EAAWC,GAAc,OAAO,EACjDY,EAAiBd,EAAUE,GAAc,OAAO,EAC9CQ,EAAgBC,EAClBG,EAAiBb,EAAWL,CAAe,EAC3CkB,EAAiBd,EAAUJ,CAAe,EAEvC,MAAA,CACLQ,QAASW,EAAQV,GAAYU,EAAQR,EACrCF,QAAAA,EACAE,aAAAA,EACAC,SAAUO,EAAQN,GAAaM,EAAQL,EACvCD,SAAAA,EACAC,cAAAA,CACF,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e as s,k as i}from"./vendor-Cdwxo8bP.js";import{ay as u,aG as c,aA as l}from"./index-CoGiopcb.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="a61b2069-3800-4c00-adf3-610ee6803f12",e._sentryDebugIdIdentifier="sentry-dbid-a61b2069-3800-4c00-adf3-610ee6803f12")}catch{}})();const a=`${u}/custom-fields`;async function f(){return(await s.get(a)).data}async function g(e){return(await s.post(a,{...e})).data}async function m(e,t){return(await s.put(`${a}/${e}`,{...t})).data}async function h(e){return(await s.delete(`${a}/${e}`)).data}const y={};function F(){const{data:e,status:t,isFetching:r,isError:o,refetch:d}=i({queryKey:l,queryFn:f,placeholderData:(n,p)=>n,retry:5,retryDelay:n=>n*2500,refetchInterval:c,networkMode:"always"});return{data:e??y,status:t,isFetching:r,isError:o,refetch:d}}export{h as d,m as e,g as p,F as u};
|
|
2
|
+
//# sourceMappingURL=useCustomFields-CcTb-GQM.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCustomFields-
|
|
1
|
+
{"version":3,"file":"useCustomFields-CcTb-GQM.js","sources":["../../src/common/api/customFields.ts","../../src/common/hooks-query/useCustomFields.ts"],"sourcesContent":["import axios from 'axios';\nimport { CustomField, CustomFieldKey, CustomFields } from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\n\nconst customFieldsPath = `${apiEntryUrl}/custom-fields`;\n\n/**\n * Requests list of known custom fields\n */\nexport async function getCustomFields(): Promise<CustomFields> {\n const res = await axios.get(customFieldsPath);\n return res.data;\n}\n\n/**\n * Sets list of known custom fields\n */\nexport async function postCustomField(newField: CustomField): Promise<CustomFields> {\n const res = await axios.post(customFieldsPath, { ...newField });\n return res.data;\n}\n\n/**\n * Edits single custom field\n */\nexport async function editCustomField(key: CustomFieldKey, newField: CustomField): Promise<CustomFields> {\n const res = await axios.put(`${customFieldsPath}/${key}`, { ...newField });\n return res.data;\n}\n\n/**\n * Deletes single custom field\n */\nexport async function deleteCustomField(key: CustomFieldKey): Promise<CustomFields> {\n const res = await axios.delete(`${customFieldsPath}/${key}`);\n return res.data;\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { CustomFields } from 'ontime-types';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { CUSTOM_FIELDS } from '../api/constants';\nimport { getCustomFields } from '../api/customFields';\n\nconst placeholder: CustomFields = {};\n\nexport default function useCustomFields() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: CUSTOM_FIELDS,\n queryFn: getCustomFields,\n placeholderData: (previousData, _previousQuery) => previousData,\n retry: 5,\n retryDelay: (attempt) => attempt * 2500,\n refetchInterval: queryRefetchIntervalSlow,\n networkMode: 'always',\n });\n\n return { data: data ?? placeholder, status, isFetching, isError, refetch };\n}\n"],"names":["customFieldsPath","apiEntryUrl","getCustomFields","axios","get","data","postCustomField","newField","post","editCustomField","key","put","deleteCustomField","delete","placeholder","useCustomFields","status","isFetching","isError","refetch","useQuery","queryKey","CUSTOM_FIELDS","queryFn","placeholderData","previousData","_previousQuery","retry","retryDelay","attempt","refetchInterval","queryRefetchIntervalSlow","networkMode"],"mappings":"mcAKA,MAAMA,EAAmB,GAAGC,CAAW,iBAKvC,eAAsBC,GAAyC,CAE7D,OADY,MAAMC,EAAMC,IAAIJ,CAAgB,GACjCK,IACb,CAKA,eAAsBC,EAAgBC,EAA8C,CAElF,OADY,MAAMJ,EAAMK,KAAKR,EAAkB,CAAE,GAAGO,CAAAA,CAAU,GACnDF,IACb,CAKsBI,eAAAA,EAAgBC,EAAqBH,EAA8C,CAEvG,OADY,MAAMJ,EAAMQ,IAAI,GAAGX,CAAgB,IAAIU,CAAG,GAAI,CAAE,GAAGH,CAAAA,CAAU,GAC9DF,IACb,CAKA,eAAsBO,EAAkBF,EAA4C,CAElF,OADY,MAAMP,EAAMU,OAAO,GAAGb,CAAgB,IAAIU,CAAG,EAAE,GAChDL,IACb,CC9BA,MAAMS,EAA4B,CAAC,EAEnC,SAAwBC,GAAkB,CAClC,KAAA,CAAEV,KAAAA,EAAMW,OAAAA,EAAQC,WAAAA,EAAYC,QAAAA,EAASC,QAAAA,GAAYC,EAAS,CAC9DC,SAAUC,EACVC,QAASrB,EACTsB,gBAAiBA,CAACC,EAAcC,IAAmBD,EACnDE,MAAO,EACPC,cAAyBC,EAAU,KACnCC,gBAAiBC,EACjBC,YAAa,QAAA,CACd,EAEM,MAAA,CAAE3B,KAAMA,GAAQS,EAAaE,OAAAA,EAAQC,WAAAA,EAAYC,QAAAA,EAASC,QAAAA,CAAQ,CAC3E"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{h as c}from"./vendor-Cdwxo8bP.js";(function(){try{var n=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new n.Error().stack;e&&(n._sentryDebugIds=n._sentryDebugIds||{},n._sentryDebugIds[e]="f54ae56d-eca4-4696-9400-b8617aeef534",n._sentryDebugIdIdentifier="sentry-dbid-f54ae56d-eca4-4696-9400-b8617aeef534")}catch{}})();function b(n,e,r){if(!n.current||!e.current)return;const u=n.current.getBoundingClientRect(),t=e.current.getBoundingClientRect(),i=u.top-t.top+e.current.scrollTop-r;e.current.scrollTo({top:i,behavior:"smooth"})}function y({followRef:n,scrollRef:e,doFollow:r,topOffset:u=100,setScrollFlag:t,followTrigger:i}){return c.useEffect(()=>{!r||!i||n.current&&e.current&&(t==null||t(!0),window.requestAnimationFrame(()=>{b(n,e,u),t==null||t(!1)}))},[i,r,n,e,t,u]),c.useCallback((d=n,o=e,s=u)=>{d&&o&&b(d,o,s)},[n,e,u])}export{y as u};
|
|
2
|
+
//# sourceMappingURL=useFollowComponent-BjhV6Uv8.js.map
|
|
Binary file
|
|
Binary file
|
package/client/assets/{useFollowComponent-Eyo4hWVG.js.map → useFollowComponent-BjhV6Uv8.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFollowComponent-
|
|
1
|
+
{"version":3,"file":"useFollowComponent-BjhV6Uv8.js","sources":["../../src/common/hooks/useFollowComponent.ts"],"sourcesContent":["import { RefObject, useCallback, useEffect } from 'react';\nimport { MaybeString } from 'ontime-types';\n\nfunction scrollToComponent<ComponentRef extends HTMLElement, ScrollRef extends HTMLElement>(\n componentRef: RefObject<ComponentRef>,\n scrollRef: RefObject<ScrollRef>,\n topOffset: number,\n) {\n if (!componentRef.current || !scrollRef.current) {\n return;\n }\n\n const componentRect = componentRef.current.getBoundingClientRect();\n const scrollRect = scrollRef.current.getBoundingClientRect();\n const top = componentRect.top - scrollRect.top + scrollRef.current.scrollTop - topOffset;\n\n scrollRef.current.scrollTo({ top, behavior: 'smooth' });\n}\n\ninterface UseFollowComponentProps {\n followRef: RefObject<HTMLElement | null>;\n scrollRef: RefObject<HTMLElement | null>;\n doFollow: boolean;\n topOffset?: number;\n setScrollFlag?: (newValue: boolean) => void;\n followTrigger?: MaybeString; // this would be an entry id or null\n}\n\nexport default function useFollowComponent({\n followRef,\n scrollRef,\n doFollow,\n topOffset = 100,\n setScrollFlag,\n followTrigger,\n}: UseFollowComponentProps) {\n // when trigger moves, view should follow\n useEffect(() => {\n if (!doFollow || !followTrigger) {\n return;\n }\n\n if (followRef.current && scrollRef.current) {\n setScrollFlag?.(true);\n // Use requestAnimationFrame to ensure the component is fully loaded\n window.requestAnimationFrame(() => {\n scrollToComponent(followRef as RefObject<HTMLElement>, scrollRef as RefObject<HTMLElement>, topOffset);\n setScrollFlag?.(false);\n });\n }\n }, [followTrigger, doFollow, followRef, scrollRef, setScrollFlag, topOffset]);\n\n const scrollToRefComponent = useCallback(\n (componentRef = followRef, containerRef = scrollRef, offset = topOffset) => {\n if (componentRef && containerRef) {\n // @ts-expect-error -- we know this are not null\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n scrollToComponent(componentRef!, containerRef!, offset);\n }\n },\n [followRef, scrollRef, topOffset],\n );\n\n return scrollToRefComponent;\n}\n"],"names":["scrollToComponent","componentRef","scrollRef","topOffset","current","componentRect","getBoundingClientRect","scrollRect","top","scrollTop","scrollTo","behavior","useFollowComponent","followRef","doFollow","setScrollFlag","followTrigger","useEffect","window","requestAnimationFrame","useCallback","containerRef","offset"],"mappings":"mYAGA,SAASA,EACPC,EACAC,EACAC,EACA,CACA,GAAI,CAACF,EAAaG,SAAW,CAACF,EAAUE,QACtC,OAGIC,MAAAA,EAAgBJ,EAAaG,QAAQE,sBAAsB,EAC3DC,EAAaL,EAAUE,QAAQE,sBAAsB,EACrDE,EAAMH,EAAcG,IAAMD,EAAWC,IAAMN,EAAUE,QAAQK,UAAYN,EAE/ED,EAAUE,QAAQM,SAAS,CAAEF,IAAAA,EAAKG,SAAU,QAAA,CAAU,CACxD,CAWA,SAAwBC,EAAmB,CACzCC,UAAAA,EACAX,UAAAA,EACAY,SAAAA,EACAX,UAAAA,EAAY,IACZY,cAAAA,EACAC,cAAAA,CACuB,EAAG,CAE1BC,OAAAA,EAAAA,UAAU,IAAM,CACV,CAACH,GAAY,CAACE,GAIdH,EAAUT,SAAWF,EAAUE,UACjCW,GAAAA,MAAAA,EAAgB,IAEhBG,OAAOC,sBAAsB,IAAM,CACfN,EAAAA,EAAqCX,EAAqCC,CAAS,EACrGY,GAAAA,MAAAA,EAAgB,GAAK,CACtB,EACH,EACC,CAACC,EAAeF,EAAUD,EAAWX,EAAWa,EAAeZ,CAAS,CAAC,EAE/CiB,cAC3B,CAACnB,EAAeY,EAAWQ,EAAenB,EAAWoB,EAASnB,IAAc,CACtEF,GAAgBoB,GAGApB,EAAAA,EAAeoB,EAAeC,CAAM,CAG1D,EAAA,CAACT,EAAWX,EAAWC,CAAS,CAClC,CAGF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as s,
|
|
2
|
-
//# sourceMappingURL=useProjectData-
|
|
1
|
+
import{j as s,bz as j,bA as x,bB as P,bC as w,bD as v,bE as C,bF as D,aR as k,aS as S,bG as E,bH as I,bd as T,bI as _,bJ as F,e as u,k as N,O as R,P as A}from"./vendor-Cdwxo8bP.js";import{e as d,aC as b,ay as O,aQ as h,aG as Q}from"./index-CoGiopcb.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="e8e6de5b-6a5a-4f14-975e-c0f243396078",e._sentryDebugIdIdentifier="sentry-dbid-e8e6de5b-6a5a-4f14-975e-c0f243396078")}catch{}})();const $="_blink_10e6s_1",q="_fourtyfive_10e6s_13",M="_medium_10e6s_43",z="_large_10e6s_51",G="_thumb_10e6s_59",l={blink:$,fourtyfive:q,switch:"_switch_10e6s_17",medium:M,large:z,thumb:G};function oe({size:e="medium",...t}){return s.jsx(j,{className:d([l.switch,l[e]]),...t,children:s.jsx(x,{className:l.thumb})})}const H="_popup_1xpg9_17",J="_title_1xpg9_34",f={popup:H,title:J};function U({title:e,className:t,children:o,...a}){return s.jsx(P,{children:s.jsx(w,{sideOffset:8,...a,children:s.jsxs(v,{className:f.popup,children:[e&&s.jsx(C,{className:f.title,children:e}),s.jsx(D,{className:t,render:s.jsx("div",{}),children:o})]})})})}const B="_input_jz3ye_17",K={input:B};function y({color:e,onChange:t,children:o}){return s.jsxs(k,{children:[s.jsx(S,{children:o}),s.jsxs(U,{children:[s.jsx(E,{color:e,onChange:t}),s.jsx(I,{color:e,onChange:t,className:K.input,prefixed:!0})]})]})}const L="_list_1tpdr_17",V="_swatch_1tpdr_23",W="_selected_1tpdr_33",X="_selectable_1tpdr_36",i={list:L,swatch:V,selected:W,selectable:X};function ae(e){const{color:t,onChange:o,isSelected:a,alwaysDisplayColor:n}=e,r=T(g=>{o(g)},100),c=n||a?t:"",{color:m}=b(c);return s.jsx(y,{color:c,onChange:r,children:s.jsx("div",{className:d([i.swatch,a&&i.selected,i.selectable]),style:{backgroundColor:c},children:s.jsx(_,{color:m})})})}function ne(e){const{name:t,control:o}=e,{field:{onChange:a,value:n}}=F({control:o,name:t}),r=typeof n=="string"?n:"",{color:c}=b(r);return s.jsx(y,{color:n,onChange:a,children:s.jsx("div",{className:d([i.swatch,i.selectable]),style:{backgroundColor:r},children:s.jsx(_,{color:c})})})}const p=`${O}/project`;async function Y(){return(await u.get(p)).data}async function Z(e){return u.post(p,e)}async function re(e){const t=new FormData;return t.append("image",e),await u.post(`${p}/upload`,t,{headers:{"Content-Type":"multipart/form-data"}})}const ee={title:"",description:"",url:"",info:"",logo:null,custom:[]};function ce(){const{data:e,status:t,isFetching:o,isError:a,refetch:n}=N({queryKey:h,queryFn:Y,placeholderData:(r,c)=>r,refetchInterval:Q});return{data:e??ee,status:t,isFetching:o,isError:a,refetch:n}}function ie(){const e=R(),t=A({mutationFn:Z,onSuccess:o=>{e.setQueryData(h,o)}});return{updateProjectData:t.mutateAsync,isMutating:t.isPending,isMutatingError:t.isError}}export{U as P,oe as S,ie as a,re as b,ne as c,ae as d,i as s,ce as u};
|
|
2
|
+
//# sourceMappingURL=useProjectData-B5mjXsMj.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProjectData-DGA6K2Zs.js","sources":["../../src/common/components/switch/Switch.tsx","../../src/common/components/popover/Popover.tsx","../../src/common/components/input/popover-picker/PopoverPicker.tsx","../../src/common/components/input/colour-input/SwatchPicker.tsx","../../src/common/api/project.ts","../../src/common/models/ProjectData.ts","../../src/common/hooks-query/useProjectData.ts"],"sourcesContent":["import { Switch as BaseSwitch } from '@base-ui-components/react/switch';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport style from './Switch.module.scss';\n\ninterface SwitchProps extends BaseSwitch.Root.Props {\n size?: 'medium' | 'large';\n}\n\nexport default function Switch({ size = 'medium', ...switchProps }: SwitchProps) {\n return (\n <BaseSwitch.Root className={cx([style.switch, style[size]])} {...switchProps}>\n <BaseSwitch.Thumb className={style.thumb} />\n </BaseSwitch.Root>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { Popover } from '@base-ui-components/react/popover';\n\nimport style from './Popover.module.scss';\n\ninterface PopoverContentsProps extends Popover.Positioner.Props {\n title?: string;\n className?: string;\n}\nexport default function PopoverContents({\n title,\n className,\n children,\n ...popoverProps\n}: PropsWithChildren<PopoverContentsProps>) {\n return (\n <Popover.Portal>\n <Popover.Positioner sideOffset={8} {...popoverProps}>\n <Popover.Popup className={style.popup}>\n {title && <Popover.Title className={style.title}>{title}</Popover.Title>}\n <Popover.Description className={className} render={<div />}>\n {children}\n </Popover.Description>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { HexAlphaColorPicker, HexColorInput } from 'react-colorful';\nimport { Popover } from '@base-ui-components/react/popover';\n\nimport PopoverContents from '../../popover/Popover';\n\nimport style from './PopoverPicker.module.scss';\n\ninterface PopoverPickerProps {\n color: string;\n onChange: (color: string) => void;\n}\n\nexport default function PopoverPicker({ color, onChange, children }: PropsWithChildren<PopoverPickerProps>) {\n return (\n <Popover.Root>\n <Popover.Trigger>{children}</Popover.Trigger>\n <PopoverContents>\n <HexAlphaColorPicker color={color} onChange={onChange} />\n <HexColorInput color={color} onChange={onChange} className={style.input} prefixed />\n </PopoverContents>\n </Popover.Root>\n );\n}\n","import { useController, UseControllerProps } from 'react-hook-form';\nimport { IoEyedrop } from 'react-icons/io5';\nimport { useDebouncedCallback } from '@mantine/hooks';\nimport { ViewSettings } from 'ontime-types';\n\nimport { cx, getAccessibleColour } from '../../../utils/styleUtils';\nimport PopoverPicker from '../popover-picker/PopoverPicker';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface SwatchPickerProps {\n color: string;\n isSelected?: boolean;\n onChange: (name: string) => void;\n alwaysDisplayColor?: boolean;\n}\n\nexport default function SwatchPicker(props: SwatchPickerProps) {\n const { color, onChange, isSelected, alwaysDisplayColor } = props;\n\n const debouncedOnChange = useDebouncedCallback((newValue: string) => {\n onChange(newValue);\n }, 100);\n\n const displayColor = alwaysDisplayColor || isSelected ? color : '';\n const { color: iconColor } = getAccessibleColour(displayColor);\n\n return (\n <PopoverPicker color={displayColor} onChange={debouncedOnChange}>\n <div\n className={cx([style.swatch, isSelected && style.selected, style.selectable])}\n style={{ backgroundColor: displayColor }}\n >\n <IoEyedrop color={iconColor} />\n </div>\n </PopoverPicker>\n );\n}\n\nexport function SwatchPickerRHF(props: UseControllerProps<ViewSettings>) {\n const { name, control } = props;\n const {\n field: { onChange, value },\n } = useController({ control, name });\n\n const displayColor = typeof value === 'string' ? value : '';\n const { color: iconColor } = getAccessibleColour(displayColor);\n\n return (\n <PopoverPicker color={value as string} onChange={onChange}>\n <div className={cx([style.swatch, style.selectable])} style={{ backgroundColor: displayColor }}>\n <IoEyedrop color={iconColor} />\n </div>\n </PopoverPicker>\n );\n}\n","import axios, { AxiosResponse } from 'axios';\nimport { ProjectData, ProjectLogoResponse } from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\n\nconst projectPath = `${apiEntryUrl}/project`;\n\n/**\n * HTTP request to fetch project data\n */\nexport async function getProjectData(): Promise<ProjectData> {\n const res = await axios.get(projectPath);\n return res.data;\n}\n\n/**\n * HTTP request to mutate project data\n */\nexport async function postProjectData(data: ProjectData): Promise<AxiosResponse<ProjectData>> {\n return axios.post(projectPath, data);\n}\n\n/**\n * HTTP request to upload a project logo\n */\nexport async function uploadProjectLogo(file: File): Promise<AxiosResponse<ProjectLogoResponse>> {\n const formData = new FormData();\n formData.append('image', file);\n const response = await axios.post(`${projectPath}/upload`, formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n\n return response;\n}\n","import { ProjectData } from 'ontime-types';\n\nexport const projectDataPlaceholder: ProjectData = {\n title: '',\n description: '',\n url: '',\n info: '',\n logo: null,\n custom: [],\n};\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { PROJECT_DATA } from '../api/constants';\nimport { getProjectData, postProjectData } from '../api/project';\nimport { projectDataPlaceholder } from '../models/ProjectData';\n\nexport default function useProjectData() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: PROJECT_DATA,\n queryFn: getProjectData,\n placeholderData: (previousData, _previousQuery) => previousData,\n refetchInterval: queryRefetchIntervalSlow,\n });\n\n return { data: data ?? projectDataPlaceholder, status, isFetching, isError, refetch };\n}\n\nexport function useUpdateProjectData() {\n const queryClient = useQueryClient();\n\n const updateFn = useMutation({\n mutationFn: postProjectData,\n onSuccess: (newProjectData) => {\n queryClient.setQueryData(PROJECT_DATA, newProjectData);\n },\n });\n\n return {\n updateProjectData: updateFn.mutateAsync,\n isMutating: updateFn.isPending,\n isMutatingError: updateFn.isError,\n };\n}\n"],"names":["Switch","size","switchProps","jsx","BaseSwitch.Root","cx","style","BaseSwitch.Thumb","PopoverContents","title","className","children","popoverProps","Popover.Portal","Popover.Positioner","jsxs","Popover.Popup","Popover.Title","Popover.Description","PopoverPicker","color","onChange","Popover.Root","Popover.Trigger","HexAlphaColorPicker","HexColorInput","SwatchPicker","props","isSelected","alwaysDisplayColor","debouncedOnChange","useDebouncedCallback","newValue","displayColor","iconColor","getAccessibleColour","IoEyedrop","SwatchPickerRHF","name","control","value","useController","projectPath","apiEntryUrl","getProjectData","axios","postProjectData","data","uploadProjectLogo","file","formData","projectDataPlaceholder","useProjectData","status","isFetching","isError","refetch","useQuery","PROJECT_DATA","previousData","_previousQuery","queryRefetchIntervalSlow","useUpdateProjectData","queryClient","useQueryClient","updateFn","useMutation","newProjectData"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useProjectData-B5mjXsMj.js","sources":["../../src/common/components/switch/Switch.tsx","../../src/common/components/popover/Popover.tsx","../../src/common/components/input/popover-picker/PopoverPicker.tsx","../../src/common/components/input/colour-input/SwatchPicker.tsx","../../src/common/api/project.ts","../../src/common/models/ProjectData.ts","../../src/common/hooks-query/useProjectData.ts"],"sourcesContent":["import { Switch as BaseSwitch } from '@base-ui-components/react/switch';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport style from './Switch.module.scss';\n\ninterface SwitchProps extends BaseSwitch.Root.Props {\n size?: 'medium' | 'large';\n}\n\nexport default function Switch({ size = 'medium', ...switchProps }: SwitchProps) {\n return (\n <BaseSwitch.Root className={cx([style.switch, style[size]])} {...switchProps}>\n <BaseSwitch.Thumb className={style.thumb} />\n </BaseSwitch.Root>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { Popover } from '@base-ui-components/react/popover';\n\nimport style from './Popover.module.scss';\n\ninterface PopoverContentsProps extends Popover.Positioner.Props {\n title?: string;\n className?: string;\n}\nexport default function PopoverContents({\n title,\n className,\n children,\n ...popoverProps\n}: PropsWithChildren<PopoverContentsProps>) {\n return (\n <Popover.Portal>\n <Popover.Positioner sideOffset={8} {...popoverProps}>\n <Popover.Popup className={style.popup}>\n {title && <Popover.Title className={style.title}>{title}</Popover.Title>}\n <Popover.Description className={className} render={<div />}>\n {children}\n </Popover.Description>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { HexAlphaColorPicker, HexColorInput } from 'react-colorful';\nimport { Popover } from '@base-ui-components/react/popover';\n\nimport PopoverContents from '../../popover/Popover';\n\nimport style from './PopoverPicker.module.scss';\n\ninterface PopoverPickerProps {\n color: string;\n onChange: (color: string) => void;\n}\n\nexport default function PopoverPicker({ color, onChange, children }: PropsWithChildren<PopoverPickerProps>) {\n return (\n <Popover.Root>\n <Popover.Trigger>{children}</Popover.Trigger>\n <PopoverContents>\n <HexAlphaColorPicker color={color} onChange={onChange} />\n <HexColorInput color={color} onChange={onChange} className={style.input} prefixed />\n </PopoverContents>\n </Popover.Root>\n );\n}\n","import { useController, UseControllerProps } from 'react-hook-form';\nimport { IoEyedrop } from 'react-icons/io5';\nimport { useDebouncedCallback } from '@mantine/hooks';\nimport { ViewSettings } from 'ontime-types';\n\nimport { cx, getAccessibleColour } from '../../../utils/styleUtils';\nimport PopoverPicker from '../popover-picker/PopoverPicker';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface SwatchPickerProps {\n color: string;\n isSelected?: boolean;\n onChange: (name: string) => void;\n alwaysDisplayColor?: boolean;\n}\n\nexport default function SwatchPicker(props: SwatchPickerProps) {\n const { color, onChange, isSelected, alwaysDisplayColor } = props;\n\n const debouncedOnChange = useDebouncedCallback((newValue: string) => {\n onChange(newValue);\n }, 100);\n\n const displayColor = alwaysDisplayColor || isSelected ? color : '';\n const { color: iconColor } = getAccessibleColour(displayColor);\n\n return (\n <PopoverPicker color={displayColor} onChange={debouncedOnChange}>\n <div\n className={cx([style.swatch, isSelected && style.selected, style.selectable])}\n style={{ backgroundColor: displayColor }}\n >\n <IoEyedrop color={iconColor} />\n </div>\n </PopoverPicker>\n );\n}\n\nexport function SwatchPickerRHF(props: UseControllerProps<ViewSettings>) {\n const { name, control } = props;\n const {\n field: { onChange, value },\n } = useController({ control, name });\n\n const displayColor = typeof value === 'string' ? value : '';\n const { color: iconColor } = getAccessibleColour(displayColor);\n\n return (\n <PopoverPicker color={value as string} onChange={onChange}>\n <div className={cx([style.swatch, style.selectable])} style={{ backgroundColor: displayColor }}>\n <IoEyedrop color={iconColor} />\n </div>\n </PopoverPicker>\n );\n}\n","import axios, { AxiosResponse } from 'axios';\nimport { ProjectData, ProjectLogoResponse } from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\n\nconst projectPath = `${apiEntryUrl}/project`;\n\n/**\n * HTTP request to fetch project data\n */\nexport async function getProjectData(): Promise<ProjectData> {\n const res = await axios.get(projectPath);\n return res.data;\n}\n\n/**\n * HTTP request to mutate project data\n */\nexport async function postProjectData(data: ProjectData): Promise<AxiosResponse<ProjectData>> {\n return axios.post(projectPath, data);\n}\n\n/**\n * HTTP request to upload a project logo\n */\nexport async function uploadProjectLogo(file: File): Promise<AxiosResponse<ProjectLogoResponse>> {\n const formData = new FormData();\n formData.append('image', file);\n const response = await axios.post(`${projectPath}/upload`, formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n\n return response;\n}\n","import { ProjectData } from 'ontime-types';\n\nexport const projectDataPlaceholder: ProjectData = {\n title: '',\n description: '',\n url: '',\n info: '',\n logo: null,\n custom: [],\n};\n","import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { PROJECT_DATA } from '../api/constants';\nimport { getProjectData, postProjectData } from '../api/project';\nimport { projectDataPlaceholder } from '../models/ProjectData';\n\nexport default function useProjectData() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: PROJECT_DATA,\n queryFn: getProjectData,\n placeholderData: (previousData, _previousQuery) => previousData,\n refetchInterval: queryRefetchIntervalSlow,\n });\n\n return { data: data ?? projectDataPlaceholder, status, isFetching, isError, refetch };\n}\n\nexport function useUpdateProjectData() {\n const queryClient = useQueryClient();\n\n const updateFn = useMutation({\n mutationFn: postProjectData,\n onSuccess: (newProjectData) => {\n queryClient.setQueryData(PROJECT_DATA, newProjectData);\n },\n });\n\n return {\n updateProjectData: updateFn.mutateAsync,\n isMutating: updateFn.isPending,\n isMutatingError: updateFn.isError,\n };\n}\n"],"names":["Switch","size","switchProps","jsx","BaseSwitch.Root","cx","style","switch","BaseSwitch.Thumb","thumb","PopoverContents","title","className","children","popoverProps","Popover.Portal","Popover.Positioner","jsxs","Popover.Popup","popup","Popover.Title","Popover.Description","PopoverPicker","color","onChange","Popover.Root","Popover.Trigger","HexAlphaColorPicker","HexColorInput","input","SwatchPicker","props","isSelected","alwaysDisplayColor","debouncedOnChange","useDebouncedCallback","newValue","displayColor","iconColor","getAccessibleColour","swatch","selected","selectable","backgroundColor","IoEyedrop","SwatchPickerRHF","name","control","field","value","useController","projectPath","apiEntryUrl","getProjectData","axios","get","data","postProjectData","post","uploadProjectLogo","file","formData","FormData","append","headers","projectDataPlaceholder","description","url","info","logo","custom","useProjectData","status","isFetching","isError","refetch","useQuery","queryKey","PROJECT_DATA","queryFn","placeholderData","previousData","_previousQuery","refetchInterval","queryRefetchIntervalSlow","useUpdateProjectData","queryClient","useQueryClient","updateFn","useMutation","mutationFn","onSuccess","newProjectData","setQueryData","updateProjectData","mutateAsync","isMutating","isPending","isMutatingError"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e as r,k as o}from"./vendor-Cdwxo8bP.js";import{ay as i,bu as d,bV as n,I as u}from"./index-CoGiopcb.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="4685ef89-a793-4e74-913e-da2156ca19c0",e._sentryDebugIdIdentifier="sentry-dbid-4685ef89-a793-4e74-913e-da2156ca19c0")}catch{}})();const s=`${i}/report`;async function y(){return(await r.get(s)).data}async function p(){await r.delete(`${s}/all`),await d.invalidateQueries({queryKey:n})}function b(){const{data:e,refetch:t}=o({queryKey:n,queryFn:y,placeholderData:(a,l)=>a,retry:5,retryDelay:a=>a*2500,networkMode:"always",staleTime:u});return{data:e??{},refetch:t}}export{p as d,b as u};
|
|
2
|
+
//# sourceMappingURL=useReport-zMbyWwpn.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useReport-
|
|
1
|
+
{"version":3,"file":"useReport-zMbyWwpn.js","sources":["../../src/common/api/report.ts","../../src/common/hooks-query/useReport.ts"],"sourcesContent":["import axios from 'axios';\nimport { OntimeReport } from 'ontime-types';\n\nimport { ontimeQueryClient } from '../../common/queryClient';\n\nimport { apiEntryUrl, REPORT } from './constants';\n\nexport const reportUrl = `${apiEntryUrl}/report`;\n\n/**\n * HTTP request to fetch all reports\n */\nexport async function fetchReport(): Promise<OntimeReport> {\n const res = await axios.get(reportUrl);\n return res.data;\n}\n\nexport async function deleteReport(id: string) {\n await axios.delete(`${reportUrl}/${id}`);\n await ontimeQueryClient.invalidateQueries({ queryKey: REPORT });\n}\n\nexport async function deleteAllReport() {\n await axios.delete(`${reportUrl}/all`);\n await ontimeQueryClient.invalidateQueries({ queryKey: REPORT });\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { OntimeReport } from 'ontime-types';\nimport { MILLIS_PER_HOUR } from 'ontime-utils';\n\nimport { REPORT } from '../api/constants';\nimport { fetchReport } from '../api/report';\n\nexport default function useReport() {\n const { data, refetch } = useQuery<OntimeReport>({\n queryKey: REPORT,\n queryFn: fetchReport,\n placeholderData: (previousData, _previousQuery) => previousData,\n retry: 5,\n retryDelay: (attempt) => attempt * 2500,\n networkMode: 'always',\n staleTime: MILLIS_PER_HOUR,\n });\n\n return { data: data ?? {}, refetch };\n}\n"],"names":["reportUrl","apiEntryUrl","fetchReport","axios","get","data","deleteAllReport","delete","ontimeQueryClient","invalidateQueries","queryKey","REPORT","useReport","refetch","useQuery","queryFn","placeholderData","previousData","_previousQuery","retry","retryDelay","attempt","networkMode","staleTime","MILLIS_PER_HOUR"],"mappings":"0cAOaA,MAAAA,EAAY,GAAGC,CAAW,UAKvC,eAAsBC,GAAqC,CAEzD,OADY,MAAMC,EAAMC,IAAIJ,CAAS,GAC1BK,IACb,CAOA,eAAsBC,GAAkB,CACtC,MAAMH,EAAMI,OAAO,GAAGP,CAAS,MAAM,EACrC,MAAMQ,EAAkBC,kBAAkB,CAAEC,SAAUC,CAAAA,CAAQ,CAChE,CClBA,SAAwBC,GAAY,CAC5B,KAAA,CAAEP,KAAAA,EAAMQ,QAAAA,GAAYC,EAAuB,CAC/CJ,SAAUC,EACVI,QAASb,EACTc,gBAAiBA,CAACC,EAAcC,IAAmBD,EACnDE,MAAO,EACPC,cAAyBC,EAAU,KACnCC,YAAa,SACbC,UAAWC,CAAAA,CACZ,EAEM,MAAA,CAAEnB,KAAMA,GAAQ,CAAC,EAAGQ,QAAAA,CAAQ,CACrC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e as a,k as h,h as i}from"./vendor-Cdwxo8bP.js";import{s as p,ay as g,o as y,aG as R,az as m}from"./index-CoGiopcb.js";import{u as I}from"./useProjectData-B5mjXsMj.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new t.Error().stack;n&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[n]="aaa30404-9eef-46f4-ad13-b50c47e60ea0",t._sentryDebugIdIdentifier="sentry-dbid-aaa30404-9eef-46f4-ad13-b50c47e60ea0")}catch{}})();var c=(t=>(t.Event="event",t.Delay="delay",t.Group="group",t.Milestone="milestone",t))(c||{});function M(t){return(t==null?void 0:t.type)===c.Event}function v(t){return!t.skip}function C(t){return(t==null?void 0:t.type)===c.Delay}function O(t){return(t==null?void 0:t.type)===c.Group}function N(t){return(t==null?void 0:t.type)===c.Milestone}function W(t,n){return t in n}function _(t){return t.type==="osc"}function B(t){return t.type==="http"}function K(t){return t.type==="ontime"}function D(t,n){return!(!n||t.dayOffset<=n.dayOffset||n.timeStart+n.duration>p)}function L(t,n){if(!n)return!0;const e=t.timeStart+t.duration+t.dayOffset*p,s=n.timeStart+n.duration+n.dayOffset*p;return e>=s}const r=`${g}/rundowns`;async function U(){return(await a.get(r)).data}async function b(){return(await a.get(`${r}/current`)).data}async function z(t){return a.post(`${r}/${t}/load`)}async function H(t){return a.post(r,{title:t})}async function Q(t){return a.post(`${r}/${t}/duplicate`)}async function j(t,n){return a.patch(`${r}/${t}`,{title:n})}async function J(t){return a.delete(`${r}/${t}`)}async function V(t,n){return a.post(`${r}/${t}/entry`,n)}async function X(t,n){return a.put(`${r}/${t}/entry`,n)}async function Y(t,n){return a.put(`${r}/${t}/batch`,n)}async function Z(t,n){return a.patch(`${r}/${t}/reorder`,n)}async function tt(t,n,e){return a.patch(`${r}/${t}/swap`,{from:n,to:e})}async function nt(t,n){return a.patch(`${r}/${t}/applydelay/${n}`)}async function et(t,n,e){return a.post(`${r}/${t}/clone/${n}`,e)}async function st(t,n){return a.post(`${r}/${t}/group`,{ids:n})}async function at(t,n){return a.post(`${r}/${t}/ungroup/${n}`)}async function rt(t,n){return a.delete(`${r}/${t}/entries`,{data:{ids:n}})}async function ot(t){return a.delete(`${r}/${t}/all`)}const P="LAST";function x(t,n){const{metadata:e,process:s}=w(n);let o=e;const u={};for(const d of t.flatOrder){const l=t.entries[d];o=s(l),u[d]=o}return u[P]=o,u}function T(t,n){const{process:e}=w(n),s=[];for(const o of t.flatOrder){const u=t.entries[o],d={...u,...e(u)};s.push(d)}return s}function w(t){let n={previousEvent:null,latestEvent:null,previousEntryId:null,thisId:null,eventIndex:0,isPast:!!t,isNextDay:!1,totalGap:0,isLinkedToLoaded:!1,isLoaded:!1,groupId:null,groupColour:void 0,groupEntries:void 0,isFirstAfterGroup:!1};function e(s){return n=k(n,t,s),n}return{metadata:n,process:e}}function k(t,n,e){var o,u;const s={...t};return s.isNextDay=!1,s.isLoaded=!1,s.previousEntryId=s.thisId,s.thisId=e.id,s.previousEvent=s.latestEvent,e.id===n&&(s.isLoaded=!0,s.isPast=!1,s.isLinkedToLoaded=!0),O(e)?(s.groupId=e.id,s.groupColour=e.colour,s.groupEntries=e.entries.length):(e.parent!==s.groupId&&(s.groupId=e.parent,s.groupEntries=void 0,e.parent===null&&(s.groupColour=void 0)),M(e)&&(s.eventIndex+=1,s.isFirstAfterGroup=!!((o=s.previousEvent)!=null&&o.parent)&&e.parent===null,v(e)&&(s.isNextDay=D(e,s.previousEvent),!s.isPast&&!s.isLoaded&&(s.totalGap+=e.gap,s.isLinkedToLoaded=e.linkStart&&!((u=s.previousEvent)!=null&&u.countToEnd)&&s.isLinkedToLoaded),L(e,s.latestEvent)&&(s.latestEvent=e)))),s}const G={id:"default",title:"",order:[],flatOrder:[],entries:{},revision:-1};function f(){const{data:t,status:n,isError:e,refetch:s,isFetching:o}=h({queryKey:m,queryFn:b,placeholderData:(u,d)=>u,refetchInterval:R});return{data:t??G,status:n,isError:e,refetch:s,isFetching:o}}function ut(){const{data:t,status:n}=f(),{selectedEventId:e}=y(),s=i.useMemo(()=>x(t,e),[t,e]);return{data:t,status:n,rundownMetadata:s}}function it(){const{data:t,status:n}=f(),{data:e}=I(),s=i.useRef(""),[o,u]=i.useState(-1),[d,l]=i.useState([]);return i.useEffect(()=>{if(t.revision!==-1||t.revision!==o){const E=t.flatOrder.map($=>t.entries[$]);l(E),u(t.revision)}},[t.entries,t.flatOrder,t.revision,o]),i.useEffect(()=>{(e==null?void 0:e.title)!==s.current&&(u(-1),s.current=(e==null?void 0:e.title)??"")},[e]),{data:d,rundownId:t.id,status:n}}function S(){const{data:t,status:n}=f(),{selectedEventId:e}=y();return{data:i.useMemo(()=>T(t,e),[t,e]),status:n}}function dt(t){const{data:n,status:e}=S();return{data:i.useMemo(()=>n.filter(t),[n,t]),status:e}}function ct(t){const{data:n}=f();return i.useMemo(()=>t===null?null:n.entries[t],[t,n.entries])}export{Y as A,rt as B,ot as C,nt as D,at as E,st as F,Z as G,tt as H,c as S,v as a,dt as b,it as c,L as d,_ as e,B as f,K as g,f as h,M as i,O as j,N as k,H as l,Q as m,J as n,z as o,U as p,W as q,j as r,C as s,ut as t,S as u,ct as v,P as w,V as x,et as y,X as z};
|
|
2
|
+
//# sourceMappingURL=useRundown-CHsh5rnl.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRundown-CHsh5rnl.js","sources":["../../../../packages/types/src/definitions/core/OntimeEntry.ts","../../../../packages/types/src/utils/guards.ts","../../../../packages/utils/src/date-utils/checkIsNextDay.ts","../../../../packages/utils/src/date-utils/isNewLatest.ts","../../src/common/api/rundown.ts","../../src/common/utils/rundownMetadata.ts","../../src/common/hooks-query/useRundown.ts"],"sourcesContent":["import type { MaybeNumber } from '../../utils/utils.type.js';\nimport type { EndAction } from '../EndAction.type.js';\nimport type { TimerType } from '../TimerType.type.js';\nimport type { TimeStrategy } from '../TimeStrategy.type.js';\nimport type { Trigger } from './Automation.type.js';\nimport type { EntryCustomFields } from './CustomFields.type.js';\n\nexport type EntryId = string;\n\nexport enum SupportedEntry {\n Event = 'event',\n Delay = 'delay',\n Group = 'group',\n Milestone = 'milestone',\n}\n\nexport type OntimeBaseEvent = {\n type: SupportedEntry;\n id: EntryId;\n};\n\nexport type OntimeDelay = OntimeBaseEvent & {\n type: SupportedEntry.Delay;\n duration: number;\n parent: EntryId | null;\n};\n\nexport type OntimeMilestone = OntimeBaseEvent & {\n type: SupportedEntry.Milestone;\n cue: string;\n title: string;\n note: string;\n colour: string;\n custom: EntryCustomFields;\n parent: EntryId | null;\n // !==== RUNTIME METADATA ====! //\n revision: number;\n};\n\nexport type OntimeGroup = OntimeBaseEvent & {\n type: SupportedEntry.Group;\n title: string;\n note: string;\n entries: EntryId[];\n targetDuration: MaybeNumber;\n colour: string;\n custom: EntryCustomFields;\n // !==== RUNTIME METADATA ====! //\n revision: number;\n timeStart: MaybeNumber; // calculated at runtime\n timeEnd: MaybeNumber; // calculated at runtime\n duration: number; // calculated at runtime\n isFirstLinked: boolean; // calculated at runtime, whether the first event is linked\n};\n\nexport type OntimeEvent = OntimeBaseEvent & {\n type: SupportedEntry.Event;\n flag: boolean;\n cue: string;\n title: string;\n note: string;\n endAction: EndAction;\n timerType: TimerType;\n countToEnd: boolean;\n linkStart: boolean;\n timeStrategy: TimeStrategy;\n timeStart: number;\n timeEnd: number;\n duration: number;\n skip: boolean;\n colour: string;\n timeWarning: number;\n timeDanger: number;\n custom: EntryCustomFields;\n triggers: Trigger[];\n parent: EntryId | null;\n // !==== RUNTIME METADATA ====! //\n revision: number;\n delay: number; // calculated at runtime\n dayOffset: number; // calculated at runtime\n gap: number; // calculated at runtime\n};\n\nexport type PlayableEvent = OntimeEvent & { skip: false };\nexport type TimeField = 'timeStart' | 'timeEnd' | 'duration';\nexport type OntimeEntry = OntimeDelay | OntimeGroup | OntimeEvent | OntimeMilestone;\n\n// we need to create a manual union type since keys cannot be used in type unions\nexport type OntimeEntryCommonKeys = keyof OntimeEvent | keyof OntimeDelay | keyof OntimeGroup | keyof OntimeMilestone;\n","import type { AutomationOutput, HTTPOutput, OntimeAction, OSCOutput } from '../definitions/core/Automation.type.js';\nimport type {\n OntimeDelay,\n OntimeEntry,\n OntimeEvent,\n OntimeGroup,\n OntimeMilestone,\n PlayableEvent,\n} from '../definitions/core/OntimeEntry.js';\nimport { SupportedEntry } from '../definitions/core/OntimeEntry.js';\nimport { type TimerLifeCycle, timerLifecycleValues } from '../definitions/core/TimerLifecycle.type.js';\n\ntype MaybeEvent = OntimeEntry | Partial<OntimeEntry> | null | undefined;\n\nexport function isOntimeEvent(event: MaybeEvent): event is OntimeEvent {\n return event?.type === SupportedEntry.Event;\n}\n\nexport function isPlayableEvent(event: OntimeEvent): event is PlayableEvent {\n return !event.skip;\n}\n\nexport function isOntimeDelay(event: MaybeEvent): event is OntimeDelay {\n return event?.type === SupportedEntry.Delay;\n}\n\nexport function isOntimeGroup(event: MaybeEvent): event is OntimeGroup {\n return event?.type === SupportedEntry.Group;\n}\n\nexport function isOntimeMilestone(event: MaybeEvent): event is OntimeMilestone {\n return event?.type === SupportedEntry.Milestone;\n}\n\ntype AnyKeys<T> = keyof T;\n\nexport function isKeyOfType<T extends object>(key: PropertyKey, obj: T): key is AnyKeys<T> {\n return key in obj;\n}\n\nexport function isOSCOutput(output: AutomationOutput): output is OSCOutput {\n return output.type === 'osc';\n}\n\nexport function isHTTPOutput(output: AutomationOutput): output is HTTPOutput {\n return output.type === 'http';\n}\n\nexport function isOntimeAction(output: AutomationOutput): output is OntimeAction {\n return output.type === 'ontime';\n}\n\nexport function isTimerLifeCycle(maybeCycle: unknown): maybeCycle is TimerLifeCycle {\n if (typeof maybeCycle !== 'string') return false;\n return timerLifecycleValues.includes(maybeCycle);\n}\n","import type { OntimeEvent } from 'ontime-types';\n\nimport { dayInMs } from './conversionUtils.js';\n\n/**\n * Utility function checks whether a given event is the day after from its predecessor\n */\nexport function checkIsNextDay(\n current: Pick<OntimeEvent, 'timeStart' | 'dayOffset'>,\n previous: Pick<OntimeEvent, 'timeStart' | 'duration' | 'dayOffset'> | null,\n): boolean {\n if (!previous) {\n return false;\n }\n\n // if the day offsets are the same it can't be the next day\n if (current.dayOffset <= previous.dayOffset) {\n return false;\n }\n\n // if the previous event crossed midnight then the current is the same day\n if (previous.timeStart + previous.duration > dayInMs) {\n return false;\n }\n\n return true;\n}\n","import type { OntimeEvent } from 'ontime-types';\n\nimport { dayInMs } from './conversionUtils.js';\n\n/**\n * Checks whether a new element is the latest in the list\n */\nexport function isNewLatest(\n currentEvent: Pick<OntimeEvent, 'timeStart' | 'duration' | 'dayOffset'>,\n previousEvent: Pick<OntimeEvent, 'timeStart' | 'duration' | 'dayOffset'> | null,\n) {\n // true if there is no previous\n if (!previousEvent) {\n return true;\n }\n\n const normalisedCurrentEnd = currentEvent.timeStart + currentEvent.duration + currentEvent.dayOffset * dayInMs;\n const normalisedPreviousEnd = previousEvent.timeStart + previousEvent.duration + previousEvent.dayOffset * dayInMs;\n\n return normalisedCurrentEnd >= normalisedPreviousEnd;\n}\n","import axios, { AxiosResponse } from 'axios';\nimport { EntryId, OntimeEntry, OntimeEvent, ProjectRundownsList, Rundown, TransientEventPayload } from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\n\ntype RundownId = string;\nconst rundownPath = `${apiEntryUrl}/rundowns`;\n\n// #region operations on project rundowns =========================\n\n/**\n * HTTP request to fetch a list of existing rundowns\n */\nexport async function fetchProjectRundownList(): Promise<ProjectRundownsList> {\n const res = await axios.get(rundownPath);\n return res.data;\n}\n\n/**\n * HTTP request to fetch all entries in the currently loaded rundown\n */\nexport async function fetchCurrentRundown(): Promise<Rundown> {\n const res = await axios.get(`${rundownPath}/current`);\n return res.data;\n}\n\n/**\n * HTTP request to switch the currently loaded rundown\n */\nexport async function loadRundown(rundownId: RundownId): Promise<AxiosResponse<ProjectRundownsList>> {\n return axios.post(`${rundownPath}/${rundownId}/load`);\n}\n\n/**\n * HTTP request to create a new rundown\n */\nexport async function createRundown(title: string): Promise<AxiosResponse<ProjectRundownsList>> {\n return axios.post(rundownPath, { title });\n}\n\n/**\n * HTTP request to duplicate an existing rundown\n */\nexport async function duplicateRundown(rundownId: RundownId): Promise<AxiosResponse<ProjectRundownsList>> {\n return axios.post(`${rundownPath}/${rundownId}/duplicate`);\n}\n\n/**\n * HTTP request to rename an existing rundown\n */\nexport async function renameRundown(rundownId: RundownId, title: string): Promise<AxiosResponse<ProjectRundownsList>> {\n return axios.patch(`${rundownPath}/${rundownId}`, { title });\n}\n\n/**\n * HTTP request to delete a rundown\n */\nexport async function deleteRundown(rundownId: RundownId): Promise<AxiosResponse<ProjectRundownsList>> {\n return axios.delete(`${rundownPath}/${rundownId}`);\n}\n\n// #endregion operations on project rundowns ======================\n// #region operations on rundown entries ==========================\n\n/**\n * HTTP request to post new entry\n */\nexport async function postAddEntry(\n rundownId: RundownId,\n data: TransientEventPayload,\n): Promise<AxiosResponse<OntimeEntry>> {\n return axios.post(`${rundownPath}/${rundownId}/entry`, data);\n}\n\n/**\n * HTTP request to edit an entry\n */\nexport async function putEditEntry(\n rundownId: RundownId,\n data: Partial<OntimeEntry>,\n): Promise<AxiosResponse<OntimeEntry>> {\n return axios.put(`${rundownPath}/${rundownId}/entry`, data);\n}\n\nexport type BatchEditEntry = {\n data: Partial<OntimeEvent>;\n ids: EntryId[];\n};\n\n/**\n * HTTP request to edit multiple events\n */\nexport async function putBatchEditEvents(rundownId: RundownId, data: BatchEditEntry): Promise<AxiosResponse<Rundown>> {\n return axios.put(`${rundownPath}/${rundownId}/batch`, data);\n}\n\nexport type ReorderEntry = {\n entryId: EntryId;\n destinationId: EntryId;\n order: 'before' | 'after' | 'insert';\n};\n\n/**\n * HTTP request to reorder an entry\n */\nexport async function patchReorderEntry(rundownId: RundownId, data: ReorderEntry): Promise<AxiosResponse<Rundown>> {\n return axios.patch(`${rundownPath}/${rundownId}/reorder`, data);\n}\n\n/**\n * HTTP request to swap two events\n */\nexport async function requestEventSwap(\n rundownId: RundownId,\n from: EntryId,\n to: EntryId,\n): Promise<AxiosResponse<Rundown>> {\n return axios.patch(`${rundownPath}/${rundownId}/swap`, { from, to });\n}\n\n/**\n * HTTP request to request application of delay\n */\nexport async function requestApplyDelay(rundownId: RundownId, delayId: EntryId): Promise<AxiosResponse<Rundown>> {\n return axios.patch(`${rundownPath}/${rundownId}/applydelay/${delayId}`);\n}\n\n/**\n * HTTP request for cloning an entry\n */\nexport async function postCloneEntry(\n rundownId: RundownId,\n entryId: EntryId,\n options?: { before?: EntryId; after?: EntryId },\n): Promise<AxiosResponse<Rundown>> {\n return axios.post(`${rundownPath}/${rundownId}/clone/${entryId}`, options);\n}\n\n/**\n * HTTP request for grouping a list of entries into a group\n */\nexport async function requestGroupEntries(rundownId: RundownId, entryIds: EntryId[]): Promise<AxiosResponse<Rundown>> {\n return axios.post(`${rundownPath}/${rundownId}/group`, { ids: entryIds });\n}\n\n/**\n * HTTP request for dissolving of a group\n */\nexport async function requestUngroup(rundownId: RundownId, groupId: EntryId): Promise<AxiosResponse<Rundown>> {\n return axios.post(`${rundownPath}/${rundownId}/ungroup/${groupId}`);\n}\n\n/**\n * HTTP request to delete entries of a given rundown\n */\nexport async function deleteEntries(rundownId: RundownId, entryIds: EntryId[]): Promise<AxiosResponse<Rundown>> {\n return axios.delete(`${rundownPath}/${rundownId}/entries`, { data: { ids: entryIds } });\n}\n\n/**\n * HTTP request to delete all entries of a given rundown\n */\nexport async function requestDeleteAll(rundownId: RundownId): Promise<AxiosResponse<Rundown>> {\n return axios.delete(`${rundownPath}/${rundownId}/all`);\n}\n\n// #endregion operations on rundown entries =======================\n","import {\n isOntimeEvent,\n isOntimeGroup,\n isPlayableEvent,\n MaybeString,\n OntimeDelay,\n OntimeEntry,\n OntimeEvent,\n OntimeMilestone,\n PlayableEvent,\n Rundown,\n} from 'ontime-types';\nimport { checkIsNextDay, isNewLatest } from 'ontime-utils';\n\nexport type RundownMetadata = {\n previousEvent: PlayableEvent | null; // The playableEvent from the previous iteration, used by indicators\n latestEvent: PlayableEvent | null; // The playableEvent most forwards in time processed so far\n previousEntryId: MaybeString; // previous entry is used to infer position in the rundown for new events\n thisId: MaybeString;\n eventIndex: number;\n isPast: boolean;\n isNextDay: boolean;\n totalGap: number;\n isLinkedToLoaded: boolean; // check if the event can link all the way back to the currently playing event\n isLoaded: boolean;\n groupId: MaybeString;\n groupColour: string | undefined;\n groupEntries: number | undefined;\n isFirstAfterGroup: boolean;\n};\n\nexport type ExtendedEntry<T extends OntimeEntry = OntimeEntry> = T & RundownMetadata;\n\nexport const lastMetadataKey = 'LAST';\n\nexport type RundownMetadataObject = Record<string, Readonly<RundownMetadata>>;\n\n/**\n * Generates a Rundown Metadata object from a rundown\n */\nexport function getRundownMetadata(\n data: Pick<Rundown, 'entries' | 'flatOrder'>,\n selectedEventId: MaybeString,\n): RundownMetadataObject {\n const { metadata, process } = initRundownMetadata(selectedEventId);\n // keep a single reference to the metadata which we override for every entry\n let lastSnapshot = metadata;\n const rundownMetadata: RundownMetadataObject = {};\n\n for (const id of data.flatOrder) {\n const entry = data.entries[id];\n lastSnapshot = process(entry);\n rundownMetadata[id] = lastSnapshot;\n }\n\n // ensure some blank data even for empty rundowns\n rundownMetadata[lastMetadataKey] = lastSnapshot;\n\n return rundownMetadata;\n}\n\nexport function getFlatRundownMetadata(\n data: Pick<Rundown, 'entries' | 'flatOrder'>,\n selectedEventId: MaybeString,\n): ExtendedEntry[] {\n const { process } = initRundownMetadata(selectedEventId);\n const flatRundown: ExtendedEntry[] = [];\n\n for (const id of data.flatOrder) {\n const entry = data.entries[id];\n const extendedEntry = { ...entry, ...process(entry) };\n flatRundown.push(extendedEntry);\n }\n\n return flatRundown;\n}\n\n/**\n * Creates a process function which aggregates the rundown metadata and event metadata\n */\nexport function initRundownMetadata(selectedEventId: MaybeString) {\n let rundownMeta: RundownMetadata = {\n previousEvent: null,\n latestEvent: null,\n previousEntryId: null,\n thisId: null,\n eventIndex: 0,\n isPast: Boolean(selectedEventId), // all events before the current selected are in the past\n isNextDay: false,\n totalGap: 0,\n isLinkedToLoaded: false,\n isLoaded: false,\n groupId: null,\n groupColour: undefined,\n groupEntries: undefined,\n isFirstAfterGroup: false,\n };\n\n function process(entry: OntimeEntry): Readonly<RundownMetadata> {\n const processedRundownMetadata = processEntry(rundownMeta, selectedEventId, entry);\n rundownMeta = processedRundownMetadata;\n return rundownMeta;\n }\n\n return { metadata: rundownMeta, process };\n}\n\n/**\n * Receives a rundown entry and processes its place in the rundown\n */\nfunction processEntry(\n rundownMetadata: RundownMetadata,\n selectedEventId: MaybeString,\n entry: Readonly<OntimeEntry>,\n): Readonly<RundownMetadata> {\n const processedData = { ...rundownMetadata };\n // initialise data to be overridden below\n processedData.isNextDay = false;\n processedData.isLoaded = false;\n\n processedData.previousEntryId = processedData.thisId; // thisId comes from the previous iteration\n processedData.thisId = entry.id; // we reassign thisId\n processedData.previousEvent = processedData.latestEvent;\n\n if (entry.id === selectedEventId) {\n processedData.isLoaded = true;\n processedData.isPast = false;\n processedData.isLinkedToLoaded = true;\n }\n\n if (isOntimeGroup(entry)) {\n processedData.groupId = entry.id;\n processedData.groupColour = entry.colour;\n processedData.groupEntries = entry.entries.length;\n } else {\n // for delays and groups, we insert the group metadata\n if ((entry as OntimeEvent | OntimeDelay | OntimeMilestone).parent !== processedData.groupId) {\n // if the parent is not the current group, we need to update the groupId\n processedData.groupId = (entry as OntimeEvent | OntimeDelay | OntimeMilestone).parent;\n processedData.groupEntries = undefined;\n if ((entry as OntimeEvent | OntimeDelay | OntimeMilestone).parent === null) {\n // if the entry has no parent, it cannot have a group colour\n processedData.groupColour = undefined;\n }\n }\n\n if (isOntimeEvent(entry)) {\n // event indexes are 1 based in UI\n processedData.eventIndex += 1;\n processedData.isFirstAfterGroup = Boolean(processedData.previousEvent?.parent) && entry.parent === null;\n\n if (isPlayableEvent(entry)) {\n processedData.isNextDay = checkIsNextDay(entry, processedData.previousEvent);\n \n if (!processedData.isPast && !processedData.isLoaded) {\n /**\n * isLinkToLoaded is a chain value that we maintain until we\n * a) find an unlinked event\n * b) find a countToEnd event\n */\n processedData.totalGap += entry.gap;\n processedData.isLinkedToLoaded =\n entry.linkStart && !processedData.previousEvent?.countToEnd && processedData.isLinkedToLoaded;\n }\n\n if (isNewLatest(entry, processedData.latestEvent)) {\n // this event is the forward most event in rundown, for next iteration\n processedData.latestEvent = entry;\n }\n }\n }\n }\n\n return processedData;\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { EntryId, OntimeEntry, Rundown } from 'ontime-types';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { RUNDOWN } from '../api/constants';\nimport { fetchCurrentRundown } from '../api/rundown';\nimport { useSelectedEventId } from '../hooks/useSocket';\nimport { ExtendedEntry, getFlatRundownMetadata, getRundownMetadata } from '../utils/rundownMetadata';\n\nimport useProjectData from './useProjectData';\n\n// revision is -1 so that the remote revision is higher\nconst cachedRundownPlaceholder: Rundown = {\n id: 'default',\n title: '',\n order: [],\n flatOrder: [],\n entries: {},\n revision: -1,\n};\n\n/**\n * Normalised rundown data\n */\nexport default function useRundown() {\n const { data, status, isError, refetch, isFetching } = useQuery<Rundown>({\n queryKey: RUNDOWN,\n queryFn: fetchCurrentRundown,\n placeholderData: (previousData, _previousQuery) => previousData,\n refetchInterval: queryRefetchIntervalSlow,\n });\n return { data: data ?? cachedRundownPlaceholder, status, isError, refetch, isFetching };\n}\n\nexport function useRundownWithMetadata() {\n const { data, status } = useRundown();\n const { selectedEventId } = useSelectedEventId();\n const rundownMetadata = useMemo(() => getRundownMetadata(data, selectedEventId), [data, selectedEventId]);\n return { data, status, rundownMetadata };\n}\n\n/**\n * Provides access to a flat rundown\n * built from the order and rundown fields\n */\nexport function useFlatRundown() {\n const { data, status } = useRundown();\n const { data: projectData } = useProjectData();\n\n const loadedProject = useRef<string>('');\n const [prevRevision, setPrevRevision] = useState<number>(-1);\n const [flatRundown, setFlatRundown] = useState<OntimeEntry[]>([]);\n\n // update data whenever the revision changes\n useEffect(() => {\n if (data.revision !== -1 || data.revision !== prevRevision) {\n const flatRundown = data.flatOrder.map((id) => data.entries[id]);\n setFlatRundown(flatRundown);\n setPrevRevision(data.revision);\n }\n }, [data.entries, data.flatOrder, data.revision, prevRevision]);\n\n // TODO: should we have a project id field?\n // TODO(v4): cleanup as part of load multiple rundowns\n // invalidate current version if project changes\n useEffect(() => {\n if (projectData?.title !== loadedProject.current) {\n setPrevRevision(-1);\n loadedProject.current = projectData?.title ?? '';\n }\n }, [projectData]);\n\n return { data: flatRundown, rundownId: data.id, status };\n}\n\nexport function useFlatRundownWithMetadata() {\n const { data, status } = useRundown();\n const { selectedEventId } = useSelectedEventId();\n\n const rundownWithMetadata = useMemo(() => getFlatRundownMetadata(data, selectedEventId), [data, selectedEventId]);\n return { data: rundownWithMetadata, status };\n}\n\n/**\n * Provides access to a partial rundown based on a filter callback\n */\nexport function usePartialRundown(cb: (event: ExtendedEntry<OntimeEntry>) => boolean) {\n const { data, status } = useFlatRundownWithMetadata();\n const filteredData = useMemo(() => {\n return data.filter(cb);\n }, [data, cb]);\n\n return { data: filteredData, status };\n}\n\n/**\n * Hook to get a specific entry by ID from the rundown\n */\nexport function useEntry(entryId: EntryId | null): OntimeEntry | null {\n const { data: rundown } = useRundown();\n\n // track the specific entry we care about\n const entry = useMemo(() => {\n if (entryId === null) return null;\n return rundown.entries[entryId];\n }, [entryId, rundown.entries]);\n\n return entry;\n}\n"],"names":["SupportedEntry","Event","Delay","Group","Milestone","isOntimeEvent","event","type","isPlayableEvent","skip","isOntimeDelay","isOntimeGroup","isOntimeMilestone","isKeyOfType","key","obj","isOSCOutput","output","isHTTPOutput","isOntimeAction","checkIsNextDay","current","previous","dayOffset","timeStart","duration","dayInMs","isNewLatest","currentEvent","previousEvent","normalisedCurrentEnd","normalisedPreviousEnd","rundownPath","apiEntryUrl","fetchProjectRundownList","axios","get","data","fetchCurrentRundown","loadRundown","rundownId","post","createRundown","title","duplicateRundown","renameRundown","patch","deleteRundown","delete","postAddEntry","putEditEntry","put","putBatchEditEvents","patchReorderEntry","requestEventSwap","from","to","requestApplyDelay","delayId","postCloneEntry","entryId","options","requestGroupEntries","entryIds","ids","requestUngroup","groupId","deleteEntries","requestDeleteAll","lastMetadataKey","getRundownMetadata","selectedEventId","metadata","process","initRundownMetadata","lastSnapshot","rundownMetadata","id","flatOrder","entry","entries","getFlatRundownMetadata","flatRundown","extendedEntry","push","rundownMeta","latestEvent","previousEntryId","thisId","eventIndex","isPast","Boolean","isNextDay","totalGap","isLinkedToLoaded","isLoaded","groupColour","undefined","groupEntries","isFirstAfterGroup","processedRundownMetadata","processEntry","processedData","colour","length","parent","gap","linkStart","countToEnd","cachedRundownPlaceholder","order","revision","useRundown","status","isError","refetch","isFetching","useQuery","queryKey","RUNDOWN","queryFn","placeholderData","previousData","_previousQuery","refetchInterval","queryRefetchIntervalSlow","useRundownWithMetadata","useSelectedEventId","useMemo","useFlatRundown","projectData","useProjectData","loadedProject","useRef","prevRevision","setPrevRevision","useState","setFlatRundown","useEffect","map","useFlatRundownWithMetadata","usePartialRundown","cb","filter","useEntry","rundown"],"mappings":"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"}
|