@getontime/cli 4.3.0 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/assets/{Backstage-CDH53Q_N.js → Backstage-D2lEbqUt.js} +2 -2
- package/client/assets/Backstage-D2lEbqUt.js.br +0 -0
- package/client/assets/Backstage-D2lEbqUt.js.gz +0 -0
- package/client/assets/{Backstage-CDH53Q_N.js.map → Backstage-D2lEbqUt.js.map} +1 -1
- package/client/assets/{Countdown-B-MuMf1C.js → Countdown-VV03STbF.js} +2 -2
- package/client/assets/Countdown-VV03STbF.js.br +0 -0
- package/client/assets/Countdown-VV03STbF.js.gz +0 -0
- package/client/assets/{Countdown-B-MuMf1C.js.map → Countdown-VV03STbF.js.map} +1 -1
- package/client/assets/{CustomTranslationModal-DiQbmcgD.js → CustomTranslationModal-D1nM9W1Z.js} +2 -2
- package/client/assets/CustomTranslationModal-D1nM9W1Z.js.br +0 -0
- package/client/assets/CustomTranslationModal-D1nM9W1Z.js.gz +0 -0
- package/client/assets/{CustomTranslationModal-DiQbmcgD.js.map → CustomTranslationModal-D1nM9W1Z.js.map} +1 -1
- package/client/assets/{DelayIndicator-D--91EO3.js → DelayIndicator-Co5rMYw9.js} +2 -2
- package/client/assets/DelayIndicator-Co5rMYw9.js.br +0 -0
- package/client/assets/DelayIndicator-Co5rMYw9.js.gz +0 -0
- package/client/assets/{DelayIndicator-D--91EO3.js.map → DelayIndicator-Co5rMYw9.js.map} +1 -1
- package/client/assets/{EditorFeatureWrapper-DwXUAV4k.js → EditorFeatureWrapper-_t_4D7Es.js} +2 -2
- package/client/assets/EditorFeatureWrapper-_t_4D7Es.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-_t_4D7Es.js.gz +0 -0
- package/client/assets/{EditorFeatureWrapper-DwXUAV4k.js.map → EditorFeatureWrapper-_t_4D7Es.js.map} +1 -1
- package/client/assets/{EditorUtils-DuKjlUkF.js → EditorUtils-C3QoonjM.js} +2 -2
- package/client/assets/EditorUtils-C3QoonjM.js.br +0 -0
- package/client/assets/EditorUtils-C3QoonjM.js.gz +0 -0
- package/client/assets/{EditorUtils-DuKjlUkF.js.map → EditorUtils-C3QoonjM.js.map} +1 -1
- package/client/assets/{Empty-CJbZxh45.js → Empty-DJMjfXnt.js} +2 -2
- package/client/assets/Empty-DJMjfXnt.js.br +2 -0
- package/client/assets/Empty-DJMjfXnt.js.gz +0 -0
- package/client/assets/{Empty-CJbZxh45.js.map → Empty-DJMjfXnt.js.map} +1 -1
- package/client/assets/{EmptyPage-Bc358YpE.js → EmptyPage-BlXZqoIr.js} +2 -2
- package/client/assets/EmptyPage-BlXZqoIr.js.br +0 -0
- package/client/assets/EmptyPage-BlXZqoIr.js.gz +0 -0
- package/client/assets/{EmptyPage-Bc358YpE.js.map → EmptyPage-BlXZqoIr.js.map} +1 -1
- package/client/assets/{FollowButton-C6Fvaqh0.js → FollowButton-Dy5n1J2c.js} +2 -2
- package/client/assets/FollowButton-Dy5n1J2c.js.br +0 -0
- package/client/assets/FollowButton-Dy5n1J2c.js.gz +0 -0
- package/client/assets/{FollowButton-C6Fvaqh0.js.map → FollowButton-Dy5n1J2c.js.map} +1 -1
- package/client/assets/{MessageControlExport-GmOrvUik.js → MessageControlExport-CWQX8mH0.js} +3 -3
- package/client/assets/MessageControlExport-CWQX8mH0.js.br +0 -0
- package/client/assets/MessageControlExport-CWQX8mH0.js.gz +0 -0
- package/client/assets/{MessageControlExport-GmOrvUik.js.map → MessageControlExport-CWQX8mH0.js.map} +1 -1
- package/client/assets/{MilestoneEditor-BA0PVIQh.js → MilestoneEditor-CxWZdQ1B.js} +2 -2
- package/client/assets/MilestoneEditor-CxWZdQ1B.js.br +0 -0
- package/client/assets/MilestoneEditor-CxWZdQ1B.js.gz +0 -0
- package/client/assets/{MilestoneEditor-BA0PVIQh.js.map → MilestoneEditor-CxWZdQ1B.js.map} +1 -1
- package/client/assets/{Modal-BKx0PDGT.js → Modal-ePA-Go14.js} +2 -2
- package/client/assets/Modal-ePA-Go14.js.br +0 -0
- package/client/assets/Modal-ePA-Go14.js.gz +0 -0
- package/client/assets/{Modal-BKx0PDGT.js.map → Modal-ePA-Go14.js.map} +1 -1
- package/client/assets/{MultiPartProgressBar-BXdLxJpy.js → MultiPartProgressBar-GQaCHX4z.js} +2 -2
- package/client/assets/MultiPartProgressBar-GQaCHX4z.js.br +0 -0
- package/client/assets/MultiPartProgressBar-GQaCHX4z.js.gz +0 -0
- package/client/assets/{MultiPartProgressBar-BXdLxJpy.js.map → MultiPartProgressBar-GQaCHX4z.js.map} +1 -1
- package/client/assets/{OperatorExport-X7-qi2jv.js → OperatorExport-CRS08UXj.js} +2 -2
- package/client/assets/OperatorExport-CRS08UXj.js.br +0 -0
- package/client/assets/OperatorExport-CRS08UXj.js.gz +0 -0
- package/client/assets/{OperatorExport-X7-qi2jv.js.map → OperatorExport-CRS08UXj.js.map} +1 -1
- package/client/assets/{OverviewWrapper-BQb2xl_N.js → OverviewWrapper-BNRb3Ub_.js} +2 -2
- package/client/assets/OverviewWrapper-BNRb3Ub_.js.br +0 -0
- package/client/assets/OverviewWrapper-BNRb3Ub_.js.gz +0 -0
- package/client/assets/{OverviewWrapper-BQb2xl_N.js.map → OverviewWrapper-BNRb3Ub_.js.map} +1 -1
- package/client/assets/{PipHost-CvtlZIn7.js → PipHost-DNfEY6RN.js} +2 -2
- package/client/assets/PipHost-DNfEY6RN.js.br +0 -0
- package/client/assets/PipHost-DNfEY6RN.js.gz +0 -0
- package/client/assets/{PipHost-CvtlZIn7.js.map → PipHost-DNfEY6RN.js.map} +1 -1
- package/client/assets/{ProjectInfo-1tw48NHZ.js → ProjectInfo-KPf-pM8y.js} +2 -2
- package/client/assets/ProjectInfo-KPf-pM8y.js.br +0 -0
- package/client/assets/ProjectInfo-KPf-pM8y.js.gz +0 -0
- package/client/assets/{ProjectInfo-1tw48NHZ.js.map → ProjectInfo-KPf-pM8y.js.map} +1 -1
- package/client/assets/{ProtectRoute-BH-QvsU0.js → ProtectRoute-DW_vXgYI.js} +2 -2
- package/client/assets/ProtectRoute-DW_vXgYI.js.br +0 -0
- package/client/assets/ProtectRoute-DW_vXgYI.js.gz +0 -0
- package/client/assets/{ProtectRoute-BH-QvsU0.js.map → ProtectRoute-DW_vXgYI.js.map} +1 -1
- package/client/assets/{ProtectedCuesheet-CYBIcg1c.js → ProtectedCuesheet-CCVDLsK-.js} +2 -2
- package/client/assets/ProtectedCuesheet-CCVDLsK-.js.br +0 -0
- package/client/assets/ProtectedCuesheet-CCVDLsK-.js.gz +0 -0
- package/client/assets/{ProtectedCuesheet-CYBIcg1c.js.map → ProtectedCuesheet-CCVDLsK-.js.map} +1 -1
- package/client/assets/{ProtectedEditor-D_A75byA.js → ProtectedEditor-Ddu9vBS8.js} +3 -3
- package/client/assets/ProtectedEditor-Ddu9vBS8.js.br +0 -0
- package/client/assets/ProtectedEditor-Ddu9vBS8.js.gz +0 -0
- package/client/assets/ProtectedEditor-Ddu9vBS8.js.map +1 -0
- package/client/assets/{RundownEntry-bkqwx57t.js → RundownEntry-CpspmKD0.js} +2 -2
- package/client/assets/RundownEntry-CpspmKD0.js.br +0 -0
- package/client/assets/RundownEntry-CpspmKD0.js.gz +0 -0
- package/client/assets/{RundownEntry-bkqwx57t.js.map → RundownEntry-CpspmKD0.js.map} +1 -1
- package/client/assets/{RundownExport-EorsanA0.js → RundownExport-DhCryTUp.js} +3 -3
- package/client/assets/RundownExport-DhCryTUp.js.br +0 -0
- package/client/assets/RundownExport-DhCryTUp.js.gz +0 -0
- package/client/assets/{RundownExport-EorsanA0.js.map → RundownExport-DhCryTUp.js.map} +1 -1
- package/client/assets/{Select-BGGVCKqU.js → Select-ASOzxGFV.js} +2 -2
- package/client/assets/Select-ASOzxGFV.js.br +0 -0
- package/client/assets/Select-ASOzxGFV.js.gz +0 -0
- package/client/assets/{Select-BGGVCKqU.js.map → Select-ASOzxGFV.js.map} +1 -1
- package/client/assets/{Studio-BjNZ4l-W.js → Studio-D7evHV2Q.js} +2 -2
- package/client/assets/Studio-D7evHV2Q.js.br +0 -0
- package/client/assets/Studio-D7evHV2Q.js.gz +0 -0
- package/client/assets/{Studio-BjNZ4l-W.js.map → Studio-D7evHV2Q.js.map} +1 -1
- package/client/assets/{StyleEditor-CpciRLYh.js → StyleEditor-DYybY9tA.js} +2 -2
- package/client/assets/StyleEditor-DYybY9tA.js.br +0 -0
- package/client/assets/StyleEditor-DYybY9tA.js.gz +0 -0
- package/client/assets/{StyleEditor-CpciRLYh.js.map → StyleEditor-DYybY9tA.js.map} +1 -1
- package/client/assets/{SuperscriptPeriod-DsPdWN_s.js → SuperscriptPeriod-NmBzJhFK.js} +2 -2
- package/client/assets/SuperscriptPeriod-NmBzJhFK.js.br +0 -0
- package/client/assets/SuperscriptPeriod-NmBzJhFK.js.gz +0 -0
- package/client/assets/{SuperscriptPeriod-DsPdWN_s.js.map → SuperscriptPeriod-NmBzJhFK.js.map} +1 -1
- package/client/assets/{SuperscriptTime-CA6S2R55.js → SuperscriptTime-CA_8XRM6.js} +2 -2
- package/client/assets/SuperscriptTime-CA_8XRM6.js.br +0 -0
- package/client/assets/SuperscriptTime-CA_8XRM6.js.gz +0 -0
- package/client/assets/{SuperscriptTime-CA6S2R55.js.map → SuperscriptTime-CA_8XRM6.js.map} +1 -1
- package/client/assets/{SwatchPicker-Cm5Eicvv.js → SwatchPicker-C8eFQKBd.js} +2 -2
- package/client/assets/SwatchPicker-C8eFQKBd.js.br +0 -0
- package/client/assets/SwatchPicker-C8eFQKBd.js.gz +0 -0
- package/client/assets/{SwatchPicker-Cm5Eicvv.js.map → SwatchPicker-C8eFQKBd.js.map} +1 -1
- package/client/assets/{TimeElements-DbclWDbU.js → TimeElements-D3dl9gAM.js} +2 -2
- package/client/assets/TimeElements-D3dl9gAM.js.br +0 -0
- package/client/assets/TimeElements-D3dl9gAM.js.gz +0 -0
- package/client/assets/{TimeElements-DbclWDbU.js.map → TimeElements-D3dl9gAM.js.map} +1 -1
- package/client/assets/{TimeInput-C8DQoFXv.js → TimeInput-DR-NCEhH.js} +2 -2
- package/client/assets/TimeInput-DR-NCEhH.js.br +0 -0
- package/client/assets/TimeInput-DR-NCEhH.js.gz +0 -0
- package/client/assets/{TimeInput-C8DQoFXv.js.map → TimeInput-DR-NCEhH.js.map} +1 -1
- package/client/assets/{TimelinePage-Cgtl1qNp.js → TimelinePage-BfTV9IdT.js} +2 -2
- package/client/assets/TimelinePage-BfTV9IdT.js.br +0 -0
- package/client/assets/TimelinePage-BfTV9IdT.js.gz +0 -0
- package/client/assets/{TimelinePage-Cgtl1qNp.js.map → TimelinePage-BfTV9IdT.js.map} +1 -1
- package/client/assets/{Timer-BbixOGdj.js → Timer-DvqDm4yX.js} +2 -2
- package/client/assets/Timer-DvqDm4yX.js.br +0 -0
- package/client/assets/Timer-DvqDm4yX.js.gz +0 -0
- package/client/assets/{Timer-BbixOGdj.js.map → Timer-DvqDm4yX.js.map} +1 -1
- package/client/assets/{TimerControlExport-Dx3SSGNG.js → TimerControlExport-CQQ2KxqK.js} +2 -2
- package/client/assets/TimerControlExport-CQQ2KxqK.js.br +0 -0
- package/client/assets/TimerControlExport-CQQ2KxqK.js.gz +0 -0
- package/client/assets/{TimerControlExport-Dx3SSGNG.js.map → TimerControlExport-CQQ2KxqK.js.map} +1 -1
- package/client/assets/{TitleCard-Xdr7xwzU.js → TitleCard-AESdy7kI.js} +2 -2
- package/client/assets/TitleCard-AESdy7kI.js.br +0 -0
- package/client/assets/TitleCard-AESdy7kI.js.gz +0 -0
- package/client/assets/{TitleCard-Xdr7xwzU.js.map → TitleCard-AESdy7kI.js.map} +1 -1
- package/client/assets/{Tooltip-B5vsLcFu.js → Tooltip-BTK4bJkV.js} +2 -2
- package/client/assets/Tooltip-BTK4bJkV.js.br +0 -0
- package/client/assets/Tooltip-BTK4bJkV.js.gz +0 -0
- package/client/assets/{Tooltip-B5vsLcFu.js.map → Tooltip-BTK4bJkV.js.map} +1 -1
- package/client/assets/ViewLogo-BZVUUIZA.js +2 -0
- package/client/assets/ViewLogo-BZVUUIZA.js.br +0 -0
- package/client/assets/ViewLogo-BZVUUIZA.js.gz +0 -0
- package/client/assets/ViewLogo-BZVUUIZA.js.map +1 -0
- package/client/assets/{ViewParamsEditor-C2-TRP6e.js → ViewParamsEditor-CBnRitZ4.js} +2 -2
- package/client/assets/ViewParamsEditor-CBnRitZ4.js.br +0 -0
- package/client/assets/ViewParamsEditor-CBnRitZ4.js.gz +0 -0
- package/client/assets/{ViewParamsEditor-C2-TRP6e.js.map → ViewParamsEditor-CBnRitZ4.js.map} +1 -1
- package/client/assets/{dateConfig-D7xim1t4.js → dateConfig-Crm-Cu2y.js} +2 -2
- package/client/assets/dateConfig-Crm-Cu2y.js.br +0 -0
- package/client/assets/dateConfig-Crm-Cu2y.js.gz +0 -0
- package/client/assets/{dateConfig-D7xim1t4.js.map → dateConfig-Crm-Cu2y.js.map} +1 -1
- package/client/assets/{editorSettings-D2f7e1a6.js → editorSettings-CRJwIW7V.js} +2 -2
- package/client/assets/editorSettings-CRJwIW7V.js.br +0 -0
- package/client/assets/editorSettings-CRJwIW7V.js.gz +0 -0
- package/client/assets/{editorSettings-D2f7e1a6.js.map → editorSettings-CRJwIW7V.js.map} +1 -1
- package/client/assets/{getProgress-cLuBFPjh.js → getProgress-fD6vhbNF.js} +2 -2
- package/client/assets/getProgress-fD6vhbNF.js.br +0 -0
- package/client/assets/getProgress-fD6vhbNF.js.gz +0 -0
- package/client/assets/{getProgress-cLuBFPjh.js.map → getProgress-fD6vhbNF.js.map} +1 -1
- package/client/assets/{index-B81u4hxi.js → index-B1K7rED_.js} +3 -3
- package/client/assets/index-B1K7rED_.js.br +0 -0
- package/client/assets/index-B1K7rED_.js.gz +0 -0
- package/client/assets/index-B1K7rED_.js.map +1 -0
- package/client/assets/{index-D6S93MXv.css → index-BAvwULMi.css} +1 -1
- package/client/assets/index-BAvwULMi.css.br +0 -0
- package/client/assets/{index-D6S93MXv.css.gz → index-BAvwULMi.css.gz} +0 -0
- package/client/assets/{offset-R98EXhWK.js → offset-FplkvYRD.js} +2 -2
- package/client/assets/offset-FplkvYRD.js.br +0 -0
- package/client/assets/offset-FplkvYRD.js.gz +0 -0
- package/client/assets/{offset-R98EXhWK.js.map → offset-FplkvYRD.js.map} +1 -1
- package/client/assets/{parseUserTime-YeFR8t3F.js → parseUserTime-0pNWLcr0.js} +2 -2
- package/client/assets/parseUserTime-0pNWLcr0.js.br +0 -0
- package/client/assets/parseUserTime-0pNWLcr0.js.gz +0 -0
- package/client/assets/{parseUserTime-YeFR8t3F.js.map → parseUserTime-0pNWLcr0.js.map} +1 -1
- package/client/assets/{playbackstate-CPQdnF-k.js → playbackstate-1HCEpVh5.js} +2 -2
- package/client/assets/playbackstate-1HCEpVh5.js.br +0 -0
- package/client/assets/playbackstate-1HCEpVh5.js.gz +0 -0
- package/client/assets/{playbackstate-CPQdnF-k.js.map → playbackstate-1HCEpVh5.js.map} +1 -1
- package/client/assets/{presentation.utils-Cl-L3pHN.js → presentation.utils-CLt2UhON.js} +2 -2
- package/client/assets/presentation.utils-CLt2UhON.js.br +0 -0
- package/client/assets/presentation.utils-CLt2UhON.js.gz +0 -0
- package/client/assets/{presentation.utils-Cl-L3pHN.js.map → presentation.utils-CLt2UhON.js.map} +1 -1
- package/client/assets/{rundownUtils-CtVGQDQn.js → rundownUtils-D1oJpMdx.js} +2 -2
- package/client/assets/rundownUtils-D1oJpMdx.js.br +0 -0
- package/client/assets/rundownUtils-D1oJpMdx.js.gz +0 -0
- package/client/assets/{rundownUtils-CtVGQDQn.js.map → rundownUtils-D1oJpMdx.js.map} +1 -1
- package/client/assets/{timer.utils-rGyI9NYa.js → timer.utils-FiqT1yNa.js} +2 -2
- package/client/assets/timer.utils-FiqT1yNa.js.br +0 -0
- package/client/assets/timer.utils-FiqT1yNa.js.gz +0 -0
- package/client/assets/{timer.utils-rGyI9NYa.js.map → timer.utils-FiqT1yNa.js.map} +1 -1
- package/client/assets/{useCustomFields-k4piRt9n.js → useCustomFields-nW-_Zyfw.js} +2 -2
- package/client/assets/useCustomFields-nW-_Zyfw.js.br +0 -0
- package/client/assets/useCustomFields-nW-_Zyfw.js.gz +0 -0
- package/client/assets/{useCustomFields-k4piRt9n.js.map → useCustomFields-nW-_Zyfw.js.map} +1 -1
- package/client/assets/{useFollowComponent-B7vvPzG2.js → useFollowComponent-4cbKEsVz.js} +2 -2
- package/client/assets/useFollowComponent-4cbKEsVz.js.br +0 -0
- package/client/assets/useFollowComponent-4cbKEsVz.js.gz +0 -0
- package/client/assets/{useFollowComponent-B7vvPzG2.js.map → useFollowComponent-4cbKEsVz.js.map} +1 -1
- package/client/assets/{useProjectData-DdgKoYzk.js → useProjectData-DP-pr73E.js} +2 -2
- package/client/assets/useProjectData-DP-pr73E.js.br +0 -0
- package/client/assets/useProjectData-DP-pr73E.js.gz +0 -0
- package/client/assets/{useProjectData-DdgKoYzk.js.map → useProjectData-DP-pr73E.js.map} +1 -1
- package/client/assets/{useReport-DSuFnUb9.js → useReport-6XA_s2Vc.js} +2 -2
- package/client/assets/useReport-6XA_s2Vc.js.br +0 -0
- package/client/assets/useReport-6XA_s2Vc.js.gz +0 -0
- package/client/assets/{useReport-DSuFnUb9.js.map → useReport-6XA_s2Vc.js.map} +1 -1
- package/client/assets/{useRundown-Bn6ZPsz0.js → useRundown-BGhL8DEI.js} +2 -2
- package/client/assets/useRundown-BGhL8DEI.js.br +0 -0
- package/client/assets/useRundown-BGhL8DEI.js.gz +0 -0
- package/client/assets/{useRundown-Bn6ZPsz0.js.map → useRundown-BGhL8DEI.js.map} +1 -1
- package/client/assets/{useWindowTitle-Bpmo_HzW.js → useWindowTitle-ahZQIheF.js} +2 -2
- package/client/assets/useWindowTitle-ahZQIheF.js.br +0 -0
- package/client/assets/useWindowTitle-ahZQIheF.js.gz +0 -0
- package/client/assets/{useWindowTitle-Bpmo_HzW.js.map → useWindowTitle-ahZQIheF.js.map} +1 -1
- package/client/assets/{validateEvent-Do8yE_DJ.js → validateEvent-jVIMKhmx.js} +2 -2
- package/client/assets/validateEvent-jVIMKhmx.js.br +0 -0
- package/client/assets/validateEvent-jVIMKhmx.js.gz +0 -0
- package/client/assets/{validateEvent-Do8yE_DJ.js.map → validateEvent-jVIMKhmx.js.map} +1 -1
- package/client/assets/{vendor-q6fv0YT2.js → vendor-DmGkEtRj.js} +2 -2
- package/client/assets/vendor-DmGkEtRj.js.br +0 -0
- package/client/assets/vendor-DmGkEtRj.js.gz +0 -0
- package/client/assets/{vendor-q6fv0YT2.js.map → vendor-DmGkEtRj.js.map} +1 -1
- package/client/assets/{viewLoader.utils-b42scp-I.js → viewLoader.utils-Bniie8Op.js} +2 -2
- package/client/assets/viewLoader.utils-Bniie8Op.js.br +0 -0
- package/client/assets/viewLoader.utils-Bniie8Op.js.gz +0 -0
- package/client/assets/{viewLoader.utils-b42scp-I.js.map → viewLoader.utils-Bniie8Op.js.map} +1 -1
- package/client/assets/{viewUtils-B8Dr4GHH.js → viewUtils-VNLYoR28.js} +2 -2
- package/client/assets/viewUtils-VNLYoR28.js.br +0 -0
- package/client/assets/viewUtils-VNLYoR28.js.gz +0 -0
- package/client/assets/{viewUtils-B8Dr4GHH.js.map → viewUtils-VNLYoR28.js.map} +1 -1
- package/client/index.html +3 -3
- package/package.json +1 -1
- package/server/index.cjs +74 -74
- package/client/assets/Backstage-CDH53Q_N.js.br +0 -0
- package/client/assets/Backstage-CDH53Q_N.js.gz +0 -0
- package/client/assets/Countdown-B-MuMf1C.js.br +0 -0
- package/client/assets/Countdown-B-MuMf1C.js.gz +0 -0
- package/client/assets/CustomTranslationModal-DiQbmcgD.js.br +0 -0
- package/client/assets/CustomTranslationModal-DiQbmcgD.js.gz +0 -0
- package/client/assets/DelayIndicator-D--91EO3.js.br +0 -0
- package/client/assets/DelayIndicator-D--91EO3.js.gz +0 -0
- package/client/assets/EditorFeatureWrapper-DwXUAV4k.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-DwXUAV4k.js.gz +0 -0
- package/client/assets/EditorUtils-DuKjlUkF.js.br +0 -0
- package/client/assets/EditorUtils-DuKjlUkF.js.gz +0 -0
- package/client/assets/Empty-CJbZxh45.js.br +0 -0
- package/client/assets/Empty-CJbZxh45.js.gz +0 -0
- package/client/assets/EmptyPage-Bc358YpE.js.br +0 -5
- package/client/assets/EmptyPage-Bc358YpE.js.gz +0 -0
- package/client/assets/FollowButton-C6Fvaqh0.js.br +0 -0
- package/client/assets/FollowButton-C6Fvaqh0.js.gz +0 -0
- package/client/assets/MessageControlExport-GmOrvUik.js.br +0 -0
- package/client/assets/MessageControlExport-GmOrvUik.js.gz +0 -0
- package/client/assets/MilestoneEditor-BA0PVIQh.js.br +0 -0
- package/client/assets/MilestoneEditor-BA0PVIQh.js.gz +0 -0
- package/client/assets/Modal-BKx0PDGT.js.br +0 -0
- package/client/assets/Modal-BKx0PDGT.js.gz +0 -0
- package/client/assets/MultiPartProgressBar-BXdLxJpy.js.br +0 -0
- package/client/assets/MultiPartProgressBar-BXdLxJpy.js.gz +0 -0
- package/client/assets/OperatorExport-X7-qi2jv.js.br +0 -0
- package/client/assets/OperatorExport-X7-qi2jv.js.gz +0 -0
- package/client/assets/OverviewWrapper-BQb2xl_N.js.br +0 -0
- package/client/assets/OverviewWrapper-BQb2xl_N.js.gz +0 -0
- package/client/assets/PipHost-CvtlZIn7.js.br +0 -0
- package/client/assets/PipHost-CvtlZIn7.js.gz +0 -0
- package/client/assets/ProjectInfo-1tw48NHZ.js.br +0 -0
- package/client/assets/ProjectInfo-1tw48NHZ.js.gz +0 -0
- package/client/assets/ProtectRoute-BH-QvsU0.js.br +0 -0
- package/client/assets/ProtectRoute-BH-QvsU0.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-CYBIcg1c.js.br +0 -0
- package/client/assets/ProtectedCuesheet-CYBIcg1c.js.gz +0 -0
- package/client/assets/ProtectedEditor-D_A75byA.js.br +0 -0
- package/client/assets/ProtectedEditor-D_A75byA.js.gz +0 -0
- package/client/assets/ProtectedEditor-D_A75byA.js.map +0 -1
- package/client/assets/RundownEntry-bkqwx57t.js.br +0 -0
- package/client/assets/RundownEntry-bkqwx57t.js.gz +0 -0
- package/client/assets/RundownExport-EorsanA0.js.br +0 -0
- package/client/assets/RundownExport-EorsanA0.js.gz +0 -0
- package/client/assets/Select-BGGVCKqU.js.br +0 -0
- package/client/assets/Select-BGGVCKqU.js.gz +0 -0
- package/client/assets/Studio-BjNZ4l-W.js.br +0 -0
- package/client/assets/Studio-BjNZ4l-W.js.gz +0 -0
- package/client/assets/StyleEditor-CpciRLYh.js.br +0 -0
- package/client/assets/StyleEditor-CpciRLYh.js.gz +0 -0
- package/client/assets/SuperscriptPeriod-DsPdWN_s.js.br +0 -0
- package/client/assets/SuperscriptPeriod-DsPdWN_s.js.gz +0 -0
- package/client/assets/SuperscriptTime-CA6S2R55.js.br +0 -0
- package/client/assets/SuperscriptTime-CA6S2R55.js.gz +0 -0
- package/client/assets/SwatchPicker-Cm5Eicvv.js.br +0 -0
- package/client/assets/SwatchPicker-Cm5Eicvv.js.gz +0 -0
- package/client/assets/TimeElements-DbclWDbU.js.br +0 -0
- package/client/assets/TimeElements-DbclWDbU.js.gz +0 -0
- package/client/assets/TimeInput-C8DQoFXv.js.br +0 -0
- package/client/assets/TimeInput-C8DQoFXv.js.gz +0 -0
- package/client/assets/TimelinePage-Cgtl1qNp.js.br +0 -0
- package/client/assets/TimelinePage-Cgtl1qNp.js.gz +0 -0
- package/client/assets/Timer-BbixOGdj.js.br +0 -0
- package/client/assets/Timer-BbixOGdj.js.gz +0 -0
- package/client/assets/TimerControlExport-Dx3SSGNG.js.br +0 -0
- package/client/assets/TimerControlExport-Dx3SSGNG.js.gz +0 -0
- package/client/assets/TitleCard-Xdr7xwzU.js.br +0 -0
- package/client/assets/TitleCard-Xdr7xwzU.js.gz +0 -0
- package/client/assets/Tooltip-B5vsLcFu.js.br +0 -0
- package/client/assets/Tooltip-B5vsLcFu.js.gz +0 -0
- package/client/assets/ViewLogo-G7EosFIr.js +0 -2
- package/client/assets/ViewLogo-G7EosFIr.js.br +0 -0
- package/client/assets/ViewLogo-G7EosFIr.js.gz +0 -0
- package/client/assets/ViewLogo-G7EosFIr.js.map +0 -1
- package/client/assets/ViewParamsEditor-C2-TRP6e.js.br +0 -0
- package/client/assets/ViewParamsEditor-C2-TRP6e.js.gz +0 -0
- package/client/assets/dateConfig-D7xim1t4.js.br +0 -0
- package/client/assets/dateConfig-D7xim1t4.js.gz +0 -0
- package/client/assets/editorSettings-D2f7e1a6.js.br +0 -0
- package/client/assets/editorSettings-D2f7e1a6.js.gz +0 -0
- package/client/assets/getProgress-cLuBFPjh.js.br +0 -0
- package/client/assets/getProgress-cLuBFPjh.js.gz +0 -0
- package/client/assets/index-B81u4hxi.js.br +0 -0
- package/client/assets/index-B81u4hxi.js.gz +0 -0
- package/client/assets/index-B81u4hxi.js.map +0 -1
- package/client/assets/index-D6S93MXv.css.br +0 -0
- package/client/assets/offset-R98EXhWK.js.br +0 -0
- package/client/assets/offset-R98EXhWK.js.gz +0 -0
- package/client/assets/parseUserTime-YeFR8t3F.js.br +0 -0
- package/client/assets/parseUserTime-YeFR8t3F.js.gz +0 -0
- package/client/assets/playbackstate-CPQdnF-k.js.br +0 -0
- package/client/assets/playbackstate-CPQdnF-k.js.gz +0 -0
- package/client/assets/presentation.utils-Cl-L3pHN.js.br +0 -0
- package/client/assets/presentation.utils-Cl-L3pHN.js.gz +0 -0
- package/client/assets/rundownUtils-CtVGQDQn.js.br +0 -0
- package/client/assets/rundownUtils-CtVGQDQn.js.gz +0 -0
- package/client/assets/timer.utils-rGyI9NYa.js.br +0 -0
- package/client/assets/timer.utils-rGyI9NYa.js.gz +0 -0
- package/client/assets/useCustomFields-k4piRt9n.js.br +0 -0
- package/client/assets/useCustomFields-k4piRt9n.js.gz +0 -0
- package/client/assets/useFollowComponent-B7vvPzG2.js.br +0 -0
- package/client/assets/useFollowComponent-B7vvPzG2.js.gz +0 -0
- package/client/assets/useProjectData-DdgKoYzk.js.br +0 -0
- package/client/assets/useProjectData-DdgKoYzk.js.gz +0 -0
- package/client/assets/useReport-DSuFnUb9.js.br +0 -0
- package/client/assets/useReport-DSuFnUb9.js.gz +0 -0
- package/client/assets/useRundown-Bn6ZPsz0.js.br +0 -0
- package/client/assets/useRundown-Bn6ZPsz0.js.gz +0 -0
- package/client/assets/useWindowTitle-Bpmo_HzW.js.br +0 -0
- package/client/assets/useWindowTitle-Bpmo_HzW.js.gz +0 -0
- package/client/assets/validateEvent-Do8yE_DJ.js.br +0 -3
- package/client/assets/validateEvent-Do8yE_DJ.js.gz +0 -0
- package/client/assets/vendor-q6fv0YT2.js.br +0 -0
- package/client/assets/vendor-q6fv0YT2.js.gz +0 -0
- package/client/assets/viewLoader.utils-b42scp-I.js.br +0 -0
- package/client/assets/viewLoader.utils-b42scp-I.js.gz +0 -0
- package/client/assets/viewUtils-B8Dr4GHH.js.br +0 -0
- package/client/assets/viewUtils-B8Dr4GHH.js.gz +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e,bV as n,bW as d,bX as _,bY as m,bZ as f,b_ as j,b$ as u,c0 as b,c1 as I,c2 as p,c3 as x,c4 as S,c5 as g,A as h,c6 as w,c7 as y}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=Select-
|
|
1
|
+
import{j as e,bV as n,bW as d,bX as _,bY as m,bZ as f,b_ as j,b$ as u,c0 as b,c1 as I,c2 as p,c3 as x,c4 as S,c5 as g,A as h,c6 as w,c7 as y}from"./vendor-DmGkEtRj.js";import{e as N}from"./index-B1K7rED_.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},i=new t.Error().stack;i&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[i]="0ec3226b-dac7-429f-90ff-5a0a7584b909",t._sentryDebugIdIdentifier="sentry-dbid-0ec3226b-dac7-429f-90ff-5a0a7584b909")}catch{}})();const A="_blink_fi0ij_1",k="_fourtyfive_fi0ij_13",D="_select_fi0ij_17",L="_medium_fi0ij_51",v="_large_fi0ij_55",T="_fluid_fi0ij_59",P="_selectIcon_fi0ij_63",C="_popup_fi0ij_67",E="_list_fi0ij_82",R="_item_fi0ij_92",U="_itemIndicator_fi0ij_110",V="_itemIndicatorIcon_fi0ij_114",W="_itemLabel_fi0ij_120",X="_scrollArrow_fi0ij_124",s={blink:A,fourtyfive:k,select:D,medium:L,large:v,fluid:T,selectIcon:P,popup:C,list:E,item:R,itemIndicator:U,itemIndicatorIcon:V,itemLabel:W,scrollArrow:X};function $({options:t,fluid:i,size:c="medium",...o}){return e.jsxs(n,{items:t,...o,children:[e.jsxs(d,{className:N([s.select,s[c],i&&s.fluid]),children:[e.jsx(_,{}),e.jsx(m,{className:s.selectIcon,children:e.jsx(f,{})})]}),e.jsx(j,{children:e.jsxs(u,{side:"bottom",align:"start",children:[e.jsx(b,{className:s.scrollArrow}),e.jsxs(I,{className:s.popup,children:[e.jsx(p,{}),e.jsx(x,{className:s.list,children:t.map(({disabled:r,label:a,value:l})=>e.jsxs(S,{className:s.item,value:l,disabled:r,children:[e.jsx(g,{className:s.itemIndicator,children:e.jsx(h,{className:s.itemIndicatorIcon})}),e.jsx(w,{className:s.itemLabel,children:a})]},String(l)))})]}),e.jsx(y,{className:s.scrollArrow})]})})]})}export{$ as S};
|
|
2
|
+
//# sourceMappingURL=Select-ASOzxGFV.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select-
|
|
1
|
+
{"version":3,"file":"Select-ASOzxGFV.js","sources":["../../src/common/components/select/Select.tsx"],"sourcesContent":["import { IoCheckmark } from 'react-icons/io5';\nimport { LuChevronsUpDown } from 'react-icons/lu';\nimport { Select as BaseSelect } from '@base-ui/react/select';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport styles from './Select.module.scss';\n\nexport type SelectOption<T = string> = {\n value: T;\n label: string;\n disabled?: boolean;\n};\n\ninterface SelectProps<T> extends Omit<BaseSelect.Root.Props<T>, 'items'> {\n options: SelectOption<T>[];\n fluid?: boolean;\n size?: 'medium' | 'large';\n}\n\nexport default function Select<T>({ options, fluid, size = 'medium', ...selectRootProps }: SelectProps<T>) {\n return (\n <BaseSelect.Root items={options} {...selectRootProps}>\n <BaseSelect.Trigger className={cx([styles.select, styles[size], fluid && styles.fluid])}>\n <BaseSelect.Value />\n <BaseSelect.Icon className={styles.selectIcon}>\n <LuChevronsUpDown />\n </BaseSelect.Icon>\n </BaseSelect.Trigger>\n <BaseSelect.Portal>\n <BaseSelect.Positioner side='bottom' align='start'>\n <BaseSelect.ScrollUpArrow className={styles.scrollArrow} />\n <BaseSelect.Popup className={styles.popup}>\n <BaseSelect.Arrow />\n <BaseSelect.List className={styles.list}>\n {options.map(({ disabled, label, value }) => (\n <BaseSelect.Item key={String(value)} className={styles.item} value={value} disabled={disabled}>\n <BaseSelect.ItemIndicator className={styles.itemIndicator}>\n <IoCheckmark className={styles.itemIndicatorIcon} />\n </BaseSelect.ItemIndicator>\n <BaseSelect.ItemText className={styles.itemLabel}>{label}</BaseSelect.ItemText>\n </BaseSelect.Item>\n ))}\n </BaseSelect.List>\n </BaseSelect.Popup>\n <BaseSelect.ScrollDownArrow className={styles.scrollArrow} />\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n </BaseSelect.Root>\n );\n}\n"],"names":["Select","options","fluid","size","selectRootProps","BaseSelect.Root","jsxs","BaseSelect.Trigger","cx","styles","select","jsx","BaseSelect.Value","BaseSelect.Icon","selectIcon","LuChevronsUpDown","BaseSelect.Portal","BaseSelect.Positioner","BaseSelect.ScrollUpArrow","scrollArrow","BaseSelect.Popup","popup","BaseSelect.Arrow","BaseSelect.List","list","map","disabled","label","value","BaseSelect.Item","item","BaseSelect.ItemIndicator","itemIndicator","IoCheckmark","itemIndicatorIcon","BaseSelect.ItemText","itemLabel","String","BaseSelect.ScrollDownArrow"],"mappings":"+gCAoBA,SAAwBA,EAAU,CAAEC,QAAAA,EAASC,MAAAA,EAAOC,KAAAA,EAAO,SAAU,GAAGC,CAAgC,EAAG,CACzG,cACGC,EAAA,CAAgB,MAAOJ,EAAS,GAAIG,EACnC,SAAA,CAAAE,EAAA,KAACC,EAAA,CAAmB,UAAWC,EAAG,CAACC,EAAOC,OAAQD,EAAON,CAAI,EAAGD,GAASO,EAAOP,KAAK,CAAC,EACpF,SAAA,CAACS,EAAA,IAAAC,EAAA,EAAgB,EACjBD,MAACE,EAAA,CAAgB,UAAWJ,EAAOK,WACjC,SAACH,EAAA,IAAAI,EAAA,CAAA,CAAgB,CACnB,CAAA,CAAA,EACF,EACAJ,EAAAA,IAACK,EAAA,CACC,SAAAV,OAACW,EAAA,CAAsB,KAAK,SAAS,MAAM,QACzC,SAAA,CAAAN,EAAAA,IAACO,EAAA,CAAyB,UAAWT,EAAOU,WAAY,CAAA,SACvDC,EAAA,CAAiB,UAAWX,EAAOY,MAClC,SAAA,CAACV,EAAA,IAAAW,EAAA,EAAgB,EACjBX,MAACY,EAAA,CAAgB,UAAWd,EAAOe,KAChCvB,SAAQwB,EAAAA,IAAI,CAAC,CAAEC,SAAAA,EAAUC,MAAAA,EAAOC,MAAAA,CAAAA,WAC9BC,EAAA,CAAoC,UAAWpB,EAAOqB,KAAM,MAAAF,EAAc,SAAAF,EACzE,SAAA,CAACf,EAAAA,IAAAoB,EAAA,CAAyB,UAAWtB,EAAOuB,cAC1C,SAAArB,MAACsB,EAAY,CAAA,UAAWxB,EAAOyB,iBAAAA,CAAkB,CACnD,CAAA,QACCC,EAAA,CAAoB,UAAW1B,EAAO2B,UAAYT,SAAMA,CAAA,CAAA,CAAA,CAAA,EAJrCU,OAAOT,CAAK,CAKlC,CACD,CACH,CAAA,CAAA,EACF,QACCU,EAAA,CAA2B,UAAW7B,EAAOU,WAAY,CAAA,CAAA,CAAA,CAC5D,CACF,CAAA,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{l as k,h as j,j as e}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=Studio-
|
|
1
|
+
import{l as k,h as j,j as e}from"./vendor-DmGkEtRj.js";import{P as w,f as m,C as T,D as O,E as C,h as N,e as d,m as x,d as E,G as A,y as f,H as P,u as I,a as M,b as F,L as V,g as D,O as L}from"./index-B1K7rED_.js";import{E as H}from"./EmptyPage-BlXZqoIr.js";import{V as R}from"./ViewLogo-BZVUUIZA.js";import{O as g,V as W}from"./ViewParamsEditor-CBnRitZ4.js";import{u as z}from"./useWindowTitle-ahZQIheF.js";import{g as B,a as $}from"./viewLoader.utils-Bniie8Op.js";import{i as G}from"./viewUtils-VNLYoR28.js";import{S as Q}from"./SuperscriptTime-CA_8XRM6.js";import{a as U,g as X}from"./offset-FplkvYRD.js";import{g as Y}from"./presentation.utils-CLt2UhON.js";import{u as q}from"./useProjectData-DP-pr73E.js";import"./Empty-DJMjfXnt.js";import"./Select-ASOzxGFV.js";import"./SwatchPicker-C8eFQKBd.js";/* empty css */(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new s.Error().stack;t&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[t]="933e1c46-968a-40b2-86dc-5094c62646a9",s._sentryDebugIdIdentifier="sentry-dbid-933e1c46-968a-40b2-86dc-5094c62646a9")}catch{}})();const J=s=>[{title:g.ClockOptions,collapsible:!0,options:[B(s)]},{title:g.ElementVisibility,collapsible:!0,options:[{id:"hideCards",title:"Hide cards section",description:"Hides the card section with the timers",type:"boolean",defaultValue:!1}]}];function K(s,t){return{hideCards:G((a=>(t==null?void 0:t.get(a))??s.get(a))("hideCards"))}}function Z(){const[s]=k(),t=j.use(w);return j.useMemo(()=>{const a=t?new URLSearchParams(t.search):void 0;return K(s,a)},[t,s])}function ee(s){const[t,i]=(()=>{const a=m(s);return a.endsWith("AM")?[a.slice(0,-2),"AM"]:a.endsWith("PM")?[a.slice(0,-2),"PM"]:[a,void 0]})();return{seconds:T(s),display:t,meridian:i}}const se=[...Array(12).keys()],te=[...Array(60).keys()];function ae({hideCards:s}){const t=O(),{clock:i,playback:a}=C(),r=a!==N.Stop;if(t&&!s)return e.jsx(ie,{clock:i,onAir:r});const{seconds:c,display:n,meridian:l}=ee(i);return e.jsx("div",{className:"studio__clock",children:e.jsxs("div",{className:"clock-container",children:[te.map(o=>e.jsx("div",{className:d(["tick",o<=c&&"tick--active"]),style:{transform:`rotate(${180+o*6}deg) translateY(var(--half-size))`}},o)),se.map(o=>e.jsx("div",{className:"tick tick--active",style:{transform:`rotate(${180+o*30}deg) translateX(var(--smaller-half-size))`}},o)),e.jsx("div",{className:d(["ampm",!!l&&"ampm--active"]),children:l}),e.jsx("div",{className:"time time--large",children:n}),e.jsx("div",{className:d(["on-air",r&&"on-air--active"]),children:"ON AIR"})]})})}function ie({clock:s,onAir:t}){const i=m(s);return e.jsxs("div",{className:"studio__clock studio__clock--small",children:[e.jsx(Q,{className:"time time--small",time:i}),e.jsx("div",{className:d(["on-air",t&&"on-air--active"]),children:"ON AIR"})]})}const h={format12:"h:mm a",format24:"HH:mm"};function re(s){return{actualStart:m(s.actualStart,h),expectedEnd:m(s.expectedEnd,h),offset:U(s.offset)}}function ce(s,t){return{title:(s==null?void 0:s.title)||"-",startedAt:m(t.startedAt,h),expectedEnd:m(t.expectedFinish,h),timer:x(t.current)}}function de({viewSettings:s}){const{getLocalizedString:t}=E(),{eventNow:i,eventNext:a,message:r,time:c,offset:n,rundown:l,expectedRundownEnd:o}=A(),v=re({offset:n,actualStart:l.actualStart,expectedEnd:o}),u=ce(i,c),S=(a==null?void 0:a.title)||"-",b=r.timer.visible&&r.timer.text||"-",p=r.timer.secondarySource==="secondary"&&r.secondary||"-",y=Y(s,void 0,c.phase===f.Warning,c.phase===f.Danger),_=X(n);return e.jsxs("div",{className:"studio__timers",children:[e.jsx("div",{className:"card",id:"card-schedule",children:e.jsxs("div",{className:"card__row",children:[e.jsxs("div",{children:[e.jsx("div",{className:"label",children:t("common.started_at")}),e.jsx("div",{className:"runtime-timer",children:v.actualStart})]}),e.jsxs("div",{children:[e.jsx("div",{className:"label center",children:"Over / under"}),e.jsx("div",{className:d(["runtime-timer","center",!i&&"muted",_]),children:v.offset})]}),e.jsxs("div",{children:[e.jsx("div",{className:"label right",children:t("common.expected_end")}),e.jsx("div",{className:"runtime-timer right",children:v.expectedEnd})]})]})}),e.jsxs("div",{className:"card",id:"card-event-now",children:[e.jsxs("div",{className:"card__row",children:[e.jsxs("div",{children:[e.jsx("div",{className:"label",children:t("common.now")}),e.jsx("div",{className:"title",children:u.title})]}),e.jsxs("div",{children:[e.jsx("div",{className:"label right",children:t("common.next")}),e.jsx("div",{className:"title right",children:S})]})]}),e.jsxs("div",{className:"card__row",children:[e.jsxs("div",{children:[e.jsx("div",{className:"label",children:t("common.started_at")}),e.jsx("div",{className:"runtime-timer",children:u.startedAt})]}),e.jsxs("div",{children:[e.jsx("div",{className:"label"}),e.jsx("div",{className:d(["event-timer",c.phase===f.Overtime&&"event-timer--finished",c.playback===N.Pause&&"event-timer--paused"]),style:{"--phase-color":y},"data-phase":c.phase,children:u.timer})]}),e.jsxs("div",{children:[e.jsx("div",{className:"label right",children:t("common.expected_end")}),e.jsx("div",{className:"runtime-timer right",children:u.expectedEnd})]})]})]}),e.jsx(ne,{}),e.jsx("div",{className:"card",id:"card-timer-message",children:e.jsxs("div",{children:[e.jsx("div",{className:"label",children:"Timer message"}),e.jsx("div",{className:d(["extra",!1]),children:b})]})}),e.jsx("div",{className:"card",id:"card-secondary-message",children:e.jsxs("div",{children:[e.jsx("div",{className:"label",children:"Secondary message"}),e.jsx("div",{className:d(["extra",!p&&"muted"]),children:p})]})})]})}function ne(){const s=P();return e.jsx("div",{className:"card",id:"card-aux",children:e.jsxs("div",{className:"card__row",children:[e.jsxs("div",{children:[e.jsx("div",{className:"label",children:"Aux 1"}),e.jsx("div",{className:"extra",children:x(s.aux1)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"label center",children:"Aux 2"}),e.jsx("div",{className:"extra center",children:x(s.aux2)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"label right",children:"Aux 3"}),e.jsx("div",{className:"extra right",children:x(s.aux3)})]})]})})}function oe(){const s=I(l=>l.mirror),{data:t,status:i}=q(),{data:a,status:r}=M(),{data:c,status:n}=F();return{data:{projectData:t,isMirrored:s,settings:c,viewSettings:a},status:$([i,r,n])}}function Te(){const{data:s,status:t}=oe();return z("Studio Clock"),t==="pending"?e.jsx(V,{}):t==="error"?e.jsx(H,{text:"There was an error fetching data, please refresh the page."}):e.jsx(le,{...s})}function le({projectData:s,isMirrored:t,settings:i,viewSettings:a}){const{hideCards:r}=Z(),c=D(i==null?void 0:i.timeFormat),n=j.useMemo(()=>J(c),[c]);return e.jsxs("div",{className:d(["studio",t&&"mirror"]),"data-testid":"studio-view",children:[e.jsx(W,{target:L.StudioClock,viewOptions:n}),e.jsxs("div",{className:"project-header",children:[(s==null?void 0:s.logo)&&e.jsx(R,{name:s.logo,className:"logo"}),e.jsx("div",{className:"title",children:s.title})]}),e.jsxs("div",{className:d(["studio-contents",r&&"studio-contents--onecol"]),children:[e.jsx(ae,{hideCards:r}),!r&&e.jsx(de,{viewSettings:a})]})]})}export{Te as default};
|
|
2
|
+
//# sourceMappingURL=Studio-D7evHV2Q.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Studio-BjNZ4l-W.js","sources":["../../src/views/studio/studio.options.ts","../../src/views/studio/studioClock.utils.ts","../../src/views/studio/StudioClock.tsx","../../src/views/studio/studioTimers.utils.ts","../../src/views/studio/StudioTimers.tsx","../../src/views/studio/useStudioData.ts","../../src/views/studio/Studio.tsx"],"sourcesContent":["import { use, useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\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 { PresetContext } from '../../common/context/PresetContext';\nimport { isStringBoolean } from '../common/viewUtils';\n\nexport const getStudioOptions = (timeFormat: string): ViewOption[] => [\n { title: OptionTitle.ClockOptions, collapsible: true, options: [getTimeOption(timeFormat)] },\n {\n title: OptionTitle.ElementVisibility,\n collapsible: true,\n options: [\n {\n id: 'hideCards',\n title: 'Hide cards section',\n description: 'Hides the card section with the timers',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n];\n\ntype StudioOptions = {\n hideCards: 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, defaultValues?: URLSearchParams): StudioOptions {\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 hideCards: isStringBoolean(getValue('hideCards')),\n };\n}\n\n/**\n * Hook exposes the backstage view options\n */\nexport function useStudioOptions(): StudioOptions {\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 { secondsInMillis } from 'ontime-utils';\n\nimport { formatTime } from '../../common/utils/time';\n\n/**\n * Gathers display elements for the large studio clock\n */\nexport function getLargeClockData(clock: number) {\n const [display, meridian] = (() => {\n const formatted = formatTime(clock);\n if (formatted.endsWith('AM')) {\n return [formatted.slice(0, -2), 'AM'];\n }\n if (formatted.endsWith('PM')) {\n return [formatted.slice(0, -2), 'PM'];\n }\n return [formatted, undefined];\n })();\n\n return { seconds: secondsInMillis(clock), display, meridian };\n}\n","import { Playback } from 'ontime-types';\n\nimport { useIsSmallScreen } from '../../common/hooks/useIsSmallScreen';\nimport { useStudioClockSocket } from '../../common/hooks/useSocket';\nimport { cx } from '../../common/utils/styleUtils';\nimport { formatTime } from '../../common/utils/time';\nimport SuperscriptTime from '../common/superscript-time/SuperscriptTime';\n\nimport { getLargeClockData } from './studioClock.utils';\n\nimport './StudioClock.scss';\n\nconst activeIndicators = [...Array(12).keys()];\nconst secondsIndicators = [...Array(60).keys()];\n\ninterface StudioClockProps {\n hideCards: boolean;\n}\n\nexport default function StudioClock({ hideCards }: StudioClockProps) {\n const isSmallScreen = useIsSmallScreen();\n const { clock, playback } = useStudioClockSocket();\n const onAir = playback !== Playback.Stop;\n\n // if we are on mobile and have to show the cards\n if (isSmallScreen && !hideCards) {\n return <StudioClockMobile clock={clock} onAir={onAir} />;\n }\n\n const { seconds, display, meridian } = getLargeClockData(clock);\n\n return (\n <div className='studio__clock'>\n <div className='clock-container'>\n {secondsIndicators.map((i) => {\n return (\n <div\n key={i}\n className={cx(['tick', i <= seconds && 'tick--active'])}\n style={{ transform: `rotate(${180 + i * 6}deg) translateY(var(--half-size))` }}\n />\n );\n })}\n {activeIndicators.map((i) => (\n <div\n key={i}\n className='tick tick--active'\n style={{\n transform: `rotate(${180 + i * 30}deg) translateX(var(--smaller-half-size))`,\n }}\n />\n ))}\n <div className={cx(['ampm', Boolean(meridian) && 'ampm--active'])}>{meridian}</div>\n <div className='time time--large'>{display}</div>\n <div className={cx(['on-air', onAir && 'on-air--active'])}>ON AIR</div>\n </div>\n </div>\n );\n}\n\ninterface StudioClockMobileProps {\n clock: number;\n onAir: boolean;\n}\n\nfunction StudioClockMobile({ clock, onAir }: StudioClockMobileProps) {\n const displayClock = formatTime(clock);\n\n return (\n <div className='studio__clock studio__clock--small'>\n <SuperscriptTime className='time time--small' time={displayClock} />\n <div className={cx(['on-air', onAir && 'on-air--active'])}>ON AIR</div>\n </div>\n );\n}\n","import { MaybeNumber, OntimeEvent, TimerState } from 'ontime-types';\nimport { millisToString } from 'ontime-utils';\n\nimport { getOffsetText } from '../../common/utils/offset';\nimport { formatTime } from '../../common/utils/time';\n\nconst timeFormat = { format12: 'h:mm a', format24: 'HH:mm' };\nexport function getFormattedScheduleTimes(data: {\n offset: number;\n actualStart: MaybeNumber;\n expectedEnd: MaybeNumber;\n}) {\n return {\n actualStart: formatTime(data.actualStart, timeFormat),\n expectedEnd: formatTime(data.expectedEnd, timeFormat),\n offset: getOffsetText(data.offset),\n };\n}\n\nexport function getFormattedEventData(eventNow: OntimeEvent | null, timer: TimerState) {\n return {\n title: eventNow?.title || '-',\n startedAt: formatTime(timer.startedAt, timeFormat),\n expectedEnd: formatTime(timer.expectedFinish, timeFormat),\n timer: millisToString(timer.current),\n };\n}\n","import { Playback, TimerPhase, ViewSettings } from 'ontime-types';\nimport { millisToString } from 'ontime-utils';\n\nimport { useAuxTimersTime, useStudioTimersSocket } from '../../common/hooks/useSocket';\nimport { getOffsetState } from '../../common/utils/offset';\nimport { cx } from '../../common/utils/styleUtils';\nimport { useTranslation } from '../../translation/TranslationProvider';\nimport { getTimerColour } from '../utils/presentation.utils';\n\nimport { getFormattedEventData, getFormattedScheduleTimes } from './studioTimers.utils';\n\nimport './StudioTimers.scss';\n\ninterface StudioTimersProps {\n viewSettings: ViewSettings;\n}\n\nexport default function StudioTimers({ viewSettings }: StudioTimersProps) {\n const { getLocalizedString } = useTranslation();\n const { eventNow, eventNext, message, time, offset, rundown, expectedRundownEnd } = useStudioTimersSocket();\n\n const schedule = getFormattedScheduleTimes({\n offset: offset,\n actualStart: rundown.actualStart,\n expectedEnd: expectedRundownEnd,\n });\n const event = getFormattedEventData(eventNow, time);\n const eventNextTitle = eventNext?.title || '-';\n const formattedTimerMessage = (message.timer.visible && message.timer.text) || '-';\n const formattedSecondaryMessage = message.timer.secondarySource === 'secondary' ? message.secondary || '-' : '-';\n\n // gather presentation styles\n const timerColour = getTimerColour(\n viewSettings,\n undefined,\n time.phase === TimerPhase.Warning,\n time.phase === TimerPhase.Danger,\n );\n\n const offsetState = getOffsetState(offset);\n\n return (\n <div className='studio__timers'>\n <div className='card' id='card-schedule'>\n <div className='card__row'>\n <div>\n <div className='label'>{getLocalizedString('common.started_at')}</div>\n <div className='runtime-timer'>{schedule.actualStart}</div>\n </div>\n <div>\n <div className='label center'>Over / under</div>\n <div className={cx(['runtime-timer', 'center', !eventNow && 'muted', offsetState])}>{schedule.offset}</div>\n </div>\n <div>\n <div className='label right'>{getLocalizedString('common.expected_end')}</div>\n <div className='runtime-timer right'>{schedule.expectedEnd}</div>\n </div>\n </div>\n </div>\n\n <div className='card' id='card-event-now'>\n <div className='card__row'>\n <div>\n <div className='label'>{getLocalizedString('common.now')}</div>\n <div className='title'>{event.title}</div>\n </div>\n <div>\n <div className='label right'>{getLocalizedString('common.next')}</div>\n <div className='title right'>{eventNextTitle}</div>\n </div>\n </div>\n\n <div className='card__row'>\n <div>\n <div className='label'>{getLocalizedString('common.started_at')}</div>\n <div className='runtime-timer'>{event.startedAt}</div>\n </div>\n <div>\n <div className='label' />\n <div\n className={cx([\n 'event-timer',\n time.phase === TimerPhase.Overtime && 'event-timer--finished',\n time.playback === Playback.Pause && 'event-timer--paused',\n ])}\n style={{\n '--phase-color': timerColour,\n }}\n data-phase={time.phase}\n >\n {event.timer}\n </div>\n </div>\n <div>\n <div className='label right'>{getLocalizedString('common.expected_end')}</div>\n <div className='runtime-timer right'>{event.expectedEnd}</div>\n </div>\n </div>\n </div>\n\n <StudioTimersAux />\n\n <div className='card' id='card-timer-message'>\n <div>\n <div className='label'>Timer message</div>\n <div className={cx(['extra', !formattedTimerMessage && 'muted'])}>{formattedTimerMessage}</div>\n </div>\n </div>\n\n <div className='card' id='card-secondary-message'>\n <div>\n <div className='label'>Secondary message</div>\n <div className={cx(['extra', !formattedSecondaryMessage && 'muted'])}>{formattedSecondaryMessage}</div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction StudioTimersAux() {\n const auxTimer = useAuxTimersTime();\n\n return (\n <div className='card' id='card-aux'>\n <div className='card__row'>\n <div>\n <div className='label'>Aux 1</div>\n <div className='extra'>{millisToString(auxTimer.aux1)}</div>\n </div>\n\n <div>\n <div className='label center'>Aux 2</div>\n <div className='extra center'>{millisToString(auxTimer.aux2)}</div>\n </div>\n\n <div>\n <div className='label right'>Aux 3</div>\n <div className='extra right'>{millisToString(auxTimer.aux3)}</div>\n </div>\n </div>\n </div>\n );\n}\n","import { ProjectData, Settings, ViewSettings } from 'ontime-types';\n\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport useSettings from '../../common/hooks-query/useSettings';\nimport useViewSettings from '../../common/hooks-query/useViewSettings';\nimport { useViewOptionsStore } from '../../common/stores/viewOptions';\nimport { aggregateQueryStatus, ViewData } from '../utils/viewLoader.utils';\n\nexport interface StudioData {\n projectData: ProjectData;\n isMirrored: boolean;\n settings: Settings;\n viewSettings: ViewSettings;\n}\n\nexport function useStudioData(): ViewData<StudioData> {\n // persisted app state\n const isMirrored = useViewOptionsStore((state) => state.mirror);\n\n // HTTP API data\n const { data: projectData, status: projectDataStatus } = useProjectData();\n const { data: viewSettings, status: viewSettingsStatus } = useViewSettings();\n const { data: settings, status: settingsStatus } = useSettings();\n\n return {\n data: {\n projectData,\n isMirrored,\n settings,\n viewSettings,\n },\n status: aggregateQueryStatus([projectDataStatus, viewSettingsStatus, settingsStatus]),\n };\n}\n","import { useMemo } from 'react';\nimport { OntimeView } from 'ontime-types';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport ViewLogo from '../../common/components/view-logo/ViewLogo';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { cx } from '../../common/utils/styleUtils';\nimport { getDefaultFormat } from '../../common/utils/time';\nimport Loader from '../common/loader/Loader';\n\nimport { getStudioOptions, useStudioOptions } from './studio.options';\nimport StudioClock from './StudioClock';\nimport StudioTimers from './StudioTimers';\nimport { StudioData, useStudioData } from './useStudioData';\n\nimport './Studio.scss';\n\nexport default function StudioLoader() {\n const { data, status } = useStudioData();\n\n useWindowTitle('Studio Clock');\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 <Studio {...data} />;\n}\n\nfunction Studio({ projectData, isMirrored, settings, viewSettings }: StudioData) {\n const { hideCards } = useStudioOptions();\n\n // gather option data\n const defaultFormat = getDefaultFormat(settings?.timeFormat);\n const studioOptions = useMemo(() => getStudioOptions(defaultFormat), [defaultFormat]);\n\n return (\n <div className={cx(['studio', isMirrored && 'mirror'])} data-testid='studio-view'>\n <ViewParamsEditor target={OntimeView.StudioClock} viewOptions={studioOptions} />\n\n <div className='project-header'>\n {projectData?.logo && <ViewLogo name={projectData.logo} className='logo' />}\n <div className='title'>{projectData.title}</div>\n </div>\n\n <div className={cx(['studio-contents', hideCards && 'studio-contents--onecol'])}>\n <StudioClock hideCards={hideCards} />\n {!hideCards && <StudioTimers viewSettings={viewSettings} />}\n </div>\n </div>\n );\n}\n"],"names":["getStudioOptions","timeFormat","title","OptionTitle","ClockOptions","collapsible","options","getTimeOption","ElementVisibility","id","description","type","defaultValue","getOptionsFromParams","searchParams","defaultValues","hideCards","isStringBoolean","key","get","useStudioOptions","useSearchParams","maybePreset","use","PresetContext","useMemo","URLSearchParams","search","undefined","getLargeClockData","clock","display","meridian","formatted","formatTime","endsWith","slice","seconds","secondsInMillis","activeIndicators","Array","keys","secondsIndicators","StudioClock","isSmallScreen","useIsSmallScreen","playback","useStudioClockSocket","onAir","Playback","Stop","jsx","StudioClockMobile","jsxs","map","i","cx","transform","Boolean","displayClock","SuperscriptTime","format12","format24","getFormattedScheduleTimes","data","actualStart","expectedEnd","offset","getOffsetText","getFormattedEventData","eventNow","timer","startedAt","expectedFinish","millisToString","current","StudioTimers","viewSettings","getLocalizedString","useTranslation","eventNext","message","time","rundown","expectedRundownEnd","useStudioTimersSocket","schedule","event","eventNextTitle","formattedTimerMessage","visible","text","formattedSecondaryMessage","secondarySource","secondary","timerColour","getTimerColour","phase","TimerPhase","Warning","Danger","offsetState","getOffsetState","Overtime","Pause","StudioTimersAux","auxTimer","useAuxTimersTime","aux1","aux2","aux3","useStudioData","isMirrored","useViewOptionsStore","state","mirror","projectData","status","projectDataStatus","useProjectData","viewSettingsStatus","useViewSettings","settings","settingsStatus","useSettings","aggregateQueryStatus","StudioLoader","useWindowTitle","Loader","EmptyPage","Studio","defaultFormat","getDefaultFormat","studioOptions","ViewParamsEditor","OntimeView","logo","ViewLogo"],"mappings":"kqCASaA,MAAAA,EAAoBC,GAAqC,CACpE,CAAEC,MAAOC,EAAYC,aAAcC,YAAa,GAAMC,QAAS,CAACC,EAAcN,CAAU,CAAC,CAAE,EAC3F,CACEC,MAAOC,EAAYK,kBACnBH,YAAa,GACbC,QAAS,CACP,CACEG,GAAI,YACJP,MAAO,qBACPQ,YAAa,yCACbC,KAAM,UACNC,aAAc,EACf,CAAA,CAEL,CAAC,EAWH,SAASC,EAAqBC,EAA+BC,EAAgD,CAIpG,MAAA,CACLC,UAAWC,GAHKC,IAAgBH,GAAAA,YAAAA,EAAeI,IAAID,KAAQJ,EAAaK,IAAID,CAAG,GAG3C,WAAW,CAAC,CAClD,CACF,CAKO,SAASE,GAAkC,CAC1C,KAAA,CAACN,CAAY,EAAIO,EAAgB,EACjCC,EAAcC,MAAIC,CAAa,EAO9BlB,OALSmB,EAAAA,QAAQ,IAAM,CAC5B,MAAMV,EAAgBO,EAAc,IAAII,gBAAgBJ,EAAYK,MAAM,EAAIC,OACvEf,OAAAA,EAAqBC,EAAcC,CAAa,CAAA,EACtD,CAACO,EAAaR,CAAY,CAAC,CAGhC,CCjDO,SAASe,GAAkBC,EAAe,CAC/C,KAAM,CAACC,EAASC,CAAQ,GAAK,IAAM,CAC3BC,MAAAA,EAAYC,EAAWJ,CAAK,EAC9BG,OAAAA,EAAUE,SAAS,IAAI,EAClB,CAACF,EAAUG,MAAM,EAAG,EAAE,EAAG,IAAI,EAElCH,EAAUE,SAAS,IAAI,EAClB,CAACF,EAAUG,MAAM,EAAG,EAAE,EAAG,IAAI,EAE/B,CAACH,EAAWL,MAAS,CAAA,GAC3B,EAEI,MAAA,CAAES,QAASC,EAAgBR,CAAK,EAAGC,QAAAA,EAASC,SAAAA,CAAS,CAC9D,CCRA,MAAMO,GAAmB,CAAC,GAAGC,MAAM,EAAE,EAAEC,MAAM,EACvCC,GAAoB,CAAC,GAAGF,MAAM,EAAE,EAAEC,MAAM,EAM9C,SAAwBE,GAAY,CAAE3B,UAAAA,CAA4B,EAAG,CACnE,MAAM4B,EAAgBC,EAAiB,EACjC,CAAEf,MAAAA,EAAOgB,SAAAA,GAAaC,EAAqB,EAC3CC,EAAQF,IAAaG,EAASC,KAGhCN,GAAAA,GAAiB,CAAC5B,EACb,OAAAmC,EAAA,IAACC,GAAkB,CAAA,MAAAtB,EAAc,MAAAkB,CAAgB,CAAA,EAGpD,KAAA,CAAEX,QAAAA,EAASN,QAAAA,EAASC,SAAAA,CAAAA,EAAaH,GAAkBC,CAAK,EAE9D,aACG,MAAI,CAAA,UAAU,gBACb,SAACuB,EAAA,KAAA,MAAA,CAAI,UAAU,kBACZX,SAAAA,CAAAA,GAAkBY,IAAWC,GAE1BJ,MAAC,MAEC,CAAA,UAAWK,EAAG,CAAC,OAAQD,GAAKlB,GAAW,cAAc,CAAC,EACtD,MAAO,CAAEoB,UAAW,UAAU,IAAMF,EAAI,CAAC,sCAFpCA,CAGL,CAEL,EACAhB,GAAiBe,IAAKC,SACpB,MAEC,CAAA,UAAU,oBACV,MAAO,CACLE,UAAW,UAAU,IAAMF,EAAI,EAAE,2CAAA,CACnC,EAJKA,EAMR,EACAJ,EAAAA,IAAA,MAAA,CAAI,UAAWK,EAAG,CAAC,OAAQE,EAAQ1B,GAAa,cAAc,CAAC,EAAIA,SAASA,CAAA,CAAA,EAC5EmB,EAAA,IAAA,MAAA,CAAI,UAAU,mBAAoBpB,SAAQA,EAAA,EAC3CoB,EAAAA,IAAC,MAAI,CAAA,UAAWK,EAAG,CAAC,SAAUR,GAAS,gBAAgB,CAAC,EAAG,SAAM,QAAA,CAAA,CAAA,CAAA,CACnE,CACF,CAAA,CAEJ,CAOA,SAASI,GAAkB,CAAEtB,MAAAA,EAAOkB,MAAAA,CAA8B,EAAG,CAC7DW,MAAAA,EAAezB,EAAWJ,CAAK,EAGnC,OAAAuB,EAAA,KAAC,MAAI,CAAA,UAAU,qCACb,SAAA,CAAAF,EAAA,IAACS,EAAgB,CAAA,UAAU,mBAAmB,KAAMD,EAAa,EACjER,EAAAA,IAAC,MAAI,CAAA,UAAWK,EAAG,CAAC,SAAUR,GAAS,gBAAgB,CAAC,EAAG,SAAM,QAAA,CAAA,CAAA,EACnE,CAEJ,CCpEA,MAAM/C,EAAa,CAAE4D,SAAU,SAAUC,SAAU,OAAQ,EACpD,SAASC,GAA0BC,EAIvC,CACM,MAAA,CACLC,YAAa/B,EAAW8B,EAAKC,YAAahE,CAAU,EACpDiE,YAAahC,EAAW8B,EAAKE,YAAajE,CAAU,EACpDkE,OAAQC,EAAcJ,EAAKG,MAAM,CACnC,CACF,CAEgBE,SAAAA,GAAsBC,EAA8BC,EAAmB,CAC9E,MAAA,CACLrE,OAAOoE,GAAAA,YAAAA,EAAUpE,QAAS,IAC1BsE,UAAWtC,EAAWqC,EAAMC,UAAWvE,CAAU,EACjDiE,YAAahC,EAAWqC,EAAME,eAAgBxE,CAAU,EACxDsE,MAAOG,EAAeH,EAAMI,OAAO,CACrC,CACF,CCTA,SAAwBC,GAAa,CAAEC,aAAAA,CAAgC,EAAG,CAClE,KAAA,CAAEC,mBAAAA,GAAuBC,EAAe,EACxC,CAAET,SAAAA,EAAUU,UAAAA,EAAWC,QAAAA,EAASC,KAAAA,EAAMf,OAAAA,EAAQgB,QAAAA,EAASC,mBAAAA,GAAuBC,EAAsB,EAEpGC,EAAWvB,GAA0B,CACzCI,OAAAA,EACAF,YAAakB,EAAQlB,YACrBC,YAAakB,CAAAA,CACd,EACKG,EAAQlB,GAAsBC,EAAUY,CAAI,EAC5CM,GAAiBR,GAAAA,YAAAA,EAAW9E,QAAS,IACrCuF,EAAyBR,EAAQV,MAAMmB,SAAWT,EAAQV,MAAMoB,MAAS,IACzEC,EAA4BX,EAAQV,MAAMsB,kBAAoB,aAAcZ,EAAQa,WAAa,IAGjGC,EAAcC,EAClBnB,EACAjD,OACAsD,EAAKe,QAAUC,EAAWC,QAC1BjB,EAAKe,QAAUC,EAAWE,MAC5B,EAEMC,EAAcC,EAAenC,CAAM,EAGvC,OAAAd,EAAA,KAAC,MAAI,CAAA,UAAU,iBACb,SAAA,CAACF,EAAAA,IAAA,MAAA,CAAI,UAAU,OAAO,GAAG,gBACvB,SAACE,EAAA,KAAA,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,OAAC,MACC,CAAA,SAAA,CAAAF,MAAC,MAAI,CAAA,UAAU,QAAS2B,SAAAA,EAAmB,mBAAmB,EAAE,EAC/D3B,EAAA,IAAA,MAAA,CAAI,UAAU,gBAAiBmC,WAASrB,WAAY,CAAA,CAAA,EACvD,SACC,MACC,CAAA,SAAA,CAACd,EAAA,IAAA,MAAA,CAAI,UAAU,eAAe,SAAY,eAAA,EACzCA,EAAA,IAAA,MAAA,CAAI,UAAWK,EAAG,CAAC,gBAAiB,SAAU,CAACc,GAAY,QAAS+B,CAAW,CAAC,EAAIf,WAASnB,MAAO,CAAA,CAAA,EACvG,SACC,MACC,CAAA,SAAA,CAAAhB,MAAC,MAAI,CAAA,UAAU,cAAe2B,SAAAA,EAAmB,qBAAqB,EAAE,EACvE3B,EAAA,IAAA,MAAA,CAAI,UAAU,sBAAuBmC,WAASpB,WAAY,CAAA,CAAA,CAC7D,CAAA,CAAA,CAAA,CACF,CACF,CAAA,EAECb,EAAA,KAAA,MAAA,CAAI,UAAU,OAAO,GAAG,iBACvB,SAAA,CAACA,EAAAA,KAAA,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,OAAC,MACC,CAAA,SAAA,CAAAF,MAAC,MAAI,CAAA,UAAU,QAAS2B,SAAAA,EAAmB,YAAY,EAAE,EACxD3B,EAAA,IAAA,MAAA,CAAI,UAAU,QAASoC,WAAMrF,KAAM,CAAA,CAAA,EACtC,SACC,MACC,CAAA,SAAA,CAAAiD,MAAC,MAAI,CAAA,UAAU,cAAe2B,SAAAA,EAAmB,aAAa,EAAE,EAC/D3B,EAAA,IAAA,MAAA,CAAI,UAAU,cAAeqC,SAAeA,CAAA,CAAA,CAAA,CAC/C,CAAA,CAAA,EACF,EAEAnC,EAAAA,KAAC,MAAI,CAAA,UAAU,YACb,SAAA,CAAAA,OAAC,MACC,CAAA,SAAA,CAAAF,MAAC,MAAI,CAAA,UAAU,QAAS2B,SAAAA,EAAmB,mBAAmB,EAAE,EAC/D3B,EAAA,IAAA,MAAA,CAAI,UAAU,gBAAiBoC,WAAMf,SAAU,CAAA,CAAA,EAClD,SACC,MACC,CAAA,SAAA,CAACrB,EAAAA,IAAA,MAAA,CAAI,UAAU,OAAO,CAAA,QACrB,MACC,CAAA,UAAWK,EAAG,CACZ,cACA0B,EAAKe,QAAUC,EAAWK,UAAY,wBACtCrB,EAAKpC,WAAaG,EAASuD,OAAS,qBAAqB,CAC1D,EACD,MAAO,CACL,gBAAiBT,CAAAA,EAEnB,aAAYb,EAAKe,MAEhBV,WAAMhB,KACT,CAAA,CAAA,EACF,SACC,MACC,CAAA,SAAA,CAAApB,MAAC,MAAI,CAAA,UAAU,cAAe2B,SAAAA,EAAmB,qBAAqB,EAAE,EACvE3B,EAAA,IAAA,MAAA,CAAI,UAAU,sBAAuBoC,WAAMrB,WAAY,CAAA,CAAA,CAC1D,CAAA,CAAA,CACF,CAAA,CAAA,EACF,QAECuC,GAAe,EAAA,QAEf,MAAI,CAAA,UAAU,OAAO,GAAG,qBACvB,gBAAC,MACC,CAAA,SAAA,CAACtD,EAAA,IAAA,MAAA,CAAI,UAAU,QAAQ,SAAa,gBAAA,EACpCA,MAAC,MAAI,CAAA,UAAWK,EAAG,CAAC,QAAS,EAAiC,CAAC,EAAIiC,SAAsBA,CAAA,CAAA,CAAA,CAAA,CAC3F,CACF,CAAA,QAEC,MAAI,CAAA,UAAU,OAAO,GAAG,yBACvB,gBAAC,MACC,CAAA,SAAA,CAACtC,EAAA,IAAA,MAAA,CAAI,UAAU,QAAQ,SAAiB,oBAAA,EACxCA,EAAAA,IAAC,MAAI,CAAA,UAAWK,EAAG,CAAC,QAAS,CAACoC,GAA6B,OAAO,CAAC,EAAIA,SAA0BA,CAAA,CAAA,CAAA,CAAA,CACnG,CACF,CAAA,CAAA,EACF,CAEJ,CAEA,SAASa,IAAkB,CACzB,MAAMC,EAAWC,EAAiB,EAGhC,OAAAxD,EAAA,IAAC,OAAI,UAAU,OAAO,GAAG,WACvB,SAAAE,EAAA,KAAC,MAAI,CAAA,UAAU,YACb,SAAA,CAAAA,OAAC,MACC,CAAA,SAAA,CAACF,EAAA,IAAA,MAAA,CAAI,UAAU,QAAQ,SAAK,QAAA,QAC3B,MAAI,CAAA,UAAU,QAASuB,SAAegC,EAAAA,EAASE,IAAI,CAAE,CAAA,CAAA,EACxD,SAEC,MACC,CAAA,SAAA,CAACzD,EAAA,IAAA,MAAA,CAAI,UAAU,eAAe,SAAK,QAAA,QAClC,MAAI,CAAA,UAAU,eAAgBuB,SAAegC,EAAAA,EAASG,IAAI,CAAE,CAAA,CAAA,EAC/D,SAEC,MACC,CAAA,SAAA,CAAC1D,EAAA,IAAA,MAAA,CAAI,UAAU,cAAc,SAAK,QAAA,QACjC,MAAI,CAAA,UAAU,cAAeuB,SAAegC,EAAAA,EAASI,IAAI,CAAE,CAAA,CAAA,CAC9D,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAEJ,CC/HO,SAASC,IAAsC,CAEpD,MAAMC,EAAaC,EAA+BC,GAAAA,EAAMC,MAAM,EAGxD,CAAEnD,KAAMoD,EAAaC,OAAQC,GAAsBC,EAAe,EAClE,CAAEvD,KAAMa,EAAcwC,OAAQG,GAAuBC,EAAgB,EACrE,CAAEzD,KAAM0D,EAAUL,OAAQM,GAAmBC,EAAY,EAExD,MAAA,CACL5D,KAAM,CACJoD,YAAAA,EACAJ,WAAAA,EACAU,SAAAA,EACA7C,aAAAA,CACF,EACAwC,OAAQQ,EAAqB,CAACP,EAAmBE,EAAoBG,CAAc,CAAC,CACtF,CACF,CCfA,SAAwBG,IAAe,CAC/B,KAAA,CAAE9D,KAAAA,EAAMqD,OAAAA,GAAWN,GAAc,EAIvC,OAFAgB,EAAe,cAAc,EAEzBV,IAAW,gBACLW,EAAS,EAAA,EAGfX,IAAW,QACNlE,EAAA,IAAC8E,EAAU,CAAA,KAAK,4DAA+D,CAAA,EAGjF9E,MAAC+E,GAAWlE,CAAAA,GAAAA,CAAQ,CAAA,CAC7B,CAEA,SAASkE,GAAO,CAAEd,YAAAA,EAAaJ,WAAAA,EAAYU,SAAAA,EAAU7C,aAAAA,CAAyB,EAAG,CACzE,KAAA,CAAE7D,UAAAA,GAAcI,EAAiB,EAGjC+G,EAAgBC,EAAiBV,GAAAA,YAAAA,EAAUzH,UAAU,EACrDoI,EAAgB5G,EAAAA,QAAQ,IAAMzB,EAAiBmI,CAAa,EAAG,CAACA,CAAa,CAAC,EAGlF,OAAA9E,EAAA,KAAC,MAAI,CAAA,UAAWG,EAAG,CAAC,SAAUwD,GAAc,QAAQ,CAAC,EAAG,cAAY,cAClE,SAAA,CAAA7D,EAAA,IAACmF,EAAiB,CAAA,OAAQC,EAAW5F,YAAa,YAAa0F,EAAc,EAE7EhF,EAAAA,KAAC,MAAI,CAAA,UAAU,iBACZ+D,SAAAA,EAAAA,GAAAA,YAAAA,EAAaoB,OAASrF,EAAA,IAAAsF,EAAA,CAAS,KAAMrB,EAAYoB,KAAM,UAAU,OAAS,EAC1ErF,EAAA,IAAA,MAAA,CAAI,UAAU,QAASiE,WAAYlH,KAAM,CAAA,CAAA,EAC5C,EAEAmD,OAAC,OAAI,UAAWG,EAAG,CAAC,kBAAmBxC,GAAa,yBAAyB,CAAC,EAC5E,SAAA,CAAAmC,MAACR,IAAY,UAAA3B,EAAqB,EACjC,CAACA,GAAcmC,EAAAA,IAAAyB,GAAA,CAAa,aAAAC,CAA8B,CAAA,CAAA,CAC7D,CAAA,CAAA,EACF,CAEJ"}
|
|
1
|
+
{"version":3,"file":"Studio-D7evHV2Q.js","sources":["../../src/views/studio/studio.options.ts","../../src/views/studio/studioClock.utils.ts","../../src/views/studio/StudioClock.tsx","../../src/views/studio/studioTimers.utils.ts","../../src/views/studio/StudioTimers.tsx","../../src/views/studio/useStudioData.ts","../../src/views/studio/Studio.tsx"],"sourcesContent":["import { use, useMemo } from 'react';\nimport { useSearchParams } from 'react-router';\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 { PresetContext } from '../../common/context/PresetContext';\nimport { isStringBoolean } from '../common/viewUtils';\n\nexport const getStudioOptions = (timeFormat: string): ViewOption[] => [\n { title: OptionTitle.ClockOptions, collapsible: true, options: [getTimeOption(timeFormat)] },\n {\n title: OptionTitle.ElementVisibility,\n collapsible: true,\n options: [\n {\n id: 'hideCards',\n title: 'Hide cards section',\n description: 'Hides the card section with the timers',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n },\n];\n\ntype StudioOptions = {\n hideCards: 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, defaultValues?: URLSearchParams): StudioOptions {\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 hideCards: isStringBoolean(getValue('hideCards')),\n };\n}\n\n/**\n * Hook exposes the backstage view options\n */\nexport function useStudioOptions(): StudioOptions {\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 { secondsInMillis } from 'ontime-utils';\n\nimport { formatTime } from '../../common/utils/time';\n\n/**\n * Gathers display elements for the large studio clock\n */\nexport function getLargeClockData(clock: number) {\n const [display, meridian] = (() => {\n const formatted = formatTime(clock);\n if (formatted.endsWith('AM')) {\n return [formatted.slice(0, -2), 'AM'];\n }\n if (formatted.endsWith('PM')) {\n return [formatted.slice(0, -2), 'PM'];\n }\n return [formatted, undefined];\n })();\n\n return { seconds: secondsInMillis(clock), display, meridian };\n}\n","import { Playback } from 'ontime-types';\n\nimport { useIsSmallScreen } from '../../common/hooks/useIsSmallScreen';\nimport { useStudioClockSocket } from '../../common/hooks/useSocket';\nimport { cx } from '../../common/utils/styleUtils';\nimport { formatTime } from '../../common/utils/time';\nimport SuperscriptTime from '../common/superscript-time/SuperscriptTime';\n\nimport { getLargeClockData } from './studioClock.utils';\n\nimport './StudioClock.scss';\n\nconst activeIndicators = [...Array(12).keys()];\nconst secondsIndicators = [...Array(60).keys()];\n\ninterface StudioClockProps {\n hideCards: boolean;\n}\n\nexport default function StudioClock({ hideCards }: StudioClockProps) {\n const isSmallScreen = useIsSmallScreen();\n const { clock, playback } = useStudioClockSocket();\n const onAir = playback !== Playback.Stop;\n\n // if we are on mobile and have to show the cards\n if (isSmallScreen && !hideCards) {\n return <StudioClockMobile clock={clock} onAir={onAir} />;\n }\n\n const { seconds, display, meridian } = getLargeClockData(clock);\n\n return (\n <div className='studio__clock'>\n <div className='clock-container'>\n {secondsIndicators.map((i) => {\n return (\n <div\n key={i}\n className={cx(['tick', i <= seconds && 'tick--active'])}\n style={{ transform: `rotate(${180 + i * 6}deg) translateY(var(--half-size))` }}\n />\n );\n })}\n {activeIndicators.map((i) => (\n <div\n key={i}\n className='tick tick--active'\n style={{\n transform: `rotate(${180 + i * 30}deg) translateX(var(--smaller-half-size))`,\n }}\n />\n ))}\n <div className={cx(['ampm', Boolean(meridian) && 'ampm--active'])}>{meridian}</div>\n <div className='time time--large'>{display}</div>\n <div className={cx(['on-air', onAir && 'on-air--active'])}>ON AIR</div>\n </div>\n </div>\n );\n}\n\ninterface StudioClockMobileProps {\n clock: number;\n onAir: boolean;\n}\n\nfunction StudioClockMobile({ clock, onAir }: StudioClockMobileProps) {\n const displayClock = formatTime(clock);\n\n return (\n <div className='studio__clock studio__clock--small'>\n <SuperscriptTime className='time time--small' time={displayClock} />\n <div className={cx(['on-air', onAir && 'on-air--active'])}>ON AIR</div>\n </div>\n );\n}\n","import { MaybeNumber, OntimeEvent, TimerState } from 'ontime-types';\nimport { millisToString } from 'ontime-utils';\n\nimport { getOffsetText } from '../../common/utils/offset';\nimport { formatTime } from '../../common/utils/time';\n\nconst timeFormat = { format12: 'h:mm a', format24: 'HH:mm' };\nexport function getFormattedScheduleTimes(data: {\n offset: number;\n actualStart: MaybeNumber;\n expectedEnd: MaybeNumber;\n}) {\n return {\n actualStart: formatTime(data.actualStart, timeFormat),\n expectedEnd: formatTime(data.expectedEnd, timeFormat),\n offset: getOffsetText(data.offset),\n };\n}\n\nexport function getFormattedEventData(eventNow: OntimeEvent | null, timer: TimerState) {\n return {\n title: eventNow?.title || '-',\n startedAt: formatTime(timer.startedAt, timeFormat),\n expectedEnd: formatTime(timer.expectedFinish, timeFormat),\n timer: millisToString(timer.current),\n };\n}\n","import { Playback, TimerPhase, ViewSettings } from 'ontime-types';\nimport { millisToString } from 'ontime-utils';\n\nimport { useAuxTimersTime, useStudioTimersSocket } from '../../common/hooks/useSocket';\nimport { getOffsetState } from '../../common/utils/offset';\nimport { cx } from '../../common/utils/styleUtils';\nimport { useTranslation } from '../../translation/TranslationProvider';\nimport { getTimerColour } from '../utils/presentation.utils';\n\nimport { getFormattedEventData, getFormattedScheduleTimes } from './studioTimers.utils';\n\nimport './StudioTimers.scss';\n\ninterface StudioTimersProps {\n viewSettings: ViewSettings;\n}\n\nexport default function StudioTimers({ viewSettings }: StudioTimersProps) {\n const { getLocalizedString } = useTranslation();\n const { eventNow, eventNext, message, time, offset, rundown, expectedRundownEnd } = useStudioTimersSocket();\n\n const schedule = getFormattedScheduleTimes({\n offset: offset,\n actualStart: rundown.actualStart,\n expectedEnd: expectedRundownEnd,\n });\n const event = getFormattedEventData(eventNow, time);\n const eventNextTitle = eventNext?.title || '-';\n const formattedTimerMessage = (message.timer.visible && message.timer.text) || '-';\n const formattedSecondaryMessage = message.timer.secondarySource === 'secondary' ? message.secondary || '-' : '-';\n\n // gather presentation styles\n const timerColour = getTimerColour(\n viewSettings,\n undefined,\n time.phase === TimerPhase.Warning,\n time.phase === TimerPhase.Danger,\n );\n\n const offsetState = getOffsetState(offset);\n\n return (\n <div className='studio__timers'>\n <div className='card' id='card-schedule'>\n <div className='card__row'>\n <div>\n <div className='label'>{getLocalizedString('common.started_at')}</div>\n <div className='runtime-timer'>{schedule.actualStart}</div>\n </div>\n <div>\n <div className='label center'>Over / under</div>\n <div className={cx(['runtime-timer', 'center', !eventNow && 'muted', offsetState])}>{schedule.offset}</div>\n </div>\n <div>\n <div className='label right'>{getLocalizedString('common.expected_end')}</div>\n <div className='runtime-timer right'>{schedule.expectedEnd}</div>\n </div>\n </div>\n </div>\n\n <div className='card' id='card-event-now'>\n <div className='card__row'>\n <div>\n <div className='label'>{getLocalizedString('common.now')}</div>\n <div className='title'>{event.title}</div>\n </div>\n <div>\n <div className='label right'>{getLocalizedString('common.next')}</div>\n <div className='title right'>{eventNextTitle}</div>\n </div>\n </div>\n\n <div className='card__row'>\n <div>\n <div className='label'>{getLocalizedString('common.started_at')}</div>\n <div className='runtime-timer'>{event.startedAt}</div>\n </div>\n <div>\n <div className='label' />\n <div\n className={cx([\n 'event-timer',\n time.phase === TimerPhase.Overtime && 'event-timer--finished',\n time.playback === Playback.Pause && 'event-timer--paused',\n ])}\n style={{\n '--phase-color': timerColour,\n }}\n data-phase={time.phase}\n >\n {event.timer}\n </div>\n </div>\n <div>\n <div className='label right'>{getLocalizedString('common.expected_end')}</div>\n <div className='runtime-timer right'>{event.expectedEnd}</div>\n </div>\n </div>\n </div>\n\n <StudioTimersAux />\n\n <div className='card' id='card-timer-message'>\n <div>\n <div className='label'>Timer message</div>\n <div className={cx(['extra', !formattedTimerMessage && 'muted'])}>{formattedTimerMessage}</div>\n </div>\n </div>\n\n <div className='card' id='card-secondary-message'>\n <div>\n <div className='label'>Secondary message</div>\n <div className={cx(['extra', !formattedSecondaryMessage && 'muted'])}>{formattedSecondaryMessage}</div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction StudioTimersAux() {\n const auxTimer = useAuxTimersTime();\n\n return (\n <div className='card' id='card-aux'>\n <div className='card__row'>\n <div>\n <div className='label'>Aux 1</div>\n <div className='extra'>{millisToString(auxTimer.aux1)}</div>\n </div>\n\n <div>\n <div className='label center'>Aux 2</div>\n <div className='extra center'>{millisToString(auxTimer.aux2)}</div>\n </div>\n\n <div>\n <div className='label right'>Aux 3</div>\n <div className='extra right'>{millisToString(auxTimer.aux3)}</div>\n </div>\n </div>\n </div>\n );\n}\n","import { ProjectData, Settings, ViewSettings } from 'ontime-types';\n\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport useSettings from '../../common/hooks-query/useSettings';\nimport useViewSettings from '../../common/hooks-query/useViewSettings';\nimport { useViewOptionsStore } from '../../common/stores/viewOptions';\nimport { aggregateQueryStatus, ViewData } from '../utils/viewLoader.utils';\n\nexport interface StudioData {\n projectData: ProjectData;\n isMirrored: boolean;\n settings: Settings;\n viewSettings: ViewSettings;\n}\n\nexport function useStudioData(): ViewData<StudioData> {\n // persisted app state\n const isMirrored = useViewOptionsStore((state) => state.mirror);\n\n // HTTP API data\n const { data: projectData, status: projectDataStatus } = useProjectData();\n const { data: viewSettings, status: viewSettingsStatus } = useViewSettings();\n const { data: settings, status: settingsStatus } = useSettings();\n\n return {\n data: {\n projectData,\n isMirrored,\n settings,\n viewSettings,\n },\n status: aggregateQueryStatus([projectDataStatus, viewSettingsStatus, settingsStatus]),\n };\n}\n","import { useMemo } from 'react';\nimport { OntimeView } from 'ontime-types';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport ViewLogo from '../../common/components/view-logo/ViewLogo';\nimport ViewParamsEditor from '../../common/components/view-params-editor/ViewParamsEditor';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { cx } from '../../common/utils/styleUtils';\nimport { getDefaultFormat } from '../../common/utils/time';\nimport Loader from '../common/loader/Loader';\n\nimport { getStudioOptions, useStudioOptions } from './studio.options';\nimport StudioClock from './StudioClock';\nimport StudioTimers from './StudioTimers';\nimport { StudioData, useStudioData } from './useStudioData';\n\nimport './Studio.scss';\n\nexport default function StudioLoader() {\n const { data, status } = useStudioData();\n\n useWindowTitle('Studio Clock');\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 <Studio {...data} />;\n}\n\nfunction Studio({ projectData, isMirrored, settings, viewSettings }: StudioData) {\n const { hideCards } = useStudioOptions();\n\n // gather option data\n const defaultFormat = getDefaultFormat(settings?.timeFormat);\n const studioOptions = useMemo(() => getStudioOptions(defaultFormat), [defaultFormat]);\n\n return (\n <div className={cx(['studio', isMirrored && 'mirror'])} data-testid='studio-view'>\n <ViewParamsEditor target={OntimeView.StudioClock} viewOptions={studioOptions} />\n\n <div className='project-header'>\n {projectData?.logo && <ViewLogo name={projectData.logo} className='logo' />}\n <div className='title'>{projectData.title}</div>\n </div>\n\n <div className={cx(['studio-contents', hideCards && 'studio-contents--onecol'])}>\n <StudioClock hideCards={hideCards} />\n {!hideCards && <StudioTimers viewSettings={viewSettings} />}\n </div>\n </div>\n );\n}\n"],"names":["getStudioOptions","timeFormat","title","OptionTitle","ClockOptions","collapsible","options","getTimeOption","ElementVisibility","id","description","type","defaultValue","getOptionsFromParams","searchParams","defaultValues","hideCards","isStringBoolean","key","get","useStudioOptions","useSearchParams","maybePreset","use","PresetContext","useMemo","URLSearchParams","search","undefined","getLargeClockData","clock","display","meridian","formatted","formatTime","endsWith","slice","seconds","secondsInMillis","activeIndicators","Array","keys","secondsIndicators","StudioClock","isSmallScreen","useIsSmallScreen","playback","useStudioClockSocket","onAir","Playback","Stop","jsx","StudioClockMobile","jsxs","map","i","cx","transform","Boolean","displayClock","SuperscriptTime","format12","format24","getFormattedScheduleTimes","data","actualStart","expectedEnd","offset","getOffsetText","getFormattedEventData","eventNow","timer","startedAt","expectedFinish","millisToString","current","StudioTimers","viewSettings","getLocalizedString","useTranslation","eventNext","message","time","rundown","expectedRundownEnd","useStudioTimersSocket","schedule","event","eventNextTitle","formattedTimerMessage","visible","text","formattedSecondaryMessage","secondarySource","secondary","timerColour","getTimerColour","phase","TimerPhase","Warning","Danger","offsetState","getOffsetState","Overtime","Pause","StudioTimersAux","auxTimer","useAuxTimersTime","aux1","aux2","aux3","useStudioData","isMirrored","useViewOptionsStore","state","mirror","projectData","status","projectDataStatus","useProjectData","viewSettingsStatus","useViewSettings","settings","settingsStatus","useSettings","aggregateQueryStatus","StudioLoader","useWindowTitle","Loader","EmptyPage","Studio","defaultFormat","getDefaultFormat","studioOptions","ViewParamsEditor","OntimeView","logo","ViewLogo"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{h as s,j as u,cf as y,cg as g}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=StyleEditor-
|
|
1
|
+
import{h as s,j as u,cf as y,cg as g}from"./vendor-DmGkEtRj.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new e.Error().stack;r&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[r]="c02a01ff-d919-488a-8393-ba4a5dd3dfb3",e._sentryDebugIdIdentifier="sentry-dbid-c02a01ff-d919-488a-8393-ba4a5dd3dfb3")}catch{}})();const h="_wrapper_1l24u_17",b={wrapper:h},c=s.forwardRef((e,r)=>{const{language:d,initialValue:t,isDirty:i,setIsDirty:o}=e,[a,f]=s.useState(t),p=n=>{const l=g.languages[d];return l?g.highlight(n,l,d):n},m=n=>{f(n)};return s.useImperativeHandle(r,()=>({getCss:()=>a})),s.useEffect(()=>{f(t)},[t]),s.useEffect(()=>{t.trim()!==a.trim()&&!i&&a.length!==0&&o(!0),t.trim()===a.trim()&&i&&o(!1)},[t,a,i,o]),u.jsx("div",{className:b.wrapper,children:u.jsx(y,{value:a,padding:15,onValueChange:m,highlight:p,style:{fontFamily:"monospace",fontSize:12,minHeight:500,background:"#2d2d2d"}})})});c.displayName="StyleEditor";const E=s.memo(c);export{E as default};
|
|
2
|
+
//# sourceMappingURL=StyleEditor-DYybY9tA.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StyleEditor-
|
|
1
|
+
{"version":3,"file":"StyleEditor-DYybY9tA.js","sources":["../../src/features/app-settings/panel/settings-panel/composite/StyleEditor.tsx"],"sourcesContent":["import { forwardRef, memo, useEffect, useImperativeHandle, useState } from 'react';\nimport Editor from 'react-simple-code-editor';\nimport Prism from 'prismjs/components/prism-core';\n\nimport 'prismjs/components/prism-css';\nimport 'prismjs/themes/prism-tomorrow.min.css';\nimport style from './StyleEditor.module.scss';\n\ninterface CodeEditorProps {\n language: string;\n initialValue: string;\n isDirty: boolean;\n setIsDirty: (value: boolean) => void;\n}\n\nconst CodeEditor = forwardRef((props: CodeEditorProps, cssRef) => {\n const { language, initialValue, isDirty, setIsDirty } = props;\n\n const [code, setCode] = useState(initialValue);\n\n const highlight = (code: string) => {\n const grammar = Prism.languages[language];\n return grammar ? Prism.highlight(code, grammar, language) : code;\n };\n\n const handleChange = (newCode: string) => {\n setCode(newCode);\n };\n\n useImperativeHandle(cssRef, () => {\n return {\n getCss: () => code,\n };\n });\n\n // add contents to editor on mount and any change in initialValue\n useEffect(() => {\n setCode(initialValue);\n }, [initialValue]);\n\n // handle dirty state on change\n useEffect(() => {\n if (initialValue.trim() !== code.trim() && !isDirty && code.length !== 0) {\n setIsDirty(true);\n }\n\n if (initialValue.trim() === code.trim() && isDirty) {\n setIsDirty(false);\n }\n }, [initialValue, code, isDirty, setIsDirty]);\n\n return (\n <div className={style.wrapper}>\n <Editor\n value={code}\n padding={15}\n onValueChange={handleChange}\n highlight={highlight}\n style={{\n fontFamily: 'monospace',\n fontSize: 12,\n minHeight: 500,\n background: '#2d2d2d', // Background of tomorrow theme\n }}\n />\n </div>\n );\n});\n\nCodeEditor.displayName = 'StyleEditor';\n\nexport default memo(CodeEditor);\n"],"names":["CodeEditor","forwardRef","props","cssRef","language","initialValue","isDirty","setIsDirty","code","setCode","useState","highlight","grammar","Prism","languages","handleChange","newCode","useImperativeHandle","getCss","useEffect","trim","length","jsx","style","wrapper","Editor","fontFamily","fontSize","minHeight","background","displayName","memo"],"mappings":"ocAeMA,EAAaC,EAAAA,WAAW,CAACC,EAAwBC,IAAW,CAC1D,KAAA,CAAEC,SAAAA,EAAUC,aAAAA,EAAcC,QAAAA,EAASC,WAAAA,CAAAA,EAAeL,EAElD,CAACM,EAAMC,CAAO,EAAIC,EAAAA,SAASL,CAAY,EAEvCM,EAAaH,GAAiB,CAC5BI,MAAAA,EAAUC,EAAMC,UAAUV,CAAQ,EACxC,OAAOQ,EAAUC,EAAMF,UAAUH,EAAMI,EAASR,CAAQ,EAAII,CAC9D,EAEMO,EAAgBC,GAAoB,CACxCP,EAAQO,CAAO,CACjB,EAEAC,OAAAA,EAAAA,oBAAoBd,EAAQ,KACnB,CACLe,OAAQA,IAAMV,CAChB,EACD,EAGDW,EAAAA,UAAU,IAAM,CACdV,EAAQJ,CAAY,CAAA,EACnB,CAACA,CAAY,CAAC,EAGjBc,EAAAA,UAAU,IAAM,CACVd,EAAae,KAAK,IAAMZ,EAAKY,QAAU,CAACd,GAAWE,EAAKa,SAAW,GACrEd,EAAW,EAAI,EAGbF,EAAae,KAAK,IAAMZ,EAAKY,KAAAA,GAAUd,GACzCC,EAAW,EAAK,GAEjB,CAACF,EAAcG,EAAMF,EAASC,CAAU,CAAC,EAGzCe,EAAAA,IAAA,MAAA,CAAI,UAAWC,EAAMC,QACpB,SAACF,MAAAG,EAAA,CACC,MAAOjB,EACP,QAAS,GACT,cAAeO,EACf,UAAAJ,EACA,MAAO,CACLe,WAAY,YACZC,SAAU,GACVC,UAAW,IACXC,WAAY,WACZ,CAEN,CAAA,CAEJ,CAAC,EAED7B,EAAW8B,YAAc,cAEzB,MAAeC,EAAAA,EAAAA,KAAK/B,CAAU"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as r}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=SuperscriptPeriod-
|
|
1
|
+
import{j as r}from"./vendor-DmGkEtRj.js";/* empty css */(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},d=new e.Error().stack;d&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[d]="00a8c8dc-5631-4773-8d28-638a8f49d145",e._sentryDebugIdIdentifier="sentry-dbid-00a8c8dc-5631-4773-8d28-638a8f49d145")}catch{}})();function o({time:e,className:d}){const[i,n]=e.split(" ");return r.jsxs("div",{className:d,children:[i,n&&r.jsx("sup",{className:"period",children:n})]})}export{o as S};
|
|
2
|
+
//# sourceMappingURL=SuperscriptPeriod-NmBzJhFK.js.map
|
|
Binary file
|
|
Binary file
|
package/client/assets/{SuperscriptPeriod-DsPdWN_s.js.map → SuperscriptPeriod-NmBzJhFK.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuperscriptPeriod-
|
|
1
|
+
{"version":3,"file":"SuperscriptPeriod-NmBzJhFK.js","sources":["../../src/views/common/superscript-time/SuperscriptPeriod.tsx"],"sourcesContent":["import './SuperscriptTime.scss';\n\ninterface SuperscriptPeriodProps {\n time: string;\n className?: string;\n}\n\n/**\n * Receives a time string and formats periods (am/pm) as superscript\n * @example 12:00 AM -> AM becomes a superscript\n * @example 12:00:10 -> no formatting changes applied\n */\nexport default function SuperscriptPeriod({ time, className }: SuperscriptPeriodProps) {\n // we assume anything after space is a period tag\n const [timeString, period] = time.split(' ');\n\n return (\n <div className={className}>\n {timeString}\n {period && <sup className='period'>{period}</sup>}\n </div>\n );\n}\n"],"names":["SuperscriptPeriod","time","className","timeString","period","split","jsxs","jsx"],"mappings":"yaAYA,SAAwBA,EAAkB,CAAEC,KAAAA,EAAMC,UAAAA,CAAkC,EAAG,CAErF,KAAM,CAACC,EAAYC,CAAM,EAAIH,EAAKI,MAAM,GAAG,EAGzC,OAAAC,OAAC,OAAI,UAAAJ,EACFC,SAAAA,CAAAA,EACAC,GAAUG,EAAA,IAAC,MAAI,CAAA,UAAU,SAAUH,SAAOA,CAAA,CAAA,CAAA,EAC7C,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as n}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=SuperscriptTime-
|
|
1
|
+
import{j as n}from"./vendor-DmGkEtRj.js";/* empty css */(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]="aefb1501-4118-4a11-bc95-53da82643f28",e._sentryDebugIdIdentifier="sentry-dbid-aefb1501-4118-4a11-bc95-53da82643f28")}catch{}})();function a(e){return e.length!==8?[e,""]:[e.slice(0,5),e.slice(5)]}function l({time:e,className:s,style:r}){const[d,i]=e.split(" "),[o,t]=a(d);return n.jsxs("div",{className:s,style:r,children:[o,t&&n.jsx("span",{className:"subscript",children:t}),i&&n.jsx("sup",{className:"period",children:i})]})}export{l as S};
|
|
2
|
+
//# sourceMappingURL=SuperscriptTime-CA_8XRM6.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuperscriptTime-
|
|
1
|
+
{"version":3,"file":"SuperscriptTime-CA_8XRM6.js","sources":["../../src/views/common/superscript-time/SuperscriptTime.tsx"],"sourcesContent":["import { CSSProperties } from 'react';\n\nimport './SuperscriptTime.scss';\n\ninterface SuperscriptTimeProps {\n time: string;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * When the timer includes seconds, we want to split it from the rest\n */\nfunction getTimerParts(time: string) {\n if (time.length !== 8) {\n return [time, ''];\n }\n\n return [time.slice(0, 5), time.slice(5)];\n}\n\n/**\n * Receives a time string and formats it with a subscript or superscript\n * @example 12:00 AM -> AM becomes a superscript\n * @example 12:00:10 -> the seconds become a subscript\n */\nexport default function SuperscriptTime({ time, className, style }: SuperscriptTimeProps) {\n // we assume anything after space is a period tag\n const [timeString, period] = time.split(' ');\n const [mainTime, subscript] = getTimerParts(timeString);\n\n return (\n <div className={className} style={style}>\n {mainTime}\n {subscript && <span className='subscript'>{subscript}</span>}\n {period && <sup className='period'>{period}</sup>}\n </div>\n );\n}\n"],"names":["getTimerParts","time","length","slice","SuperscriptTime","className","style","timeString","period","split","mainTime","subscript","jsxs","jsx"],"mappings":"yaAaA,SAASA,EAAcC,EAAc,CAC/BA,OAAAA,EAAKC,SAAW,EACX,CAACD,EAAM,EAAE,EAGX,CAACA,EAAKE,MAAM,EAAG,CAAC,EAAGF,EAAKE,MAAM,CAAC,CAAC,CACzC,CAOA,SAAwBC,EAAgB,CAAEH,KAAAA,EAAMI,UAAAA,EAAWC,MAAAA,CAA4B,EAAG,CAExF,KAAM,CAACC,EAAYC,CAAM,EAAIP,EAAKQ,MAAM,GAAG,EACrC,CAACC,EAAUC,CAAS,EAAIX,EAAcO,CAAU,EAGpD,OAAAK,EAAA,KAAC,MAAI,CAAA,UAAAP,EAAsB,MAAAC,EACxBI,SAAAA,CAAAA,EACAC,GAAaE,EAAA,IAAC,OAAK,CAAA,UAAU,YAAaF,SAAUA,EAAA,EACpDH,GAAUK,EAAA,IAAC,MAAI,CAAA,UAAU,SAAUL,SAAOA,CAAA,CAAA,CAAA,EAC7C,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e,bz as m,bA as x,bB as y,bC as g,bD as j,bE as w,bF as v,aR as C,aS as P,bG as k,bH as D,bd as S,bI as p,bJ as I}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=SwatchPicker-
|
|
1
|
+
import{j as e,bz as m,bA as x,bB as y,bC as g,bD as j,bE as w,bF as v,aR as C,aS as P,bG as k,bH as D,bd as S,bI as p,bJ as I}from"./vendor-DmGkEtRj.js";import{e as d,aC as b}from"./index-B1K7rED_.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},o=new s.Error().stack;o&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[o]="6f5a0b42-2233-440a-a128-7045be53961e",s._sentryDebugIdIdentifier="sentry-dbid-6f5a0b42-2233-440a-a128-7045be53961e")}catch{}})();const N="_blink_10e6s_1",R="_fourtyfive_10e6s_13",T="_medium_10e6s_43",E="_large_10e6s_51",O="_thumb_10e6s_59",i={blink:N,fourtyfive:R,switch:"_switch_10e6s_17",medium:T,large:E,thumb:O};function M({size:s="medium",...o}){return e.jsx(m,{className:d([i.switch,i[s]]),...o,children:e.jsx(x,{className:i.thumb})})}const $="_popup_1xpg9_17",z="_title_1xpg9_34",u={popup:$,title:z};function A({title:s,className:o,children:t,...n}){return e.jsx(y,{children:e.jsx(g,{sideOffset:8,...n,children:e.jsxs(j,{className:u.popup,children:[s&&e.jsx(w,{className:u.title,children:s}),e.jsx(v,{className:o,render:e.jsx("div",{}),children:t})]})})})}const F="_input_jz3ye_17",H={input:F};function _({color:s,onChange:o,children:t}){return e.jsxs(C,{children:[e.jsx(P,{children:t}),e.jsxs(A,{children:[e.jsx(k,{color:s,onChange:o}),e.jsx(D,{color:s,onChange:o,className:H.input,prefixed:!0})]})]})}const B="_list_1tpdr_17",G="_swatch_1tpdr_23",J="_selected_1tpdr_33",q="_selectable_1tpdr_36",l={list:B,swatch:G,selected:J,selectable:q};function Q(s){const{color:o,onChange:t,isSelected:n,alwaysDisplayColor:c}=s,a=S(f=>{t(f)},100),r=c||n?o:"",{color:h}=b(r);return e.jsx(_,{color:r,onChange:a,children:e.jsx("div",{className:d([l.swatch,n&&l.selected,l.selectable]),style:{backgroundColor:r},children:e.jsx(p,{color:h})})})}function U(s){const{name:o,control:t}=s,{field:{onChange:n,value:c}}=I({control:t,name:o}),a=typeof c=="string"?c:"",{color:r}=b(a);return e.jsx(_,{color:c,onChange:n,children:e.jsx("div",{className:d([l.swatch,l.selectable]),style:{backgroundColor:a},children:e.jsx(p,{color:r})})})}export{A as P,M as S,U as a,Q as b,l as s};
|
|
2
|
+
//# sourceMappingURL=SwatchPicker-C8eFQKBd.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwatchPicker-
|
|
1
|
+
{"version":3,"file":"SwatchPicker-C8eFQKBd.js","sources":["../../src/common/components/switch/Switch.tsx","../../src/common/components/popover/Popover.tsx","../../src/common/components/input/popover-picker/PopoverPicker.tsx","../../src/common/components/input/colour-input/SwatchPicker.tsx"],"sourcesContent":["import { Switch as BaseSwitch } from '@base-ui/react/switch';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport style from './Switch.module.scss';\n\ninterface SwitchProps extends BaseSwitch.Root.Props {\n size?: 'medium' | 'large';\n}\n\nexport default function Switch({ size = 'medium', ...switchProps }: SwitchProps) {\n return (\n <BaseSwitch.Root className={cx([style.switch, style[size]])} {...switchProps}>\n <BaseSwitch.Thumb className={style.thumb} />\n </BaseSwitch.Root>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { Popover } from '@base-ui/react/popover';\n\nimport style from './Popover.module.scss';\n\ninterface PopoverContentsProps extends Popover.Positioner.Props {\n title?: string;\n className?: string;\n}\nexport default function PopoverContents({\n title,\n className,\n children,\n ...popoverProps\n}: PropsWithChildren<PopoverContentsProps>) {\n return (\n <Popover.Portal>\n <Popover.Positioner sideOffset={8} {...popoverProps}>\n <Popover.Popup className={style.popup}>\n {title && <Popover.Title className={style.title}>{title}</Popover.Title>}\n <Popover.Description className={className} render={<div />}>\n {children}\n </Popover.Description>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n );\n}\n","import { PropsWithChildren } from 'react';\nimport { HexAlphaColorPicker, HexColorInput } from 'react-colorful';\nimport { Popover } from '@base-ui/react/popover';\n\nimport PopoverContents from '../../popover/Popover';\n\nimport style from './PopoverPicker.module.scss';\n\ninterface PopoverPickerProps {\n color: string;\n onChange: (color: string) => void;\n}\n\nexport default function PopoverPicker({ color, onChange, children }: PropsWithChildren<PopoverPickerProps>) {\n return (\n <Popover.Root>\n <Popover.Trigger>{children}</Popover.Trigger>\n <PopoverContents>\n <HexAlphaColorPicker color={color} onChange={onChange} />\n <HexColorInput color={color} onChange={onChange} className={style.input} prefixed />\n </PopoverContents>\n </Popover.Root>\n );\n}\n","import { useController, UseControllerProps } from 'react-hook-form';\nimport { IoEyedrop } from 'react-icons/io5';\nimport { useDebouncedCallback } from '@mantine/hooks';\nimport { ViewSettings } from 'ontime-types';\n\nimport { cx, getAccessibleColour } from '../../../utils/styleUtils';\nimport PopoverPicker from '../popover-picker/PopoverPicker';\n\nimport style from './SwatchSelect.module.scss';\n\ninterface SwatchPickerProps {\n color: string;\n isSelected?: boolean;\n onChange: (name: string) => void;\n alwaysDisplayColor?: boolean;\n}\n\nexport default function SwatchPicker(props: SwatchPickerProps) {\n const { color, onChange, isSelected, alwaysDisplayColor } = props;\n\n const debouncedOnChange = useDebouncedCallback((newValue: string) => {\n onChange(newValue);\n }, 100);\n\n const displayColor = alwaysDisplayColor || isSelected ? color : '';\n const { color: iconColor } = getAccessibleColour(displayColor);\n\n return (\n <PopoverPicker color={displayColor} onChange={debouncedOnChange}>\n <div\n className={cx([style.swatch, isSelected && style.selected, style.selectable])}\n style={{ backgroundColor: displayColor }}\n >\n <IoEyedrop color={iconColor} />\n </div>\n </PopoverPicker>\n );\n}\n\nexport function SwatchPickerRHF(props: UseControllerProps<ViewSettings>) {\n const { name, control } = props;\n const {\n field: { onChange, value },\n } = useController({ control, name });\n\n const displayColor = typeof value === 'string' ? value : '';\n const { color: iconColor } = getAccessibleColour(displayColor);\n\n return (\n <PopoverPicker color={value as string} onChange={onChange}>\n <div className={cx([style.swatch, style.selectable])} style={{ backgroundColor: displayColor }}>\n <IoEyedrop color={iconColor} />\n </div>\n </PopoverPicker>\n );\n}\n"],"names":["Switch","size","switchProps","jsx","BaseSwitch.Root","cx","style","switch","BaseSwitch.Thumb","thumb","PopoverContents","title","className","children","popoverProps","Popover.Portal","Popover.Positioner","jsxs","Popover.Popup","popup","Popover.Title","Popover.Description","PopoverPicker","color","onChange","Popover.Root","Popover.Trigger","HexAlphaColorPicker","HexColorInput","input","SwatchPicker","props","isSelected","alwaysDisplayColor","debouncedOnChange","useDebouncedCallback","newValue","displayColor","iconColor","getAccessibleColour","swatch","selected","selectable","backgroundColor","IoEyedrop","SwatchPickerRHF","name","control","field","value","useController"],"mappings":"8tBAUA,SAAwBA,EAAO,CAAEC,KAAAA,EAAO,SAAU,GAAGC,CAAyB,EAAG,CAE7E,OAAAC,EAAA,IAACC,EAAA,CAAgB,UAAWC,EAAG,CAACC,EAAMC,OAAQD,EAAML,CAAI,CAAC,CAAC,EAAOC,GAAAA,EAC/D,SAACC,EAAAA,IAAAK,EAAA,CAAiB,UAAWF,EAAMG,KAAM,CAAA,EAC3C,CAEJ,mECPA,SAAwBC,EAAgB,CACtCC,MAAAA,EACAC,UAAAA,EACAC,SAAAA,EACA,GAAGC,CACoC,EAAG,CAC1C,aACGC,EAAA,CACC,SAACZ,EAAAA,IAAAa,EAAA,CAAmB,WAAY,EAAG,GAAIF,EACrC,SAACG,EAAAA,KAAAC,EAAA,CAAc,UAAWZ,EAAMa,MAC7BR,SAAAA,CAAAA,SAAUS,EAAA,CAAc,UAAWd,EAAMK,MAAQA,SAAMA,EAAA,EACxDR,MAACkB,EAAA,CAAoB,UAAAT,EAAsB,OAAQT,EAAAA,IAAC,UACjDU,SAAAA,CACH,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ,uCCdA,SAAwBS,EAAc,CAAEC,MAAAA,EAAOC,SAAAA,EAAUX,SAAAA,CAAgD,EAAG,CAExG,OAAAI,EAAA,KAACQ,EAAA,CACC,SAAA,CAACtB,MAAAuB,EAAA,CAAiBb,SAAAA,EAAS,SAC1BH,EACC,CAAA,SAAA,CAACP,EAAAA,IAAAwB,EAAA,CAAoB,MAAAJ,EAAc,SAAAC,CAAmB,CAAA,EACtDrB,MAACyB,GAAc,MAAAL,EAAc,SAAAC,EAAoB,UAAWlB,EAAMuB,MAAO,SAAQ,EAAA,CAAA,CAAA,CACnF,CAAA,CAAA,EACF,CAEJ,2ICNA,SAAwBC,EAAaC,EAA0B,CACvD,KAAA,CAAER,MAAAA,EAAOC,SAAAA,EAAUQ,WAAAA,EAAYC,mBAAAA,CAAAA,EAAuBF,EAEtDG,EAAoBC,EAAsBC,GAAqB,CACnEZ,EAASY,CAAQ,GAChB,GAAG,EAEAC,EAAeJ,GAAsBD,EAAaT,EAAQ,GAC1D,CAAEA,MAAOe,CAAAA,EAAcC,EAAoBF,CAAY,EAG3D,OAAAlC,EAAA,IAACmB,GAAc,MAAOe,EAAc,SAAUH,EAC5C,SAAA/B,EAAA,IAAC,OACC,UAAWE,EAAG,CAACC,EAAMkC,OAAQR,GAAc1B,EAAMmC,SAAUnC,EAAMoC,UAAU,CAAC,EAC5E,MAAO,CAAEC,gBAAiBN,CAAAA,EAE1B,SAAClC,EAAA,IAAAyC,EAAA,CAAU,MAAON,CAAU,CAAA,CAC9B,CAAA,EACF,CAEJ,CAEO,SAASO,EAAgBd,EAAyC,CACjE,KAAA,CAAEe,KAAAA,EAAMC,QAAAA,CAAAA,EAAYhB,EACpB,CACJiB,MAAO,CAAExB,SAAAA,EAAUyB,MAAAA,CAAAA,GACjBC,EAAc,CAAEH,QAAAA,EAASD,KAAAA,CAAAA,CAAM,EAE7BT,EAAe,OAAOY,GAAU,SAAWA,EAAQ,GACnD,CAAE1B,MAAOe,CAAAA,EAAcC,EAAoBF,CAAY,EAE7D,aACGf,EAAc,CAAA,MAAO2B,EAAiB,SAAAzB,EACrC,eAAC,MAAI,CAAA,UAAWnB,EAAG,CAACC,EAAMkC,OAAQlC,EAAMoC,UAAU,CAAC,EAAG,MAAO,CAAEC,gBAAiBN,CAAAA,EAC9E,SAAClC,EAAA,IAAAyC,EAAA,CAAU,MAAON,CAAU,CAAA,CAC9B,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e,h as C,b2 as P,b3 as M,b4 as U,b5 as A,b6 as F,b7 as H,b8 as z}from"./vendor-
|
|
2
|
-
//# sourceMappingURL=TimeElements-
|
|
1
|
+
import{j as e,h as C,b2 as P,b3 as M,b4 as U,b5 as A,b6 as F,b7 as H,b8 as z}from"./vendor-DmGkEtRj.js";import{s as v,m as b,bk as m,A as V,e as d,bl as W,f as h,bm as q,x as w,bn as K,v as B,K as J,y as L,bo as Q,bp as X,bq as Y,br as I,T as E,bs as Z,bt as ee}from"./index-B1K7rED_.js";import{T as f}from"./Tooltip-BTK4bJkV.js";import{v as G}from"./useRundown-BGhL8DEI.js";import{a as te,g as ae}from"./offset-FplkvYRD.js";import{S as N}from"./SuperscriptPeriod-NmBzJhFK.js";import{i as g}from"./playbackstate-1HCEpVh5.js";(function(){try{var a=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new a.Error().stack;n&&(a._sentryDebugIds=a._sentryDebugIds||{},a._sentryDebugIds[n]="ab64aecc-d13f-4095-adee-5745f13eec91",a._sentryDebugIdIdentifier="sentry-dbid-ab64aecc-d13f-4095-adee-5745f13eec91")}catch{}})();function S(a,n=3,s,l="due"){return a!==null&&a<=0?l:se(a,n,s)}function se(a,n=3,s){return b(a,{fallback:n===3?m:V,direction:s})}function R(a){return a!==null&&a>v?[a%v,Math.floor(a/v)]:[a,0]}const ne="_label_1ahsu_18",le="_clock_1ahsu_23",re="_column_1ahsu_35",ce="_over_1ahsu_47",ie="_under_1ahsu_48",o={label:ne,clock:le,column:re,over:ce,under:ie};function $({label:a,value:n,state:s="active",className:l,testId:c}){return e.jsxs("div",{className:d([o.column,l]),"data-state":s,children:[e.jsx("span",{className:o.label,children:a}),e.jsx("span",{className:o.clock,"data-testid":c,children:n})]})}function de({label:a,state:n="active",className:s,render:l}){return e.jsxs("div",{className:d([o.column,s]),"data-state":n,children:[e.jsx("span",{className:o.label,children:a}),l(o.clock)]})}function oe({state:a,value:n,testId:s}){return e.jsxs("div",{className:o.column,"data-state":a,children:[e.jsxs("div",{className:o.label,children:[e.jsx("span",{className:o.over,children:"Over"}),e.jsx("span",{children:"/"}),e.jsx("span",{className:o.under,children:"Under"})]}),e.jsx("span",{className:o.clock,"data-testid":s,children:n})]})}const ue="_column_1uyfj_17",me="_row_1uyfj_26",fe="_metadataRow_1uyfj_33",xe="_labelledElement_1uyfj_40",pe="_icon_1uyfj_46",be="_label_1uyfj_40",je="_time_1uyfj_58",Te="_daySpan_1uyfj_65",ve="_muted_1uyfj_80",ye="_labelTitle_1uyfj_84",_e="_dueTime_1uyfj_93",t={column:ue,row:me,metadataRow:fe,labelledElement:xe,icon:pe,label:be,time:je,daySpan:Te,muted:ve,labelTitle:ye,dueTime:_e};function Ce({shouldFormat:a}){const{plannedEnd:n,plannedStart:s,actualStart:l}=W(),c={format12:"hh:mm:ss a",format24:"HH:mm:ss"},u=s===null?m:a?h(s,c):b(s,{fallback:m}),x=l===null?m:a?h(l,c):b(l,{fallback:m}),[r,i]=C.useMemo(()=>R(n),[n]),j=r===null?m:a?h(r,c):b(r,{fallback:m}),p=i>0,T=p?`Planned end time (rundown spans over ${i+1} days)`:"Planned end time";return e.jsxs("div",{className:t.column,children:[e.jsxs("div",{className:t.row,children:[e.jsx("span",{className:t.label,children:"Start"}),e.jsx(f,{text:"Planned start time",render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(P,{className:t.icon}),e.jsx(N,{className:d([t.time,s===null&&t.muted]),time:u})]})}),e.jsx(f,{text:"Actual start time",render:e.jsxs("div",{className:t.labelledElement,"data-testid":"actual-start-time",children:[e.jsx(M,{className:t.icon}),e.jsx(N,{className:d([t.time,l===null&&t.muted]),time:x})]})})]}),e.jsxs("div",{className:t.row,children:[e.jsx("span",{className:t.label,children:"End"}),e.jsx(f,{text:T,render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(P,{className:t.icon}),e.jsx(N,{className:d([t.time,n===null&&t.muted]),time:j}),p&&e.jsx("span",{className:d([t.time,t.daySpan]),"data-day-offset":i})]})}),e.jsx(he,{shouldFormat:a})]})]})}function he({shouldFormat:a}){const{expectedEnd:n}=Q(),[s,l]=C.useMemo(()=>R(n),[n]),c=s===null?m:a?h(s,{format12:"hh:mm:ss a",format24:"HH:mm:ss"}):b(s,{fallback:m}),u=s!==null&&l>0,x=u?`Expected end time (rundown spans over ${l+1} days)`:"Expected end time";return e.jsx(f,{text:x,render:e.jsxs("div",{className:t.labelledElement,children:[e.jsx(U,{className:t.icon}),e.jsx(N,{className:d([t.time,s===null&&t.muted]),time:c}),u&&e.jsx("span",{className:d([t.time,t.daySpan]),"data-day-offset":l})]})})}function Ie(){return e.jsxs("div",{className:t.column,children:[e.jsx(Ne,{}),e.jsx(Ee,{})]})}function Ne(){const{clock:a,mode:n,groupExpectedEnd:s,actualGroupStart:l,currentDay:c,playback:u}=X(),{currentGroupId:x}=Y(),r=G(x),i=g(u),j=(()=>{if(!i||!r||r.timeStart===null)return null;const _=a+c*v;return n===I.Absolute?r.timeStart+r.duration-_:l+r.duration-_})(),p=S(j,3,E.CountDown),T=s!==null?s-a:null,y=S(T,3,E.CountDown);return e.jsxs("div",{className:t.metadataRow,children:[e.jsx("span",{className:r!=null&&r.title?t.labelTitle:t.label,children:`${(r==null?void 0:r.title)||"Group"} `}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to planned group end",render:e.jsx(A,{className:t.icon})}),e.jsx("span",{className:d([t.time,(!r||!i)&&t.muted,p==="due"&&t.dueTime]),children:p})]}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to expected group end",render:e.jsx(F,{className:t.icon})}),e.jsx("span",{className:d([t.time,!s&&t.muted,y==="due"&&t.dueTime]),children:y})]})]})}function Ee(){const{clock:a,mode:n,actualStart:s,plannedStart:l,playback:c,currentDay:u}=Z(),{id:x,expectedStart:r}=ee(),i=G(x),j=g(c),p=(()=>{if(!j||!i)return null;const D=i.timeStart+i.dayOffset*v,O=a+u*v;return n===I.Absolute?D-O:D+s-l-O})(),T=S(p,3,E.CountDown),y=r!==null?r-a:null,_=S(y,3,E.CountDown),k=(i==null?void 0:i.title)??null;return e.jsxs("div",{className:t.metadataRow,children:[e.jsx("span",{className:k?t.labelTitle:t.label,children:`${k||"Flag"} `}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to next flag planned start",render:e.jsx(H,{className:t.icon})}),e.jsx("span",{"data-testid":"flag-plannedStart",className:d([t.time,(!i||!j)&&t.muted,T==="due"&&t.dueTime]),children:T})]}),e.jsxs("div",{className:t.labelledElement,children:[e.jsx(f,{text:"Time to next flag expected start",render:e.jsx(z,{className:t.icon})}),e.jsx("span",{"data-testid":"flag-expectedStart",className:d([t.time,y===null&&t.muted,_==="due"&&t.dueTime]),children:_})]})]})}function Ge(){const{numEvents:a,selectedEventIndex:n}=q(),s=n!==null?n+1:w,l=a?`${s} of ${a||w}`:w;return e.jsx($,{label:"Progress",value:l,state:n===null?"muted":"active"})}function Re(){const{offset:a,playback:n}=K(),s=g(n),l=ae(s?a:null),c=te(s?a:null);return e.jsx(oe,{state:l,value:c,testId:"offset"})}function $e({shouldFormat:a,className:n}){const{clock:s}=B(),l=a?h(s):b(s);return e.jsx(de,{label:"Time now",className:n,render:c=>e.jsx(N,{className:c,time:l})})}function Me({className:a}){const n=J(),s=n.phase===L.Pending,l=s?"Count to start":"Running timer",c=b(s?n.secondaryTimer:n.current,{fallback:m}),u=s?"waiting":n.current===null?"muted":"active";return e.jsx($,{label:l,value:c,state:u,className:a})}export{$e as C,Ie as M,Re as O,Ge as P,Ce as S,Me as T,se as f};
|
|
2
|
+
//# sourceMappingURL=TimeElements-D3dl9gAM.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeElements-DbclWDbU.js","sources":["../../src/features/overview/overview.utils.ts","../../src/features/overview/composite/TimeLayout.tsx","../../src/features/overview/composite/TimeElements.tsx"],"sourcesContent":["import { MaybeNumber, TimerType } from 'ontime-types';\nimport { dayInMs, millisToString } from 'ontime-utils';\n\nimport { timerPlaceholder, timerPlaceholderMin } from '../../common/utils/styleUtils';\n\n/**\n * Composition to stop negative timers from being formatted\n * They should show a due string instead\n *\n * This is used for cases when a negative timer is unwanted\n * eg: count down to a milestone\n */\nexport function formatDueTime(\n time: MaybeNumber,\n segments: number = 3,\n direction?: TimerType.CountDown | TimerType.CountUp,\n dueString = 'due',\n): string {\n if (time !== null && time <= 0) return dueString;\n return formattedTime(time, segments, direction);\n}\n\n/**\n * Encapsulates the logic for formatting time in overview\n */\nexport function formattedTime(\n time: MaybeNumber,\n segments: number = 3,\n direction?: TimerType.CountDown | TimerType.CountUp,\n): string {\n return millisToString(time, { fallback: segments === 3 ? timerPlaceholder : timerPlaceholderMin, direction });\n}\n\n/**\n * Calculates how long a time is and how many days it spans\n */\nexport function calculateEndAndDaySpan(end: MaybeNumber): [MaybeNumber, number] {\n if (end !== null && end > dayInMs) {\n return [end % dayInMs, Math.floor(end / dayInMs)];\n }\n\n return [end, 0];\n}\n","import { ReactNode } from 'react';\n\nimport { cx } from '../../../common/utils/styleUtils';\n\nimport style from './TimeLayout.module.scss';\n\ninterface TimeLayoutProps {\n label: string;\n value: string;\n state?: 'muted' | 'waiting' | 'active';\n daySpan?: number;\n className?: string;\n testId?: string;\n}\n\nexport function TimeColumn({ label, value, state = 'active', className, testId }: TimeLayoutProps) {\n return (\n <div className={cx([style.column, className])} data-state={state}>\n <span className={style.label}>{label}</span>\n <span className={style.clock} data-testid={testId}>\n {value}\n </span>\n </div>\n );\n}\n\ninterface WrappedInTimeColumnProps {\n label: string;\n state?: 'muted' | 'waiting' | 'active';\n className?: string;\n render: (className: string) => ReactNode;\n}\n\nexport function WrappedInTimeColumn({ label, state = 'active', className, render }: WrappedInTimeColumnProps) {\n return (\n <div className={cx([style.column, className])} data-state={state}>\n <span className={style.label}>{label}</span>\n {render(style.clock)}\n </div>\n );\n}\ninterface OverUnderProps {\n state: 'over' | 'under' | 'muted' | null;\n value: string;\n testId: string;\n}\n\nexport function OverUnder({ state, value, testId }: OverUnderProps) {\n return (\n <div className={style.column} data-state={state}>\n <div className={style.label}>\n <span className={style.over}>Over</span>\n <span>/</span>\n <span className={style.under}>Under</span>\n </div>\n <span className={style.clock} data-testid={testId}>\n {value}\n </span>\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport {\n TbCalendarClock,\n TbCalendarPin,\n TbCalendarStar,\n TbFlagPin,\n TbFlagStar,\n TbFolderPin,\n TbFolderStar,\n} from 'react-icons/tb';\nimport { OffsetMode, OntimeEvent, OntimeGroup, TimerPhase, TimerType } from 'ontime-types';\nimport { dayInMs, isPlaybackActive, millisToString } from 'ontime-utils';\n\nimport Tooltip from '../../../common/components/tooltip/Tooltip';\nimport {\n useClock,\n useCurrentGroupId,\n useFlagTimerOverView,\n useGroupTimerOverView,\n useNextFlag,\n useOffsetOverview,\n useProgressOverview,\n useRundownExpectedEnd,\n useStartTimesOverview,\n useTimer,\n} from '../../../common/hooks/useSocket';\nimport { useEntry } from '../../../common/hooks-query/useRundown';\nimport { getOffsetState, getOffsetText } from '../../../common/utils/offset';\nimport { cx, enDash, timerPlaceholder } from '../../../common/utils/styleUtils';\nimport { formatTime } from '../../../common/utils/time';\nimport SuperscriptPeriod from '../../../views/common/superscript-time/SuperscriptPeriod';\nimport { calculateEndAndDaySpan, formatDueTime } from '../overview.utils';\n\nimport { OverUnder, TimeColumn, WrappedInTimeColumn } from './TimeLayout';\n\nimport style from './TimeElements.module.scss';\n\ninterface OverviewTimeElementsProps {\n shouldFormat?: boolean;\n}\n\nexport function StartTimes({ shouldFormat }: OverviewTimeElementsProps) {\n const { plannedEnd, plannedStart, actualStart } = useStartTimesOverview();\n\n const formatOptions = { format12: 'hh:mm:ss a', format24: 'HH:mm:ss' };\n\n const plannedStartText = (() => {\n if (plannedStart === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(plannedStart, formatOptions);\n return millisToString(plannedStart, { fallback: timerPlaceholder });\n })();\n\n const actualStartText = (() => {\n if (actualStart === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(actualStart, formatOptions);\n return millisToString(actualStart, { fallback: timerPlaceholder });\n })();\n\n const [maybePlannedEnd, maybePlannedDaySpan] = useMemo(() => calculateEndAndDaySpan(plannedEnd), [plannedEnd]);\n\n const plannedEndText = (() => {\n if (maybePlannedEnd === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(maybePlannedEnd, formatOptions);\n return millisToString(maybePlannedEnd, { fallback: timerPlaceholder });\n })();\n\n const multipleDays = maybePlannedDaySpan > 0;\n const plannedEndTooltip = multipleDays\n ? `Planned end time (rundown spans over ${maybePlannedDaySpan + 1} days)`\n : 'Planned end time';\n\n return (\n <div className={style.column}>\n <div className={style.row}>\n <span className={style.label}>Start</span>\n <Tooltip\n text='Planned start time'\n render={\n <div className={style.labelledElement}>\n <TbCalendarPin className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, plannedStart === null && style.muted])}\n time={plannedStartText}\n />\n </div>\n }\n />\n <Tooltip\n text='Actual start time'\n render={\n <div className={style.labelledElement} data-testid='actual-start-time'>\n <TbCalendarClock className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, actualStart === null && style.muted])}\n time={actualStartText}\n />\n </div>\n }\n />\n </div>\n\n <div className={style.row}>\n <span className={style.label}>End</span>\n <Tooltip\n text={plannedEndTooltip}\n render={\n <div className={style.labelledElement}>\n <TbCalendarPin className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, plannedEnd === null && style.muted])}\n time={plannedEndText}\n />\n {multipleDays && (\n <span className={cx([style.time, style.daySpan])} data-day-offset={maybePlannedDaySpan} />\n )}\n </div>\n }\n />\n <RundownExpectedEnd shouldFormat={shouldFormat} />\n </div>\n </div>\n );\n}\n\n/**\n * Shows the expected end for the rundown\n * Extracted to improve performance as this is a ticking value\n */\nfunction RundownExpectedEnd({ shouldFormat }: OverviewTimeElementsProps) {\n const { expectedEnd } = useRundownExpectedEnd();\n\n const [maybeExpectedEnd, maybeExpectedDaySpan] = useMemo(() => calculateEndAndDaySpan(expectedEnd), [expectedEnd]);\n const maybeExpectedEndText = (() => {\n if (maybeExpectedEnd === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(maybeExpectedEnd, { format12: 'hh:mm:ss a', format24: 'HH:mm:ss' });\n return millisToString(maybeExpectedEnd, { fallback: timerPlaceholder });\n })();\n\n const multipleDays = maybeExpectedEnd !== null && maybeExpectedDaySpan > 0;\n const tooltip = multipleDays\n ? `Expected end time (rundown spans over ${maybeExpectedDaySpan + 1} days)`\n : 'Expected end time';\n\n return (\n <Tooltip\n text={tooltip}\n render={\n <div className={style.labelledElement}>\n <TbCalendarStar className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, maybeExpectedEnd === null && style.muted])}\n time={maybeExpectedEndText}\n />\n {multipleDays && <span className={cx([style.time, style.daySpan])} data-day-offset={maybeExpectedDaySpan} />}\n </div>\n }\n />\n );\n}\n\nexport function MetadataTimes() {\n return (\n <div className={style.column}>\n <GroupTimes />\n <FlagTimes />\n </div>\n );\n}\n\nfunction GroupTimes() {\n const { clock, mode, groupExpectedEnd, actualGroupStart, currentDay, playback } = useGroupTimerOverView();\n const { currentGroupId } = useCurrentGroupId();\n const group = useEntry(currentGroupId) as OntimeGroup | null;\n\n const active = isPlaybackActive(playback);\n\n // the group end time dose not encode any day offsets so it is calculated with group start time and duration\n const plannedGroupEnd = (() => {\n if (!active) return null;\n if (!group || group.timeStart === null) return null;\n const normalizedClock = clock + currentDay * dayInMs;\n\n return mode === OffsetMode.Absolute\n ? group.timeStart + group.duration - normalizedClock\n : actualGroupStart + group.duration - normalizedClock;\n })();\n\n const plannedTimeUntilGroupEnd = formatDueTime(plannedGroupEnd, 3, TimerType.CountDown);\n\n const expectedGroupEnd = groupExpectedEnd !== null ? groupExpectedEnd - clock : null;\n const expectedTimeUntilGroupEnd = formatDueTime(expectedGroupEnd, 3, TimerType.CountDown);\n\n return (\n <div className={style.metadataRow}>\n <span className={group?.title ? style.labelTitle : style.label}>{`${group?.title || 'Group'} `}</span>\n <div className={style.labelledElement}>\n <Tooltip text='Time to planned group end' render={<TbFolderPin className={style.icon} />} />\n <span\n className={cx([\n style.time,\n (!group || !active) && style.muted,\n plannedTimeUntilGroupEnd === 'due' && style.dueTime,\n ])}\n >\n {plannedTimeUntilGroupEnd}\n </span>\n </div>\n <div className={style.labelledElement}>\n <Tooltip text='Time to expected group end' render={<TbFolderStar className={style.icon} />} />\n <span\n className={cx([\n style.time,\n !groupExpectedEnd && style.muted,\n expectedTimeUntilGroupEnd === 'due' && style.dueTime,\n ])}\n >\n {expectedTimeUntilGroupEnd}\n </span>\n </div>\n </div>\n );\n}\n\nfunction FlagTimes() {\n const { clock, mode, actualStart, plannedStart, playback, currentDay } = useFlagTimerOverView();\n const { id, expectedStart } = useNextFlag();\n const entry = useEntry(id) as OntimeEvent | null;\n\n const active = isPlaybackActive(playback);\n\n const plannedFlagStart = (() => {\n if (!active) return null;\n if (!entry) return null;\n const normalizedTimeStart = entry.timeStart + entry.dayOffset * dayInMs;\n const normalizedClock = clock + currentDay * dayInMs;\n return mode === OffsetMode.Absolute\n ? normalizedTimeStart - normalizedClock\n : normalizedTimeStart + actualStart - plannedStart - normalizedClock;\n })();\n\n const plannedTimeUntilDisplay = formatDueTime(plannedFlagStart, 3, TimerType.CountDown);\n\n const expectedTimeUntil = expectedStart !== null ? expectedStart - clock : null;\n const expectedTimeUntilDisplay = formatDueTime(expectedTimeUntil, 3, TimerType.CountDown);\n\n const title = entry?.title ?? null;\n\n return (\n <div className={style.metadataRow}>\n <span className={title ? style.labelTitle : style.label}>{`${title || 'Flag'} `}</span>\n <div className={style.labelledElement}>\n <Tooltip text='Time to next flag planned start' render={<TbFlagPin className={style.icon} />} />\n <span\n data-testid='flag-plannedStart'\n className={cx([\n style.time,\n (!entry || !active) && style.muted,\n plannedTimeUntilDisplay === 'due' && style.dueTime,\n ])}\n >\n {plannedTimeUntilDisplay}\n </span>\n </div>\n <div className={style.labelledElement}>\n <Tooltip text='Time to next flag expected start' render={<TbFlagStar className={style.icon} />} />\n <span\n data-testid='flag-expectedStart'\n className={cx([\n style.time,\n expectedTimeUntil === null && style.muted,\n expectedTimeUntilDisplay === 'due' && style.dueTime,\n ])}\n >\n {expectedTimeUntilDisplay}\n </span>\n </div>\n </div>\n );\n}\n\nexport function ProgressOverview() {\n const { numEvents, selectedEventIndex } = useProgressOverview();\n\n const current = selectedEventIndex !== null ? selectedEventIndex + 1 : enDash;\n const progressText = numEvents ? `${current} of ${numEvents || enDash}` : enDash;\n\n return <TimeColumn label='Progress' value={progressText} state={selectedEventIndex === null ? 'muted' : 'active'} />;\n}\n\nexport function OffsetOverview() {\n const { offset, playback } = useOffsetOverview();\n\n const isPlaying = isPlaybackActive(playback);\n const offsetState = getOffsetState(isPlaying ? offset : null);\n const offsetText = getOffsetText(isPlaying ? offset : null);\n\n return <OverUnder state={offsetState} value={offsetText} testId='offset' />;\n}\n\nexport function ClockOverview({ shouldFormat, className }: OverviewTimeElementsProps & { className?: string }) {\n const { clock } = useClock();\n const formattedClock = shouldFormat ? formatTime(clock) : millisToString(clock);\n\n return (\n <WrappedInTimeColumn\n label='Time now'\n className={className}\n render={(clockClasses) => <SuperscriptPeriod className={clockClasses} time={formattedClock} />}\n />\n );\n}\n\nexport function TimerOverview({ className }: { className?: string }) {\n const timer = useTimer();\n\n const isWaiting = timer.phase === TimerPhase.Pending;\n const title = isWaiting ? 'Count to start' : 'Running timer';\n const display = millisToString(isWaiting ? timer.secondaryTimer : timer.current, { fallback: timerPlaceholder });\n const timerState = (() => {\n if (isWaiting) return 'waiting';\n if (timer.current === null) return 'muted';\n return 'active';\n })();\n\n return <TimeColumn label={title} value={display} state={timerState} className={className} />;\n}\n"],"names":["formatDueTime","time","segments","direction","dueString","formattedTime","millisToString","fallback","timerPlaceholder","timerPlaceholderMin","calculateEndAndDaySpan","end","dayInMs","Math","floor","TimeColumn","label","value","state","className","testId","jsxs","cx","style","column","jsx","clock","WrappedInTimeColumn","render","OverUnder","over","under","StartTimes","shouldFormat","plannedEnd","plannedStart","actualStart","useStartTimesOverview","formatOptions","format12","format24","plannedStartText","formatTime","actualStartText","maybePlannedEnd","maybePlannedDaySpan","useMemo","plannedEndText","multipleDays","plannedEndTooltip","row","Tooltip","labelledElement","TbCalendarPin","icon","SuperscriptPeriod","muted","TbCalendarClock","daySpan","RundownExpectedEnd","expectedEnd","useRundownExpectedEnd","maybeExpectedEnd","maybeExpectedDaySpan","maybeExpectedEndText","tooltip","TbCalendarStar","MetadataTimes","GroupTimes","FlagTimes","mode","groupExpectedEnd","actualGroupStart","currentDay","playback","useGroupTimerOverView","currentGroupId","useCurrentGroupId","group","useEntry","active","isPlaybackActive","plannedGroupEnd","timeStart","normalizedClock","OffsetMode","Absolute","duration","plannedTimeUntilGroupEnd","TimerType","CountDown","expectedGroupEnd","expectedTimeUntilGroupEnd","metadataRow","title","labelTitle","TbFolderPin","dueTime","TbFolderStar","useFlagTimerOverView","id","expectedStart","useNextFlag","entry","plannedFlagStart","normalizedTimeStart","dayOffset","plannedTimeUntilDisplay","expectedTimeUntil","expectedTimeUntilDisplay","TbFlagPin","TbFlagStar","ProgressOverview","numEvents","selectedEventIndex","useProgressOverview","current","enDash","progressText","OffsetOverview","offset","useOffsetOverview","isPlaying","offsetState","getOffsetState","offsetText","getOffsetText","ClockOverview","useClock","formattedClock","clockClasses","TimerOverview","timer","useTimer","isWaiting","phase","TimerPhase","Pending","display","secondaryTimer","timerState"],"mappings":"u2BAYO,SAASA,EACdC,EACAC,EAAmB,EACnBC,EACAC,EAAY,MACJ,CACR,OAAIH,IAAS,MAAQA,GAAQ,EAAUG,EAChCC,GAAcJ,EAAMC,EAAUC,CAAS,CAChD,CAKO,SAASE,GACdJ,EACAC,EAAmB,EACnBC,EACQ,CACR,OAAOG,EAAeL,EAAM,CAAEM,SAAUL,IAAa,EAAIM,EAAmBC,EAAqBN,UAAAA,CAAAA,CAAW,CAC9G,CAKO,SAASO,EAAuBC,EAAyC,CAC1EA,OAAAA,IAAQ,MAAQA,EAAMC,EACjB,CAACD,EAAMC,EAASC,KAAKC,MAAMH,EAAMC,CAAO,CAAC,EAG3C,CAACD,EAAK,CAAC,CAChB,iKC3BO,SAASI,EAAW,CAAEC,MAAAA,EAAOC,MAAAA,EAAOC,MAAAA,EAAQ,SAAUC,UAAAA,EAAWC,OAAAA,CAAwB,EAAG,CAE/F,OAAAC,EAAA,KAAC,MAAI,CAAA,UAAWC,EAAG,CAACC,EAAMC,OAAQL,CAAS,CAAC,EAAG,aAAYD,EACzD,SAAA,CAAAO,EAAA,IAAC,OAAK,CAAA,UAAWF,EAAMP,MAAQA,SAAMA,EAAA,QACpC,OAAK,CAAA,UAAWO,EAAMG,MAAO,cAAaN,EACxCH,SACHA,CAAA,CAAA,CAAA,EACF,CAEJ,CASO,SAASU,GAAoB,CAAEX,MAAAA,EAAOE,MAAAA,EAAQ,SAAUC,UAAAA,EAAWS,OAAAA,CAAiC,EAAG,CAE1G,OAAAP,EAAA,KAAC,MAAI,CAAA,UAAWC,EAAG,CAACC,EAAMC,OAAQL,CAAS,CAAC,EAAG,aAAYD,EACzD,SAAA,CAAAO,EAAA,IAAC,OAAK,CAAA,UAAWF,EAAMP,MAAQA,SAAMA,EAAA,EACpCY,EAAOL,EAAMG,KAAK,CAAA,EACrB,CAEJ,CAOO,SAASG,GAAU,CAAEX,MAAAA,EAAOD,MAAAA,EAAOG,OAAAA,CAAuB,EAAG,CAClE,cACG,MAAI,CAAA,UAAWG,EAAMC,OAAQ,aAAYN,EACxC,SAAA,CAACG,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAMP,MACpB,SAAA,CAAAS,EAAA,IAAC,OAAK,CAAA,UAAWF,EAAMO,KAAM,SAAI,OAAA,EACjCL,EAAAA,IAAC,QAAK,SAAC,GAAA,CAAA,EACNA,EAAA,IAAA,OAAA,CAAK,UAAWF,EAAMQ,MAAO,SAAK,OAAA,CAAA,CAAA,EACrC,QACC,OAAK,CAAA,UAAWR,EAAMG,MAAO,cAAaN,EACxCH,SACHA,CAAA,CAAA,CAAA,EACF,CAEJ,iYCnBO,SAASe,GAAW,CAAEC,aAAAA,CAAwC,EAAG,CAChE,KAAA,CAAEC,WAAAA,EAAYC,aAAAA,EAAcC,YAAAA,GAAgBC,EAAsB,EAElEC,EAAgB,CAAEC,SAAU,aAAcC,SAAU,UAAW,EAE/DC,EACAN,IAAiB,KAAa3B,EAC9ByB,EAAqBS,EAAWP,EAAcG,CAAa,EACxDhC,EAAe6B,EAAc,CAAE5B,SAAUC,CAAAA,CAAkB,EAG9DmC,EACAP,IAAgB,KAAa5B,EAC7ByB,EAAqBS,EAAWN,EAAaE,CAAa,EACvDhC,EAAe8B,EAAa,CAAE7B,SAAUC,CAAAA,CAAkB,EAG7D,CAACoC,EAAiBC,CAAmB,EAAIC,EAAAA,QAAQ,IAAMpC,EAAuBwB,CAAU,EAAG,CAACA,CAAU,CAAC,EAEvGa,EACAH,IAAoB,KAAapC,EACjCyB,EAAqBS,EAAWE,EAAiBN,CAAa,EAC3DhC,EAAesC,EAAiB,CAAErC,SAAUC,CAAAA,CAAkB,EAGjEwC,EAAeH,EAAsB,EACrCI,EAAoBD,EACtB,wCAAwCH,EAAsB,CAAC,SAC/D,mBAEJ,OACGxB,EAAAA,KAAA,MAAA,CAAI,UAAWE,EAAMC,OACpB,SAAA,CAACH,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM2B,IACpB,SAAA,CAAAzB,EAAA,IAAC,OAAK,CAAA,UAAWF,EAAMP,MAAO,SAAK,QAAA,EACnCS,EAAAA,IAAC0B,GACC,KAAK,qBACL,OACG9B,OAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA4B,EAAA,CAAc,UAAW9B,EAAM+B,IAAK,CAAA,EACpC7B,EAAAA,IAAA8B,EAAA,CACC,UAAWjC,EAAG,CAACC,EAAMtB,KAAMkC,IAAiB,MAAQZ,EAAMiC,KAAK,CAAC,EAChE,KAAMf,CAAiB,CAAA,CAAA,CAAA,CAE3B,CACD,CAAA,EAEHhB,EAAAA,IAAC0B,EACC,CAAA,KAAK,oBACL,OACG9B,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM6B,gBAAiB,cAAY,oBACjD,SAAA,CAAC3B,EAAAA,IAAAgC,EAAA,CAAgB,UAAWlC,EAAM+B,IAAK,CAAA,EACtC7B,EAAAA,IAAA8B,EAAA,CACC,UAAWjC,EAAG,CAACC,EAAMtB,KAAMmC,IAAgB,MAAQb,EAAMiC,KAAK,CAAC,EAC/D,KAAMb,CAAgB,CAAA,CAAA,CAAA,CAE1B,CACD,CAAA,CAAA,EAEL,EAECtB,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM2B,IACpB,SAAA,CAAAzB,EAAA,IAAC,OAAK,CAAA,UAAWF,EAAMP,MAAO,SAAG,MAAA,EACjCS,EAAAA,IAAC0B,GACC,KAAMF,EACN,OACG5B,OAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA4B,EAAA,CAAc,UAAW9B,EAAM+B,IAAK,CAAA,EACpC7B,EAAA,IAAA8B,EAAA,CACC,UAAWjC,EAAG,CAACC,EAAMtB,KAAMiC,IAAe,MAAQX,EAAMiC,KAAK,CAAC,EAC9D,KAAMT,CAAe,CAAA,EAEtBC,GACCvB,EAAAA,IAAC,OAAK,CAAA,UAAWH,EAAG,CAACC,EAAMtB,KAAMsB,EAAMmC,OAAO,CAAC,EAAG,kBAAiBb,CACpE,CAAA,CAAA,CAAA,CACH,CACD,CAAA,EAEHpB,MAACkC,IAAmB,aAAA1B,CAA2B,CAAA,CAAA,CACjD,CAAA,CAAA,EACF,CAEJ,CAMA,SAAS0B,GAAmB,CAAE1B,aAAAA,CAAwC,EAAG,CACjE,KAAA,CAAE2B,YAAAA,GAAgBC,EAAsB,EAExC,CAACC,EAAkBC,CAAoB,EAAIjB,EAAAA,QAAQ,IAAMpC,EAAuBkD,CAAW,EAAG,CAACA,CAAW,CAAC,EAC3GI,EACAF,IAAqB,KAAatD,EAClCyB,EAAqBS,EAAWoB,EAAkB,CAAEvB,SAAU,aAAcC,SAAU,UAAA,CAAY,EAC/FlC,EAAewD,EAAkB,CAAEvD,SAAUC,CAAAA,CAAkB,EAGlEwC,EAAec,IAAqB,MAAQC,EAAuB,EACnEE,EAAUjB,EACZ,yCAAyCe,EAAuB,CAAC,SACjE,oBAGF,OAAAtC,EAAA,IAAC0B,GACC,KAAMc,EACN,OACG5C,OAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAAyC,EAAA,CAAe,UAAW3C,EAAM+B,IAAK,CAAA,EACrC7B,EAAA,IAAA8B,EAAA,CACC,UAAWjC,EAAG,CAACC,EAAMtB,KAAM6D,IAAqB,MAAQvC,EAAMiC,KAAK,CAAC,EACpE,KAAMQ,CAAqB,CAAA,EAE5BhB,GAAgBvB,EAAAA,IAAC,OAAK,CAAA,UAAWH,EAAG,CAACC,EAAMtB,KAAMsB,EAAMmC,OAAO,CAAC,EAAG,kBAAiBK,CAAwB,CAAA,CAAA,CAAA,CAC9G,CAEF,CAAA,CAEN,CAEO,SAASI,IAAgB,CAC9B,OACG9C,EAAAA,KAAA,MAAA,CAAI,UAAWE,EAAMC,OACpB,SAAA,CAAAC,EAAA,IAAC2C,GAAU,EAAA,QACVC,GAAS,CAAA,CAAA,CAAA,EACZ,CAEJ,CAEA,SAASD,IAAa,CACd,KAAA,CAAE1C,MAAAA,EAAO4C,KAAAA,EAAMC,iBAAAA,EAAkBC,iBAAAA,EAAkBC,WAAAA,EAAYC,SAAAA,GAAaC,EAAsB,EAClG,CAAEC,eAAAA,GAAmBC,EAAkB,EACvCC,EAAQC,EAASH,CAAc,EAE/BI,EAASC,EAAiBP,CAAQ,EAGlCQ,GAAmB,IAAM,CAE7B,GADI,CAACF,GACD,CAACF,GAASA,EAAMK,YAAc,KAAa,OAAA,KACzCC,MAAAA,EAAkB1D,EAAQ+C,EAAa7D,EAEtC0D,OAAAA,IAASe,EAAWC,SACvBR,EAAMK,UAAYL,EAAMS,SAAWH,EACnCZ,EAAmBM,EAAMS,SAAWH,CAAAA,GACvC,EAEGI,EAA2BxF,EAAckF,EAAiB,EAAGO,EAAUC,SAAS,EAEhFC,EAAmBpB,IAAqB,KAAOA,EAAmB7C,EAAQ,KAC1EkE,EAA4B5F,EAAc2F,EAAkB,EAAGF,EAAUC,SAAS,EAExF,OACGrE,EAAAA,KAAA,MAAA,CAAI,UAAWE,EAAMsE,YACpB,SAAA,CAAApE,EAAA,IAAC,OAAK,CAAA,UAAWqD,GAAAA,MAAAA,EAAOgB,MAAQvE,EAAMwE,WAAaxE,EAAMP,MAAQ,SAAG8D,IAAAA,GAAAA,YAAAA,EAAOgB,QAAS,OAAO,IAAI,EAC9FzE,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA0B,EAAA,CAAQ,KAAK,4BAA4B,aAAS6C,EAAY,CAAA,UAAWzE,EAAM+B,IAAAA,CAAK,CAAI,CAAA,QACxF,OACC,CAAA,UAAWhC,EAAG,CACZC,EAAMtB,MACL,CAAC6E,GAAS,CAACE,IAAWzD,EAAMiC,MAC7BgC,IAA6B,OAASjE,EAAM0E,OAAO,CACpD,EAEAT,SACHA,CAAA,CAAA,CAAA,EACF,EACCnE,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA0B,EAAA,CAAQ,KAAK,6BAA6B,aAAS+C,EAAa,CAAA,UAAW3E,EAAM+B,IAAAA,CAAK,CAAI,CAAA,QAC1F,OACC,CAAA,UAAWhC,EAAG,CACZC,EAAMtB,KACN,CAACsE,GAAoBhD,EAAMiC,MAC3BoC,IAA8B,OAASrE,EAAM0E,OAAO,CACrD,EAEAL,SACHA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAEJ,CAEA,SAASvB,IAAY,CACb,KAAA,CAAE3C,MAAAA,EAAO4C,KAAAA,EAAMlC,YAAAA,EAAaD,aAAAA,EAAcuC,SAAAA,EAAUD,WAAAA,GAAe0B,EAAqB,EACxF,CAAEC,GAAAA,EAAIC,cAAAA,GAAkBC,GAAY,EACpCC,EAAQxB,EAASqB,CAAE,EAEnBpB,EAASC,EAAiBP,CAAQ,EAElC8B,GAAoB,IAAM,CAE1B,GADA,CAACxB,GACD,CAACuB,EAAc,OAAA,KACnB,MAAME,EAAsBF,EAAMpB,UAAYoB,EAAMG,UAAY9F,EAC1DwE,EAAkB1D,EAAQ+C,EAAa7D,EAC7C,OAAO0D,IAASe,EAAWC,SACvBmB,EAAsBrB,EACtBqB,EAAsBrE,EAAcD,EAAeiD,CAAAA,GACtD,EAEGuB,EAA0B3G,EAAcwG,EAAkB,EAAGf,EAAUC,SAAS,EAEhFkB,EAAoBP,IAAkB,KAAOA,EAAgB3E,EAAQ,KACrEmF,EAA2B7G,EAAc4G,EAAmB,EAAGnB,EAAUC,SAAS,EAElFI,GAAQS,GAAAA,YAAAA,EAAOT,QAAS,KAE9B,OACGzE,EAAAA,KAAA,MAAA,CAAI,UAAWE,EAAMsE,YACpB,SAAA,CAACpE,EAAA,IAAA,OAAA,CAAK,UAAWqE,EAAQvE,EAAMwE,WAAaxE,EAAMP,MAAQ,SAAA,GAAG8E,GAAS,MAAM,GAAI,CAAA,EAC/EzE,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA0B,EAAA,CAAQ,KAAK,kCAAkC,aAAS2D,EAAU,CAAA,UAAWvF,EAAM+B,IAAAA,CAAK,CAAI,CAAA,EAC7F7B,MAAC,QACC,cAAY,oBACZ,UAAWH,EAAG,CACZC,EAAMtB,MACL,CAACsG,GAAS,CAACvB,IAAWzD,EAAMiC,MAC7BmD,IAA4B,OAASpF,EAAM0E,OAAO,CACnD,EAEAU,SACHA,CAAA,CAAA,CAAA,EACF,EACCtF,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA0B,EAAA,CAAQ,KAAK,mCAAmC,aAAS4D,EAAW,CAAA,UAAWxF,EAAM+B,IAAAA,CAAK,CAAI,CAAA,QAC9F,OACC,CAAA,cAAY,qBACZ,UAAWhC,EAAG,CACZC,EAAMtB,KACN2G,IAAsB,MAAQrF,EAAMiC,MACpCqD,IAA6B,OAAStF,EAAM0E,OAAO,CACpD,EAEAY,SACHA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAEJ,CAEO,SAASG,IAAmB,CAC3B,KAAA,CAAEC,UAAAA,EAAWC,mBAAAA,GAAuBC,EAAoB,EAExDC,EAAUF,IAAuB,KAAOA,EAAqB,EAAIG,EACjEC,EAAeL,EAAY,GAAGG,CAAO,OAAOH,GAAaI,CAAM,GAAKA,EAEnE,OAAA5F,EAAA,IAACV,EAAW,CAAA,MAAM,WAAW,MAAOuG,EAAc,MAAOJ,IAAuB,KAAO,QAAU,QAAY,CAAA,CACtH,CAEO,SAASK,IAAiB,CACzB,KAAA,CAAEC,OAAAA,EAAQ9C,SAAAA,GAAa+C,EAAkB,EAEzCC,EAAYzC,EAAiBP,CAAQ,EACrCiD,EAAcC,GAAeF,EAAYF,EAAS,IAAI,EACtDK,EAAaC,GAAcJ,EAAYF,EAAS,IAAI,EAE1D,aAAQ3F,GAAU,CAAA,MAAO8F,EAAa,MAAOE,EAAY,OAAO,SAAW,CAC7E,CAEO,SAASE,GAAc,CAAE9F,aAAAA,EAAcd,UAAAA,CAA8D,EAAG,CACvG,KAAA,CAAEO,MAAAA,GAAUsG,EAAS,EACrBC,EAAiBhG,EAAeS,EAAWhB,CAAK,EAAIpB,EAAeoB,CAAK,EAE9E,OACGD,EAAAA,IAAAE,GAAA,CACC,MAAM,WACN,UAAAR,EACA,OAA0B+G,GAAAzG,EAAAA,IAAC8B,EAAkB,CAAA,UAAW2E,EAAc,KAAMD,CAAe,CAAA,EAC3F,CAEN,CAEO,SAASE,GAAc,CAAEhH,UAAAA,CAAkC,EAAG,CACnE,MAAMiH,EAAQC,EAAS,EAEjBC,EAAYF,EAAMG,QAAUC,EAAWC,QACvC3C,EAAQwC,EAAY,iBAAmB,gBACvCI,EAAUpI,EAAegI,EAAYF,EAAMO,eAAiBP,EAAMhB,QAAS,CAAE7G,SAAUC,CAAAA,CAAkB,EACzGoI,EACAN,EAAkB,UAClBF,EAAMhB,UAAY,KAAa,QAC5B,SAGF,OAAA3F,MAACV,GAAW,MAAO+E,EAAO,MAAO4C,EAAS,MAAOE,EAAY,UAAAzH,EAAwB,CAC9F"}
|
|
1
|
+
{"version":3,"file":"TimeElements-D3dl9gAM.js","sources":["../../src/features/overview/overview.utils.ts","../../src/features/overview/composite/TimeLayout.tsx","../../src/features/overview/composite/TimeElements.tsx"],"sourcesContent":["import { MaybeNumber, TimerType } from 'ontime-types';\nimport { dayInMs, millisToString } from 'ontime-utils';\n\nimport { timerPlaceholder, timerPlaceholderMin } from '../../common/utils/styleUtils';\n\n/**\n * Composition to stop negative timers from being formatted\n * They should show a due string instead\n *\n * This is used for cases when a negative timer is unwanted\n * eg: count down to a milestone\n */\nexport function formatDueTime(\n time: MaybeNumber,\n segments: number = 3,\n direction?: TimerType.CountDown | TimerType.CountUp,\n dueString = 'due',\n): string {\n if (time !== null && time <= 0) return dueString;\n return formattedTime(time, segments, direction);\n}\n\n/**\n * Encapsulates the logic for formatting time in overview\n */\nexport function formattedTime(\n time: MaybeNumber,\n segments: number = 3,\n direction?: TimerType.CountDown | TimerType.CountUp,\n): string {\n return millisToString(time, { fallback: segments === 3 ? timerPlaceholder : timerPlaceholderMin, direction });\n}\n\n/**\n * Calculates how long a time is and how many days it spans\n */\nexport function calculateEndAndDaySpan(end: MaybeNumber): [MaybeNumber, number] {\n if (end !== null && end > dayInMs) {\n return [end % dayInMs, Math.floor(end / dayInMs)];\n }\n\n return [end, 0];\n}\n","import { ReactNode } from 'react';\n\nimport { cx } from '../../../common/utils/styleUtils';\n\nimport style from './TimeLayout.module.scss';\n\ninterface TimeLayoutProps {\n label: string;\n value: string;\n state?: 'muted' | 'waiting' | 'active';\n daySpan?: number;\n className?: string;\n testId?: string;\n}\n\nexport function TimeColumn({ label, value, state = 'active', className, testId }: TimeLayoutProps) {\n return (\n <div className={cx([style.column, className])} data-state={state}>\n <span className={style.label}>{label}</span>\n <span className={style.clock} data-testid={testId}>\n {value}\n </span>\n </div>\n );\n}\n\ninterface WrappedInTimeColumnProps {\n label: string;\n state?: 'muted' | 'waiting' | 'active';\n className?: string;\n render: (className: string) => ReactNode;\n}\n\nexport function WrappedInTimeColumn({ label, state = 'active', className, render }: WrappedInTimeColumnProps) {\n return (\n <div className={cx([style.column, className])} data-state={state}>\n <span className={style.label}>{label}</span>\n {render(style.clock)}\n </div>\n );\n}\ninterface OverUnderProps {\n state: 'over' | 'under' | 'muted' | null;\n value: string;\n testId: string;\n}\n\nexport function OverUnder({ state, value, testId }: OverUnderProps) {\n return (\n <div className={style.column} data-state={state}>\n <div className={style.label}>\n <span className={style.over}>Over</span>\n <span>/</span>\n <span className={style.under}>Under</span>\n </div>\n <span className={style.clock} data-testid={testId}>\n {value}\n </span>\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport {\n TbCalendarClock,\n TbCalendarPin,\n TbCalendarStar,\n TbFlagPin,\n TbFlagStar,\n TbFolderPin,\n TbFolderStar,\n} from 'react-icons/tb';\nimport { OffsetMode, OntimeEvent, OntimeGroup, TimerPhase, TimerType } from 'ontime-types';\nimport { dayInMs, isPlaybackActive, millisToString } from 'ontime-utils';\n\nimport Tooltip from '../../../common/components/tooltip/Tooltip';\nimport {\n useClock,\n useCurrentGroupId,\n useFlagTimerOverView,\n useGroupTimerOverView,\n useNextFlag,\n useOffsetOverview,\n useProgressOverview,\n useRundownExpectedEnd,\n useStartTimesOverview,\n useTimer,\n} from '../../../common/hooks/useSocket';\nimport { useEntry } from '../../../common/hooks-query/useRundown';\nimport { getOffsetState, getOffsetText } from '../../../common/utils/offset';\nimport { cx, enDash, timerPlaceholder } from '../../../common/utils/styleUtils';\nimport { formatTime } from '../../../common/utils/time';\nimport SuperscriptPeriod from '../../../views/common/superscript-time/SuperscriptPeriod';\nimport { calculateEndAndDaySpan, formatDueTime } from '../overview.utils';\n\nimport { OverUnder, TimeColumn, WrappedInTimeColumn } from './TimeLayout';\n\nimport style from './TimeElements.module.scss';\n\ninterface OverviewTimeElementsProps {\n shouldFormat?: boolean;\n}\n\nexport function StartTimes({ shouldFormat }: OverviewTimeElementsProps) {\n const { plannedEnd, plannedStart, actualStart } = useStartTimesOverview();\n\n const formatOptions = { format12: 'hh:mm:ss a', format24: 'HH:mm:ss' };\n\n const plannedStartText = (() => {\n if (plannedStart === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(plannedStart, formatOptions);\n return millisToString(plannedStart, { fallback: timerPlaceholder });\n })();\n\n const actualStartText = (() => {\n if (actualStart === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(actualStart, formatOptions);\n return millisToString(actualStart, { fallback: timerPlaceholder });\n })();\n\n const [maybePlannedEnd, maybePlannedDaySpan] = useMemo(() => calculateEndAndDaySpan(plannedEnd), [plannedEnd]);\n\n const plannedEndText = (() => {\n if (maybePlannedEnd === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(maybePlannedEnd, formatOptions);\n return millisToString(maybePlannedEnd, { fallback: timerPlaceholder });\n })();\n\n const multipleDays = maybePlannedDaySpan > 0;\n const plannedEndTooltip = multipleDays\n ? `Planned end time (rundown spans over ${maybePlannedDaySpan + 1} days)`\n : 'Planned end time';\n\n return (\n <div className={style.column}>\n <div className={style.row}>\n <span className={style.label}>Start</span>\n <Tooltip\n text='Planned start time'\n render={\n <div className={style.labelledElement}>\n <TbCalendarPin className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, plannedStart === null && style.muted])}\n time={plannedStartText}\n />\n </div>\n }\n />\n <Tooltip\n text='Actual start time'\n render={\n <div className={style.labelledElement} data-testid='actual-start-time'>\n <TbCalendarClock className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, actualStart === null && style.muted])}\n time={actualStartText}\n />\n </div>\n }\n />\n </div>\n\n <div className={style.row}>\n <span className={style.label}>End</span>\n <Tooltip\n text={plannedEndTooltip}\n render={\n <div className={style.labelledElement}>\n <TbCalendarPin className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, plannedEnd === null && style.muted])}\n time={plannedEndText}\n />\n {multipleDays && (\n <span className={cx([style.time, style.daySpan])} data-day-offset={maybePlannedDaySpan} />\n )}\n </div>\n }\n />\n <RundownExpectedEnd shouldFormat={shouldFormat} />\n </div>\n </div>\n );\n}\n\n/**\n * Shows the expected end for the rundown\n * Extracted to improve performance as this is a ticking value\n */\nfunction RundownExpectedEnd({ shouldFormat }: OverviewTimeElementsProps) {\n const { expectedEnd } = useRundownExpectedEnd();\n\n const [maybeExpectedEnd, maybeExpectedDaySpan] = useMemo(() => calculateEndAndDaySpan(expectedEnd), [expectedEnd]);\n const maybeExpectedEndText = (() => {\n if (maybeExpectedEnd === null) return timerPlaceholder;\n if (shouldFormat) return formatTime(maybeExpectedEnd, { format12: 'hh:mm:ss a', format24: 'HH:mm:ss' });\n return millisToString(maybeExpectedEnd, { fallback: timerPlaceholder });\n })();\n\n const multipleDays = maybeExpectedEnd !== null && maybeExpectedDaySpan > 0;\n const tooltip = multipleDays\n ? `Expected end time (rundown spans over ${maybeExpectedDaySpan + 1} days)`\n : 'Expected end time';\n\n return (\n <Tooltip\n text={tooltip}\n render={\n <div className={style.labelledElement}>\n <TbCalendarStar className={style.icon} />\n <SuperscriptPeriod\n className={cx([style.time, maybeExpectedEnd === null && style.muted])}\n time={maybeExpectedEndText}\n />\n {multipleDays && <span className={cx([style.time, style.daySpan])} data-day-offset={maybeExpectedDaySpan} />}\n </div>\n }\n />\n );\n}\n\nexport function MetadataTimes() {\n return (\n <div className={style.column}>\n <GroupTimes />\n <FlagTimes />\n </div>\n );\n}\n\nfunction GroupTimes() {\n const { clock, mode, groupExpectedEnd, actualGroupStart, currentDay, playback } = useGroupTimerOverView();\n const { currentGroupId } = useCurrentGroupId();\n const group = useEntry(currentGroupId) as OntimeGroup | null;\n\n const active = isPlaybackActive(playback);\n\n // the group end time dose not encode any day offsets so it is calculated with group start time and duration\n const plannedGroupEnd = (() => {\n if (!active) return null;\n if (!group || group.timeStart === null) return null;\n const normalizedClock = clock + currentDay * dayInMs;\n\n return mode === OffsetMode.Absolute\n ? group.timeStart + group.duration - normalizedClock\n : actualGroupStart + group.duration - normalizedClock;\n })();\n\n const plannedTimeUntilGroupEnd = formatDueTime(plannedGroupEnd, 3, TimerType.CountDown);\n\n const expectedGroupEnd = groupExpectedEnd !== null ? groupExpectedEnd - clock : null;\n const expectedTimeUntilGroupEnd = formatDueTime(expectedGroupEnd, 3, TimerType.CountDown);\n\n return (\n <div className={style.metadataRow}>\n <span className={group?.title ? style.labelTitle : style.label}>{`${group?.title || 'Group'} `}</span>\n <div className={style.labelledElement}>\n <Tooltip text='Time to planned group end' render={<TbFolderPin className={style.icon} />} />\n <span\n className={cx([\n style.time,\n (!group || !active) && style.muted,\n plannedTimeUntilGroupEnd === 'due' && style.dueTime,\n ])}\n >\n {plannedTimeUntilGroupEnd}\n </span>\n </div>\n <div className={style.labelledElement}>\n <Tooltip text='Time to expected group end' render={<TbFolderStar className={style.icon} />} />\n <span\n className={cx([\n style.time,\n !groupExpectedEnd && style.muted,\n expectedTimeUntilGroupEnd === 'due' && style.dueTime,\n ])}\n >\n {expectedTimeUntilGroupEnd}\n </span>\n </div>\n </div>\n );\n}\n\nfunction FlagTimes() {\n const { clock, mode, actualStart, plannedStart, playback, currentDay } = useFlagTimerOverView();\n const { id, expectedStart } = useNextFlag();\n const entry = useEntry(id) as OntimeEvent | null;\n\n const active = isPlaybackActive(playback);\n\n const plannedFlagStart = (() => {\n if (!active) return null;\n if (!entry) return null;\n const normalizedTimeStart = entry.timeStart + entry.dayOffset * dayInMs;\n const normalizedClock = clock + currentDay * dayInMs;\n return mode === OffsetMode.Absolute\n ? normalizedTimeStart - normalizedClock\n : normalizedTimeStart + actualStart - plannedStart - normalizedClock;\n })();\n\n const plannedTimeUntilDisplay = formatDueTime(plannedFlagStart, 3, TimerType.CountDown);\n\n const expectedTimeUntil = expectedStart !== null ? expectedStart - clock : null;\n const expectedTimeUntilDisplay = formatDueTime(expectedTimeUntil, 3, TimerType.CountDown);\n\n const title = entry?.title ?? null;\n\n return (\n <div className={style.metadataRow}>\n <span className={title ? style.labelTitle : style.label}>{`${title || 'Flag'} `}</span>\n <div className={style.labelledElement}>\n <Tooltip text='Time to next flag planned start' render={<TbFlagPin className={style.icon} />} />\n <span\n data-testid='flag-plannedStart'\n className={cx([\n style.time,\n (!entry || !active) && style.muted,\n plannedTimeUntilDisplay === 'due' && style.dueTime,\n ])}\n >\n {plannedTimeUntilDisplay}\n </span>\n </div>\n <div className={style.labelledElement}>\n <Tooltip text='Time to next flag expected start' render={<TbFlagStar className={style.icon} />} />\n <span\n data-testid='flag-expectedStart'\n className={cx([\n style.time,\n expectedTimeUntil === null && style.muted,\n expectedTimeUntilDisplay === 'due' && style.dueTime,\n ])}\n >\n {expectedTimeUntilDisplay}\n </span>\n </div>\n </div>\n );\n}\n\nexport function ProgressOverview() {\n const { numEvents, selectedEventIndex } = useProgressOverview();\n\n const current = selectedEventIndex !== null ? selectedEventIndex + 1 : enDash;\n const progressText = numEvents ? `${current} of ${numEvents || enDash}` : enDash;\n\n return <TimeColumn label='Progress' value={progressText} state={selectedEventIndex === null ? 'muted' : 'active'} />;\n}\n\nexport function OffsetOverview() {\n const { offset, playback } = useOffsetOverview();\n\n const isPlaying = isPlaybackActive(playback);\n const offsetState = getOffsetState(isPlaying ? offset : null);\n const offsetText = getOffsetText(isPlaying ? offset : null);\n\n return <OverUnder state={offsetState} value={offsetText} testId='offset' />;\n}\n\nexport function ClockOverview({ shouldFormat, className }: OverviewTimeElementsProps & { className?: string }) {\n const { clock } = useClock();\n const formattedClock = shouldFormat ? formatTime(clock) : millisToString(clock);\n\n return (\n <WrappedInTimeColumn\n label='Time now'\n className={className}\n render={(clockClasses) => <SuperscriptPeriod className={clockClasses} time={formattedClock} />}\n />\n );\n}\n\nexport function TimerOverview({ className }: { className?: string }) {\n const timer = useTimer();\n\n const isWaiting = timer.phase === TimerPhase.Pending;\n const title = isWaiting ? 'Count to start' : 'Running timer';\n const display = millisToString(isWaiting ? timer.secondaryTimer : timer.current, { fallback: timerPlaceholder });\n const timerState = (() => {\n if (isWaiting) return 'waiting';\n if (timer.current === null) return 'muted';\n return 'active';\n })();\n\n return <TimeColumn label={title} value={display} state={timerState} className={className} />;\n}\n"],"names":["formatDueTime","time","segments","direction","dueString","formattedTime","millisToString","fallback","timerPlaceholder","timerPlaceholderMin","calculateEndAndDaySpan","end","dayInMs","Math","floor","TimeColumn","label","value","state","className","testId","jsxs","cx","style","column","jsx","clock","WrappedInTimeColumn","render","OverUnder","over","under","StartTimes","shouldFormat","plannedEnd","plannedStart","actualStart","useStartTimesOverview","formatOptions","format12","format24","plannedStartText","formatTime","actualStartText","maybePlannedEnd","maybePlannedDaySpan","useMemo","plannedEndText","multipleDays","plannedEndTooltip","row","Tooltip","labelledElement","TbCalendarPin","icon","SuperscriptPeriod","muted","TbCalendarClock","daySpan","RundownExpectedEnd","expectedEnd","useRundownExpectedEnd","maybeExpectedEnd","maybeExpectedDaySpan","maybeExpectedEndText","tooltip","TbCalendarStar","MetadataTimes","GroupTimes","FlagTimes","mode","groupExpectedEnd","actualGroupStart","currentDay","playback","useGroupTimerOverView","currentGroupId","useCurrentGroupId","group","useEntry","active","isPlaybackActive","plannedGroupEnd","timeStart","normalizedClock","OffsetMode","Absolute","duration","plannedTimeUntilGroupEnd","TimerType","CountDown","expectedGroupEnd","expectedTimeUntilGroupEnd","metadataRow","title","labelTitle","TbFolderPin","dueTime","TbFolderStar","useFlagTimerOverView","id","expectedStart","useNextFlag","entry","plannedFlagStart","normalizedTimeStart","dayOffset","plannedTimeUntilDisplay","expectedTimeUntil","expectedTimeUntilDisplay","TbFlagPin","TbFlagStar","ProgressOverview","numEvents","selectedEventIndex","useProgressOverview","current","enDash","progressText","OffsetOverview","offset","useOffsetOverview","isPlaying","offsetState","getOffsetState","offsetText","getOffsetText","ClockOverview","useClock","formattedClock","clockClasses","TimerOverview","timer","useTimer","isWaiting","phase","TimerPhase","Pending","display","secondaryTimer","timerState"],"mappings":"u2BAYO,SAASA,EACdC,EACAC,EAAmB,EACnBC,EACAC,EAAY,MACJ,CACR,OAAIH,IAAS,MAAQA,GAAQ,EAAUG,EAChCC,GAAcJ,EAAMC,EAAUC,CAAS,CAChD,CAKO,SAASE,GACdJ,EACAC,EAAmB,EACnBC,EACQ,CACR,OAAOG,EAAeL,EAAM,CAAEM,SAAUL,IAAa,EAAIM,EAAmBC,EAAqBN,UAAAA,CAAAA,CAAW,CAC9G,CAKO,SAASO,EAAuBC,EAAyC,CAC1EA,OAAAA,IAAQ,MAAQA,EAAMC,EACjB,CAACD,EAAMC,EAASC,KAAKC,MAAMH,EAAMC,CAAO,CAAC,EAG3C,CAACD,EAAK,CAAC,CAChB,iKC3BO,SAASI,EAAW,CAAEC,MAAAA,EAAOC,MAAAA,EAAOC,MAAAA,EAAQ,SAAUC,UAAAA,EAAWC,OAAAA,CAAwB,EAAG,CAE/F,OAAAC,EAAA,KAAC,MAAI,CAAA,UAAWC,EAAG,CAACC,EAAMC,OAAQL,CAAS,CAAC,EAAG,aAAYD,EACzD,SAAA,CAAAO,EAAA,IAAC,OAAK,CAAA,UAAWF,EAAMP,MAAQA,SAAMA,EAAA,QACpC,OAAK,CAAA,UAAWO,EAAMG,MAAO,cAAaN,EACxCH,SACHA,CAAA,CAAA,CAAA,EACF,CAEJ,CASO,SAASU,GAAoB,CAAEX,MAAAA,EAAOE,MAAAA,EAAQ,SAAUC,UAAAA,EAAWS,OAAAA,CAAiC,EAAG,CAE1G,OAAAP,EAAA,KAAC,MAAI,CAAA,UAAWC,EAAG,CAACC,EAAMC,OAAQL,CAAS,CAAC,EAAG,aAAYD,EACzD,SAAA,CAAAO,EAAA,IAAC,OAAK,CAAA,UAAWF,EAAMP,MAAQA,SAAMA,EAAA,EACpCY,EAAOL,EAAMG,KAAK,CAAA,EACrB,CAEJ,CAOO,SAASG,GAAU,CAAEX,MAAAA,EAAOD,MAAAA,EAAOG,OAAAA,CAAuB,EAAG,CAClE,cACG,MAAI,CAAA,UAAWG,EAAMC,OAAQ,aAAYN,EACxC,SAAA,CAACG,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAMP,MACpB,SAAA,CAAAS,EAAA,IAAC,OAAK,CAAA,UAAWF,EAAMO,KAAM,SAAI,OAAA,EACjCL,EAAAA,IAAC,QAAK,SAAC,GAAA,CAAA,EACNA,EAAA,IAAA,OAAA,CAAK,UAAWF,EAAMQ,MAAO,SAAK,OAAA,CAAA,CAAA,EACrC,QACC,OAAK,CAAA,UAAWR,EAAMG,MAAO,cAAaN,EACxCH,SACHA,CAAA,CAAA,CAAA,EACF,CAEJ,iYCnBO,SAASe,GAAW,CAAEC,aAAAA,CAAwC,EAAG,CAChE,KAAA,CAAEC,WAAAA,EAAYC,aAAAA,EAAcC,YAAAA,GAAgBC,EAAsB,EAElEC,EAAgB,CAAEC,SAAU,aAAcC,SAAU,UAAW,EAE/DC,EACAN,IAAiB,KAAa3B,EAC9ByB,EAAqBS,EAAWP,EAAcG,CAAa,EACxDhC,EAAe6B,EAAc,CAAE5B,SAAUC,CAAAA,CAAkB,EAG9DmC,EACAP,IAAgB,KAAa5B,EAC7ByB,EAAqBS,EAAWN,EAAaE,CAAa,EACvDhC,EAAe8B,EAAa,CAAE7B,SAAUC,CAAAA,CAAkB,EAG7D,CAACoC,EAAiBC,CAAmB,EAAIC,EAAAA,QAAQ,IAAMpC,EAAuBwB,CAAU,EAAG,CAACA,CAAU,CAAC,EAEvGa,EACAH,IAAoB,KAAapC,EACjCyB,EAAqBS,EAAWE,EAAiBN,CAAa,EAC3DhC,EAAesC,EAAiB,CAAErC,SAAUC,CAAAA,CAAkB,EAGjEwC,EAAeH,EAAsB,EACrCI,EAAoBD,EACtB,wCAAwCH,EAAsB,CAAC,SAC/D,mBAEJ,OACGxB,EAAAA,KAAA,MAAA,CAAI,UAAWE,EAAMC,OACpB,SAAA,CAACH,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM2B,IACpB,SAAA,CAAAzB,EAAA,IAAC,OAAK,CAAA,UAAWF,EAAMP,MAAO,SAAK,QAAA,EACnCS,EAAAA,IAAC0B,GACC,KAAK,qBACL,OACG9B,OAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA4B,EAAA,CAAc,UAAW9B,EAAM+B,IAAK,CAAA,EACpC7B,EAAAA,IAAA8B,EAAA,CACC,UAAWjC,EAAG,CAACC,EAAMtB,KAAMkC,IAAiB,MAAQZ,EAAMiC,KAAK,CAAC,EAChE,KAAMf,CAAiB,CAAA,CAAA,CAAA,CAE3B,CACD,CAAA,EAEHhB,EAAAA,IAAC0B,EACC,CAAA,KAAK,oBACL,OACG9B,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM6B,gBAAiB,cAAY,oBACjD,SAAA,CAAC3B,EAAAA,IAAAgC,EAAA,CAAgB,UAAWlC,EAAM+B,IAAK,CAAA,EACtC7B,EAAAA,IAAA8B,EAAA,CACC,UAAWjC,EAAG,CAACC,EAAMtB,KAAMmC,IAAgB,MAAQb,EAAMiC,KAAK,CAAC,EAC/D,KAAMb,CAAgB,CAAA,CAAA,CAAA,CAE1B,CACD,CAAA,CAAA,EAEL,EAECtB,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM2B,IACpB,SAAA,CAAAzB,EAAA,IAAC,OAAK,CAAA,UAAWF,EAAMP,MAAO,SAAG,MAAA,EACjCS,EAAAA,IAAC0B,GACC,KAAMF,EACN,OACG5B,OAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA4B,EAAA,CAAc,UAAW9B,EAAM+B,IAAK,CAAA,EACpC7B,EAAA,IAAA8B,EAAA,CACC,UAAWjC,EAAG,CAACC,EAAMtB,KAAMiC,IAAe,MAAQX,EAAMiC,KAAK,CAAC,EAC9D,KAAMT,CAAe,CAAA,EAEtBC,GACCvB,EAAAA,IAAC,OAAK,CAAA,UAAWH,EAAG,CAACC,EAAMtB,KAAMsB,EAAMmC,OAAO,CAAC,EAAG,kBAAiBb,CACpE,CAAA,CAAA,CAAA,CACH,CACD,CAAA,EAEHpB,MAACkC,IAAmB,aAAA1B,CAA2B,CAAA,CAAA,CACjD,CAAA,CAAA,EACF,CAEJ,CAMA,SAAS0B,GAAmB,CAAE1B,aAAAA,CAAwC,EAAG,CACjE,KAAA,CAAE2B,YAAAA,GAAgBC,EAAsB,EAExC,CAACC,EAAkBC,CAAoB,EAAIjB,EAAAA,QAAQ,IAAMpC,EAAuBkD,CAAW,EAAG,CAACA,CAAW,CAAC,EAC3GI,EACAF,IAAqB,KAAatD,EAClCyB,EAAqBS,EAAWoB,EAAkB,CAAEvB,SAAU,aAAcC,SAAU,UAAA,CAAY,EAC/FlC,EAAewD,EAAkB,CAAEvD,SAAUC,CAAAA,CAAkB,EAGlEwC,EAAec,IAAqB,MAAQC,EAAuB,EACnEE,EAAUjB,EACZ,yCAAyCe,EAAuB,CAAC,SACjE,oBAGF,OAAAtC,EAAA,IAAC0B,GACC,KAAMc,EACN,OACG5C,OAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAAyC,EAAA,CAAe,UAAW3C,EAAM+B,IAAK,CAAA,EACrC7B,EAAA,IAAA8B,EAAA,CACC,UAAWjC,EAAG,CAACC,EAAMtB,KAAM6D,IAAqB,MAAQvC,EAAMiC,KAAK,CAAC,EACpE,KAAMQ,CAAqB,CAAA,EAE5BhB,GAAgBvB,EAAAA,IAAC,OAAK,CAAA,UAAWH,EAAG,CAACC,EAAMtB,KAAMsB,EAAMmC,OAAO,CAAC,EAAG,kBAAiBK,CAAwB,CAAA,CAAA,CAAA,CAC9G,CAEF,CAAA,CAEN,CAEO,SAASI,IAAgB,CAC9B,OACG9C,EAAAA,KAAA,MAAA,CAAI,UAAWE,EAAMC,OACpB,SAAA,CAAAC,EAAA,IAAC2C,GAAU,EAAA,QACVC,GAAS,CAAA,CAAA,CAAA,EACZ,CAEJ,CAEA,SAASD,IAAa,CACd,KAAA,CAAE1C,MAAAA,EAAO4C,KAAAA,EAAMC,iBAAAA,EAAkBC,iBAAAA,EAAkBC,WAAAA,EAAYC,SAAAA,GAAaC,EAAsB,EAClG,CAAEC,eAAAA,GAAmBC,EAAkB,EACvCC,EAAQC,EAASH,CAAc,EAE/BI,EAASC,EAAiBP,CAAQ,EAGlCQ,GAAmB,IAAM,CAE7B,GADI,CAACF,GACD,CAACF,GAASA,EAAMK,YAAc,KAAa,OAAA,KACzCC,MAAAA,EAAkB1D,EAAQ+C,EAAa7D,EAEtC0D,OAAAA,IAASe,EAAWC,SACvBR,EAAMK,UAAYL,EAAMS,SAAWH,EACnCZ,EAAmBM,EAAMS,SAAWH,CAAAA,GACvC,EAEGI,EAA2BxF,EAAckF,EAAiB,EAAGO,EAAUC,SAAS,EAEhFC,EAAmBpB,IAAqB,KAAOA,EAAmB7C,EAAQ,KAC1EkE,EAA4B5F,EAAc2F,EAAkB,EAAGF,EAAUC,SAAS,EAExF,OACGrE,EAAAA,KAAA,MAAA,CAAI,UAAWE,EAAMsE,YACpB,SAAA,CAAApE,EAAA,IAAC,OAAK,CAAA,UAAWqD,GAAAA,MAAAA,EAAOgB,MAAQvE,EAAMwE,WAAaxE,EAAMP,MAAQ,SAAG8D,IAAAA,GAAAA,YAAAA,EAAOgB,QAAS,OAAO,IAAI,EAC9FzE,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA0B,EAAA,CAAQ,KAAK,4BAA4B,aAAS6C,EAAY,CAAA,UAAWzE,EAAM+B,IAAAA,CAAK,CAAI,CAAA,QACxF,OACC,CAAA,UAAWhC,EAAG,CACZC,EAAMtB,MACL,CAAC6E,GAAS,CAACE,IAAWzD,EAAMiC,MAC7BgC,IAA6B,OAASjE,EAAM0E,OAAO,CACpD,EAEAT,SACHA,CAAA,CAAA,CAAA,EACF,EACCnE,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA0B,EAAA,CAAQ,KAAK,6BAA6B,aAAS+C,EAAa,CAAA,UAAW3E,EAAM+B,IAAAA,CAAK,CAAI,CAAA,QAC1F,OACC,CAAA,UAAWhC,EAAG,CACZC,EAAMtB,KACN,CAACsE,GAAoBhD,EAAMiC,MAC3BoC,IAA8B,OAASrE,EAAM0E,OAAO,CACrD,EAEAL,SACHA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAEJ,CAEA,SAASvB,IAAY,CACb,KAAA,CAAE3C,MAAAA,EAAO4C,KAAAA,EAAMlC,YAAAA,EAAaD,aAAAA,EAAcuC,SAAAA,EAAUD,WAAAA,GAAe0B,EAAqB,EACxF,CAAEC,GAAAA,EAAIC,cAAAA,GAAkBC,GAAY,EACpCC,EAAQxB,EAASqB,CAAE,EAEnBpB,EAASC,EAAiBP,CAAQ,EAElC8B,GAAoB,IAAM,CAE1B,GADA,CAACxB,GACD,CAACuB,EAAc,OAAA,KACnB,MAAME,EAAsBF,EAAMpB,UAAYoB,EAAMG,UAAY9F,EAC1DwE,EAAkB1D,EAAQ+C,EAAa7D,EAC7C,OAAO0D,IAASe,EAAWC,SACvBmB,EAAsBrB,EACtBqB,EAAsBrE,EAAcD,EAAeiD,CAAAA,GACtD,EAEGuB,EAA0B3G,EAAcwG,EAAkB,EAAGf,EAAUC,SAAS,EAEhFkB,EAAoBP,IAAkB,KAAOA,EAAgB3E,EAAQ,KACrEmF,EAA2B7G,EAAc4G,EAAmB,EAAGnB,EAAUC,SAAS,EAElFI,GAAQS,GAAAA,YAAAA,EAAOT,QAAS,KAE9B,OACGzE,EAAAA,KAAA,MAAA,CAAI,UAAWE,EAAMsE,YACpB,SAAA,CAACpE,EAAA,IAAA,OAAA,CAAK,UAAWqE,EAAQvE,EAAMwE,WAAaxE,EAAMP,MAAQ,SAAA,GAAG8E,GAAS,MAAM,GAAI,CAAA,EAC/EzE,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA0B,EAAA,CAAQ,KAAK,kCAAkC,aAAS2D,EAAU,CAAA,UAAWvF,EAAM+B,IAAAA,CAAK,CAAI,CAAA,EAC7F7B,MAAC,QACC,cAAY,oBACZ,UAAWH,EAAG,CACZC,EAAMtB,MACL,CAACsG,GAAS,CAACvB,IAAWzD,EAAMiC,MAC7BmD,IAA4B,OAASpF,EAAM0E,OAAO,CACnD,EAEAU,SACHA,CAAA,CAAA,CAAA,EACF,EACCtF,EAAA,KAAA,MAAA,CAAI,UAAWE,EAAM6B,gBACpB,SAAA,CAAC3B,EAAAA,IAAA0B,EAAA,CAAQ,KAAK,mCAAmC,aAAS4D,EAAW,CAAA,UAAWxF,EAAM+B,IAAAA,CAAK,CAAI,CAAA,QAC9F,OACC,CAAA,cAAY,qBACZ,UAAWhC,EAAG,CACZC,EAAMtB,KACN2G,IAAsB,MAAQrF,EAAMiC,MACpCqD,IAA6B,OAAStF,EAAM0E,OAAO,CACpD,EAEAY,SACHA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAEJ,CAEO,SAASG,IAAmB,CAC3B,KAAA,CAAEC,UAAAA,EAAWC,mBAAAA,GAAuBC,EAAoB,EAExDC,EAAUF,IAAuB,KAAOA,EAAqB,EAAIG,EACjEC,EAAeL,EAAY,GAAGG,CAAO,OAAOH,GAAaI,CAAM,GAAKA,EAEnE,OAAA5F,EAAA,IAACV,EAAW,CAAA,MAAM,WAAW,MAAOuG,EAAc,MAAOJ,IAAuB,KAAO,QAAU,QAAY,CAAA,CACtH,CAEO,SAASK,IAAiB,CACzB,KAAA,CAAEC,OAAAA,EAAQ9C,SAAAA,GAAa+C,EAAkB,EAEzCC,EAAYzC,EAAiBP,CAAQ,EACrCiD,EAAcC,GAAeF,EAAYF,EAAS,IAAI,EACtDK,EAAaC,GAAcJ,EAAYF,EAAS,IAAI,EAE1D,aAAQ3F,GAAU,CAAA,MAAO8F,EAAa,MAAOE,EAAY,OAAO,SAAW,CAC7E,CAEO,SAASE,GAAc,CAAE9F,aAAAA,EAAcd,UAAAA,CAA8D,EAAG,CACvG,KAAA,CAAEO,MAAAA,GAAUsG,EAAS,EACrBC,EAAiBhG,EAAeS,EAAWhB,CAAK,EAAIpB,EAAeoB,CAAK,EAE9E,OACGD,EAAAA,IAAAE,GAAA,CACC,MAAM,WACN,UAAAR,EACA,OAA0B+G,GAAAzG,EAAAA,IAAC8B,EAAkB,CAAA,UAAW2E,EAAc,KAAMD,CAAe,CAAA,EAC3F,CAEN,CAEO,SAASE,GAAc,CAAEhH,UAAAA,CAAkC,EAAG,CACnE,MAAMiH,EAAQC,EAAS,EAEjBC,EAAYF,EAAMG,QAAUC,EAAWC,QACvC3C,EAAQwC,EAAY,iBAAmB,gBACvCI,EAAUpI,EAAegI,EAAYF,EAAMO,eAAiBP,EAAMhB,QAAS,CAAE7G,SAAUC,CAAAA,CAAkB,EACzGoI,EACAN,EAAkB,UAClBF,EAAMhB,UAAY,KAAa,QAC5B,SAGF,OAAA3F,MAACV,GAAW,MAAO+E,EAAO,MAAO4C,EAAS,MAAOE,EAAY,UAAAzH,EAAwB,CAC9F"}
|