@getontime/cli 4.1.0 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/assets/Backstage-WSlbFC9X.js +2 -0
- package/client/assets/Backstage-WSlbFC9X.js.br +0 -0
- package/client/assets/Backstage-WSlbFC9X.js.gz +0 -0
- package/client/assets/Backstage-WSlbFC9X.js.map +1 -0
- package/client/assets/Countdown-B32qlxYT.js +2 -0
- package/client/assets/Countdown-B32qlxYT.js.br +0 -0
- package/client/assets/Countdown-B32qlxYT.js.gz +0 -0
- package/client/assets/Countdown-B32qlxYT.js.map +1 -0
- package/client/assets/CustomTranslationModal-CtBvokyt.js +2 -0
- package/client/assets/CustomTranslationModal-CtBvokyt.js.br +0 -0
- package/client/assets/CustomTranslationModal-CtBvokyt.js.gz +0 -0
- package/client/assets/{CustomTranslationModal-BBNxpds0.js.map → CustomTranslationModal-CtBvokyt.js.map} +1 -1
- package/client/assets/DelayIndicator-BFZFpsY5.js +2 -0
- package/client/assets/DelayIndicator-BFZFpsY5.js.br +0 -0
- package/client/assets/DelayIndicator-BFZFpsY5.js.gz +0 -0
- package/client/assets/{DelayIndicator-CFCDQ7FN.js.map → DelayIndicator-BFZFpsY5.js.map} +1 -1
- package/client/assets/EditorFeatureWrapper-DaMxgBMP.js +2 -0
- package/client/assets/EditorFeatureWrapper-DaMxgBMP.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-DaMxgBMP.js.gz +0 -0
- package/client/assets/{EditorFeatureWrapper-D55c8JBz.js.map → EditorFeatureWrapper-DaMxgBMP.js.map} +1 -1
- package/client/assets/EditorUtils-CgF7UfHP.css +1 -0
- package/client/assets/EditorUtils-CgF7UfHP.css.br +0 -0
- package/client/assets/EditorUtils-CgF7UfHP.css.gz +0 -0
- package/client/assets/EditorUtils-DoaSwWiz.js +2 -0
- package/client/assets/EditorUtils-DoaSwWiz.js.br +0 -0
- package/client/assets/EditorUtils-DoaSwWiz.js.gz +0 -0
- package/client/assets/EditorUtils-DoaSwWiz.js.map +1 -0
- package/client/assets/Empty-D1UteOYj.js +2 -0
- package/client/assets/Empty-D1UteOYj.js.br +0 -0
- package/client/assets/Empty-D1UteOYj.js.gz +0 -0
- package/client/assets/{Empty-C-JO_XAr.js.map → Empty-D1UteOYj.js.map} +1 -1
- package/client/assets/EmptyPage-DeRjpRKZ.js +2 -0
- package/client/assets/EmptyPage-DeRjpRKZ.js.br +0 -0
- package/client/assets/EmptyPage-DeRjpRKZ.js.gz +0 -0
- package/client/assets/{EmptyPage-BSzsxpGg.js.map → EmptyPage-DeRjpRKZ.js.map} +1 -1
- package/client/assets/FollowButton-FodezDem.js +2 -0
- package/client/assets/FollowButton-FodezDem.js.br +0 -0
- package/client/assets/FollowButton-FodezDem.js.gz +0 -0
- package/client/assets/{FollowButton-Mox6N4JW.js.map → FollowButton-FodezDem.js.map} +1 -1
- package/client/assets/MessageControlExport-CFGgiwk_.js +3 -0
- package/client/assets/MessageControlExport-CFGgiwk_.js.br +0 -0
- package/client/assets/MessageControlExport-CFGgiwk_.js.gz +0 -0
- package/client/assets/MessageControlExport-CFGgiwk_.js.map +1 -0
- package/client/assets/MessageControlExport-DjoUioWA.css +1 -0
- package/client/assets/MessageControlExport-DjoUioWA.css.br +0 -0
- package/client/assets/MessageControlExport-DjoUioWA.css.gz +0 -0
- package/client/assets/MilestoneEditor-B5BdJ5ju.js +2 -0
- package/client/assets/MilestoneEditor-B5BdJ5ju.js.br +0 -0
- package/client/assets/MilestoneEditor-B5BdJ5ju.js.gz +0 -0
- package/client/assets/MilestoneEditor-B5BdJ5ju.js.map +1 -0
- package/client/assets/MilestoneEditor-BqNKKlvI.css +1 -0
- package/client/assets/MilestoneEditor-BqNKKlvI.css.br +0 -0
- package/client/assets/MilestoneEditor-BqNKKlvI.css.gz +0 -0
- package/client/assets/Modal-B8ZZbVMg.js +2 -0
- package/client/assets/Modal-B8ZZbVMg.js.br +0 -0
- package/client/assets/Modal-B8ZZbVMg.js.gz +0 -0
- package/client/assets/{Modal-krcwDRb-.js.map → Modal-B8ZZbVMg.js.map} +1 -1
- package/client/assets/MultiPartProgressBar-BKHk19Hb.js +2 -0
- package/client/assets/MultiPartProgressBar-BKHk19Hb.js.br +0 -0
- package/client/assets/MultiPartProgressBar-BKHk19Hb.js.gz +0 -0
- package/client/assets/{MultiPartProgressBar-BXQbpM-j.js.map → MultiPartProgressBar-BKHk19Hb.js.map} +1 -1
- package/client/assets/OperatorExport-BiBcgVKc.css +1 -0
- package/client/assets/OperatorExport-BiBcgVKc.css.br +0 -0
- package/client/assets/OperatorExport-BiBcgVKc.css.gz +0 -0
- package/client/assets/OperatorExport-DQM14DsN.js +2 -0
- package/client/assets/OperatorExport-DQM14DsN.js.br +0 -0
- package/client/assets/OperatorExport-DQM14DsN.js.gz +0 -0
- package/client/assets/OperatorExport-DQM14DsN.js.map +1 -0
- package/client/assets/OverviewWrapper-9aebU9w0.css +1 -0
- package/client/assets/OverviewWrapper-9aebU9w0.css.br +0 -0
- package/client/assets/OverviewWrapper-9aebU9w0.css.gz +0 -0
- package/client/assets/{OverviewWrapper-MGJ1uE5W.js → OverviewWrapper-D1hUkrRi.js} +2 -2
- package/client/assets/OverviewWrapper-D1hUkrRi.js.br +0 -0
- package/client/assets/OverviewWrapper-D1hUkrRi.js.gz +0 -0
- package/client/assets/{OverviewWrapper-MGJ1uE5W.js.map → OverviewWrapper-D1hUkrRi.js.map} +1 -1
- package/client/assets/PipHost-B9-cZ8Lm.js +2 -0
- package/client/assets/PipHost-B9-cZ8Lm.js.br +0 -0
- package/client/assets/PipHost-B9-cZ8Lm.js.gz +0 -0
- package/client/assets/PipHost-B9-cZ8Lm.js.map +1 -0
- package/client/assets/PipHost-DEhjTbGT.css +1 -0
- package/client/assets/PipHost-DEhjTbGT.css.br +0 -0
- package/client/assets/PipHost-DEhjTbGT.css.gz +0 -0
- package/client/assets/ProjectInfo-Dp1TZyBd.js +2 -0
- package/client/assets/ProjectInfo-Dp1TZyBd.js.br +0 -0
- package/client/assets/ProjectInfo-Dp1TZyBd.js.gz +0 -0
- package/client/assets/{ProjectInfo-CJ-GLvVG.js.map → ProjectInfo-Dp1TZyBd.js.map} +1 -1
- package/client/assets/ProtectRoute-EejQ5o_H.js +2 -0
- package/client/assets/ProtectRoute-EejQ5o_H.js.br +0 -0
- package/client/assets/ProtectRoute-EejQ5o_H.js.gz +0 -0
- package/client/assets/{ProtectRoute-DJ9xZnPI.js.map → ProtectRoute-EejQ5o_H.js.map} +1 -1
- package/client/assets/{ProtectedCuesheet-CMTscjjR.css → ProtectedCuesheet-C_tKodwo.css} +1 -1
- package/client/assets/ProtectedCuesheet-C_tKodwo.css.br +0 -0
- package/client/assets/ProtectedCuesheet-C_tKodwo.css.gz +0 -0
- package/client/assets/ProtectedCuesheet-DvYSgueA.js +2 -0
- package/client/assets/ProtectedCuesheet-DvYSgueA.js.br +0 -0
- package/client/assets/ProtectedCuesheet-DvYSgueA.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-DvYSgueA.js.map +1 -0
- package/client/assets/ProtectedEditor-B0l0X3QP.js +3 -0
- package/client/assets/ProtectedEditor-B0l0X3QP.js.br +0 -0
- package/client/assets/ProtectedEditor-B0l0X3QP.js.gz +0 -0
- package/client/assets/ProtectedEditor-B0l0X3QP.js.map +1 -0
- package/client/assets/ProtectedEditor-Dw0pWw0J.css +1 -0
- package/client/assets/ProtectedEditor-Dw0pWw0J.css.br +0 -0
- package/client/assets/ProtectedEditor-Dw0pWw0J.css.gz +0 -0
- package/client/assets/RundownEntry-Blq5OsMH.css +1 -0
- package/client/assets/RundownEntry-Blq5OsMH.css.br +0 -0
- package/client/assets/RundownEntry-Blq5OsMH.css.gz +0 -0
- package/client/assets/RundownEntry-CwiStTnR.js +2 -0
- package/client/assets/RundownEntry-CwiStTnR.js.br +0 -0
- package/client/assets/RundownEntry-CwiStTnR.js.gz +0 -0
- package/client/assets/RundownEntry-CwiStTnR.js.map +1 -0
- package/client/assets/RundownExport-CCaOfHIr.js +3 -0
- package/client/assets/RundownExport-CCaOfHIr.js.br +0 -0
- package/client/assets/RundownExport-CCaOfHIr.js.gz +0 -0
- package/client/assets/RundownExport-CCaOfHIr.js.map +1 -0
- package/client/assets/{RundownExport-1zBZurIG.css → RundownExport-DtSvAfBG.css} +1 -1
- package/client/assets/RundownExport-DtSvAfBG.css.br +0 -0
- package/client/assets/RundownExport-DtSvAfBG.css.gz +0 -0
- package/client/assets/{Select-BLA-yQMq.js → Select-cHK8JrMG.js} +2 -2
- package/client/assets/Select-cHK8JrMG.js.br +0 -0
- package/client/assets/Select-cHK8JrMG.js.gz +0 -0
- package/client/assets/{Select-BLA-yQMq.js.map → Select-cHK8JrMG.js.map} +1 -1
- package/client/assets/Studio-BzwFDYzk.js +2 -0
- package/client/assets/Studio-BzwFDYzk.js.br +0 -0
- package/client/assets/Studio-BzwFDYzk.js.gz +0 -0
- package/client/assets/Studio-BzwFDYzk.js.map +1 -0
- package/client/assets/StyleEditor-RZvkKHdf.js +2 -0
- package/client/assets/StyleEditor-RZvkKHdf.js.br +0 -0
- package/client/assets/StyleEditor-RZvkKHdf.js.gz +0 -0
- package/client/assets/{StyleEditor-DNjZ46Qf.js.map → StyleEditor-RZvkKHdf.js.map} +1 -1
- package/client/assets/SuperscriptPeriod-DaZq1rr6.js +2 -0
- package/client/assets/SuperscriptPeriod-DaZq1rr6.js.br +0 -0
- package/client/assets/SuperscriptPeriod-DaZq1rr6.js.gz +0 -0
- package/client/assets/SuperscriptPeriod-DaZq1rr6.js.map +1 -0
- package/client/assets/SuperscriptTime-Mc0ZGBMo.js +2 -0
- package/client/assets/SuperscriptTime-Mc0ZGBMo.js.br +0 -0
- package/client/assets/SuperscriptTime-Mc0ZGBMo.js.gz +0 -0
- package/client/assets/{SuperscriptTime-C8ypTVpH.js.map → SuperscriptTime-Mc0ZGBMo.js.map} +1 -1
- package/client/assets/TimeElements-c2rTHN98.css +1 -0
- package/client/assets/TimeElements-c2rTHN98.css.br +0 -0
- package/client/assets/TimeElements-c2rTHN98.css.gz +0 -0
- package/client/assets/TimeElements-dIvFHgcd.js +2 -0
- package/client/assets/TimeElements-dIvFHgcd.js.br +0 -0
- package/client/assets/TimeElements-dIvFHgcd.js.gz +0 -0
- package/client/assets/TimeElements-dIvFHgcd.js.map +1 -0
- package/client/assets/{TimeInput-BrVdiuOQ.css → TimeInput-Cu-N5DmX.css} +1 -1
- package/client/assets/TimeInput-Cu-N5DmX.css.br +0 -0
- package/client/assets/TimeInput-Cu-N5DmX.css.gz +0 -0
- package/client/assets/TimeInput-Duzx40TC.js +2 -0
- package/client/assets/TimeInput-Duzx40TC.js.br +0 -0
- package/client/assets/TimeInput-Duzx40TC.js.gz +0 -0
- package/client/assets/{TimeInput-DU09ewqh.js.map → TimeInput-Duzx40TC.js.map} +1 -1
- package/client/assets/TimelinePage-C-OHrCR8.js +2 -0
- package/client/assets/TimelinePage-C-OHrCR8.js.br +0 -0
- package/client/assets/TimelinePage-C-OHrCR8.js.gz +0 -0
- package/client/assets/TimelinePage-C-OHrCR8.js.map +1 -0
- package/client/assets/TimelinePage-CcFl3uul.css +1 -0
- package/client/assets/TimelinePage-CcFl3uul.css.br +0 -0
- package/client/assets/TimelinePage-CcFl3uul.css.gz +0 -0
- package/client/assets/Timer-CGqVtVEC.js +2 -0
- package/client/assets/Timer-CGqVtVEC.js.br +0 -0
- package/client/assets/Timer-CGqVtVEC.js.gz +0 -0
- package/client/assets/Timer-CGqVtVEC.js.map +1 -0
- package/client/assets/{Timer-B7nk3TMf.css → Timer-Jjolf5Ra.css} +1 -1
- package/client/assets/Timer-Jjolf5Ra.css.br +0 -0
- package/client/assets/Timer-Jjolf5Ra.css.gz +0 -0
- package/client/assets/{TimerControlExport-D8kqHQB0.css → TimerControlExport-DavNxY9p.css} +1 -1
- package/client/assets/TimerControlExport-DavNxY9p.css.br +0 -0
- package/client/assets/TimerControlExport-DavNxY9p.css.gz +0 -0
- package/client/assets/TimerControlExport-GJn4WWdH.js +2 -0
- package/client/assets/TimerControlExport-GJn4WWdH.js.br +0 -0
- package/client/assets/TimerControlExport-GJn4WWdH.js.gz +0 -0
- package/client/assets/{TimerControlExport-i0ZDpUx7.js.map → TimerControlExport-GJn4WWdH.js.map} +1 -1
- package/client/assets/TitleCard-BqbrUnHO.js +2 -0
- package/client/assets/TitleCard-BqbrUnHO.js.br +0 -0
- package/client/assets/TitleCard-BqbrUnHO.js.gz +0 -0
- package/client/assets/{TitleCard-BgOtucv6.js.map → TitleCard-BqbrUnHO.js.map} +1 -1
- package/client/assets/Tooltip-BQBvaIZx.js +2 -0
- package/client/assets/Tooltip-BQBvaIZx.js.br +0 -0
- package/client/assets/Tooltip-BQBvaIZx.js.gz +0 -0
- package/client/assets/{Tooltip-C0rGHLsB.js.map → Tooltip-BQBvaIZx.js.map} +1 -1
- package/client/assets/ViewLogo-BdL1hUV1.js +2 -0
- package/client/assets/ViewLogo-BdL1hUV1.js.br +0 -0
- package/client/assets/ViewLogo-BdL1hUV1.js.gz +0 -0
- package/client/assets/{ViewLogo--9miplQv.js.map → ViewLogo-BdL1hUV1.js.map} +1 -1
- package/client/assets/ViewParamsEditor-CFedpp6w.js +2 -0
- package/client/assets/ViewParamsEditor-CFedpp6w.js.br +0 -0
- package/client/assets/ViewParamsEditor-CFedpp6w.js.gz +0 -0
- package/client/assets/ViewParamsEditor-CFedpp6w.js.map +1 -0
- package/client/assets/ViewParamsEditor-CupOV30k.css +1 -0
- package/client/assets/ViewParamsEditor-CupOV30k.css.br +0 -0
- package/client/assets/ViewParamsEditor-CupOV30k.css.gz +0 -0
- package/client/assets/dateConfig-BU1RZfIK.js +2 -0
- package/client/assets/dateConfig-BU1RZfIK.js.br +0 -0
- package/client/assets/dateConfig-BU1RZfIK.js.gz +0 -0
- package/client/assets/dateConfig-BU1RZfIK.js.map +1 -0
- package/client/assets/editorSettings-BMt-7s8I.js +2 -0
- package/client/assets/editorSettings-BMt-7s8I.js.br +0 -0
- package/client/assets/editorSettings-BMt-7s8I.js.gz +0 -0
- package/client/assets/{editorSettings-CCHx-wCx.js.map → editorSettings-BMt-7s8I.js.map} +1 -1
- package/client/assets/{getProgress-B94Ieskb.js → getProgress-sdxPEEPi.js} +2 -2
- package/client/assets/getProgress-sdxPEEPi.js.br +0 -0
- package/client/assets/getProgress-sdxPEEPi.js.gz +0 -0
- package/client/assets/{getProgress-B94Ieskb.js.map → getProgress-sdxPEEPi.js.map} +1 -1
- package/client/assets/{index-De0uf0Ta.css → index-BuJoGGff.css} +1 -1
- package/client/assets/index-BuJoGGff.css.br +0 -0
- package/client/assets/index-BuJoGGff.css.gz +0 -0
- package/client/assets/index-CoGiopcb.js +3 -0
- package/client/assets/index-CoGiopcb.js.br +0 -0
- package/client/assets/index-CoGiopcb.js.gz +0 -0
- package/client/assets/index-CoGiopcb.js.map +1 -0
- package/client/assets/offset-BS90Rks2.js +2 -0
- package/client/assets/offset-BS90Rks2.js.br +0 -0
- package/client/assets/offset-BS90Rks2.js.gz +0 -0
- package/client/assets/offset-BS90Rks2.js.map +1 -0
- package/client/assets/parseUserTime-DZJMcfuJ.js +2 -0
- package/client/assets/parseUserTime-DZJMcfuJ.js.br +0 -0
- package/client/assets/parseUserTime-DZJMcfuJ.js.gz +0 -0
- package/client/assets/{parseUserTime-Bc1pSJR2.js.map → parseUserTime-DZJMcfuJ.js.map} +1 -1
- package/client/assets/playbackstate-CWexoP3a.js +2 -0
- package/client/assets/playbackstate-CWexoP3a.js.br +0 -0
- package/client/assets/playbackstate-CWexoP3a.js.gz +0 -0
- package/client/assets/{playbackstate-BpzbtG9F.js.map → playbackstate-CWexoP3a.js.map} +1 -1
- package/client/assets/{presentation.utils-B2baBe3j.js → presentation.utils-Zo5hNQje.js} +2 -2
- package/client/assets/presentation.utils-Zo5hNQje.js.br +0 -0
- package/client/assets/presentation.utils-Zo5hNQje.js.gz +0 -0
- package/client/assets/{presentation.utils-B2baBe3j.js.map → presentation.utils-Zo5hNQje.js.map} +1 -1
- package/client/assets/rundownUtils-Dl1x6NDv.js +2 -0
- package/client/assets/rundownUtils-Dl1x6NDv.js.br +0 -0
- package/client/assets/rundownUtils-Dl1x6NDv.js.gz +0 -0
- package/client/assets/{rundownUtils-H6xvQyre.js.map → rundownUtils-Dl1x6NDv.js.map} +1 -1
- package/client/assets/timer.utils-BnMyVO6Z.js +2 -0
- package/client/assets/timer.utils-BnMyVO6Z.js.br +0 -0
- package/client/assets/timer.utils-BnMyVO6Z.js.gz +0 -0
- package/client/assets/timer.utils-BnMyVO6Z.js.map +1 -0
- package/client/assets/{useCustomFields-Da0Li7nQ.js → useCustomFields-CcTb-GQM.js} +2 -2
- package/client/assets/useCustomFields-CcTb-GQM.js.br +0 -0
- package/client/assets/useCustomFields-CcTb-GQM.js.gz +0 -0
- package/client/assets/{useCustomFields-Da0Li7nQ.js.map → useCustomFields-CcTb-GQM.js.map} +1 -1
- package/client/assets/useFollowComponent-BjhV6Uv8.js +2 -0
- package/client/assets/useFollowComponent-BjhV6Uv8.js.br +0 -0
- package/client/assets/useFollowComponent-BjhV6Uv8.js.gz +0 -0
- package/client/assets/{useFollowComponent-Qo3FobyV.js.map → useFollowComponent-BjhV6Uv8.js.map} +1 -1
- package/client/assets/{useProjectData-DW06zQvF.js → useProjectData-B5mjXsMj.js} +2 -2
- package/client/assets/useProjectData-B5mjXsMj.js.br +0 -0
- package/client/assets/useProjectData-B5mjXsMj.js.gz +0 -0
- package/client/assets/{useProjectData-DW06zQvF.js.map → useProjectData-B5mjXsMj.js.map} +1 -1
- package/client/assets/useReport-zMbyWwpn.js +2 -0
- package/client/assets/useReport-zMbyWwpn.js.br +0 -0
- package/client/assets/useReport-zMbyWwpn.js.gz +0 -0
- package/client/assets/{useReport-DhFY2L8v.js.map → useReport-zMbyWwpn.js.map} +1 -1
- package/client/assets/useRundown-CHsh5rnl.js +2 -0
- package/client/assets/useRundown-CHsh5rnl.js.br +0 -0
- package/client/assets/useRundown-CHsh5rnl.js.gz +0 -0
- package/client/assets/useRundown-CHsh5rnl.js.map +1 -0
- package/client/assets/useWindowTitle-mLKt65i7.js +2 -0
- package/client/assets/useWindowTitle-mLKt65i7.js.br +0 -0
- package/client/assets/useWindowTitle-mLKt65i7.js.gz +0 -0
- package/client/assets/{useWindowTitle-B2UzPuki.js.map → useWindowTitle-mLKt65i7.js.map} +1 -1
- package/client/assets/{validateEvent-BJMwP_mq.js → validateEvent-CUmvjN95.js} +2 -2
- package/client/assets/validateEvent-CUmvjN95.js.br +0 -0
- package/client/assets/validateEvent-CUmvjN95.js.gz +0 -0
- package/client/assets/{validateEvent-BJMwP_mq.js.map → validateEvent-CUmvjN95.js.map} +1 -1
- package/client/assets/{vendor-9UkPSc5K.js → vendor-Cdwxo8bP.js} +23 -23
- package/client/assets/vendor-Cdwxo8bP.js.br +0 -0
- package/client/assets/vendor-Cdwxo8bP.js.gz +0 -0
- package/client/assets/{vendor-9UkPSc5K.js.map → vendor-Cdwxo8bP.js.map} +1 -1
- package/client/assets/{viewLoader.utils-DQGhrjSp.js → viewLoader.utils-DuXjY5zb.js} +2 -2
- package/client/assets/viewLoader.utils-DuXjY5zb.js.br +0 -0
- package/client/assets/viewLoader.utils-DuXjY5zb.js.gz +0 -0
- package/client/assets/{viewLoader.utils-DQGhrjSp.js.map → viewLoader.utils-DuXjY5zb.js.map} +1 -1
- package/client/assets/viewUtils-dKRKkb_F.js +2 -0
- package/client/assets/viewUtils-dKRKkb_F.js.br +0 -0
- package/client/assets/viewUtils-dKRKkb_F.js.gz +0 -0
- package/client/assets/viewUtils-dKRKkb_F.js.map +1 -0
- package/client/index.html +3 -3
- package/package.json +1 -1
- package/server/index.cjs +97 -97
- package/client/assets/Backstage-BhtXVpms.js +0 -2
- package/client/assets/Backstage-BhtXVpms.js.br +0 -0
- package/client/assets/Backstage-BhtXVpms.js.gz +0 -0
- package/client/assets/Backstage-BhtXVpms.js.map +0 -1
- package/client/assets/Countdown-NmGi1KMx.js +0 -2
- package/client/assets/Countdown-NmGi1KMx.js.br +0 -0
- package/client/assets/Countdown-NmGi1KMx.js.gz +0 -0
- package/client/assets/Countdown-NmGi1KMx.js.map +0 -1
- package/client/assets/CustomTranslationModal-BBNxpds0.js +0 -2
- package/client/assets/CustomTranslationModal-BBNxpds0.js.br +0 -0
- package/client/assets/CustomTranslationModal-BBNxpds0.js.gz +0 -0
- package/client/assets/DelayIndicator-CFCDQ7FN.js +0 -2
- package/client/assets/DelayIndicator-CFCDQ7FN.js.br +0 -0
- package/client/assets/DelayIndicator-CFCDQ7FN.js.gz +0 -0
- package/client/assets/EditorFeatureWrapper-D55c8JBz.js +0 -2
- package/client/assets/EditorFeatureWrapper-D55c8JBz.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-D55c8JBz.js.gz +0 -0
- package/client/assets/EditorUtils-BXko-IuN.css +0 -1
- package/client/assets/EditorUtils-BXko-IuN.css.br +0 -0
- package/client/assets/EditorUtils-BXko-IuN.css.gz +0 -0
- package/client/assets/EditorUtils-CFE106qQ.js +0 -2
- package/client/assets/EditorUtils-CFE106qQ.js.br +0 -0
- package/client/assets/EditorUtils-CFE106qQ.js.gz +0 -0
- package/client/assets/EditorUtils-CFE106qQ.js.map +0 -1
- package/client/assets/Empty-C-JO_XAr.js +0 -2
- package/client/assets/Empty-C-JO_XAr.js.br +0 -2
- package/client/assets/Empty-C-JO_XAr.js.gz +0 -0
- package/client/assets/EmptyPage-BSzsxpGg.js +0 -2
- package/client/assets/EmptyPage-BSzsxpGg.js.br +0 -1
- package/client/assets/EmptyPage-BSzsxpGg.js.gz +0 -0
- package/client/assets/FollowButton-Mox6N4JW.js +0 -2
- package/client/assets/FollowButton-Mox6N4JW.js.br +0 -0
- package/client/assets/FollowButton-Mox6N4JW.js.gz +0 -0
- package/client/assets/MessageControlExport-BL2ip9qN.js +0 -2
- package/client/assets/MessageControlExport-BL2ip9qN.js.br +0 -0
- package/client/assets/MessageControlExport-BL2ip9qN.js.gz +0 -0
- package/client/assets/MessageControlExport-BL2ip9qN.js.map +0 -1
- package/client/assets/MessageControlExport-DPgqVb-4.css +0 -1
- package/client/assets/MessageControlExport-DPgqVb-4.css.br +0 -0
- package/client/assets/MessageControlExport-DPgqVb-4.css.gz +0 -0
- package/client/assets/MilestoneEditor-906SVj5M.css +0 -1
- package/client/assets/MilestoneEditor-906SVj5M.css.br +0 -0
- package/client/assets/MilestoneEditor-906SVj5M.css.gz +0 -0
- package/client/assets/MilestoneEditor-DcWPGKNK.js +0 -2
- package/client/assets/MilestoneEditor-DcWPGKNK.js.br +0 -0
- package/client/assets/MilestoneEditor-DcWPGKNK.js.gz +0 -0
- package/client/assets/MilestoneEditor-DcWPGKNK.js.map +0 -1
- package/client/assets/Modal-krcwDRb-.js +0 -2
- package/client/assets/Modal-krcwDRb-.js.br +0 -0
- package/client/assets/Modal-krcwDRb-.js.gz +0 -0
- package/client/assets/MultiPartProgressBar-BXQbpM-j.js +0 -2
- package/client/assets/MultiPartProgressBar-BXQbpM-j.js.br +0 -0
- package/client/assets/MultiPartProgressBar-BXQbpM-j.js.gz +0 -0
- package/client/assets/OperatorExport-C50KHBrD.js +0 -2
- package/client/assets/OperatorExport-C50KHBrD.js.br +0 -0
- package/client/assets/OperatorExport-C50KHBrD.js.gz +0 -0
- package/client/assets/OperatorExport-C50KHBrD.js.map +0 -1
- package/client/assets/OperatorExport-QyLn8tmf.css +0 -1
- package/client/assets/OperatorExport-QyLn8tmf.css.br +0 -0
- package/client/assets/OperatorExport-QyLn8tmf.css.gz +0 -0
- package/client/assets/OverviewWrapper-MGJ1uE5W.js.br +0 -0
- package/client/assets/OverviewWrapper-MGJ1uE5W.js.gz +0 -0
- package/client/assets/OverviewWrapper-a18gep4m.css +0 -1
- package/client/assets/OverviewWrapper-a18gep4m.css.br +0 -0
- package/client/assets/OverviewWrapper-a18gep4m.css.gz +0 -0
- package/client/assets/ProjectInfo-CJ-GLvVG.js +0 -2
- package/client/assets/ProjectInfo-CJ-GLvVG.js.br +0 -0
- package/client/assets/ProjectInfo-CJ-GLvVG.js.gz +0 -0
- package/client/assets/ProtectRoute-DJ9xZnPI.js +0 -2
- package/client/assets/ProtectRoute-DJ9xZnPI.js.br +0 -0
- package/client/assets/ProtectRoute-DJ9xZnPI.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-B8tg6Mmo.js +0 -2
- package/client/assets/ProtectedCuesheet-B8tg6Mmo.js.br +0 -0
- package/client/assets/ProtectedCuesheet-B8tg6Mmo.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-B8tg6Mmo.js.map +0 -1
- package/client/assets/ProtectedCuesheet-CMTscjjR.css.br +0 -0
- package/client/assets/ProtectedCuesheet-CMTscjjR.css.gz +0 -0
- package/client/assets/ProtectedEditor-Bl4wV72N.js +0 -3
- package/client/assets/ProtectedEditor-Bl4wV72N.js.br +0 -0
- package/client/assets/ProtectedEditor-Bl4wV72N.js.gz +0 -0
- package/client/assets/ProtectedEditor-Bl4wV72N.js.map +0 -1
- package/client/assets/ProtectedEditor-BoiAT_IR.css +0 -1
- package/client/assets/ProtectedEditor-BoiAT_IR.css.br +0 -0
- package/client/assets/ProtectedEditor-BoiAT_IR.css.gz +0 -0
- package/client/assets/RundownEntry-3gFEEUnw.css +0 -1
- package/client/assets/RundownEntry-3gFEEUnw.css.br +0 -0
- package/client/assets/RundownEntry-3gFEEUnw.css.gz +0 -0
- package/client/assets/RundownEntry-D9tXNXPy.js +0 -2
- package/client/assets/RundownEntry-D9tXNXPy.js.br +0 -0
- package/client/assets/RundownEntry-D9tXNXPy.js.gz +0 -0
- package/client/assets/RundownEntry-D9tXNXPy.js.map +0 -1
- package/client/assets/RundownExport-1zBZurIG.css.br +0 -0
- package/client/assets/RundownExport-1zBZurIG.css.gz +0 -0
- package/client/assets/RundownExport-D6uAmFbb.js +0 -3
- package/client/assets/RundownExport-D6uAmFbb.js.br +0 -0
- package/client/assets/RundownExport-D6uAmFbb.js.gz +0 -0
- package/client/assets/RundownExport-D6uAmFbb.js.map +0 -1
- package/client/assets/Select-BLA-yQMq.js.br +0 -0
- package/client/assets/Select-BLA-yQMq.js.gz +0 -0
- package/client/assets/Studio-DbP92DTf.js +0 -2
- package/client/assets/Studio-DbP92DTf.js.br +0 -0
- package/client/assets/Studio-DbP92DTf.js.gz +0 -0
- package/client/assets/Studio-DbP92DTf.js.map +0 -1
- package/client/assets/StyleEditor-DNjZ46Qf.js +0 -2
- package/client/assets/StyleEditor-DNjZ46Qf.js.br +0 -0
- package/client/assets/StyleEditor-DNjZ46Qf.js.gz +0 -0
- package/client/assets/SuperscriptTime-C8ypTVpH.js +0 -2
- package/client/assets/SuperscriptTime-C8ypTVpH.js.br +0 -0
- package/client/assets/SuperscriptTime-C8ypTVpH.js.gz +0 -0
- package/client/assets/TimeElements-BcQdm4ZV.css +0 -1
- package/client/assets/TimeElements-BcQdm4ZV.css.br +0 -0
- package/client/assets/TimeElements-BcQdm4ZV.css.gz +0 -0
- package/client/assets/TimeElements-DlEBhXe0.js +0 -2
- package/client/assets/TimeElements-DlEBhXe0.js.br +0 -0
- package/client/assets/TimeElements-DlEBhXe0.js.gz +0 -0
- package/client/assets/TimeElements-DlEBhXe0.js.map +0 -1
- package/client/assets/TimeInput-BrVdiuOQ.css.br +0 -0
- package/client/assets/TimeInput-BrVdiuOQ.css.gz +0 -0
- package/client/assets/TimeInput-DU09ewqh.js +0 -2
- package/client/assets/TimeInput-DU09ewqh.js.br +0 -0
- package/client/assets/TimeInput-DU09ewqh.js.gz +0 -0
- package/client/assets/TimelinePage-BJav6PAb.css +0 -1
- package/client/assets/TimelinePage-BJav6PAb.css.br +0 -0
- package/client/assets/TimelinePage-BJav6PAb.css.gz +0 -0
- package/client/assets/TimelinePage-DTwqRihn.js +0 -2
- package/client/assets/TimelinePage-DTwqRihn.js.br +0 -0
- package/client/assets/TimelinePage-DTwqRihn.js.gz +0 -0
- package/client/assets/TimelinePage-DTwqRihn.js.map +0 -1
- package/client/assets/Timer-B7nk3TMf.css.br +0 -0
- package/client/assets/Timer-B7nk3TMf.css.gz +0 -0
- package/client/assets/Timer-jjWAunJc.js +0 -2
- package/client/assets/Timer-jjWAunJc.js.br +0 -0
- package/client/assets/Timer-jjWAunJc.js.gz +0 -0
- package/client/assets/Timer-jjWAunJc.js.map +0 -1
- package/client/assets/TimerControlExport-D8kqHQB0.css.br +0 -0
- package/client/assets/TimerControlExport-D8kqHQB0.css.gz +0 -0
- package/client/assets/TimerControlExport-i0ZDpUx7.js +0 -2
- package/client/assets/TimerControlExport-i0ZDpUx7.js.br +0 -0
- package/client/assets/TimerControlExport-i0ZDpUx7.js.gz +0 -0
- package/client/assets/TitleCard-BgOtucv6.js +0 -2
- package/client/assets/TitleCard-BgOtucv6.js.br +0 -0
- package/client/assets/TitleCard-BgOtucv6.js.gz +0 -0
- package/client/assets/Tooltip-C0rGHLsB.js +0 -2
- package/client/assets/Tooltip-C0rGHLsB.js.br +0 -0
- package/client/assets/Tooltip-C0rGHLsB.js.gz +0 -0
- package/client/assets/ViewLogo--9miplQv.js +0 -2
- package/client/assets/ViewLogo--9miplQv.js.br +0 -0
- package/client/assets/ViewLogo--9miplQv.js.gz +0 -0
- package/client/assets/ViewParamsEditor-1Ok39npF.css +0 -1
- package/client/assets/ViewParamsEditor-1Ok39npF.css.br +0 -0
- package/client/assets/ViewParamsEditor-1Ok39npF.css.gz +0 -0
- package/client/assets/ViewParamsEditor-BFu_0oIb.js +0 -2
- package/client/assets/ViewParamsEditor-BFu_0oIb.js.br +0 -0
- package/client/assets/ViewParamsEditor-BFu_0oIb.js.gz +0 -0
- package/client/assets/ViewParamsEditor-BFu_0oIb.js.map +0 -1
- package/client/assets/dateConfig-WYqMzV9D.js +0 -2
- package/client/assets/dateConfig-WYqMzV9D.js.br +0 -0
- package/client/assets/dateConfig-WYqMzV9D.js.gz +0 -0
- package/client/assets/dateConfig-WYqMzV9D.js.map +0 -1
- package/client/assets/editorSettings-CCHx-wCx.js +0 -2
- package/client/assets/editorSettings-CCHx-wCx.js.br +0 -0
- package/client/assets/editorSettings-CCHx-wCx.js.gz +0 -0
- package/client/assets/getProgress-B94Ieskb.js.br +0 -0
- package/client/assets/getProgress-B94Ieskb.js.gz +0 -0
- package/client/assets/index-De0uf0Ta.css.br +0 -0
- package/client/assets/index-De0uf0Ta.css.gz +0 -0
- package/client/assets/index-njXwwjfn.js +0 -3
- package/client/assets/index-njXwwjfn.js.br +0 -0
- package/client/assets/index-njXwwjfn.js.gz +0 -0
- package/client/assets/index-njXwwjfn.js.map +0 -1
- package/client/assets/offset-D1q-72D-.js +0 -2
- package/client/assets/offset-D1q-72D-.js.br +0 -0
- package/client/assets/offset-D1q-72D-.js.gz +0 -0
- package/client/assets/offset-D1q-72D-.js.map +0 -1
- package/client/assets/parseUserTime-Bc1pSJR2.js +0 -2
- package/client/assets/parseUserTime-Bc1pSJR2.js.br +0 -0
- package/client/assets/parseUserTime-Bc1pSJR2.js.gz +0 -0
- package/client/assets/playbackstate-BpzbtG9F.js +0 -2
- package/client/assets/playbackstate-BpzbtG9F.js.br +0 -0
- package/client/assets/playbackstate-BpzbtG9F.js.gz +0 -0
- package/client/assets/presentation.utils-B2baBe3j.js.br +0 -0
- package/client/assets/presentation.utils-B2baBe3j.js.gz +0 -0
- package/client/assets/rundownUtils-H6xvQyre.js +0 -2
- package/client/assets/rundownUtils-H6xvQyre.js.br +0 -0
- package/client/assets/rundownUtils-H6xvQyre.js.gz +0 -0
- package/client/assets/useCustomFields-Da0Li7nQ.js.br +0 -0
- package/client/assets/useCustomFields-Da0Li7nQ.js.gz +0 -0
- package/client/assets/useFollowComponent-Qo3FobyV.js +0 -2
- package/client/assets/useFollowComponent-Qo3FobyV.js.br +0 -0
- package/client/assets/useFollowComponent-Qo3FobyV.js.gz +0 -0
- package/client/assets/useProjectData-DW06zQvF.js.br +0 -0
- package/client/assets/useProjectData-DW06zQvF.js.gz +0 -0
- package/client/assets/useReport-DhFY2L8v.js +0 -2
- package/client/assets/useReport-DhFY2L8v.js.br +0 -0
- package/client/assets/useReport-DhFY2L8v.js.gz +0 -0
- package/client/assets/useRundown-ihoU8qBi.js +0 -2
- package/client/assets/useRundown-ihoU8qBi.js.br +0 -0
- package/client/assets/useRundown-ihoU8qBi.js.gz +0 -0
- package/client/assets/useRundown-ihoU8qBi.js.map +0 -1
- package/client/assets/useWindowTitle-B2UzPuki.js +0 -2
- package/client/assets/useWindowTitle-B2UzPuki.js.br +0 -0
- package/client/assets/useWindowTitle-B2UzPuki.js.gz +0 -0
- package/client/assets/validateEvent-BJMwP_mq.js.br +0 -0
- package/client/assets/validateEvent-BJMwP_mq.js.gz +0 -0
- package/client/assets/vendor-9UkPSc5K.js.br +0 -0
- package/client/assets/vendor-9UkPSc5K.js.gz +0 -0
- package/client/assets/viewLoader.utils-DQGhrjSp.js.br +0 -0
- package/client/assets/viewLoader.utils-DQGhrjSp.js.gz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectInfo-
|
|
1
|
+
{"version":3,"file":"ProjectInfo-Dp1TZyBd.js","sources":["../../src/views/project-info/useProjectInfoData.ts","../../src/views/project-info/ProjectInfo.tsx"],"sourcesContent":["import { ProjectData } from 'ontime-types';\n\nimport useProjectData from '../../common/hooks-query/useProjectData';\nimport { useViewOptionsStore } from '../../common/stores/viewOptions';\nimport { ViewData } from '../utils/viewLoader.utils';\n\nexport interface ProjectInfoData {\n projectData: ProjectData;\n isMirrored: boolean;\n}\n\nexport function useProjectInfoData(): ViewData<ProjectInfoData> {\n // persisted app state\n const isMirrored = useViewOptionsStore((state) => state.mirror);\n\n // HTTP API data\n const { data: projectData, status: projectDataStatus } = useProjectData();\n\n return {\n data: {\n projectData,\n isMirrored,\n },\n status: projectDataStatus,\n };\n}\n","import { IoOpenOutline } from 'react-icons/io5';\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 { useTranslation } from '../../translation/TranslationProvider';\nimport Loader from '../common/loader/Loader';\n\nimport { ProjectInfoData, useProjectInfoData } from './useProjectInfoData';\n\nimport './ProjectInfo.scss';\n\nexport default function ProjectInfoLoader() {\n const { data, status } = useProjectInfoData();\n\n useWindowTitle('Project info');\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 <ProjectInfo {...data} />;\n}\n\nfunction ProjectInfo({ projectData, isMirrored }: ProjectInfoData) {\n const { getLocalizedString } = useTranslation();\n\n /**\n * Check if there is data to show at all\n * We need a special check for the project fields which can be an empty array\n */\n const isEmpty =\n !projectData ||\n Object.values(projectData).every((value) => !value || (value && Array.isArray(value) && value.length === 0));\n if (isEmpty) {\n return (\n <>\n <ViewParamsEditor target={OntimeView.ProjectInfo} viewOptions={[]} />\n <EmptyPage text={getLocalizedString('common.no_data')} />;\n </>\n );\n }\n\n return (\n <div className={`project ${isMirrored ? 'mirror' : ''}`} data-testid='project-view'>\n <ViewParamsEditor target={OntimeView.ProjectInfo} viewOptions={[]} />\n {projectData.logo && <ViewLogo name={projectData.logo} className='logo' />}\n <div className='info'>\n {projectData.title && (\n <div>\n <div className='info__label'>{getLocalizedString('project.title')}</div>\n <div className='info__value'>{projectData.title}</div>\n </div>\n )}\n {projectData.description && (\n <div>\n <div className='info__label'>{getLocalizedString('project.description')}</div>\n <div className='info__value'>{projectData.description}</div>\n </div>\n )}\n {projectData.info && (\n <div>\n <div className='info__label'>{getLocalizedString('project.info')}</div>\n <div className='info__value'>{projectData.info}</div>\n </div>\n )}\n {projectData.url && (\n <div>\n <div className='info__label'>{getLocalizedString('project.url')}</div>\n <a href={projectData.url} target='_blank' rel='noreferrer' className='info__value link'>\n {projectData.url} <IoOpenOutline style={{ fontSize: '1em' }} />\n </a>\n </div>\n )}\n {projectData.custom.map((info, idx) => {\n const hasUrl = Boolean(info.url);\n return (\n <div key={`${info.title}-${idx}`} className='info__custom'>\n {hasUrl && (\n <div className='info__image-container'>\n <img className='info__image' src={info.url} loading='lazy' />\n </div>\n )}\n <div>\n <div className='info__label'>{info.title}</div>\n <div className='info__value'>{info.value}</div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n"],"names":["useProjectInfoData","isMirrored","useViewOptionsStore","state","mirror","data","projectData","status","projectDataStatus","useProjectData","ProjectInfoLoader","useWindowTitle","Loader","jsx","EmptyPage","ProjectInfo","getLocalizedString","useTranslation","Object","values","every","value","Array","isArray","length","jsxs","Fragment","ViewParamsEditor","OntimeView","logo","ViewLogo","title","description","info","url","IoOpenOutline","fontSize","custom","map","idx","hasUrl","Boolean"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{h as l,j as t,A as f}from"./vendor-Cdwxo8bP.js";import{e as h,ah as p,ak as b,bR as g,U as x}from"./index-CoGiopcb.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new e.Error().stack;a&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[a]="e2b27f50-5d33-4a5f-805e-dc15ca8efc3a",e._sentryDebugIdIdentifier="sentry-dbid-e2b27f50-5d33-4a5f-805e-dc15ca8efc3a")}catch{}})();const y="_container_o8th0_17",_="_pin_o8th0_27",m="_pinFailed_o8th0_51",c={container:y,pin:_,pinFailed:m};function v({permission:e,handleValidation:a}){const[s,o]=l.useState(""),[i,r]=l.useState(!1),u=()=>{a(s)||(r(!0),o(""))},d=n=>{o(n),i&&r(!1)};return t.jsxs("div",{className:c.container,children:[`Ontime ${e}`,t.jsxs("form",{onSubmit:n=>{n.preventDefault(),u()},className:h([c.pin,i&&c.pinFailed]),children:[t.jsx(p,{type:"password",maxLength:4,height:"large",value:s,onChange:n=>d(n.target.value)}),t.jsx(b,{type:"submit",variant:"primary","aria-label":"Enter",children:t.jsx(f,{})})]})]})}function w({permission:e,children:a}){const{editorAuth:s,operatorAuth:o,validate:i}=l.useContext(g),r=l.useCallback(d=>i(d,e),[e,i]);return x||(e==="editor"?s:e==="operator"?o:!1)?t.jsx(t.Fragment,{children:a}):t.jsx(v,{permission:e,handleValidation:r})}export{w as P};
|
|
2
|
+
//# sourceMappingURL=ProtectRoute-EejQ5o_H.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProtectRoute-
|
|
1
|
+
{"version":3,"file":"ProtectRoute-EejQ5o_H.js","sources":["../../src/common/components/protect-route/PinPage.tsx","../../src/common/components/protect-route/ProtectRoute.tsx"],"sourcesContent":["import { PropsWithChildren, useState } from 'react';\nimport { IoCheckmark } from 'react-icons/io5';\n\nimport { cx } from '../../utils/styleUtils';\nimport IconButton from '../buttons/IconButton';\nimport Input from '../input/input/Input';\n\nimport style from './PinPage.module.scss';\n\ninterface PinPageProps {\n permission: 'editor' | 'operator';\n handleValidation: (pin: string) => boolean;\n}\n\nexport default function PinPage({ permission, handleValidation }: PropsWithChildren<PinPageProps>) {\n const [pin, setPin] = useState('');\n const [failed, setFailed] = useState(false);\n\n const validate = () => {\n const isValid = handleValidation(pin);\n if (!isValid) {\n setFailed(true);\n setPin('');\n }\n };\n\n const handleInputChange = (value: string) => {\n setPin(value);\n if (failed) setFailed(false);\n };\n\n return (\n <div className={style.container}>\n {`Ontime ${permission}`}\n <form\n onSubmit={(event) => {\n event.preventDefault();\n validate();\n }}\n className={cx([style.pin, failed && style.pinFailed])}\n >\n <Input\n type='password'\n maxLength={4}\n height='large'\n value={pin}\n onChange={(e) => handleInputChange(e.target.value)}\n />\n <IconButton type='submit' variant='primary' aria-label='Enter'>\n <IoCheckmark />\n </IconButton>\n </form>\n </div>\n );\n}\n","import { PropsWithChildren, useCallback, useContext } from 'react';\n\nimport { isLocalhost } from '../../../externals';\nimport { AppContext } from '../../context/AppContext';\n\nimport PinPage from './PinPage';\n\ninterface ProtectRouteProps {\n permission: 'editor' | 'operator';\n}\n\nexport default function ProtectRoute({ permission, children }: PropsWithChildren<ProtectRouteProps>) {\n const { editorAuth, operatorAuth, validate } = useContext(AppContext);\n\n const handleValidation = useCallback(\n (pin: string) => {\n return validate(pin, permission);\n },\n [permission, validate],\n );\n\n const hasRelevantAuth = () => {\n if (permission === 'editor') {\n return editorAuth;\n }\n if (permission === 'operator') {\n return operatorAuth;\n }\n return false;\n };\n\n if (isLocalhost || hasRelevantAuth()) {\n // eslint-disable-next-line react/jsx-no-useless-fragment -- trying to make typescript happy\n return <>{children}</>;\n }\n\n return <PinPage permission={permission} handleValidation={handleValidation} />;\n}\n"],"names":["PinPage","permission","handleValidation","pin","setPin","useState","failed","setFailed","validate","handleInputChange","value","jsxs","style","container","event","preventDefault","cx","pinFailed","jsx","Input","e","target","IconButton","IoCheckmark","ProtectRoute","children","editorAuth","operatorAuth","useContext","AppContext","useCallback","isLocalhost"],"mappings":"kkBAcA,SAAwBA,EAAQ,CAAEC,WAAAA,EAAYC,iBAAAA,CAAkD,EAAG,CACjG,KAAM,CAACC,EAAKC,CAAM,EAAIC,EAAAA,SAAS,EAAE,EAC3B,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAAS,EAAK,EAEpCG,EAAWA,IAAM,CACLN,EAAiBC,CAAG,IAElCI,EAAU,EAAI,EACdH,EAAO,EAAE,EAEb,EAEMK,EAAqBC,GAAkB,CAC3CN,EAAOM,CAAK,EACRJ,KAAkB,EAAK,CAC7B,EAEA,OACGK,EAAAA,KAAA,MAAA,CAAI,UAAWC,EAAMC,UACnB,SAAA,CAAA,UAAUZ,CAAU,GACrBU,EAAAA,KAAC,OACC,CAAA,SAAqBG,GAAA,CACnBA,EAAMC,eAAe,EACZP,EAAA,CAAA,EAEX,UAAWQ,EAAG,CAACJ,EAAMT,IAAKG,GAAUM,EAAMK,SAAS,CAAC,EAEpD,SAAA,CAAAC,EAAA,IAACC,EACC,CAAA,KAAK,WACL,UAAW,EACX,OAAO,QACP,MAAOhB,EACP,SAAiBM,GAAAA,EAAkBW,EAAEC,OAAOX,KAAK,EAAE,EAErDQ,EAAAA,IAACI,EAAW,CAAA,KAAK,SAAS,QAAQ,UAAU,aAAW,QACrD,SAACJ,EAAA,IAAAK,EAAA,CAAW,CAAA,CACd,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAEJ,CC3CA,SAAwBC,EAAa,CAAEvB,WAAAA,EAAYwB,SAAAA,CAA+C,EAAG,CAC7F,KAAA,CAAEC,WAAAA,EAAYC,aAAAA,EAAcnB,SAAAA,CAAAA,EAAaoB,EAAAA,WAAWC,CAAU,EAE9D3B,EAAmB4B,cACtB3B,GACQK,EAASL,EAAKF,CAAU,EAEjC,CAACA,EAAYO,CAAQ,CACvB,EAYIuB,OAAAA,IATE9B,IAAe,SACVyB,EAELzB,IAAe,WACV0B,EAEF,sBAKGF,SAAAA,EAAS,EAGdP,EAAA,IAAClB,EAAQ,CAAA,WAAAC,EAAwB,iBAAAC,CAAsC,CAAA,CAChF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
._blink_av4z0_1{animation:_blink_av4z0_1 1s step-start infinite}@keyframes _blink_av4z0_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_av4z0_13{transform:rotate(45deg)}._progressOverride_av4z0_17{margin-top:.5rem;height:1rem;grid-area:progress}._blink_1dtk5_1{animation:_blink_1dtk5_1 1s step-start infinite}@keyframes _blink_1dtk5_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1dtk5_13{transform:rotate(45deg)}._imageInput_1dtk5_17:not(:read-only)::placeholder{opacity:.2}._imageInput_1dtk5_17:not(:read-only):hover::placeholder{opacity:1}._imageCell_1dtk5_24{position:relative;min-height:2rem}._imageCell_1dtk5_24:hover ._overlay_1dtk5_28{display:grid;place-content:center;justify-items:center;gap:1rem;background-color:#0009}._overlay_1dtk5_28{position:absolute;top:0;right:0;bottom:0;left:0;display:none}._image_1dtk5_17{background-color:#101010;min-height:2rem}._blink_qc1zd_1{animation:_blink_qc1zd_1 1s step-start infinite}@keyframes _blink_qc1zd_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_qc1zd_13{transform:rotate(45deg)}._flag_qc1zd_17{width:100%;height:100%;color:#8bb33d;padding-top:.5rem;padding-left:.75rem}._blink_18xqt_1{animation:_blink_18xqt_1 1s step-start infinite}@keyframes _blink_18xqt_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_18xqt_13{transform:rotate(45deg)}._ghostedText_18xqt_17{min-height:2rem;padding:.25em 0 0;width:100%}._multiline_18xqt_24{white-space:break-spaces}._blink_1u021_1{animation:_blink_1u021_1 1s step-start infinite}@keyframes _blink_1u021_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1u021_13{transform:rotate(45deg)}._muted_1u021_17{opacity:.4;line-height:2rem}._numeric_1u021_22{font-variant-numeric:tabular-nums;letter-spacing:.5px}._blink_1dp7m_1{animation:_blink_1dp7m_1 1s step-start infinite}@keyframes _blink_1dp7m_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1dp7m_13{transform:rotate(45deg)}._emptyContainer_1dp7m_17{width:100%;color:#ffffff1a}._emptyContainer_1dp7m_17 ._emptyCell_1dp7m_21{margin-inline:auto;text-align:center;padding-top:10vh}._emptyContainer_1dp7m_17 ._empty_1dp7m_17{width:100%;opacity:.8}._emptyContainer_1dp7m_17 ._text_1dp7m_30{font-weight:600;font-size:2em}._blink_1f3ag_1{animation:_blink_1f3ag_1 1s step-start infinite}@keyframes _blink_1f3ag_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1f3ag_13{transform:rotate(45deg)}._cuesheet_1f3ag_17{font-size:1rem;font-weight:400;color:#f6f6f6;padding-bottom:70vh}._cuesheet_1f3ag_17 thead tr:before{content:"";display:block;width:4px;height:100%}._cuesheet_1f3ag_17 tr{display:flex}._cuesheet_1f3ag_17 th{background-color:#1a1a1a;padding-left:.25rem;font-weight:400}._cuesheet_1f3ag_17 th:hover ._resizer_1f3ag_37{width:.5rem}._cuesheet_1f3ag_17 th,._cuesheet_1f3ag_17 td{margin:1px;font-size:inherit;text-align:left;position:relative;padding:.25rem}._cuesheet_1f3ag_17 th:focus,._cuesheet_1f3ag_17 td:focus{outline:2px solid #f6f6f6}._actionColumn_1f3ag_53{padding-inline:.5rem;padding-top:.5rem!important;background-color:transparent;display:flex;align-items:start;justify-content:center}._indexColumn_1f3ag_62{display:flex;align-items:start;justify-content:end;min-width:3em;font-size:calc(1rem - 2px);line-height:2rem;background-color:#1a1a1a;font-weight:600}._tableHeader_1f3ag_73{line-height:2rem;position:sticky;top:0;z-index:100;background-color:#101010;font-size:calc(1rem - 2px)}._tableHeader_1f3ag_73 ._actionColumn_1f3ag_53{background-color:#202020;width:2rem}._tableHeader_1f3ag_73 ._indexColumn_1f3ag_62{width:3.5em}._resizer_1f3ag_37{cursor:col-resize;opacity:.4;display:inline-block;width:0;height:100%;position:absolute;right:0;top:0;background-color:#578af4;-webkit-user-select:none;user-select:none;touch-action:none}._resizer_1f3ag_37:hover{opacity:1}._blink_lk49a_1{animation:_blink_lk49a_1 1s step-start infinite}@keyframes _blink_lk49a_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_lk49a_13{transform:rotate(45deg)}._cuesheet_lk49a_17{font-size:1rem;font-weight:400;color:#f6f6f6;padding-bottom:70vh}._cuesheet_lk49a_17 thead tr:before{content:"";display:block;width:4px;height:100%}._cuesheet_lk49a_17 tr{display:flex}._cuesheet_lk49a_17 th{background-color:#1a1a1a;padding-left:.25rem;font-weight:400}._cuesheet_lk49a_17 th:hover ._resizer_lk49a_37{width:.5rem}._cuesheet_lk49a_17 th,._cuesheet_lk49a_17 td{margin:1px;font-size:inherit;text-align:left;position:relative;padding:.25rem}._cuesheet_lk49a_17 th:focus,._cuesheet_lk49a_17 td:focus{outline:2px solid #f6f6f6}._actionColumn_lk49a_53{padding-inline:.5rem;padding-top:.5rem!important;background-color:transparent;display:flex;align-items:start;justify-content:center}._indexColumn_lk49a_62{display:flex;align-items:start;justify-content:end;min-width:3em;font-size:calc(1rem - 2px);line-height:2rem;background-color:#1a1a1a;font-weight:600}._tableHeader_lk49a_73{line-height:2rem;position:sticky;top:0;z-index:100;background-color:#101010;font-size:calc(1rem - 2px)}._tableHeader_lk49a_73 ._actionColumn_lk49a_53{background-color:#202020;width:2rem}._tableHeader_lk49a_73 ._indexColumn_lk49a_62{width:3.5em}._resizer_lk49a_37{cursor:col-resize;opacity:.4;display:inline-block;width:0;height:100%;position:absolute;right:0;top:0;background-color:#578af4;-webkit-user-select:none;user-select:none;touch-action:none}._resizer_lk49a_37:hover{opacity:1}._delayRow_lk49a_106{color:#e69056;border-left:4px solid transparent}._delayRow_lk49a_106 td{width:calc(100% - 4px);padding-block:.5rem;text-align:center}._delayRow_lk49a_106 td:first-letter{text-transform:uppercase}._blink_1npa7_1{animation:_blink_1npa7_1 1s step-start infinite}@keyframes _blink_1npa7_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1npa7_13{transform:rotate(45deg)}._cuesheet_1npa7_17{font-size:1rem;font-weight:400;color:#f6f6f6;padding-bottom:70vh}._cuesheet_1npa7_17 thead tr:before{content:"";display:block;width:4px;height:100%}._cuesheet_1npa7_17 tr{display:flex}._cuesheet_1npa7_17 th{background-color:#1a1a1a;padding-left:.25rem;font-weight:400}._cuesheet_1npa7_17 th:hover ._resizer_1npa7_37{width:.5rem}._cuesheet_1npa7_17 th,._cuesheet_1npa7_17 td{margin:1px;font-size:inherit;text-align:left;position:relative;padding:.25rem}._cuesheet_1npa7_17 th:focus,._cuesheet_1npa7_17 td:focus{outline:2px solid #f6f6f6}._actionColumn_1npa7_53{padding-inline:.5rem;padding-top:.5rem!important;background-color:transparent;display:flex;align-items:start;justify-content:center}._indexColumn_1npa7_62{display:flex;align-items:start;justify-content:end;min-width:3em;font-size:calc(1rem - 2px);line-height:2rem;background-color:#1a1a1a;font-weight:600}._tableHeader_1npa7_73{line-height:2rem;position:sticky;top:0;z-index:100;background-color:#101010;font-size:calc(1rem - 2px)}._tableHeader_1npa7_73 ._actionColumn_1npa7_53{background-color:#202020;width:2rem}._tableHeader_1npa7_73 ._indexColumn_1npa7_62{width:3.5em}._resizer_1npa7_37{cursor:col-resize;opacity:.4;display:inline-block;width:0;height:100%;position:absolute;right:0;top:0;background-color:#578af4;-webkit-user-select:none;user-select:none;touch-action:none}._resizer_1npa7_37:hover{opacity:1}._eventRow_1npa7_106{background:color-mix(in srgb,transparent 92%,var(--user-bg, #9d9d9d) 8%);border-left:4px solid var(--user-bg, #9d9d9d);min-height:2.5rem}._eventRow_1npa7_106:hover{outline:1px solid #578AF4;outline-offset:-1px;background:color-mix(in srgb,transparent 80%,var(--user-bg, #9d9d9d) 20%)}._eventRow_1npa7_106._firstAfterGroup_1npa7_116{margin-top:2rem}._eventRow_1npa7_106._skip_1npa7_119{position:relative}._eventRow_1npa7_106._skip_1npa7_119 ._indexColumn_1npa7_62{text-decoration:line-through;opacity:.4}._eventRow_1npa7_106._skip_1npa7_119:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:repeating-linear-gradient(-45deg,#ffffff08,#ffffff08 10px,#ffffff14 10px,#ffffff14 20px)}._eventRow_1npa7_106 td{background-color:#262626;border-radius:2px}._blink_1p2se_1{animation:_blink_1p2se_1 1s step-start infinite}@keyframes _blink_1p2se_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1p2se_13{transform:rotate(45deg)}._cuesheet_1p2se_17{font-size:1rem;font-weight:400;color:#f6f6f6;padding-bottom:70vh}._cuesheet_1p2se_17 thead tr:before{content:"";display:block;width:4px;height:100%}._cuesheet_1p2se_17 tr{display:flex}._cuesheet_1p2se_17 th{background-color:#1a1a1a;padding-left:.25rem;font-weight:400}._cuesheet_1p2se_17 th:hover ._resizer_1p2se_37{width:.5rem}._cuesheet_1p2se_17 th,._cuesheet_1p2se_17 td{margin:1px;font-size:inherit;text-align:left;position:relative;padding:.25rem}._cuesheet_1p2se_17 th:focus,._cuesheet_1p2se_17 td:focus{outline:2px solid #f6f6f6}._actionColumn_1p2se_53{padding-inline:.5rem;padding-top:.5rem!important;background-color:transparent;display:flex;align-items:start;justify-content:center}._indexColumn_1p2se_62{display:flex;align-items:start;justify-content:end;min-width:3em;font-size:calc(1rem - 2px);line-height:2rem;background-color:#1a1a1a;font-weight:600}._tableHeader_1p2se_73{line-height:2rem;position:sticky;top:0;z-index:100;background-color:#101010;font-size:calc(1rem - 2px)}._tableHeader_1p2se_73 ._actionColumn_1p2se_53{background-color:#202020;width:2rem}._tableHeader_1p2se_73 ._indexColumn_1p2se_62{width:3.5em}._resizer_1p2se_37{cursor:col-resize;opacity:.4;display:inline-block;width:0;height:100%;position:absolute;right:0;top:0;background-color:#578af4;-webkit-user-select:none;user-select:none;touch-action:none}._resizer_1p2se_37:hover{opacity:1}._groupRow_1p2se_106{margin-top:2em;width:100%;display:flex;align-items:start;font-size:1rem;border-radius:2px 0 0;background-color:#1a1a1a;border-left:4px solid var(--user-bg, #9d9d9d);background:color-mix(in srgb,transparent 90%,var(--user-bg, #9d9d9d) 10%);position:relative;line-height:1em;font-weight:700}._groupRow_1p2se_106 td{min-height:3.5rem;padding-top:.75rem!important}._groupRow_1p2se_106 ._indexColumn_1p2se_62{background-color:transparent}._groupRow_1p2se_106 ._title_1p2se_127{font-weight:600}._groupRow_1p2se_106:hover{outline:1px solid #578AF4;outline-offset:-1px;background:color-mix(in srgb,transparent 80%,var(--user-bg, #9d9d9d) 20%)}._blink_lp3t6_1{animation:_blink_lp3t6_1 1s step-start infinite}@keyframes _blink_lp3t6_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_lp3t6_13{transform:rotate(45deg)}._cuesheet_lp3t6_17{font-size:1rem;font-weight:400;color:#f6f6f6;padding-bottom:70vh}._cuesheet_lp3t6_17 thead tr:before{content:"";display:block;width:4px;height:100%}._cuesheet_lp3t6_17 tr{display:flex}._cuesheet_lp3t6_17 th{background-color:#1a1a1a;padding-left:.25rem;font-weight:400}._cuesheet_lp3t6_17 th:hover ._resizer_lp3t6_37{width:.5rem}._cuesheet_lp3t6_17 th,._cuesheet_lp3t6_17 td{margin:1px;font-size:inherit;text-align:left;position:relative;padding:.25rem}._cuesheet_lp3t6_17 th:focus,._cuesheet_lp3t6_17 td:focus{outline:2px solid #f6f6f6}._actionColumn_lp3t6_53{padding-inline:.5rem;padding-top:.5rem!important;background-color:transparent;display:flex;align-items:start;justify-content:center}._indexColumn_lp3t6_62{display:flex;align-items:start;justify-content:end;min-width:3em;font-size:calc(1rem - 2px);line-height:2rem;background-color:#1a1a1a;font-weight:600}._tableHeader_lp3t6_73{line-height:2rem;position:sticky;top:0;z-index:100;background-color:#101010;font-size:calc(1rem - 2px)}._tableHeader_lp3t6_73 ._actionColumn_lp3t6_53{background-color:#202020;width:2rem}._tableHeader_lp3t6_73 ._indexColumn_lp3t6_62{width:3.5em}._resizer_lp3t6_37{cursor:col-resize;opacity:.4;display:inline-block;width:0;height:100%;position:absolute;right:0;top:0;background-color:#578af4;-webkit-user-select:none;user-select:none;touch-action:none}._resizer_lp3t6_37:hover{opacity:1}._milestoneRow_lp3t6_106{background:color-mix(in srgb,transparent 98%,var(--user-bg, #9d9d9d) 2%);border-left:4px solid var(--user-bg, #9d9d9d);font-style:italic}._milestoneRow_lp3t6_106:hover{outline:1px solid #578AF4;outline-offset:-1px;background:color-mix(in srgb,transparent 80%,var(--user-bg, #9d9d9d) 20%)}._milestoneRow_lp3t6_106 td{background-color:#202020;border-radius:2px}._milestoneRow_lp3t6_106 ._indexColumn_lp3t6_62{color:#b1b1b1}._blink_18k3s_1{animation:_blink_18k3s_1 1s step-start infinite}@keyframes _blink_18k3s_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_18k3s_13{transform:rotate(45deg)}._tableSettings_18k3s_17{margin-top:1rem;grid-area:settings;background-color:#202020;padding:.5rem 1rem;display:flex;align-items:center;gap:1rem;font-size:calc(1rem - 2px);border-radius:3px 3px 0 0}._sectionTitle_18k3s_29{text-transform:uppercase}._row_18k3s_33{display:flex;flex-wrap:wrap;column-gap:1rem;row-gap:.25em}._option_18k3s_40{cursor:pointer;display:flex;align-items:center;gap:.5rem}._column_18k3s_47{display:flex;flex-direction:column;gap:.5rem;align-self:start}._inline_18k3s_54{display:flex;align-items:center;gap:1rem}._apart_18k3s_60{margin-left:auto}._group_18k3s_65{display:flex;align-items:center;gap:2px;padding-inline:2px;background:#2d2d2d;border-radius:3px;height:2rem}._radioButton_18k3s_76{box-sizing:border-box;display:flex;align-items:center;justify-content:center;height:calc(2rem - 4px);padding-inline:1em;border:1px solid transparent;border-radius:3px;color:#b1b1b1;font-size:calc(1rem - 2px);font-weight:600}._radioButton_18k3s_76:focus-visible{background:transparent;outline:1px solid #578AF4}._radioButton_18k3s_76:hover:not(:disabled):not(:active){background:#404040}._radioButton_18k3s_76:active{background:#2d2d2d}._radioButton_18k3s_76[data-pressed]{background:#2b5abc;color:#f6f6f6}._radioButton_18k3s_76[data-pressed]:hover:not(:disabled):not(:active){background:#3e75e8}._blink_h9gr1_1{animation:_blink_h9gr1_1 1s step-start infinite}@keyframes _blink_h9gr1_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_h9gr1_13{transform:rotate(45deg)}._tableWrapper_h9gr1_17{background-color:#101010;width:100%;height:100vh;padding-inline:.5rem;padding-block:.5rem 1rem;display:grid;grid-template-rows:3.5rem auto auto 1fr;grid-template-areas:"overview" "progress" "settings" "table";color:#f6f6f6}
|
|
1
|
+
._blink_av4z0_1{animation:_blink_av4z0_1 1s step-start infinite}@keyframes _blink_av4z0_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_av4z0_13{transform:rotate(45deg)}._progressOverride_av4z0_17{margin-top:.5rem;height:1rem;grid-area:progress}._blink_1dtk5_1{animation:_blink_1dtk5_1 1s step-start infinite}@keyframes _blink_1dtk5_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1dtk5_13{transform:rotate(45deg)}._imageInput_1dtk5_17:not(:read-only)::placeholder{opacity:.2}._imageInput_1dtk5_17:not(:read-only):hover::placeholder{opacity:1}._imageCell_1dtk5_24{position:relative;min-height:2rem}._imageCell_1dtk5_24:hover ._overlay_1dtk5_28{display:grid;place-content:center;justify-items:center;gap:1rem;background-color:#0009}._overlay_1dtk5_28{position:absolute;top:0;right:0;bottom:0;left:0;display:none}._image_1dtk5_17{background-color:#101010;min-height:2rem}._blink_yy7ty_1{animation:_blink_yy7ty_1 1s step-start infinite}@keyframes _blink_yy7ty_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_yy7ty_13{transform:rotate(45deg)}._flag_yy7ty_17{width:100%;height:100%;color:#77c785;padding-top:.5rem;padding-left:.75rem}._blink_18xqt_1{animation:_blink_18xqt_1 1s step-start infinite}@keyframes _blink_18xqt_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_18xqt_13{transform:rotate(45deg)}._ghostedText_18xqt_17{min-height:2rem;padding:.25em 0 0;width:100%}._multiline_18xqt_24{white-space:break-spaces}._blink_1u021_1{animation:_blink_1u021_1 1s step-start infinite}@keyframes _blink_1u021_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1u021_13{transform:rotate(45deg)}._muted_1u021_17{opacity:.4;line-height:2rem}._numeric_1u021_22{font-variant-numeric:tabular-nums;letter-spacing:.5px}._blink_1dp7m_1{animation:_blink_1dp7m_1 1s step-start infinite}@keyframes _blink_1dp7m_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1dp7m_13{transform:rotate(45deg)}._emptyContainer_1dp7m_17{width:100%;color:#ffffff1a}._emptyContainer_1dp7m_17 ._emptyCell_1dp7m_21{margin-inline:auto;text-align:center;padding-top:10vh}._emptyContainer_1dp7m_17 ._empty_1dp7m_17{width:100%;opacity:.8}._emptyContainer_1dp7m_17 ._text_1dp7m_30{font-weight:600;font-size:2em}._blink_1f3ag_1{animation:_blink_1f3ag_1 1s step-start infinite}@keyframes _blink_1f3ag_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1f3ag_13{transform:rotate(45deg)}._cuesheet_1f3ag_17{font-size:1rem;font-weight:400;color:#f6f6f6;padding-bottom:70vh}._cuesheet_1f3ag_17 thead tr:before{content:"";display:block;width:4px;height:100%}._cuesheet_1f3ag_17 tr{display:flex}._cuesheet_1f3ag_17 th{background-color:#1a1a1a;padding-left:.25rem;font-weight:400}._cuesheet_1f3ag_17 th:hover ._resizer_1f3ag_37{width:.5rem}._cuesheet_1f3ag_17 th,._cuesheet_1f3ag_17 td{margin:1px;font-size:inherit;text-align:left;position:relative;padding:.25rem}._cuesheet_1f3ag_17 th:focus,._cuesheet_1f3ag_17 td:focus{outline:2px solid #f6f6f6}._actionColumn_1f3ag_53{padding-inline:.5rem;padding-top:.5rem!important;background-color:transparent;display:flex;align-items:start;justify-content:center}._indexColumn_1f3ag_62{display:flex;align-items:start;justify-content:end;min-width:3em;font-size:calc(1rem - 2px);line-height:2rem;background-color:#1a1a1a;font-weight:600}._tableHeader_1f3ag_73{line-height:2rem;position:sticky;top:0;z-index:100;background-color:#101010;font-size:calc(1rem - 2px)}._tableHeader_1f3ag_73 ._actionColumn_1f3ag_53{background-color:#202020;width:2rem}._tableHeader_1f3ag_73 ._indexColumn_1f3ag_62{width:3.5em}._resizer_1f3ag_37{cursor:col-resize;opacity:.4;display:inline-block;width:0;height:100%;position:absolute;right:0;top:0;background-color:#578af4;-webkit-user-select:none;user-select:none;touch-action:none}._resizer_1f3ag_37:hover{opacity:1}._blink_lk49a_1{animation:_blink_lk49a_1 1s step-start infinite}@keyframes _blink_lk49a_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_lk49a_13{transform:rotate(45deg)}._cuesheet_lk49a_17{font-size:1rem;font-weight:400;color:#f6f6f6;padding-bottom:70vh}._cuesheet_lk49a_17 thead tr:before{content:"";display:block;width:4px;height:100%}._cuesheet_lk49a_17 tr{display:flex}._cuesheet_lk49a_17 th{background-color:#1a1a1a;padding-left:.25rem;font-weight:400}._cuesheet_lk49a_17 th:hover ._resizer_lk49a_37{width:.5rem}._cuesheet_lk49a_17 th,._cuesheet_lk49a_17 td{margin:1px;font-size:inherit;text-align:left;position:relative;padding:.25rem}._cuesheet_lk49a_17 th:focus,._cuesheet_lk49a_17 td:focus{outline:2px solid #f6f6f6}._actionColumn_lk49a_53{padding-inline:.5rem;padding-top:.5rem!important;background-color:transparent;display:flex;align-items:start;justify-content:center}._indexColumn_lk49a_62{display:flex;align-items:start;justify-content:end;min-width:3em;font-size:calc(1rem - 2px);line-height:2rem;background-color:#1a1a1a;font-weight:600}._tableHeader_lk49a_73{line-height:2rem;position:sticky;top:0;z-index:100;background-color:#101010;font-size:calc(1rem - 2px)}._tableHeader_lk49a_73 ._actionColumn_lk49a_53{background-color:#202020;width:2rem}._tableHeader_lk49a_73 ._indexColumn_lk49a_62{width:3.5em}._resizer_lk49a_37{cursor:col-resize;opacity:.4;display:inline-block;width:0;height:100%;position:absolute;right:0;top:0;background-color:#578af4;-webkit-user-select:none;user-select:none;touch-action:none}._resizer_lk49a_37:hover{opacity:1}._delayRow_lk49a_106{color:#e69056;border-left:4px solid transparent}._delayRow_lk49a_106 td{width:calc(100% - 4px);padding-block:.5rem;text-align:center}._delayRow_lk49a_106 td:first-letter{text-transform:uppercase}._blink_1npa7_1{animation:_blink_1npa7_1 1s step-start infinite}@keyframes _blink_1npa7_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1npa7_13{transform:rotate(45deg)}._cuesheet_1npa7_17{font-size:1rem;font-weight:400;color:#f6f6f6;padding-bottom:70vh}._cuesheet_1npa7_17 thead tr:before{content:"";display:block;width:4px;height:100%}._cuesheet_1npa7_17 tr{display:flex}._cuesheet_1npa7_17 th{background-color:#1a1a1a;padding-left:.25rem;font-weight:400}._cuesheet_1npa7_17 th:hover ._resizer_1npa7_37{width:.5rem}._cuesheet_1npa7_17 th,._cuesheet_1npa7_17 td{margin:1px;font-size:inherit;text-align:left;position:relative;padding:.25rem}._cuesheet_1npa7_17 th:focus,._cuesheet_1npa7_17 td:focus{outline:2px solid #f6f6f6}._actionColumn_1npa7_53{padding-inline:.5rem;padding-top:.5rem!important;background-color:transparent;display:flex;align-items:start;justify-content:center}._indexColumn_1npa7_62{display:flex;align-items:start;justify-content:end;min-width:3em;font-size:calc(1rem - 2px);line-height:2rem;background-color:#1a1a1a;font-weight:600}._tableHeader_1npa7_73{line-height:2rem;position:sticky;top:0;z-index:100;background-color:#101010;font-size:calc(1rem - 2px)}._tableHeader_1npa7_73 ._actionColumn_1npa7_53{background-color:#202020;width:2rem}._tableHeader_1npa7_73 ._indexColumn_1npa7_62{width:3.5em}._resizer_1npa7_37{cursor:col-resize;opacity:.4;display:inline-block;width:0;height:100%;position:absolute;right:0;top:0;background-color:#578af4;-webkit-user-select:none;user-select:none;touch-action:none}._resizer_1npa7_37:hover{opacity:1}._eventRow_1npa7_106{background:color-mix(in srgb,transparent 92%,var(--user-bg, #9d9d9d) 8%);border-left:4px solid var(--user-bg, #9d9d9d);min-height:2.5rem}._eventRow_1npa7_106:hover{outline:1px solid #578AF4;outline-offset:-1px;background:color-mix(in srgb,transparent 80%,var(--user-bg, #9d9d9d) 20%)}._eventRow_1npa7_106._firstAfterGroup_1npa7_116{margin-top:2rem}._eventRow_1npa7_106._skip_1npa7_119{position:relative}._eventRow_1npa7_106._skip_1npa7_119 ._indexColumn_1npa7_62{text-decoration:line-through;opacity:.4}._eventRow_1npa7_106._skip_1npa7_119:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:repeating-linear-gradient(-45deg,#ffffff08,#ffffff08 10px,#ffffff14 10px,#ffffff14 20px)}._eventRow_1npa7_106 td{background-color:#262626;border-radius:2px}._blink_1p2se_1{animation:_blink_1p2se_1 1s step-start infinite}@keyframes _blink_1p2se_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1p2se_13{transform:rotate(45deg)}._cuesheet_1p2se_17{font-size:1rem;font-weight:400;color:#f6f6f6;padding-bottom:70vh}._cuesheet_1p2se_17 thead tr:before{content:"";display:block;width:4px;height:100%}._cuesheet_1p2se_17 tr{display:flex}._cuesheet_1p2se_17 th{background-color:#1a1a1a;padding-left:.25rem;font-weight:400}._cuesheet_1p2se_17 th:hover ._resizer_1p2se_37{width:.5rem}._cuesheet_1p2se_17 th,._cuesheet_1p2se_17 td{margin:1px;font-size:inherit;text-align:left;position:relative;padding:.25rem}._cuesheet_1p2se_17 th:focus,._cuesheet_1p2se_17 td:focus{outline:2px solid #f6f6f6}._actionColumn_1p2se_53{padding-inline:.5rem;padding-top:.5rem!important;background-color:transparent;display:flex;align-items:start;justify-content:center}._indexColumn_1p2se_62{display:flex;align-items:start;justify-content:end;min-width:3em;font-size:calc(1rem - 2px);line-height:2rem;background-color:#1a1a1a;font-weight:600}._tableHeader_1p2se_73{line-height:2rem;position:sticky;top:0;z-index:100;background-color:#101010;font-size:calc(1rem - 2px)}._tableHeader_1p2se_73 ._actionColumn_1p2se_53{background-color:#202020;width:2rem}._tableHeader_1p2se_73 ._indexColumn_1p2se_62{width:3.5em}._resizer_1p2se_37{cursor:col-resize;opacity:.4;display:inline-block;width:0;height:100%;position:absolute;right:0;top:0;background-color:#578af4;-webkit-user-select:none;user-select:none;touch-action:none}._resizer_1p2se_37:hover{opacity:1}._groupRow_1p2se_106{margin-top:2em;width:100%;display:flex;align-items:start;font-size:1rem;border-radius:2px 0 0;background-color:#1a1a1a;border-left:4px solid var(--user-bg, #9d9d9d);background:color-mix(in srgb,transparent 90%,var(--user-bg, #9d9d9d) 10%);position:relative;line-height:1em;font-weight:700}._groupRow_1p2se_106 td{min-height:3.5rem;padding-top:.75rem!important}._groupRow_1p2se_106 ._indexColumn_1p2se_62{background-color:transparent}._groupRow_1p2se_106 ._title_1p2se_127{font-weight:600}._groupRow_1p2se_106:hover{outline:1px solid #578AF4;outline-offset:-1px;background:color-mix(in srgb,transparent 80%,var(--user-bg, #9d9d9d) 20%)}._blink_plhap_1{animation:_blink_plhap_1 1s step-start infinite}@keyframes _blink_plhap_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_plhap_13{transform:rotate(45deg)}._cuesheet_plhap_17{font-size:1rem;font-weight:400;color:#f6f6f6;padding-bottom:70vh}._cuesheet_plhap_17 thead tr:before{content:"";display:block;width:4px;height:100%}._cuesheet_plhap_17 tr{display:flex}._cuesheet_plhap_17 th{background-color:#1a1a1a;padding-left:.25rem;font-weight:400}._cuesheet_plhap_17 th:hover ._resizer_plhap_37{width:.5rem}._cuesheet_plhap_17 th,._cuesheet_plhap_17 td{margin:1px;font-size:inherit;text-align:left;position:relative;padding:.25rem}._cuesheet_plhap_17 th:focus,._cuesheet_plhap_17 td:focus{outline:2px solid #f6f6f6}._actionColumn_plhap_53{padding-inline:.5rem;padding-top:.5rem!important;background-color:transparent;display:flex;align-items:start;justify-content:center}._indexColumn_plhap_62{display:flex;align-items:start;justify-content:end;min-width:3em;font-size:calc(1rem - 2px);line-height:2rem;background-color:#1a1a1a;font-weight:600}._tableHeader_plhap_73{line-height:2rem;position:sticky;top:0;z-index:100;background-color:#101010;font-size:calc(1rem - 2px)}._tableHeader_plhap_73 ._actionColumn_plhap_53{background-color:#202020;width:2rem}._tableHeader_plhap_73 ._indexColumn_plhap_62{width:3.5em}._resizer_plhap_37{cursor:col-resize;opacity:.4;display:inline-block;width:0;height:100%;position:absolute;right:0;top:0;background-color:#578af4;-webkit-user-select:none;user-select:none;touch-action:none}._resizer_plhap_37:hover{opacity:1}._milestoneRow_plhap_106{background:color-mix(in srgb,transparent 98%,var(--user-bg, #9d9d9d) 2%);border-left:4px solid var(--user-bg, #9d9d9d);font-style:italic}._milestoneRow_plhap_106:hover{outline:1px solid #578AF4;outline-offset:-1px;background:color-mix(in srgb,transparent 80%,var(--user-bg, #9d9d9d) 20%)}._milestoneRow_plhap_106 td{background-color:#202020;border-radius:2px}._milestoneRow_plhap_106 ._indexColumn_plhap_62{color:#8a8a8a}._blink_18k3s_1{animation:_blink_18k3s_1 1s step-start infinite}@keyframes _blink_18k3s_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_18k3s_13{transform:rotate(45deg)}._tableSettings_18k3s_17{margin-top:1rem;grid-area:settings;background-color:#202020;padding:.5rem 1rem;display:flex;align-items:center;gap:1rem;font-size:calc(1rem - 2px);border-radius:3px 3px 0 0}._sectionTitle_18k3s_29{text-transform:uppercase}._row_18k3s_33{display:flex;flex-wrap:wrap;column-gap:1rem;row-gap:.25em}._option_18k3s_40{cursor:pointer;display:flex;align-items:center;gap:.5rem}._column_18k3s_47{display:flex;flex-direction:column;gap:.5rem;align-self:start}._inline_18k3s_54{display:flex;align-items:center;gap:1rem}._apart_18k3s_60{margin-left:auto}._group_18k3s_65{display:flex;align-items:center;gap:2px;padding-inline:2px;background:#2d2d2d;border-radius:3px;height:2rem}._radioButton_18k3s_76{box-sizing:border-box;display:flex;align-items:center;justify-content:center;height:calc(2rem - 4px);padding-inline:1em;border:1px solid transparent;border-radius:3px;color:#b1b1b1;font-size:calc(1rem - 2px);font-weight:600}._radioButton_18k3s_76:focus-visible{background:transparent;outline:1px solid #578AF4}._radioButton_18k3s_76:hover:not(:disabled):not(:active){background:#404040}._radioButton_18k3s_76:active{background:#2d2d2d}._radioButton_18k3s_76[data-pressed]{background:#2b5abc;color:#f6f6f6}._radioButton_18k3s_76[data-pressed]:hover:not(:disabled):not(:active){background:#3e75e8}._blink_h9gr1_1{animation:_blink_h9gr1_1 1s step-start infinite}@keyframes _blink_h9gr1_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_h9gr1_13{transform:rotate(45deg)}._tableWrapper_h9gr1_17{background-color:#101010;width:100%;height:100vh;padding-inline:.5rem;padding-block:.5rem 1rem;display:grid;grid-template-rows:3.5rem auto auto 1fr;grid-template-areas:"overview" "progress" "settings" "table";color:#f6f6f6}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{o as et,h as m,j as e,f as ue,ay as _e,az as tt,aA as ge,aB as nt,aC as st,aD as ot,aE as it,aF as at,aG as rt,aH as lt,aI as K,aJ as ct,aK as ut,as as de,aL as ke,ar as Ce,T as ye,y as dt,av as mt,ah as ft,am as pt,C as Te,aM as F,aN as Ie,aO as ht,aP as xt,aQ as je,aR as we,aS as Me,m as gt,aT as Re,aU as Ct,aV as yt,aW as jt,aX as bt,I as vt}from"./vendor-Cdwxo8bP.js";import{P as St}from"./ProtectRoute-EejQ5o_H.js";import{a as Et,b0 as _t,b1 as me,ah as De,m as B,B as N,e as ee,f as L,b2 as k,k as be,b3 as kt,aC as H,b4 as re,b5 as le,ak as te,x as Tt,an as It,aw as wt,O as Mt,P as Ne,b6 as Z,o as Rt,b7 as Dt,b8 as Nt,a$ as zt}from"./index-CoGiopcb.js";import{C as $,u as Ot}from"./useWindowTitle-mLKt65i7.js";import{T as ze,O as Oe,S as Wt,M as Pt,C as $t}from"./TimeElements-dIvFHgcd.js";import{O as We,T as Ft,u as z,G as Bt}from"./OverviewWrapper-D1hUkrRi.js";import{M as Pe,P as Lt}from"./Modal-B8ZZbVMg.js";import{h as Ht,i as U,k as $e,j as Fe,s as fe,S as A,u as At}from"./useRundown-CHsh5rnl.js";import{s as ie,E as Kt,M as Ut,G as Gt,u as Be,T as Le,A as Vt}from"./MilestoneEditor-B5BdJ5ju.js";import{M as Jt}from"./MultiPartProgressBar-BKHk19Hb.js";import{E as He}from"./EmptyPage-DeRjpRKZ.js";import{u as qt}from"./useCustomFields-CcTb-GQM.js";import{T as Ae}from"./validateEvent-CUmvjN95.js";import{D as Y}from"./DelayIndicator-BFZFpsY5.js";import{p as Ke}from"./parseUserTime-DZJMcfuJ.js";import{m as Qt,u as Ue}from"./dateConfig-BU1RZfIK.js";import{S as Ge,L as D}from"./EditorUtils-DoaSwWiz.js";import{P as Ve}from"./useProjectData-B5mjXsMj.js";import"./Tooltip-BQBvaIZx.js";import"./offset-BS90Rks2.js";import"./SuperscriptPeriod-DaZq1rr6.js";/* empty css */import"./playbackstate-CWexoP3a.js";import"./Select-cHK8JrMG.js";import"./TimeInput-Duzx40TC.js";import"./editorSettings-BMt-7s8I.js";import"./getProgress-sdxPEEPi.js";import"./Empty-D1UteOYj.js";import"./rundownUtils-Dl1x6NDv.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new t.Error().stack;n&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[n]="848201a3-9cee-4490-9734-115f7e564900",t._sentryDebugIdIdentifier="sentry-dbid-848201a3-9cee-4490-9734-115f7e564900")}catch{}})();function Xt(){const{width:t}=et();return m.useMemo(()=>t<800,[t])}const Zt=m.memo(Yt);function Yt({children:t}){return Xt()?e.jsx(en,{children:t}):e.jsx(tn,{children:t})}function en({children:t}){return e.jsxs(We,{navElements:t,children:[e.jsx(ze,{}),e.jsx(Oe,{})]})}function tn({children:t}){return e.jsxs(We,{navElements:t,children:[e.jsx(Ft,{}),e.jsx(Wt,{shouldFormat:!0}),e.jsx(ze,{}),e.jsx(Oe,{}),e.jsx(Pt,{}),e.jsx($t,{shouldFormat:!0})]})}function nn({entryId:t}){const{data:n}=Ht(),[o,s]=m.useState(null);return m.useEffect(()=>{if(n.order.length===0){s(null);return}const i=n.entries[t];s(i||null)},[t,n.order,n.entries]),U(o)?e.jsx("div",{className:ie.entryEditor,"data-testid":"editor-container",children:e.jsx(Kt,{event:o})}):$e(o)?e.jsx("div",{className:ie.inModal,"data-testid":"editor-container",children:e.jsx(Ut,{milestone:o})}):Fe(o)?e.jsx("div",{className:ie.inModal,"data-testid":"editor-container",children:e.jsx(Gt,{group:o})}):null}const ce=ue(t=>({selectedEntryId:null,setEditableEntry:n=>t({selectedEntryId:n}),clearSelection:()=>t({selectedEntryId:null})})),sn=m.memo(on);function on(){const t=ce(o=>o.selectedEntryId),n=ce(o=>o.clearSelection);return t===null?null:e.jsx(Pe,{isOpen:!0,onClose:n,title:"Edit entry",showCloseButton:!0,bodyElements:e.jsx(nn,{entryId:t})})}const an="_progressOverride_av4z0_17",rn={progressOverride:an};function ln(){const{data:t}=Et(),{current:n,duration:o,timeWarning:s,timeDanger:i}=_t();return e.jsx(Jt,{now:n,complete:o,normalColor:t.normalColor,warning:s,warningColor:t.warningColor,danger:i,dangerColor:t.dangerColor,className:rn.progressOverride,ignoreCssOverride:!0})}function cn(t,n){let o;return(...s)=>{o&&clearTimeout(o),o=setTimeout(()=>{o=null,t(...s)},n)}}const Je=me("cuesheet-sizes"),un=me("cuesheet-hidden"),dn=me("cuesheet-order"),mn=cn(t=>{localStorage.setItem(Je,JSON.stringify(t))},500);function fn(){const[t,n]=m.useState(()=>{try{const s=localStorage.getItem(Je);return s?JSON.parse(s):{}}catch{return{}}});m.useEffect(()=>{mn(t)},[t]);const o=m.useCallback(s=>{n(s)},[]);return{columnSizing:t,setColumnSizing:o}}function qe(t){const[n,o]=_e({key:dn,defaultValue:t.map(i=>i.id)});m.useEffect(()=>{const i=t.map(a=>a.id);i.some(a=>!n.includes(a))&&o(i)},[n,t,o]);const s=m.useCallback(()=>{o(t.map(i=>i.id))},[t,o]);return{columnOrder:n,saveColumnOrder:o,resetColumnOrder:s}}function pn(){const[t,n]=_e({key:un,defaultValue:{}});return{columnVisibility:t,setColumnVisibility:n}}function hn({columns:t,children:n}){const{columnOrder:o,saveColumnOrder:s}=qe(t),i=tt(ge(it,{activationConstraint:{delay:100,tolerance:50}}),ge(ot,{activationConstraint:{delay:100,tolerance:50}})),a=c=>{const{delta:l,active:d,over:r}=c;if(l.y>200||(r==null?void 0:r.id)==null)return;const u=o.indexOf(d.id),p=o.indexOf(r.id);if(p===-1)return;const x=[...o],h=x.splice(u,1);x.splice(p,0,h[0]),s(x)};return e.jsx(nt,{sensors:i,collisionDetection:st,onDragEnd:a,children:n})}const Qe=m.forwardRef(({initialValue:t,allowSubmitSameValue:n,handleUpdate:o,handleCancelUpdate:s},i)=>{const a=m.useRef(null),c=m.useCallback(p=>o(p),[o]),{value:l,onChange:d,onBlur:r,onKeyDown:u}=Be(t,c,a,{allowSubmitSameValue:n,allowKeyboardNavigation:!0,submitOnEnter:!0,submitOnCtrlEnter:!0,onCancelUpdate:s});return m.useImperativeHandle(i,()=>({focus(){var p;(p=a.current)==null||p.focus()},select(){var p;(p=a.current)==null||p.select()},focusParentElement(){var p,x;(x=(p=a.current)==null?void 0:p.parentElement)==null||x.focus()}}),[a]),e.jsx(De,{ref:a,variant:"ghosted",fluid:!0,value:l,onChange:d,onBlur:r,onKeyDown:u})});Qe.displayName="SingleLineCell";const pe=m.memo(Qe),xn=m.memo(gn);function gn({initialValue:t,lockedValue:n,delayed:o,onSubmit:s,children:i}){const[a,c]=m.useState(!1),[l,d]=m.useState(t),r=m.useRef(null),u=m.useRef(null);m.useEffect(()=>{a&&r.current&&(r.current.focus(),r.current.select())},[a]),m.useEffect(()=>{a||d(t)},[t,a]);const p=()=>c(!0),x=()=>{c(!1),setTimeout(()=>{var f;return(f=u.current)==null?void 0:f.focusParentElement()})},h=m.useCallback(f=>{var S,w,j;if(c(!1),f===""){s(f),(S=r.current)==null||S.focusParentElement();return}if(f.startsWith("p")||f.startsWith("+")){s(f),(w=r.current)==null||w.focusParentElement();return}const g=Ke(f);if(g<0||isNaN(g)){d(t),setTimeout(()=>{var _;return(_=u.current)==null?void 0:_.focusParentElement()});return}if(g===t&&n){(j=r.current)==null||j.focusParentElement();return}s(f),d(Number(f)),setTimeout(()=>{var _;return(_=u.current)==null?void 0:_.focusParentElement()})},[t,n,s]),E=B(l);return a?e.jsx(pe,{ref:r,initialValue:E,allowSubmitSameValue:!n,handleUpdate:h,handleCancelUpdate:x}):e.jsx(Le,{onClick:p,onFocus:p,muted:!n,offset:o?"over":void 0,ref:u,children:i})}const Cn="_imageInput_1dtk5_17",yn="_imageCell_1dtk5_24",jn="_overlay_1dtk5_28",bn="_image_1dtk5_17",q={imageInput:Cn,imageCell:yn,overlay:jn,image:bn},vn=m.memo(Sn);function Sn({initialValue:t,readOnly:n,updateValue:o}){const s=a=>{a!==t&&(a!==""&&!a.startsWith("http")||o(a))},i=()=>{t&&window.open(t,"_blank","noopener,noreferrer")};return t?e.jsxs("div",{className:q.imageCell,children:[!n&&e.jsxs("div",{className:q.overlay,children:[e.jsx(N,{onClick:i,children:"Preview"}),e.jsx(N,{variant:"subtle-destructive",onClick:()=>s(""),children:"Delete"})]}),!!t&&e.jsx("img",{loading:"lazy",src:t,className:q.image})]}):e.jsx(De,{variant:"ghosted",className:q.imageInput,fluid:!0,readOnly:n,disabled:n,placeholder:"Paste image URL",onBlur:a=>s(a.currentTarget.value),onKeyDown:a=>{a.key==="Enter"&&s(a.currentTarget.value)},defaultValue:t})}const En="_flag_yy7ty_17",_n={flag:En};function kn(){return e.jsx("div",{className:_n.flag,children:e.jsx(at,{})})}const Tn="_ghostedText_18xqt_17",In="_multiline_18xqt_24",ve={ghostedText:Tn,multiline:In};function he({children:t,multiline:n}){return e.jsx("div",{className:`${ve.ghostedText} ${n?ve.multiline:""}`,children:t})}const Xe=m.memo(wn);function wn({initialValue:t,handleUpdate:n}){const o=m.useRef(null),s=m.useCallback(d=>n(d),[n]),{value:i,onChange:a,onBlur:c,onKeyDown:l}=Be(t,s,o,{submitOnCtrlEnter:!0,allowKeyboardNavigation:!0});return e.jsx(Vt,{inputref:o,variant:"ghosted",fluid:!0,rows:1,value:i,onChange:a,onBlur:c,onKeyDown:l,spellCheck:!1})}const Mn="_muted_1u021_17",Rn="_numeric_1u021_22",Se={muted:Mn,numeric:Rn};function P({numeric:t,children:n}){return e.jsx("span",{className:ee([Se.muted,t&&Se.numeric]),children:n})}const Ze=m.memo(Dn);function Dn({initialValue:t,lockedValue:n,delayed:o,onSubmit:s,children:i}){const[a,c]=m.useState(!1),[l,d]=m.useState(t),r=m.useRef(null),u=m.useRef(null);m.useEffect(()=>{a&&r.current&&(r.current.focus(),r.current.select())},[a]),m.useEffect(()=>{a||d(t)},[t,a]);const p=()=>c(!0),x=()=>{c(!1),setTimeout(()=>{var f;return(f=u.current)==null?void 0:f.focusParentElement()})},h=m.useCallback(f=>{var S,w,j;if(c(!1),f===""){s(f),(S=r.current)==null||S.focusParentElement();return}if(f.startsWith("p")||f.startsWith("+")){s(f),(w=r.current)==null||w.focusParentElement();return}const g=Ke(f);if(g<0||isNaN(g)){d(t),setTimeout(()=>{var _;return(_=u.current)==null?void 0:_.focusParentElement()});return}if(g===t&&n){(j=r.current)==null||j.focusParentElement();return}s(f),d(Number(f)),setTimeout(()=>{var _;return(_=u.current)==null?void 0:_.focusParentElement()})},[t,n,s]),E=L(l);return a?e.jsx(pe,{ref:r,initialValue:E,allowSubmitSameValue:!n,handleUpdate:h,handleCancelUpdate:x}):e.jsx(Le,{onClick:p,onFocus:p,muted:!n,offset:o?"over":void 0,ref:u,children:i})}function Nn({getValue:t,row:n,table:o,column:s}){var f;if(!o.options.meta)return null;const{showDelayedTimes:i,hideTableSeconds:a}=o.options.meta.options,c=a?{format12:"h:mm a",format24:"HH:mm"}:void 0,l=n.original;if(!U(l))return e.jsx(P,{numeric:!0,children:L(t(),c)});const{handleUpdateTimer:d}=o.options.meta,r=g=>d(n.original.id,"timeStart",g),u=t(),p=!l.linkStart,x=i?u+l.delay:u,h=L(x,c);return((f=s.columnDef.meta)==null?void 0:f.canWrite)?e.jsxs(Ze,{initialValue:u,onSubmit:r,lockedValue:p,delayed:l.delay!==0,children:[h,e.jsx(Y,{delayValue:l.delay,tooltipPrefix:B(u)})]}):e.jsxs(P,{numeric:!0,children:[h,e.jsx(Y,{delayValue:l.delay,tooltipPrefix:B(u)})]})}function zn({getValue:t,row:n,table:o,column:s}){var f;if(!o.options.meta)return null;const{showDelayedTimes:i,hideTableSeconds:a}=o.options.meta.options,c=a?{format12:"h:mm a",format24:"HH:mm"}:void 0,l=n.original;if(!U(l))return e.jsx(P,{numeric:!0,children:L(t(),c)});const{handleUpdateTimer:d}=o.options.meta,r=g=>d(n.original.id,"timeEnd",g),u=t(),p=l.timeStrategy===Ae.LockEnd,x=i?u+l.delay:u,h=L(x,c);return((f=s.columnDef.meta)==null?void 0:f.canWrite)?e.jsxs(Ze,{initialValue:u,onSubmit:r,lockedValue:p,delayed:l.delay!==0,children:[h,e.jsx(Y,{delayValue:l.delay,tooltipPrefix:B(u)})]}):e.jsxs(P,{numeric:!0,children:[h,e.jsx(Y,{delayValue:l.delay,tooltipPrefix:B(u)})]})}function On({getValue:t,row:n,table:o,column:s}){var x;if(!o.options.meta)return null;const{hideTableSeconds:i}=o.options.meta.options,a=n.original;if(!U(a))return e.jsx(P,{numeric:!0,children:be(t(),i)});const{handleUpdateTimer:c}=o.options.meta,l=h=>c(n.original.id,"duration",h),d=t(),r=a.timeStrategy===Ae.LockDuration,u=be(d,i);return((x=s.columnDef.meta)==null?void 0:x.canWrite)?e.jsx(xn,{initialValue:d,onSubmit:l,lockedValue:r,children:u}):e.jsx(P,{numeric:!0,children:u})}function Wn({row:t,column:n,table:o}){var c;const s=m.useCallback(l=>{var d;(d=o.options.meta)==null||d.handleUpdate(t.index,n.id,l,!1)},[n.id,t.index,o.options.meta]),i=t.original[n.id];return typeof i!="string"?null:((c=n.columnDef.meta)==null?void 0:c.canWrite)?e.jsx(Xe,{initialValue:i,handleUpdate:s}):e.jsx(he,{multiline:!0,children:i})}function Pn({row:t,column:n,table:o}){var l;const s=m.useCallback(d=>{var r;(r=o.options.meta)==null||r.handleUpdate(t.index,n.id,d,!0)},[n.id,t.index,o.options.meta]),i=t.original;if(fe(i))return null;const a=(l=n.columnDef.meta)==null?void 0:l.canWrite,c=i.custom[n.id];return e.jsx(vn,{initialValue:c,updateValue:s,readOnly:!a})}function Ee({row:t,column:n,table:o}){var c;const s=m.useCallback(l=>{var d;(d=o.options.meta)==null||d.handleUpdate(t.index,n.id,l,!1)},[n.id,t.index,o.options.meta]),i=t.original[n.id];return typeof i!="string"?null:((c=n.columnDef.meta)==null?void 0:c.canWrite)?e.jsx(pe,{initialValue:i,handleUpdate:s}):e.jsx(he,{children:i})}function $n({row:t}){const n=t.original;return!U(n)||!n.flag?null:e.jsx(kn,{})}function Fn({row:t,column:n,table:o}){var l;const s=m.useCallback(d=>{var r;(r=o.options.meta)==null||r.handleUpdate(t.index,n.id,d,!0)},[n.id,t.index,o.options.meta]),i=t.original;if(fe(i))return null;const a=i.custom[n.id]??"";return((l=n.columnDef.meta)==null?void 0:l.canWrite)?e.jsx(Xe,{initialValue:a,handleUpdate:s}):e.jsx(he,{multiline:!0,children:a})}function Bn(t,n,o){var x,h,E,f;const s=[],i=n===k.Edit,a=o?((x=o.options)==null?void 0:x.read)==="full":!0,c=o?((h=o.options)==null?void 0:h.write)==="full":!0,l=(E=o==null?void 0:o.options)!=null&&E.write?new Set(o.options.write.split(",")):new Set,d=(f=o==null?void 0:o.options)!=null&&f.read?new Set(o.options.read.split(",")):new Set,r=g=>a||d.has(g),u=g=>i&&(c||l.has(g));r("flag")&&s.push({accessorKey:"flag",id:"flag",header:"Flag",cell:$n,size:45,minSize:45,meta:{canWrite:u("flag")}}),r("cue")&&s.push({accessorKey:"cue",id:"cue",header:"Cue",cell:Ee,size:75,minSize:40,meta:{canWrite:u("cue")}}),r("timeStart")&&s.push({accessorKey:"timeStart",id:"timeStart",header:"Start",cell:Nn,size:75,minSize:75,meta:{canWrite:u("timeStart")}}),r("timeEnd")&&s.push({accessorKey:"timeEnd",id:"timeEnd",header:"End",cell:zn,size:75,minSize:75,meta:{canWrite:u("timeEnd")}}),r("duration")&&s.push({accessorKey:"duration",id:"duration",header:"Duration",cell:On,size:75,minSize:75,meta:{canWrite:u("duration")}}),r("title")&&s.push({accessorKey:"title",id:"title",header:"Title",cell:Ee,size:250,minSize:75,meta:{canWrite:u("title")}}),r("note")&&s.push({accessorKey:"note",id:"note",header:"Note",cell:Wn,size:250,minSize:75,meta:{canWrite:u("note")}});const p=Object.keys(t);for(let g=0;g<p.length;g++){const S=p[g],w=`custom-${S}`;r(w)&&s.push({accessorKey:S,id:S,header:t[S].label,cell:t[S].type==="text"?Fn:Pn,size:250,minSize:75,meta:{colour:t[S].colour,canWrite:u(w)}})}return s}const Ln="_emptyContainer_1dp7m_17",Hn="_emptyCell_1dp7m_21",An="_empty_1dp7m_17",Kn="_text_1dp7m_30",Q={emptyContainer:Ln,emptyCell:Hn,empty:An,text:Kn};function Un({text:t}){return e.jsx("tbody",{className:Q.emptyContainer,children:e.jsx("tr",{children:e.jsxs("td",{colSpan:99,className:Q.emptyCell,children:[e.jsx(kt,{className:Q.empty}),t&&e.jsx("span",{className:Q.text,children:t})]})})})}const Gn="_cuesheet_1f3ag_17",Vn="_resizer_1f3ag_37",Jn="_actionColumn_1f3ag_53",qn="_indexColumn_1f3ag_62",Qn="_tableHeader_1f3ag_73",O={cuesheet:Gn,resizer:Vn,actionColumn:Jn,indexColumn:qn,tableHeader:Qn};function Xn({columnId:t,colSpan:n,injectedStyles:o,children:s,draggable:i}){const{attributes:a,listeners:c,setNodeRef:l,transform:d,transition:r,isDragging:u}=rt({id:t}),p={...o,zIndex:u?2:"inherit",transform:lt.Translate.toString(d),transition:r};return e.jsxs("th",{ref:l,style:p,colSpan:n,tabIndex:-1,children:[e.jsx("div",{...a,...c,children:s}),i]})}function Zn({colSpan:t,injectedStyles:n,children:o,draggable:s}){return e.jsxs("th",{style:n,colSpan:t,tabIndex:-1,children:[e.jsx("div",{children:o}),s]})}function Ye({header:t}){return e.jsx("div",{onDoubleClick:()=>t.column.resetSize(),onMouseDown:t.getResizeHandler(),onTouchStart:t.getResizeHandler(),className:O.resizer})}function Yn({headerGroup:t,cuesheetMode:n}){const o=z(s=>s.hideIndexColumn);return e.jsxs("tr",{children:[n===k.Edit&&e.jsx("th",{className:O.actionColumn,tabIndex:-1}),!o&&e.jsx("th",{className:O.indexColumn,tabIndex:-1,children:"#"}),e.jsx(ct,{items:t.headers,strategy:ut,children:t.headers.map(s=>{var l,d;const i=(l=s.column.columnDef.meta)==null?void 0:l.colour,c={opacity:((d=s.column.columnDef.meta)==null?void 0:d.canWrite)?1:.6};if(i){const r=H(i);c.backgroundColor=r.backgroundColor,c.color=r.color}return e.jsx(Xn,{columnId:s.column.id,colSpan:s.colSpan,injectedStyles:{width:`calc(var(--header-${s==null?void 0:s.id}-size) * 1px)`,...c},draggable:e.jsx(Ye,{header:s}),children:s.isPlaceholder?null:K(s.column.columnDef.header,s.getContext())},s.column.columnDef.id)})},t.id)]},t.id)}function es({headerGroup:t,cuesheetMode:n}){const o=z(s=>s.hideIndexColumn);return e.jsxs("tr",{children:[n===k.Edit&&e.jsx("th",{className:O.actionColumn,tabIndex:-1}),!o&&e.jsx("th",{className:O.indexColumn,tabIndex:-1,children:"#"}),t.headers.map(s=>{var l,d;const i=(l=s.column.columnDef.meta)==null?void 0:l.colour,c={opacity:((d=s.column.columnDef.meta)==null?void 0:d.canWrite)?1:.6};if(i){const r=H(i);c.backgroundColor=r.backgroundColor,c.color=r.color}return e.jsx(Zn,{columnId:s.column.id,colSpan:s.colSpan,injectedStyles:{width:`calc(var(--header-${s==null?void 0:s.id}-size) * 1px)`,...c},draggable:e.jsx(Ye,{header:s}),children:s.isPlaceholder?null:K(s.column.columnDef.header,s.getContext())},s.column.columnDef.id)})]},t.id)}const ts="_delayRow_lk49a_106",ns={delayRow:ts};function ss({duration:t,injectedStyles:n,...o}){if(z(a=>a.hideDelays)||t===0)return null;const i=Qt(t,"expanded");return e.jsx("tr",{className:ns.delayRow,"data-testid":"cuesheet-delay",style:n,...o,children:e.jsx("td",{tabIndex:0,children:i})})}const os=m.memo(ss),ne=ue(t=>({isOpen:!1,entryId:null,entryType:null,entryIndex:null,parentId:null,position:{x:0,y:0},flag:null,openMenu:(n,o,s,i,a,c)=>t({isOpen:!0,position:n,entryId:o,entryType:s,entryIndex:i,parentId:a,flag:c}),closeMenu:()=>t({isOpen:!1})})),is="_actionColumn_1npa7_53",as="_indexColumn_1npa7_62",rs="_eventRow_1npa7_106",ls="_firstAfterGroup_1npa7_116",cs="_skip_1npa7_119",W={actionColumn:is,indexColumn:as,eventRow:rs,firstAfterGroup:ls,skip:cs};function us({rowId:t,id:n,eventIndex:o,colour:s,isFirstAfterGroup:i,isLoaded:a,isPast:c,groupColour:l,flag:d,skip:r,parent:u,rowIndex:p,table:x,injectedStyles:h,...E}){var G;const{cuesheetMode:f,hideIndexColumn:g}=((G=x.options.meta)==null?void 0:G.options)??{cuesheetMode:k.Edit,hideIndexColumn:!1},S=ne(I=>I.openMenu),{color:w,backgroundColor:j}=H(s),_=re(w),se=le({..._,alpha:_.alpha*.8}),oe=m.useMemo(()=>{if(a)return"#087A27";if(s){const I=re(H(s).backgroundColor);if(I!==null)return le({...I,alpha:I.alpha*.25})}},[s,a]);return e.jsxs("tr",{id:t,className:ee([W.eventRow,r&&W.skip,i&&W.firstAfterGroup,u&&W.hasParent]),style:{...h,opacity:`${c?"0.2":"1"}`,"--user-bg":l??"transparent"},"data-testid":"cuesheet-event",...E,children:[f===k.Edit&&e.jsx("td",{className:W.actionColumn,tabIndex:-1,role:"cell",children:e.jsx(te,{"aria-label":"Options",variant:"ghosted-white",size:"small",onClick:I=>{const V=I.currentTarget.getBoundingClientRect(),C=8+V.y+V.height/2;S({x:V.x,y:C},n,A.Event,p,u,d)},children:e.jsx(de,{})})}),!g&&e.jsx("td",{className:W.indexColumn,style:{backgroundColor:j,color:se},tabIndex:-1,role:"cell",children:o}),x.getRow(t).getVisibleCells().map(I=>e.jsx("td",{style:{width:`calc(var(--col-${I.column.id}-size) * 1px)`,backgroundColor:oe},tabIndex:-1,role:"cell",children:K(I.column.columnDef.cell,I.getContext())},I.id))]})}const ds="_actionColumn_1p2se_53",ms="_indexColumn_1p2se_62",fs="_groupRow_1p2se_106",ae={actionColumn:ds,indexColumn:ms,groupRow:fs};function ps({groupId:t,colour:n,rowId:o,rowIndex:s,table:i,injectedStyles:a,...c}){var u;const{cuesheetMode:l,hideIndexColumn:d}=((u=i.options.meta)==null?void 0:u.options)??{cuesheetMode:k.Edit,hideIndexColumn:!1},r=ne(p=>p.openMenu);return e.jsxs("tr",{className:ae.groupRow,style:{...a,"--user-bg":n},"data-testid":"cuesheet-group",...c,children:[l===k.Edit&&e.jsx("td",{className:ae.actionColumn,tabIndex:-1,role:"cell",children:e.jsx(te,{"aria-label":"Options",variant:"ghosted-white",size:"small",onClick:p=>{const x=p.currentTarget.getBoundingClientRect(),h=8+x.y+x.height/2;r({x:x.x,y:h},t,A.Group,s,null,null)},children:e.jsx(de,{})})}),!d&&e.jsx("td",{className:ae.indexColumn,tabIndex:-1,role:"cell"}),i.getRow(o).getVisibleCells().map(p=>e.jsx("td",{tabIndex:-1,style:{width:`calc(var(--col-${p.column.id}-size) * 1px)`},role:"cell",children:K(p.column.columnDef.cell,p.getContext())},p.id))]})}const hs="_actionColumn_plhap_53",xs="_indexColumn_plhap_62",gs="_milestoneRow_plhap_106",X={actionColumn:hs,indexColumn:xs,milestoneRow:gs};function Cs({entryId:t,isPast:n,parentBgColour:o,parentId:s,colour:i,rowId:a,rowIndex:c,table:l,injectedStyles:d,...r}){var E;const{cuesheetMode:u,hideIndexColumn:p}=((E=l.options.meta)==null?void 0:E.options)??{cuesheetMode:k.Edit,hideIndexColumn:!1},x=ne(f=>f.openMenu);let h;if(i){const f=re(H(i).backgroundColor);f!==null&&(h=le({...f,alpha:f.alpha*.25}))}return e.jsxs("tr",{className:ee([X.milestoneRow,!!o&&X.hasParent]),style:{...d,opacity:`${n?"0.2":"1"}`,"--user-bg":o??"transparent"},"data-testid":"cuesheet-milestone",...r,children:[u===k.Edit&&e.jsx("td",{className:X.actionColumn,tabIndex:-1,role:"cell",children:e.jsx(te,{"aria-label":"Options",variant:"ghosted-white",size:"small",onClick:f=>{const g=f.currentTarget.getBoundingClientRect(),S=8+g.y+g.height/2;x({x:g.x,y:S},t,A.Milestone,c,s,null)},children:e.jsx(de,{})})}),!p&&e.jsx("td",{className:X.indexColumn,tabIndex:-1,role:"cell",children:Tt}),l.getRow(a).getVisibleCells().map(f=>{const g=f.column.id!=="duration"&&f.column.id!=="timeStart"&&f.column.id!=="timeEnd";return e.jsx("td",{style:{width:`calc(var(--col-${f.column.id}-size) * 1px)`,backgroundColor:h,opacity:g?1:.4},tabIndex:-1,children:g&&K(f.column.columnDef.cell,f.getContext())},f.id)})]})}const xe=ue(t=>({canChangeMode:!1,canCreateEntries:!1,canEditEntries:!1,canFlag:!1,canShare:!1,setPermissions(n){t({canChangeMode:n.canChangeMode,canFlag:n.canFlag,canCreateEntries:n.canCreateEntries,canEditEntries:n.canEditEntries,canShare:n.canShare})}})),ys=m.memo(js);function js(){const{isOpen:t,entryId:n,entryIndex:o,parentId:s,flag:i,position:a,closeMenu:c}=ne(),{addEntry:l,clone:d,deleteEntry:r,move:u,updateEntry:p}=Ue(),x=ce(E=>E.setEditableEntry),h=xe();return t?e.jsx(Lt,{isOpen:!0,onClose:c,items:[{type:"item",label:"Edit...",onClick:()=>x(n),icon:ke,disabled:!h.canEditEntries},{type:"divider"},{type:"item",label:i?"Remove flag":"Add flag",onClick:()=>p({id:n,flag:!i}),icon:Ce,disabled:i===null||!h.canFlag},{type:"divider"},{type:"item",label:"Add event above",onClick:()=>l({type:A.Event,parent:s},{before:n}),icon:ye,disabled:!h.canCreateEntries},{type:"item",label:"Add event below",onClick:()=>l({type:A.Event,parent:s},{after:n}),icon:ye,disabled:!h.canCreateEntries},{type:"item",label:"Clone event",onClick:()=>d(n),icon:Ce,disabled:!h.canCreateEntries},{type:"divider"},{type:"item",label:"Move up",onClick:()=>u(n,"up"),icon:dt,disabled:o<1||!h.canEditEntries},{type:"item",label:"Move down",onClick:()=>u(n,"down"),icon:mt,disabled:!h.canEditEntries},{type:"divider"},{type:"item",label:"Delete",onClick:()=>r([n]),icon:ft,disabled:!h.canEditEntries}],position:a}):null}function bs(t){return e.jsx(pt,{style:{transform:"rotate(-45deg)"},...t})}function vs(){const{data:t}=It(),{data:n}=wt(),[o,s]=Te(),i=o&&t&&n;return e.jsxs(e.Fragment,{children:[e.jsxs(F,{onClick:s.open,render:e.jsx(N,{}),children:[e.jsx(bs,{}),"Share..."]}),e.jsx(Pe,{isOpen:o,onClose:s.close,title:"Share cuesheet view",showBackdrop:!0,showCloseButton:!0,bodyElements:i?e.jsx(Bt,{lockedPath:{value:Mt.Cuesheet,label:"Cuesheet"}}):null})]})}const Ss="_tableSettings_18k3s_17",Es="_sectionTitle_18k3s_29",_s="_option_18k3s_40",ks="_column_18k3s_47",Ts="_inline_18k3s_54",Is="_apart_18k3s_60",ws="_group_18k3s_65",Ms="_radioButton_18k3s_76",v={tableSettings:Ss,sectionTitle:Es,option:_s,column:ks,inline:Ts,apart:Is,group:ws,radioButton:Ms};function Rs({columns:t,handleResetResizing:n,handleResetReordering:o,handleClearToggles:s}){const i=xe(r=>r.canShare),a=m.use(Ne),[c,l]=Ie({key:a?`${a.alias}${Z.cuesheetMode}`:Z.cuesheetMode,defaultValue:a?k.Run:k.Edit}),d=r=>{const u=r.at(0);u&&l(u)};return e.jsxs(ht,{className:v.tableSettings,children:[e.jsx(Ds,{}),e.jsx(Ns,{columns:t,handleResetResizing:n,handleResetReordering:o,handleClearToggles:s}),e.jsxs(xt,{value:[c],onValueChange:d,className:ee([v.group,v.apart]),children:[e.jsx(F,{render:e.jsx(je,{}),value:k.Run,className:v.radioButton,children:"Run"}),e.jsx(F,{render:e.jsx(je,{}),value:k.Edit,className:v.radioButton,children:"Edit"})]}),i&&e.jsxs(e.Fragment,{children:[e.jsx(Ge,{orientation:"vertical"}),e.jsx(vs,{})]})]})}function Ds(){const t=z();return e.jsxs(we,{children:[e.jsx(Me,{render:e.jsx(F,{render:e.jsxs(N,{variant:"ghosted-white",children:[e.jsx(gt,{})," Settings",e.jsx(Re,{})]})})}),e.jsxs(Ve,{align:"start",className:v.inline,children:[e.jsxs("div",{className:v.column,children:[e.jsx(D,{className:v.sectionTitle,children:"Element visibility"}),e.jsxs(D,{className:v.option,children:[e.jsx($,{defaultChecked:t.hideTableSeconds,onCheckedChange:n=>t.setOption("hideTableSeconds",n)}),"Hide seconds in table"]}),e.jsxs(D,{className:v.option,children:[e.jsx($,{defaultChecked:t.hideIndexColumn,onCheckedChange:n=>t.setOption("hideIndexColumn",n)}),"Hide index column"]})]}),e.jsxs("div",{className:v.column,children:[e.jsx(D,{className:v.sectionTitle,children:"Table Behaviour"}),e.jsxs(D,{className:v.option,children:[e.jsx($,{defaultChecked:t.showDelayedTimes,onCheckedChange:n=>t.setOption("showDelayedTimes",n)}),"Show delayed times"]}),e.jsxs(D,{className:v.option,children:[e.jsx($,{defaultChecked:t.hideDelays,onCheckedChange:n=>t.setOption("hideDelays",n)}),"Hide delay entries"]})]})]})]})}function Ns({columns:t,handleResetResizing:n,handleResetReordering:o,handleClearToggles:s}){return e.jsxs(we,{children:[e.jsx(Me,{render:e.jsx(F,{render:e.jsxs(N,{variant:"ghosted-white",children:[e.jsx(ke,{})," View",e.jsx(Re,{})]})})}),e.jsxs(Ve,{align:"start",className:v.inline,children:[e.jsxs("div",{className:v.column,children:[e.jsx(D,{className:v.sectionTitle,children:"Column visibility"}),t.map(i=>{const a=i.columnDef.header,c=i.getIsVisible();return e.jsxs(D,{className:v.option,children:[e.jsx($,{defaultChecked:c,onCheckedChange:i.toggleVisibility}),a]},`${i.id}-${c}`)})]}),e.jsx(Ge,{orientation:"vertical"}),e.jsxs("div",{className:v.column,children:[e.jsx(D,{className:v.sectionTitle,children:"Reset Options"}),e.jsx(N,{size:"small",fluid:!0,onClick:s,children:"Show All"}),e.jsx(N,{size:"small",fluid:!0,onClick:n,children:"Reset Resizing"}),e.jsx(N,{size:"small",fluid:!0,onClick:o,children:"Reset Reordering"})]})]})]})}function zs({columns:t,cuesheetMode:n}){const{data:o,status:s}=At(),{updateEntry:i,updateTimer:a}=Ue(),c=z(C=>C.showDelayedTimes),l=z(C=>C.hideTableSeconds),d=z(C=>C.hideIndexColumn),{selectedEventId:r}=Rt(),u=m.useRef(null),{listeners:p}=Ct(),x=m.useMemo(()=>({handleUpdate:(C,b,T,R=!1)=>{const M=o[C];if(!(!M||M[b]===T)){if(R){i({id:M.id,custom:{[b]:T}});return}i({id:M.id,[b]:T})}},handleUpdateTimer:(C,b,T)=>{a(C,b,T,!0)},options:{showDelayedTimes:c,hideTableSeconds:l,cuesheetMode:n,hideIndexColumn:d}}),[n,o,d,l,c,i,a]),{columnOrder:h,resetColumnOrder:E}=qe(t),{columnSizing:f,setColumnSizing:g}=fn(),{columnVisibility:S,setColumnVisibility:w}=pn(),j=yt({data:o,columns:t,columnResizeMode:"onChange",state:{columnOrder:h,columnVisibility:S,columnSizing:f},onColumnVisibilityChange:w,onColumnSizingChange:g,getCoreRowModel:bt(),meta:x}),_=m.useCallback(()=>{j.toggleAllColumnsVisible(!0)},[j]),se=m.useCallback(()=>{g({})},[g]);m.useEffect(()=>{if(n===k.Edit||u.current===null||!r)return;const C=o.findIndex(b=>b.id===r);u.current.scrollToIndex({index:C,behavior:"smooth"})},[n,o,r]);const oe=m.useMemo(()=>{const C=j.getFlatHeaders(),b={};for(let T=0;T<C.length;T++){const R=C[T];R&&(b[`--header-${R.id}-size`]=R.getSize(),b[`--col-${R.column.id}-size`]=R.column.getSize())}return b},[j.getState().columnSizingInfo,j.getState().columnSizing]),G=j.getAllLeafColumns(),{rows:I}=j.getRowModel();return!o||s==="pending"?e.jsx(He,{text:"Loading..."}):e.jsxs(e.Fragment,{children:[e.jsx(Rs,{columns:G,handleResetResizing:se,handleResetReordering:E,handleClearToggles:_}),e.jsx(jt,{ref:u,data:o,increaseViewportBy:{top:100,bottom:200},components:{EmptyPlaceholder:()=>e.jsx(Un,{text:"No data in rundown"}),Table:({style:C,...b})=>e.jsx("table",{className:O.cuesheet,id:"cuesheet",style:{...C,...oe},...p,...b}),TableRow:({item:C,style:b,...T})=>{const R=T["data-index"],M=I[R],J=M.original.id,y=M.original;return Fe(y)?e.jsx(ps,{groupId:y.id,colour:y.colour,rowId:M.id,rowIndex:M.index,table:j,injectedStyles:b,...T},J):fe(y)?e.jsx(os,{duration:y.duration,injectedStyles:b,...T},J):$e(y)?e.jsx(Cs,{entryId:y.id,isPast:y.isPast,parentBgColour:y.groupColour,parentId:y.parent,colour:y.colour,rowId:M.id,rowIndex:R,table:j,injectedStyles:b,...T},J):e.jsx(us,{id:y.id,eventIndex:y.eventIndex,colour:y.colour,isFirstAfterGroup:y.isFirstAfterGroup,isLoaded:y.isLoaded,isPast:y.isPast,groupColour:y.groupColour,flag:y.flag,skip:y.skip,parent:y.parent,rowId:M.id,rowIndex:R,table:j,injectedStyles:b,...T},M.id)},TableHead:C=>e.jsx("thead",{className:O.tableHeader,...C})},fixedHeaderContent:()=>j.getHeaderGroups().map(C=>{const b=j.getState().columnSizingInfo.isResizingColumn?es:Yn;return e.jsx(b,{cuesheetMode:n,headerGroup:C},C.id)})}),e.jsx(ys,{})]})}const Os=m.memo(Ws);function Ws(){const{data:t,status:n}=qt(),o=xe(l=>l.setPermissions),s=m.use(Ne);m.useEffect(()=>{var l,d,r;if(s){const u=((l=s.options)==null?void 0:l.write)==="full";o({canChangeMode:((d=s.options)==null?void 0:d.write)!=="-",canCreateEntries:u,canEditEntries:u,canFlag:u||!!((r=s.options)!=null&&r.write.includes("flag")),canShare:!1})}else o({canChangeMode:!0,canCreateEntries:!0,canEditEntries:!0,canFlag:!0,canShare:Dt==="rw"})},[s,o]);const[i]=Ie({key:s?`${s.alias}${Z.cuesheetMode}`:Z.cuesheetMode,defaultValue:s?k.Run:k.Edit}),a=m.useMemo(()=>Bn(t,i,s),[t,i,s]),c=!t||n==="pending";return e.jsx(hn,{columns:a,children:c?e.jsx(He,{text:"Loading..."}):e.jsx(zs,{columns:a,cuesheetMode:i})})}const Ps="_tableWrapper_h9gr1_17",$s={tableWrapper:Ps};function Fs(){const[t,n]=Te();Ot("Cuesheet");const o=Nt();return e.jsxs(e.Fragment,{children:[e.jsx(zt,{isOpen:t,onClose:n.close}),e.jsx(sn,{}),e.jsxs("div",{className:$s.tableWrapper,"data-testid":"cuesheet",children:[e.jsx(Zt,{children:!o&&e.jsx(te,{"aria-label":"Toggle navigation",variant:"subtle-white",size:"xlarge",onClick:n.open,children:e.jsx(vt,{})})}),e.jsx(ln,{}),e.jsx(Os,{})]})]})}function xo(){return e.jsx(St,{permission:"operator",children:e.jsx(Fs,{})})}export{xo as default};
|
|
2
|
+
//# sourceMappingURL=ProtectedCuesheet-DvYSgueA.js.map
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtectedCuesheet-DvYSgueA.js","sources":["../../src/common/hooks/useIsMobileScreen.ts","../../src/features/overview/CuesheetOverview.tsx","../../src/features/rundown/entry-editor/CuesheetEventEditor.tsx","../../src/views/cuesheet/cuesheet-edit-modal/useCuesheetEditModal.tsx","../../src/views/cuesheet/cuesheet-edit-modal/CuesheetEditModal.tsx","../../src/views/cuesheet/cuesheet-progress/CuesheetProgress.tsx","../../src/common/utils/debounce.ts","../../src/views/cuesheet/cuesheet-table/useColumnManager.tsx","../../src/views/cuesheet/cuesheet-dnd/CuesheetDnd.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/SingleLineCell.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/DurationInput.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/EditableImage.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/FlagCell.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/GhostedText.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/MultiLineCell.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/MutedText.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/TimeInput.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/cuesheetColsFactory.tsx","../../src/common/components/state/EmptyTableBody.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/SortableCell.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/CuesheetHeader.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/DelayRow.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-menu/useCuesheetTableMenu.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/EventRow.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/GroupRow.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/MilestoneRow.tsx","../../src/views/cuesheet/useTablePermissions.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-menu/CuesheetTableMenu.tsx","../../src/common/components/icons/RotatedLink.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-settings/CuesheetShareModal.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-settings/CuesheetTableSettings.tsx","../../src/views/cuesheet/cuesheet-table/CuesheetTable.tsx","../../src/views/cuesheet/CuesheetTableWrapper.tsx","../../src/views/cuesheet/CuesheetPage.tsx","../../src/views/cuesheet/ProtectedCuesheet.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useViewportSize } from '@mantine/hooks';\n\nexport function useIsMobileScreen(): boolean {\n const { width } = useViewportSize();\n\n return useMemo(() => width < 800, [width]);\n}\n","import { memo, PropsWithChildren } from 'react';\n\nimport { useIsMobileScreen } from '../../common/hooks/useIsMobileScreen';\n\nimport { ClockOverview, MetadataTimes, OffsetOverview, StartTimes, TimerOverview } from './composite/TimeElements';\nimport TitleOverview from './composite/TitleOverview';\nimport { OverviewWrapper } from './OverviewWrapper';\n\nexport default memo(CuesheetOverview);\nfunction CuesheetOverview({ children }: PropsWithChildren) {\n const isMobileScreen = useIsMobileScreen();\n\n if (isMobileScreen) return <CuesheetMobile>{children}</CuesheetMobile>;\n else return <CuesheetDesktop>{children}</CuesheetDesktop>;\n}\n\nfunction CuesheetMobile({ children }: PropsWithChildren) {\n return (\n <OverviewWrapper navElements={children}>\n <TimerOverview />\n <OffsetOverview />\n </OverviewWrapper>\n );\n}\n\nfunction CuesheetDesktop({ children }: PropsWithChildren) {\n return (\n <OverviewWrapper navElements={children}>\n <TitleOverview />\n <StartTimes shouldFormat />\n <TimerOverview />\n <OffsetOverview />\n <MetadataTimes />\n <ClockOverview shouldFormat />\n </OverviewWrapper>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { isOntimeEvent, isOntimeGroup, isOntimeMilestone, OntimeEntry } from 'ontime-types';\n\nimport useRundown from '../../../common/hooks-query/useRundown';\n\nimport EventEditor from './EventEditor';\nimport GroupEditor from './GroupEditor';\nimport MilestoneEditor from './MilestoneEditor';\n\nimport style from './EntryEditor.module.scss';\n\ninterface CuesheetEntryEditorProps {\n entryId: string;\n}\n\nexport default function CuesheetEntryEditor({ entryId }: CuesheetEntryEditorProps) {\n const { data } = useRundown();\n const [entry, setEntry] = useState<OntimeEntry | null>(null);\n\n useEffect(() => {\n if (data.order.length === 0) {\n setEntry(null);\n return;\n }\n\n const event = data.entries[entryId];\n if (event) {\n setEntry(event);\n } else {\n setEntry(null);\n }\n }, [entryId, data.order, data.entries]);\n\n if (isOntimeEvent(entry)) {\n return (\n <div className={style.entryEditor} data-testid='editor-container'>\n <EventEditor event={entry} />\n </div>\n );\n }\n\n if (isOntimeMilestone(entry)) {\n return (\n <div className={style.inModal} data-testid='editor-container'>\n <MilestoneEditor milestone={entry} />\n </div>\n );\n }\n\n if (isOntimeGroup(entry)) {\n return (\n <div className={style.inModal} data-testid='editor-container'>\n <GroupEditor group={entry} />\n </div>\n );\n }\n\n return null;\n}\n","import { EntryId } from 'ontime-types';\nimport { create } from 'zustand';\n\ninterface SelectedEntryState {\n selectedEntryId: EntryId | null;\n setEditableEntry: (entryId: EntryId) => void;\n clearSelection: () => void;\n}\n\nexport const useCuesheetEditModal = create<SelectedEntryState>((set) => ({\n selectedEntryId: null,\n setEditableEntry: (entryId: EntryId) => set({ selectedEntryId: entryId }),\n clearSelection: () => set({ selectedEntryId: null }),\n}));\n","import { memo } from 'react';\n\nimport Modal from '../../../common/components/modal/Modal';\nimport CuesheetEntryEditor from '../../../features/rundown/entry-editor/CuesheetEventEditor';\n\nimport { useCuesheetEditModal } from './useCuesheetEditModal';\n\nexport default memo(CuesheetEditModal);\nfunction CuesheetEditModal() {\n const entryId = useCuesheetEditModal((state) => state.selectedEntryId);\n const closeModal = useCuesheetEditModal((state) => state.clearSelection);\n\n if (entryId === null) {\n return null;\n }\n\n return (\n <Modal\n isOpen\n onClose={closeModal}\n title='Edit entry'\n showCloseButton\n bodyElements={<CuesheetEntryEditor entryId={entryId} />}\n />\n );\n}\n","import MultiPartProgressBar from '../../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport { useProgressData } from '../../../common/hooks/useSocket';\nimport useViewSettings from '../../../common/hooks-query/useViewSettings';\n\nimport styles from './CuesheetProgress.module.scss';\n\nexport default function CuesheetProgress() {\n const { data } = useViewSettings();\n const { current, duration, timeWarning, timeDanger } = useProgressData();\n\n return (\n <MultiPartProgressBar\n now={current}\n complete={duration}\n normalColor={data.normalColor}\n warning={timeWarning}\n warningColor={data.warningColor}\n danger={timeDanger}\n dangerColor={data.dangerColor}\n className={styles.progressOverride}\n ignoreCssOverride\n />\n );\n}\n","export function debounce<T extends any[]>(callback: (...args: T) => void, wait: number) {\n let timeout: NodeJS.Timeout | null;\n return (...args: T) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n timeout = null;\n callback(...args);\n }, wait);\n };\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport { useLocalStorage } from '@mantine/hooks';\nimport { ColumnDef, ColumnSizingState, Updater } from '@tanstack/react-table';\n\nimport { debounce } from '../../../common/utils/debounce';\nimport { makeStageKey } from '../../../common/utils/localStorage';\nimport type { ExtendedEntry } from '../../../common/utils/rundownMetadata';\n\nconst tableSizesKey = makeStageKey('cuesheet-sizes');\nconst tableHiddenKey = makeStageKey('cuesheet-hidden');\nconst tableOrderKey = makeStageKey('cuesheet-order');\n\nconst saveSizesToStorage = debounce((sizes: Record<string, number>) => {\n localStorage.setItem(tableSizesKey, JSON.stringify(sizes));\n}, 500);\n\nexport function useColumnSizes() {\n const [columnSizing, setColumnSizingState] = useState<Record<string, number>>(() => {\n try {\n const stored = localStorage.getItem(tableSizesKey);\n return stored ? JSON.parse(stored) : {};\n } catch {\n return {};\n }\n });\n\n // save sizes to localStorage whenever they change (debounced)\n useEffect(() => {\n saveSizesToStorage(columnSizing);\n }, [columnSizing]);\n\n const setColumnSizing = useCallback((sizesOrUpdater: Updater<ColumnSizingState>) => {\n setColumnSizingState(sizesOrUpdater);\n }, []);\n\n return {\n columnSizing,\n setColumnSizing,\n };\n}\n\nexport function useColumnOrder(columns: ColumnDef<ExtendedEntry>[]) {\n const [columnOrder, saveColumnOrder] = useLocalStorage<string[]>({\n key: tableOrderKey,\n defaultValue: columns.map((col) => col.id as string),\n });\n\n // update column order if columns change\n useEffect(() => {\n const newColumns = columns.map((col) => col.id as string);\n if (newColumns.some((id) => !columnOrder.includes(id))) {\n saveColumnOrder(newColumns);\n }\n }, [columnOrder, columns, saveColumnOrder]);\n\n const resetColumnOrder = useCallback(() => {\n saveColumnOrder(columns.map((col) => col.id as string));\n }, [columns, saveColumnOrder]);\n\n return {\n columnOrder,\n saveColumnOrder,\n resetColumnOrder,\n };\n}\n\nexport function useColumnVisibility() {\n const [columnVisibility, setColumnVisibility] = useLocalStorage({\n key: tableHiddenKey,\n defaultValue: {},\n });\n\n return {\n columnVisibility,\n setColumnVisibility,\n };\n}\n","import { PropsWithChildren } from 'react';\nimport {\n closestCorners,\n DndContext,\n DragEndEvent,\n PointerSensor,\n TouchSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { ColumnDef } from '@tanstack/react-table';\n\nimport type { ExtendedEntry } from '../../../common/utils/rundownMetadata';\nimport { useColumnOrder } from '../cuesheet-table/useColumnManager';\n\ninterface CuesheetDndProps {\n columns: ColumnDef<ExtendedEntry>[];\n}\n\nexport default function CuesheetDnd({ columns, children }: PropsWithChildren<CuesheetDndProps>) {\n const { columnOrder, saveColumnOrder } = useColumnOrder(columns);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n delay: 100,\n tolerance: 50,\n },\n }),\n useSensor(TouchSensor, {\n activationConstraint: {\n delay: 100,\n tolerance: 50,\n },\n }),\n );\n\n const handleOnDragEnd = (event: DragEndEvent) => {\n const { delta, active, over } = event;\n\n // cancel if delta y is greater than 200\n if (delta.y > 200) return;\n // cancel if we do not have an over id\n if (over?.id == null) return;\n\n // get index of from\n const fromIndex = columnOrder.indexOf(active.id as string);\n\n // get index of to\n const toIndex = columnOrder.indexOf(over.id as string);\n\n if (toIndex === -1) {\n return;\n }\n\n const reorderedCols = [...columnOrder];\n const reorderedItem = reorderedCols.splice(fromIndex, 1);\n reorderedCols.splice(toIndex, 0, reorderedItem[0]);\n saveColumnOrder(reorderedCols);\n };\n\n return (\n <DndContext sensors={sensors} collisionDetection={closestCorners} onDragEnd={handleOnDragEnd}>\n {children}\n </DndContext>\n );\n}\n","import { forwardRef, memo, useCallback, useImperativeHandle, useRef } from 'react';\n\nimport Input from '../../../../common/components/input/input/Input';\nimport useReactiveTextInput from '../../../../common/components/input/text-input/useReactiveTextInput';\n\ninterface SingleLineCellProps {\n initialValue: string;\n allowSubmitSameValue?: boolean;\n handleUpdate: (newValue: string) => void;\n handleCancelUpdate?: () => void;\n}\n\nconst SingleLineCell = forwardRef(\n ({ initialValue, allowSubmitSameValue, handleUpdate, handleCancelUpdate }: SingleLineCellProps, inputRef) => {\n const ref = useRef<HTMLInputElement | null>(null);\n const submitCallback = useCallback((newValue: string) => handleUpdate(newValue), [handleUpdate]);\n\n const { value, onChange, onBlur, onKeyDown } = useReactiveTextInput(initialValue, submitCallback, ref, {\n allowSubmitSameValue,\n allowKeyboardNavigation: true,\n submitOnEnter: true, // single line should submit on enter\n submitOnCtrlEnter: true,\n onCancelUpdate: handleCancelUpdate,\n });\n\n // expose a subset of the methods to the parent\n useImperativeHandle(inputRef, () => {\n return {\n focus() {\n ref.current?.focus();\n },\n select() {\n ref.current?.select();\n },\n focusParentElement() {\n ref.current?.parentElement?.focus();\n },\n };\n }, [ref]);\n\n return (\n <Input\n ref={ref}\n variant='ghosted'\n fluid\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n />\n );\n },\n);\n\nSingleLineCell.displayName = 'SingleLineCell';\n\nexport default memo(SingleLineCell);\n","import { memo, PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';\nimport { millisToString, parseUserTime } from 'ontime-utils';\n\nimport SingleLineCell from './SingleLineCell';\nimport TextLikeInput from './TextLikeInput';\n\ninterface DurationInputProps {\n initialValue: number;\n lockedValue: boolean;\n delayed?: boolean;\n onSubmit: (value: string) => void;\n}\n\ninterface ParentFocusableInput extends HTMLInputElement {\n focusParentElement: () => void;\n}\n\nexport default memo(DurationInput);\n\nfunction DurationInput({\n initialValue,\n lockedValue,\n delayed,\n onSubmit,\n children,\n}: PropsWithChildren<DurationInputProps>) {\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(initialValue);\n const inputRef = useRef<ParentFocusableInput>(null);\n const textRef = useRef<ParentFocusableInput>(null);\n\n // when we go into edit mode, set focus to the input\n useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n // reset value when initialValue changes, avoiding interrupting the user if we are in edit mode\n useEffect(() => {\n if (!isEditing) {\n setValue(initialValue);\n }\n }, [initialValue, isEditing]);\n\n const handleFakeFocus = () => setIsEditing(true);\n const handleFakeBlur = () => {\n setIsEditing(false);\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n };\n\n const handleUpdate = useCallback(\n (newValue: string) => {\n setIsEditing(false);\n\n // if the user sends an empty string, we want to clear the value\n if (newValue === '') {\n onSubmit(newValue);\n inputRef.current?.focusParentElement();\n return;\n }\n\n // we dont know the values in the rundown, escalate to handler\n if (newValue.startsWith('p') || newValue.startsWith('+')) {\n onSubmit(newValue);\n inputRef.current?.focusParentElement();\n return;\n }\n\n const valueInMillis = parseUserTime(newValue);\n if (valueInMillis < 0 || isNaN(valueInMillis)) {\n setValue(initialValue);\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n return;\n }\n\n // if the value is the same, we may still want to push the lock change\n if (valueInMillis === initialValue && lockedValue) {\n inputRef.current?.focusParentElement();\n return;\n }\n\n onSubmit(newValue);\n setValue(Number(newValue));\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n },\n [initialValue, lockedValue, onSubmit],\n );\n\n const timeString = millisToString(value);\n\n return isEditing ? (\n <SingleLineCell\n ref={inputRef}\n initialValue={timeString}\n allowSubmitSameValue={!lockedValue} // if the value is not locked, submitting will lock the value\n handleUpdate={handleUpdate}\n handleCancelUpdate={handleFakeBlur}\n />\n ) : (\n <TextLikeInput\n onClick={handleFakeFocus}\n onFocus={handleFakeFocus}\n muted={!lockedValue}\n offset={delayed ? 'over' : undefined}\n ref={textRef}\n >\n {children}\n </TextLikeInput>\n );\n}\n","import { memo } from 'react';\n\nimport Button from '../../../../common/components/buttons/Button';\nimport Input from '../../../../common/components/input/input/Input';\n\nimport style from './EditableImage.module.scss';\n\ninterface EditableImageProps {\n initialValue: string;\n readOnly?: boolean;\n updateValue: (newValue: string) => void;\n}\n\nexport default memo(EditableImage);\n\nfunction EditableImage({ initialValue, readOnly, updateValue }: EditableImageProps) {\n const handleUpdate = (newValue: string) => {\n if (newValue === initialValue) {\n return;\n }\n if (newValue !== '' && !newValue.startsWith('http')) {\n return;\n }\n updateValue(newValue);\n };\n\n const openInNewTab = () => {\n if (initialValue) {\n window.open(initialValue, '_blank', 'noopener,noreferrer');\n }\n };\n\n if (!initialValue) {\n return (\n <Input\n variant='ghosted'\n className={style.imageInput}\n fluid\n readOnly={readOnly}\n // we disable the field to prevent receiving focus\n disabled={readOnly}\n placeholder='Paste image URL'\n onBlur={(event) => handleUpdate(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n handleUpdate(event.currentTarget.value);\n }\n }}\n defaultValue={initialValue}\n />\n );\n }\n\n return (\n <div className={style.imageCell}>\n {!readOnly && (\n <div className={style.overlay}>\n <Button onClick={openInNewTab}>Preview</Button>\n <Button variant='subtle-destructive' onClick={() => handleUpdate('')}>\n Delete\n </Button>\n </div>\n )}\n {Boolean(initialValue) && <img loading='lazy' src={initialValue} className={style.image} />}\n </div>\n );\n}\n","import { TbFlagFilled } from 'react-icons/tb';\n\nimport style from './FlagCell.module.scss';\n\nexport default function FlagCell() {\n return (\n <div className={style.flag}>\n <TbFlagFilled />\n </div>\n );\n}\n","import { PropsWithChildren } from 'react';\n\nimport style from './GhostedText.module.scss';\n\ninterface GhostedTextProps {\n multiline?: boolean;\n}\n\nexport default function GhostedText({ children, multiline }: PropsWithChildren<GhostedTextProps>) {\n return <div className={`${style.ghostedText} ${multiline ? style.multiline : ''}`}>{children}</div>;\n}\n","import { memo, useCallback, useRef } from 'react';\n\nimport { AutoTextarea } from '../../../../common/components/input/auto-textarea/AutoTextarea';\nimport useReactiveTextInput from '../../../../common/components/input/text-input/useReactiveTextInput';\n\ninterface MultiLineCellProps {\n initialValue: string;\n handleUpdate: (newValue: string) => void;\n}\n\nexport default memo(MultiLineCell);\n\nfunction MultiLineCell({ initialValue, handleUpdate }: MultiLineCellProps) {\n const ref = useRef<HTMLTextAreaElement | null>(null);\n const submitCallback = useCallback((newValue: string) => handleUpdate(newValue), [handleUpdate]);\n\n const { value, onChange, onBlur, onKeyDown } = useReactiveTextInput(initialValue, submitCallback, ref, {\n submitOnCtrlEnter: true,\n allowKeyboardNavigation: true,\n });\n\n return (\n <AutoTextarea\n inputref={ref}\n variant='ghosted'\n fluid\n rows={1}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n spellCheck={false}\n />\n );\n}\n","import { PropsWithChildren } from 'react';\n\nimport { cx } from '../../../../common/utils/styleUtils';\n\nimport style from './MutedText.module.scss';\n\ninterface MutedTextProps {\n numeric?: boolean;\n}\n\nexport default function MutedText({ numeric, children }: PropsWithChildren<MutedTextProps>) {\n return <span className={cx([style.muted, numeric && style.numeric])}>{children}</span>;\n}\n","import { memo, PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';\nimport { parseUserTime } from 'ontime-utils';\n\nimport { formatTime } from '../../../../common/utils/time';\n\nimport SingleLineCell from './SingleLineCell';\nimport TextLikeInput from './TextLikeInput';\n\ninterface TimeInputDurationProps {\n initialValue: number;\n lockedValue: boolean;\n delayed?: boolean;\n onSubmit: (value: string) => void;\n}\n\ninterface ParentFocusableInput extends HTMLInputElement {\n focusParentElement: () => void;\n}\n\nexport default memo(TimeInputDuration);\n\nfunction TimeInputDuration({\n initialValue,\n lockedValue,\n delayed,\n onSubmit,\n children,\n}: PropsWithChildren<TimeInputDurationProps>) {\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(initialValue);\n const inputRef = useRef<ParentFocusableInput>(null);\n const textRef = useRef<ParentFocusableInput>(null);\n\n // when we go into edit mode, set focus to the input\n useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n // reset value when initialValue changes, avoiding interrupting the user if we are in edit mode\n useEffect(() => {\n if (!isEditing) {\n setValue(initialValue);\n }\n }, [initialValue, isEditing]);\n\n const handleFakeFocus = () => setIsEditing(true);\n const handleFakeBlur = () => {\n setIsEditing(false);\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n };\n\n const handleUpdate = useCallback(\n (newValue: string) => {\n setIsEditing(false);\n\n // if the user sends an empty string, we want to clear the value\n if (newValue === '') {\n onSubmit(newValue);\n inputRef.current?.focusParentElement();\n return;\n }\n\n // we dont know the values in the rundown, escalate to handler\n if (newValue.startsWith('p') || newValue.startsWith('+')) {\n onSubmit(newValue);\n inputRef.current?.focusParentElement();\n return;\n }\n\n const valueInMillis = parseUserTime(newValue);\n if (valueInMillis < 0 || isNaN(valueInMillis)) {\n setValue(initialValue);\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n return;\n }\n\n // if the value is the same, we may still want to push the lock change\n if (valueInMillis === initialValue && lockedValue) {\n inputRef.current?.focusParentElement();\n return;\n }\n\n onSubmit(newValue);\n setValue(Number(newValue));\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n },\n [initialValue, lockedValue, onSubmit],\n );\n\n const timeString = formatTime(value);\n\n return isEditing ? (\n <SingleLineCell\n ref={inputRef}\n initialValue={timeString}\n allowSubmitSameValue={!lockedValue} // if the value is not locked, submitting will lock the value\n handleUpdate={handleUpdate}\n handleCancelUpdate={handleFakeBlur}\n />\n ) : (\n <TextLikeInput\n onClick={handleFakeFocus}\n onFocus={handleFakeFocus}\n muted={!lockedValue}\n offset={delayed ? 'over' : undefined}\n ref={textRef}\n >\n {children}\n </TextLikeInput>\n );\n}\n","import { useCallback } from 'react';\nimport { CellContext, ColumnDef } from '@tanstack/react-table';\nimport { CustomFields, isOntimeDelay, isOntimeEvent, TimeStrategy, URLPreset } from 'ontime-types';\nimport { millisToString } from 'ontime-utils';\n\nimport DelayIndicator from '../../../../common/components/delay-indicator/DelayIndicator';\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { formatDuration, formatTime } from '../../../../common/utils/time';\nimport { AppMode } from '../../../../ontimeConfig';\n\nimport DurationInput from './DurationInput';\nimport EditableImage from './EditableImage';\nimport FlagCell from './FlagCell';\nimport GhostedText from './GhostedText';\nimport MultiLineCell from './MultiLineCell';\nimport MutedText from './MutedText';\nimport SingleLineCell from './SingleLineCell';\nimport TimeInput from './TimeInput';\n\nfunction MakeStart({ getValue, row, table, column }: CellContext<ExtendedEntry, unknown>) {\n if (!table.options.meta) {\n return null;\n }\n\n const { showDelayedTimes, hideTableSeconds } = table.options.meta.options;\n const formatOpts = hideTableSeconds ? { format12: 'h:mm a', format24: 'HH:mm' } : undefined;\n\n const event = row.original;\n if (!isOntimeEvent(event)) {\n return <MutedText numeric>{formatTime(getValue() as number, formatOpts)}</MutedText>;\n }\n\n const { handleUpdateTimer } = table.options.meta;\n\n const update = (newValue: string) => handleUpdateTimer(row.original.id, 'timeStart', newValue);\n\n const startTime = getValue() as number;\n const isStartLocked = !event.linkStart;\n const displayTime = showDelayedTimes ? startTime + event.delay : startTime;\n const formattedTime = formatTime(displayTime, formatOpts);\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return (\n <MutedText numeric>\n {formattedTime}\n <DelayIndicator delayValue={event.delay} tooltipPrefix={millisToString(startTime)} />\n </MutedText>\n );\n }\n return (\n <TimeInput initialValue={startTime} onSubmit={update} lockedValue={isStartLocked} delayed={event.delay !== 0}>\n {formattedTime}\n <DelayIndicator delayValue={event.delay} tooltipPrefix={millisToString(startTime)} />\n </TimeInput>\n );\n}\n\nfunction MakeEnd({ getValue, row, table, column }: CellContext<ExtendedEntry, unknown>) {\n if (!table.options.meta) {\n return null;\n }\n\n const { showDelayedTimes, hideTableSeconds } = table.options.meta.options;\n const formatOpts = hideTableSeconds ? { format12: 'h:mm a', format24: 'HH:mm' } : undefined;\n\n const event = row.original;\n if (!isOntimeEvent(event)) {\n return <MutedText numeric>{formatTime(getValue() as number, formatOpts)}</MutedText>;\n }\n\n const { handleUpdateTimer } = table.options.meta;\n\n const update = (newValue: string) => handleUpdateTimer(row.original.id, 'timeEnd', newValue);\n\n const endTime = getValue() as number;\n const isEndLocked = event.timeStrategy === TimeStrategy.LockEnd;\n const displayTime = showDelayedTimes ? endTime + event.delay : endTime;\n const formattedTime = formatTime(displayTime, formatOpts);\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return (\n <MutedText numeric>\n {formattedTime}\n <DelayIndicator delayValue={event.delay} tooltipPrefix={millisToString(endTime)} />\n </MutedText>\n );\n }\n\n return (\n <TimeInput initialValue={endTime} onSubmit={update} lockedValue={isEndLocked} delayed={event.delay !== 0}>\n {formattedTime}\n <DelayIndicator delayValue={event.delay} tooltipPrefix={millisToString(endTime)} />\n </TimeInput>\n );\n}\n\nfunction MakeDuration({ getValue, row, table, column }: CellContext<ExtendedEntry, unknown>) {\n if (!table.options.meta) {\n return null;\n }\n\n const { hideTableSeconds } = table.options.meta.options;\n const event = row.original;\n if (!isOntimeEvent(event)) {\n return <MutedText numeric>{formatDuration(getValue() as number, hideTableSeconds)}</MutedText>;\n }\n\n const { handleUpdateTimer } = table.options.meta;\n\n const update = (newValue: string) => handleUpdateTimer(row.original.id, 'duration', newValue);\n\n const duration = getValue() as number;\n const isDurationLocked = event.timeStrategy === TimeStrategy.LockDuration;\n const formattedDuration = formatDuration(duration, hideTableSeconds);\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return <MutedText numeric>{formattedDuration}</MutedText>;\n }\n\n return (\n <DurationInput initialValue={duration} onSubmit={update} lockedValue={isDurationLocked}>\n {formattedDuration}\n </DurationInput>\n );\n}\n\nfunction MakeMultiLineField({ row, column, table }: CellContext<ExtendedEntry, unknown>) {\n const update = useCallback(\n (newValue: string) => {\n table.options.meta?.handleUpdate(row.index, column.id, newValue, false);\n },\n [column.id, row.index, table.options.meta],\n );\n\n // not all entries have all properties (eg groups)\n const initialValue = row.original[column.id as keyof ExtendedEntry];\n if (typeof initialValue !== 'string') {\n return null;\n }\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return <GhostedText multiline>{initialValue}</GhostedText>;\n }\n\n return <MultiLineCell initialValue={initialValue as string} handleUpdate={update} />;\n}\n\nfunction LazyImage({ row, column, table }: CellContext<ExtendedEntry, unknown>) {\n const update = useCallback(\n (newValue: string) => {\n table.options.meta?.handleUpdate(row.index, column.id, newValue, true);\n },\n [column.id, row.index, table.options.meta],\n );\n\n const event = row.original;\n if (isOntimeDelay(event)) {\n return null;\n }\n\n const canWrite = column.columnDef.meta?.canWrite;\n const initialValue = event.custom[column.id];\n return <EditableImage initialValue={initialValue} updateValue={update} readOnly={!canWrite} />;\n}\n\nfunction MakeSingleLineField({ row, column, table }: CellContext<ExtendedEntry, unknown>) {\n const update = useCallback(\n (newValue: string) => {\n table.options.meta?.handleUpdate(row.index, column.id, newValue, false);\n },\n [column.id, row.index, table.options.meta],\n );\n\n // not all entries have all properties (eg groups)\n const initialValue = row.original[column.id as keyof ExtendedEntry];\n if (typeof initialValue !== 'string') {\n return null;\n }\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return <GhostedText>{initialValue}</GhostedText>;\n }\n\n return <SingleLineCell initialValue={initialValue as string} handleUpdate={update} />;\n}\n\nfunction MakeFlagField({ row }: CellContext<ExtendedEntry, unknown>) {\n const event = row.original;\n if (!isOntimeEvent(event) || !event.flag) {\n return null;\n }\n return <FlagCell />;\n}\n\nfunction MakeCustomField({ row, column, table }: CellContext<ExtendedEntry, unknown>) {\n const update = useCallback(\n (newValue: string) => {\n table.options.meta?.handleUpdate(row.index, column.id, newValue, true);\n },\n [column.id, row.index, table.options.meta],\n );\n\n const event = row.original;\n if (isOntimeDelay(event)) {\n return null;\n }\n\n // entries will not contain the field if there is no value set by the user\n // event if there is no initial value, we still render the cell\n const initialValue = event.custom[column.id] ?? '';\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return <GhostedText multiline>{initialValue}</GhostedText>;\n }\n\n return <MultiLineCell initialValue={initialValue} handleUpdate={update} />;\n}\n\n/**\n * we cant use the createColumnHelper() because we have custom logic for rendering the cells\n * This means that the display columns: index and action are added inline by the row components\n */\nexport function makeCuesheetColumns(\n customFields: CustomFields,\n cuesheetMode: AppMode,\n preset: URLPreset | undefined,\n): ColumnDef<ExtendedEntry>[] {\n const columnsDef: ColumnDef<ExtendedEntry>[] = [];\n const modeAllowsWrite = cuesheetMode === AppMode.Edit;\n const fullRead = preset ? preset.options?.read === 'full' : true;\n const fullWrite = preset ? preset.options?.write === 'full' : true;\n const canWriteKeys = preset?.options?.write ? new Set(preset.options.write.split(',')) : new Set<string>();\n const canReadKeys = preset?.options?.read ? new Set(preset.options.read.split(',')) : new Set<string>();\n\n // helpers to check read/write for a given key\n const canRead = (key: string) => fullRead || canReadKeys.has(key);\n const canWrite = (key: string) => modeAllowsWrite && (fullWrite || canWriteKeys.has(key));\n\n if (canRead('flag')) {\n columnsDef.push({\n accessorKey: 'flag',\n id: 'flag',\n header: 'Flag',\n cell: MakeFlagField,\n size: 45,\n minSize: 45,\n meta: { canWrite: canWrite('flag') },\n });\n }\n\n if (canRead('cue')) {\n columnsDef.push({\n accessorKey: 'cue',\n id: 'cue',\n header: 'Cue',\n cell: MakeSingleLineField,\n size: 75,\n minSize: 40,\n meta: { canWrite: canWrite('cue') },\n });\n }\n\n if (canRead('timeStart')) {\n columnsDef.push({\n accessorKey: 'timeStart',\n id: 'timeStart',\n header: 'Start',\n cell: MakeStart,\n size: 75,\n minSize: 75,\n meta: { canWrite: canWrite('timeStart') },\n });\n }\n\n if (canRead('timeEnd')) {\n columnsDef.push({\n accessorKey: 'timeEnd',\n id: 'timeEnd',\n header: 'End',\n cell: MakeEnd,\n size: 75,\n minSize: 75,\n meta: { canWrite: canWrite('timeEnd') },\n });\n }\n\n if (canRead('duration')) {\n columnsDef.push({\n accessorKey: 'duration',\n id: 'duration',\n header: 'Duration',\n cell: MakeDuration,\n size: 75,\n minSize: 75,\n meta: { canWrite: canWrite('duration') },\n });\n }\n\n if (canRead('title')) {\n columnsDef.push({\n accessorKey: 'title',\n id: 'title',\n header: 'Title',\n cell: MakeSingleLineField,\n size: 250,\n minSize: 75,\n meta: { canWrite: canWrite('title') },\n });\n }\n\n if (canRead('note')) {\n columnsDef.push({\n accessorKey: 'note',\n id: 'note',\n header: 'Note',\n cell: MakeMultiLineField,\n size: 250,\n minSize: 75,\n meta: { canWrite: canWrite('note') },\n });\n }\n\n // custom fields at the end\n const customFieldKeys = Object.keys(customFields);\n\n for (let i = 0; i < customFieldKeys.length; i++) {\n const key = customFieldKeys[i];\n const permissionKey = `custom-${key}`;\n if (!canRead(permissionKey)) continue;\n columnsDef.push({\n accessorKey: key,\n id: key,\n header: customFields[key].label,\n cell: customFields[key].type === 'text' ? MakeCustomField : LazyImage,\n size: 250,\n minSize: 75,\n meta: {\n colour: customFields[key].colour,\n canWrite: canWrite(permissionKey),\n },\n });\n }\n\n return columnsDef;\n}\n","import EmptyImage from '../../../assets/images/empty.svg?react';\n\nimport style from './EmptyTableBody.module.scss';\n\ninterface EmptyTableBodyProps {\n text: string;\n}\n\nexport default function EmptyTableBody({ text }: EmptyTableBodyProps) {\n return (\n <tbody className={style.emptyContainer}>\n <tr>\n <td colSpan={99} className={style.emptyCell}>\n <EmptyImage className={style.empty} />\n {text && <span className={style.text}>{text}</span>}\n </td>\n </tr>\n </tbody>\n );\n}\n","import { CSSProperties, ReactNode } from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { Header } from '@tanstack/react-table';\n\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\n\nimport style from '../CuesheetTable.module.scss';\n\ninterface SortableCellProps {\n columnId: string;\n colSpan: number;\n injectedStyles: CSSProperties;\n children: ReactNode;\n draggable: ReactNode;\n}\n\nexport function SortableCell({ columnId, colSpan, injectedStyles, children, draggable }: SortableCellProps) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: columnId,\n });\n\n // build drag styles\n const dragStyle = {\n ...injectedStyles,\n zIndex: isDragging ? 2 : 'inherit',\n transform: CSS.Translate.toString(transform),\n transition,\n };\n\n return (\n <th ref={setNodeRef} style={dragStyle} colSpan={colSpan} tabIndex={-1}>\n <div {...attributes} {...listeners}>\n {children}\n </div>\n {draggable}\n </th>\n );\n}\n\nexport function TableCell({ colSpan, injectedStyles, children, draggable }: SortableCellProps) {\n return (\n <th style={injectedStyles} colSpan={colSpan} tabIndex={-1}>\n <div>{children}</div>\n {draggable}\n </th>\n );\n}\n\ninterface DraggableProps {\n header: Header<ExtendedEntry, unknown>;\n}\n\nexport function Draggable({ header }: DraggableProps) {\n return (\n <div\n onDoubleClick={() => header.column.resetSize()}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={style.resizer}\n />\n );\n}\n","import { CSSProperties } from 'react';\nimport { horizontalListSortingStrategy, SortableContext } from '@dnd-kit/sortable';\nimport { flexRender, HeaderGroup } from '@tanstack/react-table';\n\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { getAccessibleColour } from '../../../../common/utils/styleUtils';\nimport { AppMode } from '../../../../ontimeConfig';\nimport { usePersistedCuesheetOptions } from '../../cuesheet.options';\n\nimport { Draggable, SortableCell, TableCell } from './SortableCell';\n\nimport style from '../CuesheetTable.module.scss';\n\ninterface CuesheetHeaderProps {\n headerGroup: HeaderGroup<ExtendedEntry>;\n cuesheetMode: AppMode;\n}\n\nexport function SortableCuesheetHeader({ headerGroup, cuesheetMode }: CuesheetHeaderProps) {\n const hideIndexColumn = usePersistedCuesheetOptions((state) => state.hideIndexColumn);\n\n return (\n <tr key={headerGroup.id}>\n {cuesheetMode === AppMode.Edit && <th className={style.actionColumn} tabIndex={-1} />}\n {!hideIndexColumn && (\n <th className={style.indexColumn} tabIndex={-1}>\n #\n </th>\n )}\n <SortableContext key={headerGroup.id} items={headerGroup.headers} strategy={horizontalListSortingStrategy}>\n {headerGroup.headers.map((header) => {\n const customBackground = header.column.columnDef.meta?.colour;\n const canWrite = header.column.columnDef.meta?.canWrite;\n\n const customStyles: CSSProperties = {\n opacity: canWrite ? 1 : 0.6,\n };\n if (customBackground) {\n const customColour = getAccessibleColour(customBackground);\n customStyles.backgroundColor = customColour.backgroundColor;\n customStyles.color = customColour.color;\n }\n\n return (\n <SortableCell\n key={header.column.columnDef.id}\n columnId={header.column.id}\n colSpan={header.colSpan}\n injectedStyles={{ width: `calc(var(--header-${header?.id}-size) * 1px)`, ...customStyles }}\n draggable={<Draggable header={header} />}\n >\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </SortableCell>\n );\n })}\n </SortableContext>\n </tr>\n );\n}\n\nexport function CuesheetHeader({ headerGroup, cuesheetMode }: CuesheetHeaderProps) {\n const hideIndexColumn = usePersistedCuesheetOptions((state) => state.hideIndexColumn);\n\n return (\n <tr key={headerGroup.id}>\n {cuesheetMode === AppMode.Edit && <th className={style.actionColumn} tabIndex={-1} />}\n {!hideIndexColumn && (\n <th className={style.indexColumn} tabIndex={-1}>\n #\n </th>\n )}\n {headerGroup.headers.map((header) => {\n const customBackground = header.column.columnDef.meta?.colour;\n const canWrite = header.column.columnDef.meta?.canWrite;\n\n const customStyles: CSSProperties = {\n opacity: canWrite ? 1 : 0.6,\n };\n if (customBackground) {\n const customColour = getAccessibleColour(customBackground);\n customStyles.backgroundColor = customColour.backgroundColor;\n customStyles.color = customColour.color;\n }\n\n return (\n <TableCell\n key={header.column.columnDef.id}\n columnId={header.column.id}\n colSpan={header.colSpan}\n injectedStyles={{ width: `calc(var(--header-${header?.id}-size) * 1px)`, ...customStyles }}\n draggable={<Draggable header={header} />}\n >\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableCell>\n );\n })}\n </tr>\n );\n}\n","import { CSSProperties, memo } from 'react';\n\nimport { millisToDelayString } from '../../../../common/utils/dateConfig';\nimport { usePersistedCuesheetOptions } from '../../cuesheet.options';\n\nimport style from './DelayRow.module.scss';\n\ninterface DelayRowProps {\n duration: number;\n injectedStyles?: CSSProperties;\n}\n\nfunction DelayRow({ duration, injectedStyles, ...virtuosoProps }: DelayRowProps) {\n const hideDelays = usePersistedCuesheetOptions((state) => state.hideDelays);\n\n if (hideDelays || duration === 0) {\n return null;\n }\n\n const delayTime = millisToDelayString(duration, 'expanded');\n\n return (\n <tr className={style.delayRow} data-testid='cuesheet-delay' style={injectedStyles} {...virtuosoProps}>\n <td tabIndex={0}>{delayTime}</td>\n </tr>\n );\n}\n\nexport default memo(DelayRow);\n","import { EntryId, SupportedEntry } from 'ontime-types';\nimport { create } from 'zustand';\n\ntype Anchor = { x: number; y: number };\n\ntype OpenMenu = {\n isOpen: true;\n entryId: EntryId;\n entryType: SupportedEntry;\n entryIndex: number;\n parentId: EntryId | null;\n flag: boolean | null;\n};\n\ntype ClosedMenu = {\n isOpen: false;\n entryId: null;\n entryType: null;\n entryIndex: null;\n parentId: null;\n flag: null;\n};\n\ntype CuesheetTableMenuStore = (OpenMenu | ClosedMenu) & {\n position: Anchor;\n openMenu: (\n position: Anchor,\n entryId: EntryId,\n entryType: SupportedEntry,\n entryIndex: number,\n parentId: EntryId | null,\n flag: boolean | null,\n ) => void;\n closeMenu: () => void;\n};\n\nexport const useCuesheetTableMenu = create<CuesheetTableMenuStore>((set) => ({\n isOpen: false,\n entryId: null,\n entryType: null,\n entryIndex: null,\n parentId: null,\n position: { x: 0, y: 0 },\n flag: null,\n openMenu: (\n position: Anchor,\n entryId: EntryId,\n entryType: SupportedEntry,\n entryIndex: number,\n parentId: EntryId | null,\n flag: null | boolean,\n ) => set({ isOpen: true, position, entryId, entryType, entryIndex, parentId, flag }),\n closeMenu: () => set({ isOpen: false }),\n}));\n","import { CSSProperties, useMemo } from 'react';\nimport { IoEllipsisHorizontal } from 'react-icons/io5';\nimport { flexRender, Table } from '@tanstack/react-table';\nimport { EntryId, OntimeEntry, RGBColour, SupportedEntry } from 'ontime-types';\nimport { colourToHex, cssOrHexToColour } from 'ontime-utils';\n\nimport IconButton from '../../../../common/components/buttons/IconButton';\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { cx, getAccessibleColour } from '../../../../common/utils/styleUtils';\nimport { AppMode } from '../../../../ontimeConfig';\nimport { useCuesheetTableMenu } from '../cuesheet-table-menu/useCuesheetTableMenu';\n\nimport style from './EventRow.module.scss';\n\ninterface EventRowProps {\n rowId: string;\n id: EntryId;\n eventIndex: number;\n colour: string;\n isFirstAfterGroup: boolean;\n isLoaded: boolean;\n isPast: boolean;\n groupColour: string | undefined;\n flag: boolean;\n skip: boolean;\n parent: EntryId | null;\n rowIndex: number;\n table: Table<ExtendedEntry<OntimeEntry>>;\n injectedStyles?: CSSProperties;\n}\n\nexport default function EventRow({\n rowId,\n id,\n eventIndex,\n colour,\n isFirstAfterGroup,\n isLoaded,\n isPast,\n groupColour,\n flag,\n skip,\n parent,\n rowIndex,\n table,\n injectedStyles,\n ...virtuosoProps\n}: EventRowProps) {\n const { cuesheetMode, hideIndexColumn } = table.options.meta?.options ?? {\n cuesheetMode: AppMode.Edit,\n hideIndexColumn: false,\n };\n\n const openMenu = useCuesheetTableMenu((store) => store.openMenu);\n\n const { color, backgroundColor } = getAccessibleColour(colour);\n const tmpColour = cssOrHexToColour(color) as RGBColour; // we know this to be a correct colour\n const mutedText = colourToHex({ ...tmpColour, alpha: tmpColour.alpha * 0.8 });\n\n const rowBgColour: string | undefined = useMemo(() => {\n if (isLoaded) {\n return '#087A27'; // $active-green\n } else if (colour) {\n // the colour is user defined and might be invalid\n const accessibleBackgroundColor = cssOrHexToColour(getAccessibleColour(colour).backgroundColor);\n if (accessibleBackgroundColor !== null) {\n return colourToHex({\n ...accessibleBackgroundColor,\n alpha: accessibleBackgroundColor.alpha * 0.25,\n });\n }\n }\n return;\n }, [colour, isLoaded]);\n\n return (\n <tr\n id={rowId}\n className={cx([\n style.eventRow,\n skip && style.skip,\n isFirstAfterGroup && style.firstAfterGroup,\n parent && style.hasParent,\n ])}\n style={{\n ...injectedStyles,\n opacity: `${isPast ? '0.2' : '1'}`,\n '--user-bg': groupColour ?? 'transparent',\n }}\n data-testid='cuesheet-event'\n {...virtuosoProps}\n >\n {cuesheetMode === AppMode.Edit && (\n <td className={style.actionColumn} tabIndex={-1} role='cell'>\n <IconButton\n aria-label='Options'\n variant='ghosted-white'\n size='small'\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const yPos = 8 + rect.y + rect.height / 2;\n openMenu({ x: rect.x, y: yPos }, id, SupportedEntry.Event, rowIndex, parent, flag);\n }}\n >\n <IoEllipsisHorizontal />\n </IconButton>\n </td>\n )}\n {!hideIndexColumn && (\n <td className={style.indexColumn} style={{ backgroundColor, color: mutedText }} tabIndex={-1} role='cell'>\n {eventIndex}\n </td>\n )}\n {table\n .getRow(rowId)\n .getVisibleCells()\n .map((cell) => {\n return (\n <td\n key={cell.id}\n style={{\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n backgroundColor: rowBgColour,\n }}\n tabIndex={-1}\n role='cell'\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n );\n })}\n </tr>\n );\n}\n","import { CSSProperties } from 'react';\nimport { IoEllipsisHorizontal } from 'react-icons/io5';\nimport { flexRender, Table } from '@tanstack/react-table';\nimport { EntryId, SupportedEntry } from 'ontime-types';\n\nimport IconButton from '../../../../common/components/buttons/IconButton';\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { AppMode } from '../../../../ontimeConfig';\nimport { useCuesheetTableMenu } from '../cuesheet-table-menu/useCuesheetTableMenu';\n\nimport style from './GroupRow.module.scss';\n\ninterface GroupRowProps {\n groupId: EntryId;\n colour: string;\n rowId: string;\n rowIndex: number;\n table: Table<ExtendedEntry>;\n injectedStyles?: CSSProperties;\n}\n\nexport default function GroupRow({\n groupId,\n colour,\n rowId,\n rowIndex,\n table,\n injectedStyles,\n ...virtuosoProps\n}: GroupRowProps) {\n const { cuesheetMode, hideIndexColumn } = table.options.meta?.options ?? {\n cuesheetMode: AppMode.Edit,\n hideIndexColumn: false,\n };\n\n const openMenu = useCuesheetTableMenu((store) => store.openMenu);\n\n return (\n <tr\n className={style.groupRow}\n style={{ ...injectedStyles, '--user-bg': colour }}\n data-testid='cuesheet-group'\n {...virtuosoProps}\n >\n {cuesheetMode === AppMode.Edit && (\n <td className={style.actionColumn} tabIndex={-1} role='cell'>\n <IconButton\n aria-label='Options'\n variant='ghosted-white'\n size='small'\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const yPos = 8 + rect.y + rect.height / 2;\n openMenu({ x: rect.x, y: yPos }, groupId, SupportedEntry.Group, rowIndex, null, null);\n }}\n >\n <IoEllipsisHorizontal />\n </IconButton>\n </td>\n )}\n {!hideIndexColumn && <td className={style.indexColumn} tabIndex={-1} role='cell' />}\n {table\n .getRow(rowId)\n .getVisibleCells()\n .map((cell) => {\n return (\n <td\n key={cell.id}\n tabIndex={-1}\n style={{\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n }}\n role='cell'\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n );\n })}\n </tr>\n );\n}\n","import { CSSProperties } from 'react';\nimport { IoEllipsisHorizontal } from 'react-icons/io5';\nimport { flexRender, Table } from '@tanstack/react-table';\nimport { EntryId, SupportedEntry } from 'ontime-types';\nimport { colourToHex, cssOrHexToColour } from 'ontime-utils';\n\nimport IconButton from '../../../../common/components/buttons/IconButton';\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { cx, enDash, getAccessibleColour } from '../../../../common/utils/styleUtils';\nimport { AppMode } from '../../../../ontimeConfig';\nimport { useCuesheetTableMenu } from '../cuesheet-table-menu/useCuesheetTableMenu';\n\nimport style from './MilestoneRow.module.scss';\n\ninterface MilestoneRowProps {\n entryId: EntryId;\n isPast: boolean;\n parentBgColour?: string;\n parentId: EntryId | null;\n colour: string;\n rowId: string;\n rowIndex: number;\n table: Table<ExtendedEntry>;\n injectedStyles?: CSSProperties;\n}\n\nexport default function MilestoneRow({\n entryId,\n isPast,\n parentBgColour,\n parentId,\n colour,\n rowId,\n rowIndex,\n table,\n injectedStyles,\n ...virtuosoProps\n}: MilestoneRowProps) {\n const { cuesheetMode, hideIndexColumn } = table.options.meta?.options ?? {\n cuesheetMode: AppMode.Edit,\n hideIndexColumn: false,\n };\n\n const openMenu = useCuesheetTableMenu((store) => store.openMenu);\n\n let rowBgColour: string | undefined;\n if (colour) {\n // the colour is user defined and might be invalid\n const accessibleBackgroundColor = cssOrHexToColour(getAccessibleColour(colour).backgroundColor);\n if (accessibleBackgroundColor !== null) {\n rowBgColour = colourToHex({\n ...accessibleBackgroundColor,\n alpha: accessibleBackgroundColor.alpha * 0.25,\n });\n }\n }\n\n return (\n <tr\n className={cx([style.milestoneRow, Boolean(parentBgColour) && style.hasParent])}\n style={{\n ...injectedStyles,\n opacity: `${isPast ? '0.2' : '1'}`,\n '--user-bg': parentBgColour ?? 'transparent',\n }}\n data-testid='cuesheet-milestone'\n {...virtuosoProps}\n >\n {cuesheetMode === AppMode.Edit && (\n <td className={style.actionColumn} tabIndex={-1} role='cell'>\n <IconButton\n aria-label='Options'\n variant='ghosted-white'\n size='small'\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const yPos = 8 + rect.y + rect.height / 2;\n openMenu({ x: rect.x, y: yPos }, entryId, SupportedEntry.Milestone, rowIndex, parentId, null);\n }}\n >\n <IoEllipsisHorizontal />\n </IconButton>\n </td>\n )}\n {!hideIndexColumn && (\n <td className={style.indexColumn} tabIndex={-1} role='cell'>\n {enDash}\n </td>\n )}\n {table\n .getRow(rowId)\n .getVisibleCells()\n .map((cell) => {\n const canRender =\n cell.column.id !== 'duration' && cell.column.id !== 'timeStart' && cell.column.id !== 'timeEnd';\n return (\n <td\n key={cell.id}\n style={{\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n backgroundColor: rowBgColour,\n opacity: canRender ? 1 : 0.4,\n }}\n tabIndex={-1}\n >\n {canRender && flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n );\n })}\n </tr>\n );\n}\n","import { create } from 'zustand';\n\ninterface CuesheetPermissionsStore {\n canChangeMode: boolean;\n canCreateEntries: boolean;\n canEditEntries: boolean;\n canFlag: boolean;\n canShare: boolean;\n setPermissions: (permissions: Omit<CuesheetPermissionsStore, 'setPermissions'>) => void;\n}\n\nexport const useCuesheetPermissions = create<CuesheetPermissionsStore>((set) => ({\n canChangeMode: false,\n canCreateEntries: false,\n canEditEntries: false,\n canFlag: false,\n canShare: false,\n setPermissions(permissions) {\n set({\n canChangeMode: permissions.canChangeMode,\n canFlag: permissions.canFlag,\n canCreateEntries: permissions.canCreateEntries,\n canEditEntries: permissions.canEditEntries,\n canShare: permissions.canShare,\n });\n },\n}));\n","import { memo } from 'react';\nimport { IoAdd, IoArrowDown, IoArrowUp, IoDuplicateOutline, IoOptions, IoTrash } from 'react-icons/io5';\nimport { SupportedEntry } from 'ontime-types';\n\nimport { PositionedDropdownMenu } from '../../../../common/components/dropdown-menu/DropdownMenu';\nimport { useEntryActions } from '../../../../common/hooks/useEntryAction';\nimport { useCuesheetEditModal } from '../../cuesheet-edit-modal/useCuesheetEditModal';\nimport { useCuesheetPermissions } from '../../useTablePermissions';\n\nimport { useCuesheetTableMenu } from './useCuesheetTableMenu';\n\nexport default memo(CuesheetTableMenu);\n\nfunction CuesheetTableMenu() {\n const { isOpen, entryId, entryIndex, parentId, flag, position, closeMenu } = useCuesheetTableMenu();\n const { addEntry, clone, deleteEntry, move, updateEntry } = useEntryActions();\n const showModal = useCuesheetEditModal((state) => state.setEditableEntry);\n const permissions = useCuesheetPermissions();\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <PositionedDropdownMenu\n isOpen\n onClose={closeMenu}\n items={[\n {\n type: 'item',\n label: 'Edit...',\n onClick: () => showModal(entryId),\n icon: IoOptions,\n disabled: !permissions.canEditEntries,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: flag ? 'Remove flag' : 'Add flag',\n onClick: () => updateEntry({ id: entryId, flag: !flag }),\n icon: IoDuplicateOutline,\n disabled: flag === null || !permissions.canFlag,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Add event above',\n onClick: () => addEntry({ type: SupportedEntry.Event, parent: parentId }, { before: entryId }),\n icon: IoAdd,\n disabled: !permissions.canCreateEntries,\n },\n {\n type: 'item',\n label: 'Add event below',\n onClick: () => addEntry({ type: SupportedEntry.Event, parent: parentId }, { after: entryId }),\n icon: IoAdd,\n disabled: !permissions.canCreateEntries,\n },\n {\n type: 'item',\n label: 'Clone event',\n onClick: () => clone(entryId),\n icon: IoDuplicateOutline,\n disabled: !permissions.canCreateEntries,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Move up',\n onClick: () => move(entryId, 'up'),\n icon: IoArrowUp,\n disabled: entryIndex < 1 || !permissions.canEditEntries,\n },\n {\n type: 'item',\n label: 'Move down',\n onClick: () => move(entryId, 'down'),\n icon: IoArrowDown,\n disabled: !permissions.canEditEntries,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Delete',\n onClick: () => deleteEntry([entryId]),\n icon: IoTrash,\n disabled: !permissions.canEditEntries,\n },\n ]}\n position={position}\n />\n );\n}\n","import { IconBaseProps } from 'react-icons';\nimport { IoLink } from 'react-icons/io5';\n\nexport default function RotatedLink(linkProps: IconBaseProps) {\n return <IoLink style={{ transform: 'rotate(-45deg)' }} {...linkProps} />;\n}\n","import { Toolbar } from '@base-ui-components/react/toolbar';\nimport { useDisclosure } from '@mantine/hooks';\nimport { OntimeView } from 'ontime-types';\n\nimport Button from '../../../../common/components/buttons/Button';\nimport RotatedLink from '../../../../common/components/icons/RotatedLink';\nimport Modal from '../../../../common/components/modal/Modal';\nimport useInfo from '../../../../common/hooks-query/useInfo';\nimport useUrlPresets from '../../../../common/hooks-query/useUrlPresets';\nimport GenerateLinkFormExport from '../../../../features/sharing/GenerateLinkFormExport';\n\nfunction CuesheetShareModal() {\n const { data: infoData } = useInfo();\n const { data: urlPresetData } = useUrlPresets();\n const [isOpen, handler] = useDisclosure();\n\n // Don't render the modal content until it's open and data is loaded\n const showModalContent = isOpen && infoData && urlPresetData;\n\n return (\n <>\n <Toolbar.Button onClick={handler.open} render={<Button />}>\n <RotatedLink />\n Share...\n </Toolbar.Button>\n <Modal\n isOpen={isOpen}\n onClose={handler.close}\n title='Share cuesheet view'\n showBackdrop\n showCloseButton\n bodyElements={\n showModalContent ? (\n <GenerateLinkFormExport lockedPath={{ value: OntimeView.Cuesheet, label: 'Cuesheet' }} />\n ) : null\n }\n />\n </>\n );\n}\n\nexport default CuesheetShareModal;\n","import { ReactNode, use } from 'react';\nimport { IoChevronDown, IoOptions, IoSettingsOutline } from 'react-icons/io5';\nimport { Popover } from '@base-ui-components/react/popover';\nimport { Toggle } from '@base-ui-components/react/toggle';\nimport { ToggleGroup } from '@base-ui-components/react/toggle-group';\nimport { Toolbar } from '@base-ui-components/react/toolbar';\nimport { useSessionStorage } from '@mantine/hooks';\nimport type { Column } from '@tanstack/react-table';\n\nimport Button from '../../../../common/components/buttons/Button';\nimport Checkbox from '../../../../common/components/checkbox/Checkbox';\nimport * as Editor from '../../../../common/components/editor-utils/EditorUtils';\nimport PopoverContents from '../../../../common/components/popover/Popover';\nimport { PresetContext } from '../../../../common/context/PresetContext';\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { cx } from '../../../../common/utils/styleUtils';\nimport { AppMode, sessionKeys } from '../../../../ontimeConfig';\nimport { usePersistedCuesheetOptions } from '../../cuesheet.options';\nimport { useCuesheetPermissions } from '../../useTablePermissions';\n\nimport CuesheetShareModal from './CuesheetShareModal';\n\nimport style from './CuesheetTableSettings.module.scss';\n\ninterface CuesheetTableSettingsProps {\n columns: Column<ExtendedEntry, unknown>[];\n handleResetResizing: () => void;\n handleResetReordering: () => void;\n handleClearToggles: () => void;\n}\n\nexport default function CuesheetTableSettings({\n columns,\n handleResetResizing,\n handleResetReordering,\n handleClearToggles,\n}: CuesheetTableSettingsProps) {\n const canShare = useCuesheetPermissions((state) => state.canShare);\n const preset = use(PresetContext);\n\n const [cuesheetMode, setCuesheetMode] = useSessionStorage({\n key: preset ? `${preset.alias}${sessionKeys.cuesheetMode}` : sessionKeys.cuesheetMode,\n defaultValue: preset ? AppMode.Run : AppMode.Edit,\n });\n\n const toggleCuesheetMode = (mode: AppMode[]) => {\n // we need to stop user from deselecting a mode\n const newValue = mode.at(0);\n if (!newValue) return;\n setCuesheetMode(newValue);\n };\n\n return (\n <Toolbar.Root className={style.tableSettings}>\n <ViewSettings />\n <ColumnSettings\n columns={columns}\n handleResetResizing={handleResetResizing}\n handleResetReordering={handleResetReordering}\n handleClearToggles={handleClearToggles}\n />\n <ToggleGroup value={[cuesheetMode]} onValueChange={toggleCuesheetMode} className={cx([style.group, style.apart])}>\n <Toolbar.Button render={<Toggle />} value={AppMode.Run} className={style.radioButton}>\n Run\n </Toolbar.Button>\n <Toolbar.Button render={<Toggle />} value={AppMode.Edit} className={style.radioButton}>\n Edit\n </Toolbar.Button>\n </ToggleGroup>\n\n {canShare && (\n <>\n <Editor.Separator orientation='vertical' />\n <CuesheetShareModal />\n </>\n )}\n </Toolbar.Root>\n );\n}\n\nfunction ViewSettings() {\n const options = usePersistedCuesheetOptions();\n\n return (\n <Popover.Root>\n <Popover.Trigger\n render={\n <Toolbar.Button\n render={\n <Button variant='ghosted-white'>\n <IoSettingsOutline /> Settings\n <IoChevronDown />\n </Button>\n }\n />\n }\n />\n\n <PopoverContents align='start' className={style.inline}>\n <div className={style.column}>\n <Editor.Label className={style.sectionTitle}>Element visibility</Editor.Label>\n <Editor.Label className={style.option}>\n <Checkbox\n defaultChecked={options.hideTableSeconds}\n onCheckedChange={(checked) => options.setOption('hideTableSeconds', checked)}\n />\n Hide seconds in table\n </Editor.Label>\n <Editor.Label className={style.option}>\n <Checkbox\n defaultChecked={options.hideIndexColumn}\n onCheckedChange={(checked) => options.setOption('hideIndexColumn', checked)}\n />\n Hide index column\n </Editor.Label>\n </div>\n\n <div className={style.column}>\n <Editor.Label className={style.sectionTitle}>Table Behaviour</Editor.Label>\n <Editor.Label className={style.option}>\n <Checkbox\n defaultChecked={options.showDelayedTimes}\n onCheckedChange={(checked) => options.setOption('showDelayedTimes', checked)}\n />\n Show delayed times\n </Editor.Label>\n <Editor.Label className={style.option}>\n <Checkbox\n defaultChecked={options.hideDelays}\n onCheckedChange={(checked) => options.setOption('hideDelays', checked)}\n />\n Hide delay entries\n </Editor.Label>\n </div>\n </PopoverContents>\n </Popover.Root>\n );\n}\n\nfunction ColumnSettings({\n columns,\n handleResetResizing,\n handleResetReordering,\n handleClearToggles,\n}: CuesheetTableSettingsProps) {\n return (\n <Popover.Root>\n <Popover.Trigger\n render={\n <Toolbar.Button\n render={\n <Button variant='ghosted-white'>\n <IoOptions /> View\n <IoChevronDown />\n </Button>\n }\n />\n }\n />\n <PopoverContents align='start' className={style.inline}>\n <div className={style.column}>\n <Editor.Label className={style.sectionTitle}>Column visibility</Editor.Label>\n {columns.map((column) => {\n const columnHeader = column.columnDef.header;\n const visible = column.getIsVisible();\n return (\n <Editor.Label key={`${column.id}-${visible}`} className={style.option}>\n <Checkbox defaultChecked={visible} onCheckedChange={column.toggleVisibility} />\n {columnHeader as ReactNode}\n </Editor.Label>\n );\n })}\n </div>\n <Editor.Separator orientation='vertical' />\n <div className={style.column}>\n <Editor.Label className={style.sectionTitle}>Reset Options</Editor.Label>\n <Button size='small' fluid onClick={handleClearToggles}>\n Show All\n </Button>\n <Button size='small' fluid onClick={handleResetResizing}>\n Reset Resizing\n </Button>\n <Button size='small' fluid onClick={handleResetReordering}>\n Reset Reordering\n </Button>\n </div>\n </PopoverContents>\n </Popover.Root>\n );\n}\n","import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { TableVirtuoso, TableVirtuosoHandle } from 'react-virtuoso';\nimport { useTableNav } from '@table-nav/react';\nimport { ColumnDef, getCoreRowModel, useReactTable } from '@tanstack/react-table';\nimport { isOntimeDelay, isOntimeGroup, isOntimeMilestone, OntimeEntry, TimeField } from 'ontime-types';\n\nimport EmptyPage from '../../../common/components/state/EmptyPage';\nimport EmptyTableBody from '../../../common/components/state/EmptyTableBody';\nimport { useEntryActions } from '../../../common/hooks/useEntryAction';\nimport { useSelectedEventId } from '../../../common/hooks/useSocket';\nimport { useFlatRundownWithMetadata } from '../../../common/hooks-query/useRundown';\nimport type { ExtendedEntry } from '../../../common/utils/rundownMetadata';\nimport { AppMode } from '../../../ontimeConfig';\nimport { usePersistedCuesheetOptions } from '../cuesheet.options';\n\nimport { CuesheetHeader, SortableCuesheetHeader } from './cuesheet-table-elements/CuesheetHeader';\nimport DelayRow from './cuesheet-table-elements/DelayRow';\nimport EventRow from './cuesheet-table-elements/EventRow';\nimport GroupRow from './cuesheet-table-elements/GroupRow';\nimport MilestoneRow from './cuesheet-table-elements/MilestoneRow';\nimport CuesheetTableMenu from './cuesheet-table-menu/CuesheetTableMenu';\nimport CuesheetTableSettings from './cuesheet-table-settings/CuesheetTableSettings';\nimport { useColumnOrder, useColumnSizes, useColumnVisibility } from './useColumnManager';\n\nimport style from './CuesheetTable.module.scss';\n\ninterface CuesheetTableProps {\n columns: ColumnDef<ExtendedEntry>[];\n cuesheetMode: AppMode;\n}\n\nexport default function CuesheetTable({ columns, cuesheetMode }: CuesheetTableProps) {\n const { data, status } = useFlatRundownWithMetadata();\n const { updateEntry, updateTimer } = useEntryActions();\n const showDelayedTimes = usePersistedCuesheetOptions((state) => state.showDelayedTimes);\n const hideTableSeconds = usePersistedCuesheetOptions((state) => state.hideTableSeconds);\n const hideIndexColumn = usePersistedCuesheetOptions((state) => state.hideIndexColumn);\n\n const { selectedEventId } = useSelectedEventId();\n\n const virtuosoRef = useRef<TableVirtuosoHandle | null>(null);\n const { listeners } = useTableNav();\n\n const meta = useMemo(\n () => ({\n handleUpdate: (rowIndex: number, accessor: string, payload: string, isCustom = false) => {\n // check if value is the same\n const event = data[rowIndex];\n\n if (!event) {\n return;\n }\n\n // skip if there is no value change\n const key = accessor as keyof OntimeEntry;\n const previousValue = event[key];\n if (previousValue === payload) {\n return;\n }\n\n if (isCustom) {\n updateEntry({ id: event.id, custom: { [accessor]: payload } });\n return;\n }\n\n updateEntry({ id: event.id, [accessor]: payload });\n },\n handleUpdateTimer: (eventId: string, field: TimeField, payload: string) => {\n // the timer element already contains logic to avoid submitting a unchanged value\n updateTimer(eventId, field, payload, true);\n },\n options: {\n showDelayedTimes,\n hideTableSeconds,\n cuesheetMode,\n hideIndexColumn,\n },\n }),\n [cuesheetMode, data, hideIndexColumn, hideTableSeconds, showDelayedTimes, updateEntry, updateTimer],\n );\n\n const { columnOrder, resetColumnOrder } = useColumnOrder(columns);\n const { columnSizing, setColumnSizing } = useColumnSizes();\n const { columnVisibility, setColumnVisibility } = useColumnVisibility();\n\n const table = useReactTable({\n data,\n columns,\n columnResizeMode: 'onChange',\n state: {\n columnOrder,\n columnVisibility,\n columnSizing,\n },\n onColumnVisibilityChange: setColumnVisibility,\n onColumnSizingChange: setColumnSizing,\n getCoreRowModel: getCoreRowModel(),\n meta,\n });\n\n const setAllVisible = useCallback(() => {\n table.toggleAllColumnsVisible(true);\n }, [table]);\n\n const resetColumnResizing = useCallback(() => {\n setColumnSizing({});\n }, [setColumnSizing]);\n\n // in run mode, we follow the selected row\n useEffect(() => {\n if (cuesheetMode === AppMode.Edit || virtuosoRef.current === null || !selectedEventId) {\n return;\n }\n\n const eventIndex = data.findIndex((event) => event.id === selectedEventId);\n virtuosoRef.current.scrollToIndex({ index: eventIndex, behavior: 'smooth' });\n }, [cuesheetMode, data, selectedEventId]);\n\n /**\n * To improve performance on resizing, we memoise the column sizes\n * and pass them as CSS variables to the table container.\n */\n const columnSizeVars = useMemo(() => {\n const headers = table.getFlatHeaders();\n const colSizes: { [key: string]: number } = {};\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i];\n if (!header) continue;\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n return colSizes;\n // eslint-disable-next-line react-compiler/react-compiler -- unfortunately this is what we need\n // eslint-disable-next-line react-hooks/exhaustive-deps -- this works well and follows documentation\n }, [table.getState().columnSizingInfo, table.getState().columnSizing]);\n\n const allLeafColumns = table.getAllLeafColumns();\n const { rows } = table.getRowModel();\n\n const isLoading = !data || status === 'pending';\n\n if (isLoading) {\n return <EmptyPage text='Loading...' />;\n }\n\n return (\n <>\n <CuesheetTableSettings\n columns={allLeafColumns}\n handleResetResizing={resetColumnResizing}\n handleResetReordering={resetColumnOrder}\n handleClearToggles={setAllVisible}\n />\n <TableVirtuoso\n ref={virtuosoRef}\n data={data}\n increaseViewportBy={{ top: 100, bottom: 200 }}\n components={{\n EmptyPlaceholder: () => <EmptyTableBody text='No data in rundown' />,\n Table: ({ style: injectedStyles, ...virtuosoProps }) => {\n return (\n <table\n className={style.cuesheet}\n id='cuesheet'\n style={{ ...injectedStyles, ...columnSizeVars }}\n {...listeners}\n {...virtuosoProps}\n />\n );\n },\n TableRow: ({ item: _item, style: injectedStyles, ...virtuosoProps }) => {\n // eslint-disable-next-line react/destructuring-assignment\n const rowIndex = virtuosoProps['data-index'];\n const row = rows[rowIndex];\n const key = row.original.id;\n const entry = row.original;\n\n if (isOntimeGroup(entry)) {\n return (\n <GroupRow\n key={key}\n groupId={entry.id}\n colour={entry.colour}\n rowId={row.id}\n rowIndex={row.index}\n table={table}\n injectedStyles={injectedStyles}\n {...virtuosoProps}\n />\n );\n }\n\n if (isOntimeDelay(entry)) {\n return (\n <DelayRow key={key} duration={entry.duration} injectedStyles={injectedStyles} {...virtuosoProps} />\n );\n }\n\n if (isOntimeMilestone(entry)) {\n return (\n <MilestoneRow\n key={key}\n entryId={entry.id}\n isPast={entry.isPast}\n parentBgColour={entry.groupColour}\n parentId={entry.parent}\n colour={entry.colour}\n rowId={row.id}\n rowIndex={rowIndex}\n table={table}\n injectedStyles={injectedStyles}\n {...virtuosoProps}\n />\n );\n }\n\n return (\n <EventRow\n key={row.id}\n id={entry.id}\n eventIndex={entry.eventIndex}\n colour={entry.colour}\n isFirstAfterGroup={entry.isFirstAfterGroup}\n isLoaded={entry.isLoaded}\n isPast={entry.isPast}\n groupColour={entry.groupColour}\n flag={entry.flag}\n skip={entry.skip}\n parent={entry.parent}\n rowId={row.id}\n rowIndex={rowIndex}\n table={table}\n injectedStyles={injectedStyles}\n {...virtuosoProps}\n />\n );\n },\n TableHead: (virtuosoProps) => <thead className={style.tableHeader} {...virtuosoProps} />,\n }}\n fixedHeaderContent={() => {\n return table.getHeaderGroups().map((headerGroup) => {\n const HeaderComponent = table.getState().columnSizingInfo.isResizingColumn\n ? CuesheetHeader\n : SortableCuesheetHeader;\n\n // if the table is being resized, we render non-sortable headers to avoid performance issues\n return <HeaderComponent key={headerGroup.id} cuesheetMode={cuesheetMode} headerGroup={headerGroup} />;\n });\n }}\n />\n\n <CuesheetTableMenu />\n </>\n );\n}\n","import { memo, use, useEffect, useMemo } from 'react';\nimport { useSessionStorage } from '@mantine/hooks';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport { sessionScope } from '../../externals';\nimport { AppMode, sessionKeys } from '../../ontimeConfig';\n\nimport CuesheetDnd from './cuesheet-dnd/CuesheetDnd';\nimport { makeCuesheetColumns } from './cuesheet-table/cuesheet-table-elements/cuesheetColsFactory';\nimport CuesheetTable from './cuesheet-table/CuesheetTable';\nimport { useCuesheetPermissions } from './useTablePermissions';\n\nexport default memo(CuesheetTableWrapper);\nfunction CuesheetTableWrapper() {\n const { data: customFields, status: customFieldStatus } = useCustomFields();\n const setPermissions = useCuesheetPermissions((state) => state.setPermissions);\n const preset = use(PresetContext);\n\n // set permissions based on preset\n useEffect(() => {\n if (preset) {\n const fullWrite = preset.options?.write === 'full';\n setPermissions({\n canChangeMode: preset.options?.write !== '-',\n canCreateEntries: fullWrite,\n canEditEntries: fullWrite,\n canFlag: fullWrite || Boolean(preset.options?.write.includes('flag')),\n canShare: false, // TODO: should be sessionScope === 'rw' when we have granular scopes\n });\n } else {\n setPermissions({\n canChangeMode: true,\n canCreateEntries: true,\n canEditEntries: true,\n canFlag: true,\n canShare: sessionScope === 'rw',\n });\n }\n }, [preset, setPermissions]);\n\n const [cuesheetMode] = useSessionStorage({\n key: preset ? `${preset.alias}${sessionKeys.cuesheetMode}` : sessionKeys.cuesheetMode,\n defaultValue: preset ? AppMode.Run : AppMode.Edit,\n });\n\n const columns = useMemo(\n () => makeCuesheetColumns(customFields, cuesheetMode, preset),\n [customFields, cuesheetMode, preset],\n );\n\n const isLoading = !customFields || customFieldStatus === 'pending';\n\n return (\n <CuesheetDnd columns={columns}>\n {isLoading ? <EmptyPage text='Loading...' /> : <CuesheetTable columns={columns} cuesheetMode={cuesheetMode} />}\n </CuesheetDnd>\n );\n}\n","import { IoApps } from 'react-icons/io5';\nimport { useDisclosure } from '@mantine/hooks';\n\nimport IconButton from '../../common/components/buttons/IconButton';\nimport NavigationMenu from '../../common/components/navigation-menu/NavigationMenu';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { getIsNavigationLocked } from '../../externals';\nimport CuesheetOverview from '../../features/overview/CuesheetOverview';\n\nimport CuesheetEditModal from './cuesheet-edit-modal/CuesheetEditModal';\nimport CuesheetProgress from './cuesheet-progress/CuesheetProgress';\nimport CuesheetTableWrapper from './CuesheetTableWrapper';\n\nimport styles from './CuesheetPage.module.scss';\n\nexport default function CuesheetPage() {\n const [isMenuOpen, menuHandler] = useDisclosure();\n\n useWindowTitle('Cuesheet');\n\n const isLocked = getIsNavigationLocked();\n\n return (\n <>\n <NavigationMenu isOpen={isMenuOpen} onClose={menuHandler.close} />\n <CuesheetEditModal />\n <div className={styles.tableWrapper} data-testid='cuesheet'>\n <CuesheetOverview>\n {!isLocked && (\n <IconButton aria-label='Toggle navigation' variant='subtle-white' size='xlarge' onClick={menuHandler.open}>\n <IoApps />\n </IconButton>\n )}\n </CuesheetOverview>\n <CuesheetProgress />\n <CuesheetTableWrapper />\n </div>\n </>\n );\n}\n","import ProtectRoute from '../../common/components/protect-route/ProtectRoute';\n\nimport CuesheetPage from './CuesheetPage';\n\nexport default function ProtectedCuesheet() {\n return (\n <ProtectRoute permission='operator'>\n <CuesheetPage />\n </ProtectRoute>\n );\n}\n"],"names":["useIsMobileScreen","width","useViewportSize","useMemo","memo","CuesheetOverview","children","jsx","CuesheetMobile","CuesheetDesktop","jsxs","OverviewWrapper","TimerOverview","OffsetOverview","TitleOverview","StartTimes","MetadataTimes","ClockOverview","CuesheetEntryEditor","entryId","data","useRundown","entry","setEntry","useState","isOntimeEvent","useEffect","order","length","event","entries","style","entryEditor","EventEditor","isOntimeMilestone","inModal","MilestoneEditor","isOntimeGroup","GroupEditor","useCuesheetEditModal","create","set","selectedEntryId","setEditableEntry","clearSelection","CuesheetEditModal","state","closeModal","Modal","CuesheetProgress","useViewSettings","current","duration","timeWarning","timeDanger","useProgressData","MultiPartProgressBar","normalColor","warningColor","dangerColor","styles","progressOverride","debounce","callback","wait","timeout","args","clearTimeout","setTimeout","tableSizesKey","makeStageKey","tableHiddenKey","tableOrderKey","saveSizesToStorage","sizes","localStorage","setItem","JSON","stringify","useColumnSizes","columnSizing","setColumnSizingState","stored","getItem","parse","setColumnSizing","useCallback","sizesOrUpdater","useColumnOrder","columns","columnOrder","saveColumnOrder","useLocalStorage","key","defaultValue","map","col","id","newColumns","some","includes","resetColumnOrder","useColumnVisibility","columnVisibility","setColumnVisibility","CuesheetDnd","sensors","useSensors","useSensor","PointerSensor","activationConstraint","delay","tolerance","TouchSensor","handleOnDragEnd","delta","active","over","y","fromIndex","indexOf","toIndex","reorderedCols","reorderedItem","splice","DndContext","closestCorners","SingleLineCell","forwardRef","initialValue","allowSubmitSameValue","handleUpdate","handleCancelUpdate","inputRef","ref","useRef","submitCallback","newValue","value","onChange","onBlur","onKeyDown","useReactiveTextInput","allowKeyboardNavigation","submitOnEnter","submitOnCtrlEnter","onCancelUpdate","useImperativeHandle","focus","select","focusParentElement","parentElement","Input","displayName","DurationInput","lockedValue","delayed","onSubmit","isEditing","setIsEditing","setValue","textRef","handleFakeFocus","handleFakeBlur","startsWith","valueInMillis","parseUserTime","isNaN","Number","timeString","millisToString","TextLikeInput","undefined","EditableImage","readOnly","updateValue","openInNewTab","open","imageCell","overlay","Button","Boolean","image","imageInput","currentTarget","FlagCell","flag","TbFlagFilled","GhostedText","multiline","ghostedText","MultiLineCell","AutoTextarea","MutedText","numeric","cx","muted","TimeInputDuration","formatTime","MakeStart","getValue","row","table","column","options","meta","showDelayedTimes","hideTableSeconds","formatOpts","format12","format24","original","handleUpdateTimer","update","startTime","isStartLocked","linkStart","displayTime","formattedTime","columnDef","canWrite","TimeInput","DelayIndicator","MakeEnd","endTime","isEndLocked","timeStrategy","TimeStrategy","LockEnd","MakeDuration","formatDuration","isDurationLocked","LockDuration","formattedDuration","MakeMultiLineField","index","LazyImage","isOntimeDelay","custom","MakeSingleLineField","MakeFlagField","MakeCustomField","makeCuesheetColumns","customFields","cuesheetMode","preset","columnsDef","modeAllowsWrite","AppMode","Edit","fullRead","read","fullWrite","write","canWriteKeys","Set","split","canReadKeys","canRead","has","push","accessorKey","header","cell","size","minSize","customFieldKeys","Object","keys","i","permissionKey","label","type","colour","EmptyTableBody","text","emptyContainer","emptyCell","EmptyImage","empty","SortableCell","columnId","colSpan","injectedStyles","draggable","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","dragStyle","zIndex","CSS","Translate","toString","TableCell","Draggable","resetSize","getResizeHandler","resizer","SortableCuesheetHeader","headerGroup","hideIndexColumn","usePersistedCuesheetOptions","actionColumn","indexColumn","SortableContext","headers","horizontalListSortingStrategy","customBackground","customStyles","opacity","customColour","getAccessibleColour","backgroundColor","color","isPlaceholder","flexRender","getContext","CuesheetHeader","DelayRow","virtuosoProps","hideDelays","delayTime","millisToDelayString","delayRow","useCuesheetTableMenu","isOpen","entryType","entryIndex","parentId","position","x","openMenu","closeMenu","EventRow","rowId","eventIndex","isFirstAfterGroup","isLoaded","isPast","groupColour","skip","parent","rowIndex","store","tmpColour","cssOrHexToColour","mutedText","colourToHex","alpha","rowBgColour","accessibleBackgroundColor","eventRow","firstAfterGroup","hasParent","IconButton","e","rect","getBoundingClientRect","yPos","height","SupportedEntry","Event","IoEllipsisHorizontal","getRow","getVisibleCells","GroupRow","groupId","groupRow","Group","MilestoneRow","parentBgColour","milestoneRow","Milestone","enDash","canRender","useCuesheetPermissions","canChangeMode","canCreateEntries","canEditEntries","canFlag","canShare","setPermissions","permissions","CuesheetTableMenu","addEntry","clone","deleteEntry","move","updateEntry","useEntryActions","showModal","PositionedDropdownMenu","onClick","icon","IoOptions","disabled","IoDuplicateOutline","before","IoAdd","after","IoArrowUp","IoArrowDown","IoTrash","RotatedLink","linkProps","IoLink","CuesheetShareModal","infoData","useInfo","urlPresetData","useUrlPresets","handler","useDisclosure","showModalContent","Fragment","Toolbar.Button","close","GenerateLinkFormExport","OntimeView","Cuesheet","CuesheetTableSettings","handleResetResizing","handleResetReordering","handleClearToggles","use","PresetContext","setCuesheetMode","useSessionStorage","alias","sessionKeys","Run","toggleCuesheetMode","mode","at","Toolbar.Root","tableSettings","ViewSettings","ColumnSettings","ToggleGroup","group","apart","Toggle","radioButton","Editor.Separator","Popover.Root","Popover.Trigger","IoSettingsOutline","IoChevronDown","PopoverContents","inline","Editor.Label","sectionTitle","option","Checkbox","setOption","checked","columnHeader","visible","getIsVisible","toggleVisibility","CuesheetTable","status","useFlatRundownWithMetadata","updateTimer","selectedEventId","useSelectedEventId","virtuosoRef","useTableNav","accessor","payload","isCustom","eventId","field","useReactTable","columnResizeMode","onColumnVisibilityChange","onColumnSizingChange","getCoreRowModel","setAllVisible","toggleAllColumnsVisible","resetColumnResizing","findIndex","scrollToIndex","behavior","columnSizeVars","getFlatHeaders","colSizes","getSize","getState","columnSizingInfo","allLeafColumns","getAllLeafColumns","rows","getRowModel","EmptyPage","TableVirtuoso","top","bottom","EmptyPlaceholder","Table","cuesheet","TableRow","item","_item","TableHead","tableHeader","getHeaderGroups","HeaderComponent","isResizingColumn","CuesheetTableWrapper","customFieldStatus","useCustomFields","sessionScope","isLoading","CuesheetPage","isMenuOpen","menuHandler","useWindowTitle","isLocked","getIsNavigationLocked","NavigationMenu","tableWrapper","IoApps","ProtectedCuesheet","ProtectRoute"],"mappings":"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"}
|