@getontime/cli 4.0.0-beta.5 → 4.0.2
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-CAjkmeJm.js +2 -0
- package/client/assets/Backstage-CAjkmeJm.js.br +0 -0
- package/client/assets/Backstage-CAjkmeJm.js.gz +0 -0
- package/client/assets/Backstage-CAjkmeJm.js.map +1 -0
- package/client/assets/Countdown-ChuA9az_.js +2 -0
- package/client/assets/Countdown-ChuA9az_.js.br +0 -0
- package/client/assets/Countdown-ChuA9az_.js.gz +0 -0
- package/client/assets/{Countdown-BaaR4j9x.js.map → Countdown-ChuA9az_.js.map} +1 -1
- package/client/assets/CustomTranslationModal-C3R_2T5s.js +2 -0
- package/client/assets/CustomTranslationModal-C3R_2T5s.js.br +0 -0
- package/client/assets/CustomTranslationModal-C3R_2T5s.js.gz +0 -0
- package/client/assets/{CustomTranslationModal-CcNNjbmZ.js.map → CustomTranslationModal-C3R_2T5s.js.map} +1 -1
- package/client/assets/{DelayIndicator-DXDACqpc.js → DelayIndicator-vT7n8ypf.js} +2 -2
- package/client/assets/DelayIndicator-vT7n8ypf.js.br +0 -0
- package/client/assets/DelayIndicator-vT7n8ypf.js.gz +0 -0
- package/client/assets/{DelayIndicator-DXDACqpc.js.map → DelayIndicator-vT7n8ypf.js.map} +1 -1
- package/client/assets/{EditorFeatureWrapper-CX6wzTmM.js → EditorFeatureWrapper-DHfuO3EA.js} +2 -2
- package/client/assets/EditorFeatureWrapper-DHfuO3EA.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-DHfuO3EA.js.gz +0 -0
- package/client/assets/{EditorFeatureWrapper-CX6wzTmM.js.map → EditorFeatureWrapper-DHfuO3EA.js.map} +1 -1
- package/client/assets/{EditorUtils-DxjFOwpn.js → EditorUtils-Da5ALK1P.js} +2 -2
- package/client/assets/EditorUtils-Da5ALK1P.js.br +0 -0
- package/client/assets/EditorUtils-Da5ALK1P.js.gz +0 -0
- package/client/assets/{EditorUtils-DxjFOwpn.js.map → EditorUtils-Da5ALK1P.js.map} +1 -1
- package/client/assets/{Empty-DiBXyIA8.js → Empty-gWT_HMeu.js} +2 -2
- package/client/assets/Empty-gWT_HMeu.js.br +0 -0
- package/client/assets/Empty-gWT_HMeu.js.gz +0 -0
- package/client/assets/{Empty-DiBXyIA8.js.map → Empty-gWT_HMeu.js.map} +1 -1
- package/client/assets/{EmptyPage-X6EO1Y5W.js → EmptyPage-Dcbg6rmF.js} +2 -2
- package/client/assets/EmptyPage-Dcbg6rmF.js.br +0 -0
- package/client/assets/EmptyPage-Dcbg6rmF.js.gz +0 -0
- package/client/assets/{EmptyPage-X6EO1Y5W.js.map → EmptyPage-Dcbg6rmF.js.map} +1 -1
- package/client/assets/{FollowButton-Cr-HA2-6.js → FollowButton-CSqJSvix.js} +2 -2
- package/client/assets/FollowButton-CSqJSvix.js.br +0 -0
- package/client/assets/FollowButton-CSqJSvix.js.gz +0 -0
- package/client/assets/{FollowButton-Cr-HA2-6.js.map → FollowButton-CSqJSvix.js.map} +1 -1
- package/client/assets/{MessageControlExport-VUkIayAJ.js → MessageControlExport-lXK21piH.js} +2 -2
- package/client/assets/MessageControlExport-lXK21piH.js.br +0 -0
- package/client/assets/MessageControlExport-lXK21piH.js.gz +0 -0
- package/client/assets/{MessageControlExport-VUkIayAJ.js.map → MessageControlExport-lXK21piH.js.map} +1 -1
- package/client/assets/MilestoneEditor-Bge8xLrV.js +2 -0
- package/client/assets/MilestoneEditor-Bge8xLrV.js.br +0 -0
- package/client/assets/MilestoneEditor-Bge8xLrV.js.gz +0 -0
- package/client/assets/{MilestoneEditor-Da8oxrHI.js.map → MilestoneEditor-Bge8xLrV.js.map} +1 -1
- package/client/assets/Modal-BgJx3SNK.css +1 -0
- package/client/assets/Modal-BgJx3SNK.css.br +0 -0
- package/client/assets/Modal-BgJx3SNK.css.gz +0 -0
- package/client/assets/Modal-C2sFA0zf.js +2 -0
- package/client/assets/Modal-C2sFA0zf.js.br +0 -0
- package/client/assets/Modal-C2sFA0zf.js.gz +0 -0
- package/client/assets/Modal-C2sFA0zf.js.map +1 -0
- package/client/assets/{MultiPartProgressBar-mGPuP1Wd.js → MultiPartProgressBar-D3jJZjb5.js} +2 -2
- package/client/assets/MultiPartProgressBar-D3jJZjb5.js.br +0 -0
- package/client/assets/MultiPartProgressBar-D3jJZjb5.js.gz +0 -0
- package/client/assets/{MultiPartProgressBar-mGPuP1Wd.js.map → MultiPartProgressBar-D3jJZjb5.js.map} +1 -1
- package/client/assets/OperatorExport-BUhxjLUx.js +2 -0
- package/client/assets/OperatorExport-BUhxjLUx.js.br +0 -0
- package/client/assets/OperatorExport-BUhxjLUx.js.gz +0 -0
- package/client/assets/OperatorExport-BUhxjLUx.js.map +1 -0
- package/client/assets/{OverviewWrapper-BMuW_wiO.js → OverviewWrapper-BveJ6GjK.js} +2 -2
- package/client/assets/OverviewWrapper-BveJ6GjK.js.br +0 -0
- package/client/assets/OverviewWrapper-BveJ6GjK.js.gz +0 -0
- package/client/assets/{OverviewWrapper-BMuW_wiO.js.map → OverviewWrapper-BveJ6GjK.js.map} +1 -1
- package/client/assets/{ProjectInfo-BYi1lzPk.js → ProjectInfo-z4k3cipS.js} +2 -2
- package/client/assets/ProjectInfo-z4k3cipS.js.br +0 -0
- package/client/assets/ProjectInfo-z4k3cipS.js.gz +0 -0
- package/client/assets/{ProjectInfo-BYi1lzPk.js.map → ProjectInfo-z4k3cipS.js.map} +1 -1
- package/client/assets/{ProtectRoute-DnUCrlh6.js → ProtectRoute-CrcWfOlG.js} +2 -2
- package/client/assets/ProtectRoute-CrcWfOlG.js.br +0 -0
- package/client/assets/ProtectRoute-CrcWfOlG.js.gz +0 -0
- package/client/assets/{ProtectRoute-DnUCrlh6.js.map → ProtectRoute-CrcWfOlG.js.map} +1 -1
- package/client/assets/ProtectedCuesheet-Deo4Aw6f.js +2 -0
- package/client/assets/ProtectedCuesheet-Deo4Aw6f.js.br +0 -0
- package/client/assets/ProtectedCuesheet-Deo4Aw6f.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-Deo4Aw6f.js.map +1 -0
- package/client/assets/ProtectedEditor-BoiAT_IR.css +1 -0
- package/client/assets/ProtectedEditor-BoiAT_IR.css.br +0 -0
- package/client/assets/ProtectedEditor-BoiAT_IR.css.gz +0 -0
- package/client/assets/ProtectedEditor-C_SYWpL2.js +3 -0
- package/client/assets/ProtectedEditor-C_SYWpL2.js.br +0 -0
- package/client/assets/ProtectedEditor-C_SYWpL2.js.gz +0 -0
- package/client/assets/ProtectedEditor-C_SYWpL2.js.map +1 -0
- package/client/assets/RundownEntry-D61IqkXb.js +2 -0
- package/client/assets/RundownEntry-D61IqkXb.js.br +0 -0
- package/client/assets/RundownEntry-D61IqkXb.js.gz +0 -0
- package/client/assets/{RundownEntry-Dl4Cb_pZ.js.map → RundownEntry-D61IqkXb.js.map} +1 -1
- package/client/assets/RundownExport-1zBZurIG.css +1 -0
- package/client/assets/RundownExport-1zBZurIG.css.br +0 -0
- package/client/assets/RundownExport-1zBZurIG.css.gz +0 -0
- package/client/assets/RundownExport-C6YhMGOC.js +3 -0
- package/client/assets/RundownExport-C6YhMGOC.js.br +0 -0
- package/client/assets/RundownExport-C6YhMGOC.js.gz +0 -0
- package/client/assets/{RundownExport-BPDLhvsM.js.map → RundownExport-C6YhMGOC.js.map} +1 -1
- package/client/assets/{Select-CUjlJirY.js → Select-CedN80WS.js} +2 -2
- package/client/assets/Select-CedN80WS.js.br +0 -0
- package/client/assets/Select-CedN80WS.js.gz +0 -0
- package/client/assets/{Select-CUjlJirY.js.map → Select-CedN80WS.js.map} +1 -1
- package/client/assets/Studio-DUzPBS6P.js +2 -0
- package/client/assets/Studio-DUzPBS6P.js.br +0 -0
- package/client/assets/Studio-DUzPBS6P.js.gz +0 -0
- package/client/assets/{Studio-BLCIas53.js.map → Studio-DUzPBS6P.js.map} +1 -1
- package/client/assets/{StyleEditor-DTNiR-0P.js → StyleEditor-D2z65PB7.js} +2 -2
- package/client/assets/StyleEditor-D2z65PB7.js.br +0 -0
- package/client/assets/StyleEditor-D2z65PB7.js.gz +0 -0
- package/client/assets/{StyleEditor-DTNiR-0P.js.map → StyleEditor-D2z65PB7.js.map} +1 -1
- package/client/assets/SuperscriptTime-CIrcMcyg.js +2 -0
- package/client/assets/SuperscriptTime-CIrcMcyg.js.br +0 -0
- package/client/assets/SuperscriptTime-CIrcMcyg.js.gz +0 -0
- package/client/assets/SuperscriptTime-CIrcMcyg.js.map +1 -0
- package/client/assets/TimeElements-CALNfv6u.js +2 -0
- package/client/assets/TimeElements-CALNfv6u.js.br +0 -0
- package/client/assets/TimeElements-CALNfv6u.js.gz +0 -0
- package/client/assets/{TimeElements-rlwX9Mgy.js.map → TimeElements-CALNfv6u.js.map} +1 -1
- package/client/assets/{TimeInput-C0_Nl63x.js → TimeInput-Dg1naiy3.js} +2 -2
- package/client/assets/TimeInput-Dg1naiy3.js.br +0 -0
- package/client/assets/TimeInput-Dg1naiy3.js.gz +0 -0
- package/client/assets/{TimeInput-C0_Nl63x.js.map → TimeInput-Dg1naiy3.js.map} +1 -1
- package/client/assets/TimelinePage-Cwm0svjN.js +2 -0
- package/client/assets/TimelinePage-Cwm0svjN.js.br +0 -0
- package/client/assets/TimelinePage-Cwm0svjN.js.gz +0 -0
- package/client/assets/{TimelinePage-BC-pnISF.js.map → TimelinePage-Cwm0svjN.js.map} +1 -1
- package/client/assets/Timer-BVXskRjc.js +2 -0
- package/client/assets/Timer-BVXskRjc.js.br +0 -0
- package/client/assets/Timer-BVXskRjc.js.gz +0 -0
- package/client/assets/Timer-BVXskRjc.js.map +1 -0
- package/client/assets/Timer-BvEmZbmF.css +1 -0
- package/client/assets/Timer-BvEmZbmF.css.br +0 -0
- package/client/assets/Timer-BvEmZbmF.css.gz +0 -0
- package/client/assets/{TimerControlExport-C_Jbwxog.js → TimerControlExport-C8ECtLBd.js} +2 -2
- package/client/assets/TimerControlExport-C8ECtLBd.js.br +0 -0
- package/client/assets/TimerControlExport-C8ECtLBd.js.gz +0 -0
- package/client/assets/{TimerControlExport-C_Jbwxog.js.map → TimerControlExport-C8ECtLBd.js.map} +1 -1
- package/client/assets/{TitleCard-C-Tw72nZ.js → TitleCard-CZl9wSHS.js} +2 -2
- package/client/assets/TitleCard-CZl9wSHS.js.br +0 -0
- package/client/assets/TitleCard-CZl9wSHS.js.gz +0 -0
- package/client/assets/{TitleCard-C-Tw72nZ.js.map → TitleCard-CZl9wSHS.js.map} +1 -1
- package/client/assets/{Tooltip-BZrLdTBU.js → Tooltip-D9XRnwOW.js} +2 -2
- package/client/assets/Tooltip-D9XRnwOW.js.br +4 -0
- package/client/assets/Tooltip-D9XRnwOW.js.gz +0 -0
- package/client/assets/{Tooltip-BZrLdTBU.js.map → Tooltip-D9XRnwOW.js.map} +1 -1
- package/client/assets/{ViewLogo-CdsW41HC.js → ViewLogo-_3Z1hIHi.js} +2 -2
- package/client/assets/ViewLogo-_3Z1hIHi.js.br +0 -0
- package/client/assets/ViewLogo-_3Z1hIHi.js.gz +0 -0
- package/client/assets/{ViewLogo-CdsW41HC.js.map → ViewLogo-_3Z1hIHi.js.map} +1 -1
- package/client/assets/{ViewParamsEditor-kNKEOAwm.css → ViewParamsEditor-1Ok39npF.css} +1 -1
- package/client/assets/ViewParamsEditor-1Ok39npF.css.br +0 -0
- package/client/assets/ViewParamsEditor-1Ok39npF.css.gz +0 -0
- package/client/assets/{ViewParamsEditor-YoYxps2g.js → ViewParamsEditor-Bca1TIDW.js} +2 -2
- package/client/assets/ViewParamsEditor-Bca1TIDW.js.br +0 -0
- package/client/assets/ViewParamsEditor-Bca1TIDW.js.gz +0 -0
- package/client/assets/{ViewParamsEditor-YoYxps2g.js.map → ViewParamsEditor-Bca1TIDW.js.map} +1 -1
- package/client/assets/{dateConfig-CqC6Ta_8.js → dateConfig-DRQGMWDF.js} +2 -2
- package/client/assets/dateConfig-DRQGMWDF.js.br +0 -0
- package/client/assets/dateConfig-DRQGMWDF.js.gz +0 -0
- package/client/assets/{dateConfig-CqC6Ta_8.js.map → dateConfig-DRQGMWDF.js.map} +1 -1
- package/client/assets/{editorSettings-CL1TjKzU.js → editorSettings-BU0pTMSY.js} +2 -2
- package/client/assets/editorSettings-BU0pTMSY.js.br +0 -0
- package/client/assets/editorSettings-BU0pTMSY.js.gz +0 -0
- package/client/assets/{editorSettings-CL1TjKzU.js.map → editorSettings-BU0pTMSY.js.map} +1 -1
- package/client/assets/{getProgress-Dh-Yy44B.js → getProgress-Cw79NL_O.js} +2 -2
- package/client/assets/getProgress-Cw79NL_O.js.br +0 -0
- package/client/assets/getProgress-Cw79NL_O.js.gz +0 -0
- package/client/assets/{getProgress-Dh-Yy44B.js.map → getProgress-Cw79NL_O.js.map} +1 -1
- package/client/assets/index-BQEUaoAf.js +3 -0
- package/client/assets/index-BQEUaoAf.js.br +0 -0
- package/client/assets/index-BQEUaoAf.js.gz +0 -0
- package/client/assets/index-BQEUaoAf.js.map +1 -0
- package/client/assets/{index-pvMSlFrO.css → index-De0uf0Ta.css} +1 -1
- package/client/assets/index-De0uf0Ta.css.br +0 -0
- package/client/assets/index-De0uf0Ta.css.gz +0 -0
- package/client/assets/{offset-BnfjZ6JI.js → offset-DJAHqjFW.js} +2 -2
- package/client/assets/offset-DJAHqjFW.js.br +0 -0
- package/client/assets/offset-DJAHqjFW.js.gz +0 -0
- package/client/assets/{offset-BnfjZ6JI.js.map → offset-DJAHqjFW.js.map} +1 -1
- package/client/assets/{parseUserTime-DNXIMX9s.js → parseUserTime-BeTKj08M.js} +2 -2
- package/client/assets/parseUserTime-BeTKj08M.js.br +0 -0
- package/client/assets/parseUserTime-BeTKj08M.js.gz +0 -0
- package/client/assets/{parseUserTime-DNXIMX9s.js.map → parseUserTime-BeTKj08M.js.map} +1 -1
- package/client/assets/{playbackstate-DzSEaiNW.js → playbackstate-B_khF6xU.js} +2 -2
- package/client/assets/playbackstate-B_khF6xU.js.br +0 -0
- package/client/assets/playbackstate-B_khF6xU.js.gz +0 -0
- package/client/assets/{playbackstate-DzSEaiNW.js.map → playbackstate-B_khF6xU.js.map} +1 -1
- package/client/assets/{presentation.utils-BfcniGcl.js → presentation.utils-KwY-ACf7.js} +2 -2
- package/client/assets/presentation.utils-KwY-ACf7.js.br +0 -0
- package/client/assets/presentation.utils-KwY-ACf7.js.gz +0 -0
- package/client/assets/{presentation.utils-BfcniGcl.js.map → presentation.utils-KwY-ACf7.js.map} +1 -1
- package/client/assets/{rundownUtils-CPBsEZ2m.js → rundownUtils-BZHazkXR.js} +2 -2
- package/client/assets/rundownUtils-BZHazkXR.js.br +0 -0
- package/client/assets/rundownUtils-BZHazkXR.js.gz +0 -0
- package/client/assets/{rundownUtils-CPBsEZ2m.js.map → rundownUtils-BZHazkXR.js.map} +1 -1
- package/client/assets/{useCustomFields-DY13Ir96.js → useCustomFields-DqCYz8Kt.js} +2 -2
- package/client/assets/useCustomFields-DqCYz8Kt.js.br +0 -0
- package/client/assets/useCustomFields-DqCYz8Kt.js.gz +0 -0
- package/client/assets/{useCustomFields-DY13Ir96.js.map → useCustomFields-DqCYz8Kt.js.map} +1 -1
- package/client/assets/{useFollowComponent-C42-1XCu.js → useFollowComponent-Ctfhf2or.js} +2 -2
- package/client/assets/useFollowComponent-Ctfhf2or.js.br +0 -0
- package/client/assets/useFollowComponent-Ctfhf2or.js.gz +0 -0
- package/client/assets/{useFollowComponent-C42-1XCu.js.map → useFollowComponent-Ctfhf2or.js.map} +1 -1
- package/client/assets/{useProjectData-BF2F6qPB.js → useProjectData-C1hVamxc.js} +2 -2
- package/client/assets/useProjectData-C1hVamxc.js.br +0 -0
- package/client/assets/useProjectData-C1hVamxc.js.gz +0 -0
- package/client/assets/{useProjectData-BF2F6qPB.js.map → useProjectData-C1hVamxc.js.map} +1 -1
- package/client/assets/useReport-B4dMYcNL.js +2 -0
- package/client/assets/useReport-B4dMYcNL.js.br +0 -0
- package/client/assets/useReport-B4dMYcNL.js.gz +0 -0
- package/client/assets/{useReport-DPqY9XXp.js.map → useReport-B4dMYcNL.js.map} +1 -1
- package/client/assets/useRundown-BfpjcCEJ.js +2 -0
- package/client/assets/useRundown-BfpjcCEJ.js.br +0 -0
- package/client/assets/useRundown-BfpjcCEJ.js.gz +0 -0
- package/client/assets/{useRundown-uuXixjnX.js.map → useRundown-BfpjcCEJ.js.map} +1 -1
- package/client/assets/{useWindowTitle-BQ1kqXfk.js → useWindowTitle-DqdFTWns.js} +2 -2
- package/client/assets/useWindowTitle-DqdFTWns.js.br +0 -0
- package/client/assets/useWindowTitle-DqdFTWns.js.gz +0 -0
- package/client/assets/{useWindowTitle-BQ1kqXfk.js.map → useWindowTitle-DqdFTWns.js.map} +1 -1
- package/client/assets/{validateEvent-Cy-jEiwB.js → validateEvent-P9sf7C10.js} +2 -2
- package/client/assets/validateEvent-P9sf7C10.js.br +3 -0
- package/client/assets/validateEvent-P9sf7C10.js.gz +0 -0
- package/client/assets/{validateEvent-Cy-jEiwB.js.map → validateEvent-P9sf7C10.js.map} +1 -1
- package/client/assets/{vendor-Cnciq4o_.js → vendor-CCiSQ9k9.js} +3 -3
- package/client/assets/vendor-CCiSQ9k9.js.br +0 -0
- package/client/assets/vendor-CCiSQ9k9.js.gz +0 -0
- package/client/assets/{vendor-Cnciq4o_.js.map → vendor-CCiSQ9k9.js.map} +1 -1
- package/client/assets/{common.options-p5f_zJ2-.js → viewLoader.utils-CmM-4-pk.js} +2 -2
- package/client/assets/viewLoader.utils-CmM-4-pk.js.br +0 -0
- package/client/assets/viewLoader.utils-CmM-4-pk.js.gz +0 -0
- package/client/assets/viewLoader.utils-CmM-4-pk.js.map +1 -0
- package/client/index.html +3 -3
- package/external/demo/app.js +2 -2
- package/package.json +1 -1
- package/server/index.cjs +115 -106
- package/client/assets/Backstage-B-_iTDRg.js +0 -2
- package/client/assets/Backstage-B-_iTDRg.js.br +0 -0
- package/client/assets/Backstage-B-_iTDRg.js.gz +0 -0
- package/client/assets/Backstage-B-_iTDRg.js.map +0 -1
- package/client/assets/Countdown-BaaR4j9x.js +0 -2
- package/client/assets/Countdown-BaaR4j9x.js.br +0 -0
- package/client/assets/Countdown-BaaR4j9x.js.gz +0 -0
- package/client/assets/CustomTranslationModal-CcNNjbmZ.js +0 -2
- package/client/assets/CustomTranslationModal-CcNNjbmZ.js.br +0 -0
- package/client/assets/CustomTranslationModal-CcNNjbmZ.js.gz +0 -0
- package/client/assets/DelayIndicator-DXDACqpc.js.br +0 -0
- package/client/assets/DelayIndicator-DXDACqpc.js.gz +0 -0
- package/client/assets/DropdownMenu-Bn0VHzKx.js +0 -2
- package/client/assets/DropdownMenu-Bn0VHzKx.js.br +0 -0
- package/client/assets/DropdownMenu-Bn0VHzKx.js.gz +0 -0
- package/client/assets/DropdownMenu-Bn0VHzKx.js.map +0 -1
- package/client/assets/DropdownMenu-ByBDeesm.css +0 -1
- package/client/assets/DropdownMenu-ByBDeesm.css.br +0 -0
- package/client/assets/DropdownMenu-ByBDeesm.css.gz +0 -0
- package/client/assets/EditorFeatureWrapper-CX6wzTmM.js.br +0 -0
- package/client/assets/EditorFeatureWrapper-CX6wzTmM.js.gz +0 -0
- package/client/assets/EditorUtils-DxjFOwpn.js.br +0 -0
- package/client/assets/EditorUtils-DxjFOwpn.js.gz +0 -0
- package/client/assets/Empty-DiBXyIA8.js.br +0 -2
- package/client/assets/Empty-DiBXyIA8.js.gz +0 -0
- package/client/assets/EmptyPage-X6EO1Y5W.js.br +0 -0
- package/client/assets/EmptyPage-X6EO1Y5W.js.gz +0 -0
- package/client/assets/FollowButton-Cr-HA2-6.js.br +0 -0
- package/client/assets/FollowButton-Cr-HA2-6.js.gz +0 -0
- package/client/assets/MessageControlExport-VUkIayAJ.js.br +0 -0
- package/client/assets/MessageControlExport-VUkIayAJ.js.gz +0 -0
- package/client/assets/MilestoneEditor-Da8oxrHI.js +0 -2
- package/client/assets/MilestoneEditor-Da8oxrHI.js.br +0 -0
- package/client/assets/MilestoneEditor-Da8oxrHI.js.gz +0 -0
- package/client/assets/MultiPartProgressBar-mGPuP1Wd.js.br +0 -0
- package/client/assets/MultiPartProgressBar-mGPuP1Wd.js.gz +0 -0
- package/client/assets/OperatorExport-BeuWuV6I.js +0 -2
- package/client/assets/OperatorExport-BeuWuV6I.js.br +0 -0
- package/client/assets/OperatorExport-BeuWuV6I.js.gz +0 -0
- package/client/assets/OperatorExport-BeuWuV6I.js.map +0 -1
- package/client/assets/OverviewWrapper-BMuW_wiO.js.br +0 -0
- package/client/assets/OverviewWrapper-BMuW_wiO.js.gz +0 -0
- package/client/assets/ProjectInfo-BYi1lzPk.js.br +0 -0
- package/client/assets/ProjectInfo-BYi1lzPk.js.gz +0 -0
- package/client/assets/ProtectRoute-DnUCrlh6.js.br +0 -0
- package/client/assets/ProtectRoute-DnUCrlh6.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-CQOB7ipQ.js +0 -2
- package/client/assets/ProtectedCuesheet-CQOB7ipQ.js.br +0 -0
- package/client/assets/ProtectedCuesheet-CQOB7ipQ.js.gz +0 -0
- package/client/assets/ProtectedCuesheet-CQOB7ipQ.js.map +0 -1
- package/client/assets/ProtectedEditor-C4beOxz1.css +0 -1
- package/client/assets/ProtectedEditor-C4beOxz1.css.br +0 -0
- package/client/assets/ProtectedEditor-C4beOxz1.css.gz +0 -0
- package/client/assets/ProtectedEditor-KcsoZKKo.js +0 -3
- package/client/assets/ProtectedEditor-KcsoZKKo.js.br +0 -0
- package/client/assets/ProtectedEditor-KcsoZKKo.js.gz +0 -0
- package/client/assets/ProtectedEditor-KcsoZKKo.js.map +0 -1
- package/client/assets/RundownEntry-Dl4Cb_pZ.js +0 -2
- package/client/assets/RundownEntry-Dl4Cb_pZ.js.br +0 -0
- package/client/assets/RundownEntry-Dl4Cb_pZ.js.gz +0 -0
- package/client/assets/RundownExport-BPDLhvsM.js +0 -3
- package/client/assets/RundownExport-BPDLhvsM.js.br +0 -0
- package/client/assets/RundownExport-BPDLhvsM.js.gz +0 -0
- package/client/assets/RundownExport-CUtaG16H.css +0 -1
- package/client/assets/RundownExport-CUtaG16H.css.br +0 -0
- package/client/assets/RundownExport-CUtaG16H.css.gz +0 -0
- package/client/assets/Select-CUjlJirY.js.br +0 -0
- package/client/assets/Select-CUjlJirY.js.gz +0 -0
- package/client/assets/Studio-BLCIas53.js +0 -2
- package/client/assets/Studio-BLCIas53.js.br +0 -0
- package/client/assets/Studio-BLCIas53.js.gz +0 -0
- package/client/assets/StyleEditor-DTNiR-0P.js.br +0 -0
- package/client/assets/StyleEditor-DTNiR-0P.js.gz +0 -0
- package/client/assets/TimeElements-rlwX9Mgy.js +0 -2
- package/client/assets/TimeElements-rlwX9Mgy.js.br +0 -0
- package/client/assets/TimeElements-rlwX9Mgy.js.gz +0 -0
- package/client/assets/TimeInput-C0_Nl63x.js.br +0 -0
- package/client/assets/TimeInput-C0_Nl63x.js.gz +0 -0
- package/client/assets/TimelinePage-BC-pnISF.js +0 -2
- package/client/assets/TimelinePage-BC-pnISF.js.br +0 -0
- package/client/assets/TimelinePage-BC-pnISF.js.gz +0 -0
- package/client/assets/Timer-DGNfbBKM.css +0 -1
- package/client/assets/Timer-DGNfbBKM.css.br +0 -0
- package/client/assets/Timer-DGNfbBKM.css.gz +0 -0
- package/client/assets/Timer-DgmA0De-.js +0 -2
- package/client/assets/Timer-DgmA0De-.js.br +0 -0
- package/client/assets/Timer-DgmA0De-.js.gz +0 -0
- package/client/assets/Timer-DgmA0De-.js.map +0 -1
- package/client/assets/TimerControlExport-C_Jbwxog.js.br +0 -0
- package/client/assets/TimerControlExport-C_Jbwxog.js.gz +0 -0
- package/client/assets/TitleCard-C-Tw72nZ.js.br +0 -0
- package/client/assets/TitleCard-C-Tw72nZ.js.gz +0 -0
- package/client/assets/Tooltip-BZrLdTBU.js.br +0 -0
- package/client/assets/Tooltip-BZrLdTBU.js.gz +0 -0
- package/client/assets/ViewLogo-CdsW41HC.js.br +0 -0
- package/client/assets/ViewLogo-CdsW41HC.js.gz +0 -0
- package/client/assets/ViewParamsEditor-YoYxps2g.js.br +0 -0
- package/client/assets/ViewParamsEditor-YoYxps2g.js.gz +0 -0
- package/client/assets/ViewParamsEditor-kNKEOAwm.css.br +0 -0
- package/client/assets/ViewParamsEditor-kNKEOAwm.css.gz +0 -0
- package/client/assets/common.options-p5f_zJ2-.js.br +0 -0
- package/client/assets/common.options-p5f_zJ2-.js.gz +0 -0
- package/client/assets/common.options-p5f_zJ2-.js.map +0 -1
- package/client/assets/dateConfig-CqC6Ta_8.js.br +0 -0
- package/client/assets/dateConfig-CqC6Ta_8.js.gz +0 -0
- package/client/assets/editorSettings-CL1TjKzU.js.br +0 -0
- package/client/assets/editorSettings-CL1TjKzU.js.gz +0 -0
- package/client/assets/getProgress-Dh-Yy44B.js.br +0 -0
- package/client/assets/getProgress-Dh-Yy44B.js.gz +0 -0
- package/client/assets/index-DdPXqLQ6.js +0 -3
- package/client/assets/index-DdPXqLQ6.js.br +0 -0
- package/client/assets/index-DdPXqLQ6.js.gz +0 -0
- package/client/assets/index-DdPXqLQ6.js.map +0 -1
- package/client/assets/index-pvMSlFrO.css.br +0 -0
- package/client/assets/index-pvMSlFrO.css.gz +0 -0
- package/client/assets/offset-BnfjZ6JI.js.br +0 -2
- package/client/assets/offset-BnfjZ6JI.js.gz +0 -0
- package/client/assets/parseUserTime-DNXIMX9s.js.br +0 -0
- package/client/assets/parseUserTime-DNXIMX9s.js.gz +0 -0
- package/client/assets/playbackstate-DzSEaiNW.js.br +0 -0
- package/client/assets/playbackstate-DzSEaiNW.js.gz +0 -0
- package/client/assets/presentation.utils-BfcniGcl.js.br +0 -0
- package/client/assets/presentation.utils-BfcniGcl.js.gz +0 -0
- package/client/assets/rundownUtils-CPBsEZ2m.js.br +0 -0
- package/client/assets/rundownUtils-CPBsEZ2m.js.gz +0 -0
- package/client/assets/useCustomFields-DY13Ir96.js.br +0 -0
- package/client/assets/useCustomFields-DY13Ir96.js.gz +0 -0
- package/client/assets/useFollowComponent-C42-1XCu.js.br +0 -0
- package/client/assets/useFollowComponent-C42-1XCu.js.gz +0 -0
- package/client/assets/useProjectData-BF2F6qPB.js.br +0 -0
- package/client/assets/useProjectData-BF2F6qPB.js.gz +0 -0
- package/client/assets/useReport-DPqY9XXp.js +0 -2
- package/client/assets/useReport-DPqY9XXp.js.br +0 -0
- package/client/assets/useReport-DPqY9XXp.js.gz +0 -0
- package/client/assets/useRundown-uuXixjnX.js +0 -2
- package/client/assets/useRundown-uuXixjnX.js.br +0 -0
- package/client/assets/useRundown-uuXixjnX.js.gz +0 -0
- package/client/assets/useWindowTitle-BQ1kqXfk.js.br +0 -0
- package/client/assets/useWindowTitle-BQ1kqXfk.js.gz +0 -0
- package/client/assets/validateEvent-Cy-jEiwB.js.br +0 -0
- package/client/assets/validateEvent-Cy-jEiwB.js.gz +0 -0
- package/client/assets/vendor-Cnciq4o_.js.br +0 -0
- package/client/assets/vendor-Cnciq4o_.js.gz +0 -0
- package/client/assets/viewLoader.utils-CYlNKkLE.js +0 -2
- package/client/assets/viewLoader.utils-CYlNKkLE.js.br +0 -0
- package/client/assets/viewLoader.utils-CYlNKkLE.js.gz +0 -0
- package/client/assets/viewLoader.utils-CYlNKkLE.js.map +0 -1
- /package/client/assets/{viewLoader-Bk5IU6zG.css → SuperscriptTime-Bk5IU6zG.css} +0 -0
- /package/client/assets/{viewLoader-Bk5IU6zG.css.br → SuperscriptTime-Bk5IU6zG.css.br} +0 -0
- /package/client/assets/{viewLoader-Bk5IU6zG.css.gz → SuperscriptTime-Bk5IU6zG.css.gz} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProtectedCuesheet-Deo4Aw6f.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 />\n <TimerOverview />\n <OffsetOverview />\n <MetadataTimes />\n <ClockOverview />\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: 'hh: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: 'hh: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","useEffect","event","isOntimeEvent","style","EventEditor","isOntimeMilestone","MilestoneEditor","isOntimeGroup","GroupEditor","useCuesheetEditModal","create","set","CuesheetEditModal","state","closeModal","Modal","CuesheetProgress","useViewSettings","current","duration","timeWarning","timeDanger","useProgressData","MultiPartProgressBar","styles","debounce","callback","wait","timeout","args","tableSizesKey","makeStageKey","tableHiddenKey","tableOrderKey","saveSizesToStorage","sizes","useColumnSizes","columnSizing","setColumnSizingState","stored","setColumnSizing","useCallback","sizesOrUpdater","useColumnOrder","columns","columnOrder","saveColumnOrder","useLocalStorage","col","newColumns","id","resetColumnOrder","useColumnVisibility","columnVisibility","setColumnVisibility","CuesheetDnd","sensors","useSensors","useSensor","PointerSensor","TouchSensor","handleOnDragEnd","delta","active","over","fromIndex","toIndex","reorderedCols","reorderedItem","DndContext","closestCorners","SingleLineCell","forwardRef","initialValue","allowSubmitSameValue","handleUpdate","handleCancelUpdate","inputRef","ref","useRef","submitCallback","newValue","value","onChange","onBlur","onKeyDown","useReactiveTextInput","useImperativeHandle","_a","_b","Input","DurationInput","lockedValue","delayed","onSubmit","isEditing","setIsEditing","setValue","textRef","handleFakeFocus","handleFakeBlur","valueInMillis","parseUserTime","_c","timeString","millisToString","TextLikeInput","EditableImage","readOnly","updateValue","openInNewTab","Button","FlagCell","TbFlagFilled","GhostedText","multiline","MultiLineCell","AutoTextarea","MutedText","numeric","cx","TimeInputDuration","formatTime","MakeStart","getValue","row","table","column","showDelayedTimes","hideTableSeconds","formatOpts","handleUpdateTimer","update","startTime","isStartLocked","displayTime","formattedTime","TimeInput","DelayIndicator","MakeEnd","endTime","isEndLocked","TimeStrategy","MakeDuration","isDurationLocked","formattedDuration","formatDuration","MakeMultiLineField","LazyImage","isOntimeDelay","canWrite","MakeSingleLineField","MakeFlagField","MakeCustomField","makeCuesheetColumns","customFields","cuesheetMode","preset","columnsDef","modeAllowsWrite","AppMode","fullRead","fullWrite","canWriteKeys","canReadKeys","_d","canRead","key","customFieldKeys","i","permissionKey","EmptyTableBody","text","EmptyImage","SortableCell","columnId","colSpan","injectedStyles","draggable","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","dragStyle","CSS","TableCell","Draggable","header","SortableCuesheetHeader","headerGroup","hideIndexColumn","usePersistedCuesheetOptions","SortableContext","horizontalListSortingStrategy","customBackground","customStyles","customColour","getAccessibleColour","flexRender","CuesheetHeader","DelayRow","virtuosoProps","delayTime","millisToDelayString","useCuesheetTableMenu","position","entryType","entryIndex","parentId","flag","EventRow","rowId","eventIndex","colour","isFirstAfterGroup","isLoaded","isPast","groupColour","skip","parent","rowIndex","openMenu","store","color","backgroundColor","tmpColour","cssOrHexToColour","mutedText","colourToHex","rowBgColour","accessibleBackgroundColor","IconButton","e","rect","yPos","SupportedEntry","IoEllipsisHorizontal","cell","GroupRow","groupId","MilestoneRow","parentBgColour","enDash","canRender","useCuesheetPermissions","permissions","CuesheetTableMenu","isOpen","closeMenu","addEntry","clone","deleteEntry","move","updateEntry","useEntryActions","showModal","PositionedDropdownMenu","IoOptions","IoDuplicateOutline","IoAdd","IoArrowUp","IoArrowDown","IoTrash","RotatedLink","linkProps","IoLink","CuesheetShareModal","infoData","useInfo","urlPresetData","useUrlPresets","handler","useDisclosure","showModalContent","Fragment","Toolbar.Button","GenerateLinkFormExport","OntimeView","CuesheetTableSettings","handleResetResizing","handleResetReordering","handleClearToggles","canShare","use","PresetContext","setCuesheetMode","useSessionStorage","sessionKeys","toggleCuesheetMode","mode","Toolbar.Root","ViewSettings","ColumnSettings","ToggleGroup","Toggle","Editor.Separator","options","Popover.Root","Popover.Trigger","IoSettingsOutline","IoChevronDown","PopoverContents","Editor.Label","Checkbox","checked","columnHeader","visible","CuesheetTable","status","useFlatRundownWithMetadata","updateTimer","selectedEventId","useSelectedEventId","virtuosoRef","useTableNav","meta","accessor","payload","isCustom","eventId","field","useReactTable","getCoreRowModel","setAllVisible","resetColumnResizing","columnSizeVars","headers","colSizes","allLeafColumns","rows","EmptyPage","TableVirtuoso","_item","HeaderComponent","CuesheetTableWrapper","customFieldStatus","useCustomFields","setPermissions","sessionScope","isLoading","CuesheetPage","isMenuOpen","menuHandler","useWindowTitle","isLocked","getIsNavigationLocked","NavigationMenu","IoApps","ProtectedCuesheet","ProtectRoute"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._blink_70oau_1{animation:_blink_70oau_1 1s step-start infinite}@keyframes _blink_70oau_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_70oau_13{transform:rotate(45deg)}._link_70oau_17{display:flex;align-items:center;gap:.25rem;color:#578af4;transition-property:color;transition-duration:.1s;width:fit-content;text-decoration:none}._link_70oau_17._inline_70oau_27{display:inline-flex}._link_70oau_17:hover{color:#ff7597}._link_70oau_17:focus{outline:none;box-shadow:0 1px 0 0 currentColor}._blink_11839_1{animation:_blink_11839_1 1s step-start infinite}@keyframes _blink_11839_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_11839_13{transform:rotate(45deg)}._wrapper_11839_17{position:relative}._suggestions_11839_21{background:#202020;color:#f6f6f6;position:absolute;top:100%;left:0;width:100%;margin:0;z-index:100;padding-block:.25rem;max-height:200px;overflow-y:auto;color:#b1b1b1}._suggestions_11839_21 li{padding:.25rem}._suggestions_11839_21 li:hover{color:#f6f6f6;background:#2b5abc}._blink_dem8v_1{animation:_blink_dem8v_1 1s step-start infinite}@keyframes _blink_dem8v_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_dem8v_13{transform:rotate(45deg)}._outerColumn_dem8v_17{gap:2rem;margin-bottom:2rem}._outerColumn_dem8v_17 h3{font-size:1rem}._innerColumn_dem8v_25{display:flex;flex-direction:column;gap:.5rem}._ruleSection_dem8v_31{display:flex;flex-direction:column;gap:1rem}._titleSection_dem8v_37,._filterSection_dem8v_38,._oscSection_dem8v_39,._httpSection_dem8v_40,._actionSection_dem8v_41{display:grid;grid-gap:.5rem}._titleSection_dem8v_37 button,._filterSection_dem8v_38 button,._oscSection_dem8v_39 button,._httpSection_dem8v_40 button,._actionSection_dem8v_41 button{align-self:flex-end}._titleSection_dem8v_37 label,._titleSection_dem8v_37 div,._ruleSection_dem8v_31 label,._ruleSection_dem8v_31 div,._filterSection_dem8v_38 label,._filterSection_dem8v_38 div,._oscSection_dem8v_39 label,._oscSection_dem8v_39 div,._httpSection_dem8v_40 label,._httpSection_dem8v_40 div,._actionSection_dem8v_41 label,._actionSection_dem8v_41 div{font-size:calc(1rem - 3px)}._titleSection_dem8v_37 label,._ruleSection_dem8v_31 label,._filterSection_dem8v_38 label,._oscSection_dem8v_39 label,._httpSection_dem8v_40 label,._actionSection_dem8v_41 label{color:#b1b1b1}._titleSection_dem8v_37{grid-template-columns:1fr}._filterSection_dem8v_38{grid-template-columns:2fr 1fr 2fr auto}._oscSection_dem8v_39{grid-template-columns:9rem 5rem 3fr 4fr auto}._httpSection_dem8v_40{grid-template-columns:1fr auto}._actionSection_dem8v_41{grid-template-columns:auto 1fr 1fr auto}._actionSection_dem8v_41 ._test_dem8v_95{grid-column:-1}._outputCard_dem8v_99{border-left:.25rem solid #262626;padding-left:.5rem}._blink_1fzu7_1{animation:_blink_1fzu7_1 1s step-start infinite}@keyframes _blink_1fzu7_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1fzu7_13{transform:rotate(45deg)}._goIcon_1fzu7_17{transform:rotate(45deg);margin-left:.25rem;margin-bottom:.25rem}._blink_15peo_1{animation:_blink_15peo_1 1s step-start infinite}@keyframes _blink_15peo_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_15peo_13{transform:rotate(45deg)}th._over_15peo_17{color:#f57c13}th._under_15peo_21{color:#55b469}._blink_1sy0c_1{animation:_blink_1sy0c_1 1s step-start infinite}@keyframes _blink_1sy0c_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1sy0c_13{transform:rotate(45deg)}._expand_1sy0c_17{flex:1}._column_1sy0c_21{display:flex;flex-direction:column;gap:1rem}._blink_10owf_1{animation:_blink_10owf_1 1s step-start infinite}@keyframes _blink_10owf_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_10owf_13{transform:rotate(45deg)}._uploadSection_10owf_17,._finishSection_10owf_18{margin-top:1rem;display:flex;padding:3rem 1rem;align-items:center;justify-content:center;background-color:#101010;border:1px solid rgba(255,255,255,.1);border-radius:3px}._uploadSection_10owf_17{flex-direction:row;gap:2rem}._finishSection_10owf_18{font-size:1.5rem;text-align:center;flex-direction:column;gap:1rem}._finishSection_10owf_18 ._error_10owf_40{color:#fa5656}._finishSection_10owf_18 ._success_10owf_43{color:#55b469}._singleActionCell_10owf_47{width:50px;text-align:center}._blink_1q0ge_1{animation:_blink_1q0ge_1 1s step-start infinite}@keyframes _blink_1q0ge_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1q0ge_13{transform:rotate(45deg)}._center_1q0ge_17{text-align:center}._nowrap_1q0ge_21{white-space:nowrap}tr ._secondaryRow_1q0ge_25{background-color:#ffffff12;padding-left:2em}._linkStartActive_1q0ge_30{flex-shrink:0;color:#8bb33d;transform:rotate(-45deg)}._flex_1q0ge_36{display:flex;align-items:center;gap:.5rem}._subdued_1q0ge_42{opacity:.4}._blink_6p65m_1{animation:_blink_6p65m_1 1s step-start infinite}@keyframes _blink_6p65m_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_6p65m_13{transform:rotate(45deg)}._halfWidth_6p65m_17{width:50%}._fullWidth_6p65m_21{width:100%}._twoCols_6p65m_25{display:grid;grid-template-columns:1fr 1fr;gap:1rem}._current_6p65m_31{background-color:#001a64!important}._blink_dpb46_1{animation:_blink_dpb46_1 1s step-start infinite}@keyframes _blink_dpb46_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_dpb46_13{transform:rotate(45deg)}._textEntry_dpb46_17{grid-area:input;display:flex;align-items:center;gap:.5rem;color:#b1b1b1}._inlineEntry_dpb46_25{display:grid;grid-template-areas:"label label" "input btn";grid-template-columns:1fr auto;column-gap:.5rem}._redirect_dpb46_32{grid-area:btn}._label_dpb46_36{color:#b1b1b1}._blink_vtewd_1{animation:_blink_vtewd_1 1s step-start infinite}@keyframes _blink_vtewd_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_vtewd_13{transform:rotate(45deg)}._fullWidth_vtewd_17{width:100%}._halfWidth_vtewd_21{width:50%}._halfWidthNoWrap_vtewd_25{width:50%;white-space:nowrap}._copiable_vtewd_30{cursor:text;-webkit-user-select:text;user-select:text}._self_vtewd_35{background-color:#001a64}._blink_l21m9_1{animation:_blink_l21m9_1 1s step-start infinite}@keyframes _blink_l21m9_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_l21m9_13,._iconRotate_l21m9_17{transform:rotate(45deg)}._blink_1iru7_1{animation:_blink_1iru7_1 1s step-start infinite}@keyframes _blink_1iru7_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1iru7_13{transform:rotate(45deg)}._current_1iru7_17{background-color:#001a64}._isEditing_1iru7_21{color:#578af4}._form_1iru7_25{display:flex;align-items:center;justify-content:space-between;width:100%;gap:1rem}._formInput_1iru7_33{flex:2}._saveButton_1iru7_37{text-transform:capitalize}._containCell_1iru7_41{max-width:400px}._fullWidth_1iru7_45{width:100%}._innerColumn_1iru7_49{margin:0 2rem 2rem;display:flex;flex-direction:column;gap:1em}._inlineLabels_1iru7_57 label{display:flex;gap:1rem}._warningInfo_1iru7_62{margin-bottom:1rem}._empty_1iru7_66{height:300px;position:relative}._blink_cq029_1{animation:_blink_cq029_1 1s step-start infinite}@keyframes _blink_cq029_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_cq029_13{transform:rotate(45deg)}._container_cq029_17{display:flex;align-items:center;gap:.25rem}._container_cq029_17 input{width:5em}._blink_m5263_1{animation:_blink_m5263_1 1s step-start infinite}@keyframes _blink_m5263_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_m5263_13{transform:rotate(45deg)}._uploadLogoCard_m5263_17{display:flex;gap:1rem;justify-content:center;align-items:center;flex-direction:column;background-color:#101010;border:1px solid rgba(255,255,255,.1);border-radius:3px}._uploadLogoCard_m5263_17 img{max-width:250px;height:auto}._customDataItem_m5263_32{width:100%;display:flex;flex-direction:column;gap:.5rem}._titleRow_m5263_39{display:flex;gap:1rem;align-items:end}._titleRow_m5263_39 label{flex:1}._customImage_m5263_48{display:grid;grid-template-columns:1fr 72px;gap:1rem}._imageContainer_m5263_54{width:72px;height:72px;background-color:#202020}._blink_18rtd_1{animation:_blink_18rtd_1 1s step-start infinite}@keyframes _blink_18rtd_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_18rtd_13{transform:rotate(45deg)}._editorActions_18rtd_17{width:100%}._right_18rtd_21{align-self:end;text-align:right}._column_18rtd_26{width:100%;display:flex;gap:1rem;flex-direction:column}._blink_1dxip_1{animation:_blink_1dxip_1 1s step-start infinite}@keyframes _blink_1dxip_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1dxip_13{transform:rotate(45deg)}._corner_1dxip_17{position:fixed;top:6rem;right:4rem;z-index:100}._contentWrapper_1dxip_24{display:flex;flex-direction:column;height:100%;width:100%;position:relative}._content_1dxip_24{margin:1rem;overflow-y:auto;flex-grow:1;padding-bottom:300px}._blink_86c70_1{animation:_blink_86c70_1 1s step-start infinite}@keyframes _blink_86c70_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_86c70_13{transform:rotate(45deg)}._tabs_86c70_17,ul{list-style:none;padding:0;margin:0}._tabs_86c70_17{width:min(30vw,300px);display:flex;flex-direction:column;overflow-y:auto}._primary_86c70_31,._secondary_86c70_32{padding:.25rem 1rem;margin-right:1rem}._primary_86c70_31:focus,._secondary_86c70_32:focus{background-color:#404040;outline:0}._primary_86c70_31:hover,._secondary_86c70_32:hover{background-color:#404040;cursor:pointer}._primary_86c70_31{font-size:1rem;border-radius:2px;display:flex;align-items:center;gap:.5rem}._primary_86c70_31._active_86c70_54{color:#779be7;background-color:#2d2d2d}._primary_86c70_31._highlight_86c70_58{color:#ff7878}._primary_86c70_31._highlight_86c70_58:before{content:"";width:.5em;height:.5em;border-radius:99px;background-color:#ff7878}._primary_86c70_31._split_86c70_68{margin-top:1rem}._secondary_86c70_32{margin-left:1rem;color:#b1b1b1;border-left:1px solid rgba(255,255,255,.1);font-size:calc(1rem - 2px)}._secondary_86c70_32._active_86c70_54{color:#779be7}._blink_1fy3l_1{animation:_blink_1fy3l_1 1s step-start infinite}@keyframes _blink_1fy3l_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1fy3l_13{transform:rotate(45deg)}._container_1fy3l_17{grid-area:main;width:100%;padding:1rem;display:flex;gap:.25rem;overflow:hidden;background-color:#101010}._blink_khqv6_1{animation:_blink_khqv6_1 1s step-start infinite}@keyframes _blink_khqv6_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_khqv6_13{transform:rotate(45deg)}._sections_khqv6_17{display:grid;grid-template-columns:1fr 5fr;gap:2rem}._column_khqv6_23,._about_khqv6_23{display:flex;flex-direction:column;gap:1rem;width:100%}._about_khqv6_23{font-size:calc(1rem - 3px);padding-inline:.25rem}._inline_khqv6_35{display:flex;align-items:center;gap:.5rem}._header_khqv6_41{font-size:1.5rem;display:flex;align-items:center;justify-content:space-between}._logo_khqv6_48{max-width:100px;height:auto}._buttonRow_khqv6_53{display:flex;gap:1rem;justify-content:end}._buttonRow_khqv6_53 :first-child{margin-right:auto}._tableContainer_khqv6_62{height:350px;max-height:350px;overflow-y:auto}._table_khqv6_62{width:100%;font-size:calc(1rem - 2px)}._table_khqv6_62 tbody{background-color:#1a1a1a}._table_khqv6_62 tbody tr:hover:not(._current_khqv6_75){background-color:#101010}._table_khqv6_62 tbody tr ._current_khqv6_75:hover{background-color:#0036a6}._table_khqv6_62 tr{height:2rem;cursor:pointer}._table_khqv6_62 th,._table_khqv6_62 td{padding-inline:.5rem}._table_khqv6_62 th{text-align:left;font-size:calc(1rem - 3px);color:#b1b1b1}._current_khqv6_75{background-color:#2b5abc}._current_khqv6_75:hover{background-color:#0036a6}
|
|
Binary file
|
|
Binary file
|