@getontime/cli 4.4.0 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/client/assets/{Backstage-ScLTYJAt.js → Backstage-BY9GL_rk.js} +2 -2
  2. package/client/assets/Backstage-BY9GL_rk.js.br +0 -0
  3. package/client/assets/Backstage-BY9GL_rk.js.gz +0 -0
  4. package/client/assets/{Backstage-ScLTYJAt.js.map → Backstage-BY9GL_rk.js.map} +1 -1
  5. package/client/assets/{Countdown-DA_Lph2k.js → Countdown-CXFgDHND.js} +2 -2
  6. package/client/assets/Countdown-CXFgDHND.js.br +0 -0
  7. package/client/assets/Countdown-CXFgDHND.js.gz +0 -0
  8. package/client/assets/{Countdown-DA_Lph2k.js.map → Countdown-CXFgDHND.js.map} +1 -1
  9. package/client/assets/{CuesheetTable-C7hP6tMi.js → CuesheetTable-BLICUNky.js} +2 -2
  10. package/client/assets/CuesheetTable-BLICUNky.js.br +0 -0
  11. package/client/assets/CuesheetTable-BLICUNky.js.gz +0 -0
  12. package/client/assets/{CuesheetTable-C7hP6tMi.js.map → CuesheetTable-BLICUNky.js.map} +1 -1
  13. package/client/assets/CustomTranslationModal-4PVZBtkC.js +2 -0
  14. package/client/assets/CustomTranslationModal-4PVZBtkC.js.br +0 -0
  15. package/client/assets/CustomTranslationModal-4PVZBtkC.js.gz +0 -0
  16. package/client/assets/{CustomTranslationModal-0ROtCxPC.js.map → CustomTranslationModal-4PVZBtkC.js.map} +1 -1
  17. package/client/assets/DelayIndicator-DUbpd6DG.js +2 -0
  18. package/client/assets/DelayIndicator-DUbpd6DG.js.br +0 -0
  19. package/client/assets/DelayIndicator-DUbpd6DG.js.gz +0 -0
  20. package/client/assets/DelayIndicator-DUbpd6DG.js.map +1 -0
  21. package/client/assets/{EditorFeatureWrapper-B_KH_YqU.js → EditorFeatureWrapper-CV_zaDoG.js} +2 -2
  22. package/client/assets/EditorFeatureWrapper-CV_zaDoG.js.br +0 -0
  23. package/client/assets/EditorFeatureWrapper-CV_zaDoG.js.gz +0 -0
  24. package/client/assets/{EditorFeatureWrapper-B_KH_YqU.js.map → EditorFeatureWrapper-CV_zaDoG.js.map} +1 -1
  25. package/client/assets/{EditorUtils-BxN0w0-D.js → EditorUtils-CLBWDP4k.js} +2 -2
  26. package/client/assets/EditorUtils-CLBWDP4k.js.br +0 -0
  27. package/client/assets/EditorUtils-CLBWDP4k.js.gz +0 -0
  28. package/client/assets/{EditorUtils-BxN0w0-D.js.map → EditorUtils-CLBWDP4k.js.map} +1 -1
  29. package/client/assets/{EmptyPage-CcO33dlE.js → EmptyPage-DmpOAg7R.js} +2 -2
  30. package/client/assets/EmptyPage-DmpOAg7R.js.br +2 -0
  31. package/client/assets/EmptyPage-DmpOAg7R.js.gz +0 -0
  32. package/client/assets/{EmptyPage-CcO33dlE.js.map → EmptyPage-DmpOAg7R.js.map} +1 -1
  33. package/client/assets/{FollowButton-DJCtYYXt.js → FollowButton-CAUWz5Ma.js} +2 -2
  34. package/client/assets/FollowButton-CAUWz5Ma.js.br +0 -0
  35. package/client/assets/FollowButton-CAUWz5Ma.js.gz +0 -0
  36. package/client/assets/{FollowButton-DJCtYYXt.js.map → FollowButton-CAUWz5Ma.js.map} +1 -1
  37. package/client/assets/{MessageControlExport-DGo2ZNMw.js → MessageControlExport-Dm8IjSr4.js} +3 -3
  38. package/client/assets/MessageControlExport-Dm8IjSr4.js.br +0 -0
  39. package/client/assets/MessageControlExport-Dm8IjSr4.js.gz +0 -0
  40. package/client/assets/{MessageControlExport-DGo2ZNMw.js.map → MessageControlExport-Dm8IjSr4.js.map} +1 -1
  41. package/client/assets/{MultiPartProgressBar-IIU35-x9.js → MultiPartProgressBar-Fp-sTN2u.js} +2 -2
  42. package/client/assets/MultiPartProgressBar-Fp-sTN2u.js.br +0 -0
  43. package/client/assets/MultiPartProgressBar-Fp-sTN2u.js.gz +0 -0
  44. package/client/assets/{MultiPartProgressBar-IIU35-x9.js.map → MultiPartProgressBar-Fp-sTN2u.js.map} +1 -1
  45. package/client/assets/{OperatorExport-C-KafSVE.js → OperatorExport-CE4ajLPS.js} +2 -2
  46. package/client/assets/OperatorExport-CE4ajLPS.js.br +0 -0
  47. package/client/assets/OperatorExport-CE4ajLPS.js.gz +0 -0
  48. package/client/assets/{OperatorExport-C-KafSVE.js.map → OperatorExport-CE4ajLPS.js.map} +1 -1
  49. package/client/assets/{OverviewWrapper-B6AeBRb6.js → OverviewWrapper-BNnAIUP1.js} +2 -2
  50. package/client/assets/OverviewWrapper-BNnAIUP1.js.br +0 -0
  51. package/client/assets/OverviewWrapper-BNnAIUP1.js.gz +0 -0
  52. package/client/assets/{OverviewWrapper-B6AeBRb6.js.map → OverviewWrapper-BNnAIUP1.js.map} +1 -1
  53. package/client/assets/{PipHost-BueqKsmJ.js → PipHost-CbNFsfqp.js} +2 -2
  54. package/client/assets/PipHost-CbNFsfqp.js.br +0 -0
  55. package/client/assets/PipHost-CbNFsfqp.js.gz +0 -0
  56. package/client/assets/{PipHost-BueqKsmJ.js.map → PipHost-CbNFsfqp.js.map} +1 -1
  57. package/client/assets/{ProjectInfo-DiD9lzzx.js → ProjectInfo-Bf5z4Xsv.js} +2 -2
  58. package/client/assets/ProjectInfo-Bf5z4Xsv.js.br +0 -0
  59. package/client/assets/ProjectInfo-Bf5z4Xsv.js.gz +0 -0
  60. package/client/assets/{ProjectInfo-DiD9lzzx.js.map → ProjectInfo-Bf5z4Xsv.js.map} +1 -1
  61. package/client/assets/{ProtectRoute-CcDK6JVA.js → ProtectRoute-CCHzyy0I.js} +2 -2
  62. package/client/assets/ProtectRoute-CCHzyy0I.js.br +0 -0
  63. package/client/assets/ProtectRoute-CCHzyy0I.js.gz +0 -0
  64. package/client/assets/{ProtectRoute-CcDK6JVA.js.map → ProtectRoute-CCHzyy0I.js.map} +1 -1
  65. package/client/assets/ProtectedCuesheet-COI1W_V3.js +2 -0
  66. package/client/assets/ProtectedCuesheet-COI1W_V3.js.br +0 -0
  67. package/client/assets/ProtectedCuesheet-COI1W_V3.js.gz +0 -0
  68. package/client/assets/{ProtectedCuesheet-D19INqhI.js.map → ProtectedCuesheet-COI1W_V3.js.map} +1 -1
  69. package/client/assets/ProtectedEditor-BvTFmv-F.js +3 -0
  70. package/client/assets/ProtectedEditor-BvTFmv-F.js.br +0 -0
  71. package/client/assets/ProtectedEditor-BvTFmv-F.js.gz +0 -0
  72. package/client/assets/ProtectedEditor-BvTFmv-F.js.map +1 -0
  73. package/client/assets/RundownExport-C_q3KYN_.js +2 -0
  74. package/client/assets/RundownExport-C_q3KYN_.js.br +0 -0
  75. package/client/assets/RundownExport-C_q3KYN_.js.gz +0 -0
  76. package/client/assets/RundownExport-C_q3KYN_.js.map +1 -0
  77. package/client/assets/RundownExport-CzaSrbaj.css +1 -0
  78. package/client/assets/RundownExport-CzaSrbaj.css.br +0 -0
  79. package/client/assets/RundownExport-CzaSrbaj.css.gz +0 -0
  80. package/client/assets/Select-DQwYPDyI.js +2 -0
  81. package/client/assets/Select-DQwYPDyI.js.br +0 -0
  82. package/client/assets/Select-DQwYPDyI.js.gz +0 -0
  83. package/client/assets/{Select-B3zdv0Ng.js.map → Select-DQwYPDyI.js.map} +1 -1
  84. package/client/assets/{Studio-DS_uXtgn.js → Studio-DzXTmBx4.js} +2 -2
  85. package/client/assets/Studio-DzXTmBx4.js.br +0 -0
  86. package/client/assets/Studio-DzXTmBx4.js.gz +0 -0
  87. package/client/assets/{Studio-DS_uXtgn.js.map → Studio-DzXTmBx4.js.map} +1 -1
  88. package/client/assets/StyleEditor-ClMEMaWh.js +2 -0
  89. package/client/assets/StyleEditor-ClMEMaWh.js.br +0 -0
  90. package/client/assets/StyleEditor-ClMEMaWh.js.gz +0 -0
  91. package/client/assets/{StyleEditor-DcyJgmAF.js.map → StyleEditor-ClMEMaWh.js.map} +1 -1
  92. package/client/assets/{SuperscriptPeriod-DswX2aei.js → SuperscriptPeriod-CBiZU34J.js} +2 -2
  93. package/client/assets/SuperscriptPeriod-CBiZU34J.js.br +0 -0
  94. package/client/assets/SuperscriptPeriod-CBiZU34J.js.gz +0 -0
  95. package/client/assets/{SuperscriptPeriod-DswX2aei.js.map → SuperscriptPeriod-CBiZU34J.js.map} +1 -1
  96. package/client/assets/{SuperscriptTime-COS4JWHJ.js → SuperscriptTime-DP1CDlOX.js} +2 -2
  97. package/client/assets/SuperscriptTime-DP1CDlOX.js.br +0 -0
  98. package/client/assets/SuperscriptTime-DP1CDlOX.js.gz +0 -0
  99. package/client/assets/{SuperscriptTime-COS4JWHJ.js.map → SuperscriptTime-DP1CDlOX.js.map} +1 -1
  100. package/client/assets/SwatchPicker-Dyxkxf3_.js +2 -0
  101. package/client/assets/SwatchPicker-Dyxkxf3_.js.br +0 -0
  102. package/client/assets/SwatchPicker-Dyxkxf3_.js.gz +0 -0
  103. package/client/assets/{SwatchPicker-DPyJv7aS.js.map → SwatchPicker-Dyxkxf3_.js.map} +1 -1
  104. package/client/assets/TimeElements-pDYJeFbV.js +2 -0
  105. package/client/assets/TimeElements-pDYJeFbV.js.br +0 -0
  106. package/client/assets/TimeElements-pDYJeFbV.js.gz +0 -0
  107. package/client/assets/{TimeElements-8rNLGU60.js.map → TimeElements-pDYJeFbV.js.map} +1 -1
  108. package/client/assets/{TimeInput-OX4LMRQl.js → TimeInput-DTWDnaum.js} +2 -2
  109. package/client/assets/TimeInput-DTWDnaum.js.br +0 -0
  110. package/client/assets/TimeInput-DTWDnaum.js.gz +0 -0
  111. package/client/assets/{TimeInput-OX4LMRQl.js.map → TimeInput-DTWDnaum.js.map} +1 -1
  112. package/client/assets/{TimelinePage-7kRpUl6P.js → TimelinePage-DbLt9rQi.js} +2 -2
  113. package/client/assets/TimelinePage-DbLt9rQi.js.br +0 -0
  114. package/client/assets/TimelinePage-DbLt9rQi.js.gz +0 -0
  115. package/client/assets/{TimelinePage-7kRpUl6P.js.map → TimelinePage-DbLt9rQi.js.map} +1 -1
  116. package/client/assets/{Timer-Bg9pVhup.js → Timer-BfyVKQ8U.js} +2 -2
  117. package/client/assets/Timer-BfyVKQ8U.js.br +0 -0
  118. package/client/assets/Timer-BfyVKQ8U.js.gz +0 -0
  119. package/client/assets/{Timer-Bg9pVhup.js.map → Timer-BfyVKQ8U.js.map} +1 -1
  120. package/client/assets/TimerControlExport-BJfhJc07.js +2 -0
  121. package/client/assets/TimerControlExport-BJfhJc07.js.br +0 -0
  122. package/client/assets/TimerControlExport-BJfhJc07.js.gz +0 -0
  123. package/client/assets/{TimerControlExport-BNfZ99Im.js.map → TimerControlExport-BJfhJc07.js.map} +1 -1
  124. package/client/assets/TimerDisplay-Dgmbqf65.js +2 -0
  125. package/client/assets/TimerDisplay-Dgmbqf65.js.br +0 -0
  126. package/client/assets/TimerDisplay-Dgmbqf65.js.gz +0 -0
  127. package/client/assets/{TimerDisplay-DQQ7sMDc.js.map → TimerDisplay-Dgmbqf65.js.map} +1 -1
  128. package/client/assets/{TitleCard-De0WhlN2.js → TitleCard-MUurHeZ7.js} +2 -2
  129. package/client/assets/TitleCard-MUurHeZ7.js.br +0 -0
  130. package/client/assets/TitleCard-MUurHeZ7.js.gz +0 -0
  131. package/client/assets/{TitleCard-De0WhlN2.js.map → TitleCard-MUurHeZ7.js.map} +1 -1
  132. package/client/assets/Tooltip-DXph8P8p.js +2 -0
  133. package/client/assets/Tooltip-DXph8P8p.js.br +0 -0
  134. package/client/assets/Tooltip-DXph8P8p.js.gz +0 -0
  135. package/client/assets/{Tooltip-B4PEP32j.js.map → Tooltip-DXph8P8p.js.map} +1 -1
  136. package/client/assets/{ViewLogo-CHqiH4C0.js → ViewLogo-Ckp7i75x.js} +2 -2
  137. package/client/assets/ViewLogo-Ckp7i75x.js.br +0 -0
  138. package/client/assets/ViewLogo-Ckp7i75x.js.gz +0 -0
  139. package/client/assets/{ViewLogo-CHqiH4C0.js.map → ViewLogo-Ckp7i75x.js.map} +1 -1
  140. package/client/assets/{ViewParamsEditor-BHIK3qtx.js → ViewParamsEditor-Cxngd15h.js} +2 -2
  141. package/client/assets/ViewParamsEditor-Cxngd15h.js.br +0 -0
  142. package/client/assets/ViewParamsEditor-Cxngd15h.js.gz +0 -0
  143. package/client/assets/{ViewParamsEditor-BHIK3qtx.js.map → ViewParamsEditor-Cxngd15h.js.map} +1 -1
  144. package/client/assets/{editorSettings-VcitNPq1.js → editorSettings-D4jfu68W.js} +2 -2
  145. package/client/assets/editorSettings-D4jfu68W.js.br +0 -0
  146. package/client/assets/editorSettings-D4jfu68W.js.gz +0 -0
  147. package/client/assets/{editorSettings-VcitNPq1.js.map → editorSettings-D4jfu68W.js.map} +1 -1
  148. package/client/assets/{getProgress-mRMYlU96.js → getProgress-B9UANc25.js} +2 -2
  149. package/client/assets/getProgress-B9UANc25.js.br +0 -0
  150. package/client/assets/getProgress-B9UANc25.js.gz +0 -0
  151. package/client/assets/{getProgress-mRMYlU96.js.map → getProgress-B9UANc25.js.map} +1 -1
  152. package/client/assets/index-2lQ-45a9.js +3 -0
  153. package/client/assets/index-2lQ-45a9.js.br +0 -0
  154. package/client/assets/index-2lQ-45a9.js.gz +0 -0
  155. package/client/assets/index-2lQ-45a9.js.map +1 -0
  156. package/client/assets/{offset-Bs6CY1IK.js → offset-DAyBfv5b.js} +2 -2
  157. package/client/assets/offset-DAyBfv5b.js.br +4 -0
  158. package/client/assets/offset-DAyBfv5b.js.gz +0 -0
  159. package/client/assets/{offset-Bs6CY1IK.js.map → offset-DAyBfv5b.js.map} +1 -1
  160. package/client/assets/{parseUserTime-CI7s8pYc.js → parseUserTime-WkVNjkkE.js} +2 -2
  161. package/client/assets/parseUserTime-WkVNjkkE.js.br +0 -0
  162. package/client/assets/parseUserTime-WkVNjkkE.js.gz +0 -0
  163. package/client/assets/{parseUserTime-CI7s8pYc.js.map → parseUserTime-WkVNjkkE.js.map} +1 -1
  164. package/client/assets/{playbackstate-DisgQbHM.js → playbackstate-znZk3SSJ.js} +2 -2
  165. package/client/assets/playbackstate-znZk3SSJ.js.br +0 -0
  166. package/client/assets/playbackstate-znZk3SSJ.js.gz +0 -0
  167. package/client/assets/{playbackstate-DisgQbHM.js.map → playbackstate-znZk3SSJ.js.map} +1 -1
  168. package/client/assets/{presentation.utils-Bv3PuMWv.js → presentation.utils-CjjYs5II.js} +2 -2
  169. package/client/assets/presentation.utils-CjjYs5II.js.br +0 -0
  170. package/client/assets/presentation.utils-CjjYs5II.js.gz +0 -0
  171. package/client/assets/{presentation.utils-Bv3PuMWv.js.map → presentation.utils-CjjYs5II.js.map} +1 -1
  172. package/client/assets/rundownUtils-BTQ3EeqN.js +2 -0
  173. package/client/assets/rundownUtils-BTQ3EeqN.js.br +0 -0
  174. package/client/assets/rundownUtils-BTQ3EeqN.js.gz +0 -0
  175. package/client/assets/rundownUtils-BTQ3EeqN.js.map +1 -0
  176. package/client/assets/{timer.utils-P25ngopd.js → timer.utils-B-Ui91P7.js} +2 -2
  177. package/client/assets/timer.utils-B-Ui91P7.js.br +0 -0
  178. package/client/assets/timer.utils-B-Ui91P7.js.gz +0 -0
  179. package/client/assets/{timer.utils-P25ngopd.js.map → timer.utils-B-Ui91P7.js.map} +1 -1
  180. package/client/assets/useCustomFields-zr9SUl5o.js +2 -0
  181. package/client/assets/useCustomFields-zr9SUl5o.js.br +0 -0
  182. package/client/assets/useCustomFields-zr9SUl5o.js.gz +0 -0
  183. package/client/assets/useCustomFields-zr9SUl5o.js.map +1 -0
  184. package/client/assets/useEventSelection-B9mbj1cM.js +2 -0
  185. package/client/assets/useEventSelection-B9mbj1cM.js.br +0 -0
  186. package/client/assets/useEventSelection-B9mbj1cM.js.gz +0 -0
  187. package/client/assets/useEventSelection-B9mbj1cM.js.map +1 -0
  188. package/client/assets/useProjectData-DD_BQ9eJ.js +2 -0
  189. package/client/assets/useProjectData-DD_BQ9eJ.js.br +0 -0
  190. package/client/assets/useProjectData-DD_BQ9eJ.js.gz +0 -0
  191. package/client/assets/useProjectData-DD_BQ9eJ.js.map +1 -0
  192. package/client/assets/useReport-DozG5uz5.js +2 -0
  193. package/client/assets/useReport-DozG5uz5.js.br +0 -0
  194. package/client/assets/useReport-DozG5uz5.js.gz +0 -0
  195. package/client/assets/useReport-DozG5uz5.js.map +1 -0
  196. package/client/assets/useRundown-D6vokFHi.js +2 -0
  197. package/client/assets/useRundown-D6vokFHi.js.br +0 -0
  198. package/client/assets/useRundown-D6vokFHi.js.gz +0 -0
  199. package/client/assets/useRundown-D6vokFHi.js.map +1 -0
  200. package/client/assets/{useSelectAndRevealEntry-CzSIOtzH.js → useSelectAndRevealEntry-Dd6MpVHe.js} +2 -2
  201. package/client/assets/useSelectAndRevealEntry-Dd6MpVHe.js.br +0 -0
  202. package/client/assets/useSelectAndRevealEntry-Dd6MpVHe.js.gz +0 -0
  203. package/client/assets/{useSelectAndRevealEntry-CzSIOtzH.js.map → useSelectAndRevealEntry-Dd6MpVHe.js.map} +1 -1
  204. package/client/assets/{useWindowTitle-Cl1AVD9_.js → useWindowTitle-bg-fLPOk.js} +2 -2
  205. package/client/assets/useWindowTitle-bg-fLPOk.js.br +0 -0
  206. package/client/assets/useWindowTitle-bg-fLPOk.js.gz +0 -0
  207. package/client/assets/{useWindowTitle-Cl1AVD9_.js.map → useWindowTitle-bg-fLPOk.js.map} +1 -1
  208. package/client/assets/validateEvent-BUgLWn7x.js +2 -0
  209. package/client/assets/validateEvent-BUgLWn7x.js.br +0 -0
  210. package/client/assets/validateEvent-BUgLWn7x.js.gz +0 -0
  211. package/client/assets/{validateEvent-DhFtLvz_.js.map → validateEvent-BUgLWn7x.js.map} +1 -1
  212. package/client/assets/{vendor-dQa48psh.js → vendor-CKDP5hij.js} +12 -12
  213. package/client/assets/vendor-CKDP5hij.js.br +0 -0
  214. package/client/assets/vendor-CKDP5hij.js.gz +0 -0
  215. package/client/assets/{vendor-dQa48psh.js.map → vendor-CKDP5hij.js.map} +1 -1
  216. package/client/assets/{viewLoader.utils-ndDejZHN.js → viewLoader.utils-Bn5zu5sz.js} +2 -2
  217. package/client/assets/viewLoader.utils-Bn5zu5sz.js.br +0 -0
  218. package/client/assets/viewLoader.utils-Bn5zu5sz.js.gz +0 -0
  219. package/client/assets/{viewLoader.utils-ndDejZHN.js.map → viewLoader.utils-Bn5zu5sz.js.map} +1 -1
  220. package/client/assets/{viewUtils-rcOl1-o8.js → viewUtils-DQFwr7hm.js} +2 -2
  221. package/client/assets/viewUtils-DQFwr7hm.js.br +0 -0
  222. package/client/assets/viewUtils-DQFwr7hm.js.gz +0 -0
  223. package/client/assets/{viewUtils-rcOl1-o8.js.map → viewUtils-DQFwr7hm.js.map} +1 -1
  224. package/client/index.html +2 -2
  225. package/package.json +1 -1
  226. package/server/index.cjs +87 -87
  227. package/client/assets/Backstage-ScLTYJAt.js.br +0 -0
  228. package/client/assets/Backstage-ScLTYJAt.js.gz +0 -0
  229. package/client/assets/Countdown-DA_Lph2k.js.br +0 -0
  230. package/client/assets/Countdown-DA_Lph2k.js.gz +0 -0
  231. package/client/assets/CuesheetTable-C7hP6tMi.js.br +0 -0
  232. package/client/assets/CuesheetTable-C7hP6tMi.js.gz +0 -0
  233. package/client/assets/CustomTranslationModal-0ROtCxPC.js +0 -2
  234. package/client/assets/CustomTranslationModal-0ROtCxPC.js.br +0 -0
  235. package/client/assets/CustomTranslationModal-0ROtCxPC.js.gz +0 -0
  236. package/client/assets/DelayIndicator-OEjcqoIx.js +0 -2
  237. package/client/assets/DelayIndicator-OEjcqoIx.js.br +0 -0
  238. package/client/assets/DelayIndicator-OEjcqoIx.js.gz +0 -0
  239. package/client/assets/DelayIndicator-OEjcqoIx.js.map +0 -1
  240. package/client/assets/EditorFeatureWrapper-B_KH_YqU.js.br +0 -0
  241. package/client/assets/EditorFeatureWrapper-B_KH_YqU.js.gz +0 -0
  242. package/client/assets/EditorUtils-BxN0w0-D.js.br +0 -0
  243. package/client/assets/EditorUtils-BxN0w0-D.js.gz +0 -0
  244. package/client/assets/EmptyPage-CcO33dlE.js.br +0 -0
  245. package/client/assets/EmptyPage-CcO33dlE.js.gz +0 -0
  246. package/client/assets/FollowButton-DJCtYYXt.js.br +0 -0
  247. package/client/assets/FollowButton-DJCtYYXt.js.gz +0 -0
  248. package/client/assets/MessageControlExport-DGo2ZNMw.js.br +0 -0
  249. package/client/assets/MessageControlExport-DGo2ZNMw.js.gz +0 -0
  250. package/client/assets/MultiPartProgressBar-IIU35-x9.js.br +0 -0
  251. package/client/assets/MultiPartProgressBar-IIU35-x9.js.gz +0 -0
  252. package/client/assets/OperatorExport-C-KafSVE.js.br +0 -0
  253. package/client/assets/OperatorExport-C-KafSVE.js.gz +0 -0
  254. package/client/assets/OverviewWrapper-B6AeBRb6.js.br +0 -0
  255. package/client/assets/OverviewWrapper-B6AeBRb6.js.gz +0 -0
  256. package/client/assets/PipHost-BueqKsmJ.js.br +0 -0
  257. package/client/assets/PipHost-BueqKsmJ.js.gz +0 -0
  258. package/client/assets/ProjectInfo-DiD9lzzx.js.br +0 -0
  259. package/client/assets/ProjectInfo-DiD9lzzx.js.gz +0 -0
  260. package/client/assets/ProtectRoute-CcDK6JVA.js.br +0 -0
  261. package/client/assets/ProtectRoute-CcDK6JVA.js.gz +0 -0
  262. package/client/assets/ProtectedCuesheet-D19INqhI.js +0 -2
  263. package/client/assets/ProtectedCuesheet-D19INqhI.js.br +0 -0
  264. package/client/assets/ProtectedCuesheet-D19INqhI.js.gz +0 -0
  265. package/client/assets/ProtectedEditor-BVabJfIz.js +0 -3
  266. package/client/assets/ProtectedEditor-BVabJfIz.js.br +0 -0
  267. package/client/assets/ProtectedEditor-BVabJfIz.js.gz +0 -0
  268. package/client/assets/ProtectedEditor-BVabJfIz.js.map +0 -1
  269. package/client/assets/RundownEntry-C5kdIHbb.js +0 -2
  270. package/client/assets/RundownEntry-C5kdIHbb.js.br +0 -0
  271. package/client/assets/RundownEntry-C5kdIHbb.js.gz +0 -0
  272. package/client/assets/RundownEntry-C5kdIHbb.js.map +0 -1
  273. package/client/assets/RundownEntry-jE09YkV2.css +0 -1
  274. package/client/assets/RundownEntry-jE09YkV2.css.br +0 -0
  275. package/client/assets/RundownEntry-jE09YkV2.css.gz +0 -0
  276. package/client/assets/RundownExport-BFn7H24P.css +0 -1
  277. package/client/assets/RundownExport-BFn7H24P.css.br +0 -0
  278. package/client/assets/RundownExport-BFn7H24P.css.gz +0 -0
  279. package/client/assets/RundownExport-DhzzqPCD.js +0 -3
  280. package/client/assets/RundownExport-DhzzqPCD.js.br +0 -0
  281. package/client/assets/RundownExport-DhzzqPCD.js.gz +0 -0
  282. package/client/assets/RundownExport-DhzzqPCD.js.map +0 -1
  283. package/client/assets/Select-B3zdv0Ng.js +0 -2
  284. package/client/assets/Select-B3zdv0Ng.js.br +0 -0
  285. package/client/assets/Select-B3zdv0Ng.js.gz +0 -0
  286. package/client/assets/Studio-DS_uXtgn.js.br +0 -0
  287. package/client/assets/Studio-DS_uXtgn.js.gz +0 -0
  288. package/client/assets/StyleEditor-DcyJgmAF.js +0 -2
  289. package/client/assets/StyleEditor-DcyJgmAF.js.br +0 -0
  290. package/client/assets/StyleEditor-DcyJgmAF.js.gz +0 -0
  291. package/client/assets/SuperscriptPeriod-DswX2aei.js.br +0 -0
  292. package/client/assets/SuperscriptPeriod-DswX2aei.js.gz +0 -0
  293. package/client/assets/SuperscriptTime-COS4JWHJ.js.br +0 -0
  294. package/client/assets/SuperscriptTime-COS4JWHJ.js.gz +0 -0
  295. package/client/assets/SwatchPicker-DPyJv7aS.js +0 -2
  296. package/client/assets/SwatchPicker-DPyJv7aS.js.br +0 -0
  297. package/client/assets/SwatchPicker-DPyJv7aS.js.gz +0 -0
  298. package/client/assets/TimeElements-8rNLGU60.js +0 -2
  299. package/client/assets/TimeElements-8rNLGU60.js.br +0 -0
  300. package/client/assets/TimeElements-8rNLGU60.js.gz +0 -0
  301. package/client/assets/TimeInput-OX4LMRQl.js.br +0 -0
  302. package/client/assets/TimeInput-OX4LMRQl.js.gz +0 -0
  303. package/client/assets/TimelinePage-7kRpUl6P.js.br +0 -0
  304. package/client/assets/TimelinePage-7kRpUl6P.js.gz +0 -0
  305. package/client/assets/Timer-Bg9pVhup.js.br +0 -0
  306. package/client/assets/Timer-Bg9pVhup.js.gz +0 -0
  307. package/client/assets/TimerControlExport-BNfZ99Im.js +0 -2
  308. package/client/assets/TimerControlExport-BNfZ99Im.js.br +0 -0
  309. package/client/assets/TimerControlExport-BNfZ99Im.js.gz +0 -0
  310. package/client/assets/TimerDisplay-DQQ7sMDc.js +0 -2
  311. package/client/assets/TimerDisplay-DQQ7sMDc.js.br +0 -0
  312. package/client/assets/TimerDisplay-DQQ7sMDc.js.gz +0 -0
  313. package/client/assets/TitleCard-De0WhlN2.js.br +0 -0
  314. package/client/assets/TitleCard-De0WhlN2.js.gz +0 -0
  315. package/client/assets/Tooltip-B4PEP32j.js +0 -2
  316. package/client/assets/Tooltip-B4PEP32j.js.br +0 -0
  317. package/client/assets/Tooltip-B4PEP32j.js.gz +0 -0
  318. package/client/assets/ViewLogo-CHqiH4C0.js.br +0 -0
  319. package/client/assets/ViewLogo-CHqiH4C0.js.gz +0 -0
  320. package/client/assets/ViewParamsEditor-BHIK3qtx.js.br +0 -0
  321. package/client/assets/ViewParamsEditor-BHIK3qtx.js.gz +0 -0
  322. package/client/assets/editorSettings-VcitNPq1.js.br +0 -0
  323. package/client/assets/editorSettings-VcitNPq1.js.gz +0 -0
  324. package/client/assets/getProgress-mRMYlU96.js.br +0 -0
  325. package/client/assets/getProgress-mRMYlU96.js.gz +0 -0
  326. package/client/assets/index-DYkg-xOk.js +0 -3
  327. package/client/assets/index-DYkg-xOk.js.br +0 -0
  328. package/client/assets/index-DYkg-xOk.js.gz +0 -0
  329. package/client/assets/index-DYkg-xOk.js.map +0 -1
  330. package/client/assets/offset-Bs6CY1IK.js.br +0 -3
  331. package/client/assets/offset-Bs6CY1IK.js.gz +0 -0
  332. package/client/assets/parseUserTime-CI7s8pYc.js.br +0 -0
  333. package/client/assets/parseUserTime-CI7s8pYc.js.gz +0 -0
  334. package/client/assets/playbackstate-DisgQbHM.js.br +0 -0
  335. package/client/assets/playbackstate-DisgQbHM.js.gz +0 -0
  336. package/client/assets/presentation.utils-Bv3PuMWv.js.br +0 -0
  337. package/client/assets/presentation.utils-Bv3PuMWv.js.gz +0 -0
  338. package/client/assets/rundownUtils-CJxEqFha.js +0 -2
  339. package/client/assets/rundownUtils-CJxEqFha.js.br +0 -0
  340. package/client/assets/rundownUtils-CJxEqFha.js.gz +0 -0
  341. package/client/assets/rundownUtils-CJxEqFha.js.map +0 -1
  342. package/client/assets/timer.utils-P25ngopd.js.br +0 -0
  343. package/client/assets/timer.utils-P25ngopd.js.gz +0 -0
  344. package/client/assets/useCustomFields-DUYgd-E7.js +0 -2
  345. package/client/assets/useCustomFields-DUYgd-E7.js.br +0 -0
  346. package/client/assets/useCustomFields-DUYgd-E7.js.gz +0 -0
  347. package/client/assets/useCustomFields-DUYgd-E7.js.map +0 -1
  348. package/client/assets/useEventSelection-R7JdgAzy.js +0 -2
  349. package/client/assets/useEventSelection-R7JdgAzy.js.br +0 -0
  350. package/client/assets/useEventSelection-R7JdgAzy.js.gz +0 -0
  351. package/client/assets/useEventSelection-R7JdgAzy.js.map +0 -1
  352. package/client/assets/useProjectData-DdITd09M.js +0 -2
  353. package/client/assets/useProjectData-DdITd09M.js.br +0 -0
  354. package/client/assets/useProjectData-DdITd09M.js.gz +0 -0
  355. package/client/assets/useProjectData-DdITd09M.js.map +0 -1
  356. package/client/assets/useReport-CR0k0b85.js +0 -2
  357. package/client/assets/useReport-CR0k0b85.js.br +0 -0
  358. package/client/assets/useReport-CR0k0b85.js.gz +0 -0
  359. package/client/assets/useReport-CR0k0b85.js.map +0 -1
  360. package/client/assets/useRundown-CR9Ah1Fa.js +0 -2
  361. package/client/assets/useRundown-CR9Ah1Fa.js.br +0 -0
  362. package/client/assets/useRundown-CR9Ah1Fa.js.gz +0 -0
  363. package/client/assets/useRundown-CR9Ah1Fa.js.map +0 -1
  364. package/client/assets/useSelectAndRevealEntry-CzSIOtzH.js.br +0 -0
  365. package/client/assets/useSelectAndRevealEntry-CzSIOtzH.js.gz +0 -0
  366. package/client/assets/useWindowTitle-Cl1AVD9_.js.br +0 -0
  367. package/client/assets/useWindowTitle-Cl1AVD9_.js.gz +0 -0
  368. package/client/assets/validateEvent-DhFtLvz_.js +0 -2
  369. package/client/assets/validateEvent-DhFtLvz_.js.br +0 -0
  370. package/client/assets/validateEvent-DhFtLvz_.js.gz +0 -0
  371. package/client/assets/vendor-dQa48psh.js.br +0 -0
  372. package/client/assets/vendor-dQa48psh.js.gz +0 -0
  373. package/client/assets/viewLoader.utils-ndDejZHN.js.br +0 -0
  374. package/client/assets/viewLoader.utils-ndDejZHN.js.gz +0 -0
  375. package/client/assets/viewUtils-rcOl1-o8.js.br +0 -0
  376. package/client/assets/viewUtils-rcOl1-o8.js.gz +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"mappings":";gwDAyDgBA,YAAgBC,EAAYC,EAAmBC,EAAsB,CACnF,GAAID,IAAcC,EACTF,SAGHG,QAAgB,CAAC,GAAGH,CAAK,EAGzB,CAACI,CAAa,EAAID,EAAcE,OAAOJ,EAAW,CAAC,EAG3CI,gBAAOH,EAAS,EAAGE,CAAa,EACvCD,CACT,4CC3DeG,UAAKC,EAAiB,EACrC,SAASA,GAAkB,CAAEC,KAAIC,KAA4B,EAAG,CACxDC,QAAW,oBAAoBF,CAAE,IACjCG,EAAY,qBAAqBF,CAAG,IAE1C,OACGG,OAAA,OAAI,UAAWC,GAAMC,OACpB,UAACC,EAAA,IAAAC,GAAA,CAAQ,UAAWN,EAAWA,SAASA,EAAA,EACvCK,EAAA,IAAAC,GAAA,CAAQ,UAAWL,EAAYA,SAAUA,CAAA,IAC5C,CAEJ,0QCfeL,UAAKW,EAAgB,EAEpC,SAASA,IAAmB,CAExB,OAAAF,MAAC,MAAI,WAAWF,GAAMK,YAAa,cAAY,mBAC7C,SAACN,OAAA,OAAI,UAAWC,GAAMM,gBACpB,UAAAJ,EAAA,IAACK,GAAA,CAAa,UAAWP,GAAMQ,OAAQ,SAAiB,4BACvD,QAAM,WAAWR,GAAMS,UACtB,gBAAC,QACC,WAAAV,OAAC,KACC,WAAAG,MAAC,MAAG,SAAe,2BAClB,KACC,WAAAA,MAACQ,GAAKC,SAAUA,EAAA,GAChBT,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAa,yBAChB,KACC,WAAAA,MAACQ,GAAKC,SAAUA,EAAA,GAChBT,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,EACCR,MAAA,MAAG,UAAWF,GAAMa,MAAO,UAC3B,KACC,WAAAX,MAAC,MAAG,SAAY,wBACf,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACNR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAY,wBACf,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAK,UACVR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACNR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAoB,gCACvB,KACC,WAAAA,MAACQ,GAAI,SAAI,SACTR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAG,QACV,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAc,0BACjB,KACC,WAAAA,MAACQ,GAAI,SAAI,SACTR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAI,SACX,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAc,mBACjBA,MAAA,MACC,SAACA,MAAAQ,EAAA,CAAI,eAAG,CACV,IACF,EACCR,MAAA,MAAG,UAAWF,GAAMa,MAAO,UAC3B,KACC,WAAAX,MAAC,MAAG,SAAsB,kCACzB,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAKC,SAAUA,EAAA,GAChBT,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACNR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAmB,+BACtB,KACC,WAAAA,MAACQ,GAAKC,SAAUA,EAAA,GAChBT,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAkB,8BACrB,KACC,WAAAA,MAACQ,GAAKC,SAAUA,EAAA,GAChBT,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAW,uBACd,KACC,WAAAA,MAACQ,GAAKC,SAAUA,EAAA,GAChBT,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAK,UACVR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAW,uBACd,KACC,WAAAA,MAACQ,GAAKC,SAAUA,EAAA,GAChBT,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAoB,gCACvB,KACC,WAAAA,MAACQ,GAAKC,SAAUA,EAAA,GAChBT,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAqB,iCACxB,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAS,cAChB,IACF,EACCR,MAAA,MAAG,UAAWF,GAAMa,MAAO,UAC3B,KACC,WAAAX,MAAC,MAAG,SAAe,2BAClB,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAe,2BAClB,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAK,UACVR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAe,2BAClB,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAe,2BAClB,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAK,UACVR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAmB,+BACtB,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAmB,+BACtB,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAK,UACVR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAe,2BAClB,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,IACF,SACC,KACC,WAAAR,MAAC,MAAG,SAAe,2BAClB,KACC,WAAAA,MAACQ,GAAKI,SAAUA,CAAA,GAChBZ,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAK,UACVR,MAACU,GAAO,SAAC,MACTV,MAACQ,GAAI,SAAC,MACR,GACF,IACF,CACF,IACF,CACF,EAEJ,CAEA,SAASE,EAAO,CAAEG,UAA4B,EAAG,CAC/C,OAAQb,MAAA,QAAK,UAAWF,GAAMgB,QAAUD,WAAS,CACnD,CAEA,SAASL,EAAI,CAAEK,UAA4B,EAAG,CAC5C,OAAQb,MAAA,QAAK,UAAWF,GAAMiB,IAAMF,WAAS,CAC/C,CCpNA,SAAwBG,IAAqB,CAC3C,MAAMC,EAAiBC,GAA6BC,KAAMF,cAAc,EAClE,CAAEG,QAASC,GAAW,EAEtBC,EAAQC,UAA4B,IAAM,CAC1CH,KAAKI,MAAMC,SAAW,EACjB,YAGT,MAAMC,EAAkBC,MAAMC,KAAKX,CAAc,EAAEY,GAAG,CAAC,EACvD,OAAKH,EAISN,EAAKU,QAAQJ,CAAe,GAC1B,KAJP,IAIO,EACf,CAACN,EAAKI,MAAMC,OAAQL,EAAKU,QAASb,CAAc,CAAC,EAEpD,OAAKK,EAIDS,GAAcT,CAAK,SAElB,MAAI,WAAWxB,GAAMkC,cAAe,cAAY,mBAC/C,UAAChC,MAAAiC,GAAA,CAAY,MAAOX,CAAM,SACzB9B,GAAkB,IAAI8B,EAAM7B,GAAI,IAAK6B,EAAM5B,GAAI,IAClD,EAIAwC,GAAkBZ,CAAK,EAEvBtB,MAAC,MAAI,WAAWF,GAAMkC,cAAe,cAAY,mBAC/C,SAAChC,EAAA,IAAAmC,GAAA,CAAgB,UAAWb,CAAM,GACpC,EAIAc,GAAcd,CAAK,EAEnBtB,MAAC,MAAI,WAAWF,GAAMkC,cAAe,cAAY,mBAC/C,SAAChC,EAAA,IAAAqC,GAAA,CAAY,MAAOf,CAAM,GAC5B,EAIG,WA5BGpB,GAAmB,GA6B/B,CCxDA,MAAMoC,GAAa,GAiCnB,SAAwBC,IAAY,CAC5B,MAAEnB,OAAMoB,aAAcC,GAAe,EACrC,CAACC,EAASC,CAAU,EAAIC,WAA4B,EAAE,EACtD,CAACC,EAAOC,CAAQ,EAAIF,WAAsB,IAAI,EAC9CG,EAAmBC,SAAO,EAAE,EAE5BC,EAAuBC,GAAwBV,CAAS,EAGxDW,EAAOC,cACVC,GAAyC,CACxC,GAAI,CAACjC,GAAQA,EAAKK,SAAW,EAAG,CAC9BqB,EAAS,SAAS,EAClB,OAIEO,GAFJP,EAAS,IAAI,EAETO,EAAMC,OAAOC,QAAU,GAAI,CAC7BZ,EAAW,EAAE,EACb,OAGF,MAAMa,EAAcH,EAAMC,OAAOC,MAAME,YAAY,EAG/CD,GAFJT,EAAiBW,QAAUF,EAEvBA,EAAYG,WAAW,QAAQ,EAAG,CACpC,MAAMC,EAAeJ,EAAYK,MAAM,CAAe,EAAEC,KAAK,EACvD,CAAEpB,UAASG,SAAUkB,EAAcH,CAAY,EACrDjB,EAAWD,CAAO,EAClBI,EAASD,CAAK,EACd,OAGEW,KAAYG,WAAW,MAAM,EAAG,CAClC,MAAMC,EAAeJ,EAAYK,MAAM,CAAa,EAAEC,KAAK,EACrD,CAAEpB,UAASG,SAAUmB,EAAYJ,CAAY,EACnDjB,EAAWD,CAAO,EAClBI,EAASD,CAAK,EACd,OAGIe,QAAeJ,EAAYG,WAAW,QAAQ,EAAIH,EAAYK,MAAM,CAAe,EAAEC,KAASN,IAC9F,CAAEd,UAASG,SAAUoB,EAAcL,CAAY,EACrDjB,EAAWD,CAAO,EAClBI,EAASD,CAAK,EAGd,SAASkB,EAAcH,EAAsB,CACrCM,QAAcC,OAAOP,CAAY,EACvC,GAAIQ,MAAMF,CAAW,GAAKA,EAAc,EAC/B,OAAExB,QAAS,CAAE,EAAEG,MAAO,eAAgB,EAG3CqB,KAAc9C,EAAKK,OACd,OAAEiB,QAAS,CAAE,EAAEG,MAAO,IAAK,EAIpC,IAAIwB,EAAa,EACjB,MAAM3B,EAA6B,CAAE,EACrC,QAAS4B,EAAI,EAAGA,EAAIlD,EAAKK,OAAQ6C,IAAK,CAC9BjB,QAAQjC,EAAKkD,CAAC,EAChBvC,MAAcsB,CAAK,EAAG,CACxB,GAAIgB,IAAeH,EAAa,CAC9BxB,EAAQ6B,KAAK,CACXC,KAAMC,EAAeC,MACrBjF,GAAI4D,EAAM5D,GACVkF,MAAOL,EACPD,aACAO,MAAOvB,EAAMuB,MACblF,IAAK2D,EAAM3D,IACXmF,OAAQxB,EAAMwB,OACdC,OAAQzB,EAAMyB,OACW,EAC3B,MAEFT,IACF,CAGK,OAAE3B,UAASG,MAAO,IAAK,EAIhC,SAASmB,EAAYJ,EAAsB,CAEzC,IAAIS,EAAa,EAEbU,EAAYzC,GAChB,MAAMI,EAA6B,CAAE,EAErC,QAAS4B,EAAI,EAAGA,EAAIlD,EAAKK,QACnBsD,KAAa,GADcT,IAAK,CAI9BjB,QAAQjC,EAAKkD,CAAC,EAChBvC,GAAcsB,CAAK,IACjBA,EAAM3D,IAAI+D,YAAcuB,WAASpB,CAAY,IAC/CmB,IACArC,EAAQ6B,KAAK,CACXC,KAAMC,EAAeC,MACrBjF,GAAI4D,EAAM5D,GACVkF,MAAOL,EACPD,aACAO,MAAOvB,EAAMuB,MACblF,IAAK2D,EAAM3D,IACXmF,OAAQxB,EAAMwB,OACdC,OAAQzB,EAAMyB,OACW,GAE7BT,IACF,CAEK,OAAE3B,UAASG,MAAO,IAAK,EAIhC,SAASoB,EAAcL,EAAsB,CAE3C,IAAIS,EAAa,EAEbU,EAAYzC,GAChB,MAAMI,EAA6B,CAAE,EAErC,QAAS4B,EAAI,EAAGA,EAAIlD,EAAKK,QACnBsD,KAAa,GADcT,IAAK,CAK9BhD,QAAQF,EAAKkD,CAAC,EAChBvC,GAAcT,CAAK,GACjBA,EAAMsD,MAAMnB,YAAcuB,WAASpB,CAAY,IACjDmB,IACArC,EAAQ6B,KAAK,CACXC,KAAMC,EAAeC,MACrBjF,GAAI6B,EAAM7B,GACVkF,MAAOL,EACPD,aACAO,MAAOtD,EAAMsD,MACblF,IAAK4B,EAAM5B,IACXmF,OAAQvD,EAAMuD,OACdC,OAAQxD,EAAMwD,OACW,GAE7BT,KACSjC,GAAcd,CAAK,EACxBA,EAAMsD,MAAMnB,YAAcuB,WAASpB,CAAY,IACjDmB,IACArC,EAAQ6B,KAAK,CACXC,KAAMC,EAAeQ,MACrBxF,GAAI6B,EAAM7B,GACVkF,MAAOL,EACPM,MAAOtD,EAAMsD,MACbC,OAAQvD,EAAMuD,OACW,GAEpB3C,GAAkBZ,CAAK,GAC5BA,EAAMsD,MAAMnB,YAAcuB,WAASpB,CAAY,IACjDmB,IACArC,EAAQ6B,KAAK,CACXC,KAAMC,EAAeS,UACrBzF,GAAI6B,EAAM7B,GACVkF,MAAOL,EACPM,MAAOtD,EAAMsD,MACblF,IAAK4B,EAAM5B,IACXmF,OAAQvD,EAAMuD,OACdC,OAAQxD,EAAMwD,OACe,EAEnC,CAEK,OAAEpC,UAASG,MAAO,IAAK,EAChC,EAEF,CAACzB,CAAI,CACP,EAEM+D,EAAS/B,cACZgC,GAAmC,CACbnC,EAAA,CACnBxD,GAAI2F,EAAc3F,GAClBkF,MAAOS,EAAcT,MACrBG,OAAQ,WAAYM,EAAgBA,EAAcN,OAAS,KAC5D,GAEH,CAAC7B,CAAoB,CACvB,EAGAoC,mBAAU,IAAM,CACd1C,EAAW,EAAE,EACbG,EAAS,IAAI,EAETC,EAAiBW,SACdP,EAAA,CAAEG,OAAQ,CAAEC,MAAOR,EAAiBW,QAAQ,CAAoC,CACvF,EACC,CAACtC,EAAM+B,CAAI,CAAC,EAER,CAAEA,OAAMgC,SAAQzC,UAASG,OAAM,CACxC,kUC9NA,SAAwByC,GAAO,CAAEC,SAAQC,SAAqB,EAAG,CACzD,MAAErC,OAAMgC,SAAQzC,UAASG,SAAUN,GAAU,EAC7C,CAACkD,EAAUC,CAAW,EAAI9C,WAAS,CAAC,EAEpC+C,EAAgBC,GAAqBzC,EAAM,GAAG,EAE9C0C,EAAYxC,GAAyC,CAErDX,EAAQjB,SAAW,IAGnB4B,EAAMyC,MAAQ,aAChBJ,EAAuBK,MAAO,GAAKrD,EAAQjB,MAAM,EAE/C4B,EAAMyC,MAAQ,WAChBJ,MAAuBK,EAAO,EAAIrD,EAAQjB,QAAUiB,EAAQjB,MAAM,EAEhE4B,EAAMyC,MAAQ,UAChBzC,EAAM2C,eAAe,EACrB3C,EAAM4C,gBAAgB,EACfC,EAAA,GAEX,EAEMA,EAASA,IAAM,CACbd,QAAgB1C,EAAQ+C,CAAQ,EACtCN,EAAOC,CAAa,EACZI,EAAA,CACV,EAEMW,EAAwB9C,GAA8C,CAEpE+C,QADS/C,EAAMC,OACH+C,QAAQ,IAAI,EAC9B,GAAID,EAAI,CACN,MAAMzB,EAAQR,OAAOiC,EAAGE,QAAQ3B,KAAK,EAChCP,MAAMO,CAAK,GACde,EAAYf,CAAK,CACnB,CAEJ,EAEA,OACG3E,MAAAuG,GAAA,CACC,MAAM,GACN,OAAAhB,EACA,QAAAC,EACA,aAAY,GACZ,aACE3F,OAAC,MAAI,WAAWgG,EACd,UAAC7F,MAAAwG,GAAA,CAAM,OAAO,QAAQ,MAAK,GAAC,SAAUb,EAAe,YAAY,WAAW,UAC3E,KAAG,WAAW7F,GAAM2G,gBAAiB,YAAaN,EAChDtD,aAAU7C,MAAA,MAAG,UAAWF,GAAM+C,MAAQA,SAAMA,EAAA,EAC5CH,EAAQjB,SAAW,GAAKzB,MAAC,MAAG,UAAWF,GAAM4G,MAAO,SAAU,eAC9DhE,EAAQjB,OAAS,GAChBiB,EAAQiE,IAAI,CAACrF,EAAOqD,IAAU,CAC5B,MAAMiC,EAAanB,IAAad,EAC1BkC,EAAevF,EAAMkD,OAASC,EAAeC,MAAQpD,EAAM+C,WAAa,IACxEyC,EAAa,QAASxF,EAAQA,EAAM5B,IAAM,GAG9C,OAAAG,EAAA,KAAC,KAEC,WAAWC,GAAMwB,MACjB,gBAAesF,EACf,aAAYjC,EACZ,QAASuB,EAET,UAACrG,EAAA,YAAI,UAAWC,GAAMsB,KACpB,UAAApB,EAAA,IAAC,MAAI,WAAWF,GAAM6E,MAAO,MAAO,CAAE,UAAWrD,EAAMuD,QACpDgC,SACHA,EAAA,EACC7G,EAAA,WAAI,UAAWF,GAAMJ,IAAMoH,SAAWA,EAAA,QACtC,MAAI,WAAWhH,GAAM8E,MAAQtD,WAAMsD,KAAM,IAC5C,EACCgC,GAAe5G,MAAA,QAAK,SAAI,WAbpBsB,EAAM7B,EAcb,CAEH,GACL,IACF,EAEF,eACEI,OAAC,MAAI,WAAWC,GAAMC,OAAO,8BACTC,EAAA,YAAK,UAAWF,GAAMiH,GAAI,SAAG,QAAO,KAAG/G,EAAA,YAAK,UAAWF,GAAMiH,GAAI,SAAK,UAAO,MAC9F/G,EAAA,YAAK,UAAWF,GAAMiH,GAAI,SAAK,UAAO,sBACzC,CAEF,EAEN,CCpGA,MAAexH,UAAKyH,EAAe,EAEnC,SAASA,IAAkB,CACzB,KAAM,CAACzB,EAAQ0B,CAAO,EAAIC,GAAc,EAOxC,OALAC,GAAW,CACT,CAAC,UAAWF,EAAQG,OAAQ,CAAEpB,eAAgB,EAAM,GACpD,CAAC,SAAUiB,EAAQI,MAAO,CAAErB,eAAgB,EAAM,EAAC,CACpD,EAEGT,EACMvF,MAAAsF,GAAA,CAAO,OAAAC,EAAgB,QAAS0B,EAAQI,MAAS,EAGpD,IACT,CCHaC,SAAsBC,GAAmCC,IAAA,CACpEC,SAAU,CAAEC,EAAG,EAAGC,EAAG,CAAE,EACvBC,QAAS,CAAE,EACXrC,OAAQ,GACRsC,eAAgBA,CAACJ,EAAUG,IAAYJ,EAAI,KAAO,CAAEC,WAAUG,UAASrC,OAAQ,IAAO,EACtFuC,UAA0BN,KAAI,KAAO,CAAEjC,OAAQwC,GAAY,CAC7D,EAAE,EAEK,SAASC,IAAqB,CAC7B,MAAEP,WAAUG,UAASrC,SAAQuC,aAAcR,GAAoB,EAE/D9B,EAAUA,IACPsC,EAAU,EAAK,EAGxB,OAAKvC,QAIG0C,GAAuB,QAAM,GAAC,SAAAR,EAAoB,QAAAjC,EAAkB,MAAOoC,EAAW,EAHrF,IAIX,CCrBO,SAASM,IAAsB,CAC9B,MAAEC,cAAeC,GAAgB,EAGjC,CAACC,EAAuBC,CAAwB,EAAIC,GAA2B,CACnFzC,IAAK0C,GAAYC,WACjBC,aAAcC,GAAQC,IACvB,EAgBM,OAAEH,WAZHN,IAAeU,GAAiBC,QAAgBT,EAChDF,IAAeU,GAAiBE,SAAiBJ,GAAQK,KACtDL,GAAQC,IAUIK,cANEC,GAAkB,CACnCf,IAAeU,GAAiBC,SAClCR,EAAyBY,CAAI,CAEjC,CAEmC,CACrC,iJCrBe3J,UAAK4J,EAAW,EAC/B,SAASA,GAAY,CAAEC,iBAAkC,EAAG,CAC1D,KAAM,CAAC7D,EAAQ8D,CAAQ,EAAInC,GAAc,EAEnCoC,EAAsBpI,GAA6BC,KAAMmI,mBAAmB,EAC5E,CAAEC,oBAAqBC,GAAuB,EAC9C,CAAEC,eAAgBC,GAAyB,EAE3CC,EAAYvG,cAAY,IAAM,CACjBmG,EAAA,EACGD,EAAA,EACpBD,EAAShC,MAAM,CACd,GAACiC,EAAqBC,EAAkBF,CAAQ,CAAC,EAEpD,OAEIxJ,EAAA,KAAA+J,WAAA,WAAC5J,MAAA,OAAI,UAAWF,EAAM+J,MACpB,eAACC,GACC,cAASC,EAAA,CAAe,OAAQ/J,EAAA,IAACgK,IAAW,QAAQ,eAAe,aAAW,cAAc,GAAI,EAChG,MAAO,CACL,CACExF,KAAM,OACNyF,MAAO,qBACPC,KAAMC,GACNC,QAASA,IAAMX,EAAY,kBAAkB,EAC7CY,SAAU,CAACjB,GAEb,CAAE5E,KAAM,WACR,CACEA,KAAM,cACNyF,MAAO,YACPC,KAAMI,GACNF,QAASf,EAASkB,KACnB,EAGH,SAACvK,EAAA,IAAAwK,GAAA,CAAoB,EACvB,GACF,EAECxK,EAAA,IAAAyK,GAAA,CACC,OAAAlF,EACA,QAAS8D,EAAShC,MAClB,MAAM,gBACN,aAAY,GACZ,gBAAe,GACf,aACExH,OAAA+J,WAAA,4DAC2C,KAAK,oBAChD,IAEF,eAEI/J,EAAA,KAAA+J,EAAA,oBAAC5J,MAAA0K,GAAA,CAAO,QAAQ,gBAAgB,KAAK,QAAQ,QAASrB,EAAShC,MAAM,SAErE,WACArH,MAAC0K,IAAO,QAAQ,cAAc,KAAK,QAAQ,QAASf,EAAU,SAE9D,gBACF,CACD,IAEL,CAEJ,CCtDO,MAAMgB,GAAyE,CACpF,CAAC9B,GAAiBC,OAAO,EAAG,CAC1B8B,kBAAmB,GACnBC,iBAAkB,GAClBC,iBAAkB,EACpB,EACA,CAACjC,GAAiBE,QAAQ,EAAG,CAC3B6B,kBAAmB,GACnBC,iBAAkB,GAClBC,iBAAkB,EACpB,EACA,CAACjC,GAAiBkC,QAAQ,EAAG,CAC3BH,kBAAmB,GACnBC,iBAAkB,GAClBC,iBAAkB,GAEtB,EAEevL,UAAKyL,EAAa,EACjC,SAASA,GAAc,CAAEC,cAAaC,WAAUC,aAAgC,EAAG,CAC3E,MAAE1C,aAAYQ,iBAAkBf,GAAoB,EACpDkD,EAAaC,GAAc,EAC3B,CAAElD,cAAeC,GAAgB,EAEjC,CAAEwC,oBAAmBC,mBAAkBC,oBAAqBH,GAAuBxC,CAAU,EAE7FmD,EAAiBpC,GAAoB,CAEnCqC,QAAWrC,EAAKrH,GAAG,CAAC,EACrB0J,GACLtC,EAAcsC,CAAQ,CACxB,EAEMC,EAAkBtC,GAA4B,CAC5CqC,QAAWrC,EAAKrH,GAAG,CAAC,EACrB0J,GACLJ,EAAYI,CAAQ,CACtB,EAEME,EAAoBvC,GAAuB,CACzCqC,QAAWrC,EAAKrH,GAAG,CAAC,EACrB0J,GACLG,GAAcH,CAAQ,CACxB,EAEA,cACGI,GAAA,CAAa,UAAW7L,EAAM8L,OAC5BhB,UACCA,GAAA/K,OAACgM,GAAY,OAAO,CAACpD,CAAU,EAAG,cAAe6C,EAAe,UAAWxL,EAAMgM,MAC/E,UAAA9L,MAAC+L,IACC,KAAK,sCACL,OAAS/L,MAAA+J,EAAA,CAAe,aAASiC,GAAM,IAAK,MAAOrD,GAAQC,IAAK,UAAW9I,EAAMmM,cAAgB,SAGnG,QACAjM,MAAC+L,IACC,KAAK,6CACL,OAAS/L,MAAA+J,EAAA,CAAe,aAASiC,GAAM,IAAK,MAAOrD,GAAQK,KAAM,UAAWlJ,EAAMmM,cAAgB,SAGpG,UACF,EAGFpM,OAACgM,GAAY,OAAO,CAACX,CAAQ,EAAG,cAAeM,EAAgB,UAAW1L,EAAMgM,MAC9E,UAAA9L,MAAC+L,IACC,KAAK,4BACL,OAAS/L,MAAA+J,EAAA,CAAe,aAASiC,GAAM,IAAK,MAAOE,GAAgBC,KAAM,UAAWrM,EAAMmM,cAAgB,SAG5G,SACAjM,MAAC+L,IACC,KAAK,6BACL,OAAS/L,MAAA+J,EAAA,CAAe,aAASiC,GAAM,IAAK,MAAOE,GAAgBE,MAAO,UAAWtM,EAAMmM,cAAgB,SAG7G,WACF,EAECpB,GACEhL,OAAAgM,GAAA,CAAY,MAAO,CAACT,CAAU,EAAG,cAAeK,EAAkB,UAAW3L,EAAMgM,MAClF,UAAA9L,MAAC+L,IACC,KAAK,+BACL,OAAS/L,MAAA+J,EAAA,CAAe,aAASiC,GAAM,IAAK,MAAOK,GAAWC,SAAU,UAAWxM,EAAMmM,cAAgB,SAG3G,aACAjM,MAAC+L,IACC,KAAK,4CACL,OAAS/L,MAAA+J,EAAA,CAAe,aAASiC,GAAM,IAAK,MAAOK,GAAWE,SAAU,UAAWzM,EAAMmM,cAAgB,SAG3G,cACF,EAGDnB,GAAoB9K,MAACmJ,GAAY,iBAAiB,CAAC8B,CAAe,IACrE,CAEJ,CChHA,MAAe1L,UAAKiN,EAAmB,EACvC,SAASA,GAAoB,CAAEtB,WAAUC,aAAsC,EAAG,CAC1E,MAAE1C,aAAYQ,iBAAkBf,GAAoB,EAEpDoD,EAAiBpC,GAAoB,CAEnCqC,QAAWrC,EAAKrH,GAAG,CAAC,EACrB0J,GACLtC,EAAcsC,CAAQ,CACxB,EAEMC,EAAkBtC,GAA4B,CAC5CqC,QAAWrC,EAAKrH,GAAG,CAAC,EACrB0J,GACLJ,EAAYI,CAAQ,CACtB,EAEA,cACGI,GAAA,CAAa,UAAW7L,EAAM8L,OAC7B,UAAC/L,OAAAgM,GAAA,CAAY,MAAO,CAACpD,CAAU,EAAG,cAAe6C,EAAe,UAAWxL,EAAMgM,MAC/E,UAAA9L,EAAA,IAAC+J,EAAA,CAAe,OAAS/J,MAAAgM,GAAA,EAAM,EAAK,MAAOrD,GAAQC,IAAK,UAAW9I,EAAMmM,YAAY,SAErF,QAECjM,EAAA,IAAA+J,EAAA,CAAe,OAAS/J,MAAAgM,GAAA,EAAM,EAAK,MAAOrD,GAAQK,KAAM,UAAWlJ,EAAMmM,YAAY,SAEtF,UACF,EAEApM,OAACgM,GAAY,OAAO,CAACX,CAAQ,EAAG,cAAeM,EAAgB,UAAW1L,EAAMgM,MAC9E,UAAA9L,EAAA,IAAC+J,EAAA,CAAe,OAAS/J,MAAAgM,GAAA,EAAM,EAAK,MAAOE,GAAgBC,KAAM,UAAWrM,EAAMmM,YAAY,SAE9F,SACCjM,EAAA,IAAA+J,EAAA,CAAe,OAAS/J,MAAAgM,GAAA,EAAM,EAAK,MAAOE,GAAgBE,MAAO,UAAWtM,EAAMmM,YAAY,SAE/F,UACF,IACF,CAEJ,CC5CO,SAASQ,GAAmBC,EAAwD,CAGzF,OAAOC,GAAoBD,EAAc/D,GAAQK,KAAM4D,MAAS,CAClE,CCJA,MAAerN,UAAKsN,EAAY,EAChC,SAASA,IAAe,CAChB,MAAEzL,KAAMsL,EAAcI,OAAQC,GAAsBC,GAAgB,EACpEC,EAAiBC,GAAkC/L,KAAM8L,cAAc,EACvE,CAAExE,cAAeP,GAAoB,EAG3C7C,YAAU,IAAM,CACC4H,EAAA,CACbE,cAAe,GACfC,iBAAkB,GAClBC,eAAgB,GAChBC,QAAS,GACTC,SAAU,GACX,GACA,CAACN,CAAc,CAAC,EAEbO,QAAUjM,UAAQ,IAAMkL,GAAmBC,CAAY,EAAG,CAACA,CAAY,CAAC,EAExEe,EAAY,CAACf,GAAgBK,IAAsB,UAEzD,aACGW,GAAY,SAAAF,EAAkB,UAAU,SACtCC,iBACEE,GAAU,MAAK,YAAY,SAE3BC,GAAc,SAAAJ,EAAkB,aAAc/E,EAAY,UAAU,QACtE,GACH,CAEJ,CCjCaoF,SAAetG,KAAmCC,IAAA,CAC7DsG,YAAa,KACbC,cAAe,OACfC,eAAgBA,CAACF,EAA4B5E,EAAuB,SAClE1B,EAAI,CAAEsG,cAAaC,cAAe7E,CAAM,EAC5C,EAAE,2ECIa3J,UAAK0O,EAAe,EACnC,SAASA,GAAgB,CAAEC,kBAAiBC,cAAaC,iBAAsC,EAAG,CAC1F,MAAEC,YAAa7E,GAAuB,EAEtC8E,EAAWA,IAAM,CAEnBD,EAAA,CACE7J,KAAMC,EAAeC,MACrBI,OAAQqJ,GAEV,CACEI,MAAOL,EACPM,YAAaN,EAEjB,CACF,EAEMO,EAAWA,IAAM,CAEnBJ,EAAA,CAAE7J,KAAMC,EAAeiK,MAAO5J,OAAQqJ,GACtC,CACEK,YAAaN,EACbK,MAAOL,EAEX,CACF,EAEMS,EAAeA,IAAM,CAEvBN,EAAA,CAAE7J,KAAMC,EAAeS,UAAWJ,OAAQqJ,GAC1C,CACEK,YAAaN,EACbK,MAAOL,EAEX,CACF,EAEMU,EAAWA,IAAM,CACjBT,IAAgB,MAIlBE,EAAA,CAAE7J,KAAMC,EAAeQ,OACvB,CACEuJ,YAAaN,EACbK,MAAOL,EAEX,CACF,EAOMW,EAAcT,IAAoB,GAAK,UAAYA,EAEzD,cACGzC,GAAA,CACC,UAAWmD,GAAG,CAAChP,GAAMiP,SAAUC,EAAQb,GAAgBrO,GAAMmP,MAAM,CAAC,EACpE,MAAOJ,EAAc,CAAE,YAAaA,CAAgB,KACpD,cAAY,oBAEZ,UAAChP,OAAAkK,EAAA,CAAe,OAAQ/J,EAAA,IAAC0K,IAAO,KAAK,QAAU,EAAE,QAAS4D,EACxD,UAAAtO,EAAA,IAACkP,GAAK,aAER,EAEArP,OAACkK,EAAA,CAAe,OAAS/J,EAAA,IAAA0K,GAAA,CAAO,KAAK,QAAU,EAAE,QAAS+D,EACxD,UAAAzO,EAAA,IAACkP,GAAK,aAER,EAEArP,OAACkK,EAAA,CAAe,OAAS/J,EAAA,IAAA0K,GAAA,CAAO,KAAK,QAAU,EAAE,QAASiE,EACxD,UAAA3O,EAAA,IAACkP,GAAK,iBAER,EAECf,IAAgB,MACdtO,OAAAkK,EAAA,CAAe,OAAQ/J,EAAA,IAAC0K,GAAO,MAAK,OAAO,GAAK,QAASkE,EACxD,UAAA5O,EAAA,IAACkP,GAAK,YAER,IAEJ,CAEJ,sFCvFe3P,UAAK4P,EAAc,EAClC,SAASA,GAAe,CAAEC,mBAAkBjB,cAAakB,WAA+B,EAAG,CACnF,MAAEhB,YAAa7E,GAAuB,EAEtC8F,EAAkB9K,GAAyB,CAC3C6K,IAAc,SAEdhB,EAAA,CAAE7J,OAAMM,OAAQN,IAASC,EAAeQ,MAAQkJ,EAAc,MAC9D,CACEoB,OAAQH,EAEZ,EAGEf,EAAA,CAAE7J,OAAMM,OAAQN,IAASC,EAAeQ,MAAQkJ,EAAc,MAC9D,CACEK,YAAaY,EACbb,MAAOa,EAEX,CAEJ,EAGE,OAAApP,EAAA,IAAC,MAAI,WAAWF,GAAMiP,SAAU,cAAY,mBAC1C,SAAA/O,MAAC8J,GACC,OAAO,CACL,CAAEtF,KAAM,OAAQ0F,KAAMgF,GAAOjF,MAAO,YAAaG,QAASA,IAAMkF,EAAe7K,EAAeC,KAAK,GACnG,CAAEF,KAAM,OAAQ0F,KAAMgF,GAAOjF,MAAO,YAAaG,QAASA,IAAMkF,EAAe7K,EAAeiK,KAAK,GACnG,CACElK,KAAM,OACN0F,KAAMgF,GACNjF,MAAO,gBACPG,QAASA,IAAMkF,EAAe7K,EAAeS,SAAS,GAExD,CACEV,KAAM,OACN0F,KAAMgF,GACNjF,MAAO,YACPG,QAASA,IAAMkF,EAAe7K,EAAeQ,KAAK,EAClDoF,SAAU8D,IAAgB,KAC3B,EAEH,OAASnO,MAAAgK,GAAA,CAAW,KAAK,QAAQ,QAAQ,UAAU,UAAWlK,GAAM0P,SAAU,GAE9E,SAACxP,MAAAkP,GAAA,CAAK,EACR,GACF,CAEJ,CCzDA,MAAMO,GAAY,EAaX,SAASC,GAAmB,CACjC5N,UACA6N,YACAC,eACAC,YAAaC,EACbC,qBACyB,EAAG,CACtB,MAAE1B,WAAU2B,QAAOC,cAAaC,OAAMC,gBAAiBP,EAEvDQ,EAAiBhN,cACpBiN,GAA0B,CACzB,GAAI,CAACA,EAAQ,OACP,MAAE/O,QAAOqD,OAAU2L,KAAkBxO,EAAS6N,EAAWU,CAAM,EACzDJ,EAAA,CAACI,CAAM,CAAC,EAChB/O,GAASqD,IAAU,MACNmL,EAAA,CAAErQ,GAAI6B,EAAM7B,GAAI8Q,WAAY,QAAS5L,QAAO,GAG/D,CAAC7C,EAAS6N,EAAWM,EAAaH,CAAc,CAClD,EAEMU,EAAiBpN,cACrB,CAACqN,EAAsBC,EAAQ,KAAU,CAEjC,MAAE5C,cAAaC,gBAAeC,kBAAmBH,GAAa8C,SAAS,EAC7E,GAAI7C,IAAgB,MAAQ,CAAChM,EAAQgM,CAAW,EAE9C,OAGF,IAAI8C,EAAiBH,EAEfI,QAAgB/O,EAAQgM,CAAW,EACnCgD,GAAaL,EAAO3O,EAAQ2O,CAAI,EAAI7D,OAM1C,GAJIkE,IAAc,WAAYA,IAAcA,GAAWhM,QAAU+L,EAAcrM,OAASC,EAAeQ,QACrG2L,EAAiBE,GAAWhM,QAG1BiJ,IAAkB,MAAO,CAC3B,GAAI,CAAC6C,EAAgB,CACbG,QAAUpB,EAAU,CAAC,EACvB,IAACoB,GAAWA,IAAYjD,EAC1B,OAEWA,IAAaiD,EAAS,QAAQ,EACxCC,KAAK,IAAMhD,EAAe,IAAI,CAAC,EAC/BiD,MAAM,IAAM,EAAE,EACjB,OAEF,GAAIL,IAAmB9C,EACrB,OAGWA,IAAa8C,EADRF,EAAQ,SAAW,OACc,EAChDM,KAAK,IAAMhD,EAAe,IAAI,CAAC,EAC/BiD,MAAM,IAAM,EAAE,EACjB,OAGFjB,EAAMlC,EAAa,CACjBS,MAAOmC,EAAQ9D,OAAYgE,GAAkBhE,OAE7C2C,OAAQmB,EAAQE,GAAkBhE,OAAYA,OAC/C,GAEH,CAAC9K,EAAS6N,EAAWK,EAAOG,CAAY,CAC1C,EAKMe,EAAa9N,cACjB,CAAC+N,EAAwD1R,EAAoBiR,EAAQ,KAAU,CAC7FrC,EAAS8C,EAAO,CACd5C,MAAO9O,GAAM,CAACiR,EAAQjR,EAAKmN,OAC3B2C,OAAQ9P,GAAMiR,EAAQjR,EAAKmN,OAC3B4B,YAAa,CAACkC,GAASjR,EAAKA,EAAKmN,OAClC,GAEH,CAACyB,CAAQ,CACX,EAEM+C,EAAchO,cAClB,CAACiN,EAAwBgB,IAA6B,CAChD1B,KAAUlO,OAAS,EACd,YAEHgE,QACJ4L,IAAc,KACVC,GAAuBxP,EAAS6N,EAAWU,CAAM,EACjDkB,GAAmBzP,EAAS6N,EAAWU,CAAM,EAEnD,OAAI5K,EAASnE,OAASmE,EAASd,QAAU,MACxBmL,EAAA,CAAErQ,GAAIgG,EAASnE,MAAM7B,GAAI8Q,WAAY,QAAS5L,MAAOc,EAASd,MAAO,EAC7Ec,EAASnE,MAAM7B,IAEjB,IAET,GAACkQ,EAAW7N,EAASgO,CAAc,CACrC,EAEMD,EAAczM,cAClB,CAACiN,EAAwBgB,IAA6B,CAChD1B,KAAUlO,OAAS,EACd,YAGHgE,QACJ4L,IAAc,KAAOf,GAAkBxO,EAAS6N,EAAWU,CAAM,EAAImB,GAAc1P,EAAS6N,EAAWU,CAAM,EAE/G,OAAI5K,EAASnE,OAASmE,EAASd,QAAU,MACxBmL,EAAA,CAAErQ,GAAIgG,EAASnE,MAAM7B,GAAI8Q,WAAY,QAAS5L,MAAOc,EAASd,MAAO,EAC7Ec,EAASnE,MAAM7B,IAEjB,IAET,GAACkQ,EAAW7N,EAASgO,CAAc,CACrC,EAEM2B,EAAYrO,cAChB,MAAOiN,EAAwBgB,IAA6B,CAC1D,GAAIhB,GAAU,KACZ,OAGF,MAAMqB,EAAmB,MAAMxB,EAAKG,EAAQgB,CAAS,EAEjDK,GACF3B,EAAoB,GAAO2B,CAAgB,CAC7C,EAEF,CAAC3B,EAAqBG,CAAI,CAC5B,EAEMyB,EAAavO,cAChBiN,GAA2B,CACrBA,GAGLL,EAAMK,EAAQ,CAAE9B,MAAO8B,EAAQ,GAEjC,CAACL,CAAK,CACR,EAEM4B,EAAaxO,cAChBiO,GAAgC,CAC3B1B,KAAUlO,OAAS,EACd,YAGT,MAAMkD,EAAQ0M,IAAc,MAAQ,EAAI1B,EAAUlO,OAAS,EACrDoQ,EAAalC,EAAUhL,CAAK,EAC9B,OAACkN,GAEU/B,EAAA,CAAErQ,GAAIoS,EAAYtB,WAAY,QAAS5L,QAAO,EACtDkN,GAHiB,IAGjBA,EAET,CAAClC,EAAWG,CAAc,CAC5B,EAEMgC,EAAa1O,cACjB,CAACiN,EAAwBgB,IAA6B,CAChD1B,KAAUlO,OAAS,EACd,YAGT,IAAIsQ,EAAe1B,EAASV,EAAUqC,QAAQ3B,CAAM,EAAI,GACpD0B,IAAiB,KACJV,MAAc,OAAS,GAAK1B,EAAUlO,QAGvD,IAAIwQ,EAAcF,EACdG,EAAgC,KACpC,QAASC,EAAO,EAAGA,EAAO1C,KACxBwC,EAAcZ,IAAc,OAASY,EAAc,EAAIA,EAAc,EACjEA,IAAc,GAAKA,GAAetC,EAAUlO,SAFb0Q,GAAQ,EAK1BF,IAGnB,GAAIC,IAAmB,KACd,YAGHL,QAAalC,EAAUuC,CAAc,EACvC,OAACL,GAEU/B,EAAA,CAAErQ,GAAIoS,EAAYtB,WAAY,QAAS5L,MAAOuN,EAAgB,EACtEL,GAHiB,IAGjBA,EAET,CAAClC,EAAWG,CAAc,CAC5B,EAEO,OACL6B,aACAvB,iBACAI,iBACAU,aACAE,cACAvB,cACA4B,YACAG,aACAE,YACF,CACF,CClNO,SAASM,GAAc,CAC5BtQ,UACAuQ,eACAC,kBACAC,iBACAxC,sBACAH,cACoB,EAAG,CACjB,MAAEO,gBAAiBP,EACnB4C,EAAUC,GAAWC,GAAUC,GAAe,CAAEC,qBAAsB,CAAEC,SAAU,GAAG,CAAG,CAAC,EACzFC,EAAgB9P,SAAO,EAAK,EAK5B+P,EAAkB3P,cACrBC,GAAwB,OACjB,MAAE2P,SAAQC,QAAS5P,EAOzB,GANAyP,EAAcpP,QAAU,GAEpB,EAACuP,WAAMxT,KAAMuT,EAAOvT,KAAOwT,EAAKxT,IAIhC,CAACuT,EAAO5R,KAAKsC,SAAW,CAACuP,EAAK7R,KAAKsC,QACrC,OAGF,MAAMxE,EAAoB8T,EAAO5R,KAAKsC,QAAQwP,SAASvO,MACjDxF,EAAkB8T,EAAK7R,KAAKsC,QAAQwP,SAASvO,MAC/C0K,MAA2CnQ,EAAYC,EAAU,QAAU,SAE3EgU,EAAgBF,EAAKxT,GACzB,MAAM2T,IAAkBJ,IAAO5R,KAAKsC,UAAZsP,cAAqBxO,QAASC,EAAeQ,MAGrE,GACEmO,GACA,CAACC,GAAQJ,EAAK7R,KAAKsC,QAAQc,KAAMyO,EAAK7R,KAAKsC,QAAQoB,OAAQuK,EAAWkD,EAAeY,CAAa,CAAC,EAEnG,OASEA,KAAcxP,WAAW,MAAM,EACjBwP,IAAcG,QAAQ,OAAQ,EAAE,EAE5CjE,IAAc,WACJA,EAAA,cAET,CACCvD,QAAQhK,EAAQqR,CAAa,EAE/B/Q,GAAc0J,CAAK,GAAKuD,IAAc,UACpC+D,EAGFD,EAAgBrH,EAAMrM,GACbqM,EAAMhK,QAAQL,SAAW,GAElC0R,EAAgBrH,EAAMrM,GACV4P,EAAA,WAGIvD,IAAMhK,QAAQ,CAAC,EACnBuN,EAAA,UAEhB,CAKIkE,QAAiB,CAAC,GAAGlB,CAAY,EAEvCC,EAAiBiB,GACRvU,GAAauU,EAAgBrU,EAAWC,CAAO,CACvD,EAEDgR,EAAa6C,EAAOvT,GAAe0T,EAAe9D,CAAS,EAAE4B,MAAauC,GAAA,CACxElB,EAAgBiB,CAAc,EAC/B,GAEH,CAACzR,EAASuQ,EAAcC,EAAiBC,EAAgBpC,CAAY,CACvE,EAMMsD,EAAwBrQ,cAC3BC,GAA0B,OACzByP,EAAcpP,QAAU,KACRL,IAAM2P,OAAO5R,KAAKsC,UAAlBL,cAA2BmB,QAASC,EAAeQ,OAE7C8K,EAAA,GAAM1M,EAAM2P,OAAOvT,EAAa,CACtD,EAEF,CAACsQ,CAAmB,CACtB,EAKM2D,EAAkBtQ,cACrBC,GAAyB,aAKxB,KAHIA,IAAM2P,OAAO5R,KAAKsC,UAAlBL,cAA2BmB,QAASC,EAAeQ,SAGnD5B,OAAM4P,OAAN5P,cAAYjC,KAAKsC,UAAjBL,cAA0BmB,QAASC,EAAeQ,MACpD,OAGI0O,SAAUtQ,IAAM4P,OAAN5P,cAAY5D,GAC5BsQ,EAAoB,GAAO4D,CAAO,GAEpC,CAAC5D,CAAmB,CACtB,EAEA,OAAOxO,UACL,KAAO,CACLiR,UACAM,gBACAC,kBACAU,wBACAC,oBAEF,CAAClB,EAASO,EAAiBU,EAAuBC,CAAe,CACnE,CACF,CC3HA,SAASE,GAAkBtQ,EAAqC,CAC1D,KAAEA,aAAkBuQ,aACf,SAGHC,QAAUxQ,EAAOwQ,QAAQrQ,YAAY,EACpCqQ,WAAY,SAAWA,IAAY,UAC5C,CAEO,SAASC,GAAmB,CACjC1D,SACA2D,WACA1K,sBACA0E,gBACyB,EAAG,CAC5B,MAAMiG,EAAgB/S,GAA6BC,KAAM8S,aAAa,EAE3D9M,GAAA,CACT,CACE,kBACA,IAAM,CACJ,MAAM+M,EAASF,EAASnE,YAAYQ,EAAQ,MAAM,EAC9C6D,GACFD,EAAcC,CAAM,CACtB,EAEF,CAAElO,eAAgB,GAAMmO,gBAAiB,GAAM,EAEjD,CACE,gBACA,IAAM,CACJ,MAAMD,EAASF,EAASnE,YAAYQ,EAAQ,IAAI,EAC5C6D,GACFD,EAAcC,CAAM,CACtB,EAEF,CAAElO,eAAgB,GAAMmO,gBAAiB,GAAM,EAGjD,CACE,0BACA,IAAM,CACJ,MAAMD,EAASF,EAAS5C,YAAYf,EAAQ,MAAM,EAC9C6D,GACFD,EAAcC,CAAM,CACtB,EAEF,CAAElO,eAAgB,GAAMmO,gBAAiB,GAAM,EAEjD,CACE,wBACA,IAAM,CACJ,MAAMD,EAASF,EAAS5C,YAAYf,EAAQ,IAAI,EAC5C6D,GACFD,EAAcC,CAAM,CACtB,EAEF,CAAElO,eAAgB,GAAMmO,gBAAiB,GAAM,EAGjD,CACE,OACA,IAAM,CACED,QAASF,EAASpC,WAAW,KAAK,EACpCsC,GACFD,EAAcC,CAAM,CACtB,EAEF,CAAElO,eAAgB,GAAMmO,gBAAiB,GAAM,EAEjD,CACE,MACA,IAAM,CACED,QAASF,EAASpC,WAAW,QAAQ,EACvCsC,GACFD,EAAcC,CAAM,CACtB,EAEF,CAAElO,eAAgB,GAAMmO,gBAAiB,GAAM,EAEjD,CACE,SACA,IAAM,CACJ,MAAMD,EAASF,EAASlC,WAAWzB,EAAQ,IAAI,EAC3C6D,GACFD,EAAcC,CAAM,CACtB,EAEF,CAAElO,eAAgB,GAAMmO,gBAAiB,GAAM,EAEjD,CACE,WACA,IAAM,CACJ,MAAMD,EAASF,EAASlC,WAAWzB,EAAQ,MAAM,EAC7C6D,GACFD,EAAcC,CAAM,CACtB,EAEF,CAAElO,eAAgB,GAAMmO,gBAAiB,GAAM,EAGjD,CACE,wBACA,IAAMH,EAASvC,UAAUpB,EAAQ,MAAM,EACvC,CAAErK,eAAgB,GAAMmO,gBAAiB,GAAM,EAEjD,CAAC,sBAAuB,IAAMH,EAASvC,UAAUpB,EAAQ,IAAI,EAAG,CAAErK,eAAgB,GAAMmO,gBAAiB,GAAM,EAE/G,CACE,SACA,IAAM,CACgB7K,EAAA,EACpB0E,EAAe,IAAI,GAErB,CAAEhI,eAAgB,GAAMmO,gBAAiB,GAAM,EAGjD,CAAC,kBAAmB,IAAMH,EAAS5D,eAAeC,CAAM,EAAG,CAAErK,eAAgB,GAAMmO,gBAAiB,EAAM,GAE1G,CACE,UACA,IAAMH,EAAS9C,WAAW,CAAE1M,KAAMC,EAAeC,KAAM,EAAG2L,CAAM,EAChE,CAAErK,eAAgB,GAAMmO,gBAAiB,EAAM,GAEjD,CACE,kBACA,IAAMH,EAAS9C,WAAW,CAAE1M,KAAMC,EAAeC,OAAS2L,EAAQ,EAAI,EACtE,CAAErK,eAAgB,GAAMmO,gBAAiB,EAAM,GAGjD,CACE,UACA,IAAMH,EAAS9C,WAAW,CAAE1M,KAAMC,EAAeQ,KAAM,EAAGoL,CAAM,EAChE,CAAErK,eAAgB,GAAMmO,gBAAiB,EAAM,GAEjD,CACE,kBACA,IAAMH,EAAS9C,WAAW,CAAE1M,KAAMC,EAAeQ,OAASoL,EAAQ,EAAI,EACtE,CAAErK,eAAgB,GAAMmO,gBAAiB,EAAM,GAGjD,CACE,UACA,IAAMH,EAAS9C,WAAW,CAAE1M,KAAMC,EAAeiK,KAAM,EAAG2B,CAAM,EAChE,CAAErK,eAAgB,GAAMmO,gBAAiB,EAAM,GAEjD,CACE,kBACA,IAAMH,EAAS9C,WAAW,CAAE1M,KAAMC,EAAeiK,OAAS2B,EAAQ,EAAI,EACtE,CAAErK,eAAgB,GAAMmO,gBAAiB,EAAM,GAGjD,CACE,UACA,IAAMH,EAAS9C,WAAW,CAAE1M,KAAMC,EAAeS,SAAU,EAAGmL,CAAM,EACpE,CAAErK,eAAgB,GAAMmO,gBAAiB,EAAM,GAEjD,CACE,kBACA,IAAMH,EAAS9C,WAAW,CAAE1M,KAAMC,EAAeS,WAAamL,EAAQ,EAAI,EAC1E,CAAErK,eAAgB,GAAMmO,gBAAiB,GAAM,EAGjD,CACE,UACW9Q,GAAA,CACLgN,IAAW,MAAQuD,GAAkBvQ,EAAMC,MAAM,IAGrDD,EAAM2C,eAAe,EACrBgI,EAAeqC,CAAM,IAEvB,CAAE8D,gBAAiB,GAAM,EAE3B,CACE,UACW9Q,GAAA,CACLgN,IAAW,MAAQuD,GAAkBvQ,EAAMC,MAAM,IAGrDD,EAAM2C,eAAe,EACrBgI,EAAeqC,EAAQ,KAAK,IAE9B,CAAE8D,gBAAiB,GAAM,EAE3B,CACE,UACW9Q,GAAA,CACLuQ,GAAkBvQ,EAAMC,MAAM,GAAKuK,GAAa8C,SAAS,EAAE7C,cAAgB,OAG/EzK,EAAM2C,eAAe,EACrBgO,EAASxD,eAAeH,CAAM,IAEhC,CAAE8D,gBAAiB,GAAM,EAE3B,CAAC,UAAW,IAAMH,EAASrC,WAAWtB,CAAM,EAAG,CAAErK,eAAgB,GAAMmO,gBAAiB,GAAM,EAC9F,CACE,kBACW9Q,GAAA,CACLuQ,GAAkBvQ,EAAMC,MAAM,GAAKuK,GAAa8C,SAAS,EAAE7C,cAAgB,OAG/EzK,EAAM2C,eAAe,EACZwK,iBAAeH,EAAQ,EAAI,IAEtC,CAAE8D,gBAAiB,EAAM,EAC1B,CACF,CACH,CCtOaC,SAAyCxM,GAAgC,CACpF,MAAMC,EAAiBP,GAA+BnG,KAAM0G,cAAc,EAc1E,MAAO,CAZwBzE,cAC5BiR,GAA2D,CAE1DA,EAAiBrO,eAAe,EAE1B,MAAEsO,QAAOC,SAAUF,EACnBG,EAAc5M,EAAQ,EAC5B,OAAOC,EAAe,CAAEH,EAAG4M,EAAO3M,EAAG4M,GAASC,CAAW,GAE3D,CAAC5M,EAASC,CAAc,CAC1B,CAE8B,CAChC,yCCPA,SAAwB4M,GAAY,CAAE7P,QAAO8P,UAASC,cAAaC,WAA4B,EAAG,CAC1F,MAAEC,eAAgBrL,GAAuB,EACzCsL,EAAM9R,SAAgC,IAAI,EAC1C+R,EAAiB3R,cACpB4R,GAAiB,CAChB,GAAIA,IAASpQ,EACX,OAGIqQ,QAAWD,EAAKlR,KAAK,EACf+Q,EAAA,CAAEpV,GAAIiV,EAAS9P,MAAOqQ,EAAU,CAE9C,GAACrQ,EAAOiQ,EAAaH,CAAO,CAC9B,EAEM,CAAEnR,QAAO2R,WAAUC,SAAQC,WAAcC,KAAqBzQ,EAAOmQ,EAAgBD,EAAK,CAC9FQ,cAAe,GAChB,EAEKC,EAAUzG,GAAG,CAAC8F,EAAW9U,GAAM0V,WAAajS,EAAwB,KAAhBzD,GAAM2V,OAAc,CAAC,EAE/E,OACGzV,MAAAwG,GAAA,CACC,cAAY,eACZ,QAAQ,UACR,MAAK,GACL,IAAAsO,EACA,MAAAvR,EACA,UAAWgS,EACX,YAAAZ,EACA,SAAAO,EACA,OAAAC,EACA,UAAAC,EACA,CAEN,uqBCdA,SAAeM,GAAAC,EAAA,sBAAAC,QAAAC,KAAA,KAAsB,CAAAzU,OAAA0U,YAAAC,YAAAC,cAAAL,EAGnCM,EAAkBjT,SAA+B,IAAI,EACrD,CAAAgN,QAAAkG,UAAAjG,eAAwCzG,GAAuB,EAE/D2M,EAA0BjV,GAAkBkV,EAAwC,EACpFnV,EAAuBC,GAAkBmV,EAA+B,EACxEvI,EAAoBD,GAAayI,EAA4B,EAAEC,MAAAX,EAAA5F,QAAA4F,OAAAxU,EAAAU,QAAAL,QAAAmU,EAAAxU,OAAA3B,IAAAmW,OAAA3F,GAAA2F,EAAA,KAAAM,GAERK,MAAM,CAC3D,CAAA/R,KACQ,OAAMyF,MACL,cAAaC,KACdsM,GAAkBC,SACd,GAAGhW,EAAS,KAAI2J,QACjBA,IAAM4F,EAAM5O,EAAI3B,EAAG,GAE9B,CAAA+E,KACQ,OAAMyF,MACL,UAASC,KACVwM,GAAmBtM,QAChBA,IAAM8L,EAAQ9U,EAAI3B,EAAG,EAAC4K,SACrBjJ,EAAIU,QAAQL,SAAY,GAEpC,CAAA+C,KAAQ,WACR,CAAAA,KACQ,OAAMyF,MACL,eAAcC,KACfI,GAAOmM,SACH,GAAGhW,EAAS,OAAM2J,QACnBA,IAAM6F,EAAY,CAAC7O,EAAI3B,EAAG,CAAC,EACrC,EACFmW,KAAA5F,EAAA5O,OAAAU,QAAAL,OAAAmU,EAAA,GAAAxU,EAAA3B,GAAAmW,KAAA3F,EAAA2F,KAAAM,EAAAN,KAAAW,KAAAX,EAAA,GAvBD,MAAAe,CAAA,EAAwBvC,GAA+BmC,CAuBtD,EAAEK,MAAAhB,EAAA,KAAAiB,OAAAC,IAAA,8BAaKF,EAAA,CAAApS,KACE,OACR,EAACoR,KAAAgB,KAAAhB,EAAA,GAAAmB,MAAAnB,EAAA,KAAAxU,EAAA3B,IAJasX,EAAA,CAAAtX,GACV2B,EAAI3B,GAAG2B,KACLwV,EAELI,qBACqBC,EACxB,EAACrB,EAAA,GAAAxU,EAAA3B,GAAAmW,KAAAmB,KAAAnB,EAAA,GAfD,MAAAsB,WAAAC,EAAAC,UAAAC,EAAAC,aAAAC,YAAAC,aAAAC,aAAAC,SAAAzE,QASI0E,GAAYZ,CAMf,EAAEa,MAAAhC,EAAA,KAAAxU,EAAA3B,IAAAmW,EAAAO,SAAAP,EAAA3U,QAAA4W,MAEsBD,EAAAvU,IAAA,CACvBA,GAAK4C,gBAAiB,EAKlBhF,IAAc4W,KAAQ,GAAKxU,GAAKyU,SAAY,IAK9B3B,EAAA,CAAA1W,GAAM2B,EAAI3B,GAAK,CAAC,EACnCmW,EAAA,GAAAxU,EAAA3B,GAAAmW,MAAAO,EAAAP,EAAA,IAAA3U,EAAA4W,KAAAjC,MAAAgC,KAAAhC,EAAA,IAZD,MAAAmC,GAAyBH,EAYvBI,OAAApC,EAAA,MAAAxU,EAAAyD,QAEoBmT,GAAA5W,EAAIyD,QAAWoT,GAAoB7W,EAAIyD,MAAO,EAAC+Q,EAAA,IAAAxU,EAAAyD,OAAA+Q,MAAAoC,OAAApC,EAAA,IAArE,MAAAsC,EAAsBF,GAAgDG,OAAAvC,EAAA6B,SAAA7B,QAAA3C,GAClDwE,OAAcxE,iBAAIxT,KAAQ4T,IAAQJ,KAAI7R,KAAKsC,UAATuP,eAAuBzO,MAAEyO,KAAI7R,KAAKsC,UAATuP,eAAyBnO,MAAA,EAAC8Q,MAAA6B,EAAA7B,MAAA3C,EAAA2C,MAAAuC,OAAAvC,EAAA,IAAzG,MAAAwC,EAAoBD,GAAsFE,OAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,EAAAC,GAAAC,EAAAC,GAAAC,EAAAC,GAAAxD,KAAAsC,SAAAtC,QAAAG,GAAAH,EAAA,MAAAxU,EAAAyD,QAAA+Q,EAAAxU,QAAAiY,UAAAzD,EAAA,MAAAxU,EAAAU,QAAAL,QAAAmU,EAAAxU,QAAA3B,IAAAmW,EAAA,MAAAxU,EAAAkY,gBAAA1D,EAAAxU,QAAAmY,SAAA3D,QAAAxU,EAAAoY,WAAA5D,EAAA,MAAAxU,EAAAwD,OAAAgR,EAAAuB,SAAAvB,EAAA,MAAAyB,GAAAzB,EAAA,MAAA9H,GAAA8H,EAAAmC,UAAAnC,QAAAE,GAAAF,EAAA,MAAA6B,GAAA7B,EAAA8B,SAAA9B,EAAAwC,SAAAxC,EAAA,MAAAI,GAAAJ,EAAA,MAAAe,GAAAf,EAAA0B,SAAA1B,QAAA2B,GAAA3B,EAAA,MAAA4B,EAAA,CAAAiC,OAAAC,EAAA,CAGpGtY,KAAIkY,iBAAoB,KAAI,CAC9BG,GAAO,CAAC,KAAM,IAAI,EAAlBC,QAGFC,SAAevY,EAAIiY,SAAYjY,EAAIkY,eACnC,GAAIK,KAAW,EAAC,CACdF,GAAO,CAAC,KAAM,OAAO,EAArBC,QACDE,OAAAC,GAAAjE,WAAA+D,GAAA,CACDG,SAAkBC,KAAIC,IAAKL,EAAM,EAE5BC,GAAAD,GAAS,EAAT,QAAyBE,GAAAI,GAAeH,GAAWA,GAAY,EAAII,EAAiB,EAACtE,MAAA+D,GAAA/D,MAAAgE,GAAAhE,MAAAiE,QAAAD,GAAAhE,EAAA,IAAAiE,GAAAjE,EAAA,IAD1F6D,GAAO,CACL,GAAGG,EAAsB,GAAGC,EAA4D,GACxFM,GAAeR,EAAM,CAAC,EAZ1B,MAAAS,GAAAC,EAAA,EAAsCZ,GAiB5BG,GAAAnC,EAAA,YAA0BoC,MAAAjE,QAAA2B,GACvBsC,EAAAS,GAAGC,UAAUC,SAAUjD,CAAS,EAAC3B,MAAA2B,EAAA3B,MAAAiE,KAAAjE,EAAA,IAEpC,MAAA6E,GAAA/C,EAAUU,EAAA,qBAAV,UAA2DsC,OAAA9E,EAAA,MAAAgE,IAAAhE,EAAAiE,SAAAjE,EAAA6E,UAAA7E,QAAA4B,GAJnDkD,GAAA,CAAAC,OACRf,GAA0BrC,UACvBsC,EAAiCrC,aAAAnH,OAEpCoK,EACV,EAAC7E,MAAAgE,GAAAhE,MAAAiE,EAAAjE,MAAA6E,GAAA7E,MAAA4B,EAAA5B,MAAA8E,OAAA9E,EAAA,IALD,MAAAgF,GAAkBF,GAWZG,GAAA/E,GAAahW,EAAKgW,UAClBgF,EAAC/E,IAAajW,EAAKib,SACnBC,EAAAlN,IAAgB1M,EAAI3B,IAAOK,EAAKmb,WAAWrF,EAAAiF,UAAAjF,QAAAkF,GAAAlF,EAAA,MAAAoF,GAJlCrC,EAAA7J,GAAG,CACZhP,EAAKgM,MACL+O,GACAC,EACAE,CAA2C,CAC5C,EAACpF,MAAAiF,GAAAjF,MAAAkF,EAAAlF,MAAAoF,EAAApF,MAAA+C,KAAA/C,EAAA,IACG0B,KACIS,MACMpB,KAGAuE,SAAA9Z,EAAIyD,QAAJ,UAAwB+Q,EAAAgF,UAAAhF,QAAAsF,IAFhCnC,EAAA,IACF6B,GAAS,YACCM,EACf,EAACtF,MAAAgF,GAAAhF,MAAAsF,GAAAtF,MAAAmD,KAAAnD,EAAA,IAC0BoD,GAAA,gBAAAmC,MAAAvF,QAAAsC,GAEUiD,EAAA,IAAKjD,CAAc,EAACtC,MAAAsC,EAAAtC,MAAAuF,KAAAvF,EAAA,IAE1BwF,QAAA3D,GAAc3X,EAAK2X,WAAa4D,GAAA5D,GAAA,CAAeW,GAAetY,EAAKwb,WAAWC,MAAA3F,EAAAwF,SAAAxF,QAAAyF,IAA9FE,EAAAzM,GAAG,CAAChP,EAAK0b,KAAOJ,EAAgCC,EAA8C,CAAC,EAACzF,MAAAwF,EAAAxF,MAAAyF,GAAAzF,MAAA2F,KAAA3F,EAAA,IAAA6F,OAAA7F,EAAA,MAAAiB,OAAAC,IAAA,8BAK3G2E,SAACC,GAAe,IAAA9F,MAAA6F,OAAA7F,EAAA,IAAA+F,OAAA/F,EAAAuB,SAAAvB,QAAAyB,GAAAzB,EAAA,MAAA2F,GANlBI,GAAA3b,MAAA,OACa,WAAAub,EACNtF,MAAS,GACVkB,EACAE,KAEJoE,SACFA,EAAA,GAAO7F,MAAAuB,EAAAvB,MAAAyB,EAAAzB,MAAA2F,EAAA3F,MAAA+F,OAAA/F,EAAA,IAAAA,EAAAuF,SAAAvF,QAAA+F,IART1C,EAAAjZ,MAAA,OAAgB,UAAAF,EAAK8b,OAAgB,MAAAT,EAAgC,YACnEQ,SAQFA,EAAA,GAAM/F,MAAAuF,EAAAvF,MAAA+F,GAAA/F,MAAAqD,KAAArD,EAAA,IACU6C,EAAA3Y,EAAK8L,OAAOiQ,OAAAjG,EAAAxU,QAAA3B,IAAAmW,EAAA,MAAAxU,EAAAwD,OAExBiX,GAAA7b,EAAA,IAACyU,IAAmB,MAAArT,EAAIwD,MAAiB,QAAAxD,EAAI3B,GAAiB,yBAAgB,GAAAmW,EAAA,IAAAxU,EAAA3B,GAAAmW,EAAA,IAAAxU,EAAAwD,MAAAgR,MAAAiG,OAAAjG,EAAA,IAAAkG,OAAAlG,EAAA,MAAAG,GAAAH,EAAA,MAAAxU,EAAA3B,IAAAmW,EAAA,MAAAI,GACZ8F,OAAM9F,EAAW,CAACD,EAAW3U,EAAI3B,EAAG,EAACmW,MAAAG,EAAAH,EAAA,IAAAxU,EAAA3B,GAAAmW,MAAAI,EAAAJ,MAAAkG,OAAAlG,EAAA,IAAAmG,OAAAnG,QAAAG,GACpGgG,GAAAhG,EAAY/V,MAACgc,GAAkC,UAAhBC,GAAgB,IAAArG,MAAAG,EAAAH,MAAAmG,OAAAnG,EAAA,IAAAsG,OAAAtG,EAAAkG,UAAAlG,QAAAmG,IADlDG,GAAAlc,EAAA,IAACgK,IAAsB,wBAAmB,uBAAwB,QAAA8R,GAC/DC,SACHA,EAAA,GAAanG,MAAAkG,GAAAlG,MAAAmG,GAAAnG,MAAAsG,OAAAtG,EAAA,IAAAA,EAAAiG,UAAAjG,SAAAsG,IAJfxD,gBAAgB,UAAA5Y,EAAKqc,SACnBN,aACAK,IAGF,EAAMtG,MAAAiG,GAAAjG,OAAAsG,GAAAtG,OAAA8C,KAAA9C,EAAA,KACUyC,GAAAvY,EAAKsc,QAAQC,OAAAzG,EAAA,OAAAiB,OAAAC,IAAA,8BAEzBuF,GAA8Crc,MAAA,OAA9B,UAAAF,EAAKwc,UAAY,SAAO,YAAM1G,OAAAyG,OAAAzG,EAAA,KAAAA,EAAAxU,SAAAU,QAAAL,QADhD6W,EAAAzY,EAAA,YAAgB,UAAAC,EAAKyc,UACnBF,0BACMjb,SAAIU,UAAQL,MAAQ,IAC5B,EAAML,SAAAU,QAAAL,OAAAmU,OAAA0C,KAAA1C,EAAA,KAAA4G,OAAA5G,EAAA,OAAAiB,OAAAC,IAAA,8BAEJ0F,GAA4Cxc,MAAA,OAA5B,UAAAF,EAAKwc,UAAY,SAAK,UAAM1G,OAAA4G,OAAA5G,EAAA,KAAA6G,MAAA7G,EAAA,OAAAxU,EAAAoY,WACtCkD,KAAetb,EAAIoY,UAAY,CAAAmD,SAAYC,GAAkB,EAAChH,EAAA,KAAAxU,EAAAoY,UAAA5D,OAAA6G,KAAA7G,EAAA,KAAAA,SAAA6G,GAFtElE,EAAA1Y,EAAA,YAAgB,UAAAC,EAAKyc,UACnBC,aACAxc,MAAA,OAAMyc,SAA+DA,CAAA,IACvE,EAAM7G,OAAA6G,EAAA7G,OAAA2C,KAAA3C,EAAA,KAAAiH,OAAAjH,EAAA,OAAAiB,OAAAC,IAAA,8BAEJ+F,GAA0C7c,MAAA,OAA1B,UAAAF,EAAKwc,UAAY,SAAG,QAAM1G,OAAAiH,OAAAjH,EAAA,KAAAkH,OAAAlH,EAAA,OAAAxU,EAAAmY,SACpCmD,MAAetb,EAAImY,QAAU,CAAAoD,SAAYC,GAAkB,EAAChH,EAAA,KAAAxU,EAAAmY,QAAA3D,OAAAkH,OAAAlH,EAAA,KAAAA,SAAAkH,IAFpEtE,EAAA3Y,EAAA,YAAgB,UAAAC,EAAKyc,UACnBM,aACA7c,MAAA,OAAM8c,SAA6DA,EAAA,IACrE,EAAMlH,OAAAkH,GAAAlH,OAAA4C,KAAA5C,EAAA,KACUsD,GAAApZ,EAAKyc,UAAU3G,EAAA,OAAAiB,OAAAC,IAAA,8BAC7BqC,EAA+CnZ,MAAA,OAA/B,UAAAF,EAAKwc,UAAY,SAAQ,aAAM1G,OAAAuD,KAAAvD,EAAA,KAC9CwD,GAAAgB,KAAe,KACdpa,MAA0C,OAApCia,SAAe7Y,KAAIiY,QAAS,CAAE,UAEpC,MAAgB,WAAAvK,GAAG,CAACuL,IAAmBva,EAAMua,EAAe,CAAC,CAAC,EAC5D,UAAAra,MAAA,QAAiB,UAAAF,EAAKid,OAAU9C,SAAe7Y,KAAIiY,QAAS,EAAE,EAC7DrZ,EAAA,IAAAgd,GAAA,CAAe,UAAAld,EAAKmd,YAAe7C,SAAWA,EAAA,IACjD,EACDxE,MAAAsC,EAAAtC,MAAAG,EAAAH,EAAA,IAAAxU,EAAAyD,OAAA+Q,EAAA,IAAAxU,EAAAiY,SAAAjY,QAAAU,QAAAL,OAAAmU,EAAA,IAAAxU,EAAA3B,GAAAmW,EAAA,IAAAxU,EAAAkY,eAAA1D,EAAA,IAAAxU,EAAAmY,QAAA3D,EAAA,IAAAxU,EAAAoY,UAAA5D,EAAA,IAAAxU,EAAAwD,MAAAgR,MAAAuB,EAAAvB,MAAAyB,EAAAzB,MAAA9H,EAAA8H,MAAAmC,GAAAnC,MAAAE,EAAAF,MAAA6B,EAAA7B,MAAA8B,EAAA9B,MAAAwC,EAAAxC,MAAAI,EAAAJ,MAAAe,EAAAf,MAAA0B,EAAA1B,MAAA2B,EAAA3B,MAAA4B,EAAA5B,MAAAyC,GAAAzC,MAAA0C,EAAA1C,MAAA2C,EAAA3C,MAAA4C,EAAA5C,MAAA6C,EAAA7C,MAAA8C,EAAA9C,MAAA+C,EAAA/C,MAAAgD,GAAAhD,MAAAiD,GAAAjD,MAAAkD,GAAAlD,MAAAmD,EAAAnD,MAAAoD,GAAApD,MAAAqD,EAAArD,MAAAsD,GAAAtD,MAAAuD,EAAAvD,MAAAwD,QAAAf,GAAAzC,EAAA,IAAA0C,EAAA1C,EAAA,IAAA2C,EAAA3C,EAAA,IAAA4C,EAAA5C,EAAA,IAAA6C,EAAA7C,EAAA,IAAA8C,EAAA9C,EAAA,IAAA+C,EAAA/C,EAAA,IAAAgD,GAAAhD,EAAA,IAAAiD,GAAAjD,EAAA,IAAAkD,GAAAlD,EAAA,IAAAmD,EAAAnD,EAAA,IAAAoD,GAAApD,EAAA,IAAAqD,EAAArD,EAAA,IAAAsD,GAAAtD,EAAA,IAAAuD,EAAAvD,EAAA,IAAAwD,GAAAxD,EAAA,IAAA6D,MAAA7D,EAAAsD,WAAAtD,SAAAuD,GAAAvD,EAAA,OAAAwD,IACGK,EAAA5Z,EAAA,WAVU,WAAAqZ,GACdC,YACCC,IAQH,EAAMxD,OAAAsD,GAAAtD,OAAAuD,EAAAvD,OAAAwD,GAAAxD,OAAA6D,KAAA7D,EAAA,KAAAgE,OAAAhE,EAAAyC,WAAAzC,EAAA,OAAA0C,GAAA1C,EAAA2C,UAAA3C,EAAA,OAAA4C,GAAA5C,SAAA6D,GAvBRG,GAAA/Z,EAAA,WAAgB,WAAAwY,GACdC,YAIAC,EAIAC,EAIAiB,GAWF,EAAM7D,OAAAyC,GAAAzC,OAAA0C,EAAA1C,OAAA2C,EAAA3C,OAAA4C,EAAA5C,OAAA6D,EAAA7D,OAAAgE,OAAAhE,EAAA,KAAAiE,OAAAjE,EAAA6C,UAAA7C,SAAA8C,GAAA9C,EAAA,OAAAgE,IACFC,GAAAha,EAAA,WAhCU,WAAA4Y,EACdC,YAMAkB,IAyBF,EAAMhE,OAAA6C,EAAA7C,OAAA8C,EAAA9C,OAAAgE,GAAAhE,OAAAiE,OAAAjE,EAAA,KAAA6E,OAAA,OAAA7E,EAAA,OAAA+C,GAAA/C,EAAA,OAAAgD,IAAAhD,EAAA,OAAAiD,IAAAjD,EAAAkD,WAAAlD,EAAAmD,UAAAnD,EAAAoD,WAAApD,EAAAqD,UAAArD,SAAAiE,IA1DRY,iBACa,UAAA9B,EAMNrB,IAASsB,GACLb,WACMpB,iBACR,MAAAoC,EAIK,cAAAC,GAEZC,YAUAY,IAiCF,EAAMjE,OAAA+C,EAAA/C,OAAAgD,GAAAhD,OAAAiD,GAAAjD,OAAAkD,GAAAlD,OAAAmD,EAAAnD,OAAAoD,GAAApD,OAAAqD,EAAArD,OAAAiE,GAAAjE,OAAA6E,OAAA7E,EAAA,KA3DN6E,EA2DM,CAxJK,SAAAxD,IAAA,CAiDiB,QAAK,CAjDtB,SAAAX,GAAA4G,EAAA,QAQ+B/b,EAAK2M,WAAY,CARhD,SAAAuI,GAAA8G,EAAA,QAOuChc,EAAKF,cAAe,CAP3D,SAAAmV,GAAAjV,EAAA,QAM0CA,EAAKic,uBAAwB,gDCjCtF,SAAwBC,GAAgB,CAAE5d,KAAIoF,QAA6B,EAAG,CACtE,MACJqS,WAAYC,EACZC,UAAWC,EACXC,aACAC,YACAC,cACEG,GAAY,CACdlY,KACA2B,KAAM,CACJoD,KAAM,WACR,EACAwS,qBAAsBA,IAAM,GAC5B3M,SAAU,GACX,EAEKuQ,EAAY,CAChBrD,UAAW+C,GAAIgD,UAAU9C,SAASjD,CAAS,EAC3CC,YACF,EAGE,OAAAxX,MAAC,MACC,WAAWF,GAAMyd,SACjB,IAAKjG,EACDH,KACAE,KACJ,MAAO,CACL,GAAGuD,EACH,GAAI/V,EAAS,CAAE,YAAaA,GAAW,EAAC,EAE1C,SAAU,GACV,CAEN,0EC/BA,SAAwB2Y,GAAaC,EAA0B,CACvD,MAAEC,gBAAiBD,EAEzB,OACG5d,OAAA,OAAI,UAAWC,GAAM4G,MACpB,UAAA1G,MAAC2d,IAAM,eAAgB,CAAEC,UAAW,MAAOC,aAAc,QAAS,EACjEhe,EAAA,YAAI,UAAWC,GAAMge,OACpB,UAACje,OAAA6K,GAAA,CAAO,QAAS,IAAMgT,EAAajZ,EAAeC,KAAK,EAAG,QAAQ,UAAU,KAAK,QAChF,UAAA1E,EAAA,IAACkP,GAAK,oBAER,EAEAlP,EAAA,IAAC+d,GAAA,EAAgB,EAEjBle,OAAC6K,GAAO,SAAS,IAAMgT,EAAajZ,EAAeQ,KAAK,EAAG,QAAQ,UAAU,KAAK,QAChF,UAAAjF,EAAA,IAACkP,GAAQ,oBACX,GACF,IACF,CAEJ,wSCCM8O,GAAeC,OAAK,IAAMC,GAAA,WAAO,4BAAgB,6IAAC,EAexD,SAAeC,GAAAxI,EAAA,YAAAC,QAAAC,KAAA,KAAiB,CAAArU,QAAAmO,YAAA7N,UAAArC,KAAA2e,kBAAAC,eAAA1I,EAA6EY,MAAAX,EAAA9T,QAAA8T,OAAApU,GAI/C+U,MAAM+H,GAAiB9c,EAAOM,CAAO,EAAC8T,KAAA9T,EAAA8T,KAAApU,EAAAoU,KAAAW,KAAAX,EAAA,GAAlG,MAAAvD,EAAAC,CAAA,EAAwC1P,WAAoB2T,CAAsC,EAClG,CAAAgI,EAAAC,CAAA,EAAgC5b,WAAgCwb,CAAe,EAAExH,MAAAG,EAAAnB,EAAA9T,QAAA8T,OAAApU,GAAAoU,EAAA,KAAAwI,GAMvExH,MAAA,CACQ0H,KAAiB9c,EAAOM,CAAO,CAAC,EAChD0c,EAAYJ,CAAe,CAAC,KAC1B5c,EAAOM,EAASsc,CAAe,EAACxI,KAAA9T,EAAA8T,KAAApU,EAAAoU,KAAAwI,EAAAxI,KAAAgB,EAAAhB,KAAAmB,IAAAH,EAAAhB,EAAA,GAAAmB,EAAAnB,EAAA,IAHpCvQ,YAAUuR,EAGPG,CAAiC,EAEpC,MAAAxE,iBAAAkM,gBAAAC,eAAuDC,GAAmBlf,CAAE,EAE5EmQ,EAAqBpG,GAAuB,EAC5CwE,EAAuBH,GAAauI,EAA+B,EAGnE,CAAA3N,cAAuBP,GAAoB,EAE3CoB,EAA4BpI,GAAkBmV,EAAoC,EAClFhG,EAAenP,GAAkBoV,EAAuB,EACxDrC,EAAsB/S,GAAkB+V,EAA8B,EACtE2H,EAAyB1d,GAAkB2d,EAAiC,EAC5EhP,EAAoB3O,GAAkB4d,EAAkC,EAExEC,GAAkB/b,SAA8B,IAAI,EACpDgc,GAAkBhc,SAA8B,IAAI,EACpDic,EAAoBjc,SAA8B,IAAI,EAAE4U,OAAAhC,EAAA6I,QAAA7I,OAAA8I,GAMtD9G,IAAA7B,EAAApC,IAAA,CACMoC,EACF0I,EAAc9K,CAAO,EAErB+K,EAAY/K,CAAO,CACpB,EACFiC,KAAA6I,EAAA7I,KAAA8I,EAAA9I,MAAAgC,OAAAhC,EAAA,IAPH,MAAA7F,EAA4B6H,GAS1BI,OAAApC,EAAA9T,SAAA8T,EAAA,MAAAhG,GAAAgG,EAAAjG,SAAAiG,EAAA,MAAA7F,GAAA6F,QAAA/F,GAGkCmI,GAAA,CAAAlW,UAAA6N,YAAAC,eAAAC,cAAAE,qBAMpC,EAAC6F,MAAA9T,EAAA8T,MAAAhG,EAAAgG,MAAAjG,EAAAiG,MAAA7F,EAAA6F,MAAA/F,EAAA+F,MAAAoC,OAAApC,EAAA,IAND5B,QAAiBtE,GAAmBsI,EAMnC,EAAEG,MAAAvC,EAAA,MAAAtM,GAAAsM,EAAA5B,SAAA4B,EAAAvF,SAAAuF,QAAA5H,GAGgBmK,EAAA,CAAA9H,SAAA2D,WAAA1K,sBAAA0E,gBAKnB,EAAC4H,MAAAtM,EAAAsM,MAAA5B,EAAA4B,MAAAvF,EAAAuF,MAAA5H,EAAA4H,MAAAuC,KAAAvC,EAAA,IALD7B,GAAmBoE,CAKlB,EAACe,MAAAtD,EAAA9T,SAAA8T,EAAA,MAAAhG,GAAAgG,EAAArD,SAAAqD,EAAA,MAAA7F,GAAA6F,QAAAvD,GAGwB6G,EAAA,CAAApX,UAAAuQ,eAAAC,kBAAAC,iBAAAxC,sBAAAH,cAO1B,EAACgG,MAAA9T,EAAA8T,MAAAhG,EAAAgG,MAAArD,EAAAqD,MAAA7F,EAAA6F,MAAAvD,EAAAuD,MAAAsD,KAAAtD,EAAA,IAPDsJ,QAAY9M,GAAc8G,CAOzB,EAAEC,MAAAvD,EAAA9T,SAAA8T,QAAArD,GAAAqD,EAAA,MAAAvD,GAMM8M,KAAqB9M,EAAcvQ,EAASyQ,CAAc,EAACqD,MAAA9T,EAAA8T,MAAArD,EAAAqD,MAAAvD,EAAAuD,MAAAuD,KAAAvD,EAAA,IADpE,MAAAwJ,EACEjG,EAC0CC,OAAAxD,EAAA,MAAAsJ,EAAApM,cAAApP,SAAAkS,EAAAgJ,SAAAhJ,QAAAwJ,GAGlChG,QACRwF,EAAiBlK,GAAA,CACf,GAAI,CAACuK,EAAWvb,SAAYwb,EAAGpM,cAAcpP,QAAQ,OAGrDiB,QAAcya,EAAWpN,QAAS0C,CAAO,EACrC/P,IAAU,IAGdsa,EAAWvb,QAAQ2b,cAAe,CAAA1a,QAAA2a,MAEzB,QAAOC,SACJ,SAAQ5F,OACV,KACT,EACF,EAEM,KACLiF,EAAiB,IAAI,CAAC,GAEzBM,QAAApM,cAAApP,QAAAkS,MAAAgJ,EAAAhJ,MAAAwJ,EAAAxJ,MAAAwD,OAAAxD,EAAA,IAAAyC,OAAAzC,EAAA,MAAAsJ,EAAApM,eAAA8C,EAAA,MAAAgJ,GAAAhJ,EAAA,MAAAwJ,GAAE/G,GAAA,CAAC+G,EAAaF,EAAGpM,cAAgB8L,CAAgB,EAAChJ,EAAA,IAAAsJ,EAAApM,cAAA8C,MAAAgJ,EAAAhJ,MAAAwJ,EAAAxJ,MAAAyC,OAAAzC,EAAA,IApBrDvQ,YAAU+T,GAoBPf,EAAkD,EAACC,OAAAC,EAAA3C,EAAAvF,SAAAuF,QAAA9T,GAAA8T,EAAA,MAAA8I,GAI5CpG,OAAA,CACR,GAAI,CAACjI,EAAM,OAIX/O,QAAcQ,EAAQuO,CAAM,EACxB/O,GAAS,WAAYA,GACvBod,EAAYpd,EAAKwD,MAAO,CACzB,KACCuL,EAAQvO,EAAS4c,CAAW,EAAC9I,MAAAvF,EAAAuF,MAAA9T,EAAA8T,MAAA8I,EAAA9I,MAAA0C,GAAA1C,MAAA2C,IAAAD,GAAA1C,EAAA,IAAA2C,EAAA3C,EAAA,KATjCvQ,YAAUiT,GASPC,CAA8B,EAACC,OAAA5C,EAAAvF,SAAAuF,EAAA,MAAAsJ,EAAApM,cAAApP,SAAAkS,EAAA,MAAAnN,GAAAmN,QAAA3B,GAGxBuE,OAAA,CACJ0G,EAAGpM,cAAcpP,SAAY+E,IAAeE,GAAOK,MAAnD,CAA6DqH,GAIjE4D,EAAc5D,CAAM,CAAC,EACtBuF,MAAAvF,EAAA6O,QAAApM,cAAApP,QAAAkS,MAAAnN,EAAAmN,MAAA3B,EAAA2B,MAAA4C,OAAA5C,EAAA,IAAA6C,MAAA7C,EAAAvF,SAAAuF,QAAAsJ,EAAApM,eAAA8C,EAAAnN,SAAAmN,QAAA3B,GAAEwE,EAAA,CAAChQ,EAAY4H,EAAQ4D,EAAeiL,EAAGpM,aAAc,EAAC8C,MAAAvF,EAAAuF,EAAA,IAAAsJ,EAAApM,cAAA8C,MAAAnN,EAAAmN,MAAA3B,EAAA2B,MAAA6C,KAAA7C,EAAA,IANzDvQ,YAAUmT,GAMPC,CAAsD,EAACC,OAAA9C,EAAAsJ,QAAApM,cAAApP,SAAAkS,EAAAnN,SAAAmN,QAAA9T,GAAA8T,EAAA,MAAA8I,GAAA9I,EAAA,MAAAyI,GAAAzI,EAAA,MAAA3B,GAGhDyE,OAAA,CACJwG,KAAGpM,cAAcpP,SAAY+E,IAAeE,GAAOC,KAAnD,EAA4DyV,WAAW3c,iBAAiB,OAK5F8d,QAAc1d,EAAQuc,EAAW3c,eAAgB,EAC7C8d,GAAS,WAAYle,GACvBod,EAAYpd,EAAKwD,MAAO,EAE1BmP,EAAcoK,EAAW3c,eAAgB,CAAC,EAC3Cwd,QAAApM,cAAApP,QAAAkS,MAAAnN,EAAAmN,MAAA9T,EAAA8T,MAAA8I,EAAA9I,MAAAyI,EAAAzI,MAAA3B,EAAA2B,MAAA8C,OAAA9C,EAAA,IAAe,MAAA+C,EAAA0F,iBAAW3c,gBAAiBkX,OAAAhD,EAAAsJ,QAAApM,eAAA8C,EAAA,MAAAnN,GAAAmN,EAAA,MAAA9T,GAAA8T,EAAA8I,SAAA9I,QAAA3B,GAAA2B,EAAA,MAAA+C,GAAzCC,GAACnQ,GAAYkQ,EAA8B7W,EAAS4c,EAAazK,EAAeiL,EAAGpM,aAAc,EAAC8C,EAAA,IAAAsJ,EAAApM,cAAA8C,MAAAnN,EAAAmN,MAAA9T,EAAA8T,MAAA8I,EAAA9I,MAAA3B,EAAA2B,MAAA+C,EAAA/C,MAAAgD,OAAAhD,EAAA,IAXrGvQ,YAAUqT,GAWPE,EAAkG,EAGrG6G,QAAmBhX,IAAeE,GAAOK,KAAM6P,OAAAjD,QAAApU,GAG3BA,KAAKK,GAAI,EAAE,EAAC+T,MAAApU,EAAAoU,MAAAiD,OAAAjD,EAAA,IAAhC,MAAA8J,GAAoB7G,GAGpB8G,GAAoBtB,iBAAWsB,YAC/BC,GAAiBvB,iBAAWuB,SAAW9G,OAAAlD,EAAA,MAAAvF,GAAAuF,EAAA9T,SAAA8T,QAAArD,GAAAqD,EAAA,MAAA7F,GAAA6F,EAAA6J,SAAA7J,EAAA8J,UAAA9J,EAAA,MAAA2I,GAAA3I,EAAA+J,UAAA/J,QAAAgK,IAIrC9G,IAAA+G,EAAAC,IAAA,CAIE,GAFmBpL,EAAO/Q,WAAY,MAAM,EAE9B,CACZ,MAAAoc,GAAiBrL,EAAOsL,MAAO,MAAM,EAAI,GACzCC,EAAuB1B,EAASwB,EAAQ,EAGtC,OAAAlgB,EAAA,KAAC+J,WAAA,CACE6V,UAAcQ,qBAAcC,gBAAmB,GAC7ClgB,MAAAiO,GAAA,CACkB,gBAAG,KACP8R,eACI,gBAAAE,iBAAcpR,WAEnC,SACCwO,GAAkC3I,IAAMoL,EAAW,OAAAG,iBAAcpR,aAA5C6F,CACxB,IATeA,CASf,EAIJyL,QAAcre,EAAQ4S,CAAO,EAC7B0L,EAAsB7B,EAAS7J,CAAO,EAElC,IAACpT,GAAD,CAAW8e,EACN,YAGTC,SAAeV,KAAgBre,EAAK7B,GACpCqW,EAAkBxU,EAAK7B,KAAQ4Q,EAC/BiQ,GAAgBle,GAAcd,CAAK,EACnCuN,GAAoBuR,EAAavR,cAAiB,GAA9B,UAA+CuR,EAAavR,YAChF0R,GAAgB5b,IAAU,EAC1B6b,GAAe9L,IAAYgL,GAC3Be,GAA0BL,EAAaM,SAAYN,EAAazM,QAAWyM,EAAazM,QAA9D,KAC1BgN,GAAyBP,EAAazM,QACtCiN,GAAkBN,GAAU/N,EAAejR,EAAK7B,EAAW,EAAzC,GAGhB,OAAAI,EAAA,KAAC+J,WAAA,CAEE6V,UAAA3J,MAAA,CAA4ByK,IAC1BvgB,EAAA,IAAAmP,GAAA,CAAyB,mBAA2B,iBAAA7N,EAAK7B,GAAkBghB,cAAiB,GAE9FH,SACE5K,GAAmBpU,MAAI6e,EAAcrK,YAAsBC,aAAuBhG,WAAkBA,WAErG,MACa,WAAAjQ,GAAK+gB,aACH,uBAAST,EAAa/b,UAAW,GACvC,MAAAwK,GAAA,aAA6BA,IAA7B,GAEN9M,aAAcT,CAKf,GAJEzB,OAGM,MAHU,WAAAC,GAAKghB,WAClBxf,YAAKyf,MAAS/gB,MAACghB,GAAwB,WAAAlhB,GAAKihB,KAAK,QAClD,MAAgB,WAAAjhB,GAAK6E,MAASyb,WAAa/b,UAAY,IACzD,EAEFrE,MAeM,OAfU,UAAAF,GAAKwB,MAA4B,IAAAwU,EAAAiJ,GAAAnS,OAC/C,SAAA5M,EAAA,IAACge,IACO,KAAA1c,EAAKkD,KACH,OAAA4b,EAAaa,OACT,WAAAb,EAAa/b,WACnB/C,OACE,OAAA8e,EAAac,SACVpL,YACHuK,UACG,UAAAD,EAAae,UACd,SAAAf,EAAac,SAAbtB,GAAAhT,OACC,UAAAgT,KAAawB,GAAQC,KACtB,SAAAjB,EAAakB,SACL,iBAAAlB,EAAamB,iBAAiB,CAblBjgB,IAAK7B,EAevC,GACF,EAGDggB,GAAA3J,GAAA,CAA4B0K,IAC1BxgB,MAAAmP,GAAA,CAAyB,kBAA0B,iBAAA7N,EAAK7B,GAAkBkhB,YAAeA,EAC5F,KAxCarf,EAAK7B,EAyCpB,CAAW,EAEdmW,MAAAvF,EAAAuF,MAAA9T,EAAA8T,MAAArD,EAAAqD,MAAA7F,EAAA6F,MAAA6J,EAAA7J,MAAA8J,GAAA9J,MAAA2I,EAAA3I,MAAA+J,GAAA/J,MAAAgK,GAAAhK,MAAAkD,OAAAlD,EAAA,IApFH,MAAA4L,GAAoB1I,GAwFhBzG,KAAY5Q,OAAU,EAAC,CAAAsX,MAAAnD,eAAAhG,GAClBmJ,EAAC/Y,EAAA,IAAAwd,GAAA,CAA2B,aAAAhZ,GAA0BoL,EAAYvB,SAAU,CAAA7J,MAAQ,GAAK,EAAAoR,MAAAhG,EAAAgG,MAAAmD,KAAAnD,EAAA,IAAzFmD,EACRA,OAAAC,GAAApD,EAAA,MAAAiB,OAAAC,IAAA,8BAiB6BiC,GAAA,CAAA0I,IAAO,IAAGC,OAAU,GAAI,EACrC1I,GAAA,CAAA2I,OAAU,MAAO,EAAC/L,MAAAmD,GAAAnD,MAAAoD,KAAAD,GAAAnD,EAAA,IAAAoD,GAAApD,EAAA,KAEfqD,SAAAwG,EAAAmC,GAAAhV,OAA4F6M,MAAA7D,EAAA6J,SAAA7J,QAAA2I,GAC5F9E,MAEHgG,gDACEzf,MAAAiO,GAAA,CACkB,kBAAAsQ,IAASsD,EAAe,IAAxBtD,cAAkC5K,YAAI4K,IAASsD,EAAe,IAAxBtD,cAAiCmC,QAC3E,gBAEjB,gBACgB,UAAA5gB,GAAKa,UAAW,GAEnCiV,MAAA6J,EAAA7J,MAAA2I,EAAA3I,MAAA6D,KAAA7D,EAAA,IAAAgE,OAAAhE,EAAAqD,UAAArD,QAAA6D,GAZSG,GAAA,CAAAkI,OACF7I,GAA4F8I,OAC5FtI,EAUPtN,KACK6V,EACR,EAACpM,MAAAqD,GAAArD,MAAA6D,EAAA7D,MAAAgE,OAAAhE,EAAA,IAAAiE,OAAAjE,EAAA4L,UAAA5L,QAAAgE,IAAAhE,EAAA,MAAAwJ,GArBHvF,GAAC7Z,EAAA,IAAAiiB,GAAA,CACMhD,MACCG,OACU,eAAA8C,GACHV,eACO,mBAAAzI,GACb,MAAAC,GACK,WAAAY,GAeZ,EAAAhE,MAAA4L,GAAA5L,MAAAgE,GAAAhE,MAAAwJ,EAAAxJ,MAAAiE,OAAAjE,EAAA,IAAA6E,OAAA7E,EAAAvD,SAAAuD,QAAAiE,IAvBJY,SAAC0H,GAAuB9P,SAAwB+P,YAC9CvI,SAuBFA,GAAA,EAAkBjE,MAAAvD,EAAAuD,MAAAiE,GAAAjE,MAAA6E,OAAA7E,EAAA,IAAA8E,OAAA9E,SAAAsJ,QAAAzL,uBAAAmC,EAAAsJ,QAAAxL,iBAAAkC,SAAAsJ,EAAAnM,iBAAA6C,EAAA,OAAAsJ,EAAA1M,SAAAoD,EAAA,OAAA6E,IAEhBC,GAAA1a,EAAA,UAlCU,WAAAF,GAAKuiB,iBAAwBrD,OAAuB,wBAClE,SAAChf,MAAAsiB,GAAA,CACY,UAAApD,EAAGnM,gBACD,YAAAmM,EAAGzL,sBACJ,WAAAyL,EAAGxL,gBACN,QAAAwL,EAAG1M,QACQ+P,sBAEpB9H,WAyBF,GACF,EAAM7E,EAAA,IAAAsJ,EAAAzL,sBAAAmC,EAAA,IAAAsJ,EAAAxL,gBAAAkC,EAAA,KAAAsJ,EAAAnM,gBAAA6C,EAAA,KAAAsJ,EAAA1M,QAAAoD,OAAA6E,GAAA7E,OAAA8E,OAAA9E,EAAA,KAlCN8E,EAkCM,CAvRK,SAAAkH,IAAA,QAsQ2B5hB,MAAAiO,GAAA,CAAiC,qBAAmB,YAAG,KAAK,EAtQvF,SAAAiU,GAAAM,EAAAC,EAAA,CAiQkC/N,QAAO,CAjQzC,SAAAoK,GAAA4D,EAAA,QA4BoCvhB,EAAKwhB,iBAAkB,CA5B3D,SAAA9D,GAAA+D,EAAA,QA2ByCzhB,EAAKyd,gBAAiB,CA3B/D,SAAA3H,GAAA4L,EAAA,QA0BsC1hB,EAAK8S,aAAc,CA1BzD,SAAAqC,GAAA4G,EAAA,QAyB+B/b,EAAKkP,MAAO,CAzB3C,SAAAgG,GAAA8G,EAAA,QAwB4Chc,EAAKmI,mBAAoB,CAxBrE,SAAA8M,GAAAjV,EAAA,QAmBkCA,EAAK6M,cAAe,CAyQrE,MAAMgU,GAAwBc,aAAsD,CAAC,CAAEjiB,WAAU,GAAG4c,CAAM,EAAG3I,IAC1G9U,MAAA,OAAI,IAAA8U,EAAc2I,KAAO,UAAW3d,GAAMijB,KACxCliB,UACH,EACD,EACDmhB,GAAsBgB,YAAc,wBC1UpC,MAAezjB,UAAK0jB,EAAW,EAC/B,SAASA,IAAc,CACf,MAAE7hB,OAAM0L,SAAQsR,mBAAoB8E,GAAuB,EAC3D7E,EAAc8E,GAAiB,EAIrC,OAFkBrW,IAAW,WAAa,CAAC1L,GAAQ,CAACgd,EAG3Cpe,EAAA,IAAC2d,GAAM,MAAK,sBAAyB,GAI3C3d,MAAAme,GAAA,CACC,MAAO/c,EAAKI,MACZ,UAAWJ,EAAKuO,UAChB,QAASvO,EAAKU,QACd,GAAIV,EAAK3B,GACT,gBAAA2e,EACA,YAAAC,EACA,CAEN,oOCAe9e,UAAK6jB,EAAa,EAEjC,SAASA,IAAgB,CACvB,MAAMnY,EAAcoY,OAAOC,SAASC,SAASve,SAAS,UAAU,EAC1D,CAAEyD,cAAeP,GAAoB,EACrC,CAAEC,cAAeC,GAAgB,EACjC,CAAC8C,EAAUC,CAAW,EAAI5C,GAAmC,CACjEzC,IAAK,oBACL4C,aAAcwD,GAAgBC,KAC/B,EACKqX,EAAgBC,GAAiB,EACjC7T,EAAe8T,GAAgB,EAErC,GAAIF,GAAiBvY,EAEjB,OAAAjL,EAAA,IAAC2jB,IAAqB,QAAS/T,EAC7B,eAACgU,GAAa,YAAW,SACvB,SAAA/jB,OAAC,MACC,WAAWiP,GAAG,CAAChP,GAAM+jB,cAAe/jB,GAAMgkB,SAAS,CAAC,EACpD,cAAY,eACZ,cAAY,gBAEZ,UAAA9jB,EAAA,IAACgH,GAAe,IAChBhH,MAAC+jB,GAAmB,kBAAgB,WACnC,MAAI,WAAWjkB,GAAMkkB,QACpB,gBAACC,GACC,WAAAjkB,MAACkkB,IAAY,cAAa,GAAC,YAAW,GAAC,SAAAhZ,EAAoB,YAAAC,EAAyB,QACnFnD,GAAkB,KACrB,CACF,GACF,EACF,GACF,EAIEmc,QACJhc,IAAeU,GAAiBkC,UAC/BE,GAAexC,IAAeE,GAAQC,KACvCsC,IAAagB,GAAgBE,MAG7B,OAAApM,MAAC2jB,IAAqB,QAAS/T,EAC7B,eAACgU,GAAa,YAAW,SACvB,SAAC/jB,EAAA,YAAI,UAAWiP,GAAG,CAAChP,GAAM+jB,cAAe5Y,GAAenL,GAAMgkB,SAAS,CAAC,EAAG,cAAY,gBACrF,UAAA9jB,EAAA,IAACgH,GAAe,IACfiE,GAAgBjL,MAAA+jB,GAAA,CAAmB,iBAAgB,GAAC,mBAAoBK,KAA2B,EACnGvkB,EAAA,YAAI,UAAWC,GAAMkkB,QACpB,UAAAhkB,MAACqkB,GAAA,CAAa,UAAWvkB,GAAMijB,KAC7B,gBAACkB,GACE,WAAChZ,IAAgBjL,MAAAskB,GAAA,CAAqB,QAAoBC,MAAY,UAAWlhB,CAAK,EAAK,EAC3FrD,MAAAkkB,GAAA,CAAY,YAAAjZ,EAA0B,SAAAC,EAAoB,YAAAC,CAAyB,SACnFnD,GAAkB,KACrB,CACF,GACC,CAACmc,GACCnkB,MAAA,OAAI,UAAWF,GAAM0kB,KACpB,SAAAxkB,MAACikB,GACC,UAAAjkB,MAACgB,GAAkB,IACrB,CACF,GAEJ,GACF,EACF,GACF,CAEJ,CASA,SAASkjB,GAAY,CAAEV,gBAAevY,cAAaC,WAAUC,aAA8B,EAAG,CAC5F,OACGtL,OAAA,OAAI,UAAWC,GAAM2kB,YACnBjB,UACCA,EAAAxjB,MAACwM,IAAoB,SAAAtB,EAAoB,YAAAC,CAA4B,GAEpEnL,EAAA,IAAAgL,GAAA,CAAc,YAAAC,EAA0B,SAAAC,EAAoB,YAAAC,CAC9D,GACAD,IAAagB,GAAgBC,WAAQ8W,GAAW,UAAOpW,GAAe,IACtE3B,IAAagB,GAAgBE,OAASpM,EAAA,IAAC0kB,GAAiB,KAC3D,CAEJ","names":["reorderArray","array","fromIndex","toIndex","modifiedArray","reorderedItem","splice","memo","EventEditorFooter","id","cue","loadById","loadByCue","jsxs","style","footer","jsx","CopyTag","EventEditorEmpty","entryEditor","shortcutSection","Editor.Title","prompt","shortcuts","Kbd","deviceMod","AuxKey","spacer","deviceAlt","children","divider","kbd","RundownEntryEditor","selectedEvents","useEventSelection","state","data","useRundown","entry","useMemo","order","length","selectedEventId","Array","from","at","entries","isOntimeEvent","rundownEditor","EventEditor","isOntimeMilestone","MilestoneEditor","isOntimeGroup","GroupEditor","maxResults","useFinder","rundownId","useFlatRundown","results","setResults","useState","error","setError","lastSearchString","useRef","selectAndRevealEntry","useSelectAndRevealEntry","find","useCallback","event","target","value","searchValue","toLowerCase","current","startsWith","searchString","slice","trim","searchByIndex","searchByCue","searchByTitle","searchIndex","Number","isNaN","eventIndex","i","push","type","SupportedEntry","Event","index","title","colour","parent","remaining","includes","Group","Milestone","select","selectedEvent","useEffect","Finder","isOpen","onClose","selected","setSelected","debouncedFind","useDebouncedCallback","navigate","key","prev","preventDefault","stopPropagation","submit","handleMouseMoveEvent","li","closest","dataset","Modal","Input","scrollContainer","empty","map","isSelected","displayIndex","displayCue","em","FinderPlacement","handler","useDisclosure","useHotkeys","toggle","close","useContextMenuStore","create","set","position","x","y","options","setContextMenu","setIsOpen","newIsOpen","RundownContextMenu","PositionedDropdownMenu","useEditorFollowMode","layoutMode","useEditorLayout","controlModePreference","setControlModePreference","useSessionStorage","sessionKeys","editorMode","defaultValue","AppMode","Run","EditorLayoutMode","CONTROL","PLANNING","Edit","setEditorMode","mode","RundownMenu","allowNavigation","handlers","clearSelectedEvents","deleteAllEntries","useEntryActionsContext","setLocation","useAppSettingsNavigation","deleteAll","Fragment","apart","DropdownMenu","Toolbar.Button","IconButton","label","icon","IoList","onClick","disabled","IoTrash","open","IoEllipsisHorizontal","Dialog","Button","HEADER_CONTROLS_CONFIG","showRunEditToggle","showOffsetToggle","showOverflowMenu","TRACKING","RundownHeader","isExtracted","viewMode","setViewMode","offsetMode","useOffsetMode","toggleAppMode","newValue","toggleViewMode","toggleOffsetMode","setOffsetMode","Toolbar.Root","header","ToggleGroup","group","Tooltip","Toggle","radioButton","RundownViewMode","List","Table","OffsetMode","Absolute","Relative","RundownHeaderMobile","makeRundownColumns","customFields","makeCuesheetColumns","undefined","RundownTable","status","customFieldStatus","useCustomFields","setPermissions","useCuesheetPermissions","canChangeMode","canCreateEntries","canEditEntries","canFlag","canShare","columns","isLoading","CuesheetDnd","EmptyPage","CuesheetTable","useEntryCopy","entryCopyId","entryCopyMode","setEntryCopyId","QuickAddButtons","previousEventId","parentGroup","backgroundColor","addEntry","addEvent","after","lastEventId","addDelay","Delay","addMilestone","addGroup","groupColour","cx","quickAdd","Boolean","indent","IoAdd","QuickAddInline","referenceEntryId","placement","handleAddEntry","before","addButton","PAGE_SIZE","useRundownCommands","flatOrder","entryActions","selectEntry","applySelection","handleCollapseGroup","clone","deleteEntry","move","reorderEntry","deleteAtCursor","cursor","getPreviousNormal","selectMode","insertCopyAtId","atId","above","getState","normalisedAtId","elementToCopy","refElement","firstId","then","catch","insertAtId","patch","selectGroup","direction","getPreviousGroupNormal","getNextGroupNormal","getNextNormal","moveEntry","movedIntoGroupId","cloneEntry","selectEdge","selectedId","selectPage","currentIndex","indexOf","targetIndex","lastValidIndex","step","useRundownDnd","sortableData","setSortableData","getIsCollapsed","sensors","useSensors","useSensor","PointerSensor","activationConstraint","distance","isDraggingRef","handleOnDragEnd","active","over","sortable","destinationId","isDraggingGroup","canDrop","replace","currentEntries","_","collapseDraggedGroups","expandOverGroup","groupId","isEditableElement","HTMLElement","tagName","useRundownKeyboard","commands","scrollToEntry","nextId","usePhysicalKeys","useContextMenu","contextMenuEvent","pageX","pageY","menuOptions","TitleEditor","entryId","placeholder","className","updateEntry","ref","submitCallback","text","cleanVal","onChange","onBlur","onKeyDown","useReactiveTextInput","submitOnEnter","classes","eventTitle","noTitle","RundownGroup","t0","$","_c","hasCursor","collapsed","onCollapse","handleRef","ungroup","selectSingleEntry","_temp","_temp2","_temp3","t1","IoDuplicateOutline","shortcut","IoFolderOpenOutline","onContextMenu","t2","Symbol","for","t3","animateLayoutChanges","_temp4","attributes","dragAttributes","listeners","dragListeners","setNodeRef","transform","transition","isDragging","isOver","useSortable","t4","size","button","handleFocusClick","t5","getAccessibleColour","binderColours","t6","isValidDrop","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t7","t8","t9","duration","targetDuration","timeEnd","timeStart","t23","bb0","offset","t24","t25","absOffset","Math","abs","formatDuration","MILLIS_PER_MINUTE","getOffsetState","planOffset","planOffsetLabel","CSS","Translate","toString","t26","t27","zIndex","dragStyle","t28","t29","expanded","t30","copyTarget","t31","t32","t33","t34","notAllowed","t35","drag","t36","IoReorderTwo","t37","binder","t38","t39","t40","IoChevronUp","IoChevronDown","t41","titleRow","metaRow","t42","metaLabel","metaEntry","t43","t44","millisToString","fallback","timerPlaceholder","t45","t46","strike","Tag","offsetLabel","state_1","state_0","setSingleEntrySelection","RundownGroupEnd","Transform","groupEnd","RundownEmpty","props","handleAddNew","Empty","marginTop","marginBottom","inline","Editor.Separator","RundownEntry","lazy","__vitePreload","Rundown","rundownMetadata","featureData","makeSortableList","metadata","setMetadata","collapseGroup","expandGroup","useCollapsedGroups","setScrollHandler","_temp5","_temp6","cursorRef","scrollRef","virtuosoRef","dnd","filterVisibleEntries","visibleData","scrollToIndex","align","behavior","entry_0","isEditMode","lastEntryId","nextEventId","playback","index_0","entryId_0","parentId","split","parentMetadata","groupEntries","entry_1","entryMetadata","isNext","isGroup","isFirst","isLast","parentIdForBefore","thisId","parentIdForAfter","collapsed_0","entryWrapper","entryIndex","flag","TbFlagFilled","isPast","isLoaded","isNextDay","Playback","Roll","totalGap","isLinkedToLoaded","itemContent","top","bottom","height","_temp8","lastMetadataKey","Header","Footer","VirtuosoListComponent","Virtuoso","_temp7","SortableContext","verticalListSortingStrategy","rundownContainer","DndContext","closestCenter","_index","entryId_1","state_4","setSelectedEvents","state_3","state_2","forwardRef","list","displayName","RundownList","useRundownWithMetadata","useRundownEditor","RundownExport","window","location","pathname","isSmallDevice","useIsSmallDevice","useEntryActions","EntryActionsProvider","ProtectRoute","rundownExport","extracted","ViewNavigationMenu","rundown","ErrorBoundary","RundownRoot","hideSideBar","getIsNavigationLocked","Editor.Panel","Editor.CornerExtract","handleLinks","side","rundownRoot","EntryEditModal"],"ignoreList":[],"sources":["../../../../packages/utils/src/common/arrayUtils.ts","../../src/features/rundown/entry-editor/composite/EventEditorFooter.tsx","../../src/features/rundown/entry-editor/EventEditorEmpty.tsx","../../src/features/rundown/entry-editor/RundownEntryEditor.tsx","../../src/views/editor/finder/useFinder.tsx","../../src/views/editor/finder/Finder.tsx","../../src/features/rundown/placements/FinderPlacement.tsx","../../src/features/rundown/rundown-context-menu/RundownContextMenu.tsx","../../src/features/rundown/useEditorFollowMode.ts","../../src/features/rundown/rundown-header/RundownMenu.tsx","../../src/features/rundown/rundown-header/RundownHeader.tsx","../../src/features/rundown/rundown-header/RundownHeaderMobile.tsx","../../src/features/rundown/rundown-table/makeRundownColumns.tsx","../../src/features/rundown/rundown-table/RundownTable.tsx","../../src/common/stores/entryCopyStore.ts","../../src/features/rundown/entry-editor/quick-add-buttons/QuickAddButtons.tsx","../../src/features/rundown/entry-editor/quick-add-cursor/QuickAddInline.tsx","../../src/features/rundown/hooks/useRundownCommands.ts","../../src/features/rundown/hooks/useRundownDnd.ts","../../src/features/rundown/hooks/useRundownKeyboard.ts","../../src/common/hooks/useContextMenu.tsx","../../src/features/rundown/common/TitleEditor.tsx","../../src/features/rundown/rundown-group/RundownGroup.tsx","../../src/features/rundown/rundown-group/RundownGroupEnd.tsx","../../src/features/rundown/RundownEmpty.tsx","../../src/features/rundown/Rundown.tsx","../../src/features/rundown/RundownList.tsx","../../src/features/rundown/RundownExport.tsx"],"sourcesContent":["/**\n * Inserts an item in an array at a given index\n * @param index\n * @param item\n * @param array\n */\nexport function insertAtIndex<T>(index: number, item: T, array: T[]): T[] {\n const modifiedArray = [...array];\n\n // Insert at beginning\n if (index === 0) {\n modifiedArray.unshift(item);\n }\n\n // insert at end\n else if (index >= modifiedArray.length) {\n modifiedArray.push(item);\n }\n\n // insert in the middle\n else {\n modifiedArray.splice(index, 0, item);\n }\n\n return modifiedArray;\n}\n\n/**\n * Inserts an array into another one of the same type at a given index\n */\nexport function mergeAtIndex<T>(index: number, newArray: T[], currentArray: T[]): T[] {\n // Insert at beginning\n if (index === 0) {\n return [...newArray, ...currentArray];\n }\n\n // insert at end\n else if (index >= currentArray.length) {\n return [...currentArray, ...newArray];\n }\n\n // insert in the middle\n return currentArray.toSpliced(index, 0, ...newArray);\n}\n\n/**\n * Deletes array element at a given index\n * @param index\n * @param array\n */\nexport function deleteAtIndex<T>(index: number, array: T[]) {\n return array.filter((_, i) => i !== index);\n}\n\n/**\n * Reorders two objects in an array\n */\nexport function reorderArray<T>(array: T[], fromIndex: number, toIndex: number): T[] {\n if (fromIndex === toIndex) {\n return array; // No change needed, return the original array\n }\n\n const modifiedArray = [...array];\n\n // delete in from\n const [reorderedItem] = modifiedArray.splice(fromIndex, 1);\n\n // reinsert item at to\n modifiedArray.splice(toIndex, 0, reorderedItem);\n return modifiedArray;\n}\n","import { memo } from 'react';\n\nimport CopyTag from '../../../../common/components/copy-tag/CopyTag';\n\nimport style from './EventEditorFooter.module.scss';\n\ninterface EventEditorFooterProps {\n id: string;\n cue: string;\n}\n\nexport default memo(EventEditorFooter);\nfunction EventEditorFooter({ id, cue }: EventEditorFooterProps) {\n const loadById = `/ontime/load/id \"${id}\"`;\n const loadByCue = `/ontime/load/cue \"${cue}\"`;\n\n return (\n <div className={style.footer}>\n <CopyTag copyValue={loadById}>{loadById}</CopyTag>\n <CopyTag copyValue={loadByCue}>{loadByCue}</CopyTag>\n </div>\n );\n}\n","import { memo, PropsWithChildren } from 'react';\n\nimport * as Editor from '../../../common/components/editor-utils/EditorUtils';\nimport { deviceAlt, deviceMod } from '../../../common/utils/deviceUtils';\n\nimport style from './EventEditorEmpty.module.scss';\n\nexport default memo(EventEditorEmpty);\n\nfunction EventEditorEmpty() {\n return (\n <div className={style.entryEditor} data-testid='editor-container'>\n <div className={style.shortcutSection}>\n <Editor.Title className={style.prompt}>Rundown shortcuts</Editor.Title>\n <table className={style.shortcuts}>\n <tbody>\n <tr>\n <td>Find in rundown</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>F</Kbd>\n </td>\n </tr>\n <tr>\n <td>Open Settings</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>,</Kbd>\n </td>\n </tr>\n <tr className={style.spacer} />\n <tr>\n <td>Select entry</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>↑</Kbd>\n <AuxKey>/</AuxKey>\n <Kbd>↓</Kbd>\n </td>\n </tr>\n <tr>\n <td>Select group</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>↑</Kbd>\n <AuxKey>/</AuxKey>\n <Kbd>↓</Kbd>\n </td>\n </tr>\n <tr>\n <td>Jump to top / bottom</td>\n <td>\n <Kbd>Home</Kbd>\n <AuxKey>/</AuxKey>\n <Kbd>End</Kbd>\n </td>\n </tr>\n <tr>\n <td>Page up / down</td>\n <td>\n <Kbd>PgUp</Kbd>\n <AuxKey>/</AuxKey>\n <Kbd>PgDn</Kbd>\n </td>\n </tr>\n <tr>\n <td>Deselect entry</td>\n <td>\n <Kbd>Esc</Kbd>\n </td>\n </tr>\n <tr className={style.spacer} />\n <tr>\n <td>Reorder selected entry</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>↑</Kbd>\n <AuxKey>/</AuxKey>\n <Kbd>↓</Kbd>\n </td>\n </tr>\n <tr>\n <td>Copy selected entry</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>C</Kbd>\n </td>\n </tr>\n <tr>\n <td>Cut selected entry</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>X</Kbd>\n </td>\n </tr>\n <tr>\n <td>Paste above</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>V</Kbd>\n </td>\n </tr>\n <tr>\n <td>Paste below</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>V</Kbd>\n </td>\n </tr>\n <tr>\n <td>Clone selected entry</td>\n <td>\n <Kbd>{deviceMod}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>D</Kbd>\n </td>\n </tr>\n <tr>\n <td>Delete selected entry</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Backspace</Kbd>\n </td>\n </tr>\n <tr className={style.spacer} />\n <tr>\n <td>Add event below</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>E</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add event above</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>E</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add group below</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>G</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add group above</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>G</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add milestone below</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>M</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add milestone above</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>M</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add delay below</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>D</Kbd>\n </td>\n </tr>\n <tr>\n <td>Add delay above</td>\n <td>\n <Kbd>{deviceAlt}</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>Shift</Kbd>\n <AuxKey>+</AuxKey>\n <Kbd>D</Kbd>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n\nfunction AuxKey({ children }: PropsWithChildren) {\n return <span className={style.divider}>{children}</span>;\n}\n\nfunction Kbd({ children }: PropsWithChildren) {\n return <span className={style.kbd}>{children}</span>;\n}\n","import { useMemo } from 'react';\nimport { isOntimeEvent, isOntimeGroup, isOntimeMilestone, OntimeEntry } from 'ontime-types';\n\nimport useRundown from '../../../common/hooks-query/useRundown';\nimport { useEventSelection } from '../useEventSelection';\n\nimport EventEditorFooter from './composite/EventEditorFooter';\nimport EventEditor from './EventEditor';\nimport EventEditorEmpty from './EventEditorEmpty';\nimport GroupEditor from './GroupEditor';\nimport MilestoneEditor from './MilestoneEditor';\n\nimport style from './EntryEditor.module.scss';\n\nexport default function RundownEntryEditor() {\n const selectedEvents = useEventSelection((state) => state.selectedEvents);\n const { data } = useRundown();\n\n const entry = useMemo<OntimeEntry | null>(() => {\n if (data.order.length === 0) {\n return null;\n }\n\n const selectedEventId = Array.from(selectedEvents).at(0);\n if (!selectedEventId) {\n return null;\n }\n\n const event = data.entries[selectedEventId];\n return event ?? null;\n }, [data.order.length, data.entries, selectedEvents]);\n\n if (!entry) {\n return <EventEditorEmpty />;\n }\n\n if (isOntimeEvent(entry)) {\n return (\n <div className={style.rundownEditor} data-testid='editor-container'>\n <EventEditor event={entry} />\n <EventEditorFooter id={entry.id} cue={entry.cue} />\n </div>\n );\n }\n\n if (isOntimeMilestone(entry)) {\n return (\n <div className={style.rundownEditor} data-testid='editor-container'>\n <MilestoneEditor milestone={entry} />\n </div>\n );\n }\n\n if (isOntimeGroup(entry)) {\n return (\n <div className={style.rundownEditor} data-testid='editor-container'>\n <GroupEditor group={entry} />\n </div>\n );\n }\n\n return null;\n}\n","import { ChangeEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport { EntryId, isOntimeEvent, isOntimeGroup, isOntimeMilestone, MaybeString, SupportedEntry } from 'ontime-types';\n\nimport { useFlatRundown } from '../../../common/hooks-query/useRundown';\nimport { useSelectAndRevealEntry } from '../../../features/rundown/useSelectAndRevealEntry';\n\nconst maxResults = 12;\n\ntype FilterableGroup = {\n type: SupportedEntry.Group;\n id: EntryId;\n index: number;\n title: string;\n colour: string;\n};\n\ntype FilterableEvent = {\n type: SupportedEntry.Event;\n id: EntryId;\n index: number;\n eventIndex: number;\n title: string;\n cue: string;\n colour: string;\n parent: MaybeString;\n};\n\ntype FilterableMilestone = {\n type: SupportedEntry.Milestone;\n id: EntryId;\n index: number;\n title: string;\n cue: string;\n colour: string;\n parent: MaybeString;\n};\n\ntype FilterableEntry = FilterableGroup | FilterableEvent | FilterableMilestone;\n\nexport default function useFinder() {\n const { data, rundownId } = useFlatRundown();\n const [results, setResults] = useState<FilterableEntry[]>([]);\n const [error, setError] = useState<MaybeString>(null);\n const lastSearchString = useRef('');\n\n const selectAndRevealEntry = useSelectAndRevealEntry(rundownId);\n\n /** Filters the rundown to a given evaluation */\n const find = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (!data || data.length === 0) {\n setError('No data');\n return;\n }\n setError(null);\n\n if (event.target.value === '') {\n setResults([]);\n return;\n }\n\n const searchValue = event.target.value.toLowerCase();\n lastSearchString.current = searchValue;\n\n if (searchValue.startsWith('index ')) {\n const searchString = searchValue.slice('index '.length).trim();\n const { results, error } = searchByIndex(searchString);\n setResults(results);\n setError(error);\n return;\n }\n\n if (searchValue.startsWith('cue ')) {\n const searchString = searchValue.slice('cue '.length).trim();\n const { results, error } = searchByCue(searchString);\n setResults(results);\n setError(error);\n return;\n }\n\n const searchString = searchValue.startsWith('title ') ? searchValue.slice('title '.length).trim() : searchValue;\n const { results, error } = searchByTitle(searchString);\n setResults(results);\n setError(error);\n\n /** Returns a single item with a matching index */\n function searchByIndex(searchString: string) {\n const searchIndex = Number(searchString);\n if (isNaN(searchIndex) || searchIndex < 1) {\n return { results: [], error: 'Invalid index' };\n }\n\n if (searchIndex > data.length) {\n return { results: [], error: null };\n }\n\n // indexes exposed to the UI are 1-based\n let eventIndex = 1;\n const results: FilterableEvent[] = [];\n for (let i = 0; i < data.length; i++) {\n const event = data[i];\n if (isOntimeEvent(event)) {\n if (eventIndex === searchIndex) {\n results.push({\n type: SupportedEntry.Event,\n id: event.id,\n index: i,\n eventIndex,\n title: event.title,\n cue: event.cue,\n colour: event.colour,\n parent: event.parent,\n } satisfies FilterableEvent);\n break;\n }\n eventIndex++;\n }\n }\n\n return { results, error: null };\n }\n\n /** Returns maxResults of OntimeEvents that match the cue field */\n function searchByCue(searchString: string) {\n // indexes exposed to the UI are 1-based\n let eventIndex = 1;\n // limit amount of results we show\n let remaining = maxResults;\n const results: FilterableEvent[] = [];\n\n for (let i = 0; i < data.length; i++) {\n if (remaining <= 0) {\n break;\n }\n const event = data[i];\n if (isOntimeEvent(event)) {\n if (event.cue.toLowerCase().includes(searchString)) {\n remaining--;\n results.push({\n type: SupportedEntry.Event,\n id: event.id,\n index: i,\n eventIndex,\n title: event.title,\n cue: event.cue,\n colour: event.colour,\n parent: event.parent,\n } satisfies FilterableEvent);\n }\n eventIndex++;\n }\n }\n return { results, error: null };\n }\n\n /** Returns maxResults of OntimeEvents that match the title field*/\n function searchByTitle(searchString: string) {\n // indexes exposed to the UI are 1-based\n let eventIndex = 1;\n // limit amount of results we show\n let remaining = maxResults;\n const results: FilterableEntry[] = [];\n\n for (let i = 0; i < data.length; i++) {\n if (remaining <= 0) {\n break;\n }\n\n const entry = data[i];\n if (isOntimeEvent(entry)) {\n if (entry.title.toLowerCase().includes(searchString)) {\n remaining--;\n results.push({\n type: SupportedEntry.Event,\n id: entry.id,\n index: i,\n eventIndex,\n title: entry.title,\n cue: entry.cue,\n colour: entry.colour,\n parent: entry.parent,\n } satisfies FilterableEvent);\n }\n eventIndex++;\n } else if (isOntimeGroup(entry)) {\n if (entry.title.toLowerCase().includes(searchString)) {\n remaining--;\n results.push({\n type: SupportedEntry.Group,\n id: entry.id,\n index: i,\n title: entry.title,\n colour: entry.colour,\n } satisfies FilterableGroup);\n }\n } else if (isOntimeMilestone(entry)) {\n if (entry.title.toLowerCase().includes(searchString)) {\n remaining--;\n results.push({\n type: SupportedEntry.Milestone,\n id: entry.id,\n index: i,\n title: entry.title,\n cue: entry.cue,\n colour: entry.colour,\n parent: entry.parent,\n } satisfies FilterableMilestone);\n }\n }\n }\n return { results, error: null };\n }\n },\n [data],\n );\n\n const select = useCallback(\n (selectedEvent: FilterableEntry) => {\n selectAndRevealEntry({\n id: selectedEvent.id,\n index: selectedEvent.index,\n parent: 'parent' in selectedEvent ? selectedEvent.parent : null,\n });\n },\n [selectAndRevealEntry],\n );\n\n /** clear results when source data changes */\n useEffect(() => {\n setResults([]);\n setError(null);\n // fake a submit event to re-run the search\n if (lastSearchString.current) {\n find({ target: { value: lastSearchString.current } } as ChangeEvent<HTMLInputElement>);\n }\n }, [data, find]);\n\n return { find, select, results, error };\n}\n","import { KeyboardEvent, useState } from 'react';\nimport { useDebouncedCallback } from '@mantine/hooks';\nimport { SupportedEntry } from 'ontime-types';\n\nimport Input from '../../../common/components/input/input/Input';\nimport Modal from '../../../common/components/modal/Modal';\n\nimport useFinder from './useFinder';\n\nimport style from './Finder.module.scss';\n\ninterface FinderProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport default function Finder({ isOpen, onClose }: FinderProps) {\n const { find, select, results, error } = useFinder();\n const [selected, setSelected] = useState(0);\n\n const debouncedFind = useDebouncedCallback(find, 100);\n\n const navigate = (event: KeyboardEvent<HTMLDivElement>) => {\n // all operations need results\n if (results.length === 0) {\n return;\n }\n if (event.key === 'ArrowDown') {\n setSelected((prev) => (prev + 1) % results.length);\n }\n if (event.key === 'ArrowUp') {\n setSelected((prev) => (prev - 1 + results.length) % results.length);\n }\n if (event.key === 'Enter') {\n event.preventDefault();\n event.stopPropagation();\n submit();\n }\n };\n\n const submit = () => {\n const selectedEvent = results[selected];\n select(selectedEvent);\n onClose();\n };\n\n const handleMouseMoveEvent = (event: React.MouseEvent<HTMLUListElement>) => {\n const target = event.target as HTMLElement;\n const li = target.closest('li');\n if (li) {\n const index = Number(li.dataset.index);\n if (!isNaN(index)) {\n setSelected(index);\n }\n }\n };\n\n return (\n <Modal\n title=''\n isOpen={isOpen}\n onClose={onClose}\n showBackdrop\n bodyElements={\n <div onKeyDown={navigate}>\n <Input height='large' fluid onChange={debouncedFind} placeholder='Search...' />\n <ul className={style.scrollContainer} onMouseMove={handleMouseMoveEvent}>\n {error && <li className={style.error}>{error}</li>}\n {results.length === 0 && <li className={style.empty}>No results</li>}\n {results.length > 0 &&\n results.map((entry, index) => {\n const isSelected = selected === index;\n const displayIndex = entry.type === SupportedEntry.Event ? entry.eventIndex : '-';\n const displayCue = 'cue' in entry ? entry.cue : '';\n\n return (\n <li\n key={entry.id}\n className={style.entry}\n data-selected={isSelected}\n data-index={index}\n onClick={submit}\n >\n <div className={style.data}>\n <div className={style.index} style={{ '--color': entry.colour }}>\n {displayIndex}\n </div>\n <div className={style.cue}>{displayCue}</div>\n <div className={style.title}>{entry.title}</div>\n </div>\n {isSelected && <span>Go ⏎</span>}\n </li>\n );\n })}\n </ul>\n </div>\n }\n footerElements={\n <div className={style.footer}>\n Use the keywords <span className={style.em}>cue</span>, <span className={style.em}>index</span> or\n <span className={style.em}>title</span> to filter search.\n </div>\n }\n />\n );\n}\n","import { memo } from 'react';\nimport { useDisclosure, useHotkeys } from '@mantine/hooks';\n\nimport Finder from '../../../views/editor/finder/Finder';\n\nexport default memo(FinderPlacement);\n\nfunction FinderPlacement() {\n const [isOpen, handler] = useDisclosure();\n\n useHotkeys([\n ['mod + f', handler.toggle, { preventDefault: true }],\n ['Escape', handler.close, { preventDefault: true }],\n ]);\n\n if (isOpen) {\n return <Finder isOpen={isOpen} onClose={handler.close} />;\n }\n\n return null;\n}\n","import { create } from 'zustand';\n\nimport { DropdownMenuOption, PositionedDropdownMenu } from '../../../common/components/dropdown-menu/DropdownMenu';\n\ntype Position = {\n x: number;\n y: number;\n};\n\ntype ContextMenuStore = {\n position: Position;\n options: DropdownMenuOption[];\n isOpen: boolean;\n setContextMenu: (position: Position, options: DropdownMenuOption[]) => void;\n setIsOpen: (newIsOpen: boolean) => void;\n};\n\nexport const useContextMenuStore = create<ContextMenuStore>((set) => ({\n position: { x: 0, y: 0 },\n options: [],\n isOpen: false,\n setContextMenu: (position, options) => set(() => ({ position, options, isOpen: true })),\n setIsOpen: (newIsOpen) => set(() => ({ isOpen: newIsOpen })),\n}));\n\nexport function RundownContextMenu() {\n const { position, options, isOpen, setIsOpen } = useContextMenuStore();\n\n const onClose = () => {\n return setIsOpen(false);\n };\n\n if (!isOpen) {\n return null;\n }\n\n return <PositionedDropdownMenu isOpen position={position} onClose={onClose} items={options} />;\n}\n","import { useSessionStorage } from '@mantine/hooks';\n\nimport { AppMode, sessionKeys } from '../../ontimeConfig';\nimport { EditorLayoutMode, useEditorLayout } from '../../views/editor/useEditorLayout';\n\n/**\n * Manages the editor mode (Edit/Run) derived from layout mode\n *\n * Editor mode is automatically determined by the layout:\n * - PLANNING: Always Edit mode (follows user selection)\n * - TRACKING: Always Run mode (follows current event)\n * - CONTROL: User preference (defaults to Run mode), persisted in session storage\n *\n * Edit: Manual editing, follows user selection\n * Run: Live playback view, auto-follows current event\n */\nexport function useEditorFollowMode() {\n const { layoutMode } = useEditorLayout();\n\n // Only used for CONTROL layout - stores user preference\n const [controlModePreference, setControlModePreference] = useSessionStorage<AppMode>({\n key: sessionKeys.editorMode,\n defaultValue: AppMode.Run,\n });\n\n // Derive editor mode from layout mode\n const editorMode = (() => {\n if (layoutMode === EditorLayoutMode.CONTROL) return controlModePreference;\n if (layoutMode === EditorLayoutMode.PLANNING) return AppMode.Edit;\n return AppMode.Run;\n })();\n\n // setEditorMode only affects CONTROL layout\n const setEditorMode = (mode: AppMode) => {\n if (layoutMode === EditorLayoutMode.CONTROL) {\n setControlModePreference(mode);\n }\n };\n\n return { editorMode, setEditorMode };\n}\n","import { memo, useCallback } from 'react';\nimport { IoEllipsisHorizontal, IoList, IoTrash } from 'react-icons/io5';\nimport { Toolbar } from '@base-ui/react/toolbar';\nimport { useDisclosure } from '@mantine/hooks';\n\nimport Button from '../../../common/components/buttons/Button';\nimport IconButton from '../../../common/components/buttons/IconButton';\nimport Dialog from '../../../common/components/dialog/Dialog';\nimport { DropdownMenu } from '../../../common/components/dropdown-menu/DropdownMenu';\nimport { useEntryActionsContext } from '../../../common/context/EntryActionsContext';\nimport useAppSettingsNavigation from '../../app-settings/useAppSettingsNavigation';\nimport { useEventSelection } from '../useEventSelection';\n\nimport style from './RundownHeader.module.scss';\n\ninterface RundownMenuProps {\n allowNavigation?: boolean;\n}\n\nexport default memo(RundownMenu);\nfunction RundownMenu({ allowNavigation }: RundownMenuProps) {\n const [isOpen, handlers] = useDisclosure();\n\n const clearSelectedEvents = useEventSelection((state) => state.clearSelectedEvents);\n const { deleteAllEntries } = useEntryActionsContext();\n const { setLocation } = useAppSettingsNavigation();\n\n const deleteAll = useCallback(() => {\n deleteAllEntries();\n clearSelectedEvents();\n handlers.close();\n }, [clearSelectedEvents, deleteAllEntries, handlers]);\n\n return (\n <>\n <div className={style.apart}>\n <DropdownMenu\n render={<Toolbar.Button render={<IconButton variant='subtle-white' aria-label='Rundown menu' />} />}\n items={[\n {\n type: 'item',\n label: 'Manage Rundowns...',\n icon: IoList,\n onClick: () => setLocation('manage__rundowns'),\n disabled: !allowNavigation,\n },\n { type: 'divider' },\n {\n type: 'destructive',\n label: 'Clear all',\n icon: IoTrash,\n onClick: handlers.open,\n },\n ]}\n >\n <IoEllipsisHorizontal />\n </DropdownMenu>\n </div>\n\n <Dialog\n isOpen={isOpen}\n onClose={handlers.close}\n title='Clear rundown'\n showBackdrop\n showCloseButton\n bodyElements={\n <>\n You will lose all data in your rundown. <br /> Are you sure?\n </>\n }\n footerElements={\n <>\n <Button variant='ghosted-white' size='large' onClick={handlers.close}>\n Cancel\n </Button>\n <Button variant='destructive' size='large' onClick={deleteAll}>\n Delete all\n </Button>\n </>\n }\n />\n </>\n );\n}\n","import { memo } from 'react';\nimport { Toggle } from '@base-ui/react/toggle';\nimport { ToggleGroup } from '@base-ui/react/toggle-group';\nimport { Toolbar } from '@base-ui/react/toolbar';\nimport { OffsetMode } from 'ontime-types';\n\nimport Tooltip from '../../../common/components/tooltip/Tooltip';\nimport { setOffsetMode, useOffsetMode } from '../../../common/hooks/useSocket';\nimport { AppMode } from '../../../ontimeConfig';\nimport { EditorLayoutMode, useEditorLayout } from '../../../views/editor/useEditorLayout';\nimport { RundownViewMode } from '../rundown.options';\nimport { useEditorFollowMode } from '../useEditorFollowMode';\n\nimport RundownMenu from './RundownMenu';\n\nimport style from './RundownHeader.module.scss';\n\ninterface RundownHeaderProps {\n isExtracted?: boolean;\n viewMode: RundownViewMode;\n setViewMode: (mode: RundownViewMode) => void;\n}\n\ninterface HeaderControlsConfig {\n showRunEditToggle: boolean;\n showOffsetToggle: boolean;\n showOverflowMenu: boolean;\n}\n\nexport const HEADER_CONTROLS_CONFIG: Record<EditorLayoutMode, HeaderControlsConfig> = {\n [EditorLayoutMode.CONTROL]: {\n showRunEditToggle: true,\n showOffsetToggle: true,\n showOverflowMenu: true,\n },\n [EditorLayoutMode.PLANNING]: {\n showRunEditToggle: false,\n showOffsetToggle: false,\n showOverflowMenu: true,\n },\n [EditorLayoutMode.TRACKING]: {\n showRunEditToggle: false,\n showOffsetToggle: true,\n showOverflowMenu: false,\n },\n} as const;\n\nexport default memo(RundownHeader);\nfunction RundownHeader({ isExtracted, viewMode, setViewMode }: RundownHeaderProps) {\n const { editorMode, setEditorMode } = useEditorFollowMode();\n const offsetMode = useOffsetMode();\n const { layoutMode } = useEditorLayout();\n\n const { showRunEditToggle, showOffsetToggle, showOverflowMenu } = HEADER_CONTROLS_CONFIG[layoutMode];\n\n const toggleAppMode = (mode: AppMode[]) => {\n // we need to stop user from deselecting a mode\n const newValue = mode.at(0);\n if (!newValue) return;\n setEditorMode(newValue);\n };\n\n const toggleViewMode = (mode: RundownViewMode[]) => {\n const newValue = mode.at(0);\n if (!newValue) return;\n setViewMode(newValue);\n };\n\n const toggleOffsetMode = (mode: OffsetMode[]) => {\n const newValue = mode.at(0);\n if (!newValue) return;\n setOffsetMode(newValue);\n };\n\n return (\n <Toolbar.Root className={style.header}>\n {showRunEditToggle && (\n <ToggleGroup value={[editorMode]} onValueChange={toggleAppMode} className={style.group}>\n <Tooltip\n text='Live playback view with auto-follow'\n render={<Toolbar.Button render={<Toggle />} value={AppMode.Run} className={style.radioButton} />}\n >\n Run\n </Tooltip>\n <Tooltip\n text='Manual editing without playback automation'\n render={<Toolbar.Button render={<Toggle />} value={AppMode.Edit} className={style.radioButton} />}\n >\n Edit\n </Tooltip>\n </ToggleGroup>\n )}\n\n <ToggleGroup value={[viewMode]} onValueChange={toggleViewMode} className={style.group}>\n <Tooltip\n text='View rundown in list mode'\n render={<Toolbar.Button render={<Toggle />} value={RundownViewMode.List} className={style.radioButton} />}\n >\n List\n </Tooltip>\n <Tooltip\n text='View rundown in table mode'\n render={<Toolbar.Button render={<Toggle />} value={RundownViewMode.Table} className={style.radioButton} />}\n >\n Table\n </Tooltip>\n </ToggleGroup>\n\n {showOffsetToggle && (\n <ToggleGroup value={[offsetMode]} onValueChange={toggleOffsetMode} className={style.group}>\n <Tooltip\n text='Offsets use fixed clock time'\n render={<Toolbar.Button render={<Toggle />} value={OffsetMode.Absolute} className={style.radioButton} />}\n >\n Absolute\n </Tooltip>\n <Tooltip\n text='Offsets follow the rundown relative start'\n render={<Toolbar.Button render={<Toggle />} value={OffsetMode.Relative} className={style.radioButton} />}\n >\n Relative\n </Tooltip>\n </ToggleGroup>\n )}\n\n {showOverflowMenu && <RundownMenu allowNavigation={!isExtracted} />}\n </Toolbar.Root>\n );\n}\n","import { memo } from 'react';\nimport { Toggle } from '@base-ui/react/toggle';\nimport { ToggleGroup } from '@base-ui/react/toggle-group';\nimport { Toolbar } from '@base-ui/react/toolbar';\n\nimport { AppMode } from '../../../ontimeConfig';\nimport { RundownViewMode } from '../rundown.options';\nimport { useEditorFollowMode } from '../useEditorFollowMode';\n\nimport style from './RundownHeader.module.scss';\n\ninterface RundownHeaderMobileProps {\n viewMode: RundownViewMode;\n setViewMode: (mode: RundownViewMode) => void;\n}\n\nexport default memo(RundownHeaderMobile);\nfunction RundownHeaderMobile({ viewMode, setViewMode }: RundownHeaderMobileProps) {\n const { editorMode, setEditorMode } = useEditorFollowMode();\n\n const toggleAppMode = (mode: AppMode[]) => {\n // we need to stop user from deselecting a mode\n const newValue = mode.at(0);\n if (!newValue) return;\n setEditorMode(newValue);\n };\n\n const toggleViewMode = (mode: RundownViewMode[]) => {\n const newValue = mode.at(0);\n if (!newValue) return;\n setViewMode(newValue);\n };\n\n return (\n <Toolbar.Root className={style.header}>\n <ToggleGroup value={[editorMode]} onValueChange={toggleAppMode} className={style.group}>\n <Toolbar.Button render={<Toggle />} value={AppMode.Run} className={style.radioButton}>\n Run\n </Toolbar.Button>\n\n <Toolbar.Button render={<Toggle />} value={AppMode.Edit} className={style.radioButton}>\n Edit\n </Toolbar.Button>\n </ToggleGroup>\n\n <ToggleGroup value={[viewMode]} onValueChange={toggleViewMode} className={style.group}>\n <Toolbar.Button render={<Toggle />} value={RundownViewMode.List} className={style.radioButton}>\n List\n </Toolbar.Button>\n <Toolbar.Button render={<Toggle />} value={RundownViewMode.Table} className={style.radioButton}>\n Table\n </Toolbar.Button>\n </ToggleGroup>\n </Toolbar.Root>\n );\n}\n","import type { ColumnDef } from '@tanstack/react-table';\nimport type { CustomFields } from 'ontime-types';\n\nimport type { ExtendedEntry } from '../../../common/utils/rundownMetadata';\nimport { AppMode } from '../../../ontimeConfig';\nimport { makeCuesheetColumns } from '../../../views/cuesheet/cuesheet-table/cuesheet-table-elements/cuesheetColsFactory';\n\n/**\n * Creates column definitions for the rundown table\n * Reuses cuesheetColsFactory with preset=undefined for full access\n */\nexport function makeRundownColumns(customFields: CustomFields): ColumnDef<ExtendedEntry>[] {\n // When preset=undefined, factory defaults to fullRead=true, fullWrite=true\n // canWrite is determined by editorMode (AppMode.Edit vs AppMode.Run)\n return makeCuesheetColumns(customFields, AppMode.Edit, undefined);\n}\n","import { memo, useEffect, useMemo } from 'react';\n\nimport EmptyPage from '../../../common/components/state/EmptyPage';\nimport useCustomFields from '../../../common/hooks-query/useCustomFields';\nimport CuesheetDnd from '../../../views/cuesheet/cuesheet-dnd/CuesheetDnd';\nimport CuesheetTable from '../../../views/cuesheet/cuesheet-table/CuesheetTable';\nimport { useCuesheetPermissions } from '../../../views/cuesheet/useTablePermissions';\nimport { useEditorFollowMode } from '../useEditorFollowMode';\n\nimport { makeRundownColumns } from './makeRundownColumns';\n\nexport default memo(RundownTable);\nfunction RundownTable() {\n const { data: customFields, status: customFieldStatus } = useCustomFields();\n const setPermissions = useCuesheetPermissions((state) => state.setPermissions);\n const { editorMode } = useEditorFollowMode();\n\n // Editor always has full permissions\n useEffect(() => {\n setPermissions({\n canChangeMode: true,\n canCreateEntries: true,\n canEditEntries: true,\n canFlag: true,\n canShare: true,\n });\n }, [setPermissions]);\n\n const columns = useMemo(() => makeRundownColumns(customFields), [customFields]);\n\n const isLoading = !customFields || customFieldStatus === 'pending';\n\n return (\n <CuesheetDnd columns={columns} tableRoot='editor'>\n {isLoading ? (\n <EmptyPage text='Loading...' />\n ) : (\n <CuesheetTable columns={columns} cuesheetMode={editorMode} tableRoot='editor' />\n )}\n </CuesheetDnd>\n );\n}\n","import { create } from 'zustand';\n\ntype EntryCopyStore = {\n entryCopyId: string | null;\n entryCopyMode: 'copy' | 'cut';\n setEntryCopyId: (eventId: string | null, mode?: 'copy' | 'cut') => void;\n};\n\nexport const useEntryCopy = create<EntryCopyStore>()((set) => ({\n entryCopyId: null,\n entryCopyMode: 'copy',\n setEntryCopyId: (entryCopyId: string | null, mode: 'copy' | 'cut' = 'copy') =>\n set({ entryCopyId, entryCopyMode: mode }),\n}));\n","import { memo } from 'react';\nimport { IoAdd } from 'react-icons/io5';\nimport { Toolbar } from '@base-ui/react/toolbar';\nimport { MaybeString, SupportedEntry } from 'ontime-types';\n\nimport Button from '../../../../common/components/buttons/Button';\nimport { useEntryActionsContext } from '../../../../common/context/EntryActionsContext';\nimport { cx } from '../../../../common/utils/styleUtils';\n\nimport style from './QuickAddButtons.module.scss';\n\ninterface QuickAddButtonsProps {\n previousEventId: MaybeString;\n parentGroup: MaybeString;\n backgroundColor?: string;\n}\n\nexport default memo(QuickAddButtons);\nfunction QuickAddButtons({ previousEventId, parentGroup, backgroundColor }: QuickAddButtonsProps) {\n const { addEntry } = useEntryActionsContext();\n\n const addEvent = () => {\n addEntry(\n {\n type: SupportedEntry.Event,\n parent: parentGroup,\n },\n {\n after: previousEventId,\n lastEventId: previousEventId,\n },\n );\n };\n\n const addDelay = () => {\n addEntry(\n { type: SupportedEntry.Delay, parent: parentGroup },\n {\n lastEventId: previousEventId,\n after: previousEventId,\n },\n );\n };\n\n const addMilestone = () => {\n addEntry(\n { type: SupportedEntry.Milestone, parent: parentGroup },\n {\n lastEventId: previousEventId,\n after: previousEventId,\n },\n );\n };\n\n const addGroup = () => {\n if (parentGroup !== null) {\n return;\n }\n addEntry(\n { type: SupportedEntry.Group },\n {\n lastEventId: previousEventId,\n after: previousEventId,\n },\n );\n };\n\n /**\n * If the colour is empty string ''\n * ie: we are inside a group, but there is no defined colour\n * we default to $gray-500 #9d9d9d\n */\n const groupColour = backgroundColor === '' ? '#9d9d9d' : backgroundColor;\n\n return (\n <Toolbar.Root\n className={cx([style.quickAdd, Boolean(parentGroup) && style.indent])}\n style={groupColour ? { '--user-bg': groupColour } : {}}\n data-testid='quick-add-buttons'\n >\n <Toolbar.Button render={<Button size='small' />} onClick={addEvent}>\n <IoAdd />\n Event\n </Toolbar.Button>\n\n <Toolbar.Button render={<Button size='small' />} onClick={addDelay}>\n <IoAdd />\n Delay\n </Toolbar.Button>\n\n <Toolbar.Button render={<Button size='small' />} onClick={addMilestone}>\n <IoAdd />\n Milestone\n </Toolbar.Button>\n\n {parentGroup === null && (\n <Toolbar.Button render={<Button size='small' />} onClick={addGroup}>\n <IoAdd />\n Group\n </Toolbar.Button>\n )}\n </Toolbar.Root>\n );\n}\n","import { memo } from 'react';\nimport { IoAdd } from 'react-icons/io5';\nimport { MaybeString, SupportedEntry } from 'ontime-types';\n\nimport IconButton from '../../../../common/components/buttons/IconButton';\nimport { DropdownMenu } from '../../../../common/components/dropdown-menu/DropdownMenu';\nimport { useEntryActionsContext } from '../../../../common/context/EntryActionsContext';\n\nimport style from './QuickAddInline.module.scss';\n\ninterface QuickAddInlineProps {\n referenceEntryId: MaybeString;\n parentGroup: MaybeString;\n placement: 'before' | 'after';\n}\n\nexport default memo(QuickAddInline);\nfunction QuickAddInline({ referenceEntryId, parentGroup, placement }: QuickAddInlineProps) {\n const { addEntry } = useEntryActionsContext();\n\n const handleAddEntry = (type: SupportedEntry) => {\n if (placement === 'before') {\n addEntry(\n { type, parent: type !== SupportedEntry.Group ? parentGroup : null },\n {\n before: referenceEntryId,\n },\n );\n } else {\n addEntry(\n { type, parent: type !== SupportedEntry.Group ? parentGroup : null },\n {\n lastEventId: referenceEntryId,\n after: referenceEntryId,\n },\n );\n }\n };\n\n return (\n <div className={style.quickAdd} data-testid='quick-add-inline'>\n <DropdownMenu\n items={[\n { type: 'item', icon: IoAdd, label: 'Add Event', onClick: () => handleAddEntry(SupportedEntry.Event) },\n { type: 'item', icon: IoAdd, label: 'Add Delay', onClick: () => handleAddEntry(SupportedEntry.Delay) },\n {\n type: 'item',\n icon: IoAdd,\n label: 'Add Milestone',\n onClick: () => handleAddEntry(SupportedEntry.Milestone),\n },\n {\n type: 'item',\n icon: IoAdd,\n label: 'Add Group',\n onClick: () => handleAddEntry(SupportedEntry.Group),\n disabled: parentGroup !== null,\n },\n ]}\n render={<IconButton size='small' variant='primary' className={style.addButton} />}\n >\n <IoAdd />\n </DropdownMenu>\n </div>\n );\n}\n","import { useCallback } from 'react';\nimport { type EntryId, type OntimeEntry, type Rundown, SupportedEntry } from 'ontime-types';\nimport { getNextGroupNormal, getNextNormal, getPreviousGroupNormal, getPreviousNormal } from 'ontime-utils';\n\nimport type { useEntryActions } from '../../../common/hooks/useEntryAction';\nimport { useEntryCopy } from '../../../common/stores/entryCopyStore';\nimport { SelectionMode } from '../useEventSelection';\n\nconst PAGE_SIZE = 5;\n\ninterface UseRundownCommandsOptions {\n entries: Rundown['entries'];\n flatOrder: EntryId[];\n entryActions: ReturnType<typeof useEntryActions>;\n selectEntry: (selection: { id: EntryId; selectMode: SelectionMode; index: number }) => void;\n handleCollapseGroup: (collapsed: boolean, groupId: EntryId) => void;\n}\n\n/**\n * Common operations for the rundown lists\n */\nexport function useRundownCommands({\n entries,\n flatOrder,\n entryActions,\n selectEntry: applySelection,\n handleCollapseGroup,\n}: UseRundownCommandsOptions) {\n const { addEntry, clone, deleteEntry, move, reorderEntry } = entryActions;\n\n const deleteAtCursor = useCallback(\n (cursor: string | null) => {\n if (!cursor) return;\n const { entry, index } = getPreviousNormal(entries, flatOrder, cursor);\n deleteEntry([cursor]);\n if (entry && index !== null) {\n applySelection({ id: entry.id, selectMode: 'click', index });\n }\n },\n [entries, flatOrder, deleteEntry, applySelection],\n );\n\n const insertCopyAtId = useCallback(\n (atId: EntryId | null, above = false) => {\n // lazily get the value from the store\n const { entryCopyId, entryCopyMode, setEntryCopyId } = useEntryCopy.getState();\n if (entryCopyId === null || !entries[entryCopyId]) {\n // we cant clone without selection\n return;\n }\n\n let normalisedAtId = atId;\n\n const elementToCopy = entries[entryCopyId];\n const refElement = atId ? entries[atId] : undefined;\n\n if (refElement && 'parent' in refElement && refElement.parent && elementToCopy.type === SupportedEntry.Group) {\n normalisedAtId = refElement.parent;\n }\n\n if (entryCopyMode === 'cut') {\n if (!normalisedAtId) {\n const firstId = flatOrder[0];\n if (!firstId || firstId === entryCopyId) {\n return;\n }\n reorderEntry(entryCopyId, firstId, 'before')\n .then(() => setEntryCopyId(null))\n .catch(() => {});\n return;\n }\n if (normalisedAtId === entryCopyId) {\n return;\n }\n const placement = above ? 'before' : 'after';\n reorderEntry(entryCopyId, normalisedAtId, placement)\n .then(() => setEntryCopyId(null))\n .catch(() => {});\n return;\n }\n\n clone(entryCopyId, {\n after: above ? undefined : normalisedAtId ?? undefined,\n // if we don't have a cursor add the new event on top\n before: above ? normalisedAtId ?? undefined : undefined,\n });\n },\n [entries, flatOrder, clone, reorderEntry],\n );\n\n /**\n * Add a new item referring to an existing one\n */\n const insertAtId = useCallback(\n (patch: Partial<OntimeEntry> & { type: SupportedEntry }, id: EntryId | null, above = false) => {\n addEntry(patch, {\n after: id && !above ? id : undefined,\n before: id && above ? id : undefined,\n lastEventId: !above && id ? id : undefined,\n });\n },\n [addEntry],\n );\n\n const selectGroup = useCallback(\n (cursor: EntryId | null, direction: 'up' | 'down') => {\n if (flatOrder.length < 1) {\n return null;\n }\n const selected =\n direction === 'up'\n ? getPreviousGroupNormal(entries, flatOrder, cursor)\n : getNextGroupNormal(entries, flatOrder, cursor);\n\n if (selected.entry && selected.index !== null) {\n applySelection({ id: selected.entry.id, selectMode: 'click', index: selected.index });\n return selected.entry.id;\n }\n return null;\n },\n [flatOrder, entries, applySelection],\n );\n\n const selectEntry = useCallback(\n (cursor: EntryId | null, direction: 'up' | 'down') => {\n if (flatOrder.length < 1) {\n return null;\n }\n\n const selected =\n direction === 'up' ? getPreviousNormal(entries, flatOrder, cursor) : getNextNormal(entries, flatOrder, cursor);\n\n if (selected.entry && selected.index !== null) {\n applySelection({ id: selected.entry.id, selectMode: 'click', index: selected.index });\n return selected.entry.id;\n }\n return null;\n },\n [flatOrder, entries, applySelection],\n );\n\n const moveEntry = useCallback(\n async (cursor: EntryId | null, direction: 'up' | 'down') => {\n if (cursor == null) {\n return;\n }\n\n const movedIntoGroupId = await move(cursor, direction);\n // if we are moving into a group, we need to make sure it is expanded\n if (movedIntoGroupId) {\n handleCollapseGroup(false, movedIntoGroupId);\n }\n },\n [handleCollapseGroup, move],\n );\n\n const cloneEntry = useCallback(\n (cursor: EntryId | null) => {\n if (!cursor) {\n return;\n }\n clone(cursor, { after: cursor });\n },\n [clone],\n );\n\n const selectEdge = useCallback(\n (direction: 'top' | 'bottom') => {\n if (flatOrder.length < 1) {\n return null;\n }\n\n const index = direction === 'top' ? 0 : flatOrder.length - 1;\n const selectedId = flatOrder[index];\n if (!selectedId) return null;\n\n applySelection({ id: selectedId, selectMode: 'click', index });\n return selectedId;\n },\n [flatOrder, applySelection],\n );\n\n const selectPage = useCallback(\n (cursor: EntryId | null, direction: 'up' | 'down') => {\n if (flatOrder.length < 1) {\n return null;\n }\n\n let currentIndex = cursor ? flatOrder.indexOf(cursor) : -1;\n if (currentIndex === -1) {\n currentIndex = direction === 'down' ? -1 : flatOrder.length;\n }\n\n let targetIndex = currentIndex;\n let lastValidIndex: number | null = null;\n for (let step = 0; step < PAGE_SIZE; step += 1) {\n targetIndex = direction === 'down' ? targetIndex + 1 : targetIndex - 1;\n if (targetIndex < 0 || targetIndex >= flatOrder.length) {\n break;\n }\n lastValidIndex = targetIndex;\n }\n\n if (lastValidIndex === null) {\n return null;\n }\n\n const selectedId = flatOrder[lastValidIndex];\n if (!selectedId) return null;\n\n applySelection({ id: selectedId, selectMode: 'click', index: lastValidIndex });\n return selectedId;\n },\n [flatOrder, applySelection],\n );\n\n return {\n cloneEntry,\n deleteAtCursor,\n insertCopyAtId,\n insertAtId,\n selectGroup,\n selectEntry,\n moveEntry,\n selectEdge,\n selectPage,\n };\n}\n","import { Dispatch, SetStateAction, useCallback, useMemo, useRef } from 'react';\nimport { DragEndEvent, DragOverEvent, DragStartEvent, PointerSensor, useSensor, useSensors } from '@dnd-kit/core';\nimport { type EntryId, type Rundown, isOntimeGroup, SupportedEntry } from 'ontime-types';\nimport { reorderArray } from 'ontime-utils';\n\nimport type { useEntryActions } from '../../../common/hooks/useEntryAction';\nimport { canDrop } from '../rundown.utils';\n\ninterface UseRundownDndOptions {\n entries: Rundown['entries'];\n sortableData: EntryId[];\n setSortableData: Dispatch<SetStateAction<EntryId[]>>;\n getIsCollapsed: (groupId: EntryId) => boolean;\n handleCollapseGroup: (collapsed: boolean, groupId: EntryId | undefined) => void;\n entryActions: ReturnType<typeof useEntryActions>;\n}\n\nexport function useRundownDnd({\n entries,\n sortableData,\n setSortableData,\n getIsCollapsed,\n handleCollapseGroup,\n entryActions,\n}: UseRundownDndOptions) {\n const { reorderEntry } = entryActions;\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 10 } }));\n const isDraggingRef = useRef(false);\n\n /**\n * On drag end, we reorder the events\n */\n const handleOnDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n isDraggingRef.current = false;\n\n if (!over?.id || active.id === over.id) {\n return;\n }\n\n if (!active.data.current || !over.data.current) {\n return;\n }\n\n const fromIndex: number = active.data.current.sortable.index;\n const toIndex: number = over.data.current.sortable.index;\n let placement: 'before' | 'after' | 'insert' = fromIndex < toIndex ? 'after' : 'before';\n\n let destinationId = over.id as EntryId;\n const isDraggingGroup = active.data.current?.type === SupportedEntry.Group;\n\n // prevent dropping a group inside another\n if (\n isDraggingGroup &&\n !canDrop(over.data.current.type, over.data.current.parent, placement, getIsCollapsed(destinationId))\n ) {\n return;\n }\n\n /**\n * We need to specially handle the end-group\n * Dragging before a end-group will add the entry to the end of the group\n * Dragging after a end-group will add the event after the group itself\n * Dragging to the top of a group either place before first entry or if no entries do insert\n */\n if (destinationId.startsWith('end-')) {\n destinationId = destinationId.replace('end-', '');\n // if we are moving before the end, we use the insert operation\n if (placement === 'before') {\n placement = 'insert';\n }\n } else {\n const group = entries[destinationId];\n // if dragging into a group\n if (isOntimeGroup(group) && placement === 'after') {\n if (isDraggingGroup) {\n // ... and the dragged entry is a group, we know that the group is collapsed, because of the safe check canDrop from before\n // so we can safely push the dragged event after the group\n destinationId = group.id;\n } else if (group.entries.length === 0) {\n // ... and the group is entry, we insert\n destinationId = group.id;\n placement = 'insert';\n } else {\n // otherwise we add it to before the first group child\n destinationId = group.entries[0];\n placement = 'before';\n }\n }\n }\n\n // Optimistic update pattern to keep DND responsive\n // 1. Keep copy of current state in case we need to revert\n const currentEntries = [...sortableData];\n // 2. Immediately update local state for responsive UI\n setSortableData((currentEntries) => {\n return reorderArray(currentEntries, fromIndex, toIndex);\n });\n // 3. Trigger async mutation, revert on error\n reorderEntry(active.id as EntryId, destinationId, placement).catch((_) => {\n setSortableData(currentEntries);\n });\n },\n [entries, sortableData, setSortableData, getIsCollapsed, reorderEntry],\n );\n\n /**\n * When we drag a group, we force collapse it\n * This avoids strange scenarios like dropping a group inside itself\n */\n const collapseDraggedGroups = useCallback(\n (event: DragStartEvent) => {\n isDraggingRef.current = true;\n const isGroup = event.active.data.current?.type === SupportedEntry.Group;\n if (isGroup) {\n handleCollapseGroup(true, event.active.id as EntryId);\n }\n },\n [handleCollapseGroup],\n );\n\n /**\n * When we drag over a group, we expand it if it is collapsed\n */\n const expandOverGroup = useCallback(\n (event: DragOverEvent) => {\n // if we are dragging a group, the drop operation is invalid so we dont expand\n if (event.active.data.current?.type === SupportedEntry.Group) {\n return;\n }\n if (event.over?.data.current?.type !== SupportedEntry.Group) {\n return;\n }\n\n const groupId = event.over?.id as EntryId | undefined;\n handleCollapseGroup(false, groupId);\n },\n [handleCollapseGroup],\n );\n\n return useMemo(\n () => ({\n sensors,\n isDraggingRef,\n handleOnDragEnd,\n collapseDraggedGroups,\n expandOverGroup,\n }),\n [sensors, handleOnDragEnd, collapseDraggedGroups, expandOverGroup],\n );\n}\n","import { useHotkeys } from '@mantine/hooks';\nimport { type OntimeEntry, EntryId, SupportedEntry } from 'ontime-types';\n\nimport { useEntryCopy } from '../../../common/stores/entryCopyStore';\nimport { useEventSelection } from '../useEventSelection';\n\ninterface UseRundownKeyboardOptions {\n cursor: EntryId | null;\n commands: {\n selectEntry: (cursor: EntryId | null, direction: 'up' | 'down') => EntryId | null;\n selectGroup: (cursor: EntryId | null, direction: 'up' | 'down') => EntryId | null;\n selectEdge: (direction: 'top' | 'bottom') => EntryId | null;\n selectPage: (cursor: EntryId | null, direction: 'up' | 'down') => EntryId | null;\n cloneEntry: (cursor: EntryId | null) => void;\n moveEntry: (cursor: EntryId | null, direction: 'up' | 'down') => void;\n deleteAtCursor: (cursor: EntryId | null) => void;\n insertAtId: (patch: Partial<OntimeEntry> & { type: SupportedEntry }, id: EntryId | null, above?: boolean) => void;\n insertCopyAtId: (atId: EntryId | null, above?: boolean) => void;\n };\n clearSelectedEvents: () => void;\n setEntryCopyId: (id: EntryId | null, mode?: 'copy' | 'cut') => void;\n}\n\n/**\n * Returns true when a keyboard event target is a text input element.\n * Use this to avoid intercepting browser-native copy/cut/paste shortcuts\n * while users are typing in form fields.\n */\nfunction isEditableElement(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) {\n return false;\n }\n\n const tagName = target.tagName.toLowerCase();\n return tagName === 'input' || tagName === 'textarea';\n}\n\nexport function useRundownKeyboard({\n cursor,\n commands,\n clearSelectedEvents,\n setEntryCopyId,\n}: UseRundownKeyboardOptions) {\n const scrollToEntry = useEventSelection((state) => state.scrollToEntry);\n\n useHotkeys([\n [\n 'alt + ArrowDown',\n () => {\n const nextId = commands.selectEntry(cursor, 'down');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + ArrowUp',\n () => {\n const nextId = commands.selectEntry(cursor, 'up');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'alt + shift + ArrowDown',\n () => {\n const nextId = commands.selectGroup(cursor, 'down');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + shift + ArrowUp',\n () => {\n const nextId = commands.selectGroup(cursor, 'up');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'Home',\n () => {\n const nextId = commands.selectEdge('top');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'End',\n () => {\n const nextId = commands.selectEdge('bottom');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'PageUp',\n () => {\n const nextId = commands.selectPage(cursor, 'up');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'PageDown',\n () => {\n const nextId = commands.selectPage(cursor, 'down');\n if (nextId) {\n scrollToEntry(nextId);\n }\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'alt + mod + ArrowDown',\n () => commands.moveEntry(cursor, 'down'),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n ['alt + mod + ArrowUp', () => commands.moveEntry(cursor, 'up'), { preventDefault: true, usePhysicalKeys: true }],\n\n [\n 'Escape',\n () => {\n clearSelectedEvents();\n setEntryCopyId(null);\n },\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n ['alt + Backspace', () => commands.deleteAtCursor(cursor), { preventDefault: true, usePhysicalKeys: true }],\n\n [\n 'alt + E',\n () => commands.insertAtId({ type: SupportedEntry.Event }, cursor),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + shift + E',\n () => commands.insertAtId({ type: SupportedEntry.Event }, cursor, true),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'alt + G',\n () => commands.insertAtId({ type: SupportedEntry.Group }, cursor),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + shift + G',\n () => commands.insertAtId({ type: SupportedEntry.Group }, cursor, true),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'alt + D',\n () => commands.insertAtId({ type: SupportedEntry.Delay }, cursor),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + shift + D',\n () => commands.insertAtId({ type: SupportedEntry.Delay }, cursor, true),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'alt + M',\n () => commands.insertAtId({ type: SupportedEntry.Milestone }, cursor),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n [\n 'alt + shift + M',\n () => commands.insertAtId({ type: SupportedEntry.Milestone }, cursor, true),\n { preventDefault: true, usePhysicalKeys: true },\n ],\n\n [\n 'mod + C',\n (event) => {\n if (cursor === null || isEditableElement(event.target)) {\n return;\n }\n event.preventDefault();\n setEntryCopyId(cursor);\n },\n { usePhysicalKeys: true },\n ],\n [\n 'mod + X',\n (event) => {\n if (cursor === null || isEditableElement(event.target)) {\n return;\n }\n event.preventDefault();\n setEntryCopyId(cursor, 'cut');\n },\n { usePhysicalKeys: true },\n ],\n [\n 'mod + V',\n (event) => {\n if (isEditableElement(event.target) || useEntryCopy.getState().entryCopyId === null) {\n return;\n }\n event.preventDefault();\n commands.insertCopyAtId(cursor);\n },\n { usePhysicalKeys: true },\n ],\n ['mod + D', () => commands.cloneEntry(cursor), { preventDefault: true, usePhysicalKeys: true }],\n [\n 'mod + shift + V',\n (event) => {\n if (isEditableElement(event.target) || useEntryCopy.getState().entryCopyId === null) {\n return;\n }\n event.preventDefault();\n commands.insertCopyAtId(cursor, true);\n },\n { usePhysicalKeys: true },\n ],\n ]);\n}\n","import { MouseEvent, useCallback } from 'react';\n\nimport { useContextMenuStore } from '../../features/rundown/rundown-context-menu/RundownContextMenu';\nimport { DropdownMenuOption } from '../components/dropdown-menu/DropdownMenu';\n\ntype ContextMenuOptions = () => DropdownMenuOption[];\n\nexport const useContextMenu = <T extends HTMLElement>(options: ContextMenuOptions) => {\n const setContextMenu = useContextMenuStore((state) => state.setContextMenu);\n\n const localCreateContextMenu = useCallback(\n (contextMenuEvent: MouseEvent<T, globalThis.MouseEvent>) => {\n // prevent browser default context menu from showing up\n contextMenuEvent.preventDefault();\n\n const { pageX, pageY } = contextMenuEvent;\n const menuOptions = options();\n return setContextMenu({ x: pageX, y: pageY }, menuOptions);\n },\n [options, setContextMenu],\n );\n\n return [localCreateContextMenu];\n};\n","import { useCallback, useRef } from 'react';\n\nimport Input from '../../../common/components/input/input/Input';\nimport useReactiveTextInput from '../../../common/components/input/text-input/useReactiveTextInput';\nimport { useEntryActionsContext } from '../../../common/context/EntryActionsContext';\nimport { cx } from '../../../common/utils/styleUtils';\n\nimport style from './TitleEditor.module.scss';\n\ninterface TitleEditorProps {\n title: string;\n entryId: string;\n placeholder: string;\n className?: string;\n}\n\nexport default function TitleEditor({ title, entryId, placeholder, className }: TitleEditorProps) {\n const { updateEntry } = useEntryActionsContext();\n const ref = useRef<HTMLInputElement | null>(null);\n const submitCallback = useCallback(\n (text: string) => {\n if (text === title) {\n return;\n }\n\n const cleanVal = text.trim();\n updateEntry({ id: entryId, title: cleanVal });\n },\n [title, updateEntry, entryId],\n );\n\n const { value, onChange, onBlur, onKeyDown } = useReactiveTextInput(title, submitCallback, ref, {\n submitOnEnter: true,\n });\n\n const classes = cx([className, style.eventTitle, !value ? style.noTitle : null]);\n\n return (\n <Input\n data-testid='entry__title'\n variant='ghosted'\n fluid\n ref={ref}\n value={value}\n className={classes}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n />\n );\n}\n","import { MouseEvent, useRef } from 'react';\nimport {\n IoChevronDown,\n IoChevronUp,\n IoDuplicateOutline,\n IoFolderOpenOutline,\n IoReorderTwo,\n IoTrash,\n} from 'react-icons/io5';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { EntryId, OntimeGroup } from 'ontime-types';\nimport { MILLIS_PER_MINUTE, millisToString } from 'ontime-utils';\n\nimport IconButton from '../../../common/components/buttons/IconButton';\nimport Tag from '../../../common/components/tag/Tag';\nimport { useEntryActionsContext } from '../../../common/context/EntryActionsContext';\nimport { useContextMenu } from '../../../common/hooks/useContextMenu';\nimport { useEntryCopy } from '../../../common/stores/entryCopyStore';\nimport { deviceMod } from '../../../common/utils/deviceUtils';\nimport { getOffsetState } from '../../../common/utils/offset';\nimport { cx, getAccessibleColour, timerPlaceholder } from '../../../common/utils/styleUtils';\nimport { formatDuration } from '../../../common/utils/time';\nimport TitleEditor from '../common/TitleEditor';\nimport { canDrop } from '../rundown.utils';\nimport { useEventSelection } from '../useEventSelection';\n\nimport style from './RundownGroup.module.scss';\n\ninterface RundownGroupProps {\n data: OntimeGroup;\n hasCursor: boolean;\n collapsed: boolean;\n onCollapse: (collapsed: boolean, groupId: EntryId) => void;\n}\n\n//TODO: the group should maybe include a multiple day indicator\nexport default function RundownGroup({ data, hasCursor, collapsed, onCollapse }: RundownGroupProps) {\n 'use memo';\n\n const handleRef = useRef<null | HTMLSpanElement>(null);\n const { clone, ungroup, deleteEntry } = useEntryActionsContext();\n\n const selectSingleEntry = useEventSelection((state) => state.setSingleEntrySelection);\n const selectedEvents = useEventSelection((state) => state.selectedEvents);\n const entryCopyId = useEntryCopy((state) => state.entryCopyId);\n\n const [onContextMenu] = useContextMenu<HTMLDivElement>(() => [\n {\n type: 'item',\n label: 'Clone Group',\n icon: IoDuplicateOutline,\n shortcut: `${deviceMod}+D`,\n onClick: () => clone(data.id),\n },\n {\n type: 'item',\n label: 'Ungroup',\n icon: IoFolderOpenOutline,\n onClick: () => ungroup(data.id),\n disabled: data.entries.length === 0,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Delete Group',\n icon: IoTrash,\n shortcut: `${deviceMod}+Del`,\n onClick: () => deleteEntry([data.id]),\n },\n ]);\n\n const {\n attributes: dragAttributes,\n listeners: dragListeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n isOver,\n over,\n } = useSortable({\n id: data.id,\n data: {\n type: 'group',\n },\n animateLayoutChanges: () => false,\n });\n\n const handleFocusClick = (event: MouseEvent) => {\n event.stopPropagation();\n\n // event.button === 2 is a right-click\n // disable selection if the user selected events and right clicks\n // so the context menu shows up\n if (selectedEvents.size > 1 && event.button === 2) {\n return;\n }\n\n // UI indexes are 1 based\n selectSingleEntry({ id: data.id });\n };\n\n const binderColours = data.colour && getAccessibleColour(data.colour);\n const isValidDrop = isDragging && over?.id && canDrop(over.data.current?.type, over.data.current?.parent);\n\n const [planOffset, planOffsetLabel] = (() => {\n if (data.targetDuration === null) {\n return [null, null];\n }\n\n const offset = data.duration - data.targetDuration;\n if (offset === 0) {\n return [null, 'under'];\n }\n const absOffset = Math.abs(offset);\n return [\n `${offset < 0 ? '-' : '+'}${formatDuration(absOffset, absOffset > 2 * MILLIS_PER_MINUTE)}`,\n getOffsetState(offset),\n ];\n })();\n\n const dragStyle = {\n zIndex: isDragging ? 2 : 'inherit',\n transform: CSS.Translate.toString(transform),\n transition,\n cursor: isOver ? (isValidDrop ? 'grabbing' : 'no-drop') : 'inherit',\n };\n\n return (\n <div\n className={cx([\n style.group,\n hasCursor && style.hasCursor,\n !collapsed && style.expanded,\n entryCopyId === data.id && style.copyTarget,\n ])}\n ref={setNodeRef}\n onClick={handleFocusClick}\n onContextMenu={onContextMenu}\n style={{\n ...dragStyle,\n '--user-bg': data.colour || '#929292',\n }}\n data-testid='rundown-group'\n >\n <div className={style.binder} style={{ ...binderColours }} tabIndex={-1}>\n <span\n className={cx([style.drag, isDragging && style.isDragging, isDragging && !isValidDrop && style.notAllowed])}\n ref={handleRef}\n {...dragAttributes}\n {...dragListeners}\n >\n <IoReorderTwo />\n </span>\n </div>\n <div className={style.header}>\n <div className={style.titleRow}>\n <TitleEditor title={data.title} entryId={data.id} placeholder='Group title' />\n <IconButton aria-label='Collapse' variant='subtle-white' onClick={() => onCollapse(!collapsed, data.id)}>\n {collapsed ? <IoChevronUp /> : <IoChevronDown />}\n </IconButton>\n </div>\n <div className={style.metaRow}>\n <div className={style.metaEntry}>\n <div className={style.metaLabel}>Entries</div>\n <div>{data.entries.length}</div>\n </div>\n <div className={style.metaEntry}>\n <div className={style.metaLabel}>Start</div>\n <div>{millisToString(data.timeStart, { fallback: timerPlaceholder })}</div>\n </div>\n <div className={style.metaEntry}>\n <div className={style.metaLabel}>End</div>\n <div>{millisToString(data.timeEnd, { fallback: timerPlaceholder })}</div>\n </div>\n <div className={style.metaEntry}>\n <div className={style.metaLabel}>Duration</div>\n {planOffset === null ? (\n <div>{formatDuration(data.duration)}</div>\n ) : (\n <div className={cx([planOffsetLabel && style[planOffsetLabel]])}>\n <span className={style.strike}>{formatDuration(data.duration)}</span>\n <Tag className={style.offsetLabel}>{planOffset}</Tag>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nimport style from './RundownGroupEnd.module.scss';\n\ninterface RundownGroupEndProps {\n id: string;\n colour?: string;\n}\n\nexport default function RundownGroupEnd({ id, colour }: RundownGroupEndProps) {\n const {\n attributes: dragAttributes,\n listeners: dragListeners,\n setNodeRef,\n transform,\n transition,\n } = useSortable({\n id,\n data: {\n type: 'end-group',\n },\n animateLayoutChanges: () => false,\n disabled: true, // we do not want to drag end groups\n });\n\n const dragStyle = {\n transform: CSS.Transform.toString(transform),\n transition,\n };\n\n return (\n <div\n className={style.groupEnd}\n ref={setNodeRef}\n {...dragAttributes}\n {...dragListeners}\n style={{\n ...dragStyle,\n ...(colour ? { '--user-bg': colour } : {}),\n }}\n tabIndex={-1}\n />\n );\n}\n","import { IoAdd } from 'react-icons/io5';\nimport { SupportedEntry } from 'ontime-types';\n\nimport Button from '../../common/components/buttons/Button';\nimport * as Editor from '../../common/components/editor-utils/EditorUtils';\nimport Empty from '../../common/components/state/Empty';\n\nimport style from './Empty.module.scss';\n\ninterface RundownEmptyProps {\n handleAddNew: (type: SupportedEntry) => void;\n}\n\nexport default function RundownEmpty(props: RundownEmptyProps) {\n const { handleAddNew } = props;\n\n return (\n <div className={style.empty}>\n <Empty injectedStyles={{ marginTop: '5vh', marginBottom: '3rem' }} />\n <div className={style.inline}>\n <Button onClick={() => handleAddNew(SupportedEntry.Event)} variant='primary' size='large'>\n <IoAdd />\n Create Event\n </Button>\n\n <Editor.Separator />\n\n <Button onClick={() => handleAddNew(SupportedEntry.Group)} variant='primary' size='large'>\n <IoAdd /> Create Group\n </Button>\n </div>\n </div>\n );\n}\n","import { type HTMLProps, forwardRef, Fragment, lazy, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { TbFlagFilled } from 'react-icons/tb';\nimport { Virtuoso, VirtuosoHandle } from 'react-virtuoso';\nimport { closestCenter, DndContext } from '@dnd-kit/core';\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport {\n type EntryId,\n type Rundown as RundownType,\n isOntimeEvent,\n isOntimeGroup,\n Playback,\n SupportedEntry,\n} from 'ontime-types';\n\nimport { useEntryActionsContext } from '../../common/context/EntryActionsContext';\nimport { useEntryCopy } from '../../common/stores/entryCopyStore';\nimport { lastMetadataKey, RundownMetadataObject } from '../../common/utils/rundownMetadata';\nimport { AppMode } from '../../ontimeConfig';\n\nimport QuickAddButtons from './entry-editor/quick-add-buttons/QuickAddButtons';\nimport QuickAddInline from './entry-editor/quick-add-cursor/QuickAddInline';\nimport { useRundownCommands } from './hooks/useRundownCommands';\nimport { useRundownDnd } from './hooks/useRundownDnd';\nimport { useRundownKeyboard } from './hooks/useRundownKeyboard';\nimport RundownGroup from './rundown-group/RundownGroup';\nimport RundownGroupEnd from './rundown-group/RundownGroupEnd';\nimport { filterVisibleEntries, makeSortableList } from './rundown.utils';\nimport RundownEmpty from './RundownEmpty';\nimport { useCollapsedGroups } from './useCollapsedGroups';\nimport { useEditorFollowMode } from './useEditorFollowMode';\nimport { useEventSelection } from './useEventSelection';\n\nimport style from './Rundown.module.scss';\n\nconst RundownEntry = lazy(() => import('./RundownEntry'));\n\ninterface RundownProps {\n entries: RundownType['entries'];\n id: RundownType['id'];\n order: RundownType['order'];\n flatOrder: RundownType['flatOrder'];\n rundownMetadata: RundownMetadataObject;\n featureData: {\n playback: Playback;\n selectedEventId: EntryId | null;\n nextEventId: EntryId | null;\n };\n}\n\nexport default function Rundown({ order, flatOrder, entries, id, rundownMetadata, featureData }: RundownProps) {\n // invoke the compiler for the component\n 'use memo';\n\n const [sortableData, setSortableData] = useState<EntryId[]>(() => makeSortableList(order, entries));\n const [metadata, setMetadata] = useState<RundownMetadataObject>(rundownMetadata);\n\n /**\n * We need to keep a copy of the events we receive to\n * workaround issues with dnd-kit optimistic updates\n */\n useEffect(() => {\n setSortableData(makeSortableList(order, entries));\n setMetadata(rundownMetadata);\n }, [order, entries, rundownMetadata]);\n\n const { getIsCollapsed, collapseGroup, expandGroup } = useCollapsedGroups(id);\n\n const entryActions = useEntryActionsContext();\n const setEntryCopyId = useEntryCopy((state) => state.setEntryCopyId);\n\n // cursor\n const { editorMode } = useEditorFollowMode();\n\n const clearSelectedEvents = useEventSelection((state) => state.clearSelectedEvents);\n const cursor = useEventSelection((state) => state.cursor);\n const scrollToEntry = useEventSelection((state) => state.scrollToEntry);\n const setScrollHandler = useEventSelection((state) => state.setScrollHandler);\n const selectEntry = useEventSelection((state) => state.setSelectedEvents);\n\n const cursorRef = useRef<HTMLDivElement | null>(null);\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const virtuosoRef = useRef<VirtuosoHandle | null>(null);\n\n /**\n * Handles logic for collapsing groups\n */\n const handleCollapseGroup = useCallback(\n (collapsed: boolean, groupId: EntryId | undefined) => {\n if (collapsed) {\n collapseGroup(groupId);\n } else {\n expandGroup(groupId);\n }\n },\n [collapseGroup, expandGroup],\n );\n\n // Commands layer - business logic\n const commands = useRundownCommands({\n entries,\n flatOrder,\n entryActions,\n selectEntry,\n handleCollapseGroup,\n });\n\n // Keyboard shortcuts\n useRundownKeyboard({\n cursor,\n commands,\n clearSelectedEvents,\n setEntryCopyId,\n });\n\n // DND handlers\n const dnd = useRundownDnd({\n entries,\n sortableData,\n setSortableData,\n getIsCollapsed,\n handleCollapseGroup,\n entryActions,\n });\n\n // Filter visible data to exclude collapsed items\n // DND-kit (SortableContext) needs the full sortableData for drag calculations\n // Virtuoso only renders visibleData to avoid null items that reserve space\n const visibleData = useMemo(() => {\n return filterVisibleEntries(sortableData, entries, getIsCollapsed);\n }, [sortableData, entries, getIsCollapsed]);\n\n // Provide an imperative scroll handler for explicit jumps (finder/keyboard)\n useEffect(() => {\n setScrollHandler((entryId) => {\n if (!virtuosoRef.current || dnd.isDraggingRef.current) {\n return;\n }\n const index = visibleData.indexOf(entryId);\n if (index === -1) {\n return;\n }\n virtuosoRef.current.scrollToIndex({\n index,\n align: 'start',\n behavior: 'smooth',\n offset: -100, // show the previous entry for context\n });\n });\n\n return () => {\n setScrollHandler(null);\n };\n }, [visibleData, dnd.isDraggingRef, setScrollHandler]);\n\n // Keep selected cursor visible by expanding its parent group in any mode.\n // Finder can select entries while layout is in Run mode, where we do not follow cursor scroll.\n useEffect(() => {\n if (!cursor) {\n return;\n }\n\n const entry = entries[cursor];\n if (entry && 'parent' in entry) {\n expandGroup(entry.parent);\n }\n }, [cursor, entries, expandGroup]);\n\n // Auto-follow behavior in Edit mode: follow the user's cursor\n useEffect(() => {\n if (dnd.isDraggingRef.current || editorMode !== AppMode.Edit || !cursor) {\n return;\n }\n\n scrollToEntry(cursor);\n }, [editorMode, cursor, scrollToEntry, dnd.isDraggingRef]);\n\n // Auto-follow behavior in Run mode: follow the currently playing event\n useEffect(() => {\n if (dnd.isDraggingRef.current || editorMode !== AppMode.Run || !featureData?.selectedEventId) {\n return;\n }\n\n // Open parent group if the target is inside a collapsed group\n const entry = entries[featureData.selectedEventId];\n if (entry && 'parent' in entry) {\n expandGroup(entry.parent);\n }\n scrollToEntry(featureData.selectedEventId);\n }, [editorMode, featureData?.selectedEventId, entries, expandGroup, scrollToEntry, dnd.isDraggingRef]);\n\n // gather presentation options\n const isEditMode = editorMode === AppMode.Edit;\n\n // gather rundown wide data\n const lastEntryId = order.at(-1);\n\n // Extract primitive values from featureData to avoid unnecessary callback recreations\n const nextEventId = featureData?.nextEventId;\n const playback = featureData?.playback;\n\n // Virtuoso item renderer\n const itemContent = useCallback(\n (index: number, entryId: EntryId) => {\n // Handle end-group pseudo entries\n const isEndGroup = entryId.startsWith('end-');\n\n if (isEndGroup) {\n const parentId = entryId.split('end-')[1];\n const parentMetadata = metadata[parentId];\n\n return (\n <Fragment key={entryId}>\n {isEditMode && parentMetadata?.groupEntries === 0 && (\n <QuickAddButtons\n previousEventId={null}\n parentGroup={parentId}\n backgroundColor={parentMetadata?.groupColour}\n />\n )}\n <RundownGroupEnd key={entryId} id={entryId} colour={parentMetadata?.groupColour} />\n </Fragment>\n );\n }\n\n const entry = entries[entryId];\n const entryMetadata = metadata[entryId];\n\n if (!entry || !entryMetadata) {\n return null;\n }\n\n const isNext = nextEventId === entry.id;\n const hasCursor = entry.id === cursor;\n const isGroup = isOntimeGroup(entry);\n const groupColour = entryMetadata.groupColour === '' ? '#9d9d9d' : entryMetadata.groupColour;\n const isFirst = index === 0;\n const isLast = entryId === lastEntryId;\n const parentIdForBefore = entryMetadata.thisId !== entryMetadata.groupId ? entryMetadata.groupId : null;\n const parentIdForAfter = entryMetadata.groupId;\n const collapsed = isGroup ? getIsCollapsed(entry.id) : false;\n\n return (\n <Fragment key={entry.id}>\n {/* QuickAddInline before the entry - edit mode only, if there is a cursor, if it is not the first entry */}\n {isEditMode && hasCursor && !isFirst && (\n <QuickAddInline placement='before' referenceEntryId={entry.id} parentGroup={parentIdForBefore} />\n )}\n {isGroup ? (\n <RundownGroup data={entry} hasCursor={hasCursor} collapsed={collapsed} onCollapse={handleCollapseGroup} />\n ) : (\n <div\n className={style.entryWrapper}\n data-testid={`entry-${entryMetadata.eventIndex}`}\n style={groupColour ? { '--user-bg': groupColour } : {}}\n >\n {isOntimeEvent(entry) && (\n <div className={style.entryIndex}>\n {entry.flag && <TbFlagFilled className={style.flag} />}\n <div className={style.index}>{entryMetadata.eventIndex}</div>\n </div>\n )}\n <div className={style.entry} key={entry.id} ref={hasCursor ? cursorRef : undefined}>\n <RundownEntry\n type={entry.type}\n isPast={entryMetadata.isPast}\n eventIndex={entryMetadata.eventIndex}\n data={entry}\n loaded={entryMetadata.isLoaded}\n hasCursor={hasCursor}\n isNext={isNext}\n isNextDay={entryMetadata.isNextDay}\n playback={entryMetadata.isLoaded ? playback : undefined}\n isRolling={playback === Playback.Roll}\n totalGap={entryMetadata.totalGap}\n isLinkedToLoaded={entryMetadata.isLinkedToLoaded}\n />\n </div>\n </div>\n )}\n {/* QuickAddInline after the entry - edit mode only, if there is a cursor, if it is not the last entry */}\n {isEditMode && hasCursor && !isLast && (\n <QuickAddInline placement='after' referenceEntryId={entry.id} parentGroup={parentIdForAfter} />\n )}\n </Fragment>\n );\n },\n [entries, metadata, getIsCollapsed, isEditMode, cursor, nextEventId, playback, lastEntryId, handleCollapseGroup],\n );\n\n if (sortableData.length < 1) {\n return <RundownEmpty handleAddNew={(type: SupportedEntry) => entryActions.addEntry({ type })} />;\n }\n\n return (\n <div className={style.rundownContainer} ref={scrollRef} data-testid='rundown'>\n <DndContext\n onDragEnd={dnd.handleOnDragEnd}\n onDragStart={dnd.collapseDraggedGroups}\n onDragOver={dnd.expandOverGroup}\n sensors={dnd.sensors}\n collisionDetection={closestCenter}\n >\n <SortableContext items={sortableData} strategy={verticalListSortingStrategy}>\n <Virtuoso\n ref={virtuosoRef}\n data={visibleData}\n computeItemKey={(_index, entryId) => entryId}\n itemContent={itemContent}\n increaseViewportBy={{ top: 200, bottom: 400 }}\n style={{ height: '100%' }}\n components={{\n Header: isEditMode ? () => <QuickAddButtons previousEventId={null} parentGroup={null} /> : undefined,\n Footer: () => (\n <>\n {isEditMode && (\n <QuickAddButtons\n previousEventId={metadata[lastMetadataKey]?.groupId ?? metadata[lastMetadataKey]?.thisId}\n parentGroup={null}\n />\n )}\n <div className={style.spacer} />\n </>\n ),\n List: VirtuosoListComponent,\n }}\n />\n </SortableContext>\n </DndContext>\n </div>\n );\n}\n\n// Virtuoso components - extracted to prevent recreation on every render\nconst VirtuosoListComponent = forwardRef<HTMLDivElement, HTMLProps<HTMLDivElement>>(({ children, ...props }, ref) => (\n <div ref={ref} {...props} className={style.list}>\n {children}\n </div>\n));\nVirtuosoListComponent.displayName = 'VirtuosoListComponent';\n","import { memo } from 'react';\n\nimport Empty from '../../common/components/state/Empty';\nimport { useRundownEditor } from '../../common/hooks/useSocket';\nimport { useRundownWithMetadata } from '../../common/hooks-query/useRundown';\n\nimport Rundown from './Rundown';\n\nexport default memo(RundownList);\nfunction RundownList() {\n const { data, status, rundownMetadata } = useRundownWithMetadata();\n const featureData = useRundownEditor();\n\n const isLoading = status !== 'success' || !data || !rundownMetadata;\n\n if (isLoading) {\n return <Empty text='Connecting to server' />;\n }\n\n return (\n <Rundown\n order={data.order}\n flatOrder={data.flatOrder}\n entries={data.entries}\n id={data.id}\n rundownMetadata={rundownMetadata}\n featureData={featureData}\n />\n );\n}\n","import { memo } from 'react';\nimport { useSessionStorage } from '@mantine/hooks';\n\nimport * as Editor from '../../common/components/editor-utils/EditorUtils';\nimport ErrorBoundary from '../../common/components/error-boundary/ErrorBoundary';\nimport ViewNavigationMenu from '../../common/components/navigation-menu/ViewNavigationMenu';\nimport ProtectRoute from '../../common/components/protect-route/ProtectRoute';\nimport { EntryActionsProvider } from '../../common/context/EntryActionsContext';\nimport { useEntryActions } from '../../common/hooks/useEntryAction';\nimport { useIsSmallDevice } from '../../common/hooks/useIsSmallDevice';\nimport { handleLinks } from '../../common/utils/linkUtils';\nimport { cx } from '../../common/utils/styleUtils';\nimport { getIsNavigationLocked } from '../../externals';\nimport { AppMode } from '../../ontimeConfig';\nimport EntryEditModal from '../../views/cuesheet/cuesheet-edit-modal/EntryEditModal';\nimport { EditorLayoutMode, useEditorLayout } from '../../views/editor/useEditorLayout';\n\nimport RundownEntryEditor from './entry-editor/RundownEntryEditor';\nimport FinderPlacement from './placements/FinderPlacement';\nimport { RundownContextMenu } from './rundown-context-menu/RundownContextMenu';\nimport RundownHeader from './rundown-header/RundownHeader';\nimport RundownHeaderMobile from './rundown-header/RundownHeaderMobile';\nimport RundownTable from './rundown-table/RundownTable';\nimport { RundownViewMode } from './rundown.options';\nimport RundownList from './RundownList';\nimport { useEditorFollowMode } from './useEditorFollowMode';\n\nimport style from './RundownExport.module.scss';\n\nexport default memo(RundownExport);\n\nfunction RundownExport() {\n const isExtracted = window.location.pathname.includes('/rundown');\n const { editorMode } = useEditorFollowMode();\n const { layoutMode } = useEditorLayout();\n const [viewMode, setViewMode] = useSessionStorage<RundownViewMode>({\n key: 'rundown-view-mode',\n defaultValue: RundownViewMode.List,\n });\n const isSmallDevice = useIsSmallDevice();\n const entryActions = useEntryActions();\n\n if (isSmallDevice && isExtracted) {\n return (\n <EntryActionsProvider actions={entryActions}>\n <ProtectRoute permission='editor'>\n <div\n className={cx([style.rundownExport, style.extracted])}\n data-target='small-device'\n data-testid='panel-rundown'\n >\n <FinderPlacement />\n <ViewNavigationMenu suppressSettings />\n <div className={style.rundown}>\n <ErrorBoundary>\n <RundownRoot isSmallDevice isExtracted viewMode={viewMode} setViewMode={setViewMode} />\n <RundownContextMenu />\n </ErrorBoundary>\n </div>\n </div>\n </ProtectRoute>\n </EntryActionsProvider>\n );\n }\n\n const hideSideBar =\n layoutMode === EditorLayoutMode.TRACKING ||\n (isExtracted && editorMode === AppMode.Run) ||\n viewMode === RundownViewMode.Table;\n\n return (\n <EntryActionsProvider actions={entryActions}>\n <ProtectRoute permission='editor'>\n <div className={cx([style.rundownExport, isExtracted && style.extracted])} data-testid='panel-rundown'>\n <FinderPlacement />\n {isExtracted && <ViewNavigationMenu suppressSettings isNavigationLocked={getIsNavigationLocked()} />}\n <div className={style.rundown}>\n <Editor.Panel className={style.list}>\n <ErrorBoundary>\n {!isExtracted && <Editor.CornerExtract onClick={(event) => handleLinks('rundown', event)} />}\n <RundownRoot isExtracted={isExtracted} viewMode={viewMode} setViewMode={setViewMode} />\n <RundownContextMenu />\n </ErrorBoundary>\n </Editor.Panel>\n {!hideSideBar && (\n <div className={style.side}>\n <ErrorBoundary>\n <RundownEntryEditor />\n </ErrorBoundary>\n </div>\n )}\n </div>\n </div>\n </ProtectRoute>\n </EntryActionsProvider>\n );\n}\n\ninterface RundownRootProps {\n isSmallDevice?: boolean;\n isExtracted?: boolean;\n viewMode: RundownViewMode;\n setViewMode: (mode: RundownViewMode) => void;\n}\n\nfunction RundownRoot({ isSmallDevice, isExtracted, viewMode, setViewMode }: RundownRootProps) {\n return (\n <div className={style.rundownRoot}>\n {isSmallDevice ? (\n <RundownHeaderMobile viewMode={viewMode} setViewMode={setViewMode} />\n ) : (\n <RundownHeader isExtracted={isExtracted} viewMode={viewMode} setViewMode={setViewMode} />\n )}\n {viewMode === RundownViewMode.List ? <RundownList /> : <RundownTable />}\n {viewMode === RundownViewMode.Table && <EntryEditModal />}\n </div>\n );\n}\n"],"file":"assets/RundownExport-DhzzqPCD.js"}
@@ -1,2 +0,0 @@
1
- import{j as e,c2 as n,c3 as d,c4 as m,c5 as _,c6 as f,c7 as j,c8 as u,c9 as I,ca as p,cb as x,cc as b,cd as S,ce as g,A as h,cf as w,cg as y}from"./vendor-dQa48psh.js";import{e as N}from"./index-DYkg-xOk.js";(function(){try{var c=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new c.Error().stack;t&&(c._sentryDebugIds=c._sentryDebugIds||{},c._sentryDebugIds[t]="d4d89a7a-ea2f-423e-a525-700b76d7dc7e",c._sentryDebugIdIdentifier="sentry-dbid-d4d89a7a-ea2f-423e-a525-700b76d7dc7e")}catch{}})();const A="_blink_fi0ij_1",k="_fourtyfive_fi0ij_13",D="_select_fi0ij_17",L="_medium_fi0ij_51",v="_large_fi0ij_55",T="_fluid_fi0ij_59",P="_selectIcon_fi0ij_63",C="_popup_fi0ij_67",E="_list_fi0ij_82",R="_item_fi0ij_92",U="_itemIndicator_fi0ij_110",V="_itemIndicatorIcon_fi0ij_114",q="_itemLabel_fi0ij_120",z="_scrollArrow_fi0ij_124",s={blink:A,fourtyfive:k,select:D,medium:L,large:v,fluid:T,selectIcon:P,popup:C,list:E,item:R,itemIndicator:U,itemIndicatorIcon:V,itemLabel:q,scrollArrow:z};function G({options:c,fluid:t,size:i="medium",...o}){return e.jsxs(n,{items:c,...o,children:[e.jsxs(d,{className:N([s.select,s[i],t&&s.fluid]),children:[e.jsx(m,{}),e.jsx(_,{className:s.selectIcon,children:e.jsx(f,{})})]}),e.jsx(j,{children:e.jsxs(u,{side:"bottom",align:"start",children:[e.jsx(I,{className:s.scrollArrow}),e.jsxs(p,{className:s.popup,children:[e.jsx(x,{}),e.jsx(b,{className:s.list,children:c.map(({disabled:a,label:r,value:l})=>e.jsxs(S,{className:s.item,value:l,disabled:a,children:[e.jsx(g,{className:s.itemIndicator,children:e.jsx(h,{className:s.itemIndicatorIcon})}),e.jsx(w,{className:s.itemLabel,children:r})]},String(l)))})]}),e.jsx(y,{className:s.scrollArrow})]})})]})}export{G as S};
2
- //# sourceMappingURL=Select-B3zdv0Ng.js.map
Binary file
Binary file
Binary file
Binary file
@@ -1,2 +0,0 @@
1
- import{h as r,j as f,co as y,cp as g}from"./vendor-dQa48psh.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="2d35b561-1349-48dd-938a-b095711215db",e._sentryDebugIdIdentifier="sentry-dbid-2d35b561-1349-48dd-938a-b095711215db")}catch{}})();const b="_wrapper_1l24u_17",h={wrapper:b},c=r.forwardRef((e,n)=>{const{language:d,initialValue:t,isDirty:i,setIsDirty:o}=e,[s,l]=r.useState(t),p=a=>{const u=g.languages[d];return u?g.highlight(a,u,d):a},m=a=>{l(a)};return r.useImperativeHandle(n,()=>({getCss:()=>s})),r.useEffect(()=>{l(t)},[t]),r.useEffect(()=>{t.trim()!==s.trim()&&!i&&s.length!==0&&o(!0),t.trim()===s.trim()&&i&&o(!1)},[t,s,i,o]),f.jsx("div",{className:h.wrapper,children:f.jsx(y,{value:s,padding:15,onValueChange:m,highlight:p,style:{fontFamily:"monospace",fontSize:12,minHeight:500,background:"#2d2d2d"}})})});c.displayName="StyleEditor";const E=r.memo(c);export{E as default};
2
- //# sourceMappingURL=StyleEditor-DcyJgmAF.js.map
@@ -1,2 +0,0 @@
1
- import{j as s,bk as y,bK as _,bL as g,bM as k,A as w,bN as v,bO as C,bP as P,bQ as I,bR as N,bS as S,bT as D,bp as $,bq as R,bU as T,bV as L,aV as O,bW as h,bX as A}from"./vendor-dQa48psh.js";import{e as l,aC as p}from"./index-DYkg-xOk.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},o=new e.Error().stack;o&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[o]="df38ab77-96b9-4dfa-9085-5e5689cc71c2",e._sentryDebugIdIdentifier="sentry-dbid-df38ab77-96b9-4dfa-9085-5e5689cc71c2")}catch{}})();const E="_blink_177b4_1",V="_fourtyfive_177b4_13",W="_infoLabel_177b4_17",q="_info_177b4_17",z="_warning_177b4_37",F="_error_177b4_41",u={blink:E,fourtyfive:V,infoLabel:W,info:q,warning:z,error:F};function is({className:e,type:o="info",children:n}){return s.jsxs("div",{className:l([u.infoLabel,u[o],e]),children:[o==="info"&&s.jsx(y,{}),o==="warning"&&s.jsx(_,{}),o==="error"&&s.jsx(_,{}),s.jsx("div",{children:n})]})}const H="_checkbox_175d8_17",K="_indicator_175d8_53",d={checkbox:H,indicator:K};function as(e){return s.jsx(g,{className:d.checkbox,...e,children:s.jsx(k,{className:d.indicator,children:s.jsx(w,{className:d.icon})})})}const M="_blink_10e6s_1",Q="_fourtyfive_10e6s_13",U="_medium_10e6s_43",X="_large_10e6s_51",B="_thumb_10e6s_59",b={blink:M,fourtyfive:Q,switch:"_switch_10e6s_17",medium:U,large:X,thumb:B};function ls({size:e="medium",...o}){return s.jsx(v,{className:l([b.switch,b[e]]),...o,children:s.jsx(C,{className:b.thumb})})}const G="_popup_1xpg9_17",J="_title_1xpg9_34",f={popup:G,title:J};function Y({title:e,className:o,children:n,...t}){return s.jsx(P,{children:s.jsx(I,{sideOffset:8,...t,children:s.jsxs(N,{className:f.popup,children:[e&&s.jsx(S,{className:f.title,children:e}),s.jsx(D,{className:o,render:s.jsx("div",{}),children:n})]})})})}const Z="_input_jz3ye_17",ss={input:Z};function x({color:e,onChange:o,children:n}){return s.jsxs($,{children:[s.jsx(R,{children:n}),s.jsxs(Y,{children:[s.jsx(T,{color:e,onChange:o}),s.jsx(L,{color:e,onChange:o,className:ss.input,prefixed:!0})]})]})}const es="_list_1tpdr_17",os="_swatch_1tpdr_23",ns="_selected_1tpdr_33",ts="_selectable_1tpdr_36",i={list:es,swatch:os,selected:ns,selectable:ts};function ds(e){const{color:o,onChange:n,isSelected:t,alwaysDisplayColor:c}=e,a=O(j=>{n(j)},100),r=c||t?o:"",{color:m}=p(r);return s.jsx(x,{color:r,onChange:a,children:s.jsx("div",{className:l([i.swatch,t&&i.selected,i.selectable]),style:{backgroundColor:r},children:s.jsx(h,{color:m})})})}function bs(e){const{name:o,control:n}=e,{field:{onChange:t,value:c}}=A({control:n,name:o}),a=typeof c=="string"?c:"",{color:r}=p(a);return s.jsx(x,{color:c,onChange:t,children:s.jsx("div",{className:l([i.swatch,i.selectable]),style:{backgroundColor:a},children:s.jsx(h,{color:r})})})}export{as as C,is as I,Y as P,ls as S,bs as a,ds as b,i as s};
2
- //# sourceMappingURL=SwatchPicker-DPyJv7aS.js.map
@@ -1,2 +0,0 @@
1
- import{j as e,h as P,aO as y,aP as A,aQ as z,aR as V,aS as H,aT as W,aU as q}from"./vendor-dQa48psh.js";import{m as g,bj as h,A as K,s as j,e as d,K as Q,y as B,v as J,f as $,bk as D,bl as M,k as L,x as k,bm as X,bn as Y,bo as Z,bp as ee,bq as U,T as E,br as ae,bs as te}from"./index-DYkg-xOk.js";import{T as u}from"./Tooltip-B4PEP32j.js";import{v as F}from"./useRundown-CR9Ah1Fa.js";import{a as ne,g as se}from"./offset-Bs6CY1IK.js";import{S as f}from"./SuperscriptPeriod-DswX2aei.js";import{i as O}from"./playbackstate-DisgQbHM.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new t.Error().stack;n&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[n]="7490a9da-09c1-4d0b-bbca-49bbb2f40ba5",t._sentryDebugIdIdentifier="sentry-dbid-7490a9da-09c1-4d0b-bbca-49bbb2f40ba5")}catch{}})();function S(t,n=3,s,l="due"){return t!==null&&t<=0?l:le(t,n,s)}function le(t,n=3,s){return g(t,{fallback:n===3?h:K,direction:s})}function C(t){return t!==null&&t>j?[t%j,Math.floor(t/j)]:[t,0]}const ce="_label_1ahsu_18",re="_clock_1ahsu_23",de="_column_1ahsu_35",ie="_over_1ahsu_47",oe="_under_1ahsu_48",m={label:ce,clock:re,column:de,over:ie,under:oe};function w({label:t,value:n,state:s="active",className:l,testId:r}){return e.jsxs("div",{className:d([m.column,l]),"data-state":s,children:[e.jsx("span",{className:m.label,children:t}),e.jsx("span",{className:m.clock,"data-testid":r,children:n})]})}function me({label:t,state:n="active",className:s,render:l}){return e.jsxs("div",{className:d([m.column,s]),"data-state":n,children:[e.jsx("span",{className:m.label,children:t}),l(m.clock)]})}function ue({state:t,value:n,testId:s}){return e.jsxs("div",{className:m.column,"data-state":t,children:[e.jsxs("div",{className:m.label,children:[e.jsx("span",{className:m.over,children:"Over"}),e.jsx("span",{children:"/"}),e.jsx("span",{className:m.under,children:"Under"})]}),e.jsx("span",{className:m.clock,"data-testid":s,children:n})]})}const xe="_column_1lv0k_17",pe="_row_1lv0k_26",fe="_row2_1lv0k_33",be="_metadataRow_1lv0k_40",je="_labelledElement_1lv0k_47",ve="_icon_1lv0k_53",Te="_label_1lv0k_47",Ne="_time_1lv0k_65",he="_daySpan_1lv0k_72",_e="_muted_1lv0k_87",ye="_labelTitle_1lv0k_91",Ee="_dueTime_1lv0k_100",a={column:xe,row:pe,row2:fe,metadataRow:be,labelledElement:je,icon:ve,label:Te,time:Ne,daySpan:he,muted:_e,labelTitle:ye,dueTime:Ee},Se={format12:"hh:mm:ss a",format24:"HH:mm:ss"};function v(t,n){return t===null?h:n?$(t,Se):g(t,{fallback:h})}function $e({shouldFormat:t}){const{plannedEnd:n,plannedStart:s,actualStart:l}=D(),r=v(s,t),i=v(l,t),[x,c]=P.useMemo(()=>C(n),[n]),o=v(x,t),p=c>0,b=p?`Planned end time (rundown spans over ${c+1} days)`:"Planned end time";return e.jsxs("div",{className:a.column,children:[e.jsxs("div",{className:a.row,children:[e.jsx("span",{className:a.label,children:"Start"}),e.jsx(u,{text:"Planned start time",render:e.jsxs("div",{className:a.labelledElement,children:[e.jsx(y,{className:a.icon}),e.jsx(f,{className:d([a.time,s===null&&a.muted]),time:r})]})}),e.jsx(u,{text:"Actual start time",render:e.jsxs("div",{className:a.labelledElement,"data-testid":"actual-start-time",children:[e.jsx(A,{className:a.icon}),e.jsx(f,{className:d([a.time,l===null&&a.muted]),time:i})]})})]}),e.jsxs("div",{className:a.row,children:[e.jsx("span",{className:a.label,children:"End"}),e.jsx(u,{text:b,render:e.jsxs("div",{className:a.labelledElement,children:[e.jsx(y,{className:a.icon}),e.jsx(f,{className:d([a.time,n===null&&a.muted]),time:o}),p&&e.jsx("span",{className:d([a.time,a.daySpan]),"data-day-offset":c})]})}),e.jsx(we,{shouldFormat:t})]})]})}function Me({shouldFormat:t}){const{plannedEnd:n,plannedStart:s}=D(),l=v(s,t),[r,i]=P.useMemo(()=>C(n),[n]),x=v(r,t),c=i>0,o=c?`Planned end time (rundown spans over ${i+1} days)`:"Planned end time";return e.jsxs("div",{className:a.column,children:[e.jsxs("div",{className:a.row2,children:[e.jsx("span",{className:a.label,children:"Start"}),e.jsx(u,{text:"Planned start time",render:e.jsxs("div",{className:a.labelledElement,children:[e.jsx(y,{className:a.icon}),e.jsx(f,{className:d([a.time,s===null&&a.muted]),time:l})]})})]}),e.jsxs("div",{className:a.row2,children:[e.jsx("span",{className:a.label,children:"End"}),e.jsx(u,{text:o,render:e.jsxs("div",{className:a.labelledElement,children:[e.jsx(y,{className:a.icon}),e.jsx(f,{className:d([a.time,n===null&&a.muted]),time:x}),c&&e.jsx("span",{className:d([a.time,a.daySpan]),"data-day-offset":i})]})})]})]})}function we({shouldFormat:t}){const n=Y(),[s,l]=P.useMemo(()=>C(n),[n]),r=v(s,t),i=s!==null&&l>0,x=i?`Expected end time (rundown spans over ${l+1} days)`:"Expected end time";return e.jsx(u,{text:x,render:e.jsxs("div",{className:a.labelledElement,children:[e.jsx(z,{className:a.icon}),e.jsx(f,{className:d([a.time,s===null&&a.muted]),time:r}),i&&e.jsx("span",{className:d([a.time,a.daySpan]),"data-day-offset":l})]})})}function Ue(){return e.jsxs("div",{className:a.column,children:[e.jsx(ge,{}),e.jsx(ke,{})]})}function ge(){const{clock:t,mode:n,groupExpectedEnd:s,actualGroupStart:l,currentDay:r,playback:i}=Z(),x=ee(),c=F(x),o=O(i),p=(()=>{if(!o||!c||c.timeStart===null)return null;const N=t+r*j;return n===U.Absolute?c.timeStart+c.duration-N:l+c.duration-N})(),b=S(p,3,E.CountDown),_=s!==null?s-t:null,T=S(_,3,E.CountDown);return e.jsxs("div",{className:a.metadataRow,children:[e.jsx("span",{className:c!=null&&c.title?a.labelTitle:a.label,children:`${(c==null?void 0:c.title)||"Group"} `}),e.jsxs("div",{className:a.labelledElement,children:[e.jsx(u,{text:"Time to planned group end",render:e.jsx(V,{className:a.icon})}),e.jsx("span",{className:d([a.time,(!c||!o)&&a.muted,b==="due"&&a.dueTime]),children:b})]}),e.jsxs("div",{className:a.labelledElement,children:[e.jsx(u,{text:"Time to expected group end",render:e.jsx(H,{className:a.icon})}),e.jsx("span",{className:d([a.time,!s&&a.muted,T==="due"&&a.dueTime]),children:T})]})]})}function ke(){const{clock:t,mode:n,actualStart:s,plannedStart:l,playback:r,currentDay:i}=ae(),{id:x,expectedStart:c}=te(),o=F(x),p=O(r),b=(()=>{if(!p||!o)return null;const R=o.timeStart+o.dayOffset*j,G=t+i*j;return n===U.Absolute?R-G:R+s-l-G})(),_=S(b,3,E.CountDown),T=c!==null?c-t:null,N=S(T,3,E.CountDown),I=(o==null?void 0:o.title)??null;return e.jsxs("div",{className:a.metadataRow,children:[e.jsx("span",{className:I?a.labelTitle:a.label,children:`${I||"Flag"} `}),e.jsxs("div",{className:a.labelledElement,children:[e.jsx(u,{text:"Time to next flag planned start",render:e.jsx(W,{className:a.icon})}),e.jsx("span",{"data-testid":"flag-plannedStart",className:d([a.time,(!o||!p)&&a.muted,_==="due"&&a.dueTime]),children:_})]}),e.jsxs("div",{className:a.labelledElement,children:[e.jsx(u,{text:"Time to next flag expected start",render:e.jsx(q,{className:a.icon})}),e.jsx("span",{"data-testid":"flag-expectedStart",className:d([a.time,T===null&&a.muted,N==="due"&&a.dueTime]),children:N})]})]})}function Fe(){const{numEvents:t,selectedEventIndex:n}=M(),s=n!==null?n+1:k,l=t?`${s} of ${t||k}`:k;return e.jsx(w,{label:"Progress",value:l,state:n===null?"muted":"active"})}function Ae(){const{offset:t,playback:n}=X(),s=O(n),l=se(s?t:null),r=ne(s?t:null);return e.jsx(ue,{state:l,value:r,testId:"offset"})}function ze({shouldFormat:t,className:n}){const s=J(),l=t?$(s):g(s);return e.jsx(me,{label:"Time now",className:n,render:r=>e.jsx(f,{className:r,time:l})})}function Ve({className:t}){const n=Q(),s=n.phase===B.Pending,l=s?"Count to start":"Running timer",r=g(s?n.secondaryTimer:n.current,{fallback:h});function i(){return s?"waiting":n.current===null?"muted":"active"}return e.jsx(w,{label:l,value:r,state:i(),className:t})}function He(){const{numEvents:t}=M(),{plannedEnd:n,plannedStart:s}=D(),r=s!==null&&n!==null?L(n-s):h;return e.jsxs(e.Fragment,{children:[e.jsx(w,{label:"Total duration",value:r}),e.jsx(w,{label:"Events",value:String(t)})]})}export{ze as C,Ue as M,Ae as O,He as P,Me as S,Ve as T,$e as a,Fe as b,le as f};
2
- //# sourceMappingURL=TimeElements-8rNLGU60.js.map
Binary file
Binary file
@@ -1,2 +0,0 @@
1
- import{ay as M,j as t,aB as U,T as O,av as X,y as F,aA as I,aD as P,aC as A,bY as H,az as G,bZ as V,h as z}from"./vendor-dQa48psh.js";import{P as K,C as W}from"./EditorUtils-BxN0w0-D.js";import{h as c,I as Y,b1 as u,a$ as Z,b2 as k,b3 as h,b4 as v,b0 as J,m as g,K as Q,y as C,k as T,s as tt,a_ as st,ax as at,bx as et,bd as nt,by as it}from"./index-DYkg-xOk.js";import{P as ot}from"./ProtectRoute-CcDK6JVA.js";import{T as S,A as lt}from"./TimeInput-OX4LMRQl.js";import{T as i,g as rt,a as ct}from"./TimerDisplay-DQQ7sMDc.js";import{p as R}from"./parseUserTime-CI7s8pYc.js";import{T as N}from"./Tooltip-B4PEP32j.js";import{u as dt}from"./useReport-CR0k0b85.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new s.Error().stack;a&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[a]="c4c618a1-9938-44dd-b0cf-de772d8c5a14",s._sentryDebugIdIdentifier="sentry-dbid-c4c618a1-9938-44dd-b0cf-de772d8c5a14")}catch{}})();const mt="_addTime_18oax_17",ut="_addButtons_18oax_24",xt="_tallButtons_18oax_30",b={addTime:mt,addButtons:ut,tallButtons:xt};function pt(s){const{playback:a}=s,[e,n]=M({key:"add-time",defaultValue:3e5}),l=(x,j)=>{const y=R(j);n(Math.min(y,Y))},r=x=>{x==="add"?u.addTime(e):u.addTime(-1*e)},m=!(a===c.Play||a===c.Pause)||e===0;return t.jsxs("div",{className:b.addTime,children:[t.jsx(S,{name:"addtime",submitHandler:l,time:e,placeholder:"Add time"}),t.jsxs("div",{className:b.addButtons,children:[t.jsx(i,{onClick:()=>r("remove"),disabled:m,className:b.tallButtons,children:t.jsx(U,{})}),t.jsx(i,{onClick:()=>r("add"),disabled:m,className:b.tallButtons,children:t.jsx(O,{})})]})]})}const ht="_label_tat6w_17",_t="_controls_tat6w_24",bt="_input_tat6w_28",jt="_twoSides_tat6w_34",yt="_fakeInput_tat6w_42",_={label:ht,controls:_t,input:bt,twoSides:jt,fakeInput:yt};function f({index:s}){const{playback:a,direction:e}=Z(s),{stop:n,setDirection:l}=v,r=()=>{const x=e===h.CountDown?h.CountUp:h.CountDown;l(s,x)},d=a!==k.Stop,m=a===k.Start?"pause":"play";return t.jsxs("label",{className:_.label,children:["Aux Timer ",s,t.jsxs("div",{className:_.controls,children:[t.jsxs("div",{className:_.input,children:[t.jsx(ft,{index:s,isActive:d}),t.jsxs(i,{onClick:r,aspect:"tight",disabled:d,children:[e===h.CountDown&&t.jsx(X,{"data-testid":`aux-timer-direction-${s}`}),e===h.CountUp&&t.jsx(F,{"data-testid":`aux-timer-direction-${s}`})]})]}),t.jsxs("div",{className:_.twoSides,children:[t.jsx(gt,{index:s,action:m}),t.jsx(i,{onClick:()=>n(s),theme:c.Stop,disabled:!d,children:t.jsx(I,{"data-testid":`aux-timer-stop-${s}`})})]})]})]})}function ft({index:s,isActive:a}){const e=J(s),{setDuration:n}=v,l=(r,d)=>{const m=R(d);n(s,m)};return a?t.jsx("div",{className:_.fakeInput,"data-testid":`time-label-aux${s}`,children:g(e)}):t.jsx(S,{submitHandler:l,name:`aux${s}`,time:e,placeholder:`Aux ${s}`})}function gt({index:s,action:a}){const{start:e,pause:n}=v;return a==="play"?t.jsx(i,{onClick:()=>e(s),theme:c.Play,children:t.jsx(P,{"data-testid":`aux-timer-start-${s}`})}):t.jsx(i,{onClick:()=>n(s),theme:c.Pause,children:t.jsx(A,{"data-testid":`aux-timer-pause-${s}`})})}const vt="_buttonContainer_1mqxq_17",kt="_go_1mqxq_25",Ct="_playbackContainer_1mqxq_30",Tt="_transportContainer_1mqxq_37",Nt="_extra_1mqxq_44",wt="_invertX_1mqxq_51",p={buttonContainer:vt,go:kt,playbackContainer:Ct,transportContainer:Tt,extra:Nt,invertX:wt};function It({playback:s,numEvents:a,selectedEventIndex:e,timerPhase:n}){const{isPlaying:l,isPaused:r,isRolling:d,disableGo:m,disableNext:x,disablePrev:j,disableStart:y,disablePause:q,disableRoll:D,disableStop:$,disableReload:B,goAction:E,goLabel:L}=rt({playback:s,numEvents:a,selectedEventIndex:e,timerPhase:n});return t.jsxs("div",{className:p.buttonContainer,children:[t.jsx(i,{disabled:m,onClick:E,aspect:"fill",className:p.go,children:L}),t.jsxs("div",{className:p.playbackContainer,children:[t.jsx(i,{onClick:u.start,disabled:y,theme:c.Play,active:l,children:t.jsx(P,{})}),t.jsx(i,{onClick:u.pause,disabled:q,theme:c.Pause,active:r,children:t.jsx(A,{})})]}),t.jsxs("div",{className:p.transportContainer,children:[t.jsx(i,{onClick:u.previous,disabled:j,children:t.jsx(H,{})}),t.jsx(i,{onClick:u.next,disabled:x,children:t.jsx(G,{})})]}),t.jsxs("div",{className:p.extra,children:[t.jsx(i,{onClick:u.roll,disabled:D,theme:c.Roll,active:d,children:"Roll"}),t.jsx(i,{onClick:u.reload,disabled:B,children:t.jsx(V,{className:p.invertX})}),t.jsx(i,{onClick:u.stop,disabled:$,theme:c.Stop,children:t.jsx(I,{})})]})]})}const Pt="_timeContainer_1ihqw_17",At="_indicators_1ihqw_32",St="_indicatorRoll_1ihqw_41",Rt="_indicatorDelay_1ihqw_42",qt="_indicatorNegative_1ihqw_43",Dt="_status_1ihqw_72",$t="_tag_1ihqw_79",Bt="_time_1ihqw_17",Et="_rolltag_1ihqw_91",o={timeContainer:Pt,indicators:At,indicatorRoll:St,indicatorDelay:Rt,indicatorNegative:qt,status:Dt,tag:$t,time:Bt,rolltag:Et};function Lt(s){return s>0?`Added ${T(s,!1)}`:s<0?`Removed ${T(Math.abs(s),!1)}`:""}function Mt({children:s}){const a=Q(),e=a.playback===c.Roll,n=a.phase===C.Pending,l=a.phase===C.Overtime,r=!!a.addedTime,d=e?"Roll mode active":"",m=Lt(a.addedTime);return t.jsxs("div",{className:o.timeContainer,children:[t.jsxs("div",{className:o.indicators,children:[t.jsx(N,{text:d,render:t.jsx("div",{}),className:o.indicatorRoll,"data-active":e}),t.jsx("div",{className:o.indicatorNegative,"data-active":l}),t.jsx(N,{text:m,render:t.jsx("div",{}),className:o.indicatorDelay,"data-active":r})]}),t.jsx(ct,{time:n?a.secondaryTimer:a.current,phase:a.phase}),t.jsx("div",{className:o.status,children:n?t.jsx("span",{className:o.rolltag,children:"Roll: Countdown to start"}):t.jsx(Ut,{startedAt:a.startedAt,expectedFinish:a.expectedFinish,playback:a.playback})}),s]})}function Ut({startedAt:s,expectedFinish:a,playback:e}){if(e===c.Stop)return t.jsx(Ot,{});const n=g(s),l=a!==null?a%tt:null,r=g(l);return t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:o.start,children:[t.jsx("span",{className:o.tag,children:"Started at"}),t.jsx("span",{className:o.time,children:n})]}),t.jsxs("span",{className:o.finish,children:[t.jsx("span",{className:o.tag,children:"Expect end"}),t.jsx("span",{className:o.time,children:r})]})]})}function Ot(){const{data:s}=dt();return Object.keys(s).length>0?t.jsx(lt,{search:"settings=sharing__report",children:"Go to report management"}):null}const Xt="_mainContainer_1qlxm_17",Ft="_auxTimers_1qlxm_22",w={mainContainer:Xt,auxTimers:Ft};function Ht(){const s=st();return t.jsxs("div",{className:w.mainContainer,children:[t.jsx(Mt,{children:t.jsx(pt,{playback:s.playback})}),t.jsx(It,{playback:s.playback,numEvents:s.numEvents,selectedEventIndex:s.selectedEventIndex,timerPhase:s.timerPhase}),t.jsxs("div",{className:w.auxTimers,children:[t.jsx(f,{index:1}),t.jsx(f,{index:2}),t.jsx(f,{index:3})]})]})}const Gt="_content_hnvy8_17",Vt={content:Gt},es=z.memo(zt);function zt(){const s=window.location.pathname.includes("/timercontrol");return t.jsx(ot,{permission:"editor",children:t.jsxs(K,{"data-testid":"panel-timer-control",children:[!s&&t.jsx(W,{onClick:a=>at("timercontrol",a)}),s&&t.jsx(et,{suppressSettings:!0,isNavigationLocked:nt()}),t.jsx("div",{className:Vt.content,children:t.jsx(it,{children:t.jsx(Ht,{})})})]})})}export{es as default};
2
- //# sourceMappingURL=TimerControlExport-BNfZ99Im.js.map
@@ -1,2 +0,0 @@
1
- import{h as b,j as u}from"./vendor-dQa48psh.js";import{h as e,y as m,b1 as d,e as f,m as x,bj as g}from"./index-DYkg-xOk.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new t.Error().stack;s&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[s]="ed3a4820-7303-4f20-a6b6-6ca9e3c3e7e6",t._sentryDebugIdIdentifier="sentry-dbid-ed3a4820-7303-4f20-a6b6-6ca9e3c3e7e6")}catch{}})();function w(t,s){return{start:t!==e.Stop&&t!==e.Play,pause:t===e.Play,roll:t!==e.Roll&&s!==m.Overtime,stop:t!==e.Stop,reload:t!==e.Stop&&t!==e.Roll}}function O({playback:t,numEvents:s,selectedEventIndex:o,timerPhase:n}){const _=o===0,r=o===s-1,a=s===0,l=t===e.Roll,i=w(t,n),{action:p,label:y}=h(t,o,r);return{isPlaying:t===e.Play,isPaused:t===e.Pause,isRolling:l,isArmed:t===e.Armed,isStopped:t===e.Stop,isFirst:_,isLast:r,noEvents:a,disableGo:l||a,disableNext:l||a||r,disablePrev:l||a||_,disableStart:!i.start,disablePause:!i.pause,disableRoll:!i.roll||a,disableStop:!i.stop,disableReload:!i.reload,disableAddTime:t!==e.Play&&t!==e.Pause,goAction:p,goLabel:y}}function h(t,s,o){return t===e.Armed?{action:d.start,label:"Start"}:o?{action:d.stop,label:"Finish"}:s===null?{action:d.startNext,label:"Start"}:{action:d.startNext,label:"Next"}}const z="_blink_yewzx_1",v="_fourtyfive_yewzx_13",S="_tapButton_yewzx_17",P="_neutral_yewzx_29",T="_active_yewzx_51",N="_play_yewzx_66",R="_roll_yewzx_93",A="_pause_yewzx_120",B="_ontime_yewzx_147",j="_stop_yewzx_174",D="_square_yewzx_201",q="_tight_yewzx_206",C="_fill_yewzx_211",c={blink:z,fourtyfive:v,tapButton:S,neutral:P,active:T,play:N,roll:R,pause:A,ontime:B,stop:j,square:D,tight:q,fill:C},I=b.forwardRef((t,s)=>{const{children:o,disabled:n,onClick:_,theme:r="neutral",aspect:a="normal",active:l,className:i}=t;return u.jsx("button",{className:f([c.tapButton,i,c[r],c[a],l&&c.active]),disabled:n,type:"button",onClick:_,ref:s,children:o})});I.displayName="TabButton";const F="_timer_kvqsa_21",G={timer:F};function $({time:t,phase:s,className:o}){const n=x(t,{fallback:g}).replace("-","");return u.jsx("div",{className:f([G.timer,o]),"data-phase":s,children:n})}export{I as T,$ as a,O as g};
2
- //# sourceMappingURL=TimerDisplay-DQQ7sMDc.js.map
@@ -1,2 +0,0 @@
1
- import{j as t,ci as i,cj as n,ck as l,cl as r,cm as c,cn as d}from"./vendor-dQa48psh.js";(function(){try{var o=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new o.Error().stack;s&&(o._sentryDebugIds=o._sentryDebugIds||{},o._sentryDebugIds[s]="538fcb26-1f39-4798-b1b6-87e52ca2f0c8",o._sentryDebugIdIdentifier="sentry-dbid-538fcb26-1f39-4798-b1b6-87e52ca2f0c8")}catch{}})();const f="_tooltip_1391b_17",a={tooltip:f};function b({text:o,children:s,...e}){return t.jsxs(i,{children:[t.jsx(n,{...e,children:s}),t.jsx(l,{children:t.jsx(r,{side:"bottom",sideOffset:4,children:t.jsxs(c,{className:a.tooltip,children:[t.jsx(d,{}),o]})})})]})}export{b as T};
2
- //# sourceMappingURL=Tooltip-B4PEP32j.js.map