@getontime/cli 4.0.0-beta.5 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/assets/Backstage-ZSqb8OU6.js +2 -0
- package/client/assets/Backstage-ZSqb8OU6.js.br +0 -0
- package/client/assets/Backstage-ZSqb8OU6.js.gz +0 -0
- package/client/assets/Backstage-ZSqb8OU6.js.map +1 -0
- package/client/assets/Countdown-DVRZbeRP.js +2 -0
- package/client/assets/Countdown-DVRZbeRP.js.br +0 -0
- package/client/assets/Countdown-DVRZbeRP.js.gz +0 -0
- package/client/assets/{Countdown-BaaR4j9x.js.map → Countdown-DVRZbeRP.js.map} +1 -1
- package/client/assets/CustomTranslationModal-D_Cy0d_H.js +2 -0
- package/client/assets/CustomTranslationModal-D_Cy0d_H.js.br +0 -0
- package/client/assets/CustomTranslationModal-D_Cy0d_H.js.gz +0 -0
- package/client/assets/{CustomTranslationModal-CcNNjbmZ.js.map → CustomTranslationModal-D_Cy0d_H.js.map} +1 -1
- package/client/assets/{DelayIndicator-DXDACqpc.js → DelayIndicator-B_JKLKYW.js} +2 -2
- package/client/assets/DelayIndicator-B_JKLKYW.js.br +0 -0
- package/client/assets/DelayIndicator-B_JKLKYW.js.gz +0 -0
- package/client/assets/{DelayIndicator-DXDACqpc.js.map → DelayIndicator-B_JKLKYW.js.map} +1 -1
- package/client/assets/{EditorFeatureWrapper-CX6wzTmM.js → EditorFeatureWrapper-DzBxDvRn.js} +2 -2
- package/client/assets/EditorFeatureWrapper-DzBxDvRn.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-DzBxDvRn.js.gz +0 -0
- package/client/assets/{EditorFeatureWrapper-CX6wzTmM.js.map → EditorFeatureWrapper-DzBxDvRn.js.map} +1 -1
- package/client/assets/{EditorUtils-DxjFOwpn.js → EditorUtils-De0umjb-.js} +2 -2
- package/client/assets/EditorUtils-De0umjb-.js.br +0 -0
- package/client/assets/EditorUtils-De0umjb-.js.gz +0 -0
- package/client/assets/{EditorUtils-DxjFOwpn.js.map → EditorUtils-De0umjb-.js.map} +1 -1
- package/client/assets/{Empty-DiBXyIA8.js → Empty-BYF0tVRk.js} +2 -2
- package/client/assets/Empty-BYF0tVRk.js.br +2 -0
- package/client/assets/Empty-BYF0tVRk.js.gz +0 -0
- package/client/assets/{Empty-DiBXyIA8.js.map → Empty-BYF0tVRk.js.map} +1 -1
- package/client/assets/{EmptyPage-X6EO1Y5W.js → EmptyPage-DYH2bswA.js} +2 -2
- package/client/assets/EmptyPage-DYH2bswA.js.br +0 -0
- package/client/assets/EmptyPage-DYH2bswA.js.gz +0 -0
- package/client/assets/{EmptyPage-X6EO1Y5W.js.map → EmptyPage-DYH2bswA.js.map} +1 -1
- package/client/assets/{FollowButton-Cr-HA2-6.js → FollowButton-DyWsvyFF.js} +2 -2
- package/client/assets/FollowButton-DyWsvyFF.js.br +0 -0
- package/client/assets/FollowButton-DyWsvyFF.js.gz +0 -0
- package/client/assets/{FollowButton-Cr-HA2-6.js.map → FollowButton-DyWsvyFF.js.map} +1 -1
- package/client/assets/{MessageControlExport-VUkIayAJ.js → MessageControlExport-yLGU2dMq.js} +2 -2
- package/client/assets/MessageControlExport-yLGU2dMq.js.br +0 -0
- package/client/assets/MessageControlExport-yLGU2dMq.js.gz +0 -0
- package/client/assets/{MessageControlExport-VUkIayAJ.js.map → MessageControlExport-yLGU2dMq.js.map} +1 -1
- package/client/assets/MilestoneEditor-GkzJ-h1C.js +2 -0
- package/client/assets/MilestoneEditor-GkzJ-h1C.js.br +0 -0
- package/client/assets/MilestoneEditor-GkzJ-h1C.js.gz +0 -0
- package/client/assets/{MilestoneEditor-Da8oxrHI.js.map → MilestoneEditor-GkzJ-h1C.js.map} +1 -1
- package/client/assets/Modal-BKL-5GzU.js +2 -0
- package/client/assets/Modal-BKL-5GzU.js.br +0 -0
- package/client/assets/Modal-BKL-5GzU.js.gz +0 -0
- package/client/assets/Modal-BKL-5GzU.js.map +1 -0
- package/client/assets/Modal-BgJx3SNK.css +1 -0
- package/client/assets/Modal-BgJx3SNK.css.br +0 -0
- package/client/assets/Modal-BgJx3SNK.css.gz +0 -0
- package/client/assets/{MultiPartProgressBar-mGPuP1Wd.js → MultiPartProgressBar-BITERKS0.js} +2 -2
- package/client/assets/MultiPartProgressBar-BITERKS0.js.br +0 -0
- package/client/assets/MultiPartProgressBar-BITERKS0.js.gz +0 -0
- package/client/assets/{MultiPartProgressBar-mGPuP1Wd.js.map → MultiPartProgressBar-BITERKS0.js.map} +1 -1
- package/client/assets/OperatorExport-DMZ6eQfT.js +2 -0
- package/client/assets/OperatorExport-DMZ6eQfT.js.br +0 -0
- package/client/assets/OperatorExport-DMZ6eQfT.js.gz +0 -0
- package/client/assets/OperatorExport-DMZ6eQfT.js.map +1 -0
- package/client/assets/{OverviewWrapper-BMuW_wiO.js → OverviewWrapper-riM6vPno.js} +2 -2
- package/client/assets/OverviewWrapper-riM6vPno.js.br +0 -0
- package/client/assets/OverviewWrapper-riM6vPno.js.gz +0 -0
- package/client/assets/{OverviewWrapper-BMuW_wiO.js.map → OverviewWrapper-riM6vPno.js.map} +1 -1
- package/client/assets/{ProjectInfo-BYi1lzPk.js → ProjectInfo-DxtMq70a.js} +2 -2
- package/client/assets/ProjectInfo-DxtMq70a.js.br +0 -0
- package/client/assets/ProjectInfo-DxtMq70a.js.gz +0 -0
- package/client/assets/{ProjectInfo-BYi1lzPk.js.map → ProjectInfo-DxtMq70a.js.map} +1 -1
- package/client/assets/{ProtectRoute-DnUCrlh6.js → ProtectRoute-p1fmtLeu.js} +2 -2
- package/client/assets/ProtectRoute-p1fmtLeu.js.br +0 -0
- package/client/assets/ProtectRoute-p1fmtLeu.js.gz +0 -0
- package/client/assets/{ProtectRoute-DnUCrlh6.js.map → ProtectRoute-p1fmtLeu.js.map} +1 -1
- package/client/assets/ProtectedCuesheet-CvRnqT0z.js +2 -0
- package/client/assets/ProtectedCuesheet-CvRnqT0z.js.br +0 -0
- package/client/assets/ProtectedCuesheet-CvRnqT0z.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-CvRnqT0z.js.map +1 -0
- package/client/assets/ProtectedEditor-BoiAT_IR.css +1 -0
- package/client/assets/ProtectedEditor-BoiAT_IR.css.br +0 -0
- package/client/assets/ProtectedEditor-BoiAT_IR.css.gz +0 -0
- package/client/assets/ProtectedEditor-D4UXj1xL.js +3 -0
- package/client/assets/ProtectedEditor-D4UXj1xL.js.br +0 -0
- package/client/assets/ProtectedEditor-D4UXj1xL.js.gz +0 -0
- package/client/assets/ProtectedEditor-D4UXj1xL.js.map +1 -0
- package/client/assets/RundownEntry-B1dSz1wu.js +2 -0
- package/client/assets/RundownEntry-B1dSz1wu.js.br +0 -0
- package/client/assets/RundownEntry-B1dSz1wu.js.gz +0 -0
- package/client/assets/{RundownEntry-Dl4Cb_pZ.js.map → RundownEntry-B1dSz1wu.js.map} +1 -1
- package/client/assets/RundownExport-WjLpncYT.js +3 -0
- package/client/assets/RundownExport-WjLpncYT.js.br +0 -0
- package/client/assets/RundownExport-WjLpncYT.js.gz +0 -0
- package/client/assets/{RundownExport-BPDLhvsM.js.map → RundownExport-WjLpncYT.js.map} +1 -1
- package/client/assets/{Select-CUjlJirY.js → Select-niU9Razm.js} +2 -2
- package/client/assets/Select-niU9Razm.js.br +0 -0
- package/client/assets/Select-niU9Razm.js.gz +0 -0
- package/client/assets/{Select-CUjlJirY.js.map → Select-niU9Razm.js.map} +1 -1
- package/client/assets/Studio-CWdJq4bx.js +2 -0
- package/client/assets/Studio-CWdJq4bx.js.br +0 -0
- package/client/assets/Studio-CWdJq4bx.js.gz +0 -0
- package/client/assets/{Studio-BLCIas53.js.map → Studio-CWdJq4bx.js.map} +1 -1
- package/client/assets/{StyleEditor-DTNiR-0P.js → StyleEditor-BIFjHsgD.js} +2 -2
- package/client/assets/StyleEditor-BIFjHsgD.js.br +0 -0
- package/client/assets/StyleEditor-BIFjHsgD.js.gz +0 -0
- package/client/assets/{StyleEditor-DTNiR-0P.js.map → StyleEditor-BIFjHsgD.js.map} +1 -1
- package/client/assets/SuperscriptTime-DCTyUARx.js +2 -0
- package/client/assets/SuperscriptTime-DCTyUARx.js.br +0 -0
- package/client/assets/SuperscriptTime-DCTyUARx.js.gz +0 -0
- package/client/assets/SuperscriptTime-DCTyUARx.js.map +1 -0
- package/client/assets/TimeElements-DBVGVx71.js +2 -0
- package/client/assets/TimeElements-DBVGVx71.js.br +0 -0
- package/client/assets/TimeElements-DBVGVx71.js.gz +0 -0
- package/client/assets/{TimeElements-rlwX9Mgy.js.map → TimeElements-DBVGVx71.js.map} +1 -1
- package/client/assets/{TimeInput-C0_Nl63x.js → TimeInput-wQ67FbW6.js} +2 -2
- package/client/assets/TimeInput-wQ67FbW6.js.br +0 -0
- package/client/assets/TimeInput-wQ67FbW6.js.gz +0 -0
- package/client/assets/{TimeInput-C0_Nl63x.js.map → TimeInput-wQ67FbW6.js.map} +1 -1
- package/client/assets/TimelinePage-DZefE2vQ.js +2 -0
- package/client/assets/TimelinePage-DZefE2vQ.js.br +0 -0
- package/client/assets/TimelinePage-DZefE2vQ.js.gz +0 -0
- package/client/assets/{TimelinePage-BC-pnISF.js.map → TimelinePage-DZefE2vQ.js.map} +1 -1
- package/client/assets/Timer-Bs450x86.js +2 -0
- package/client/assets/Timer-Bs450x86.js.br +0 -0
- package/client/assets/Timer-Bs450x86.js.gz +0 -0
- package/client/assets/Timer-Bs450x86.js.map +1 -0
- package/client/assets/{TimerControlExport-C_Jbwxog.js → TimerControlExport-C1C_vBX4.js} +2 -2
- package/client/assets/TimerControlExport-C1C_vBX4.js.br +0 -0
- package/client/assets/TimerControlExport-C1C_vBX4.js.gz +0 -0
- package/client/assets/{TimerControlExport-C_Jbwxog.js.map → TimerControlExport-C1C_vBX4.js.map} +1 -1
- package/client/assets/{TitleCard-C-Tw72nZ.js → TitleCard-B4N-kCM3.js} +2 -2
- package/client/assets/TitleCard-B4N-kCM3.js.br +0 -0
- package/client/assets/TitleCard-B4N-kCM3.js.gz +0 -0
- package/client/assets/{TitleCard-C-Tw72nZ.js.map → TitleCard-B4N-kCM3.js.map} +1 -1
- package/client/assets/{Tooltip-BZrLdTBU.js → Tooltip-DJ8Y4CO4.js} +2 -2
- package/client/assets/Tooltip-DJ8Y4CO4.js.br +0 -0
- package/client/assets/Tooltip-DJ8Y4CO4.js.gz +0 -0
- package/client/assets/{Tooltip-BZrLdTBU.js.map → Tooltip-DJ8Y4CO4.js.map} +1 -1
- package/client/assets/{ViewLogo-CdsW41HC.js → ViewLogo-Dd60EREE.js} +2 -2
- package/client/assets/ViewLogo-Dd60EREE.js.br +0 -0
- package/client/assets/ViewLogo-Dd60EREE.js.gz +0 -0
- package/client/assets/{ViewLogo-CdsW41HC.js.map → ViewLogo-Dd60EREE.js.map} +1 -1
- package/client/assets/{ViewParamsEditor-kNKEOAwm.css → ViewParamsEditor-1Ok39npF.css} +1 -1
- package/client/assets/ViewParamsEditor-1Ok39npF.css.br +0 -0
- package/client/assets/ViewParamsEditor-1Ok39npF.css.gz +0 -0
- package/client/assets/{ViewParamsEditor-YoYxps2g.js → ViewParamsEditor-BWEYbq_S.js} +2 -2
- package/client/assets/ViewParamsEditor-BWEYbq_S.js.br +0 -0
- package/client/assets/ViewParamsEditor-BWEYbq_S.js.gz +0 -0
- package/client/assets/{ViewParamsEditor-YoYxps2g.js.map → ViewParamsEditor-BWEYbq_S.js.map} +1 -1
- package/client/assets/{dateConfig-CqC6Ta_8.js → dateConfig-8rhb0Dbh.js} +2 -2
- package/client/assets/dateConfig-8rhb0Dbh.js.br +0 -0
- package/client/assets/dateConfig-8rhb0Dbh.js.gz +0 -0
- package/client/assets/{dateConfig-CqC6Ta_8.js.map → dateConfig-8rhb0Dbh.js.map} +1 -1
- package/client/assets/{editorSettings-CL1TjKzU.js → editorSettings-LMnfWux6.js} +2 -2
- package/client/assets/editorSettings-LMnfWux6.js.br +0 -0
- package/client/assets/editorSettings-LMnfWux6.js.gz +0 -0
- package/client/assets/{editorSettings-CL1TjKzU.js.map → editorSettings-LMnfWux6.js.map} +1 -1
- package/client/assets/{getProgress-Dh-Yy44B.js → getProgress-CyJTu6f5.js} +2 -2
- package/client/assets/getProgress-CyJTu6f5.js.br +0 -0
- package/client/assets/getProgress-CyJTu6f5.js.gz +0 -0
- package/client/assets/{getProgress-Dh-Yy44B.js.map → getProgress-CyJTu6f5.js.map} +1 -1
- package/client/assets/index-5QAOtSTh.js +3 -0
- package/client/assets/index-5QAOtSTh.js.br +0 -0
- package/client/assets/index-5QAOtSTh.js.gz +0 -0
- package/client/assets/index-5QAOtSTh.js.map +1 -0
- package/client/assets/{index-pvMSlFrO.css → index-De0uf0Ta.css} +1 -1
- package/client/assets/index-De0uf0Ta.css.br +0 -0
- package/client/assets/index-De0uf0Ta.css.gz +0 -0
- package/client/assets/{offset-BnfjZ6JI.js → offset-CLDSqOP5.js} +2 -2
- package/client/assets/offset-CLDSqOP5.js.br +0 -0
- package/client/assets/offset-CLDSqOP5.js.gz +0 -0
- package/client/assets/{offset-BnfjZ6JI.js.map → offset-CLDSqOP5.js.map} +1 -1
- package/client/assets/{parseUserTime-DNXIMX9s.js → parseUserTime-CCDHpp7D.js} +2 -2
- package/client/assets/parseUserTime-CCDHpp7D.js.br +0 -0
- package/client/assets/parseUserTime-CCDHpp7D.js.gz +0 -0
- package/client/assets/{parseUserTime-DNXIMX9s.js.map → parseUserTime-CCDHpp7D.js.map} +1 -1
- package/client/assets/{playbackstate-DzSEaiNW.js → playbackstate-6lBh6omZ.js} +2 -2
- package/client/assets/playbackstate-6lBh6omZ.js.br +0 -0
- package/client/assets/playbackstate-6lBh6omZ.js.gz +0 -0
- package/client/assets/{playbackstate-DzSEaiNW.js.map → playbackstate-6lBh6omZ.js.map} +1 -1
- package/client/assets/{presentation.utils-BfcniGcl.js → presentation.utils-BUIuV_2e.js} +2 -2
- package/client/assets/presentation.utils-BUIuV_2e.js.br +0 -0
- package/client/assets/presentation.utils-BUIuV_2e.js.gz +0 -0
- package/client/assets/{presentation.utils-BfcniGcl.js.map → presentation.utils-BUIuV_2e.js.map} +1 -1
- package/client/assets/{rundownUtils-CPBsEZ2m.js → rundownUtils-Cnd2prRX.js} +2 -2
- package/client/assets/rundownUtils-Cnd2prRX.js.br +0 -0
- package/client/assets/rundownUtils-Cnd2prRX.js.gz +0 -0
- package/client/assets/{rundownUtils-CPBsEZ2m.js.map → rundownUtils-Cnd2prRX.js.map} +1 -1
- package/client/assets/{useCustomFields-DY13Ir96.js → useCustomFields-BuxKsqGS.js} +2 -2
- package/client/assets/useCustomFields-BuxKsqGS.js.br +0 -0
- package/client/assets/useCustomFields-BuxKsqGS.js.gz +0 -0
- package/client/assets/{useCustomFields-DY13Ir96.js.map → useCustomFields-BuxKsqGS.js.map} +1 -1
- package/client/assets/{useFollowComponent-C42-1XCu.js → useFollowComponent-iGQv4zoS.js} +2 -2
- package/client/assets/useFollowComponent-iGQv4zoS.js.br +0 -0
- package/client/assets/useFollowComponent-iGQv4zoS.js.gz +0 -0
- package/client/assets/{useFollowComponent-C42-1XCu.js.map → useFollowComponent-iGQv4zoS.js.map} +1 -1
- package/client/assets/{useProjectData-BF2F6qPB.js → useProjectData-CetvEK9E.js} +2 -2
- package/client/assets/useProjectData-CetvEK9E.js.br +0 -0
- package/client/assets/useProjectData-CetvEK9E.js.gz +0 -0
- package/client/assets/{useProjectData-BF2F6qPB.js.map → useProjectData-CetvEK9E.js.map} +1 -1
- package/client/assets/useReport-PEFRsOhF.js +2 -0
- package/client/assets/useReport-PEFRsOhF.js.br +0 -0
- package/client/assets/useReport-PEFRsOhF.js.gz +0 -0
- package/client/assets/{useReport-DPqY9XXp.js.map → useReport-PEFRsOhF.js.map} +1 -1
- package/client/assets/{useRundown-uuXixjnX.js → useRundown-D8CYATNi.js} +2 -2
- package/client/assets/useRundown-D8CYATNi.js.br +0 -0
- package/client/assets/useRundown-D8CYATNi.js.gz +0 -0
- package/client/assets/{useRundown-uuXixjnX.js.map → useRundown-D8CYATNi.js.map} +1 -1
- package/client/assets/{useWindowTitle-BQ1kqXfk.js → useWindowTitle-b5fN0StF.js} +2 -2
- package/client/assets/useWindowTitle-b5fN0StF.js.br +0 -0
- package/client/assets/useWindowTitle-b5fN0StF.js.gz +0 -0
- package/client/assets/{useWindowTitle-BQ1kqXfk.js.map → useWindowTitle-b5fN0StF.js.map} +1 -1
- package/client/assets/{validateEvent-Cy-jEiwB.js → validateEvent-Bvgk1E-Y.js} +2 -2
- package/client/assets/validateEvent-Bvgk1E-Y.js.br +0 -0
- package/client/assets/validateEvent-Bvgk1E-Y.js.gz +0 -0
- package/client/assets/{validateEvent-Cy-jEiwB.js.map → validateEvent-Bvgk1E-Y.js.map} +1 -1
- package/client/assets/{vendor-Cnciq4o_.js → vendor-Cu5xgv5K.js} +3 -3
- package/client/assets/vendor-Cu5xgv5K.js.br +0 -0
- package/client/assets/vendor-Cu5xgv5K.js.gz +0 -0
- package/client/assets/{vendor-Cnciq4o_.js.map → vendor-Cu5xgv5K.js.map} +1 -1
- package/client/assets/{common.options-p5f_zJ2-.js → viewLoader.utils-BPhACxyG.js} +2 -2
- package/client/assets/viewLoader.utils-BPhACxyG.js.br +0 -0
- package/client/assets/viewLoader.utils-BPhACxyG.js.gz +0 -0
- package/client/assets/viewLoader.utils-BPhACxyG.js.map +1 -0
- package/client/index.html +3 -3
- package/package.json +1 -1
- package/server/index.cjs +103 -103
- package/client/assets/Backstage-B-_iTDRg.js +0 -2
- package/client/assets/Backstage-B-_iTDRg.js.br +0 -0
- package/client/assets/Backstage-B-_iTDRg.js.gz +0 -0
- package/client/assets/Backstage-B-_iTDRg.js.map +0 -1
- package/client/assets/Countdown-BaaR4j9x.js +0 -2
- package/client/assets/Countdown-BaaR4j9x.js.br +0 -0
- package/client/assets/Countdown-BaaR4j9x.js.gz +0 -0
- package/client/assets/CustomTranslationModal-CcNNjbmZ.js +0 -2
- package/client/assets/CustomTranslationModal-CcNNjbmZ.js.br +0 -0
- package/client/assets/CustomTranslationModal-CcNNjbmZ.js.gz +0 -0
- package/client/assets/DelayIndicator-DXDACqpc.js.br +0 -0
- package/client/assets/DelayIndicator-DXDACqpc.js.gz +0 -0
- package/client/assets/DropdownMenu-Bn0VHzKx.js +0 -2
- package/client/assets/DropdownMenu-Bn0VHzKx.js.br +0 -0
- package/client/assets/DropdownMenu-Bn0VHzKx.js.gz +0 -0
- package/client/assets/DropdownMenu-Bn0VHzKx.js.map +0 -1
- package/client/assets/DropdownMenu-ByBDeesm.css +0 -1
- package/client/assets/DropdownMenu-ByBDeesm.css.br +0 -0
- package/client/assets/DropdownMenu-ByBDeesm.css.gz +0 -0
- package/client/assets/EditorFeatureWrapper-CX6wzTmM.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-CX6wzTmM.js.gz +0 -0
- package/client/assets/EditorUtils-DxjFOwpn.js.br +0 -0
- package/client/assets/EditorUtils-DxjFOwpn.js.gz +0 -0
- package/client/assets/Empty-DiBXyIA8.js.br +0 -2
- package/client/assets/Empty-DiBXyIA8.js.gz +0 -0
- package/client/assets/EmptyPage-X6EO1Y5W.js.br +0 -0
- package/client/assets/EmptyPage-X6EO1Y5W.js.gz +0 -0
- package/client/assets/FollowButton-Cr-HA2-6.js.br +0 -0
- package/client/assets/FollowButton-Cr-HA2-6.js.gz +0 -0
- package/client/assets/MessageControlExport-VUkIayAJ.js.br +0 -0
- package/client/assets/MessageControlExport-VUkIayAJ.js.gz +0 -0
- package/client/assets/MilestoneEditor-Da8oxrHI.js +0 -2
- package/client/assets/MilestoneEditor-Da8oxrHI.js.br +0 -0
- package/client/assets/MilestoneEditor-Da8oxrHI.js.gz +0 -0
- package/client/assets/MultiPartProgressBar-mGPuP1Wd.js.br +0 -0
- package/client/assets/MultiPartProgressBar-mGPuP1Wd.js.gz +0 -0
- package/client/assets/OperatorExport-BeuWuV6I.js +0 -2
- package/client/assets/OperatorExport-BeuWuV6I.js.br +0 -0
- package/client/assets/OperatorExport-BeuWuV6I.js.gz +0 -0
- package/client/assets/OperatorExport-BeuWuV6I.js.map +0 -1
- package/client/assets/OverviewWrapper-BMuW_wiO.js.br +0 -0
- package/client/assets/OverviewWrapper-BMuW_wiO.js.gz +0 -0
- package/client/assets/ProjectInfo-BYi1lzPk.js.br +0 -0
- package/client/assets/ProjectInfo-BYi1lzPk.js.gz +0 -0
- package/client/assets/ProtectRoute-DnUCrlh6.js.br +0 -0
- package/client/assets/ProtectRoute-DnUCrlh6.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-CQOB7ipQ.js +0 -2
- package/client/assets/ProtectedCuesheet-CQOB7ipQ.js.br +0 -0
- package/client/assets/ProtectedCuesheet-CQOB7ipQ.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-CQOB7ipQ.js.map +0 -1
- package/client/assets/ProtectedEditor-C4beOxz1.css +0 -1
- package/client/assets/ProtectedEditor-C4beOxz1.css.br +0 -0
- package/client/assets/ProtectedEditor-C4beOxz1.css.gz +0 -0
- package/client/assets/ProtectedEditor-KcsoZKKo.js +0 -3
- package/client/assets/ProtectedEditor-KcsoZKKo.js.br +0 -0
- package/client/assets/ProtectedEditor-KcsoZKKo.js.gz +0 -0
- package/client/assets/ProtectedEditor-KcsoZKKo.js.map +0 -1
- package/client/assets/RundownEntry-Dl4Cb_pZ.js +0 -2
- package/client/assets/RundownEntry-Dl4Cb_pZ.js.br +0 -0
- package/client/assets/RundownEntry-Dl4Cb_pZ.js.gz +0 -0
- package/client/assets/RundownExport-BPDLhvsM.js +0 -3
- package/client/assets/RundownExport-BPDLhvsM.js.br +0 -0
- package/client/assets/RundownExport-BPDLhvsM.js.gz +0 -0
- package/client/assets/Select-CUjlJirY.js.br +0 -0
- package/client/assets/Select-CUjlJirY.js.gz +0 -0
- package/client/assets/Studio-BLCIas53.js +0 -2
- package/client/assets/Studio-BLCIas53.js.br +0 -0
- package/client/assets/Studio-BLCIas53.js.gz +0 -0
- package/client/assets/StyleEditor-DTNiR-0P.js.br +0 -0
- package/client/assets/StyleEditor-DTNiR-0P.js.gz +0 -0
- package/client/assets/TimeElements-rlwX9Mgy.js +0 -2
- package/client/assets/TimeElements-rlwX9Mgy.js.br +0 -0
- package/client/assets/TimeElements-rlwX9Mgy.js.gz +0 -0
- package/client/assets/TimeInput-C0_Nl63x.js.br +0 -0
- package/client/assets/TimeInput-C0_Nl63x.js.gz +0 -0
- package/client/assets/TimelinePage-BC-pnISF.js +0 -2
- package/client/assets/TimelinePage-BC-pnISF.js.br +0 -0
- package/client/assets/TimelinePage-BC-pnISF.js.gz +0 -0
- package/client/assets/Timer-DgmA0De-.js +0 -2
- package/client/assets/Timer-DgmA0De-.js.br +0 -0
- package/client/assets/Timer-DgmA0De-.js.gz +0 -0
- package/client/assets/Timer-DgmA0De-.js.map +0 -1
- package/client/assets/TimerControlExport-C_Jbwxog.js.br +0 -0
- package/client/assets/TimerControlExport-C_Jbwxog.js.gz +0 -0
- package/client/assets/TitleCard-C-Tw72nZ.js.br +0 -0
- package/client/assets/TitleCard-C-Tw72nZ.js.gz +0 -0
- package/client/assets/Tooltip-BZrLdTBU.js.br +0 -0
- package/client/assets/Tooltip-BZrLdTBU.js.gz +0 -0
- package/client/assets/ViewLogo-CdsW41HC.js.br +0 -0
- package/client/assets/ViewLogo-CdsW41HC.js.gz +0 -0
- package/client/assets/ViewParamsEditor-YoYxps2g.js.br +0 -0
- package/client/assets/ViewParamsEditor-YoYxps2g.js.gz +0 -0
- package/client/assets/ViewParamsEditor-kNKEOAwm.css.br +0 -0
- package/client/assets/ViewParamsEditor-kNKEOAwm.css.gz +0 -0
- package/client/assets/common.options-p5f_zJ2-.js.br +0 -0
- package/client/assets/common.options-p5f_zJ2-.js.gz +0 -0
- package/client/assets/common.options-p5f_zJ2-.js.map +0 -1
- package/client/assets/dateConfig-CqC6Ta_8.js.br +0 -0
- package/client/assets/dateConfig-CqC6Ta_8.js.gz +0 -0
- package/client/assets/editorSettings-CL1TjKzU.js.br +0 -0
- package/client/assets/editorSettings-CL1TjKzU.js.gz +0 -0
- package/client/assets/getProgress-Dh-Yy44B.js.br +0 -0
- package/client/assets/getProgress-Dh-Yy44B.js.gz +0 -0
- package/client/assets/index-DdPXqLQ6.js +0 -3
- package/client/assets/index-DdPXqLQ6.js.br +0 -0
- package/client/assets/index-DdPXqLQ6.js.gz +0 -0
- package/client/assets/index-DdPXqLQ6.js.map +0 -1
- package/client/assets/index-pvMSlFrO.css.br +0 -0
- package/client/assets/index-pvMSlFrO.css.gz +0 -0
- package/client/assets/offset-BnfjZ6JI.js.br +0 -2
- package/client/assets/offset-BnfjZ6JI.js.gz +0 -0
- package/client/assets/parseUserTime-DNXIMX9s.js.br +0 -0
- package/client/assets/parseUserTime-DNXIMX9s.js.gz +0 -0
- package/client/assets/playbackstate-DzSEaiNW.js.br +0 -0
- package/client/assets/playbackstate-DzSEaiNW.js.gz +0 -0
- package/client/assets/presentation.utils-BfcniGcl.js.br +0 -0
- package/client/assets/presentation.utils-BfcniGcl.js.gz +0 -0
- package/client/assets/rundownUtils-CPBsEZ2m.js.br +0 -0
- package/client/assets/rundownUtils-CPBsEZ2m.js.gz +0 -0
- package/client/assets/useCustomFields-DY13Ir96.js.br +0 -0
- package/client/assets/useCustomFields-DY13Ir96.js.gz +0 -0
- package/client/assets/useFollowComponent-C42-1XCu.js.br +0 -0
- package/client/assets/useFollowComponent-C42-1XCu.js.gz +0 -0
- package/client/assets/useProjectData-BF2F6qPB.js.br +0 -0
- package/client/assets/useProjectData-BF2F6qPB.js.gz +0 -0
- package/client/assets/useReport-DPqY9XXp.js +0 -2
- package/client/assets/useReport-DPqY9XXp.js.br +0 -0
- package/client/assets/useReport-DPqY9XXp.js.gz +0 -0
- package/client/assets/useRundown-uuXixjnX.js.br +0 -0
- package/client/assets/useRundown-uuXixjnX.js.gz +0 -0
- package/client/assets/useWindowTitle-BQ1kqXfk.js.br +0 -0
- package/client/assets/useWindowTitle-BQ1kqXfk.js.gz +0 -0
- package/client/assets/validateEvent-Cy-jEiwB.js.br +0 -0
- package/client/assets/validateEvent-Cy-jEiwB.js.gz +0 -0
- package/client/assets/vendor-Cnciq4o_.js.br +0 -0
- package/client/assets/vendor-Cnciq4o_.js.gz +0 -0
- package/client/assets/viewLoader.utils-CYlNKkLE.js +0 -2
- package/client/assets/viewLoader.utils-CYlNKkLE.js.br +0 -0
- package/client/assets/viewLoader.utils-CYlNKkLE.js.gz +0 -0
- package/client/assets/viewLoader.utils-CYlNKkLE.js.map +0 -1
- /package/client/assets/{viewLoader-Bk5IU6zG.css → SuperscriptTime-Bk5IU6zG.css} +0 -0
- /package/client/assets/{viewLoader-Bk5IU6zG.css.br → SuperscriptTime-Bk5IU6zG.css.br} +0 -0
- /package/client/assets/{viewLoader-Bk5IU6zG.css.gz → SuperscriptTime-Bk5IU6zG.css.gz} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,l as G,h as d,y as te,ab as se}from"./vendor-Cnciq4o_.js";import{i as c,q as ne,v as ae,g as f,P as ie,b as L,w as $,a as re,u as ce,d as oe,L as le,f as Q,x as de,y as ue,z as me,h as he,O as xe,s as fe,A as pe}from"./index-DdPXqLQ6.js";import{g as ve}from"./getProgress-Dh-Yy44B.js";import{E as ge}from"./Empty-DiBXyIA8.js";import{E as ye}from"./EmptyPage-X6EO1Y5W.js";import{T as z}from"./TitleCard-C-Tw72nZ.js";import{V as _e}from"./ViewLogo-CdsW41HC.js";import{O as B,i as D,m as A,d as je,g as V,V as Ne}from"./ViewParamsEditor-YoYxps2g.js";import{u as we}from"./useWindowTitle-BQ1kqXfk.js";import{S as p,a as Se}from"./viewLoader.utils-CYlNKkLE.js";import{b as be,i as W,c as Ee}from"./useRundown-uuXixjnX.js";import{g as ke}from"./offset-BnfjZ6JI.js";import{g as Pe}from"./common.options-p5f_zJ2-.js";import{u as Ie}from"./useCustomFields-DY13Ir96.js";import{u as Te}from"./useProjectData-BF2F6qPB.js";import"./Select-CUjlJirY.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new t.Error().stack;s&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[s]="5be6c964-d159-4b9a-b2a3-28cae358e583",t._sentryDebugIdIdentifier="sentry-dbid-5be6c964-d159-4b9a-b2a3-28cae358e583")}catch{}})();function Oe(t){const{current:s,duration:n,className:a}=t,i=ve(s,n);return e.jsx("div",{className:`progress-bar__bg ${a}`,children:e.jsx("div",{className:"progress-bar__indicator",style:{width:`${i}%`}})})}const Ce=t=>({title:B.Schedule,collapsible:!0,options:[{id:"filter",title:"Filter",description:"Hide events without data in the selected custom field",type:"option",values:t,defaultValue:"None"},{id:"stopCycle",title:"Stop cycling through event pages",description:"Schedule will not auto-cycle through events",type:"boolean",defaultValue:!1},{id:"cycleInterval",title:"Cycle interval",description:"How long (in seconds) should each schedule page be shown.",type:"number",defaultValue:10},{id:"showExpected",title:"Show expected time",description:"Whether the times shown should account for the runtime offset.",type:"boolean",defaultValue:!1}]});function Fe(t){return{filter:t.get("filter"),cycleInterval:Number(t.get("cycleInterval"))||10,stopCycle:D(t.get("stopCycle")),showExpected:D(t.get("showExpected"))}}function K(){const[t]=G();return d.useMemo(()=>Fe(t),[t])}const U=d.createContext(void 0),Ve=({children:t,selectedEventId:s})=>{const{cycleInterval:n,stopCycle:a,filter:i}=K(),{data:r}=be(o=>{if(i){const k=i.startsWith("custom-")?i.slice(7):i;return W(o)&&!!o.custom[k]}return W(o)}),[l,u]=d.useState(-1),[x,g]=d.useState(0),[v,y]=d.useState(0),m=d.useRef(-1),S=d.useRef(void 0),N=d.useRef(null);d.useLayoutEffect(()=>{if(!N.current)return;const o=Array.from(N.current.children);if(o.length===0)return;const k=N.current.clientHeight;let b=0,F=1,P=1,I=-1,_=!1;for(let h=0;h<o.length;h++){const j=o[h].clientHeight,O=b+j>k;O&&(b=0,P+=1),h<l?T(o[h]):I===-1?(_=!0,F=P):O&&(_=!1),_?(I=h,H(o[h],b)):T(o[h]),b+=j}y(F),g(P),m.current=I;function H(h,j){h.style.top=`${j}px`}function T(h){h.style.top="-1000px"}},[l,r]),d.useEffect(()=>{if(a){y(1),u(0);return}S.current&&clearInterval(S.current);const o=setInterval(()=>{u(v===x?0:m.current+1)},n*1e3);return S.current=o,()=>clearInterval(S.current)},[n,x,a,v]);let C=r.findIndex(o=>o.id===s);const w=r.slice(C+1);return C=0,e.jsx(U,{value:{events:w,selectedEventId:s,numPages:x,visiblePage:v,containerRef:N},children:t})},Z=()=>{const t=d.use(U);if(!t)throw new Error("useSchedule() can only be used inside a ScheduleContext");return t},E={format12:"hh:mm a",format24:"HH:mm"};function Be({timeStart:t,dayOffset:s,delay:n,totalGap:a,isLinkedToLoaded:i,countToEnd:r,colour:l,duration:u,skip:x,title:g,timeEnd:v,cue:y}){const{showExpected:m}=K();return e.jsxs("li",{className:c(["entry",x&&"entry--skip"]),"data-testid":y,children:[e.jsx("div",{className:"entry-times",children:m?e.jsx(Me,{timeStart:t,dayOffset:s,delay:n,totalGap:a,isLinkedToLoaded:i,countToEnd:r,duration:u,colour:l}):n>0?e.jsx(Le,{timeStart:t,delay:n,colour:l,timeEnd:v}):e.jsx(He,{timeStart:t,timeEnd:v,colour:l})}),e.jsx("div",{className:"entry-title",children:g})]})}function He({timeStart:t,timeEnd:s,colour:n}){const a=f(t,E),i=f(s,E);return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"entry-colour",style:{backgroundColor:n}}),e.jsx(p,{time:a}),"→",e.jsx(p,{time:i})]})}function Le({timeStart:t,timeEnd:s,colour:n,delay:a}){const i=f(t,E),r=f(s,E),l=f(t+a,E),u=f(s+a,E);return e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"entry-times--delayed",children:[e.jsx("span",{className:"entry-colour",style:{backgroundColor:n}}),e.jsx(p,{time:i}),"→",e.jsx(p,{time:r})]}),e.jsxs("span",{className:"entry-times--delay",children:[e.jsx(p,{time:l}),"→",e.jsx(p,{time:u})]})]})}function Me({timeStart:t,dayOffset:s,delay:n,totalGap:a,isLinkedToLoaded:i,countToEnd:r,colour:l,duration:u}){const x=ne(),{expectedStart:g,expectedEnd:v,plannedEnd:y}=ae({timeStart:t,dayOffset:s,delay:n,totalGap:a,isLinkedToLoaded:i,countToEnd:r,duration:u},x);return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"entry-colour",style:{backgroundColor:l}}),e.jsx(q,{expectedTime:g,plannedTime:t}),"→",e.jsx(q,{expectedTime:v,plannedTime:y})]})}function q({expectedTime:t,plannedTime:s}){const n=f(t),a=ke(t-s);return e.jsx(p,{className:`entry-times--${a}`,time:n})}function Re({className:t}){const{events:s,containerRef:n}=Z();return(s==null?void 0:s.length)<1?null:e.jsx("ul",{className:c(["schedule",t]),ref:n,children:s.map(a=>e.jsx(Be,{timeStart:a.timeStart,dayOffset:a.dayOffset,delay:a.delay,totalGap:a.totalGap,isLinkedToLoaded:a.isLinkedToLoaded,countToEnd:a.countToEnd,duration:a.duration,colour:a.colour,skip:a.skip,title:a.title,timeEnd:a.timeEnd,cue:a.cue},a.id))})}function $e({className:t}){const{numPages:s,visiblePage:n}=Z();return s>10?e.jsxs("div",{className:c(["schedule-nav",t]),children:[e.jsx("div",{className:c(["schedule-nav__item",n===1&&"schedule-nav__item--selected"])}),e.jsx("div",{className:c(["schedule-nav__item",n===2&&"schedule-nav__item--selected"])}),e.jsx("div",{className:c(["schedule-nav__item",n===3&&"schedule-nav__item--selected"])}),e.jsx("div",{className:c(["schedule-nav__item",n===4&&"schedule-nav__item--selected"])}),e.jsx("div",{className:c(["schedule-nav__item",n===5&&"schedule-nav__item--selected"])}),e.jsx("div",{className:c(["schedule-nav__item","schedule-nav__item--indeterminate",n>5&&n<s-4&&"schedule-nav__item--selected"])}),e.jsx("div",{className:c(["schedule-nav__item",n===s-4&&"schedule-nav__item--selected"])}),e.jsx("div",{className:c(["schedule-nav__item",n===s-3&&"schedule-nav__item--selected"])}),e.jsx("div",{className:c(["schedule-nav__item",n===s-2&&"schedule-nav__item--selected"])}),e.jsx("div",{className:c(["schedule-nav__item",n===s-1&&"schedule-nav__item--selected"])}),e.jsx("div",{className:c(["schedule-nav__item",n===s&&"schedule-nav__item--selected"])})]}):e.jsx("div",{className:c(["schedule-nav",t]),children:s>1&&[...Array(s).keys()].map(a=>e.jsx("div",{className:c(["schedule-nav__item",a+1===n&&"schedule-nav__item--selected"])},a))})}const ze=d.memo(De);function De(t){const{selectedId:s}=t;return e.jsxs(Ve,{selectedEventId:s,children:[e.jsx($e,{className:"schedule-nav-container"}),e.jsx(Re,{className:"schedule-container"})]})}const Ae=(t,s,n)=>{const a=A(s,[]),i=A(s,[{value:"none",label:"None"},{value:"note",label:"Note"}]),r=je(n,[{value:"none",label:"None"}]);return[{title:B.ClockOptions,collapsible:!0,options:[Pe(t)]},{title:B.DataSources,collapsible:!0,options:[{id:"secondary-src",title:"Event secondary text",description:"Select the data source for auxiliary text shown in now and next cards",type:"option",values:i,defaultValue:"none"}]},Ce(a),{title:B.ElementVisibility,collapsible:!0,options:[{id:"extra-info",title:"Extra info",description:"Select a project data source to show in the view",type:"option",values:r,defaultValue:"none"}]}]};function We(t,s){const n=a=>(s==null?void 0:s.get(a))??t.get(a);return{secondarySource:n("secondary-src"),extraInfo:n("extra-info")}}function qe(){const[t]=G(),s=d.use(ie);return d.useMemo(()=>{const a=s?new URLSearchParams(s.search):void 0;return We(t,a)},[s,t])}function Ge(t){return(t??0)<0}function Qe(t){return t!==L.Stop}function Ke(t,s){return t===L.Roll&&s===re.Pending}function Ue(t,s,n,a,i){if(i===L.Stop)return{showNow:!1,nowMain:void 0,nowSecondary:void 0,showNext:!1,nextMain:void 0,nextSecondary:void 0};const r=V(t,n)||$,l=V(t,a),u=V(s,n)||$,x=V(s,a);return{showNow:t!==null,nowMain:r,nowSecondary:l,showNext:s!==null,nextMain:u,nextSecondary:x}}function Ze(){const t=ce(g=>g.mirror),{data:s,status:n}=Ee(),{data:a,status:i}=Te(),{data:r,status:l}=oe(),{data:u,status:x}=Ie();return{data:{events:s,customFields:u,projectData:a,isMirrored:t,settings:r},status:Se([n,i,l,x])}}function pt(){const{data:t,status:s}=Ze();return we("Backstage"),s==="pending"?e.jsx(le,{}):s==="error"?e.jsx(ye,{text:"There was an error fetching data, please refresh the page."}):e.jsx(Je,{...t})}function Je({events:t,customFields:s,projectData:n,isMirrored:a,settings:i}){const{getLocalizedString:r}=Q(),{secondarySource:l,extraInfo:u}=qe(),{eventNext:x,eventNow:g,rundown:v,selectedEventId:y,time:m}=de(),[S,N]=d.useState(!1),{height:C}=te();d.useEffect(()=>{N(!1);const ee=setTimeout(()=>{N(!0)},10);return()=>clearTimeout(ee)},[y]);const w=t.length>0,{showNow:o,nowMain:k,nowSecondary:b,showNext:F,nextMain:P,nextSecondary:I}=Ue(g,x,"title",l,m.playback),_=Ke(m.playback,m.phase),H=_?f(m.secondaryTimer):f(m.startedAt),T=(()=>{if(!o&&w)return f(v.plannedStart,{format12:"hh:mm a",format24:"HH:mm"})})(),h=(()=>{if(!o&&w)return f(v.plannedEnd,{format12:"hh:mm a",format24:"HH:mm"})})();let j=ue(m.current,{fallback:pe});j=me(j);const O=Math.max(window.innerWidth/15,72),J=Qe(m.playback),M=w&&C>420,X=T&&h,R=he(i==null?void 0:i.timeFormat),Y=d.useMemo(()=>Ae(R,s,n),[R,s,n]);return e.jsxs("div",{className:`backstage ${a?"mirror":""}`,"data-testid":"backstage-view",children:[e.jsx(Ne,{target:xe.Backstage,viewOptions:Y}),e.jsxs("div",{className:"project-header",children:[(n==null?void 0:n.logo)&&e.jsx(_e,{name:n.logo,className:"logo"}),e.jsx("div",{className:"title",children:n.title}),e.jsx(Ye,{})]}),J&&e.jsx(Oe,{className:"progress-container",current:m.current,duration:m.duration}),!w&&e.jsx(ge,{text:r("common.no_data"),className:"empty-container"}),e.jsxs("div",{className:"card-container",children:[o&&e.jsxs("div",{className:c(["event","now",S&&"blink"]),children:[e.jsx(z,{title:k,secondary:b}),e.jsxs("div",{className:"timer-group",children:[e.jsxs("div",{className:"time-entry",children:[e.jsx("div",{className:c(["time-entry__label",_&&"time-entry--pending"]),children:r(_?"countdown.waiting":"common.started_at")}),e.jsx(p,{time:H,className:"time-entry__value"})]}),e.jsx("div",{className:"timer-gap"}),e.jsxs("div",{className:"time-entry",children:[e.jsx("div",{className:"time-entry__label",children:r("common.expected_finish")}),Ge(m.current)?e.jsx("div",{className:"time-entry__value",children:r("countdown.overtime")}):e.jsx(p,{time:f(m.expectedFinish),className:"time-entry__value"})]}),e.jsx("div",{className:"timer-gap"}),e.jsxs("div",{className:"time-entry",children:[e.jsx("div",{className:"time-entry__label",children:r("common.stage_timer")}),e.jsx("div",{className:"time-entry__value",children:j})]})]})]}),X&&e.jsxs("div",{className:"event",children:[e.jsx("div",{className:"title-card__placeholder",children:r("countdown.waiting")}),e.jsxs("div",{className:"timer-group",children:[e.jsxs("div",{className:"time-entry",children:[e.jsx("div",{className:c(["time-entry__label",_&&"time-entry--pending"]),children:r("common.scheduled_start")}),e.jsx(p,{time:T,className:"time-entry__value"})]}),e.jsx("div",{className:"timer-gap"}),e.jsxs("div",{className:"time-entry",children:[e.jsx("div",{className:"time-entry__label",children:r("common.scheduled_end")}),e.jsx(p,{time:h,className:"time-entry__value"})]})]})]}),F&&w&&e.jsx(z,{className:"event",label:"next",title:P,secondary:I})]}),M&&e.jsx(ze,{selectedId:y}),e.jsxs("div",{className:c(["info",!M&&"info--stretch"]),children:[u&&e.jsx(Xe,{projectData:n,size:O,source:u}),e.jsxs("div",{className:"info-card",children:[n.url&&e.jsx(se,{value:n.url,size:O,level:"L",className:"info-card__qr"}),n.info&&e.jsx("div",{className:"info-card__message",children:n.info})]})]})]})}function Xe({projectData:t,size:s,source:n}){const a=t.custom.find((i,r)=>`${r}-${i.title}`===n);return a?e.jsxs("div",{className:"info-card",children:[a.url&&e.jsx("img",{className:"info-card__img",width:s,src:a.url,onError:i=>i.currentTarget.style.display="none"}),e.jsxs("div",{className:"info__column",children:[a.title&&e.jsx("div",{className:"info-card__label",children:a.title}),a.value&&e.jsx("div",{className:"info-card__message",children:a.value})]})]}):null}function Ye(){const{getLocalizedString:t}=Q(),{clock:s}=fe(),n=f(s);return e.jsxs("div",{className:"clock-container",children:[e.jsx("div",{className:"label",children:t("common.time_now")}),e.jsx(p,{time:n,className:"time"})]})}export{pt as default};
|
|
2
|
-
//# sourceMappingURL=Backstage-B-_iTDRg.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Backstage-B-_iTDRg.js","sources":["../../src/common/components/progress-bar/ProgressBar.tsx","../../src/views/common/schedule/schedule.options.ts","../../src/views/common/schedule/ScheduleContext.tsx","../../src/views/common/schedule/ScheduleItem.tsx","../../src/views/common/schedule/Schedule.tsx","../../src/views/common/schedule/ScheduleNav.tsx","../../src/views/common/schedule/ScheduleExport.tsx","../../src/views/backstage/backstage.options.ts","../../src/views/backstage/backstage.utils.ts","../../src/views/backstage/useBackstageData.ts","../../src/views/backstage/Backstage.tsx"],"sourcesContent":["import { MaybeNumber } from 'ontime-types';\n\nimport { getProgress } from '../../utils/getProgress';\n\nimport './ProgressBar.scss';\n\ninterface ProgressBarProps {\n current: MaybeNumber;\n duration: MaybeNumber;\n className?: string;\n}\n\nexport default function ProgressBar(props: ProgressBarProps) {\n const { current, duration, className } = props;\n const progress = getProgress(current, duration);\n\n return (\n <div className={`progress-bar__bg ${className}`}>\n <div className='progress-bar__indicator' style={{ width: `${progress}%` }} />\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\n\nimport { SelectOption } from '../../../common/components/select/Select';\nimport { OptionTitle } from '../../../common/components/view-params-editor/constants';\nimport type { ViewOption } from '../../../common/components/view-params-editor/viewParams.types';\nimport { isStringBoolean } from '../../../features/viewers/common/viewUtils';\n\nexport const getScheduleOptions = (customFieldOptions: SelectOption[]): ViewOption => ({\n title: OptionTitle.Schedule,\n collapsible: true,\n options: [\n {\n id: 'filter',\n title: 'Filter',\n description: 'Hide events without data in the selected custom field',\n type: 'option',\n values: customFieldOptions,\n defaultValue: 'None',\n },\n {\n id: 'stopCycle',\n title: 'Stop cycling through event pages',\n description: 'Schedule will not auto-cycle through events',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'cycleInterval',\n title: 'Cycle interval',\n description: 'How long (in seconds) should each schedule page be shown.',\n type: 'number',\n defaultValue: 10,\n },\n {\n id: 'showExpected',\n title: 'Show expected time',\n description: 'Whether the times shown should account for the runtime offset.',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n});\n\ntype ScheduleOptions = {\n filter: string | null;\n cycleInterval: number;\n stopCycle: boolean;\n showExpected: boolean;\n};\n\nfunction getScheduleOptionsFromParams(searchParams: URLSearchParams): ScheduleOptions {\n return {\n filter: searchParams.get('filter'),\n cycleInterval: Number(searchParams.get('cycleInterval')) || 10,\n stopCycle: isStringBoolean(searchParams.get('stopCycle')),\n showExpected: isStringBoolean(searchParams.get('showExpected')),\n };\n}\n\n/**\n * Hook exposes the schedule component options\n */\nexport function useScheduleOptions() {\n const [searchParams] = useSearchParams();\n const options = useMemo(() => getScheduleOptionsFromParams(searchParams), [searchParams]);\n return options;\n}\n","import { createContext, PropsWithChildren, RefObject, use, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { EntryId, isOntimeEvent, OntimeEntry, OntimeEvent } from 'ontime-types';\n\nimport { usePartialRundown } from '../../../common/hooks-query/useRundown';\nimport { ExtendedEntry } from '../../../common/utils/rundownMetadata';\n\nimport { useScheduleOptions } from './schedule.options';\n\ninterface ScheduleContextState {\n events: ExtendedEntry<OntimeEvent>[];\n selectedEventId: string | null;\n numPages: number;\n visiblePage: number;\n containerRef: RefObject<HTMLUListElement | null>;\n}\n\nconst ScheduleContext = createContext<ScheduleContextState | undefined>(undefined);\n\ninterface ScheduleProviderProps {\n selectedEventId: EntryId | null;\n}\n\nexport const ScheduleProvider = ({ children, selectedEventId }: PropsWithChildren<ScheduleProviderProps>) => {\n const { cycleInterval, stopCycle, filter } = useScheduleOptions();\n const { data: events } = usePartialRundown((entry: ExtendedEntry<OntimeEntry>) => {\n if (filter) {\n // custom keys are prepended with custom-\n const customKey = filter.startsWith('custom-') ? filter.slice('custom-'.length) : filter;\n return isOntimeEvent(entry) && Boolean(entry.custom[customKey]);\n }\n return isOntimeEvent(entry);\n });\n\n const [firstIndex, setFirstIndex] = useState(-1);\n const [numPages, setNumPages] = useState(0);\n const [visiblePage, setVisiblePage] = useState(0);\n\n const lastIndex = useRef(-1);\n const paginator = useRef<NodeJS.Timeout>(undefined);\n\n const containerRef = useRef<HTMLUListElement>(null);\n\n // After the view is rendered, we paginate by hiding elements that dont fit\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n\n const children = Array.from(containerRef.current.children) as HTMLElement[];\n if (children.length === 0) {\n return;\n }\n\n const containerHeight = containerRef.current.clientHeight;\n let currentPageHeight = 0; // used to check when we need to paginate\n let currentPage = 1;\n let numPages = 1;\n let lastVisibleIndex = -1; // keep track of last index on screen\n let isShowingElements = false;\n\n for (let i = 0; i < children.length; i++) {\n const currentElementHeight = children[i].clientHeight;\n\n // can we fit this element in the current page?\n const isNextPage = currentPageHeight + currentElementHeight > containerHeight;\n if (isNextPage) {\n currentPageHeight = 0;\n numPages += 1;\n }\n\n // we hide elements that are before and after the first element to show\n if (i < firstIndex) {\n hideElement(children[i]);\n } else if (lastVisibleIndex === -1) {\n isShowingElements = true;\n currentPage = numPages;\n } else if (isNextPage) {\n isShowingElements = false;\n }\n\n if (!isShowingElements) {\n hideElement(children[i]);\n } else {\n lastVisibleIndex = i;\n showElement(children[i], currentPageHeight);\n }\n\n currentPageHeight += currentElementHeight;\n }\n\n setVisiblePage(currentPage);\n setNumPages(numPages);\n lastIndex.current = lastVisibleIndex;\n\n function showElement(element: HTMLElement, yPosition: number) {\n element.style.top = `${yPosition}px`;\n }\n\n function hideElement(element: HTMLElement) {\n element.style.top = `${-1000}px`;\n }\n // we need to add the events to make sure the effect runs on first render\n }, [firstIndex, events]);\n\n // schedule cycling through events\n useEffect(() => {\n if (stopCycle) {\n setVisiblePage(1);\n setFirstIndex(0);\n return;\n }\n\n if (paginator.current) {\n clearInterval(paginator.current);\n }\n\n const interval = setInterval(() => {\n // ensure we cycle back to the first event\n if (visiblePage === numPages) {\n setFirstIndex(0);\n } else {\n setFirstIndex(lastIndex.current + 1);\n }\n }, cycleInterval * 1000);\n paginator.current = interval;\n\n return () => clearInterval(paginator.current);\n }, [cycleInterval, numPages, stopCycle, visiblePage]);\n\n let selectedEventIndex = events.findIndex((event) => event.id === selectedEventId);\n\n // we want to show the event after the current\n const viewEvents = events.slice(selectedEventIndex + 1);\n selectedEventIndex = 0;\n\n return (\n <ScheduleContext\n value={{\n events: viewEvents as ExtendedEntry<OntimeEvent>[],\n selectedEventId,\n numPages,\n visiblePage,\n containerRef,\n }}\n >\n {children}\n </ScheduleContext>\n );\n};\n\nexport const useSchedule = () => {\n const context = use(ScheduleContext);\n if (!context) {\n throw new Error('useSchedule() can only be used inside a ScheduleContext');\n }\n return context;\n};\n","import { OntimeEvent } from 'ontime-types';\n\nimport { useExpectedStartData } from '../../../common/hooks/useSocket';\nimport { getOffsetState } from '../../../common/utils/offset';\nimport { ExtendedEntry } from '../../../common/utils/rundownMetadata';\nimport { cx } from '../../../common/utils/styleUtils';\nimport { formatTime, getExpectedTimesFromExtendedEvent } from '../../../common/utils/time';\nimport SuperscriptTime from '../../../features/viewers/common/superscript-time/SuperscriptTime';\n\nimport { useScheduleOptions } from './schedule.options';\n\nimport './Schedule.scss';\n\nconst formatOptions = {\n format12: 'hh:mm a',\n format24: 'HH:mm',\n};\n\ntype ScheduleItemProps = Pick<\n ExtendedEntry<OntimeEvent>,\n | 'timeStart'\n | 'dayOffset'\n | 'delay'\n | 'totalGap'\n | 'isLinkedToLoaded'\n | 'countToEnd'\n | 'duration'\n | 'colour'\n | 'skip'\n | 'title'\n | 'timeEnd'\n | 'cue'\n>;\n\nexport default function ScheduleItem({\n timeStart,\n dayOffset,\n delay,\n totalGap,\n isLinkedToLoaded,\n countToEnd,\n colour,\n duration,\n skip,\n title,\n timeEnd,\n cue,\n}: ScheduleItemProps) {\n const { showExpected } = useScheduleOptions();\n\n return (\n <li className={cx(['entry', skip && 'entry--skip'])} data-testid={cue}>\n <div className='entry-times'>\n {showExpected ? (\n <ExpectedScheduleItem\n timeStart={timeStart}\n dayOffset={dayOffset}\n delay={delay}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n countToEnd={countToEnd}\n duration={duration}\n colour={colour}\n />\n ) : delay > 0 ? (\n <DelayedScheduleItem timeStart={timeStart} delay={delay} colour={colour} timeEnd={timeEnd} />\n ) : (\n <PlannedScheduleItem timeStart={timeStart} timeEnd={timeEnd} colour={colour} />\n )}\n </div>\n <div className='entry-title'>{title}</div>\n </li>\n );\n}\n\nfunction PlannedScheduleItem({\n timeStart,\n timeEnd,\n colour,\n}: Pick<ScheduleItemProps, 'timeStart' | 'timeEnd' | 'colour'>) {\n const start = formatTime(timeStart, formatOptions);\n const end = formatTime(timeEnd, formatOptions);\n\n return (\n <>\n <span className='entry-colour' style={{ backgroundColor: colour }} />\n <SuperscriptTime time={start} />\n →\n <SuperscriptTime time={end} />\n </>\n );\n}\n\nfunction DelayedScheduleItem({\n timeStart,\n timeEnd,\n colour,\n delay,\n}: Pick<ScheduleItemProps, 'timeStart' | 'timeEnd' | 'colour' | 'delay'>) {\n const start = formatTime(timeStart, formatOptions);\n const end = formatTime(timeEnd, formatOptions);\n const delayedStart = formatTime(timeStart + delay, formatOptions);\n const delayedEnd = formatTime(timeEnd + delay, formatOptions);\n\n return (\n <>\n <span className='entry-times--delayed'>\n <span className='entry-colour' style={{ backgroundColor: colour }} />\n <SuperscriptTime time={start} />\n →\n <SuperscriptTime time={end} />\n </span>\n <span className='entry-times--delay'>\n <SuperscriptTime time={delayedStart} />\n →\n <SuperscriptTime time={delayedEnd} />\n </span>\n </>\n );\n}\n\nfunction ExpectedScheduleItem({\n timeStart,\n dayOffset,\n delay,\n totalGap,\n isLinkedToLoaded,\n countToEnd,\n colour,\n duration,\n}: Omit<ScheduleItemProps, 'timeEnd' | 'cue' | 'skip' | 'title'>) {\n const expectedStartData = useExpectedStartData();\n const { expectedStart, expectedEnd, plannedEnd } = getExpectedTimesFromExtendedEvent(\n {\n timeStart,\n dayOffset,\n delay,\n totalGap,\n isLinkedToLoaded,\n countToEnd,\n duration,\n },\n expectedStartData,\n );\n\n return (\n <>\n <span className='entry-colour' style={{ backgroundColor: colour }} />\n <ExpectedTime expectedTime={expectedStart} plannedTime={timeStart} />\n →\n <ExpectedTime expectedTime={expectedEnd} plannedTime={plannedEnd} />\n </>\n );\n}\n\ninterface ExpectedTimeProps {\n expectedTime: number;\n plannedTime: number;\n}\n\nfunction ExpectedTime({ expectedTime, plannedTime }: ExpectedTimeProps) {\n const timeDisplay = formatTime(expectedTime);\n const expectedState = getOffsetState(expectedTime - plannedTime);\n return <SuperscriptTime className={`entry-times--${expectedState}`} time={timeDisplay} />;\n}\n","import { cx } from '../../../common/utils/styleUtils';\n\nimport { useSchedule } from './ScheduleContext';\nimport ScheduleItem from './ScheduleItem';\n\nimport './Schedule.scss';\n\ninterface ScheduleProps {\n className?: string;\n}\n\nexport default function Schedule({ className }: ScheduleProps) {\n const { events, containerRef } = useSchedule();\n\n if (events?.length < 1) {\n return null;\n }\n\n return (\n <ul className={cx(['schedule', className])} ref={containerRef}>\n {events.map((event) => {\n return (\n <ScheduleItem\n key={event.id}\n timeStart={event.timeStart}\n dayOffset={event.dayOffset}\n delay={event.delay}\n totalGap={event.totalGap}\n isLinkedToLoaded={event.isLinkedToLoaded}\n countToEnd={event.countToEnd}\n duration={event.duration}\n colour={event.colour}\n skip={event.skip}\n title={event.title}\n timeEnd={event.timeEnd}\n cue={event.cue}\n />\n );\n })}\n </ul>\n );\n}\n","import { cx } from '../../../common/utils/styleUtils';\n\nimport { useSchedule } from './ScheduleContext';\n\nimport './Schedule.scss';\n\ninterface ScheduleNavProps {\n className?: string;\n}\n\nexport default function ScheduleNav({ className }: ScheduleNavProps) {\n const { numPages, visiblePage } = useSchedule();\n\n // cap the amount of elements to 11\n if (numPages > 10) {\n return (\n <div className={cx(['schedule-nav', className])}>\n <div className={cx(['schedule-nav__item', visiblePage === 1 && 'schedule-nav__item--selected'])} />\n <div className={cx(['schedule-nav__item', visiblePage === 2 && 'schedule-nav__item--selected'])} />\n <div className={cx(['schedule-nav__item', visiblePage === 3 && 'schedule-nav__item--selected'])} />\n <div className={cx(['schedule-nav__item', visiblePage === 4 && 'schedule-nav__item--selected'])} />\n <div className={cx(['schedule-nav__item', visiblePage === 5 && 'schedule-nav__item--selected'])} />\n <div\n className={cx([\n 'schedule-nav__item',\n 'schedule-nav__item--indeterminate',\n visiblePage > 5 && visiblePage < numPages - 4 && 'schedule-nav__item--selected',\n ])}\n />\n <div className={cx(['schedule-nav__item', visiblePage === numPages - 4 && 'schedule-nav__item--selected'])} />\n <div className={cx(['schedule-nav__item', visiblePage === numPages - 3 && 'schedule-nav__item--selected'])} />\n <div className={cx(['schedule-nav__item', visiblePage === numPages - 2 && 'schedule-nav__item--selected'])} />\n <div className={cx(['schedule-nav__item', visiblePage === numPages - 1 && 'schedule-nav__item--selected'])} />\n <div className={cx(['schedule-nav__item', visiblePage === numPages && 'schedule-nav__item--selected'])} />\n </div>\n );\n }\n\n return (\n <div className={cx(['schedule-nav', className])}>\n {numPages > 1 &&\n [...Array(numPages).keys()].map((i) => (\n <div\n key={i}\n className={cx(['schedule-nav__item', i + 1 === visiblePage && 'schedule-nav__item--selected'])}\n />\n ))}\n </div>\n );\n}\n","import { memo } from 'react';\nimport { MaybeString } from 'ontime-types';\n\nimport Schedule from './Schedule';\nimport { ScheduleProvider } from './ScheduleContext';\nimport ScheduleNav from './ScheduleNav';\n\ninterface ScheduleExportProps {\n selectedId: MaybeString;\n}\n\nexport default memo(ScheduleExport);\nfunction ScheduleExport(props: ScheduleExportProps) {\n const { selectedId } = props;\n return (\n <ScheduleProvider selectedEventId={selectedId}>\n <ScheduleNav className='schedule-nav-container' />\n <Schedule className='schedule-container' />\n </ScheduleProvider>\n );\n}\n","import { use, useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\nimport { CustomFields, OntimeEvent, ProjectData } from 'ontime-types';\n\nimport { getTimeOption } from '../../common/components/view-params-editor/common.options';\nimport { OptionTitle } from '../../common/components/view-params-editor/constants';\nimport { ViewOption } from '../../common/components/view-params-editor/viewParams.types';\nimport {\n makeOptionsFromCustomFields,\n makeProjectDataOptions,\n} from '../../common/components/view-params-editor/viewParams.utils';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport { getScheduleOptions } from '../common/schedule/schedule.options';\n\nexport const getBackstageOptions = (\n timeFormat: string,\n customFields: CustomFields,\n projectData: ProjectData,\n): ViewOption[] => {\n const customFieldOptions = makeOptionsFromCustomFields(customFields, []);\n const secondaryOptions = makeOptionsFromCustomFields(customFields, [\n { value: 'none', label: 'None' },\n { value: 'note', label: 'Note' },\n ]);\n const projectDataOptions = makeProjectDataOptions(projectData, [{ value: 'none', label: 'None' }]);\n\n return [\n { title: OptionTitle.ClockOptions, collapsible: true, options: [getTimeOption(timeFormat)] },\n {\n title: OptionTitle.DataSources,\n collapsible: true,\n options: [\n {\n id: 'secondary-src',\n title: 'Event secondary text',\n description: 'Select the data source for auxiliary text shown in now and next cards',\n type: 'option',\n values: secondaryOptions,\n defaultValue: 'none',\n },\n ],\n },\n getScheduleOptions(customFieldOptions),\n {\n title: OptionTitle.ElementVisibility,\n collapsible: true,\n options: [\n {\n id: 'extra-info',\n title: 'Extra info',\n description: 'Select a project data source to show in the view',\n type: 'option',\n values: projectDataOptions,\n defaultValue: 'none',\n },\n ],\n },\n ];\n};\n\ntype BackstageOptions = {\n secondarySource: keyof OntimeEvent | null;\n extraInfo: string | null;\n};\n\n/**\n * Utility extract the view options from URL Params\n * the names and fallback are manually matched with timerOptions\n */\nfunction getOptionsFromParams(searchParams: URLSearchParams, defaultValues?: URLSearchParams): BackstageOptions {\n // Helper to get value from either source, prioritizing defaultValues\n const getValue = (key: string) => defaultValues?.get(key) ?? searchParams.get(key);\n\n return {\n secondarySource: getValue('secondary-src') as keyof OntimeEvent | null,\n extraInfo: getValue('extra-info'),\n };\n}\n\n/**\n * Hook exposes the backstage view options\n */\nexport function useBackstageOptions(): BackstageOptions {\n const [searchParams] = useSearchParams();\n const maybePreset = use(PresetContext);\n\n const options = useMemo(() => {\n const defaultValues = maybePreset ? new URLSearchParams(maybePreset.search) : undefined;\n return getOptionsFromParams(searchParams, defaultValues);\n }, [maybePreset, searchParams]);\n\n return options;\n}\n","import { MaybeNumber, OntimeEvent, Playback, TimerPhase } from 'ontime-types';\n\nimport { enDash } from '../../common/utils/styleUtils';\nimport { getPropertyValue } from '../../features/viewers/common/viewUtils';\n\n/**\n * Whether the current time is in overtime\n */\nexport function isOvertime(current: MaybeNumber): boolean {\n return (current ?? 0) < 0;\n}\n\n/**\n * Whether the progress bar should be shown\n */\nexport function getShowProgressBar(playback: Playback): boolean {\n return playback !== Playback.Stop;\n}\n\n/**\n * Whether the playback is pending start (ie: Roll mode waiting to start)\n */\nexport function getIsPendingStart(playback: Playback, phase: TimerPhase): boolean {\n return playback === Playback.Roll && phase === TimerPhase.Pending;\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) {\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 // if we are loaded, we show the upcoming event as next\n const nowMain = getPropertyValue(eventNow, mainSource ?? 'title') || enDash;\n const nowSecondary = getPropertyValue(eventNow, secondarySource);\n const nextMain = getPropertyValue(eventNext, mainSource ?? 'title') || enDash;\n const nextSecondary = getPropertyValue(eventNext, secondarySource);\n\n return {\n showNow: eventNow !== null,\n nowMain,\n nowSecondary,\n showNext: eventNext !== null,\n nextMain,\n nextSecondary,\n };\n}\n","import { CustomFields, OntimeEntry, ProjectData, Settings } from 'ontime-types';\n\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport { useFlatRundown } from '../../common/hooks-query/useRundown';\nimport useSettings from '../../common/hooks-query/useSettings';\nimport { useViewOptionsStore } from '../../common/stores/viewOptions';\nimport { aggregateQueryStatus, ViewData } from '../utils/viewLoader.utils';\n\nexport interface BackstageData {\n events: OntimeEntry[];\n customFields: CustomFields;\n projectData: ProjectData;\n isMirrored: boolean;\n settings: Settings;\n}\n\nexport function useBackstageData(): ViewData<BackstageData> {\n // persisted app state\n const isMirrored = useViewOptionsStore((state) => state.mirror);\n\n // HTTP API data\n const { data: rundownData, status: rundownStatus } = useFlatRundown();\n const { data: projectData, status: projectDataStatus } = useProjectData();\n const { data: settings, status: settingsStatus } = useSettings();\n const { data: customFields, status: customFieldsStatus } = useCustomFields();\n\n return {\n data: {\n events: rundownData,\n customFields,\n projectData,\n isMirrored,\n settings,\n },\n status: aggregateQueryStatus([rundownStatus, projectDataStatus, settingsStatus, customFieldsStatus]),\n };\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport QRCode from 'react-qr-code';\nimport { useViewportSize } from '@mantine/hooks';\nimport { OntimeView, ProjectData } from 'ontime-types';\nimport { millisToString, removeLeadingZero } from 'ontime-utils';\n\nimport ProgressBar from '../../common/components/progress-bar/ProgressBar';\nimport Empty from '../../common/components/state/Empty';\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport TitleCard from '../../common/components/title-card/TitleCard';\nimport ViewLogo from '../../common/components/view-logo/ViewLogo';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport { useBackstageSocket, useClock } from '../../common/hooks/useSocket';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { cx, timerPlaceholderMin } from '../../common/utils/styleUtils';\nimport { formatTime, getDefaultFormat } from '../../common/utils/time';\nimport SuperscriptTime from '../../features/viewers/common/superscript-time/SuperscriptTime';\nimport { useTranslation } from '../../translation/TranslationProvider';\nimport Loader from '../common/loader/Loader';\nimport ScheduleExport from '../common/schedule/ScheduleExport';\n\nimport { getBackstageOptions, useBackstageOptions } from './backstage.options';\nimport { getCardData, getIsPendingStart, getShowProgressBar, isOvertime } from './backstage.utils';\nimport { BackstageData, useBackstageData } from './useBackstageData';\n\nimport './Backstage.scss';\n\nexport default function BackstageLoader() {\n const { data, status } = useBackstageData();\n\n useWindowTitle('Backstage');\n\n if (status === 'pending') {\n return <Loader />;\n }\n\n if (status === 'error') {\n return <EmptyPage text='There was an error fetching data, please refresh the page.' />;\n }\n\n return <Backstage {...data} />;\n}\n\nfunction Backstage({ events, customFields, projectData, isMirrored, settings }: BackstageData) {\n const { getLocalizedString } = useTranslation();\n const { secondarySource, extraInfo } = useBackstageOptions();\n const { eventNext, eventNow, rundown, selectedEventId, time } = useBackstageSocket();\n const [blinkClass, setBlinkClass] = useState(false);\n const { height: screenHeight } = useViewportSize();\n\n // blink on change\n useEffect(() => {\n setBlinkClass(false);\n\n const timer = setTimeout(() => {\n setBlinkClass(true);\n }, 10);\n\n return () => clearTimeout(timer);\n }, [selectedEventId]);\n\n // gather card data\n const hasEvents = events.length > 0;\n const { showNow, nowMain, nowSecondary, showNext, nextMain, nextSecondary } = getCardData(\n eventNow,\n eventNext,\n 'title',\n secondarySource,\n time.playback,\n );\n\n // gather timer data\n const isPendingStart = getIsPendingStart(time.playback, time.phase);\n const startedAt = isPendingStart ? formatTime(time.secondaryTimer) : formatTime(time.startedAt);\n\n const scheduledStart = (() => {\n if (showNow) return undefined;\n if (!hasEvents) return undefined;\n return formatTime(rundown.plannedStart, { format12: 'hh:mm a', format24: 'HH:mm' });\n })();\n\n const scheduledEnd = (() => {\n if (showNow) return undefined;\n if (!hasEvents) return undefined;\n return formatTime(rundown.plannedEnd, { format12: 'hh:mm a', format24: 'HH:mm' });\n })();\n\n let displayTimer = millisToString(time.current, { fallback: timerPlaceholderMin });\n displayTimer = removeLeadingZero(displayTimer);\n\n // gather presentation styles\n const qrSize = Math.max(window.innerWidth / 15, 72);\n const showProgress = getShowProgressBar(time.playback);\n const showSchedule = hasEvents && screenHeight > 420; // in vertical screens we may not have space\n const showPending = scheduledStart && scheduledEnd;\n\n // gather option data\n const defaultFormat = getDefaultFormat(settings?.timeFormat);\n const backstageOptions = useMemo(\n () => getBackstageOptions(defaultFormat, customFields, projectData),\n [defaultFormat, customFields, projectData],\n );\n\n return (\n <div className={`backstage ${isMirrored ? 'mirror' : ''}`} data-testid='backstage-view'>\n <ViewParamsEditor target={OntimeView.Backstage} viewOptions={backstageOptions} />\n <div className='project-header'>\n {projectData?.logo && <ViewLogo name={projectData.logo} className='logo' />}\n <div className='title'>{projectData.title}</div>\n <BackstageClock />\n </div>\n\n {showProgress && <ProgressBar className='progress-container' current={time.current} duration={time.duration} />}\n\n {!hasEvents && <Empty text={getLocalizedString('common.no_data')} className='empty-container' />}\n\n <div className='card-container'>\n {showNow && (\n <div className={cx(['event', 'now', blinkClass && 'blink'])}>\n <TitleCard title={nowMain} secondary={nowSecondary} />\n <div className='timer-group'>\n <div className='time-entry'>\n <div className={cx(['time-entry__label', isPendingStart && 'time-entry--pending'])}>\n {isPendingStart ? getLocalizedString('countdown.waiting') : getLocalizedString('common.started_at')}\n </div>\n <SuperscriptTime time={startedAt} className='time-entry__value' />\n </div>\n <div className='timer-gap' />\n <div className='time-entry'>\n <div className='time-entry__label'>{getLocalizedString('common.expected_finish')}</div>\n {isOvertime(time.current) ? (\n <div className='time-entry__value'>{getLocalizedString('countdown.overtime')}</div>\n ) : (\n <SuperscriptTime time={formatTime(time.expectedFinish)} className='time-entry__value' />\n )}\n </div>\n <div className='timer-gap' />\n <div className='time-entry'>\n <div className='time-entry__label'>{getLocalizedString('common.stage_timer')}</div>\n <div className='time-entry__value'>{displayTimer}</div>\n </div>\n </div>\n </div>\n )}\n\n {showPending && (\n <div className='event'>\n <div className='title-card__placeholder'>{getLocalizedString('countdown.waiting')}</div>\n <div className='timer-group'>\n <div className='time-entry'>\n <div className={cx(['time-entry__label', isPendingStart && 'time-entry--pending'])}>\n {getLocalizedString('common.scheduled_start')}\n </div>\n <SuperscriptTime time={scheduledStart} className='time-entry__value' />\n </div>\n <div className='timer-gap' />\n <div className='time-entry'>\n <div className='time-entry__label'>{getLocalizedString('common.scheduled_end')}</div>\n <SuperscriptTime time={scheduledEnd} className='time-entry__value' />\n </div>\n </div>\n </div>\n )}\n\n {showNext && hasEvents && (\n <TitleCard className='event' label='next' title={nextMain} secondary={nextSecondary} />\n )}\n </div>\n\n {showSchedule && <ScheduleExport selectedId={selectedEventId} />}\n\n <div className={cx(['info', !showSchedule && 'info--stretch'])}>\n {extraInfo && <ExtraInfo projectData={projectData} size={qrSize} source={extraInfo} />}\n <div className='info-card'>\n {projectData.url && <QRCode value={projectData.url} size={qrSize} level='L' className='info-card__qr' />}\n {projectData.info && <div className='info-card__message'>{projectData.info}</div>}\n </div>\n </div>\n </div>\n );\n}\n\ninterface ExtraInfoProps {\n projectData: ProjectData;\n size: number;\n source: string;\n}\nfunction ExtraInfo({ projectData, size, source }: ExtraInfoProps) {\n const info = projectData.custom.find((entry, index) => {\n const label = `${index}-${entry.title}`;\n return label === source;\n });\n\n if (!info) {\n return null;\n }\n\n return (\n <div className='info-card'>\n {info.url && (\n <img\n className='info-card__img'\n width={size}\n src={info.url}\n onError={(event) => (event.currentTarget.style.display = 'none')}\n />\n )}\n <div className='info__column'>\n {info.title && <div className='info-card__label'>{info.title}</div>}\n {info.value && <div className='info-card__message'>{info.value}</div>}\n </div>\n </div>\n );\n}\n\nfunction BackstageClock() {\n const { getLocalizedString } = useTranslation();\n const { clock } = useClock();\n\n // gather timer data\n const formattedClock = formatTime(clock);\n\n return (\n <div className='clock-container'>\n <div className='label'>{getLocalizedString('common.time_now')}</div>\n <SuperscriptTime time={formattedClock} className='time' />\n </div>\n );\n}\n"],"names":["ProgressBar","props","current","duration","className","progress","getProgress","jsx","getScheduleOptions","customFieldOptions","OptionTitle","getScheduleOptionsFromParams","searchParams","isStringBoolean","useScheduleOptions","useSearchParams","useMemo","ScheduleContext","createContext","ScheduleProvider","children","selectedEventId","cycleInterval","stopCycle","filter","events","usePartialRundown","entry","customKey","isOntimeEvent","firstIndex","setFirstIndex","useState","numPages","setNumPages","visiblePage","setVisiblePage","lastIndex","useRef","paginator","containerRef","useLayoutEffect","containerHeight","currentPageHeight","currentPage","lastVisibleIndex","isShowingElements","i","currentElementHeight","isNextPage","showElement","element","yPosition","hideElement","useEffect","interval","selectedEventIndex","event","viewEvents","useSchedule","context","use","formatOptions","ScheduleItem","timeStart","dayOffset","delay","totalGap","isLinkedToLoaded","countToEnd","colour","skip","title","timeEnd","cue","showExpected","jsxs","cx","ExpectedScheduleItem","DelayedScheduleItem","PlannedScheduleItem","start","formatTime","end","Fragment","SuperscriptTime","delayedStart","delayedEnd","expectedStartData","useExpectedStartData","expectedStart","expectedEnd","plannedEnd","getExpectedTimesFromExtendedEvent","ExpectedTime","expectedTime","plannedTime","timeDisplay","expectedState","getOffsetState","Schedule","ScheduleNav","memo","ScheduleExport","selectedId","getBackstageOptions","timeFormat","customFields","projectData","makeOptionsFromCustomFields","secondaryOptions","projectDataOptions","makeProjectDataOptions","getTimeOption","getOptionsFromParams","defaultValues","getValue","key","useBackstageOptions","maybePreset","PresetContext","isOvertime","getShowProgressBar","playback","Playback","getIsPendingStart","phase","TimerPhase","getCardData","eventNow","eventNext","mainSource","secondarySource","nowMain","getPropertyValue","enDash","nowSecondary","nextMain","nextSecondary","useBackstageData","isMirrored","useViewOptionsStore","state","rundownData","rundownStatus","useFlatRundown","projectDataStatus","useProjectData","settings","settingsStatus","useSettings","customFieldsStatus","useCustomFields","aggregateQueryStatus","BackstageLoader","data","status","useWindowTitle","Loader","EmptyPage","Backstage","getLocalizedString","useTranslation","extraInfo","rundown","time","useBackstageSocket","blinkClass","setBlinkClass","screenHeight","useViewportSize","timer","hasEvents","showNow","showNext","isPendingStart","startedAt","scheduledStart","scheduledEnd","displayTimer","millisToString","timerPlaceholderMin","removeLeadingZero","qrSize","showProgress","showSchedule","showPending","defaultFormat","getDefaultFormat","backstageOptions","ViewParamsEditor","OntimeView","ViewLogo","BackstageClock","Empty","TitleCard","ExtraInfo","QRCode","size","source","info","index","clock","useClock","formattedClock"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{l as tt,h as g,j as t,v as et,a8 as st,t as nt,a9 as ot,aa as U,T as z}from"./vendor-Cnciq4o_.js";import{P as at,b as E,j as B,k as rt,f as O,g as P,M as V,l as it,F as ct,m as lt,i as D,B as w,n as dt,o as ut,p as $,q as W,r as mt,t as pt,u as ft,d as xt,L as ht,h as gt,O as jt,s as St}from"./index-DdPXqLQ6.js";import{u as yt,i as wt,a as bt}from"./useRundown-uuXixjnX.js";import{E as L}from"./Empty-DiBXyIA8.js";import{E as vt}from"./EmptyPage-X6EO1Y5W.js";import{V as _t}from"./ViewLogo-CdsW41HC.js";import{m as Ct,O as F,i as Nt,g as G,V as kt}from"./ViewParamsEditor-YoYxps2g.js";import{u as Dt}from"./useWindowTitle-BQ1kqXfk.js";import{S as T,a as Ft}from"./viewLoader.utils-CYlNKkLE.js";import{g as Et}from"./common.options-p5f_zJ2-.js";import{u as Ot}from"./useFollowComponent-C42-1XCu.js";import{u as q}from"./useReport-DPqY9XXp.js";import{g as H}from"./offset-BnfjZ6JI.js";import{F as Tt}from"./FollowButton-Cr-HA2-6.js";import{u as At}from"./useCustomFields-DY13Ir96.js";import{u as Lt}from"./useProjectData-BF2F6qPB.js";import"./Select-CUjlJirY.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new e.Error().stack;s&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[s]="9843fab8-b455-4143-8561-733fe5da032d",e._sentryDebugIdIdentifier="sentry-dbid-9843fab8-b455-4143-8561-733fe5da032d")}catch{}})();const Pt=(e,s,o)=>{const a=Ct(s,[{value:"none",label:"None"},{value:"note",label:"Note"}]);return[{title:F.ClockOptions,collapsible:!0,options:[Et(e)]},{title:F.DataSources,collapsible:!0,options:[{id:"secondary-src",title:"Event secondary text",description:"Select the data source for auxiliary text shown in the card",type:"option",values:a,defaultValue:"none"}]},{title:F.BehaviourOptions,collapsible:!0,options:[{id:"showExpected",title:"Show expected time",description:"Whether the times shown should account for the runtime offset.",type:"boolean",defaultValue:!1}]},{title:F.Hidden,options:[{id:"sub",title:"Event subscription",description:"The events to follow",values:o,type:"persist"}]}]};function It(e,s){const o=n=>(s==null?void 0:s.get(n))??e.get(n);return{subscriptions:(n=>s!=null&&s.has(n)?s.getAll(n):e.getAll(n))("sub"),secondarySource:o("secondary-src"),showExpected:Nt(o("showExpected"))}}function I(){const[e]=tt(),s=g.use(at);return g.useMemo(()=>{const a=s?new URLSearchParams(s.search):void 0;return It(e,a)},[s,e])}const N="h:mm a",k="HH:mm";function Rt(e,s,o){return e===s&&o!==E.Armed}const y={future:"countdown.to_start",due:"timeline.due",live:"countdown.running",pending:"countdown.waiting",loaded:"countdown.loaded",done:"countdown.ended"};function K(e){const{playback:s,current:o,clock:a}=rt(),{getLocalizedString:n}=O(),r=c=>c<=0?n("countdown.overtime").toUpperCase():it(c,c>V*2).replace("m",`${n("common.minutes")} `).replace("s",n("common.seconds"));return e.isLoaded?s===E.Armed?{status:"loaded",statusDisplay:n(y.loaded),timeDisplay:r(e.duration)}:{status:"live",statusDisplay:n(y.live),timeDisplay:r(o??0)}:s===E.Stop||s===E.Armed?{status:"pending",statusDisplay:n(y.pending),timeDisplay:" "}:e.isPast?{status:"done",statusDisplay:n(y.done),timeDisplay:P(e.endedAt,{format12:N,format24:k})}:e.expectedStart-a<=0?{status:"due",statusDisplay:n(y.future),timeDisplay:n(y.due).toUpperCase()}:{status:"future",statusDisplay:n(y.future),timeDisplay:r(e.expectedStart-a)}}function Mt(e,s){const o=new URL(e),a=new URLSearchParams;for(const[n,r]of o.searchParams.entries())n!=="sub"&&a.append(n,r);return s.forEach(n=>{a.append("sub",n)}),o.search=a.toString(),o}function zt(e,s){return s.filter(o=>e.includes(o.id))}function Ht(e,s){return Math.abs(e-s)>V}function Ut(e,s,o,a,n,r,c){const{totalGap:m,isLinkedToLoaded:d}=e,i=B(e,{currentDay:s,totalGap:m,actualStart:o,plannedStart:a,isLinkedToLoaded:d,offset:n,mode:r}),{endedAt:l}=c[e.id]??{endedAt:null};return{...e,expectedStart:i,endedAt:l}}function _(e){const{value:s,preferredFormat12:o=ct,preferredFormat24:a=lt,className:n}=e,r=P(s,{format12:o,format24:a});return t.jsx(T,{className:n,time:r})}function Bt({events:e,subscriptions:s,disableEdit:o}){const[a,n]=g.useState(s),r=et(),c=i=>{n(l=>l.includes(i)?l.filter(p=>p!==i):[...l,i])},m=()=>{const i=a.filter(p=>e.some(f=>f.id===p)),l=Mt(window.location.href,i);o(),n([]),r(l.search.toString())},d=new Set(a);return t.jsxs("div",{className:"list-container",children:[e.map((i,l)=>{const p=i.title||"{no title}",f=d.has(i.id);return t.jsxs("div",{role:"button",tabIndex:0,onClick:()=>c(i.id),onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(c(i.id),x.stopPropagation())},className:D(["sub",f&&"sub--selected"]),children:[t.jsx("div",{className:"sub__binder",style:{"--user-color":(i==null?void 0:i.colour)??""}}),t.jsxs("div",{className:"sub__schedule",children:[t.jsx(_,{value:i.timeStart,preferredFormat12:"h:mm",preferredFormat24:"HH:mm"}),"→",t.jsx(_,{value:i.timeEnd,preferredFormat12:"h:mm",preferredFormat24:"HH:mm"})]}),t.jsx("div",{className:"sub__label",children:f?"Click to remove":"Click to add"}),t.jsx("div",{className:"sub__title",children:p})]},l)}),t.jsxs("div",{className:"fab-container",children:[t.jsxs(w,{variant:"subtle",size:"xlarge",onClick:o,children:[t.jsx(st,{})," Go back"]}),t.jsxs(w,{variant:"subtle",size:"xlarge",onClick:()=>n([]),disabled:a.length===0,children:[t.jsx(nt,{})," Clear"]}),t.jsxs(w,{variant:"primary",size:"xlarge",disabled:e.length<1,onClick:m,children:[t.jsx(ot,{})," Save"]})]})]})}function Vt({subscribedEvents:e,goToEditMode:s}){const{secondarySource:o,showExpected:a}=I(),{playback:n}=dt(),{selectedEventId:r}=ut(),c=$(!0),{data:m}=q(),{offset:d,currentDay:i,actualStart:l,plannedStart:p,mode:f}=W(),x=g.useRef(null),[j,b]=g.useState(!1),S=g.useRef(null),h=g.useRef(null),J=Ot({followRef:S,scrollRef:h,doFollow:!j,topOffset:0,followTrigger:r});g.useEffect(()=>{var u;r||j||(u=h.current)==null||u.scrollTo(0,0)},[r,j,h]);const X=()=>{r&&J(),b(!1)},Y=pt(()=>{if(S!=null&&S.current&&(h!=null&&h.current)){const u=S.current.getBoundingClientRect(),C=h.current.getBoundingClientRect();if(u&&C){const v=u.top-C.top,A=v<-8||v>50;b(A)}}},1e3),R=()=>{x.current&&clearTimeout(x.current),Y()};return t.jsxs("div",{className:"list-container",onWheel:R,onTouchMove:R,ref:h,children:[e.map(u=>{const C=G(u,o),v=Rt(u.id,r,n),A=!v&&u.id===r,M=Ut(u,i,l,p,d,f,m),Z=u.title.length?u.title:" ";return t.jsxs("div",{ref:v?S:void 0,className:D(["sub",v&&"sub--live",A&&"sub--armed"]),"data-testid":u.cue,children:[t.jsx("div",{className:"sub__binder",style:{"--user-color":u.colour}}),t.jsx(Q,{event:M,showExpected:a}),t.jsx($t,{event:M}),t.jsx("div",{className:D(["sub__title",!u.title&&"subdued"]),children:Z}),C&&t.jsx("div",{className:"sub__secondary",children:C})]},u.id)}),t.jsx("div",{className:D(["fab-container",!c&&"fab-container--hidden"]),children:t.jsxs(w,{variant:"primary",size:"xlarge",onClick:s,children:[t.jsx(U,{})," Edit"]})}),t.jsx(Tt,{isVisible:j,onClickHandler:X})]})}function Q(e){const{event:s,showExpected:o}=e,{timeStart:a,duration:n,delay:r,expectedStart:c,countToEnd:m}=s,d=a+r+s.dayOffset*mt,i=o&&Ht(d,c),l=i?"sub__schedule--strike":r!==0?"sub__schedule--delayed":"",p=`sub__schedule--${H(c-d)}`,f=d+n+r,x=m?Math.max(c+n,f):c+n,j=`sub__schedule--${H(x-f)}`;return t.jsxs("div",{className:"sub__schedule",children:[t.jsx(_,{value:d,preferredFormat12:N,preferredFormat24:k,className:l}),!i&&t.jsxs(t.Fragment,{children:["→",t.jsx(_,{value:f,preferredFormat12:N,preferredFormat24:k,className:l})]}),i&&t.jsxs(t.Fragment,{children:[t.jsx(_,{value:c,className:p,preferredFormat12:N,preferredFormat24:k}),"→",t.jsx(_,{value:x,className:j,preferredFormat12:N,preferredFormat24:k})]})]})}function $t({event:e}){const{status:s,statusDisplay:o,timeDisplay:a}=K(e);return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"sub__status",children:o}),s==="done"?t.jsx(T,{className:"sub__timer",time:a}):t.jsx("div",{className:"sub__timer",children:a})]})}function Wt({subscribedEvent:e,goToEditMode:s}){const{secondarySource:o,showExpected:a}=I(),n=$(!0),{data:r}=q(),{offset:c,currentDay:m,actualStart:d,plannedStart:i,mode:l}=W(),{totalGap:p,isLinkedToLoaded:f}=e,x=B(e,{currentDay:m,totalGap:p,actualStart:d,plannedStart:i,isLinkedToLoaded:f,offset:c,mode:l}),{endedAt:j}=r[e.id]??{endedAt:null},b={...e,expectedStart:x,endedAt:j},S=e.title.length?e.title:" ",h=G(e,o);return t.jsxs("div",{className:"single-container","data-testid":"countdown-event",children:[t.jsx(Gt,{event:b}),t.jsxs("div",{className:"event__title",style:{borderColor:b.colour},children:[t.jsx(Q,{event:b,showExpected:a}),S,h&&t.jsx("div",{className:"secondary",children:h})]}),t.jsx("div",{className:D(["fab-container",!n&&"fab-container--hidden"]),children:t.jsxs(w,{variant:"primary",size:"xlarge",onClick:s,children:[t.jsx(U,{})," Edit"]})})]})}function Gt({event:e}){const{status:s,statusDisplay:o,timeDisplay:a}=K(e);return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"event__status",children:o}),s==="done"?t.jsx(T,{className:"event__timer",time:a}):t.jsx("div",{className:"event__timer",children:a})]})}function qt(){const e=ft(i=>i.mirror),{data:s,status:o}=yt(),{data:a,status:n}=Lt(),{data:r,status:c}=xt(),{data:m,status:d}=At();return{data:{customFields:m,rundownData:s,projectData:a,isMirrored:e,settings:r},status:Ft([o,n,c,d])}}function xe(){const{data:e,status:s}=qt();return Dt("Countdown"),s==="pending"?t.jsx(ht,{}):s==="error"?t.jsx(vt,{text:"There was an error fetching data, please refresh the page."}):t.jsx(Kt,{...e})}function Kt({customFields:e,rundownData:s,projectData:o,isMirrored:a,settings:n}){const{getLocalizedString:r}=O(),{subscriptions:c}=I(),[m,d]=g.useState(!1),i=s.filter(x=>wt(x)&&bt(x)),l=i.length>0,p=gt(n==null?void 0:n.timeFormat),f=g.useMemo(()=>Pt(p,e,c),[p,e,c]);return t.jsxs("div",{className:`countdown ${a?"mirror":""}`,"data-testid":"countdown-view",children:[t.jsx(kt,{target:jt.Countdown,viewOptions:f}),t.jsxs("div",{className:"project-header",children:[(o==null?void 0:o.logo)&&t.jsx(_t,{name:o.logo,className:"logo"}),t.jsx("div",{className:"title",children:o.title}),t.jsx(Jt,{})]}),!l&&t.jsx(L,{text:r("common.no_data"),className:"empty-container"}),l&&m&&t.jsx(Bt,{events:i,subscriptions:c,disableEdit:()=>d(!1)}),l&&!m&&t.jsx(Qt,{playableEvents:i,subscriptions:c,goToEditMode:()=>d(!0)})]})}function Qt({playableEvents:e,subscriptions:s,goToEditMode:o}){const{getLocalizedString:a}=O();if(s.length===0)return t.jsxs("div",{className:"empty-container",children:[t.jsx(L,{text:a("countdown.select_event"),className:"empty-container"}),t.jsxs(w,{variant:"primary",size:"xlarge",onClick:o,children:[t.jsx(z,{})," Add"]})]});const n=zt(s,e);if(n.length===0)return t.jsxs("div",{className:"empty-container",children:[t.jsx(L,{text:a("countdown.select_event"),className:"empty-container"}),t.jsxs(w,{variant:"primary",size:"xlarge",onClick:o,children:[t.jsx(z,{})," Add"]})]});if(n.length===1){const r=n.at(0);return r?t.jsx(Wt,{subscribedEvent:r,goToEditMode:o}):null}return t.jsx(Vt,{subscribedEvents:n,goToEditMode:o})}function Jt(){const{getLocalizedString:e}=O(),{clock:s}=St(),o=P(s);return t.jsxs("div",{className:"clock-container",children:[t.jsx("div",{className:"label",children:e("common.time_now")}),t.jsx(T,{time:o,className:"time"})]})}export{xe as default};
|
|
2
|
-
//# sourceMappingURL=Countdown-BaaR4j9x.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{h as w,ad as I,j as e}from"./vendor-Cnciq4o_.js";import{f as v,bO as c,X as S,a7 as u,B as f,_ as T,ac as _,ad as O,ae as C,af as D,ag as B}from"./index-DdPXqLQ6.js";import{I as M}from"./useWindowTitle-BQ1kqXfk.js";import{M as F}from"./DropdownMenu-Bn0VHzKx.js";import"./useProjectData-BF2F6qPB.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new s.Error().stack;a&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[a]="f2f0eef0-7a0f-4673-a583-92f952688a87",s._sentryDebugIdIdentifier="sentry-dbid-f2f0eef0-7a0f-4673-a583-92f952688a87")}catch{}})();function K({isOpen:s,onClose:a}){const{userTranslation:i,postUserTranslation:m}=v(),h=w.useMemo(()=>{const t={};return Object.keys(c).forEach(r=>{t[l(r)]=i[r]||""}),t},[i]),{handleSubmit:p,register:g,reset:b,formState:{isSubmitting:d,isDirty:x,errors:n,isValid:j},setError:y}=I({defaultValues:h,resetOptions:{keepDirtyValues:!0},mode:"onChange"}),E=async t=>{try{const r={};Object.keys(t).forEach(o=>{r[L(o)]=t[o]}),await m(r),b(t)}catch(r){y("root",{message:B(r)})}};return e.jsx(F,{title:"Edit custom translations",isOpen:s,onClose:a,showCloseButton:!0,showBackdrop:!0,bodyElements:e.jsxs(T,{as:"form",onSubmit:p(E),id:"custom-translations-form",children:[e.jsxs(M,{children:["Provide custom translations for the public views of Ontime. ",e.jsx("br",{}),'You will need to activate this in the settings by selecting "Custom" as the views language.']}),e.jsx(_,{children:Object.entries(c).map(([t,r])=>{var o;return e.jsxs(O,{children:[e.jsx(C,{title:r,description:"",error:(o=n[l(t)])==null?void 0:o.message}),e.jsx(D,{maxLength:150,...g(l(t),{required:"This field is required"}),placeholder:r})]},t)})})]}),footerElements:e.jsxs("div",{children:[(n==null?void 0:n.root)&&e.jsx(S,{children:n.root.message}),e.jsx(u,{align:"apart",children:e.jsxs(u,{children:[e.jsx(f,{size:"large",onClick:a,children:"Cancel"}),e.jsx(f,{variant:"primary",size:"large",type:"submit",form:"custom-translations-form",disabled:d||!x||!j,loading:d,children:"Save changes"})]})})]})})}function l(s){return s.replace(".","_")}function L(s){return s.replace("_",".")}export{K as default};
|
|
2
|
-
//# sourceMappingURL=CustomTranslationModal-CcNNjbmZ.js.map
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{e as i,k as w,j as s,br as N,h as k,D,p as $,q as v,s as C,t as I,bs as g,bt as b,bu as h,bv as m,bw as y,bx as x,by as j}from"./vendor-Cnciq4o_.js";import{aw as E,aE as S,bx as M,i as P,ai as A}from"./index-DdPXqLQ6.js";import{s as u,d as T}from"./useProjectData-BF2F6qPB.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]="b6fbec3d-855e-4e99-9586-84fa2303b62e",e._sentryDebugIdIdentifier="sentry-dbid-b6fbec3d-855e-4e99-9586-84fa2303b62e")}catch{}})();const c=`${E}/automations`;async function F(){return(await i.get(c)).data}async function V(e){return(await i.post(c,e)).data}async function ee(e){return(await i.post(`${c}/trigger`,e)).data}async function se(e,t){return(await i.put(`${c}/trigger/${e}`,t)).data}function te(e){return i.delete(`${c}/trigger/${e}`)}async function ae(e){return(await i.post(`${c}/automation`,e)).data}async function ne(e,t){return(await i.put(`${c}/automation/${e}`,t)).data}function oe(e){return i.delete(`${c}/automation/${e}`)}function re(e){return i.post(`${c}/test`,e)}const O={enabledAutomations:!1,enabledOscIn:!1,oscPortIn:8888,triggers:[],automations:{}};function ie(){const{data:e,status:t,isFetching:n,isError:o,refetch:a}=w({queryKey:M,queryFn:F,placeholderData:(r,p)=>r,retry:5,retryDelay:r=>r*2500,refetchInterval:S,networkMode:"always"});return{data:e??O,status:t,isFetching:n,isError:o,refetch:a}}const B="_tag_1hjkh_17",q={tag:B};function ce({children:e}){return s.jsx("span",{className:q.tag,children:e})}function R({color:e,isSelected:t,onClick:n}){const o=r=>{n==null||n(e),r.preventDefault(),r.stopPropagation()},a=P([u.swatch,t&&u.selected,n&&u.selectable]);return e?s.jsx("div",{className:a,style:{backgroundColor:`${e}`},onClick:o}):s.jsx("div",{className:a,onClick:o,children:s.jsx(N,{})})}const f=["","#FFCC78","#FFAB33","#77C785","#339E4E","#779BE7","#3E75E8","#FF7878","#ED3333","#A790F5","#8064E1","#9d9d9d","#ececec"];function le(e){const{value:t,name:n,handleChange:o}=e,a=k.useCallback(r=>{r!==t&&o(n,r)},[o,n,t]);return s.jsxs("div",{className:u.list,children:[f.map(r=>s.jsx(R,{color:r,onClick:a,isSelected:t===r},r)),s.jsx(T,{color:t,onChange:a,isSelected:!f.includes(t)})]})}const Q="_modal_1pr7r_17",U="_backdrop_1pr7r_34",K="_title_1pr7r_44",z="_body_1pr7r_53",G="_footer_1pr7r_61",d={modal:Q,backdrop:U,title:K,body:z,footer:G};function de({isOpen:e,title:t,showCloseButton:n,showBackdrop:o,bodyElements:a,footerElements:r,onClose:p}){return s.jsx(D,{open:e,onOpenChange:_=>{_||p()},dismissible:!1,children:s.jsxs($,{children:[o&&s.jsx(v,{className:d.backdrop}),s.jsxs(C,{className:d.modal,children:[s.jsxs("div",{className:d.title,children:[t,n&&s.jsx(A,{variant:"subtle-white",onClick:p,children:s.jsx(I,{})})]}),s.jsx("div",{className:d.body,children:a}),s.jsx("div",{className:d.footer,children:r})]})]})})}const H="_positioner_1l5gl_17",J="_popup_1l5gl_21",L="_item_1l5gl_39",W="_separator_1l5gl_69",l={positioner:H,popup:J,item:L,separator:W};function ue({items:e,children:t,...n}){return s.jsxs(g,{children:[s.jsx(b,{...n,children:t}),s.jsx(h,{children:s.jsx(m,{className:l.positioner,align:"start",sideOffset:8,children:s.jsx(y,{className:l.popup,children:e.map((o,a)=>o.type==="divider"?s.jsx(x,{className:l.separator},a):s.jsxs(j,{className:l.item,onClick:o.onClick,disabled:o.disabled,children:[o.icon&&s.jsx(o.icon,{}),o.label]},a))})})})]})}function pe({items:e,isOpen:t,position:n,onClose:o}){return s.jsxs(g,{open:t,onOpenChange:a=>{a||o()},children:[s.jsx(b,{style:{position:"fixed",left:n.x,top:n.y},"aria-hidden":!0}),s.jsx(h,{children:s.jsx(m,{className:l.positioner,align:"start",sideOffset:8,alignOffset:8,children:s.jsx(y,{className:l.popup,children:e.map((a,r)=>a.type==="divider"?s.jsx(x,{className:l.separator},r):s.jsxs(j,{className:l.item,onClick:a.onClick,disabled:a.disabled,children:[a.icon&&s.jsx(a.icon,{}),a.label]},r))})})})]})}export{ue as D,de as M,pe as P,le as S,ce as T,ne as a,ae as b,se as c,oe as d,V as e,ee as f,te as g,R as h,re as t,ie as u};
|
|
2
|
-
//# sourceMappingURL=DropdownMenu-Bn0VHzKx.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenu-Bn0VHzKx.js","sources":["../../src/common/api/automation.ts","../../src/common/models/AutomationSettings.ts","../../src/common/hooks-query/useAutomationSettings.ts","../../src/common/components/tag/Tag.tsx","../../src/common/components/input/colour-input/Swatch.tsx","../../src/common/components/input/colour-input/SwatchSelect.tsx","../../src/common/components/modal/Modal.tsx","../../src/common/components/dropdown-menu/DropdownMenu.tsx"],"sourcesContent":["import axios from 'axios';\nimport type {\n Automation,\n AutomationDTO,\n AutomationOutput,\n AutomationSettings,\n Trigger,\n TriggerDTO,\n} from 'ontime-types';\n\nimport { apiEntryUrl } from './constants';\n\nconst automationsPath = `${apiEntryUrl}/automations`;\n\n/**\n * HTTP request to get the automations settings\n */\nexport async function getAutomationSettings(): Promise<AutomationSettings> {\n const res = await axios.get(automationsPath);\n return res.data;\n}\n\n/**\n * HTTP request to edit the automations settings\n */\nexport async function editAutomationSettings(\n automationSettings: Partial<AutomationSettings>,\n): Promise<AutomationSettings> {\n const res = await axios.post(automationsPath, automationSettings);\n return res.data;\n}\n\n/**\n * HTTP request to create a new automation trigger\n */\nexport async function addTrigger(trigger: TriggerDTO): Promise<Trigger> {\n const res = await axios.post(`${automationsPath}/trigger`, trigger);\n return res.data;\n}\n\n/**\n * HTTP request to update an automation trigger\n */\nexport async function editTrigger(id: string, trigger: Trigger): Promise<Trigger> {\n const res = await axios.put(`${automationsPath}/trigger/${id}`, trigger);\n return res.data;\n}\n\n/**\n * HTTP request to delete an automation trigger\n */\nexport function deleteTrigger(id: string): Promise<void> {\n return axios.delete(`${automationsPath}/trigger/${id}`);\n}\n\n/**\n * HTTP request to create a new automation\n */\nexport async function addAutomation(automation: AutomationDTO): Promise<Automation> {\n const res = await axios.post(`${automationsPath}/automation`, automation);\n return res.data;\n}\n\n/**\n * HTTP request to update a automation\n */\nexport async function editAutomation(id: string, automation: Automation): Promise<Automation> {\n const res = await axios.put(`${automationsPath}/automation/${id}`, automation);\n return res.data;\n}\n\n/**\n * HTTP request to delete a automation\n */\nexport function deleteAutomation(id: string): Promise<void> {\n return axios.delete(`${automationsPath}/automation/${id}`);\n}\n\n/**\n * HTTP request to test automation output\n * The return is irrelevant as we care for the resolution of the promise\n */\nexport function testOutput(output: AutomationOutput): Promise<void> {\n return axios.post(`${automationsPath}/test`, output);\n}\n","import { AutomationSettings } from 'ontime-types';\n\nexport const automationPlaceholderSettings: AutomationSettings = {\n enabledAutomations: false,\n enabledOscIn: false,\n oscPortIn: 8888,\n triggers: [],\n automations: {},\n};\n","import { useQuery } from '@tanstack/react-query';\n\nimport { queryRefetchIntervalSlow } from '../../ontimeConfig';\nimport { getAutomationSettings } from '../api/automation';\nimport { AUTOMATION } from '../api/constants';\nimport { automationPlaceholderSettings } from '../models/AutomationSettings';\n\nexport default function useAutomationSettings() {\n const { data, status, isFetching, isError, refetch } = useQuery({\n queryKey: AUTOMATION,\n queryFn: getAutomationSettings,\n placeholderData: (previousData, _previousQuery) => previousData,\n retry: 5,\n retryDelay: (attempt: number) => attempt * 2500,\n refetchInterval: queryRefetchIntervalSlow,\n networkMode: 'always',\n });\n\n return { data: data ?? automationPlaceholderSettings, status, isFetching, isError, refetch };\n}\n","import { ReactNode } from 'react';\n\nimport style from './Tag.module.scss';\n\nexport default function Tag({ children }: { children: ReactNode }) {\n return <span className={style.tag}>{children}</span>;\n}\n","import { MouseEvent } from 'react';\nimport { IoBan } from 'react-icons/io5';\n\nimport { cx } from '../../../utils/styleUtils';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface SwatchProps {\n color: string;\n onClick?: (color: string) => void;\n isSelected?: boolean;\n}\n\nexport default function Swatch({ color, isSelected, onClick }: SwatchProps) {\n const handleClick = (event: MouseEvent) => {\n onClick?.(color);\n event.preventDefault();\n event.stopPropagation();\n };\n\n const classes = cx([style.swatch, isSelected && style.selected, onClick && style.selectable]);\n\n if (!color) {\n return (\n <div className={classes} onClick={handleClick}>\n <IoBan />\n </div>\n );\n }\n return <div className={classes} style={{ backgroundColor: `${color}` }} onClick={handleClick} />;\n}\n","import { useCallback } from 'react';\n\nimport Swatch from './Swatch';\nimport SwatchPicker from './SwatchPicker';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface ColourInputProps {\n value: string;\n name: 'colour';\n handleChange: (newValue: 'colour', name: string) => void;\n}\n\nconst colours = [\n '',\n '#FFCC78', // $orange-400\n '#FFAB33', // $orange-600\n '#77C785', // $green-400\n '#339E4E', // $green-600\n '#779BE7', // $blue-400\n '#3E75E8', // $blue-600\n '#FF7878', // $red-400\n '#ED3333', // $red-600\n '#A790F5', // $violet-400\n '#8064E1', // $violet-600\n '#9d9d9d', // $gray-500\n '#ececec', // $gray-100\n];\n\nexport default function SwatchSelect(props: ColourInputProps) {\n const { value, name, handleChange } = props;\n\n const setColour = useCallback(\n (newValue: string) => {\n if (newValue !== value) {\n handleChange(name, newValue);\n }\n },\n [handleChange, name, value],\n );\n\n return (\n <div className={style.list}>\n {colours.map((colour) => (\n <Swatch key={colour} color={colour} onClick={setColour} isSelected={value === colour} />\n ))}\n <SwatchPicker color={value} onChange={setColour} isSelected={!colours.includes(value)} />\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { Dialog as BaseDialog } from '@base-ui-components/react/dialog';\n\nimport IconButton from '../buttons/IconButton';\n\nimport style from './Modal.module.scss';\n\ninterface ModalProps {\n isOpen: boolean;\n title?: string;\n showCloseButton?: boolean;\n showBackdrop?: boolean;\n bodyElements: ReactNode;\n footerElements?: ReactNode;\n onClose: () => void;\n}\n\nexport default function Modal({\n isOpen,\n title,\n showCloseButton,\n showBackdrop,\n bodyElements,\n footerElements,\n onClose,\n}: ModalProps) {\n return (\n <BaseDialog.Root\n open={isOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) onClose();\n }}\n dismissible={false}\n >\n <BaseDialog.Portal>\n {showBackdrop && <BaseDialog.Backdrop className={style.backdrop} />}\n <BaseDialog.Popup className={style.modal}>\n <div className={style.title}>\n {title}\n {showCloseButton && (\n <IconButton variant='subtle-white' onClick={onClose}>\n <IoClose />\n </IconButton>\n )}\n </div>\n <div className={style.body}>{bodyElements}</div>\n <div className={style.footer}>{footerElements}</div>\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { IconType } from 'react-icons';\nimport { Menu as BaseMenu } from '@base-ui-components/react/menu';\n\nimport style from './DropdownMenu.module.scss';\n\ntype DropdownMenuItemDivider = { type: 'divider' };\ntype DropdownMenuItem = {\n type: 'item';\n label: string;\n icon?: IconType;\n disabled?: boolean;\n onClick: () => void;\n};\n\nexport type DropdownMenuOption = DropdownMenuItemDivider | DropdownMenuItem;\n\ninterface DropdownMenuProps extends BaseMenu.Trigger.Props {\n items: DropdownMenuOption[];\n}\n\nexport function DropdownMenu({ items, children, ...triggerProps }: PropsWithChildren<DropdownMenuProps>) {\n return (\n <BaseMenu.Root>\n <BaseMenu.Trigger {...triggerProps}>{children}</BaseMenu.Trigger>\n <BaseMenu.Portal>\n <BaseMenu.Positioner className={style.positioner} align='start' sideOffset={8}>\n <BaseMenu.Popup className={style.popup}>\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return <BaseMenu.Separator key={index} className={style.separator} />;\n }\n return (\n <BaseMenu.Item key={index} className={style.item} onClick={item.onClick} disabled={item.disabled}>\n {item.icon && <item.icon />}\n {item.label}\n </BaseMenu.Item>\n );\n })}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n\ninterface PositionedDropdownMenuProps {\n items: Array<DropdownMenuItemDivider | DropdownMenuItem>;\n isOpen: boolean;\n onClose: () => void;\n position: { x: number; y: number };\n}\n\nexport function PositionedDropdownMenu({ items, isOpen, position, onClose }: PositionedDropdownMenuProps) {\n return (\n <BaseMenu.Root\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) onClose();\n }}\n >\n <BaseMenu.Trigger style={{ position: 'fixed', left: position.x, top: position.y }} aria-hidden />\n <BaseMenu.Portal>\n <BaseMenu.Positioner className={style.positioner} align='start' sideOffset={8} alignOffset={8}>\n <BaseMenu.Popup className={style.popup}>\n {items.map((item, index) => {\n if (item.type === 'divider') {\n return <BaseMenu.Separator key={index} className={style.separator} />;\n }\n return (\n <BaseMenu.Item key={index} className={style.item} onClick={item.onClick} disabled={item.disabled}>\n {item.icon && <item.icon />}\n {item.label}\n </BaseMenu.Item>\n );\n })}\n </BaseMenu.Popup>\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n </BaseMenu.Root>\n );\n}\n"],"names":["automationsPath","apiEntryUrl","getAutomationSettings","axios","editAutomationSettings","automationSettings","addTrigger","trigger","editTrigger","id","deleteTrigger","addAutomation","automation","editAutomation","deleteAutomation","testOutput","output","automationPlaceholderSettings","useAutomationSettings","data","status","isFetching","isError","refetch","useQuery","AUTOMATION","previousData","_previousQuery","attempt","queryRefetchIntervalSlow","Tag","children","jsx","style","Swatch","color","isSelected","onClick","handleClick","event","classes","cx","IoBan","colours","SwatchSelect","props","value","name","handleChange","setColour","useCallback","newValue","jsxs","colour","SwatchPicker","Modal","isOpen","title","showCloseButton","showBackdrop","bodyElements","footerElements","onClose","BaseDialog.Root","BaseDialog.Portal","BaseDialog.Backdrop","BaseDialog.Popup","IconButton","IoClose","DropdownMenu","items","triggerProps","BaseMenu.Root","BaseMenu.Trigger","BaseMenu.Portal","BaseMenu.Positioner","BaseMenu.Popup","item","index","BaseMenu.Separator","BaseMenu.Item","PositionedDropdownMenu","position","open"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
._blink_1hjkh_1{animation:_blink_1hjkh_1 1s step-start infinite}@keyframes _blink_1hjkh_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1hjkh_13{transform:rotate(45deg)}._tag_1hjkh_17{font-size:calc(1rem - 3px);letter-spacing:.5px;background-color:#4c4c4c;color:#f6f6f6;border-radius:2px;padding:0 .25rem;white-space:nowrap}._blink_1pr7r_1{animation:_blink_1pr7r_1 1s step-start infinite}@keyframes _blink_1pr7r_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1pr7r_13{transform:rotate(45deg)}._modal_1pr7r_17{position:fixed;top:10vh;left:50%;transform:translate(-50%);padding-inline:1rem;min-width:min(680px,90vw);min-height:min(200px,10vh);max-width:min(900px,90vw);background-color:#202020;color:#f6f6f6;border-radius:3px;box-shadow:#00000026 0 3px 3px;border:1px solid #2d2d2d;outline:none}._backdrop_1pr7r_34{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#000000b3;transition:opacity .3s cubic-bezier(.45,1.005,0,1.005)}._backdrop_1pr7r_34[data-starting-style],._backdrop_1pr7r_34[data-ending-style]{opacity:0}._title_1pr7r_44{font-size:1rem;font-weight:600;padding-block:1rem;display:flex;align-items:center;justify-content:space-between}._body_1pr7r_53{display:flex;flex-direction:column;gap:.5rem;max-height:60vh;overflow-y:auto}._footer_1pr7r_61{padding-block:1rem;display:flex;align-items:center;justify-content:end;gap:1rem}._blink_1l5gl_1{animation:_blink_1l5gl_1 1s step-start infinite}@keyframes _blink_1l5gl_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1l5gl_13{transform:rotate(45deg)}._positioner_1l5gl_17{outline:0}._popup_1l5gl_21{box-sizing:border-box;padding-block:.25rem;color:#f6f6f6;background-color:#202020;font-size:calc(1rem - 2px);border-radius:3px;border:1px solid #404040;box-shadow:#00000026 0 3px 3px;outline:none;transform-origin:var(--transform-origin);transition:transform .15s,opacity .15s}._popup_1l5gl_21[data-starting-style],._popup_1l5gl_21[data-ending-style]{opacity:0;transform:scale(.9)}._item_1l5gl_39{outline:0;cursor:default;padding-block:.5rem;padding-inline:1rem 2rem;display:flex;gap:.5rem;line-height:1em}._item_1l5gl_39 svg{color:#9d9d9d}._item_1l5gl_39[data-disabled]{opacity:.4;cursor:not-allowed}._item_1l5gl_39[data-highlighted]{z-index:0;position:relative}._item_1l5gl_39[data-highlighted]:not([data-disabled]):before{content:"";z-index:-1;position:absolute;inset-block:0;inset-inline:.25rem;border-radius:3px;background-color:#404040}._separator_1l5gl_69{margin:.25rem .75rem;height:1px;background-color:#ffffff12}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,h as m,bj as Z,bk as oe,am as de,bl as ue,bm as U,bn as K,bo as me,bp as he,ah as xe,ba as je,bq as be}from"./vendor-Cnciq4o_.js";import{L as g,T as p}from"./EditorUtils-DxjFOwpn.js";import{T as S,A as W,s as ge}from"./TimeInput-C0_Nl63x.js";import{u as T,m as fe}from"./dateConfig-CqC6Ta_8.js";import{u as J}from"./useCustomFields-DY13Ir96.js";import{T as O,E as P}from"./validateEvent-Cy-jEiwB.js";import{af as B,aA as ve,i as A,ai as F,r as ye,y as w,T as H,B as _e,b8 as pe,w as z,bh as ee}from"./index-DdPXqLQ6.js";import{S as R}from"./Select-CUjlJirY.js";import{S as ae}from"./useProjectData-BF2F6qPB.js";import{T as I}from"./Tooltip-BZrLdTBU.js";import{p as ie}from"./parseUserTime-DNXIMX9s.js";import{S as Q,u as re,T as te}from"./DropdownMenu-Bn0VHzKx.js";import{g as Ee}from"./offset-BnfjZ6JI.js";import{T as ke}from"./editorSettings-CL1TjKzU.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new t.Error().stack;s&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[s]="42da12d0-4220-4edb-99fa-c81744baa8ca",t._sentryDebugIdIdentifier="sentry-dbid-42da12d0-4220-4edb-99fa-c81744baa8ca")}catch{}})();var N=(t=>(t.onLoad="onLoad",t.onStart="onStart",t.onPause="onPause",t.onStop="onStop",t.onClock="onClock",t.onUpdate="onUpdate",t.onFinish="onFinish",t.onWarning="onWarning",t.onDanger="onDanger",t))(N||{});const Ce=Object.keys(N);function Ne(t){return t.replaceAll(" ","").replaceAll(",",".")}const Te="_imageContainer_1k5qa_17",we="_imageOverlay_1k5qa_25",ne={imageContainer:Te,imageOverlay:we};function Ie({src:t}){return e.jsxs("div",{className:ne.imageContainer,children:[!!t&&e.jsx("img",{loading:"lazy",src:t}),e.jsx("div",{className:ne.imageOverlay})]})}function De({value:t,inputref:s,...a}){return m.useEffect(()=>{const n=s.current;return Z(s.current),()=>{Z.destroy(n)}},[s,t]),e.jsx(ke,{ref:s,value:t,...a})}function le(t,s,a,n){const[o,l]=m.useState(t),i=m.useRef(!1);m.useEffect(()=>{l(typeof t>"u"?"":t)},[t]);const c=m.useCallback(d=>{d!==o&&l(d)},[o]),h=m.useCallback(d=>{var j;if(d===t&&!(n!=null&&n.allowSubmitSameValue))(j=n==null?void 0:n.onCancelUpdate)==null||j.call(n);else{const r=d.trim();s(r),r!==d&&l(r)}setTimeout(()=>{var r,v,y;n!=null&&n.allowKeyboardNavigation?(v=(r=a.current)==null?void 0:r.parentElement)==null||v.focus():(y=a.current)==null||y.blur()})},[t,n,a,s]),x=m.useCallback(()=>{var d;l(t),a.current&&(a.current.value=t),(d=n==null?void 0:n.onCancelUpdate)==null||d.call(n),setTimeout(()=>{var j;return(j=a.current)==null?void 0:j.blur()})},[t,n,a]),b=m.useMemo(()=>{const d=[["Escape",r=>{r.preventDefault(),x()},{preventDefault:!0}]];n!=null&&n.submitOnEnter&&d.push(["Enter",()=>{i.current=!0,h(o),setTimeout(()=>{i.current=!1},0)}]),n!=null&&n.submitOnCtrlEnter&&d.push(["mod + Enter",()=>{i.current=!0,h(o),setTimeout(()=>{i.current=!1},0)}]);const j=oe(d);return r=>{(r.key==="ArrowLeft"||r.key==="ArrowRight"||r.key==="ArrowUp"||r.key==="ArrowDown")&&r.stopPropagation(),j(r)}},[x,h,n==null?void 0:n.submitOnCtrlEnter,n==null?void 0:n.submitOnEnter,o]);return{value:o,onChange:d=>c(d.target.value),onBlur:d=>{i.current||h(d.target.value)},onKeyDown:b}}function G({className:t,field:s,label:a,initialValue:n,style:o,submitHandler:l}){const i=m.useRef(null),c=m.useCallback(j=>l(s,j),[s,l]),{value:h,onChange:x,onBlur:b,onKeyDown:d}=le(n,c,i,{submitOnCtrlEnter:!0});return e.jsxs("div",{children:[e.jsx(g,{className:t,htmlFor:s,style:o,children:a}),e.jsx(De,{id:s,inputref:i,rows:1,"data-testid":"input-textarea",fluid:!0,value:h,onChange:x,onBlur:b,onKeyDown:d})]})}function L({className:t,field:s,label:a,initialValue:n,style:o,submitHandler:l,maxLength:i,placeholder:c}){const h=m.useRef(null),x=m.useCallback(v=>l(s,v),[s,l]),{value:b,onChange:d,onBlur:j,onKeyDown:r}=le(n,x,h,{submitOnEnter:!0});return e.jsxs("div",{children:[e.jsx(g,{className:t,htmlFor:s,style:o,children:a}),e.jsx(B,{id:s,ref:h,maxLength:i,fluid:!0,"data-testid":"input-textfield",value:b,placeholder:c,onChange:d,onBlur:j,onKeyDown:r})]})}const Le="_rundownEditor_nbvvy_19",Se="_content_nbvvy_29",Fe="_column_nbvvy_48",Ae="_decorated_nbvvy_57",Oe="_delayLabel_nbvvy_65",He="_switchLabel_nbvvy_73",$e="_inline_nbvvy_83",Ve="_splitTwo_nbvvy_89",qe="_splitThree_nbvvy_96",Me="_tooltipIcon_nbvvy_103",We="_customImage_nbvvy_110",Re="_textLikeInput_nbvvy_117",Be="_inactive_nbvvy_125",Ge="_active_nbvvy_129",u={rundownEditor:Le,content:Se,column:Fe,decorated:Ae,delayLabel:Oe,switchLabel:He,inline:$e,splitTwo:Ve,splitThree:qe,tooltipIcon:Me,customImage:We,textLikeInput:Re,inactive:Be,active:Ge};function X({fields:t,handleSubmit:s,entry:a}){return e.jsx(m.Fragment,{children:Object.keys(t).map(n=>{const o=`${a.id}-${n}`,l=`custom-${n}`,i=a.custom[n]??"",{backgroundColor:c,color:h}=ve(t[n].colour),x=t[n].label;return t[n].type==="text"?e.jsx(G,{field:l,label:x,initialValue:i,submitHandler:s,className:u.decorated,style:{"--decorator-bg":c,"--decorator-color":h}},o):t[n].type==="image"?e.jsxs("div",{className:u.customImage,children:[e.jsx(L,{field:l,label:x,initialValue:i,placeholder:"Paste image URL",submitHandler:s,className:u.decorated,maxLength:255,style:{"--decorator-bg":c,"--decorator-color":h}},o),e.jsx(Ie,{src:i})]},o):null})})}const Pe="_inputGroup_1e1jq_17",Ue="_delayed_1e1jq_24",se={inputGroup:Pe,delayed:Ue};function q({hasDelay:t,children:s}){return e.jsx("div",{className:A([se.inputGroup,t&&se.delayed]),children:s})}const Ke="_fourtyfive_w3aej_13",ze="_timerNote_w3aej_21",Je="_inactive_w3aej_27",Qe="_active_w3aej_31",C={fourtyfive:Ke,timerNote:ze,inactive:Je,active:Qe},Xe=m.memo(Ye);function Ye({eventId:t,countToEnd:s,timeStart:a,timeEnd:n,duration:o,timeStrategy:l,linkStart:i,delay:c,showLabels:h}){const{updateEntry:x,updateTimer:b}=T(),d=(k,_)=>{b(t,k,_)},j=k=>{x({id:t,timeStrategy:k})},r=k=>{x({id:t,linkStart:k})},v=[];a+o>ye&&v.push("Over midnight"),s&&v.push("Count to End");const y=c!==0,f=l===O.LockEnd,E=l===O.LockDuration;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[h&&e.jsx(g,{className:C.sectionTitle,children:"Start time"}),e.jsxs(q,{hasDelay:y,children:[e.jsx(S,{name:"timeStart",submitHandler:d,time:a,placeholder:"Start",align:"left",disabled:i}),e.jsx(I,{text:"Link start to previous end",onClick:()=>r(!i),render:e.jsx(F,{variant:"subtle-white",className:i?C.active:C.inactive}),children:e.jsx("span",{className:C.fourtyfive,children:i?e.jsx(de,{}):e.jsx(ue,{})})})]})]}),e.jsxs("div",{children:[h&&e.jsx(g,{children:"End time"}),e.jsxs(q,{hasDelay:y,children:[e.jsx(S,{name:"timeEnd",submitHandler:d,time:n,placeholder:"End",align:"left",disabled:E}),e.jsx(I,{text:"Lock end",render:e.jsx(F,{variant:"subtle-white",className:f?C.active:C.inactive}),onClick:()=>j(O.LockEnd),"data-testid":"lock__end",children:f?e.jsx(U,{}):e.jsx(K,{})})]})]}),e.jsxs("div",{children:[h&&e.jsx(g,{children:"Duration"}),e.jsxs(q,{hasDelay:y,children:[e.jsx(S,{name:"duration",submitHandler:d,time:o,placeholder:"Duration",align:"left",disabled:f}),e.jsx(I,{text:"Lock duration",render:e.jsx(F,{variant:"subtle-white",className:E?C.active:C.inactive}),onClick:()=>j(O.LockDuration),"data-testid":"lock__duration",children:E?e.jsx(U,{}):e.jsx(K,{})})]})]}),v.length>0&&e.jsx(I,{text:v.join(" - "),className:C.timerNote,"data-testid":"event-warning",render:e.jsx("span",{}),children:e.jsx(me,{})})]})}const Ze=m.memo(et);function et({eventId:t,timeStart:s,timeEnd:a,duration:n,timeStrategy:o,linkStart:l,countToEnd:i,delay:c,endAction:h,timerType:x,timeWarning:b,timeDanger:d}){const{updateEntry:j}=T(),r=(f,E)=>{if(f==="countToEnd"){j({id:t,countToEnd:E});return}if(f==="timeWarning"||f==="timeDanger"){const k=ie(E);j({id:t,[f]:k});return}if(f==="timerType"||f==="endAction"){j({id:t,[f]:E});return}},y=c!==0?`Event is ${fe(c,"expanded")}. New schedule ${w(s+c)} → ${w(a+c)}`:"";return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:u.column,children:[e.jsx(p,{children:"Event schedule"}),e.jsxs("div",{children:[e.jsx("div",{className:u.inline,children:e.jsx(Xe,{eventId:t,timeStart:s,timeEnd:a,duration:n,timeStrategy:o,linkStart:l,delay:c,countToEnd:i,showLabels:!0})}),e.jsx("div",{className:u.delayLabel,children:y})]})]}),e.jsxs("div",{className:u.column,children:[e.jsx(p,{children:"Event Behaviour"}),e.jsxs("div",{className:u.splitTwo,children:[e.jsxs("div",{children:[e.jsx(g,{htmlFor:"endAction",children:"End Action"}),e.jsx(R,{value:h,onValueChange:f=>r("endAction",f),options:[{value:P.None,label:"None"},{value:P.LoadNext,label:"Load next event"},{value:P.PlayNext,label:"Play next event"}]})]}),e.jsxs("div",{children:[e.jsx(g,{htmlFor:"countToEnd",children:"Count to End"}),e.jsxs(g,{className:u.switchLabel,children:[e.jsx(ae,{id:"countToEnd",checked:i,onCheckedChange:f=>r("countToEnd",f)}),i?"On":"Off"]})]})]})]}),e.jsxs("div",{className:u.column,children:[e.jsx(p,{children:e.jsxs(I,{text:"Changes how the timer is displayed in different views. It is not reflected in the rundown",render:e.jsx("span",{}),children:["Display Options",e.jsx(he,{className:u.tooltipIcon})]})}),e.jsxs("div",{className:u.splitTwo,children:[e.jsxs("div",{children:[e.jsx(g,{htmlFor:"timerType",children:"Timer Type"}),e.jsx(R,{value:x,onValueChange:f=>r("timerType",f),options:[{value:H.CountDown,label:"Count down"},{value:H.CountUp,label:"Count up"},{value:H.Clock,label:"Clock"},{value:H.None,label:"None"}]})]}),e.jsxs("div",{className:u.inline,children:[e.jsxs("div",{children:[e.jsx(g,{htmlFor:"timeWarning",children:"Warning Time"}),e.jsx(S,{id:"timeWarning",name:"timeWarning",submitHandler:r,time:b,placeholder:"Duration"})]}),e.jsxs("div",{children:[e.jsx(g,{htmlFor:"timeDanger",children:"Danger Time"}),e.jsx(S,{id:"timeDanger",name:"timeDanger",submitHandler:r,time:d,placeholder:"Duration"})]})]})]})]})]})}const tt=m.memo(nt);function nt({eventId:t,cue:s,flag:a,title:n,note:o,colour:l}){const{updateEntry:i}=T(),c=(b,d)=>{i({id:t,cue:Ne(d)})},h=b=>{i({id:t,flag:b})},x=(b,d)=>{i({id:t,[b]:d})};return e.jsxs("div",{className:u.column,children:[e.jsx(p,{children:"Event Data"}),e.jsxs("div",{className:u.splitThree,children:[e.jsxs("div",{children:[e.jsx(g,{htmlFor:"eventId",children:"Event ID (read only)"}),e.jsx(B,{id:"eventId","data-testid":"input-textfield",value:t,readOnly:!0,fluid:!0})]}),e.jsx(L,{field:"cue",label:"Cue",initialValue:s,submitHandler:c,maxLength:10}),e.jsxs("div",{children:[e.jsx(g,{htmlFor:"flag",children:"Flag"}),e.jsxs(g,{className:u.switchLabel,children:[e.jsx(ae,{id:"flag",checked:a,onCheckedChange:h}),a?"On":"Off"]})]})]}),e.jsxs("div",{children:[e.jsx(g,{children:"Colour"}),e.jsx(Q,{name:"colour",value:l,handleChange:x})]}),e.jsx(L,{field:"title",label:"Title",initialValue:n,submitHandler:x}),e.jsx(G,{field:"note",label:"Note",initialValue:o,submitHandler:x})]})}const st=[N.onLoad,N.onStart,N.onPause,N.onFinish,N.onWarning,N.onDanger],at="_triggerForm_l7413_17",it="_trigger_l7413_17",rt="_errorLabel_l7413_38",lt="_success_l7413_42",M={triggerForm:at,trigger:it,errorLabel:rt,success:lt};function ct({triggers:t,eventId:s}){const a=t.length>0;return e.jsxs(e.Fragment,{children:[a&&e.jsx(dt,{triggers:t,eventId:s}),e.jsx(ot,{triggers:t,eventId:s})]})}function ot({eventId:t,triggers:s}){const{data:a}=re(),{updateEntry:n}=T(),[o,l]=m.useState(void 0),[i,c]=m.useState(N.onStart),h=(r,v)=>{const y=s??new Array,f=pe();y.push({id:f,title:"",trigger:r,automationId:v}),n({id:t,triggers:y})},b=((r,v)=>{if(v===void 0)return"Select an automation";if(!Object.keys(a.automations).includes(v))return"This automation does not exist";if(s!==void 0)return Object.values(s).some(y=>y.automationId===v&&y.trigger===r)?"Automation can only be used once":void 0})(i,o),d=m.useMemo(()=>[{value:null,label:"Select Trigger"},...st.map(r=>({value:r,label:r}))],[]),j=m.useMemo(()=>[{value:null,label:"Select Automation"},...Object.values(a.automations).map(({id:r,title:v})=>({value:r,label:v}))],[a.automations]);return e.jsxs("div",{className:M.triggerForm,children:[e.jsx(R,{value:i,onValueChange:r=>{r!==null&&c(r)},options:d}),e.jsx(R,{value:o??null,onValueChange:r=>{r!==null&&l(r)},options:j}),e.jsx(_e,{disabled:b!==void 0,onClick:()=>o&&h(i,o),children:"Add"}),b!==void 0?e.jsx(I,{text:b,render:e.jsx("span",{}),children:e.jsx(je,{className:M.errorLabel})}):e.jsx(be,{className:M.success})]})}function dt({eventId:t,triggers:s}){const{updateEntry:a}=T(),{data:n}=re(),o=m.useCallback(i=>{const c=s.filter(h=>h.id!==i);a({id:t,triggers:c})},[t,s,a]),l={};return Ce.forEach(i=>{const c=s.filter(h=>h.trigger===i);c.length&&Object.assign(l,{[i]:c})}),e.jsx("div",{children:Object.entries(l).map(([i,c])=>e.jsx(m.Fragment,{children:c.map(h=>{var j;const{id:x,automationId:b}=h,d=((j=n.automations[b])==null?void 0:j.title)??"<MISSING AUTOMATION>";return e.jsxs("div",{className:M.trigger,children:[e.jsx(te,{children:i}),e.jsx(te,{children:d}),e.jsx(F,{variant:"ghosted-destructive",onClick:()=>o(x),children:e.jsx(xe,{})})]},x)})},i))})}function At({event:t}){const{data:s}=J(),{updateEntry:a}=T(),n=window.location.pathname.includes("editor"),o=m.useCallback((l,i)=>{if(l.startsWith("custom-")){const c=l.split("custom-")[1];a({id:t.id,custom:{[c]:i}})}else a({id:t.id,[l]:i})},[t.id,a]);return e.jsxs("div",{className:u.content,children:[e.jsx(Ze,{eventId:t.id,timeStart:t.timeStart,timeEnd:t.timeEnd,duration:t.duration,timeStrategy:t.timeStrategy,linkStart:t.linkStart,countToEnd:t.countToEnd,delay:t.delay,endAction:t.endAction,timerType:t.timerType,timeWarning:t.timeWarning,timeDanger:t.timeDanger},`${t.id}-times`),e.jsx(tt,{eventId:t.id,cue:t.cue,flag:t.flag,title:t.title,note:t.note,colour:t.colour},`${t.id}-titles`),e.jsxs("div",{className:u.column,children:[e.jsxs(p,{children:["Custom Fields",n&&e.jsx(W,{search:"settings=manage__custom",children:"Manage Custom Fields"})]}),e.jsx(X,{fields:s,handleSubmit:o,entry:t})]}),e.jsxs("div",{className:u.column,children:[e.jsxs(p,{children:["Automations",n&&e.jsx(W,{search:"settings=automation",children:"Manage Automations"})]}),e.jsx(ct,{triggers:t.triggers,eventId:t.id})]})]})}const ut="_blink_1qqxl_1",mt="_fourtyfive_1qqxl_13",ht="_textInput_1qqxl_18",xt="_under_1qqxl_31",jt="_over_1qqxl_34",bt="_muted_1qqxl_37",gt="_disabled_1qqxl_40",$={blink:ut,fourtyfive:mt,textInput:ht,under:xt,over:jt,muted:bt,disabled:gt},ce=m.forwardRef(({offset:t,muted:s,disabled:a,children:n,className:o,...l},i)=>{const c=m.useRef(null),h=A([$.textInput,t&&$[t],s&&$.muted,a&&$.disabled,o]);return m.useImperativeHandle(i,()=>({focusParentElement(){var x,b;(b=(x=c.current)==null?void 0:x.parentElement)==null||b.focus()}})),e.jsx("div",{className:h,tabIndex:a?-1:0,...l,ref:c,children:n})});ce.displayName="TextLikeInput";const V=m.memo(ce);function ft({id:t,name:s,submitHandler:a,time:n,emptyDisplay:o,placeholder:l,disabled:i,align:c="center",className:h}){const x=m.useRef(null),[b,d]=m.useState(""),j=m.useRef(!1),r=m.useCallback(()=>{typeof n!="number"||isNaN(n)?d(o):d(w(n))},[o,n]),v=m.useCallback(()=>{var _;(_=x.current)==null||_.select()},[]),y=m.useCallback(_=>{if(_===""&&n===null)return!1;const D=ie(_);return D===n?!1:(a(s,D),!0)},[s,a,n]),f=m.useCallback(_=>{y(_)||r()},[y,r]),E=m.useCallback(_=>{var D,Y;_.key==="Enter"&&((D=x.current)==null||D.blur()),_.key==="Escape"&&(j.current=!0,(Y=x.current)==null||Y.blur(),r())},[r]),k=m.useCallback(_=>{if(j.current){j.current=!1;return}f(_.target.value)},[f]);return m.useEffect(()=>{r()},[r]),e.jsx(B,{id:t,disabled:i,ref:x,"data-testid":`time-input-${s}`,className:A([ge.timeInput,h]),placeholder:l,onFocus:v,onChange:_=>d(_.target.value),onBlur:k,onKeyDown:E,value:b,maxLength:8,autoComplete:"off",style:{textAlign:c}})}function vt({duration:t,targetDuration:s,submitHandler:a}){const n=s!==null;return e.jsxs("div",{children:[e.jsx(g,{htmlFor:"targetDuration",children:"Target duration"}),e.jsxs(q,{hasDelay:n&&s!==t,children:[e.jsx(ft,{name:"targetDuration",time:s,submitHandler:a,emptyDisplay:z,className:n?"":u.inactive}),e.jsx(I,{text:"Lock to target duration",className:A([u.timeAction,n&&u.active]),onClick:()=>a("targetDuration",n?null:t),"data-testid":"lock__duration",render:e.jsx(F,{variant:"subtle-white",className:n?u.active:u.inactive}),children:n?e.jsx(U,{}):e.jsx(K,{})})]})]})}function Ot({group:t}){const{data:s}=J(),{updateEntry:a}=T(),n=m.useCallback((c,h)=>{if(typeof c=="string"&&c.startsWith("custom-")){const x=c.split("custom-")[1];a({id:t.id,custom:{[x]:h}});return}return a(c==="targetDuration"?{id:t.id,targetDuration:h}:{id:t.id,[c]:h})},[t.id,a]),o=window.location.pathname.includes("editor"),l=t.targetDuration===null?null:t.duration-t.targetDuration,i=l!==null?Ee(l):null;return e.jsxs("div",{className:u.content,children:[e.jsxs("div",{className:u.column,children:[e.jsx(p,{children:"Group schedule"}),e.jsxs("div",{className:u.inline,children:[e.jsxs("div",{children:[e.jsx(g,{children:"First event start"}),e.jsx(V,{className:u.textLikeInput,disabled:!0,children:w(t.timeStart,{fallback:ee})})]}),e.jsxs("div",{children:[e.jsx(g,{children:"Last event end"}),e.jsx(V,{className:u.textLikeInput,disabled:!0,children:w(t.timeEnd,{fallback:ee})})]}),e.jsxs("div",{children:[e.jsx(g,{htmlFor:"duration",children:"Scheduled duration"}),e.jsx(V,{className:u.textLikeInput,disabled:!0,children:w(t.duration,{fallback:z})})]})]}),e.jsxs("div",{className:u.inline,children:[e.jsxs("div",{children:[e.jsx(g,{htmlFor:"eventId",children:"Plan offset"}),e.jsxs(V,{offset:i,className:A([u.textLikeInput,l===null&&u.inactive]),disabled:!0,children:[l!==null&&l>0?"+":"",w(l,{fallback:z})]})]}),e.jsx(vt,{duration:t.duration,targetDuration:t.targetDuration,submitHandler:n})]})]}),e.jsxs("div",{className:u.column,children:[e.jsx(p,{children:"Group data"}),e.jsxs("div",{children:[e.jsx(g,{children:"Colour"}),e.jsx(Q,{name:"colour",value:t.colour,handleChange:n})]}),e.jsx(L,{field:"title",label:"Title",initialValue:t.title,submitHandler:n}),e.jsx(G,{field:"note",label:"Note",initialValue:t.note,submitHandler:n})]}),e.jsxs("div",{className:u.column,children:[e.jsxs(p,{children:["Custom Fields",o&&e.jsx(W,{search:"settings=manage__custom",children:"Manage Custom Fields"})]}),e.jsx(X,{fields:s,handleSubmit:n,entry:t})]})]})}function Ht({milestone:t}){const{data:s}=J(),{updateEntry:a}=T(),n=m.useCallback((l,i)=>{if(typeof l=="string"&&l.startsWith("custom-")){const c=l.split("custom-")[1];a({id:t.id,custom:{[c]:i}});return}return a({id:t.id,[l]:i})},[t.id,a]),o=window.location.pathname.includes("editor");return e.jsxs("div",{className:u.content,children:[e.jsxs("div",{className:u.column,children:[e.jsx(p,{children:"Milestone data"}),e.jsxs("div",{className:u.splitTwo,children:[e.jsxs("div",{children:[e.jsx(g,{htmlFor:"entryId",children:"Milestone ID (read only)"}),e.jsx(B,{id:"entryId","data-testid":"input-textfield",value:t.id,readOnly:!0,fluid:!0})]}),e.jsx(L,{field:"cue",label:"Cue",initialValue:t.cue,submitHandler:n,maxLength:10})]}),e.jsxs("div",{children:[e.jsx(g,{children:"Colour"}),e.jsx(Q,{name:"colour",value:t.colour,handleChange:n})]}),e.jsx(L,{field:"title",label:"Title",initialValue:t.title,submitHandler:n}),e.jsx(G,{field:"note",label:"Note",initialValue:t.note,submitHandler:n})]}),e.jsxs("div",{className:u.column,children:[e.jsxs(p,{children:["Custom Fields",o&&e.jsx(W,{search:"settings=manage__custom",children:"Manage Custom Fields"})]}),e.jsx(X,{fields:s,handleSubmit:n,entry:t})]})]})}export{De as A,At as E,Ot as G,Ht as M,V as T,Xe as a,u as s,le as u};
|
|
2
|
-
//# sourceMappingURL=MilestoneEditor-Da8oxrHI.js.map
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{h as u,j as e,D as ae,p as re,s as le,t as ce,b0 as de,l as ue}from"./vendor-Cnciq4o_.js";import{ai as me,B as H,z as pe,bc as fe,aA as he,i as q,y as ge,bd as _e,l as be,M as ve,be as xe,a_ as je,c as ye,o as Se,d as Oe,h as we,O as Ee,t as Ce,bf as Ne,b6 as Te}from"./index-DdPXqLQ6.js";import{P as Fe}from"./ProtectRoute-DnUCrlh6.js";import{r as ke,i as z,j as De}from"./useRundown-uuXixjnX.js";import{E as Pe}from"./EmptyPage-X6EO1Y5W.js";import{m as qe,e as Le,O as U,i as A,g as Z,V as Me}from"./ViewParamsEditor-YoYxps2g.js";import{u as Re}from"./useFollowComponent-C42-1XCu.js";import{u as Ve}from"./useWindowTitle-BQ1kqXfk.js";import{u as Ie}from"./useCustomFields-DY13Ir96.js";import{u as Be}from"./useProjectData-BF2F6qPB.js";import{T as Ue}from"./editorSettings-CL1TjKzU.js";import{u as Ae}from"./dateConfig-CqC6Ta_8.js";import{F as $e}from"./FollowButton-Cr-HA2-6.js";import{D as We}from"./DelayIndicator-DXDACqpc.js";import{f as Ge,T as He,C as ze}from"./TimeElements-rlwX9Mgy.js";import{M as Ze}from"./MultiPartProgressBar-mGPuP1Wd.js";import{g as Je}from"./common.options-p5f_zJ2-.js";import"./Empty-DiBXyIA8.js";import"./Select-CUjlJirY.js";import"./validateEvent-Cy-jEiwB.js";import"./parseUserTime-DNXIMX9s.js";import"./rundownUtils-CPBsEZ2m.js";import"./Tooltip-BZrLdTBU.js";import"./offset-BnfjZ6JI.js";import"./playbackstate-DzSEaiNW.js";import"./getProgress-Dh-Yy44B.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new t.Error().stack;s&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[s]="5e1c616b-be8d-4bfe-ba7d-f836843a3bfe",t._sentryDebugIdIdentifier="sentry-dbid-5e1c616b-be8d-4bfe-ba7d-f836843a3bfe")}catch{}})();const Ke="_editModal_s63mb_17",Qe="_title_s63mb_31",Xe="_body_s63mb_39",Ye="_label_s63mb_48",et="_footer_s63mb_54",C={editModal:Ke,title:Qe,body:Xe,label:Ye,footer:et};function tt(t){const{event:s,onClose:o}=t,{updateEntry:i}=Ae(),[l,a]=u.useState(!1),f=u.useRef(new Array),h=async()=>{if(!f.current)return;a(!0);const n={id:s.id};f.current.forEach(r=>{r.dataset.field&&r.defaultValue!=r.value&&(n.custom?n.custom[r.dataset.field]=r.value:Object.assign(n,{custom:{[r.dataset.field]:r.value}}))}),n.custom&&await i(n),a(!1),o()};return e.jsx(ae,{open:!0,onOpenChange:n=>{n||o()},children:e.jsx(re,{children:e.jsxs(le,{className:C.editModal,children:[e.jsxs("div",{className:C.title,children:[`Editing fields in cue ${s.cue}`,e.jsx(me,{variant:"subtle-white",onClick:o,disabled:l,children:e.jsx(ce,{})})]}),e.jsx("div",{className:C.body,children:s.subscriptions.map(n=>e.jsxs(u.Fragment,{children:[e.jsx("label",{htmlFor:n.id,className:C.label,style:{"--user-bg":n.colour},children:n.label}),e.jsx(Ue,{name:n.id,ref:r=>{r&&f.current.push(r)},placeholder:`Add value for ${n.label} field`,defaultValue:n.value,"data-field":n.id,disabled:l,rows:5})]},n.id))}),e.jsxs("div",{className:C.footer,children:[e.jsx(H,{variant:"subtle",size:"large",onClick:o,disabled:l,children:"Cancel"}),e.jsx(H,{variant:"primary",size:"large",onClick:h,disabled:l,children:"Save"})]})]})})})}function st(t){const{value:s,hideSeconds:o,hideLeadingZero:i,className:l}=t;let a=Ge(s,o||i?2:3);return i&&(a=pe(a)),o&&(a=fe(a)),e.jsx("div",{className:l,children:a})}const ot="_event_k7q3c_63",nt="_running_k7q3c_80",it="_past_k7q3c_84",at="_binder_k7q3c_89",rt="_cue_k7q3c_98",lt="_mainField_k7q3c_108",ct="_secondaryField_k7q3c_117",dt="_plannedStart_k7q3c_124",ut="_timeUntil_k7q3c_124",mt="_runningTime_k7q3c_143",pt="_fields_k7q3c_154",ft="_field_k7q3c_154",ht="_noColour_k7q3c_170",gt="_value_k7q3c_176",d={event:ot,running:nt,past:it,binder:at,cue:rt,mainField:lt,secondaryField:ct,plannedStart:dt,timeUntil:ut,runningTime:mt,fields:pt,field:ft,noColour:ht,value:gt},J=u.memo(_t);function _t({id:t,colour:s,cue:o,main:i,secondary:l,timeStart:a,duration:f,delay:h,dayOffset:n,isLinkedToLoaded:r,isSelected:_,isPast:b,selectedRef:L,showStart:T,subscribed:y,totalGap:O,onLongPress:M}){const w=m=>{m==null||m.preventDefault(),y&&M({id:t,cue:o,subscriptions:y})},F=de(w),k=s&&he(s),S=q([d.event,_&&d.running,b&&d.past]);return e.jsxs("div",{className:S,"data-testid":o,ref:L,onContextMenu:w,...F,children:[e.jsx("div",{className:d.binder,style:{...k},children:e.jsx("span",{className:d.cue,children:o})}),e.jsxs("span",{className:d.mainField,children:[T&&e.jsx("span",{className:d.plannedStart,children:ge(a)}),i]}),e.jsx("span",{className:d.secondaryField,children:l}),e.jsx(bt,{timeStart:a,isPast:b,isSelected:_,delay:h,dayOffset:n,totalGap:O,isLinkedToLoaded:r}),e.jsxs("span",{className:d.runningTime,children:[e.jsx(We,{delayValue:h}),e.jsx(st,{className:q([_&&d.muted]),value:f,hideLeadingZero:!0})]}),e.jsx("div",{className:d.fields,children:y.filter(m=>m.value).map(m=>{const v=q([d.field,m.colour?null:d.noColour]);return e.jsxs("div",{children:[e.jsx("span",{className:v,style:{backgroundColor:m.colour},children:m.label}),e.jsx("span",{className:d.value,style:{color:m.colour},children:m.value})]},m.id)})})]})}function bt({timeStart:t,isPast:s,isSelected:o,delay:i,dayOffset:l,totalGap:a,isLinkedToLoaded:f}){return s?e.jsx("span",{className:d.timeUntil,children:"DONE"}):o?e.jsx("span",{className:d.timeUntil,children:"LIVE"}):e.jsx(vt,{timeStart:t,delay:i,dayOffset:l,totalGap:a,isLinkedToLoaded:f})}function vt({timeStart:t,delay:s,dayOffset:o,totalGap:i,isLinkedToLoaded:l}){const a=_e({timeStart:t,delay:s,dayOffset:o},{totalGap:i,isLinkedToLoaded:l}),h=a<xe?"DUE":`${be(Math.abs(a),a>2*ve)}`;return e.jsx("span",{className:d.timeUntil,"data-testid":"time-until",children:h})}const xt="_group_c6uj3_17",jt={group:xt},yt=u.memo(St);function St({title:t}){return e.jsx("div",{className:jt.group,children:t})}const Ot="_statusBar_10qhq_17",wt="_timers_10qhq_25",Et="_runningTimer_10qhq_33",Ct="_timeNow_10qhq_42",Nt="_progressOverride_10qhq_51",N={statusBar:Ot,timers:wt,runningTimer:Et,timeNow:Ct,progressOverride:Nt};function Tt({viewSettings:t}){const{current:s,duration:o,timeWarning:i,timeDanger:l}=je();return e.jsx(Ze,{now:s,complete:o,normalColor:t.normalColor,warning:i,warningColor:t.warningColor,danger:l,dangerColor:t.dangerColor,className:N.progressOverride,ignoreCssOverride:!0})}function Ft(){return e.jsxs("div",{className:N.timers,children:[e.jsx(He,{className:N.runningTimer}),e.jsx(ze,{className:N.timeNow})]})}function kt(){const{data:t}=ye();return e.jsxs("div",{className:N.statusBar,children:[e.jsx(Ft,{}),t&&e.jsx(Tt,{viewSettings:t})]})}const Dt=(t,s)=>{const o=qe(t,[{value:"none",label:"None"},{value:"title",label:"Title"},{value:"note",label:"Note"}]),i=Le(t);return[{title:U.ClockOptions,collapsible:!0,options:[Je(s)]},{title:U.DataSources,collapsible:!0,options:[{id:"main",title:"Main data field",description:"Field to be shown in the first line of text",type:"option",values:o,defaultValue:"title"},{id:"secondary-src",title:"Secondary data field",description:"Field to be shown in the second line of text",type:"option",values:o,defaultValue:"none"},{id:"subscribe",title:"Highlight Fields",description:"Choose custom fields to highlight",type:"multi-option",values:i},{id:"shouldEdit",title:"Edit custom field",description:"Allows editing an highlighted custom field by long pressing",type:"boolean",defaultValue:!1}]},{title:U.ElementVisibility,collapsible:!0,options:[{id:"hidePast",title:"Hide Past Events",description:"Whether to hide events that have passed",type:"boolean",defaultValue:!1},{id:"showStart",title:"Show planned start",description:"Whether to prepend the planned start to the items",type:"boolean",defaultValue:!1}]}]};function Pt(t){return{mainSource:t.get("main"),secondarySource:t.get("secondary-src"),subscribe:t.getAll("subscribe"),shouldEdit:A(t.get("shouldEdit")),hidePast:A(t.get("hidePast")),showStart:A(t.get("showStart"))}}function qt(){const[t]=ue();return u.useMemo(()=>Pt(t),[t])}function K(t,s,o,i,l){const a=s?Z(t,s)??"":t.title,f=Z(t,o)??"",n=i.filter(r=>Object.hasOwn(l,r)).reduce((r,_)=>{const b=l[_];return b&&r.push({id:_,label:b.label,colour:b.colour,value:t.custom[_]}),r},[]);return{mainField:a,secondaryField:f,subscribedData:n}}const Lt="_operatorContainer_1o5o0_17",Mt="_operatorEvents_1o5o0_24",Rt="_editPrompt_1o5o0_35",Vt="_show_1o5o0_49",P={operatorContainer:Lt,operatorEvents:Mt,editPrompt:Rt,show:Vt},Q=50;function It(){const{data:t,rundownMetadata:s,status:o}=ke(),{data:i,status:l}=Ie(),{data:a,status:f}=Be(),h=u.useRef(null),{selectedEventId:n}=Se(),{subscribe:r,mainSource:_,secondarySource:b,shouldEdit:L,hidePast:T,showStart:y}=qt(),{data:O}=Oe(),[M,w]=u.useState(!1),[F,k]=u.useState(null),[S,m]=u.useState(!1),v=u.useRef(null),x=u.useRef(null),X=Re({followRef:v,scrollRef:x,doFollow:!S,topOffset:Q,followTrigger:n});Ve("Operator"),u.useEffect(()=>{var g;n||S||(g=x.current)==null||g.scrollTo(0,0)},[n,S,x]);const Y=()=>{n&&X(),m(!1)},ee=Ce(()=>{if(v!=null&&v.current&&(x!=null&&x.current)){const g=v.current.getBoundingClientRect(),c=x.current.getBoundingClientRect();if(g&&c){const j=g.top-c.top,p=j<-8||j>Q;m(p)}}},1e3),$=()=>{h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{w(!1)},700),w(!0),ee()},W=u.useCallback(g=>{k({...g})},[]),te=!t||!i||!a,se=o==="pending"||l==="pending"||f==="pending",G=we(O==null?void 0:O.timeFormat),oe=u.useMemo(()=>Dt(i,G),[i,G]);if(te||se)return e.jsx(Pe,{text:"Loading..."});const R=L&&r.length;return e.jsxs("div",{className:P.operatorContainer,"data-testid":"operator-view",children:[e.jsx(Me,{target:Ee.Operator,viewOptions:oe}),F&&e.jsx(tt,{event:F,onClose:()=>k(null)}),e.jsx(kt,{}),R&&e.jsx("div",{className:q([P.editPrompt,M&&P.show]),children:"Press and hold to edit user field"}),e.jsx("div",{className:P.operatorEvents,onWheel:$,onTouchMove:$,ref:x,children:t.order.map(g=>{const c=t.entries[g];if(z(c)){const{isPast:j,isLinkedToLoaded:p,isLoaded:E,totalGap:D}=s[g];if(T&&j||c.skip)return null;const{mainField:V,secondaryField:I,subscribedData:B}=K(c,_,b,r,i);return e.jsx(J,{id:c.id,colour:c.colour,cue:c.cue,main:V,secondary:I,timeStart:c.timeStart,duration:c.duration,delay:c.delay,dayOffset:c.dayOffset,isLinkedToLoaded:p,isSelected:E,isPast:j,selectedRef:E?v:void 0,showStart:y,subscribed:B,totalGap:D,onLongPress:R?W:()=>{}},c.id)}return De(c)?e.jsxs(u.Fragment,{children:[e.jsx(yt,{title:c.title},c.id),c.entries.map(j=>{const p=t.entries[j];if(!z(p))return null;const{isPast:E,isLoaded:D,isLinkedToLoaded:V,totalGap:I}=s[g];if(T&&E||p.skip)return null;const{mainField:B,secondaryField:ne,subscribedData:ie}=K(p,_,b,r,i);return e.jsx(J,{id:p.id,colour:p.colour,cue:p.cue,main:B,secondary:ne,timeStart:p.timeStart,duration:p.duration,delay:p.delay,dayOffset:p.dayOffset,isLinkedToLoaded:V,isSelected:D,isPast:E,selectedRef:D?v:void 0,showStart:y,subscribed:ie,totalGap:I,onLongPress:R?W:()=>{}},p.id)})]},c.id):null})}),e.jsx($e,{isVisible:S,onClickHandler:Y})]})}function ps(){return e.jsxs(Fe,{permission:"operator",children:[e.jsx(Ne,{isNavigationLocked:Te()}),e.jsx(It,{})]})}export{ps as default};
|
|
2
|
-
//# sourceMappingURL=OperatorExport-BeuWuV6I.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OperatorExport-BeuWuV6I.js","sources":["../../src/features/operator/edit-modal/EditModal.tsx","../../src/features/viewers/common/running-time/RunningTime.tsx","../../src/features/operator/operator-event/OperatorEvent.tsx","../../src/features/operator/operator-group/OperatorGroup.tsx","../../src/features/operator/status-bar/StatusBarProgress.tsx","../../src/features/operator/status-bar/StatusBarTimers.tsx","../../src/features/operator/status-bar/StatusBar.tsx","../../src/features/operator/operator.options.tsx","../../src/features/operator/operator.utils.ts","../../src/features/operator/Operator.tsx","../../src/features/operator/OperatorExport.tsx"],"sourcesContent":["import { Fragment, useRef, useState } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { Dialog } from '@base-ui-components/react/dialog';\nimport { OntimeEvent } from 'ontime-types';\n\nimport Button from '../../../common/components/buttons/Button';\nimport IconButton from '../../../common/components/buttons/IconButton';\nimport Textarea from '../../../common/components/input/textarea/Textarea';\nimport { useEntryActions } from '../../../common/hooks/useEntryAction';\nimport { EditEvent } from '../operator.types';\n\nimport style from './EditModal.module.scss';\n\ninterface EditModalProps {\n event: EditEvent;\n onClose: () => void;\n}\n\nexport default function EditModal(props: EditModalProps) {\n const { event, onClose } = props;\n\n const { updateEntry } = useEntryActions();\n const [loading, setLoading] = useState(false);\n const inputRef = useRef<HTMLTextAreaElement[]>(new Array<HTMLTextAreaElement>());\n\n const handleSave = async () => {\n if (!inputRef.current) return;\n setLoading(true);\n\n const patchObject: Partial<OntimeEvent> = { id: event.id };\n\n inputRef.current.forEach((element) => {\n if (element.dataset.field && element.defaultValue != element.value) {\n if (patchObject.custom) {\n patchObject.custom[element.dataset.field] = element.value;\n } else {\n Object.assign(patchObject, { custom: { [element.dataset.field]: element.value } });\n }\n }\n });\n\n if (patchObject.custom) {\n await updateEntry(patchObject);\n }\n\n setLoading(false);\n onClose();\n };\n\n return (\n <Dialog.Root\n open\n onOpenChange={(isOpen) => {\n if (!isOpen) onClose();\n }}\n >\n <Dialog.Portal>\n <Dialog.Popup className={style.editModal}>\n <div className={style.title}>\n {`Editing fields in cue ${event.cue}`}\n <IconButton variant='subtle-white' onClick={onClose} disabled={loading}>\n <IoClose />\n </IconButton>\n </div>\n <div className={style.body}>\n {event.subscriptions.map((field) => {\n return (\n <Fragment key={field.id}>\n <label htmlFor={field.id} className={style.label} style={{ '--user-bg': field.colour }}>\n {field.label}\n </label>\n <Textarea\n name={field.id}\n ref={(element) => {\n if (element) inputRef.current.push(element);\n }}\n placeholder={`Add value for ${field.label} field`}\n defaultValue={field.value}\n data-field={field.id}\n disabled={loading}\n rows={5}\n />\n </Fragment>\n );\n })}\n </div>\n\n <div className={style.footer}>\n <Button variant='subtle' size='large' onClick={onClose} disabled={loading}>\n Cancel\n </Button>\n <Button variant='primary' size='large' onClick={handleSave} disabled={loading}>\n Save\n </Button>\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","/**\n * encapsulate logic related to showing a running timer\n */\n\nimport { MaybeNumber } from 'ontime-types';\nimport { removeLeadingZero, removeSeconds } from 'ontime-utils';\n\nimport { formattedTime } from '../../../overview/overview.utils';\n\ninterface RunningTimeProps {\n value: MaybeNumber;\n hideSeconds?: boolean;\n hideLeadingZero?: boolean;\n className?: string;\n}\n\nexport default function RunningTime(props: RunningTimeProps) {\n const { value, hideSeconds, hideLeadingZero, className } = props;\n let display = formattedTime(value, hideSeconds || hideLeadingZero ? 2 : 3);\n\n if (hideLeadingZero) {\n display = removeLeadingZero(display);\n }\n\n if (hideSeconds) {\n display = removeSeconds(display);\n }\n\n return <div className={className}>{display}</div>;\n}\n","import { memo, RefObject, SyntheticEvent } from 'react';\nimport { useLongPress } from '@mantine/hooks';\nimport { MILLIS_PER_MINUTE, MILLIS_PER_SECOND, millisToString } from 'ontime-utils';\n\nimport DelayIndicator from '../../../common/components/delay-indicator/DelayIndicator';\nimport { cx, getAccessibleColour } from '../../../common/utils/styleUtils';\nimport { formatDuration, useTimeUntilExpectedStart } from '../../../common/utils/time';\nimport RunningTime from '../../viewers/common/running-time/RunningTime';\nimport type { EditEvent, Subscribed } from '../operator.types';\n\nimport style from './OperatorEvent.module.scss';\n\ninterface OperatorEventProps {\n id: string;\n colour: string;\n cue: string;\n main: string;\n secondary: string;\n timeStart: number;\n duration: number;\n delay: number;\n dayOffset: number;\n isLinkedToLoaded: boolean;\n isSelected: boolean;\n isPast: boolean;\n selectedRef?: RefObject<HTMLDivElement | null>;\n showStart: boolean;\n subscribed: Subscribed;\n totalGap: number;\n onLongPress: (event: EditEvent) => void;\n}\n\nexport default memo(OperatorEvent);\nfunction OperatorEvent({\n id,\n colour,\n cue,\n main,\n secondary,\n timeStart,\n duration,\n delay,\n dayOffset,\n isLinkedToLoaded,\n isSelected,\n isPast,\n selectedRef,\n showStart,\n subscribed,\n totalGap,\n onLongPress,\n}: OperatorEventProps) {\n /**\n * gather behaviour for long press and context menu\n */\n const handleLongPress = (event?: SyntheticEvent) => {\n // we dont have an event out of useLongPress\n event?.preventDefault();\n if (subscribed) {\n onLongPress({ id, cue, subscriptions: subscribed });\n }\n };\n\n const mouseHandlers = useLongPress(handleLongPress);\n const cueColours = colour && getAccessibleColour(colour);\n\n const operatorClasses = cx([\n style.event,\n isSelected && style.running,\n isPast && style.past,\n ]);\n\n return (\n <div className={operatorClasses} data-testid={cue} ref={selectedRef} onContextMenu={handleLongPress} {...mouseHandlers}>\n <div className={style.binder} style={{ ...cueColours }}>\n <span className={style.cue}>{cue}</span>\n </div>\n\n <span className={style.mainField}>\n {showStart && <span className={style.plannedStart}>{millisToString(timeStart)}</span>}\n {main}\n </span>\n <span className={style.secondaryField}>{secondary}</span>\n <OperatorEventSchedule\n timeStart={timeStart}\n isPast={isPast}\n isSelected={isSelected}\n delay={delay}\n dayOffset={dayOffset}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n />\n <span className={style.runningTime}>\n <DelayIndicator delayValue={delay} />\n <RunningTime className={cx([isSelected && style.muted])} value={duration} hideLeadingZero />\n </span>\n\n <div className={style.fields}>\n {subscribed\n .filter((field) => field.value)\n .map((field) => {\n const fieldClasses = cx([style.field, !field.colour ? style.noColour : null]);\n return (\n <div key={field.id}>\n <span className={fieldClasses} style={{ backgroundColor: field.colour }}>\n {field.label}\n </span>\n <span className={style.value} style={{ color: field.colour }}>\n {field.value}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\ninterface OperatorEventScheduleProps {\n timeStart: number;\n isPast: boolean;\n isSelected: boolean;\n delay: number;\n dayOffset: number;\n totalGap: number;\n isLinkedToLoaded: boolean;\n}\nfunction OperatorEventSchedule({\n timeStart,\n isPast,\n isSelected,\n delay,\n dayOffset,\n totalGap,\n isLinkedToLoaded,\n}: OperatorEventScheduleProps) {\n if (isPast) {\n return <span className={style.timeUntil}>DONE</span>;\n }\n\n if (isSelected) {\n return <span className={style.timeUntil}>LIVE</span>;\n }\n\n return (\n <TimeUntil\n timeStart={timeStart}\n delay={delay}\n dayOffset={dayOffset}\n totalGap={totalGap}\n isLinkedToLoaded={isLinkedToLoaded}\n />\n );\n}\n\ninterface TimeUntilProps {\n timeStart: number;\n delay: number;\n dayOffset: number;\n totalGap: number;\n isLinkedToLoaded: boolean;\n}\nfunction TimeUntil({ timeStart, delay, dayOffset, totalGap, isLinkedToLoaded }: TimeUntilProps) {\n // we isolate this to avoid unnecessary re-renders\n const timeUntil = useTimeUntilExpectedStart({ timeStart, delay, dayOffset }, { totalGap, isLinkedToLoaded });\n\n const isDue = timeUntil < MILLIS_PER_SECOND;\n const timeUntilString = isDue ? 'DUE' : `${formatDuration(Math.abs(timeUntil), timeUntil > 2 * MILLIS_PER_MINUTE)}`;\n\n return <span className={style.timeUntil} data-testid='time-until'>{timeUntilString}</span>;\n}\n","import { memo } from 'react';\n\nimport style from './OperatorGroup.module.scss';\n\ninterface OperatorGroup {\n title: string;\n}\n\nexport default memo(OperatorGroup);\nfunction OperatorGroup({ title }: OperatorGroup) {\n return <div className={style.group}>{title}</div>;\n}\n","import { ViewSettings } from 'ontime-types';\n\nimport MultiPartProgressBar from '../../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport { useProgressData } from '../../../common/hooks/useSocket';\n\nimport styles from './StatusBar.module.scss';\n\ninterface StatusBarProgressProps {\n viewSettings: ViewSettings;\n}\n\nexport default function StatusBarProgress({ viewSettings }: StatusBarProgressProps) {\n const { current, duration, timeWarning, timeDanger } = useProgressData();\n\n return (\n <MultiPartProgressBar\n now={current}\n complete={duration}\n normalColor={viewSettings.normalColor}\n warning={timeWarning}\n warningColor={viewSettings.warningColor}\n danger={timeDanger}\n dangerColor={viewSettings.dangerColor}\n className={styles.progressOverride}\n ignoreCssOverride\n />\n );\n}\n","import { ClockOverview, TimerOverview } from '../../overview/composite/TimeElements';\n\nimport style from './StatusBar.module.scss';\n\nexport default function StatusBarTimers() {\n return (\n <div className={style.timers}>\n <TimerOverview className={style.runningTimer} />\n <ClockOverview className={style.timeNow} />\n </div>\n );\n}\n","import useViewSettings from '../../../common/hooks-query/useViewSettings';\n\nimport StatusBarProgress from './StatusBarProgress';\nimport StatusBarTimers from './StatusBarTimers';\n\nimport styles from './StatusBar.module.scss';\n\nexport default function StatusBar() {\n const { data } = useViewSettings();\n\n return (\n <div className={styles.statusBar}>\n <StatusBarTimers />\n {data && <StatusBarProgress viewSettings={data} />}\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\nimport { CustomFields, OntimeEvent } from 'ontime-types';\n\nimport { getTimeOption } from '../../common/components/view-params-editor/common.options';\nimport { OptionTitle } from '../../common/components/view-params-editor/constants';\nimport { ViewOption } from '../../common/components/view-params-editor/viewParams.types';\nimport {\n makeCustomFieldSelectOptions,\n makeOptionsFromCustomFields,\n} from '../../common/components/view-params-editor/viewParams.utils';\nimport { isStringBoolean } from '../viewers/common/viewUtils';\n\nexport const getOperatorOptions = (customFields: CustomFields, timeFormat: string): ViewOption[] => {\n const fieldOptions = makeOptionsFromCustomFields(customFields, [\n { value: 'none', label: 'None' },\n { value: 'title', label: 'Title' },\n { value: 'note', label: 'Note' },\n ]);\n const customFieldSelect = makeCustomFieldSelectOptions(customFields);\n\n return [\n { title: OptionTitle.ClockOptions, collapsible: true, options: [getTimeOption(timeFormat)] },\n {\n title: OptionTitle.DataSources,\n collapsible: true,\n options: [\n {\n id: 'main',\n title: 'Main data field',\n description: 'Field to be shown in the first line of text',\n type: 'option',\n values: fieldOptions,\n defaultValue: 'title',\n },\n {\n id: 'secondary-src',\n title: 'Secondary data field',\n description: 'Field to be shown in the second line of text',\n type: 'option',\n values: fieldOptions,\n defaultValue: 'none',\n },\n {\n id: 'subscribe',\n title: 'Highlight Fields',\n description: 'Choose custom fields to highlight',\n type: 'multi-option',\n values: customFieldSelect,\n },\n {\n id: 'shouldEdit',\n title: 'Edit custom field',\n description: 'Allows editing an highlighted custom field by long pressing',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n {\n title: OptionTitle.ElementVisibility,\n collapsible: true,\n options: [\n {\n id: 'hidePast',\n title: 'Hide Past Events',\n description: 'Whether to hide events that have passed',\n type: 'boolean',\n defaultValue: false,\n },\n {\n id: 'showStart',\n title: 'Show planned start',\n description: 'Whether to prepend the planned start to the items',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n ];\n};\n\ntype OperatorOptions = {\n mainSource: keyof OntimeEvent | null;\n secondarySource: keyof OntimeEvent | null;\n subscribe: string[];\n shouldEdit: boolean;\n hidePast: boolean;\n showStart: boolean;\n};\n\n/**\n * Utility extract the view options from URL Params\n * the names and fallback are manually matched with timerOptions\n */\nfunction getOptionsFromParams(searchParams: URLSearchParams): OperatorOptions {\n // we manually make an object that matches the key above\n return {\n mainSource: searchParams.get('main') as keyof OntimeEvent | null,\n secondarySource: searchParams.get('secondary-src') as keyof OntimeEvent | null,\n subscribe: searchParams.getAll('subscribe'),\n shouldEdit: isStringBoolean(searchParams.get('shouldEdit')),\n hidePast: isStringBoolean(searchParams.get('hidePast')),\n showStart: isStringBoolean(searchParams.get('showStart')),\n };\n}\n\n/**\n * Hook exposes the operator view options\n */\nexport function useOperatorOptions(): OperatorOptions {\n const [searchParams] = useSearchParams();\n const options = useMemo(() => getOptionsFromParams(searchParams), [searchParams]);\n return options;\n}\n","import { CustomFields, MaybeString, OntimeEvent } from 'ontime-types';\r\n\r\nimport { getPropertyValue } from '../viewers/common/viewUtils';\r\n\r\nimport type { Subscribed } from './operator.types';\r\n\r\nexport function getEventData(\r\n event: OntimeEvent,\r\n main: MaybeString,\r\n secondary: MaybeString,\r\n subscriptions: string[],\r\n customFields: CustomFields,\r\n) {\r\n const mainField = main ? getPropertyValue(event, main) ?? '' : event.title;\r\n const secondaryField = getPropertyValue(event, secondary) ?? '';\r\n\r\n // remove subscriptions that are not in customFields\r\n const sanitisedSubscriptions = subscriptions.filter((field) => Object.hasOwn(customFields, field));\r\n const subscribedData = sanitisedSubscriptions.reduce<Subscribed>((acc, id) => {\r\n const field = customFields[id];\r\n if (field) {\r\n acc.push({\r\n id,\r\n label: field.label,\r\n colour: field.colour,\r\n value: event.custom[id],\r\n });\r\n }\r\n return acc;\r\n }, []);\r\n\r\n return { mainField, secondaryField, subscribedData };\r\n}\r\n","import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { isOntimeEvent, isOntimeGroup, OntimeView } from 'ontime-types';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport useFollowComponent from '../../common/hooks/useFollowComponent';\nimport { useSelectedEventId } from '../../common/hooks/useSocket';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport { useRundownWithMetadata } from '../../common/hooks-query/useRundown';\nimport useSettings from '../../common/hooks-query/useSettings';\nimport { cx } from '../../common/utils/styleUtils';\nimport { throttle } from '../../common/utils/throttle';\nimport { getDefaultFormat } from '../../common/utils/time';\n\nimport EditModal from './edit-modal/EditModal';\nimport FollowButton from './follow-button/FollowButton';\nimport OperatorEvent from './operator-event/OperatorEvent';\nimport OperatorGroup from './operator-group/OperatorGroup';\nimport StatusBar from './status-bar/StatusBar';\nimport { getOperatorOptions, useOperatorOptions } from './operator.options';\nimport type { EditEvent } from './operator.types';\nimport { getEventData } from './operator.utils';\n\nimport style from './Operator.module.scss';\n\nconst selectedOffset = 50;\n\nexport default function Operator() {\n const { data, rundownMetadata, status } = useRundownWithMetadata();\n const { data: customFields, status: customFieldStatus } = useCustomFields();\n const { data: projectData, status: projectDataStatus } = useProjectData();\n\n const timeoutId = useRef<NodeJS.Timeout | null>(null);\n\n const { selectedEventId } = useSelectedEventId();\n const { subscribe, mainSource, secondarySource, shouldEdit, hidePast, showStart } = useOperatorOptions();\n const { data: settings } = useSettings();\n\n const [showEditPrompt, setShowEditPrompt] = useState(false);\n const [editEvent, setEditEvent] = useState<EditEvent | null>(null);\n\n const [lockAutoScroll, setLockAutoScroll] = useState(false);\n const selectedRef = useRef<HTMLDivElement | null>(null);\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const scrollToComponent = useFollowComponent({\n followRef: selectedRef,\n scrollRef,\n doFollow: !lockAutoScroll,\n topOffset: selectedOffset,\n followTrigger: selectedEventId,\n });\n\n useWindowTitle('Operator');\n\n // reset scroll if nothing is selected\n useEffect(() => {\n if (!selectedEventId) {\n if (!lockAutoScroll) {\n scrollRef.current?.scrollTo(0, 0);\n }\n }\n }, [selectedEventId, lockAutoScroll, scrollRef]);\n\n const handleOffset = () => {\n if (selectedEventId) {\n scrollToComponent();\n }\n setLockAutoScroll(false);\n };\n\n // prevent considering automated scrolls as user scrolls\n const handleUserScroll = () => {\n if (selectedRef?.current && scrollRef?.current) {\n const selectedRect = selectedRef.current.getBoundingClientRect();\n const scrollerRect = scrollRef.current.getBoundingClientRect();\n if (selectedRect && scrollerRect) {\n const distanceFromTop = selectedRect.top - scrollerRect.top;\n const hasScrolledOutOfThreshold = distanceFromTop < -8 || distanceFromTop > selectedOffset;\n setLockAutoScroll(hasScrolledOutOfThreshold);\n }\n }\n };\n const throttledHandleScroll = throttle(handleUserScroll, 1000);\n\n const handleScroll = () => {\n if (timeoutId.current) {\n clearTimeout(timeoutId.current);\n }\n timeoutId.current = setTimeout(() => {\n setShowEditPrompt(false);\n }, 700);\n\n setShowEditPrompt(true);\n\n throttledHandleScroll();\n };\n\n const handleEdit = useCallback((event: EditEvent) => {\n setEditEvent({ ...event });\n }, []);\n\n const missingData = !data || !customFields || !projectData;\n const isLoading = status === 'pending' || customFieldStatus === 'pending' || projectDataStatus === 'pending';\n\n // gather option data\n const defaultFormat = getDefaultFormat(settings?.timeFormat);\n const operatorOptions = useMemo(() => getOperatorOptions(customFields, defaultFormat), [customFields, defaultFormat]);\n\n if (missingData || isLoading) {\n return <EmptyPage text='Loading...' />;\n }\n\n const canEdit = shouldEdit && subscribe.length;\n\n return (\n <div className={style.operatorContainer} data-testid='operator-view'>\n <ViewParamsEditor target={OntimeView.Operator} viewOptions={operatorOptions} />\n {editEvent && <EditModal event={editEvent} onClose={() => setEditEvent(null)} />}\n\n <StatusBar />\n\n {canEdit && (\n <div className={cx([style.editPrompt, showEditPrompt && style.show])}>Press and hold to edit user field</div>\n )}\n\n <div className={style.operatorEvents} onWheel={handleScroll} onTouchMove={handleScroll} ref={scrollRef}>\n {data.order.map((entryId) => {\n const entry = data.entries[entryId];\n if (isOntimeEvent(entry)) {\n const { isPast, isLinkedToLoaded, isLoaded, totalGap } = rundownMetadata[entryId];\n // hide past events (if setting) and skipped events\n if ((hidePast && isPast) || entry.skip) {\n return null;\n }\n\n const { mainField, secondaryField, subscribedData } = getEventData(\n entry,\n mainSource,\n secondarySource,\n subscribe,\n customFields,\n );\n\n return (\n <OperatorEvent\n key={entry.id}\n id={entry.id}\n colour={entry.colour}\n cue={entry.cue}\n main={mainField}\n secondary={secondaryField}\n timeStart={entry.timeStart}\n duration={entry.duration}\n delay={entry.delay}\n dayOffset={entry.dayOffset}\n isLinkedToLoaded={isLinkedToLoaded}\n isSelected={isLoaded}\n isPast={isPast}\n selectedRef={isLoaded ? selectedRef : undefined}\n showStart={showStart}\n subscribed={subscribedData}\n totalGap={totalGap}\n onLongPress={canEdit ? handleEdit : () => undefined}\n />\n );\n }\n\n if (isOntimeGroup(entry)) {\n return (\n <Fragment key={entry.id}>\n <OperatorGroup key={entry.id} title={entry.title} />\n {entry.entries.map((nestedEntryId) => {\n const nestedEntry = data.entries[nestedEntryId];\n if (!isOntimeEvent(nestedEntry)) {\n return null;\n }\n\n const { isPast, isLoaded, isLinkedToLoaded, totalGap } = rundownMetadata[entryId];\n\n // hide past events (if setting) and skipped events\n if ((hidePast && isPast) || nestedEntry.skip) {\n return null;\n }\n\n const { mainField, secondaryField, subscribedData } = getEventData(\n nestedEntry,\n mainSource,\n secondarySource,\n subscribe,\n customFields,\n );\n\n return (\n <OperatorEvent\n key={nestedEntry.id}\n id={nestedEntry.id}\n colour={nestedEntry.colour}\n cue={nestedEntry.cue}\n main={mainField}\n secondary={secondaryField}\n timeStart={nestedEntry.timeStart}\n duration={nestedEntry.duration}\n delay={nestedEntry.delay}\n dayOffset={nestedEntry.dayOffset}\n isLinkedToLoaded={isLinkedToLoaded}\n isSelected={isLoaded}\n isPast={isPast}\n selectedRef={isLoaded ? selectedRef : undefined}\n showStart={showStart}\n subscribed={subscribedData}\n totalGap={totalGap}\n onLongPress={canEdit ? handleEdit : () => undefined}\n />\n );\n })}\n </Fragment>\n );\n }\n return null;\n })}\n </div>\n <FollowButton isVisible={lockAutoScroll} onClickHandler={handleOffset} />\n </div>\n );\n}\n","import ViewNavigationMenu from '../../common/components/navigation-menu/ViewNavigationMenu';\nimport ProtectRoute from '../../common/components/protect-route/ProtectRoute';\nimport { getIsNavigationLocked } from '../../externals';\n\nimport Operator from './Operator';\n\nexport default function OperatorExport() {\n return (\n <ProtectRoute permission='operator'>\n <ViewNavigationMenu isNavigationLocked={getIsNavigationLocked()} />\n <Operator />\n </ProtectRoute>\n );\n}\n"],"names":["EditModal","props","event","onClose","updateEntry","useEntryActions","loading","setLoading","useState","inputRef","useRef","handleSave","patchObject","element","jsx","Dialog.Root","isOpen","Dialog.Portal","jsxs","Dialog.Popup","style","IconButton","IoClose","field","Fragment","Textarea","Button","RunningTime","value","hideSeconds","hideLeadingZero","className","display","formattedTime","removeLeadingZero","removeSeconds","memo","OperatorEvent","id","colour","cue","main","secondary","timeStart","duration","delay","dayOffset","isLinkedToLoaded","isSelected","isPast","selectedRef","showStart","subscribed","totalGap","onLongPress","handleLongPress","mouseHandlers","useLongPress","cueColours","getAccessibleColour","operatorClasses","cx","millisToString","OperatorEventSchedule","DelayIndicator","fieldClasses","TimeUntil","timeUntil","useTimeUntilExpectedStart","timeUntilString","MILLIS_PER_SECOND","formatDuration","MILLIS_PER_MINUTE","OperatorGroup","title","StatusBarProgress","viewSettings","current","timeWarning","timeDanger","useProgressData","MultiPartProgressBar","styles","StatusBarTimers","TimerOverview","ClockOverview","StatusBar","data","useViewSettings","getOperatorOptions","customFields","timeFormat","fieldOptions","makeOptionsFromCustomFields","customFieldSelect","makeCustomFieldSelectOptions","OptionTitle","getTimeOption","getOptionsFromParams","searchParams","isStringBoolean","useOperatorOptions","useSearchParams","useMemo","getEventData","subscriptions","mainField","getPropertyValue","secondaryField","subscribedData","acc","selectedOffset","Operator","rundownMetadata","status","useRundownWithMetadata","customFieldStatus","useCustomFields","projectData","projectDataStatus","useProjectData","timeoutId","selectedEventId","useSelectedEventId","subscribe","mainSource","secondarySource","shouldEdit","hidePast","settings","useSettings","showEditPrompt","setShowEditPrompt","editEvent","setEditEvent","lockAutoScroll","setLockAutoScroll","scrollRef","scrollToComponent","useFollowComponent","useWindowTitle","useEffect","_a","handleOffset","throttledHandleScroll","throttle","selectedRect","scrollerRect","distanceFromTop","hasScrolledOutOfThreshold","handleScroll","handleEdit","useCallback","missingData","isLoading","defaultFormat","getDefaultFormat","operatorOptions","EmptyPage","canEdit","ViewParamsEditor","OntimeView","entryId","entry","isOntimeEvent","isLoaded","isOntimeGroup","nestedEntryId","nestedEntry","FollowButton","OperatorExport","ProtectRoute","ViewNavigationMenu","getIsNavigationLocked"],"mappings":"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"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|