@getontime/cli 4.0.2 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/client/assets/Backstage-DG-hwPI3.js +2 -0
  2. package/client/assets/Backstage-DG-hwPI3.js.br +0 -0
  3. package/client/assets/Backstage-DG-hwPI3.js.gz +0 -0
  4. package/client/assets/Backstage-DG-hwPI3.js.map +1 -0
  5. package/client/assets/Countdown-C8LGl1pp.js +2 -0
  6. package/client/assets/Countdown-C8LGl1pp.js.br +0 -0
  7. package/client/assets/Countdown-C8LGl1pp.js.gz +0 -0
  8. package/client/assets/Countdown-C8LGl1pp.js.map +1 -0
  9. package/client/assets/CustomTranslationModal-CJ9-aDjl.js +2 -0
  10. package/client/assets/CustomTranslationModal-CJ9-aDjl.js.br +0 -0
  11. package/client/assets/CustomTranslationModal-CJ9-aDjl.js.gz +0 -0
  12. package/client/assets/{CustomTranslationModal-C3R_2T5s.js.map → CustomTranslationModal-CJ9-aDjl.js.map} +1 -1
  13. package/client/assets/DelayIndicator-F4GdgsGh.js +2 -0
  14. package/client/assets/DelayIndicator-F4GdgsGh.js.br +0 -0
  15. package/client/assets/DelayIndicator-F4GdgsGh.js.gz +0 -0
  16. package/client/assets/{DelayIndicator-vT7n8ypf.js.map → DelayIndicator-F4GdgsGh.js.map} +1 -1
  17. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js +2 -0
  18. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js.br +0 -0
  19. package/client/assets/EditorFeatureWrapper-eIpSr_UK.js.gz +0 -0
  20. package/client/assets/{EditorFeatureWrapper-DHfuO3EA.js.map → EditorFeatureWrapper-eIpSr_UK.js.map} +1 -1
  21. package/client/assets/EditorUtils-Bd3J5Dvf.js +2 -0
  22. package/client/assets/EditorUtils-Bd3J5Dvf.js.br +0 -0
  23. package/client/assets/EditorUtils-Bd3J5Dvf.js.gz +0 -0
  24. package/client/assets/EditorUtils-Bd3J5Dvf.js.map +1 -0
  25. package/client/assets/EditorUtils-CgF7UfHP.css +1 -0
  26. package/client/assets/EditorUtils-CgF7UfHP.css.br +0 -0
  27. package/client/assets/EditorUtils-CgF7UfHP.css.gz +0 -0
  28. package/client/assets/Empty-C0IdV_kI.js +2 -0
  29. package/client/assets/Empty-C0IdV_kI.js.br +0 -0
  30. package/client/assets/Empty-C0IdV_kI.js.gz +0 -0
  31. package/client/assets/{Empty-gWT_HMeu.js.map → Empty-C0IdV_kI.js.map} +1 -1
  32. package/client/assets/EmptyPage-Ct3d0DqJ.js +2 -0
  33. package/client/assets/EmptyPage-Ct3d0DqJ.js.br +0 -0
  34. package/client/assets/EmptyPage-Ct3d0DqJ.js.gz +0 -0
  35. package/client/assets/{EmptyPage-Dcbg6rmF.js.map → EmptyPage-Ct3d0DqJ.js.map} +1 -1
  36. package/client/assets/FollowButton-BG-ycRWu.js +2 -0
  37. package/client/assets/FollowButton-BG-ycRWu.js.br +0 -0
  38. package/client/assets/FollowButton-BG-ycRWu.js.gz +0 -0
  39. package/client/assets/{FollowButton-CSqJSvix.js.map → FollowButton-BG-ycRWu.js.map} +1 -1
  40. package/client/assets/MessageControlExport-DjoUioWA.css +1 -0
  41. package/client/assets/MessageControlExport-DjoUioWA.css.br +0 -0
  42. package/client/assets/MessageControlExport-DjoUioWA.css.gz +0 -0
  43. package/client/assets/MessageControlExport-X-4dl9QT.js +3 -0
  44. package/client/assets/MessageControlExport-X-4dl9QT.js.br +0 -0
  45. package/client/assets/MessageControlExport-X-4dl9QT.js.gz +0 -0
  46. package/client/assets/MessageControlExport-X-4dl9QT.js.map +1 -0
  47. package/client/assets/MilestoneEditor-BqNKKlvI.css +1 -0
  48. package/client/assets/MilestoneEditor-BqNKKlvI.css.br +0 -0
  49. package/client/assets/MilestoneEditor-BqNKKlvI.css.gz +0 -0
  50. package/client/assets/MilestoneEditor-rgBQSXVU.js +2 -0
  51. package/client/assets/MilestoneEditor-rgBQSXVU.js.br +0 -0
  52. package/client/assets/MilestoneEditor-rgBQSXVU.js.gz +0 -0
  53. package/client/assets/MilestoneEditor-rgBQSXVU.js.map +1 -0
  54. package/client/assets/Modal-Bn1bZkwb.js +2 -0
  55. package/client/assets/Modal-Bn1bZkwb.js.br +0 -0
  56. package/client/assets/Modal-Bn1bZkwb.js.gz +0 -0
  57. package/client/assets/Modal-Bn1bZkwb.js.map +1 -0
  58. package/client/assets/Modal-D3tAPV2u.css +1 -0
  59. package/client/assets/Modal-D3tAPV2u.css.br +0 -0
  60. package/client/assets/Modal-D3tAPV2u.css.gz +0 -0
  61. package/client/assets/MultiPartProgressBar-Cmw-gisu.js +2 -0
  62. package/client/assets/MultiPartProgressBar-Cmw-gisu.js.br +0 -0
  63. package/client/assets/MultiPartProgressBar-Cmw-gisu.js.gz +0 -0
  64. package/client/assets/{MultiPartProgressBar-D3jJZjb5.js.map → MultiPartProgressBar-Cmw-gisu.js.map} +1 -1
  65. package/client/assets/OperatorExport-BiBcgVKc.css +1 -0
  66. package/client/assets/OperatorExport-BiBcgVKc.css.br +0 -0
  67. package/client/assets/OperatorExport-BiBcgVKc.css.gz +0 -0
  68. package/client/assets/OperatorExport-CJd8jmY4.js +2 -0
  69. package/client/assets/OperatorExport-CJd8jmY4.js.br +0 -0
  70. package/client/assets/OperatorExport-CJd8jmY4.js.gz +0 -0
  71. package/client/assets/OperatorExport-CJd8jmY4.js.map +1 -0
  72. package/client/assets/OverviewWrapper-1Vj3_ojX.js +2 -0
  73. package/client/assets/OverviewWrapper-1Vj3_ojX.js.br +0 -0
  74. package/client/assets/OverviewWrapper-1Vj3_ojX.js.gz +0 -0
  75. package/client/assets/OverviewWrapper-1Vj3_ojX.js.map +1 -0
  76. package/client/assets/OverviewWrapper-9aebU9w0.css +1 -0
  77. package/client/assets/OverviewWrapper-9aebU9w0.css.br +0 -0
  78. package/client/assets/OverviewWrapper-9aebU9w0.css.gz +0 -0
  79. package/client/assets/PipHost-BUF7n-lT.css +1 -0
  80. package/client/assets/PipHost-BUF7n-lT.css.br +0 -0
  81. package/client/assets/PipHost-BUF7n-lT.css.gz +0 -0
  82. package/client/assets/PipHost-D7liNR4M.js +2 -0
  83. package/client/assets/PipHost-D7liNR4M.js.br +0 -0
  84. package/client/assets/PipHost-D7liNR4M.js.gz +0 -0
  85. package/client/assets/PipHost-D7liNR4M.js.map +1 -0
  86. package/client/assets/ProjectInfo-BduQgjcz.js +2 -0
  87. package/client/assets/ProjectInfo-BduQgjcz.js.br +0 -0
  88. package/client/assets/ProjectInfo-BduQgjcz.js.gz +0 -0
  89. package/client/assets/{ProjectInfo-z4k3cipS.js.map → ProjectInfo-BduQgjcz.js.map} +1 -1
  90. package/client/assets/ProtectRoute-Ci_AIozP.js +2 -0
  91. package/client/assets/ProtectRoute-Ci_AIozP.js.br +0 -0
  92. package/client/assets/ProtectRoute-Ci_AIozP.js.gz +0 -0
  93. package/client/assets/{ProtectRoute-CrcWfOlG.js.map → ProtectRoute-Ci_AIozP.js.map} +1 -1
  94. package/client/assets/{ProtectedCuesheet-CMTscjjR.css → ProtectedCuesheet-C_tKodwo.css} +1 -1
  95. package/client/assets/ProtectedCuesheet-C_tKodwo.css.br +0 -0
  96. package/client/assets/ProtectedCuesheet-C_tKodwo.css.gz +0 -0
  97. package/client/assets/ProtectedCuesheet-D_zdkwM-.js +2 -0
  98. package/client/assets/ProtectedCuesheet-D_zdkwM-.js.br +0 -0
  99. package/client/assets/ProtectedCuesheet-D_zdkwM-.js.gz +0 -0
  100. package/client/assets/ProtectedCuesheet-D_zdkwM-.js.map +1 -0
  101. package/client/assets/ProtectedEditor-CNL2ig79.js +3 -0
  102. package/client/assets/ProtectedEditor-CNL2ig79.js.br +0 -0
  103. package/client/assets/ProtectedEditor-CNL2ig79.js.gz +0 -0
  104. package/client/assets/ProtectedEditor-CNL2ig79.js.map +1 -0
  105. package/client/assets/ProtectedEditor-Dw0pWw0J.css +1 -0
  106. package/client/assets/ProtectedEditor-Dw0pWw0J.css.br +0 -0
  107. package/client/assets/ProtectedEditor-Dw0pWw0J.css.gz +0 -0
  108. package/client/assets/RundownEntry-Blq5OsMH.css +1 -0
  109. package/client/assets/RundownEntry-Blq5OsMH.css.br +0 -0
  110. package/client/assets/RundownEntry-Blq5OsMH.css.gz +0 -0
  111. package/client/assets/RundownEntry-Bs1ombtH.js +2 -0
  112. package/client/assets/RundownEntry-Bs1ombtH.js.br +0 -0
  113. package/client/assets/RundownEntry-Bs1ombtH.js.gz +0 -0
  114. package/client/assets/RundownEntry-Bs1ombtH.js.map +1 -0
  115. package/client/assets/RundownExport-BCT0ybxy.js +3 -0
  116. package/client/assets/RundownExport-BCT0ybxy.js.br +0 -0
  117. package/client/assets/RundownExport-BCT0ybxy.js.gz +0 -0
  118. package/client/assets/RundownExport-BCT0ybxy.js.map +1 -0
  119. package/client/assets/{RundownExport-1zBZurIG.css → RundownExport-DtSvAfBG.css} +1 -1
  120. package/client/assets/RundownExport-DtSvAfBG.css.br +0 -0
  121. package/client/assets/RundownExport-DtSvAfBG.css.gz +0 -0
  122. package/client/assets/Select-B5xNi_tM.js +2 -0
  123. package/client/assets/Select-B5xNi_tM.js.br +0 -0
  124. package/client/assets/Select-B5xNi_tM.js.gz +0 -0
  125. package/client/assets/{Select-CedN80WS.js.map → Select-B5xNi_tM.js.map} +1 -1
  126. package/client/assets/Studio-D4hRKhJ1.js +2 -0
  127. package/client/assets/Studio-D4hRKhJ1.js.br +0 -0
  128. package/client/assets/Studio-D4hRKhJ1.js.gz +0 -0
  129. package/client/assets/Studio-D4hRKhJ1.js.map +1 -0
  130. package/client/assets/{StyleEditor-D2z65PB7.js → StyleEditor-BvcE8dkA.js} +2 -2
  131. package/client/assets/StyleEditor-BvcE8dkA.js.br +3 -0
  132. package/client/assets/StyleEditor-BvcE8dkA.js.gz +0 -0
  133. package/client/assets/{StyleEditor-D2z65PB7.js.map → StyleEditor-BvcE8dkA.js.map} +1 -1
  134. package/client/assets/SuperscriptPeriod-BmHAoSBy.js +2 -0
  135. package/client/assets/SuperscriptPeriod-BmHAoSBy.js.br +0 -0
  136. package/client/assets/SuperscriptPeriod-BmHAoSBy.js.gz +0 -0
  137. package/client/assets/SuperscriptPeriod-BmHAoSBy.js.map +1 -0
  138. package/client/assets/SuperscriptTime-Nou92D8X.js +2 -0
  139. package/client/assets/SuperscriptTime-Nou92D8X.js.br +0 -0
  140. package/client/assets/SuperscriptTime-Nou92D8X.js.gz +0 -0
  141. package/client/assets/{SuperscriptTime-CIrcMcyg.js.map → SuperscriptTime-Nou92D8X.js.map} +1 -1
  142. package/client/assets/TimeElements-XpRwBsaa.js +2 -0
  143. package/client/assets/TimeElements-XpRwBsaa.js.br +0 -0
  144. package/client/assets/TimeElements-XpRwBsaa.js.gz +0 -0
  145. package/client/assets/TimeElements-XpRwBsaa.js.map +1 -0
  146. package/client/assets/TimeElements-c2rTHN98.css +1 -0
  147. package/client/assets/TimeElements-c2rTHN98.css.br +0 -0
  148. package/client/assets/TimeElements-c2rTHN98.css.gz +0 -0
  149. package/client/assets/TimeInput-Bu_5GlHP.js +2 -0
  150. package/client/assets/TimeInput-Bu_5GlHP.js.br +0 -0
  151. package/client/assets/TimeInput-Bu_5GlHP.js.gz +0 -0
  152. package/client/assets/{TimeInput-Dg1naiy3.js.map → TimeInput-Bu_5GlHP.js.map} +1 -1
  153. package/client/assets/{TimeInput-BrVdiuOQ.css → TimeInput-Cu-N5DmX.css} +1 -1
  154. package/client/assets/TimeInput-Cu-N5DmX.css.br +0 -0
  155. package/client/assets/TimeInput-Cu-N5DmX.css.gz +0 -0
  156. package/client/assets/TimelinePage-CQqUB1KT.js +2 -0
  157. package/client/assets/TimelinePage-CQqUB1KT.js.br +0 -0
  158. package/client/assets/TimelinePage-CQqUB1KT.js.gz +0 -0
  159. package/client/assets/TimelinePage-CQqUB1KT.js.map +1 -0
  160. package/client/assets/TimelinePage-CcFl3uul.css +1 -0
  161. package/client/assets/TimelinePage-CcFl3uul.css.br +0 -0
  162. package/client/assets/TimelinePage-CcFl3uul.css.gz +0 -0
  163. package/client/assets/{Timer-BvEmZbmF.css → Timer-B7nk3TMf.css} +1 -1
  164. package/client/assets/Timer-B7nk3TMf.css.br +0 -0
  165. package/client/assets/Timer-B7nk3TMf.css.gz +0 -0
  166. package/client/assets/Timer-CIr2L3gJ.js +2 -0
  167. package/client/assets/Timer-CIr2L3gJ.js.br +0 -0
  168. package/client/assets/Timer-CIr2L3gJ.js.gz +0 -0
  169. package/client/assets/Timer-CIr2L3gJ.js.map +1 -0
  170. package/client/assets/TimerControlExport-4a3Cd9x8.js +2 -0
  171. package/client/assets/TimerControlExport-4a3Cd9x8.js.br +0 -0
  172. package/client/assets/TimerControlExport-4a3Cd9x8.js.gz +0 -0
  173. package/client/assets/{TimerControlExport-C8ECtLBd.js.map → TimerControlExport-4a3Cd9x8.js.map} +1 -1
  174. package/client/assets/{TimerControlExport-D8kqHQB0.css → TimerControlExport-DavNxY9p.css} +1 -1
  175. package/client/assets/TimerControlExport-DavNxY9p.css.br +0 -0
  176. package/client/assets/TimerControlExport-DavNxY9p.css.gz +0 -0
  177. package/client/assets/TitleCard-1U35ek0D.js +2 -0
  178. package/client/assets/TitleCard-1U35ek0D.js.br +0 -0
  179. package/client/assets/TitleCard-1U35ek0D.js.gz +0 -0
  180. package/client/assets/{TitleCard-CZl9wSHS.js.map → TitleCard-1U35ek0D.js.map} +1 -1
  181. package/client/assets/{Tooltip-D9XRnwOW.js → Tooltip-B8y25e3n.js} +2 -2
  182. package/client/assets/Tooltip-B8y25e3n.js.br +0 -0
  183. package/client/assets/Tooltip-B8y25e3n.js.gz +0 -0
  184. package/client/assets/{Tooltip-D9XRnwOW.js.map → Tooltip-B8y25e3n.js.map} +1 -1
  185. package/client/assets/ViewLogo-BHsV7Faa.js +2 -0
  186. package/client/assets/ViewLogo-BHsV7Faa.js.br +0 -0
  187. package/client/assets/ViewLogo-BHsV7Faa.js.gz +0 -0
  188. package/client/assets/{ViewLogo-_3Z1hIHi.js.map → ViewLogo-BHsV7Faa.js.map} +1 -1
  189. package/client/assets/ViewParamsEditor-BMHXOv-K.js +2 -0
  190. package/client/assets/ViewParamsEditor-BMHXOv-K.js.br +0 -0
  191. package/client/assets/ViewParamsEditor-BMHXOv-K.js.gz +0 -0
  192. package/client/assets/ViewParamsEditor-BMHXOv-K.js.map +1 -0
  193. package/client/assets/ViewParamsEditor-CupOV30k.css +1 -0
  194. package/client/assets/ViewParamsEditor-CupOV30k.css.br +0 -0
  195. package/client/assets/ViewParamsEditor-CupOV30k.css.gz +0 -0
  196. package/client/assets/{dateConfig-DRQGMWDF.js → dateConfig-_BhycZza.js} +2 -2
  197. package/client/assets/dateConfig-_BhycZza.js.br +0 -0
  198. package/client/assets/dateConfig-_BhycZza.js.gz +0 -0
  199. package/client/assets/{dateConfig-DRQGMWDF.js.map → dateConfig-_BhycZza.js.map} +1 -1
  200. package/client/assets/{editorSettings-BU0pTMSY.js → editorSettings-DH9ca-nB.js} +2 -2
  201. package/client/assets/editorSettings-DH9ca-nB.js.br +0 -0
  202. package/client/assets/editorSettings-DH9ca-nB.js.gz +0 -0
  203. package/client/assets/{editorSettings-BU0pTMSY.js.map → editorSettings-DH9ca-nB.js.map} +1 -1
  204. package/client/assets/{getProgress-Cw79NL_O.js → getProgress-DlrSzpnf.js} +2 -2
  205. package/client/assets/getProgress-DlrSzpnf.js.br +0 -0
  206. package/client/assets/getProgress-DlrSzpnf.js.gz +0 -0
  207. package/client/assets/{getProgress-Cw79NL_O.js.map → getProgress-DlrSzpnf.js.map} +1 -1
  208. package/client/assets/{index-De0uf0Ta.css → index-BuJoGGff.css} +1 -1
  209. package/client/assets/index-BuJoGGff.css.br +0 -0
  210. package/client/assets/index-BuJoGGff.css.gz +0 -0
  211. package/client/assets/index-CDBQg2fh.js +3 -0
  212. package/client/assets/index-CDBQg2fh.js.br +0 -0
  213. package/client/assets/index-CDBQg2fh.js.gz +0 -0
  214. package/client/assets/index-CDBQg2fh.js.map +1 -0
  215. package/client/assets/offset-CLG4o744.js +2 -0
  216. package/client/assets/offset-CLG4o744.js.br +0 -0
  217. package/client/assets/offset-CLG4o744.js.gz +0 -0
  218. package/client/assets/offset-CLG4o744.js.map +1 -0
  219. package/client/assets/parseUserTime-Cp5iWS7y.js +2 -0
  220. package/client/assets/parseUserTime-Cp5iWS7y.js.br +0 -0
  221. package/client/assets/parseUserTime-Cp5iWS7y.js.gz +0 -0
  222. package/client/assets/{parseUserTime-BeTKj08M.js.map → parseUserTime-Cp5iWS7y.js.map} +1 -1
  223. package/client/assets/playbackstate-B3BKJ8cT.js +2 -0
  224. package/client/assets/playbackstate-B3BKJ8cT.js.br +0 -0
  225. package/client/assets/playbackstate-B3BKJ8cT.js.gz +0 -0
  226. package/client/assets/{playbackstate-B_khF6xU.js.map → playbackstate-B3BKJ8cT.js.map} +1 -1
  227. package/client/assets/{presentation.utils-KwY-ACf7.js → presentation.utils-B-wIv_a5.js} +2 -2
  228. package/client/assets/presentation.utils-B-wIv_a5.js.br +0 -0
  229. package/client/assets/presentation.utils-B-wIv_a5.js.gz +0 -0
  230. package/client/assets/{presentation.utils-KwY-ACf7.js.map → presentation.utils-B-wIv_a5.js.map} +1 -1
  231. package/client/assets/{rundownUtils-BZHazkXR.js → rundownUtils-DJKMt8Ih.js} +2 -2
  232. package/client/assets/rundownUtils-DJKMt8Ih.js.br +0 -0
  233. package/client/assets/rundownUtils-DJKMt8Ih.js.gz +0 -0
  234. package/client/assets/{rundownUtils-BZHazkXR.js.map → rundownUtils-DJKMt8Ih.js.map} +1 -1
  235. package/client/assets/timer.utils-ByC_bcT9.js +2 -0
  236. package/client/assets/timer.utils-ByC_bcT9.js.br +0 -0
  237. package/client/assets/timer.utils-ByC_bcT9.js.gz +0 -0
  238. package/client/assets/timer.utils-ByC_bcT9.js.map +1 -0
  239. package/client/assets/useCustomFields-BUJkzZvM.js +2 -0
  240. package/client/assets/useCustomFields-BUJkzZvM.js.br +2 -0
  241. package/client/assets/useCustomFields-BUJkzZvM.js.gz +0 -0
  242. package/client/assets/{useCustomFields-DqCYz8Kt.js.map → useCustomFields-BUJkzZvM.js.map} +1 -1
  243. package/client/assets/{useFollowComponent-Ctfhf2or.js → useFollowComponent-Eyo4hWVG.js} +2 -2
  244. package/client/assets/useFollowComponent-Eyo4hWVG.js.br +0 -0
  245. package/client/assets/useFollowComponent-Eyo4hWVG.js.gz +0 -0
  246. package/client/assets/{useFollowComponent-Ctfhf2or.js.map → useFollowComponent-Eyo4hWVG.js.map} +1 -1
  247. package/client/assets/{useProjectData-C1hVamxc.js → useProjectData-DGA6K2Zs.js} +2 -2
  248. package/client/assets/useProjectData-DGA6K2Zs.js.br +0 -0
  249. package/client/assets/useProjectData-DGA6K2Zs.js.gz +0 -0
  250. package/client/assets/{useProjectData-C1hVamxc.js.map → useProjectData-DGA6K2Zs.js.map} +1 -1
  251. package/client/assets/useReport-BUCsRa2T.js +2 -0
  252. package/client/assets/useReport-BUCsRa2T.js.br +0 -0
  253. package/client/assets/useReport-BUCsRa2T.js.gz +0 -0
  254. package/client/assets/{useReport-B4dMYcNL.js.map → useReport-BUCsRa2T.js.map} +1 -1
  255. package/client/assets/useRundown-BFae0_bU.js +2 -0
  256. package/client/assets/useRundown-BFae0_bU.js.br +0 -0
  257. package/client/assets/useRundown-BFae0_bU.js.gz +0 -0
  258. package/client/assets/useRundown-BFae0_bU.js.map +1 -0
  259. package/client/assets/useWindowTitle-DU8NlxIu.js +2 -0
  260. package/client/assets/useWindowTitle-DU8NlxIu.js.br +0 -0
  261. package/client/assets/useWindowTitle-DU8NlxIu.js.gz +0 -0
  262. package/client/assets/{useWindowTitle-DqdFTWns.js.map → useWindowTitle-DU8NlxIu.js.map} +1 -1
  263. package/client/assets/{validateEvent-P9sf7C10.js → validateEvent-3adKsP1N.js} +2 -2
  264. package/client/assets/validateEvent-3adKsP1N.js.br +0 -0
  265. package/client/assets/validateEvent-3adKsP1N.js.gz +0 -0
  266. package/client/assets/{validateEvent-P9sf7C10.js.map → validateEvent-3adKsP1N.js.map} +1 -1
  267. package/client/assets/{vendor-CCiSQ9k9.js → vendor-BoH5HFNN.js} +21 -21
  268. package/client/assets/vendor-BoH5HFNN.js.br +0 -0
  269. package/client/assets/vendor-BoH5HFNN.js.gz +0 -0
  270. package/client/assets/{vendor-CCiSQ9k9.js.map → vendor-BoH5HFNN.js.map} +1 -1
  271. package/client/assets/{viewLoader.utils-CmM-4-pk.js → viewLoader.utils-BPOG1xso.js} +2 -2
  272. package/client/assets/viewLoader.utils-BPOG1xso.js.br +0 -0
  273. package/client/assets/viewLoader.utils-BPOG1xso.js.gz +0 -0
  274. package/client/assets/{viewLoader.utils-CmM-4-pk.js.map → viewLoader.utils-BPOG1xso.js.map} +1 -1
  275. package/client/assets/viewUtils-DI8_kmUZ.js +2 -0
  276. package/client/assets/viewUtils-DI8_kmUZ.js.br +0 -0
  277. package/client/assets/viewUtils-DI8_kmUZ.js.gz +0 -0
  278. package/client/assets/viewUtils-DI8_kmUZ.js.map +1 -0
  279. package/client/index.html +3 -3
  280. package/package.json +1 -1
  281. package/server/index.cjs +90 -90
  282. package/client/assets/Backstage-CAjkmeJm.js +0 -2
  283. package/client/assets/Backstage-CAjkmeJm.js.br +0 -0
  284. package/client/assets/Backstage-CAjkmeJm.js.gz +0 -0
  285. package/client/assets/Backstage-CAjkmeJm.js.map +0 -1
  286. package/client/assets/Countdown-ChuA9az_.js +0 -2
  287. package/client/assets/Countdown-ChuA9az_.js.br +0 -0
  288. package/client/assets/Countdown-ChuA9az_.js.gz +0 -0
  289. package/client/assets/Countdown-ChuA9az_.js.map +0 -1
  290. package/client/assets/CustomTranslationModal-C3R_2T5s.js +0 -2
  291. package/client/assets/CustomTranslationModal-C3R_2T5s.js.br +0 -0
  292. package/client/assets/CustomTranslationModal-C3R_2T5s.js.gz +0 -0
  293. package/client/assets/DelayIndicator-vT7n8ypf.js +0 -2
  294. package/client/assets/DelayIndicator-vT7n8ypf.js.br +0 -0
  295. package/client/assets/DelayIndicator-vT7n8ypf.js.gz +0 -0
  296. package/client/assets/EditorFeatureWrapper-DHfuO3EA.js +0 -2
  297. package/client/assets/EditorFeatureWrapper-DHfuO3EA.js.br +0 -0
  298. package/client/assets/EditorFeatureWrapper-DHfuO3EA.js.gz +0 -0
  299. package/client/assets/EditorUtils-BXko-IuN.css +0 -1
  300. package/client/assets/EditorUtils-BXko-IuN.css.br +0 -0
  301. package/client/assets/EditorUtils-BXko-IuN.css.gz +0 -0
  302. package/client/assets/EditorUtils-Da5ALK1P.js +0 -2
  303. package/client/assets/EditorUtils-Da5ALK1P.js.br +0 -0
  304. package/client/assets/EditorUtils-Da5ALK1P.js.gz +0 -0
  305. package/client/assets/EditorUtils-Da5ALK1P.js.map +0 -1
  306. package/client/assets/Empty-gWT_HMeu.js +0 -2
  307. package/client/assets/Empty-gWT_HMeu.js.br +0 -0
  308. package/client/assets/Empty-gWT_HMeu.js.gz +0 -0
  309. package/client/assets/EmptyPage-Dcbg6rmF.js +0 -2
  310. package/client/assets/EmptyPage-Dcbg6rmF.js.br +0 -0
  311. package/client/assets/EmptyPage-Dcbg6rmF.js.gz +0 -0
  312. package/client/assets/FollowButton-CSqJSvix.js +0 -2
  313. package/client/assets/FollowButton-CSqJSvix.js.br +0 -0
  314. package/client/assets/FollowButton-CSqJSvix.js.gz +0 -0
  315. package/client/assets/MessageControlExport-DPgqVb-4.css +0 -1
  316. package/client/assets/MessageControlExport-DPgqVb-4.css.br +0 -0
  317. package/client/assets/MessageControlExport-DPgqVb-4.css.gz +0 -0
  318. package/client/assets/MessageControlExport-lXK21piH.js +0 -2
  319. package/client/assets/MessageControlExport-lXK21piH.js.br +0 -0
  320. package/client/assets/MessageControlExport-lXK21piH.js.gz +0 -0
  321. package/client/assets/MessageControlExport-lXK21piH.js.map +0 -1
  322. package/client/assets/MilestoneEditor-906SVj5M.css +0 -1
  323. package/client/assets/MilestoneEditor-906SVj5M.css.br +0 -0
  324. package/client/assets/MilestoneEditor-906SVj5M.css.gz +0 -0
  325. package/client/assets/MilestoneEditor-Bge8xLrV.js +0 -2
  326. package/client/assets/MilestoneEditor-Bge8xLrV.js.br +0 -0
  327. package/client/assets/MilestoneEditor-Bge8xLrV.js.gz +0 -0
  328. package/client/assets/MilestoneEditor-Bge8xLrV.js.map +0 -1
  329. package/client/assets/Modal-BgJx3SNK.css +0 -1
  330. package/client/assets/Modal-BgJx3SNK.css.br +0 -0
  331. package/client/assets/Modal-BgJx3SNK.css.gz +0 -0
  332. package/client/assets/Modal-C2sFA0zf.js +0 -2
  333. package/client/assets/Modal-C2sFA0zf.js.br +0 -0
  334. package/client/assets/Modal-C2sFA0zf.js.gz +0 -0
  335. package/client/assets/Modal-C2sFA0zf.js.map +0 -1
  336. package/client/assets/MultiPartProgressBar-D3jJZjb5.js +0 -2
  337. package/client/assets/MultiPartProgressBar-D3jJZjb5.js.br +0 -0
  338. package/client/assets/MultiPartProgressBar-D3jJZjb5.js.gz +0 -0
  339. package/client/assets/OperatorExport-BUhxjLUx.js +0 -2
  340. package/client/assets/OperatorExport-BUhxjLUx.js.br +0 -0
  341. package/client/assets/OperatorExport-BUhxjLUx.js.gz +0 -0
  342. package/client/assets/OperatorExport-BUhxjLUx.js.map +0 -1
  343. package/client/assets/OperatorExport-QyLn8tmf.css +0 -1
  344. package/client/assets/OperatorExport-QyLn8tmf.css.br +0 -0
  345. package/client/assets/OperatorExport-QyLn8tmf.css.gz +0 -0
  346. package/client/assets/OverviewWrapper-BveJ6GjK.js +0 -2
  347. package/client/assets/OverviewWrapper-BveJ6GjK.js.br +0 -0
  348. package/client/assets/OverviewWrapper-BveJ6GjK.js.gz +0 -0
  349. package/client/assets/OverviewWrapper-BveJ6GjK.js.map +0 -1
  350. package/client/assets/OverviewWrapper-a18gep4m.css +0 -1
  351. package/client/assets/OverviewWrapper-a18gep4m.css.br +0 -0
  352. package/client/assets/OverviewWrapper-a18gep4m.css.gz +0 -0
  353. package/client/assets/ProjectInfo-z4k3cipS.js +0 -2
  354. package/client/assets/ProjectInfo-z4k3cipS.js.br +0 -0
  355. package/client/assets/ProjectInfo-z4k3cipS.js.gz +0 -0
  356. package/client/assets/ProtectRoute-CrcWfOlG.js +0 -2
  357. package/client/assets/ProtectRoute-CrcWfOlG.js.br +0 -0
  358. package/client/assets/ProtectRoute-CrcWfOlG.js.gz +0 -0
  359. package/client/assets/ProtectedCuesheet-CMTscjjR.css.br +0 -0
  360. package/client/assets/ProtectedCuesheet-CMTscjjR.css.gz +0 -0
  361. package/client/assets/ProtectedCuesheet-Deo4Aw6f.js +0 -2
  362. package/client/assets/ProtectedCuesheet-Deo4Aw6f.js.br +0 -0
  363. package/client/assets/ProtectedCuesheet-Deo4Aw6f.js.gz +0 -0
  364. package/client/assets/ProtectedCuesheet-Deo4Aw6f.js.map +0 -1
  365. package/client/assets/ProtectedEditor-BoiAT_IR.css +0 -1
  366. package/client/assets/ProtectedEditor-BoiAT_IR.css.br +0 -0
  367. package/client/assets/ProtectedEditor-BoiAT_IR.css.gz +0 -0
  368. package/client/assets/ProtectedEditor-C_SYWpL2.js +0 -3
  369. package/client/assets/ProtectedEditor-C_SYWpL2.js.br +0 -0
  370. package/client/assets/ProtectedEditor-C_SYWpL2.js.gz +0 -0
  371. package/client/assets/ProtectedEditor-C_SYWpL2.js.map +0 -1
  372. package/client/assets/RundownEntry-3gFEEUnw.css +0 -1
  373. package/client/assets/RundownEntry-3gFEEUnw.css.br +0 -0
  374. package/client/assets/RundownEntry-3gFEEUnw.css.gz +0 -0
  375. package/client/assets/RundownEntry-D61IqkXb.js +0 -2
  376. package/client/assets/RundownEntry-D61IqkXb.js.br +0 -0
  377. package/client/assets/RundownEntry-D61IqkXb.js.gz +0 -0
  378. package/client/assets/RundownEntry-D61IqkXb.js.map +0 -1
  379. package/client/assets/RundownExport-1zBZurIG.css.br +0 -0
  380. package/client/assets/RundownExport-1zBZurIG.css.gz +0 -0
  381. package/client/assets/RundownExport-C6YhMGOC.js +0 -3
  382. package/client/assets/RundownExport-C6YhMGOC.js.br +0 -0
  383. package/client/assets/RundownExport-C6YhMGOC.js.gz +0 -0
  384. package/client/assets/RundownExport-C6YhMGOC.js.map +0 -1
  385. package/client/assets/Select-CedN80WS.js +0 -2
  386. package/client/assets/Select-CedN80WS.js.br +0 -0
  387. package/client/assets/Select-CedN80WS.js.gz +0 -0
  388. package/client/assets/Studio-DUzPBS6P.js +0 -2
  389. package/client/assets/Studio-DUzPBS6P.js.br +0 -0
  390. package/client/assets/Studio-DUzPBS6P.js.gz +0 -0
  391. package/client/assets/Studio-DUzPBS6P.js.map +0 -1
  392. package/client/assets/StyleEditor-D2z65PB7.js.br +0 -0
  393. package/client/assets/StyleEditor-D2z65PB7.js.gz +0 -0
  394. package/client/assets/SuperscriptTime-CIrcMcyg.js +0 -2
  395. package/client/assets/SuperscriptTime-CIrcMcyg.js.br +0 -0
  396. package/client/assets/SuperscriptTime-CIrcMcyg.js.gz +0 -0
  397. package/client/assets/TimeElements-BcQdm4ZV.css +0 -1
  398. package/client/assets/TimeElements-BcQdm4ZV.css.br +0 -0
  399. package/client/assets/TimeElements-BcQdm4ZV.css.gz +0 -0
  400. package/client/assets/TimeElements-CALNfv6u.js +0 -2
  401. package/client/assets/TimeElements-CALNfv6u.js.br +0 -0
  402. package/client/assets/TimeElements-CALNfv6u.js.gz +0 -0
  403. package/client/assets/TimeElements-CALNfv6u.js.map +0 -1
  404. package/client/assets/TimeInput-BrVdiuOQ.css.br +0 -0
  405. package/client/assets/TimeInput-BrVdiuOQ.css.gz +0 -0
  406. package/client/assets/TimeInput-Dg1naiy3.js +0 -2
  407. package/client/assets/TimeInput-Dg1naiy3.js.br +0 -0
  408. package/client/assets/TimeInput-Dg1naiy3.js.gz +0 -0
  409. package/client/assets/TimelinePage-BJav6PAb.css +0 -1
  410. package/client/assets/TimelinePage-BJav6PAb.css.br +0 -0
  411. package/client/assets/TimelinePage-BJav6PAb.css.gz +0 -0
  412. package/client/assets/TimelinePage-Cwm0svjN.js +0 -2
  413. package/client/assets/TimelinePage-Cwm0svjN.js.br +0 -0
  414. package/client/assets/TimelinePage-Cwm0svjN.js.gz +0 -0
  415. package/client/assets/TimelinePage-Cwm0svjN.js.map +0 -1
  416. package/client/assets/Timer-BVXskRjc.js +0 -2
  417. package/client/assets/Timer-BVXskRjc.js.br +0 -0
  418. package/client/assets/Timer-BVXskRjc.js.gz +0 -0
  419. package/client/assets/Timer-BVXskRjc.js.map +0 -1
  420. package/client/assets/Timer-BvEmZbmF.css.br +0 -0
  421. package/client/assets/Timer-BvEmZbmF.css.gz +0 -0
  422. package/client/assets/TimerControlExport-C8ECtLBd.js +0 -2
  423. package/client/assets/TimerControlExport-C8ECtLBd.js.br +0 -0
  424. package/client/assets/TimerControlExport-C8ECtLBd.js.gz +0 -0
  425. package/client/assets/TimerControlExport-D8kqHQB0.css.br +0 -0
  426. package/client/assets/TimerControlExport-D8kqHQB0.css.gz +0 -0
  427. package/client/assets/TitleCard-CZl9wSHS.js +0 -2
  428. package/client/assets/TitleCard-CZl9wSHS.js.br +0 -0
  429. package/client/assets/TitleCard-CZl9wSHS.js.gz +0 -0
  430. package/client/assets/Tooltip-D9XRnwOW.js.br +0 -4
  431. package/client/assets/Tooltip-D9XRnwOW.js.gz +0 -0
  432. package/client/assets/ViewLogo-_3Z1hIHi.js +0 -2
  433. package/client/assets/ViewLogo-_3Z1hIHi.js.br +0 -0
  434. package/client/assets/ViewLogo-_3Z1hIHi.js.gz +0 -0
  435. package/client/assets/ViewParamsEditor-1Ok39npF.css +0 -1
  436. package/client/assets/ViewParamsEditor-1Ok39npF.css.br +0 -0
  437. package/client/assets/ViewParamsEditor-1Ok39npF.css.gz +0 -0
  438. package/client/assets/ViewParamsEditor-Bca1TIDW.js +0 -2
  439. package/client/assets/ViewParamsEditor-Bca1TIDW.js.br +0 -0
  440. package/client/assets/ViewParamsEditor-Bca1TIDW.js.gz +0 -0
  441. package/client/assets/ViewParamsEditor-Bca1TIDW.js.map +0 -1
  442. package/client/assets/dateConfig-DRQGMWDF.js.br +0 -0
  443. package/client/assets/dateConfig-DRQGMWDF.js.gz +0 -0
  444. package/client/assets/editorSettings-BU0pTMSY.js.br +0 -0
  445. package/client/assets/editorSettings-BU0pTMSY.js.gz +0 -0
  446. package/client/assets/getProgress-Cw79NL_O.js.br +0 -0
  447. package/client/assets/getProgress-Cw79NL_O.js.gz +0 -0
  448. package/client/assets/index-BQEUaoAf.js +0 -3
  449. package/client/assets/index-BQEUaoAf.js.br +0 -0
  450. package/client/assets/index-BQEUaoAf.js.gz +0 -0
  451. package/client/assets/index-BQEUaoAf.js.map +0 -1
  452. package/client/assets/index-De0uf0Ta.css.br +0 -0
  453. package/client/assets/index-De0uf0Ta.css.gz +0 -0
  454. package/client/assets/offset-DJAHqjFW.js +0 -2
  455. package/client/assets/offset-DJAHqjFW.js.br +0 -0
  456. package/client/assets/offset-DJAHqjFW.js.gz +0 -0
  457. package/client/assets/offset-DJAHqjFW.js.map +0 -1
  458. package/client/assets/parseUserTime-BeTKj08M.js +0 -2
  459. package/client/assets/parseUserTime-BeTKj08M.js.br +0 -0
  460. package/client/assets/parseUserTime-BeTKj08M.js.gz +0 -0
  461. package/client/assets/playbackstate-B_khF6xU.js +0 -2
  462. package/client/assets/playbackstate-B_khF6xU.js.br +0 -0
  463. package/client/assets/playbackstate-B_khF6xU.js.gz +0 -0
  464. package/client/assets/presentation.utils-KwY-ACf7.js.br +0 -0
  465. package/client/assets/presentation.utils-KwY-ACf7.js.gz +0 -0
  466. package/client/assets/rundownUtils-BZHazkXR.js.br +0 -0
  467. package/client/assets/rundownUtils-BZHazkXR.js.gz +0 -0
  468. package/client/assets/useCustomFields-DqCYz8Kt.js +0 -2
  469. package/client/assets/useCustomFields-DqCYz8Kt.js.br +0 -0
  470. package/client/assets/useCustomFields-DqCYz8Kt.js.gz +0 -0
  471. package/client/assets/useFollowComponent-Ctfhf2or.js.br +0 -0
  472. package/client/assets/useFollowComponent-Ctfhf2or.js.gz +0 -0
  473. package/client/assets/useProjectData-C1hVamxc.js.br +0 -0
  474. package/client/assets/useProjectData-C1hVamxc.js.gz +0 -0
  475. package/client/assets/useReport-B4dMYcNL.js +0 -2
  476. package/client/assets/useReport-B4dMYcNL.js.br +0 -0
  477. package/client/assets/useReport-B4dMYcNL.js.gz +0 -0
  478. package/client/assets/useRundown-BfpjcCEJ.js +0 -2
  479. package/client/assets/useRundown-BfpjcCEJ.js.br +0 -0
  480. package/client/assets/useRundown-BfpjcCEJ.js.gz +0 -0
  481. package/client/assets/useRundown-BfpjcCEJ.js.map +0 -1
  482. package/client/assets/useWindowTitle-DqdFTWns.js +0 -2
  483. package/client/assets/useWindowTitle-DqdFTWns.js.br +0 -0
  484. package/client/assets/useWindowTitle-DqdFTWns.js.gz +0 -0
  485. package/client/assets/validateEvent-P9sf7C10.js.br +0 -3
  486. package/client/assets/validateEvent-P9sf7C10.js.gz +0 -0
  487. package/client/assets/vendor-CCiSQ9k9.js.br +0 -0
  488. package/client/assets/vendor-CCiSQ9k9.js.gz +0 -0
  489. package/client/assets/viewLoader.utils-CmM-4-pk.js.br +0 -0
  490. package/client/assets/viewLoader.utils-CmM-4-pk.js.gz +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"OverviewWrapper-BveJ6GjK.js","sources":["../../src/common/utils/regex.ts","../../src/common/components/radio-group/RadioGroup.tsx","../../src/views/cuesheet/cuesheet.options.ts","../../src/features/sharing/composite/CuesheetLinkOptions.tsx","../../src/features/sharing/GenerateLinkForm.tsx","../../src/features/sharing/GenerateLinkFormExport.tsx","../../src/features/overview/composite/TitleOverview.tsx","../../src/features/overview/OverviewWrapper.tsx"],"sourcesContent":["/**\n * Simple regex patterns for common use cases\n * mostly used in form validation\n */\n\nexport const isOnlyNumbers = /^\\d+$/;\nexport const isIPAddress = /^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$/;\nexport const startsWithHttp = /^https?:\\/\\//;\nexport const startsWithSlash = /^\\//;\nexport const isAlphanumeric = /^[a-z0-9]+$/i;\nexport const isASCII = /^[ -~]+$/; //https://catonmat.net/my-favorite-regex\nexport const isASCIIorEmpty = /^$|^[ -~]+$/; //https://catonmat.net/my-favorite-regex\nexport const isNotEmpty = /\\S/;\nexport const isUrlSafe = /^[a-zA-Z0-9_-]*$/; // https://stackoverflow.com/questions/24419067/validate-a-string-to-be-url-safe-using-regex\n","import { Radio } from '@base-ui-components/react/radio';\nimport { RadioGroup as BaseRadioGroup } from '@base-ui-components/react/radio-group';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport style from './RadioGroup.module.scss';\n\ninterface RadioGroupProps<T extends string | number | boolean> extends Omit<BaseRadioGroup.Props, 'onValueChange'> {\n items: {\n value: T;\n label: string;\n }[];\n onValueChange?: (value: T) => void;\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport default function RadioGroup<T extends string | number | boolean>({\n items,\n className,\n orientation = 'vertical',\n onValueChange,\n ...elementProps\n}: RadioGroupProps<T>) {\n return (\n <BaseRadioGroup\n onValueChange={(value) => onValueChange?.(value as T)}\n className={cx([style.radioGroup, style[orientation], className])}\n {...elementProps}\n >\n {items.map((item) => (\n <label className={style.item} key={item.value.toString()}>\n <Radio.Root value={item.value.toString()} className={style.radio}>\n <Radio.Indicator className={style.indicator} />\n </Radio.Root>\n {item.label}\n </label>\n ))}\n </BaseRadioGroup>\n );\n}\n","import { CustomFields } from 'ontime-types';\nimport { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\ntype OptionValues = {\n hideTableSeconds: boolean;\n hideIndexColumn: boolean;\n showDelayedTimes: boolean;\n hideDelays: boolean;\n};\n\nconst defaultOptions: OptionValues = {\n hideTableSeconds: false,\n hideIndexColumn: false,\n showDelayedTimes: false,\n hideDelays: false,\n};\n\nexport type CuesheetOptionKeys = keyof OptionValues;\n\nexport interface CuesheetOptions extends OptionValues {\n setOption: <K extends CuesheetOptionKeys>(key: K, value: OptionValues[K]) => void;\n toggleOption: (key: CuesheetOptionKeys) => void;\n resetOptions: () => void;\n}\n\nexport const usePersistedCuesheetOptions = create<CuesheetOptions>()(\n persist(\n (set) => {\n return {\n ...defaultOptions,\n setOption: (key, value) => set((state) => ({ ...state, [key]: value })),\n toggleOption: (key) => set((state) => ({ ...state, [key]: !state[key] })),\n resetOptions: () => set(defaultOptions),\n };\n },\n {\n name: 'cuesheet-options',\n },\n ),\n);\n\nexport const cuesheetDefaultColumns = [\n { value: 'flag', label: 'Flag' },\n { value: 'cue', label: 'Cue' },\n { value: 'title', label: 'Title' },\n { value: 'timeStart', label: 'Time start' },\n { value: 'timeEnd', label: 'Time end' },\n { value: 'duration', label: 'Duration' },\n { value: 'note', label: 'Note' },\n];\n\nexport function makeCuesheetCustomColumns(customFields: CustomFields) {\n return Object.entries(customFields).map(([key, field]) => {\n return {\n value: `custom-${key}`,\n label: field.label,\n };\n });\n}\n","import { Fragment, RefObject, useMemo, useState } from 'react';\n\nimport RadioGroup from '../../../common/components/radio-group/RadioGroup';\nimport Switch from '../../../common/components/switch/Switch';\nimport useCustomFields from '../../../common/hooks-query/useCustomFields';\nimport { cuesheetDefaultColumns, makeCuesheetCustomColumns } from '../../../views/cuesheet/cuesheet.options';\nimport * as Panel from '../../app-settings/panel-utils/PanelUtils';\n\nimport style from './CuesheetLinkOptions.module.scss';\n\ntype AccessMode = 'full' | 'custom';\n\ninterface CuesheetLinkOptionsProps {\n readRef?: RefObject<HTMLInputElement | null>;\n writeRef?: RefObject<HTMLInputElement | null>;\n}\n\nexport default function CuesheetLinkOptions({ readRef, writeRef }: CuesheetLinkOptionsProps) {\n const { data } = useCustomFields();\n const customFieldColumns = useMemo(() => makeCuesheetCustomColumns(data), [data]);\n\n const [readPermissions, setReadPermissions] = useState<AccessMode>('full');\n const [writePermissions, setWritePermissions] = useState<AccessMode>('full');\n\n const [readSwitches, setReadSwitches] = useState<Record<string, boolean>>(() => {\n const initialState: Record<string, boolean> = {};\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n initialState[column.value] = true;\n });\n return initialState;\n });\n\n const [writeSwitches, setWriteSwitches] = useState<Record<string, boolean>>(() => {\n const initialState: Record<string, boolean> = {};\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n initialState[column.value] = true;\n });\n return initialState;\n });\n\n const handleReadModeChange = (value: AccessMode) => {\n setReadPermissions(value);\n\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches };\n Object.keys(updatedReadSwitches).forEach((key) => {\n updatedReadSwitches[key] = true;\n });\n return updatedReadSwitches;\n });\n };\n\n const handleWriteModeChange = (value: AccessMode) => {\n if (value === 'full') {\n setReadPermissions('full');\n }\n setWritePermissions(value);\n\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches };\n setWriteSwitches((prevWriteSwitches) => {\n const updatedWriteSwitches = { ...prevWriteSwitches };\n [...cuesheetDefaultColumns, ...customFieldColumns].forEach((column) => {\n updatedReadSwitches[column.value] = true;\n updatedWriteSwitches[column.value] = true;\n });\n return updatedWriteSwitches;\n });\n return updatedReadSwitches;\n });\n };\n\n const handleSwitchChange = (key: string, type: 'read' | 'write', value: boolean) => {\n if (type === 'read') {\n setReadSwitches((prevReadSwitches) => {\n const updatedReadSwitches = { ...prevReadSwitches, [key]: value };\n return updatedReadSwitches;\n });\n } else {\n setWriteSwitches((prevWriteSwitches) => {\n const updatedWriteSwitches = { ...prevWriteSwitches, [key]: value };\n return updatedWriteSwitches;\n });\n }\n };\n\n const getReadPermissions = () => {\n if (readPermissions === 'full' || writePermissions === 'full') {\n return 'full';\n }\n\n return Object.entries(readSwitches)\n .filter(([_, value]) => value)\n .map(([key]) => key)\n .join(',');\n };\n\n const getWritePermissions = () => {\n if (writePermissions === 'full') {\n return 'full';\n }\n\n return Object.entries(writeSwitches)\n .filter(([_, value]) => value)\n .map(([key]) => key)\n .join(',');\n };\n\n return (\n <Panel.Indent>\n <input name='read' hidden readOnly ref={readRef} value={getReadPermissions() || '-'} />\n <input name='write' hidden readOnly ref={writeRef} value={getWritePermissions() || '-'} />\n <div>\n <Panel.Field title='Access mode' description='Which parts of the data will the link give access to' />\n <div>\n <RadioGroup\n value={writePermissions}\n onValueChange={handleWriteModeChange}\n orientation='horizontal'\n items={[\n { value: 'full', label: 'Full write (edit all existing and future columns)' },\n { value: 'custom', label: 'Custom write' },\n ]}\n />\n <RadioGroup\n value={readPermissions}\n onValueChange={handleReadModeChange}\n orientation='horizontal'\n disabled={writePermissions === 'full'}\n items={[\n { value: 'full', label: 'Full read (view all existing and future columns)' },\n { value: 'custom', label: 'Custom read' },\n ]}\n />\n </div>\n </div>\n <div className={style.twoCols}>\n <div className={style.grid}>\n <Panel.Description>Ontime columns</Panel.Description>\n <Panel.Description>Read</Panel.Description>\n <Panel.Description>Write</Panel.Description>\n {cuesheetDefaultColumns.map((column) => (\n <Fragment key={column.value}>\n <div>{column.label}</div>\n <Switch\n checked={Boolean(readSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'read', value)}\n disabled={readPermissions === 'full' || writePermissions === 'full'}\n data-testid={`read-${column.value}`}\n />\n <Switch\n checked={Boolean(writeSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'write', value)}\n disabled={writePermissions === 'full'}\n data-testid={`write-${column.value}`}\n />\n </Fragment>\n ))}\n </div>\n {customFieldColumns.length > 0 && (\n <div className={style.grid}>\n <Panel.Description>Custom fields</Panel.Description>\n <Panel.Description>Read</Panel.Description>\n <Panel.Description>Write</Panel.Description>\n {customFieldColumns.map((column) => (\n <Fragment key={column.value}>\n {column.label}\n <Switch\n checked={Boolean(readSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'read', value)}\n disabled={readPermissions === 'full' || writePermissions === 'full'}\n data-testid={`read-${column.value}`}\n />\n <Switch\n checked={Boolean(writeSwitches[column.value])}\n onCheckedChange={(value: boolean) => handleSwitchChange(column.value, 'write', value)}\n disabled={writePermissions === 'full'}\n data-testid={`write-${column.value}`}\n />\n </Fragment>\n ))}\n </div>\n )}\n </div>\n </Panel.Indent>\n );\n}\n","import { useRef, useState } from 'react';\nimport { FieldErrors, useForm } from 'react-hook-form';\nimport QRCode from 'react-qr-code';\nimport { OntimeView, URLPreset } from 'ontime-types';\nimport { generateId } from 'ontime-utils';\n\nimport { generateUrl } from '../../common/api/session';\nimport { maybeAxiosError } from '../../common/api/utils';\nimport Button from '../../common/components/buttons/Button';\nimport CopyTag from '../../common/components/copy-tag/CopyTag';\nimport Info from '../../common/components/info/Info';\nimport Input from '../../common/components/input/input/Input';\nimport Select from '../../common/components/select/Select';\nimport Switch from '../../common/components/switch/Switch';\nimport { useUpdateUrlPreset } from '../../common/hooks-query/useUrlPresets';\nimport copyToClipboard from '../../common/utils/copyToClipboard';\nimport { preventEscape } from '../../common/utils/keyEvent';\nimport { linkToOtherHost } from '../../common/utils/linkUtils';\nimport { isUrlSafe } from '../../common/utils/regex';\nimport { isOntimeCloud, serverURL } from '../../externals';\nimport * as Panel from '../app-settings/panel-utils/PanelUtils';\n\nimport CuesheetLinkOptions from './composite/CuesheetLinkOptions';\n\nimport style from './GenerateLinkForm.module.scss';\n\ninterface GenerateLinkFormProps {\n hostOptions: { value: string; label: string }[];\n pathOptions: { value: OntimeView | string; label: string }[];\n presets: URLPreset[];\n isLockedToView?: boolean;\n}\n\ntype GenericLinkOptions = {\n baseUrl: string;\n path: OntimeView | string; // we use empty string for Companion view\n authenticate: boolean;\n lockConfig: boolean;\n lockNav: boolean;\n};\n\ntype CuesheetLinkOptions = GenericLinkOptions & {\n path: OntimeView.Cuesheet;\n\n alias: string;\n options: {\n read?: string;\n write?: string;\n };\n};\n\ntype GenerateLinkFormOptions = GenericLinkOptions | CuesheetLinkOptions;\n\ntype GenerateLinkState = 'pending' | 'loading' | 'success' | 'error';\n\nexport default function GenerateLinkForm({ hostOptions, pathOptions, presets, isLockedToView }: GenerateLinkFormProps) {\n const [formState, setFormState] = useState<GenerateLinkState>('pending');\n const [url, setUrl] = useState(serverURL);\n const cuesheetReadRef = useRef<HTMLInputElement>(null);\n const cuesheetWriteRef = useRef<HTMLInputElement>(null);\n const generatedAlias = useRef<string>(`cuesheet-${generateId()}`);\n\n const { addPreset } = useUpdateUrlPreset();\n\n const {\n handleSubmit,\n setError,\n watch,\n setValue,\n reset,\n register,\n formState: { errors, isDirty },\n } = useForm<GenerateLinkFormOptions>({\n mode: 'onChange',\n defaultValues: {\n baseUrl: serverURL,\n path: isLockedToView ? pathOptions[0].value : OntimeView.Timer,\n authenticate: false,\n lockConfig: false,\n lockNav: false,\n },\n });\n\n /**\n * If the user is generating a link to the cuesheet we gather extra options\n * The extra options are saved into a URL preset which we then request a share link for\n */\n const createPresetFromOptions = async (\n alias: string,\n options: Required<CuesheetLinkOptions['options']>,\n ): Promise<URLPreset | undefined> => {\n if (options.read === '-') {\n throw new Error('Cannot create a share with no read permissions');\n }\n const presets = await addPreset({\n target: OntimeView.Cuesheet,\n enabled: true,\n alias,\n search: '',\n options: {\n read: options.read,\n write: options.write,\n },\n });\n return presets.find((preset) => preset.alias === alias);\n };\n\n const onSubmit = async (options: GenerateLinkFormOptions) => {\n try {\n setFormState('loading');\n if (options.path === OntimeView.Cuesheet) {\n const urlPreset = await createPresetFromOptions((options as CuesheetLinkOptions).alias, {\n read: cuesheetReadRef.current?.value ?? 'full',\n write: cuesheetWriteRef.current?.value ?? 'full',\n });\n\n if (!urlPreset) {\n throw new Error('Failed to create URL preset for Cuesheet');\n }\n\n const url = await generateUrl({\n baseUrl: options.baseUrl,\n path: options.path,\n authenticate: options.authenticate,\n lockConfig: options.lockConfig,\n lockNav: options.lockNav,\n preset: urlPreset.alias,\n });\n await copyToClipboard(url);\n setUrl(url);\n } else {\n const presetPath = options.path.startsWith('preset-') ? options.path.replace('preset-', '') : undefined;\n const path = presetPath ? presets.find((preset) => preset.alias === presetPath)?.target : options.path;\n if (!path) {\n throw new Error(`Could not resolve preset: ${path}`);\n }\n\n const url = await generateUrl({\n baseUrl: linkToOtherHost(options.baseUrl),\n path,\n authenticate: options.authenticate,\n lockConfig: options.lockConfig,\n lockNav: options.lockNav,\n preset: presetPath,\n });\n\n await copyToClipboard(url);\n setUrl(url);\n }\n reset(options, {\n keepValues: true,\n keepDirty: false,\n });\n setFormState('success');\n } catch (error) {\n const message = maybeAxiosError(error);\n setError('root', { message });\n setFormState('error');\n }\n };\n\n const canSubmit = isDirty || formState !== 'success';\n\n return (\n <form onSubmit={handleSubmit(onSubmit)} onKeyDown={(event) => preventEscape(event)}>\n {!isLockedToView && (\n <Info>You can generate a link to share with your team or to use in automation (such as companion).</Info>\n )}\n <div className={style.shareInline}>\n <div className={style.column}>\n <Panel.ListGroup>\n {isOntimeCloud ? (\n <input hidden readOnly name='baseUrl' value={serverURL} />\n ) : (\n <Panel.ListItem>\n <Panel.Field\n title='Host IP'\n description={`Which IP address will be used${isOntimeCloud ? ' (not applicable in Ontime Cloud)' : ''}`}\n />\n <Select\n options={hostOptions}\n value={watch('baseUrl')}\n onValueChange={(value) => setValue('baseUrl', value)}\n />\n </Panel.ListItem>\n )}\n {isLockedToView ? (\n <input type='hidden' value={watch('path')} />\n ) : (\n <Panel.ListItem>\n <Panel.Field title='Ontime view' description='Which view or preset will the link point to' />\n <Select\n options={pathOptions}\n value={watch('path')}\n onValueChange={(value) => setValue('path', value, { shouldDirty: true })}\n />\n </Panel.ListItem>\n )}\n\n {watch('path') === OntimeView.Cuesheet && (\n <>\n <Panel.ListItem>\n <Panel.Field\n title='Preset alias'\n description='The name of the preset we will create to hold this options'\n error={(errors as FieldErrors<CuesheetLinkOptions>).alias?.message}\n />\n <Input\n defaultValue={generatedAlias.current}\n {...register('alias', {\n required: 'Alias cannot be empty and must be unique',\n pattern: {\n value: isUrlSafe,\n message: 'Field can only contain URL safe characters (a-z, 0-9, _ and -)',\n },\n })}\n />\n </Panel.ListItem>\n <CuesheetLinkOptions readRef={cuesheetReadRef} writeRef={cuesheetWriteRef} />\n </>\n )}\n\n <Panel.ListItem>\n <Panel.Field title='Lock navigation' description='Whether to hide the navigation menu' />\n <Switch\n size='large'\n name='lockNav'\n data-testid='lockNav'\n checked={watch('lockNav')}\n onCheckedChange={(checked) => setValue('lockNav', checked, { shouldDirty: true })}\n disabled={watch('lockConfig')}\n />\n </Panel.ListItem>\n {watch('path') !== OntimeView.Cuesheet && (\n <Panel.ListItem>\n <Panel.Field\n title='Lock configuration'\n description='Whether to hide the configuration panel (also hides navigation)'\n />\n <Switch\n size='large'\n name='lockConfig'\n data-testid='lockConfig'\n checked={watch('lockConfig')}\n onCheckedChange={(checked) => {\n if (checked) {\n setValue('lockNav', checked, { shouldDirty: true });\n }\n setValue('lockConfig', checked, { shouldDirty: true });\n }}\n />\n </Panel.ListItem>\n )}\n <Panel.ListItem>\n <Panel.Field title='Authenticate' description='Whether the URL should be pre-authenticated' />\n <Switch\n size='large'\n name='authenticate'\n data-testid='authenticate'\n checked={watch('authenticate')}\n onCheckedChange={(checked) => setValue('authenticate', checked, { shouldDirty: true })}\n />\n </Panel.ListItem>\n </Panel.ListGroup>\n <Panel.Error>{errors.root?.message}</Panel.Error>\n <Panel.InlineElements align='end' className={style.end}>\n <Button type='submit' variant={canSubmit ? 'primary' : 'subtle'} loading={formState === 'loading'}>\n {canSubmit ? 'Create share link' : 'Link copied to clipboard!'}\n </Button>\n </Panel.InlineElements>\n </div>\n <Panel.Section className={style.column}>\n <Panel.Description>Share this link</Panel.Description>\n <QRCode size={172} value={url} className={style.qrCode} />\n <div className={style.copiableLink} data-testid='copy-link'>\n {url}\n </div>\n <CopyTag copyValue={url}>Copy link</CopyTag>\n </Panel.Section>\n </div>\n </form>\n );\n}\n","import { useMemo } from 'react';\nimport { OntimeView } from 'ontime-types';\n\nimport useInfo from '../../common/hooks-query/useInfo';\nimport useUrlPresets from '../../common/hooks-query/useUrlPresets';\n\nimport GenerateLinkForm from './GenerateLinkForm';\n\ninterface GenerateLinkFormExportProps {\n lockedPath?: { value: OntimeView; label: string };\n}\n\nexport default function GenerateLinkFormExport({ lockedPath }: GenerateLinkFormExportProps) {\n const { data: infoData } = useInfo();\n const { data: urlPresetData } = useUrlPresets({ skip: lockedPath === undefined });\n\n /**\n * hostOptions are only used for local networks\n * the NIF address is a local IP address: 192.168.x.x or 10.x.x.x\n * We need to inject the port and protocol to create a valid URL\n * eg: http://192.168.x.x:port\n */\n const hostOptions = useMemo(() => {\n return infoData.networkInterfaces.map((nif) => ({\n value: `http://${nif.address}:${infoData.serverPort}`,\n label: `${nif.name} - ${nif.address}`,\n }));\n }, [infoData.networkInterfaces, infoData.serverPort]);\n\n const pathOptions = useMemo(() => {\n if (lockedPath) {\n return [{ value: lockedPath.value, label: lockedPath.label }];\n }\n return [\n { value: OntimeView.Timer, label: 'Timer' },\n { value: OntimeView.Cuesheet, label: 'Cuesheet' },\n { value: OntimeView.Operator, label: 'Operator' },\n { value: '<<companion>>', label: 'Companion' },\n ...urlPresetData.map((preset) => ({\n value: `preset-${preset.alias}`,\n label: `URL Preset: ${preset.alias}`,\n })),\n ];\n }, [lockedPath, urlPresetData]);\n\n return (\n <GenerateLinkForm\n hostOptions={hostOptions}\n pathOptions={pathOptions}\n presets={urlPresetData}\n isLockedToView={Boolean(lockedPath)}\n />\n );\n}\n","import useProjectData from '../../../common/hooks-query/useProjectData';\n\nimport style from './TitleOverview.module.scss';\n\nexport default function TitleOverview() {\n const { data } = useProjectData();\n\n if (!data.title && !data.description) {\n return null;\n }\n\n return (\n <div>\n <div className={style.title}>{data.title}</div>\n <div className={style.description}>{data.description}</div>\n </div>\n );\n}\n","import { PropsWithChildren, ReactNode } from 'react';\nimport { ErrorBoundary } from '@sentry/react';\n\nimport { useIsOnline } from '../../common/hooks/useSocket';\nimport { cx } from '../../common/utils/styleUtils';\n\nimport style from './Overview.module.scss';\n\ninterface OverviewWrapperProps {\n navElements: ReactNode;\n}\n\nexport function OverviewWrapper({ navElements, children }: PropsWithChildren<OverviewWrapperProps>) {\n const { isOnline } = useIsOnline();\n return (\n <div className={cx([style.overview, !isOnline && style.isOffline])}>\n <ErrorBoundary>\n <div className={style.nav}>{navElements}</div>\n <div className={style.info}>{children}</div>\n </ErrorBoundary>\n </div>\n );\n}\n"],"names":["isOnlyNumbers","startsWithHttp","isAlphanumeric","isUrlSafe","RadioGroup","items","className","orientation","onValueChange","elementProps","jsx","BaseRadioGroup","value","cx","style","item","Radio.Root","Radio.Indicator","defaultOptions","usePersistedCuesheetOptions","create","persist","set","key","state","cuesheetDefaultColumns","makeCuesheetCustomColumns","customFields","field","CuesheetLinkOptions","readRef","writeRef","data","useCustomFields","customFieldColumns","useMemo","readPermissions","setReadPermissions","useState","writePermissions","setWritePermissions","readSwitches","setReadSwitches","initialState","column","writeSwitches","setWriteSwitches","handleReadModeChange","prevReadSwitches","updatedReadSwitches","handleWriteModeChange","prevWriteSwitches","updatedWriteSwitches","handleSwitchChange","type","getReadPermissions","_","getWritePermissions","jsxs","Panel.Indent","Panel.Field","Panel.Description","Fragment","Switch","GenerateLinkForm","hostOptions","pathOptions","presets","isLockedToView","formState","setFormState","url","setUrl","serverURL","cuesheetReadRef","useRef","cuesheetWriteRef","generatedAlias","generateId","addPreset","useUpdateUrlPreset","handleSubmit","setError","watch","setValue","reset","register","errors","isDirty","useForm","OntimeView","createPresetFromOptions","alias","options","preset","onSubmit","urlPreset","_a","_b","generateUrl","copyToClipboard","presetPath","path","_c","linkToOtherHost","error","message","maybeAxiosError","canSubmit","event","preventEscape","Info","Panel.ListGroup","isOntimeCloud","Panel.ListItem","Select","Input","checked","Panel.Error","Panel.InlineElements","Button","Panel.Section","QRCode","CopyTag","GenerateLinkFormExport","lockedPath","infoData","useInfo","urlPresetData","useUrlPresets","nif","TitleOverview","useProjectData","OverviewWrapper","navElements","children","isOnline","useIsOnline","ErrorBoundary"],"mappings":"24BAKO,MAAMA,GAAgB,QAEhBC,GAAiB,eAEjBC,GAAiB,eAIjBC,GAAY,gTCGzB,SAAwBC,EAAgD,CACtE,MAAAC,EACA,UAAAC,EACA,YAAAC,EAAc,WACd,cAAAC,EACA,GAAGC,CACL,EAAuB,CAEnB,OAAAC,EAAA,IAACC,GAAA,CACC,cAAgBC,GAAUJ,GAAA,YAAAA,EAAgBI,GAC1C,UAAWC,EAAG,CAACC,EAAM,WAAYA,EAAMP,CAAW,EAAGD,CAAS,CAAC,EAC9D,GAAGG,EAEH,SAAAJ,EAAM,IAAKU,UACT,QAAM,CAAA,UAAWD,EAAM,KACtB,SAAA,CAAAJ,EAAA,IAACM,GAAA,CAAW,MAAOD,EAAK,MAAM,SAAY,EAAA,UAAWD,EAAM,MACzD,eAACG,GAAA,CAAgB,UAAWH,EAAM,SAAW,CAAA,EAC/C,EACCC,EAAK,KAAA,CAAA,EAJ2BA,EAAK,MAAM,UAK9C,CACD,CAAA,CACH,CAEJ,CC5BA,MAAMG,EAA+B,CACnC,iBAAkB,GAClB,gBAAiB,GACjB,iBAAkB,GAClB,WAAY,EACd,EAUaC,GAA8BC,GAAwB,EACjEC,GACGC,IACQ,CACL,GAAGJ,EACH,UAAW,CAACK,EAAKX,IAAUU,EAAKE,IAAW,CAAE,GAAGA,EAAO,CAACD,CAAG,EAAGX,CAAQ,EAAA,EACtE,aAAeW,GAAQD,EAAKE,IAAW,CAAE,GAAGA,EAAO,CAACD,CAAG,EAAG,CAACC,EAAMD,CAAG,CAAI,EAAA,EACxE,aAAc,IAAMD,EAAIJ,CAAc,CACxC,GAEF,CACE,KAAM,kBAAA,CACR,CAEJ,EAEaO,EAAyB,CACpC,CAAE,MAAO,OAAQ,MAAO,MAAO,EAC/B,CAAE,MAAO,MAAO,MAAO,KAAM,EAC7B,CAAE,MAAO,QAAS,MAAO,OAAQ,EACjC,CAAE,MAAO,YAAa,MAAO,YAAa,EAC1C,CAAE,MAAO,UAAW,MAAO,UAAW,EACtC,CAAE,MAAO,WAAY,MAAO,UAAW,EACvC,CAAE,MAAO,OAAQ,MAAO,MAAO,CACjC,EAEO,SAASC,GAA0BC,EAA4B,CAC7D,OAAA,OAAO,QAAQA,CAAY,EAAE,IAAI,CAAC,CAACJ,EAAKK,CAAK,KAC3C,CACL,MAAO,UAAUL,CAAG,GACpB,MAAOK,EAAM,KACf,EACD,CACH,yEC1CA,SAAwBC,GAAoB,CAAE,QAAAC,EAAS,SAAAC,GAAsC,CACrF,KAAA,CAAE,KAAAC,CAAK,EAAIC,GAAgB,EAC3BC,EAAqBC,EAAAA,QAAQ,IAAMT,GAA0BM,CAAI,EAAG,CAACA,CAAI,CAAC,EAE1E,CAACI,EAAiBC,CAAkB,EAAIC,EAAAA,SAAqB,MAAM,EACnE,CAACC,EAAkBC,CAAmB,EAAIF,EAAAA,SAAqB,MAAM,EAErE,CAACG,EAAcC,CAAe,EAAIJ,WAAkC,IAAM,CAC9E,MAAMK,EAAwC,CAAC,EAC/C,OAAC,GAAGlB,EAAwB,GAAGS,CAAkB,EAAE,QAASU,GAAW,CACxDD,EAAAC,EAAO,KAAK,EAAI,EAAA,CAC9B,EACMD,CAAA,CACR,EAEK,CAACE,EAAeC,CAAgB,EAAIR,WAAkC,IAAM,CAChF,MAAMK,EAAwC,CAAC,EAC/C,OAAC,GAAGlB,EAAwB,GAAGS,CAAkB,EAAE,QAASU,GAAW,CACxDD,EAAAC,EAAO,KAAK,EAAI,EAAA,CAC9B,EACMD,CAAA,CACR,EAEKI,EAAwBnC,GAAsB,CAClDyB,EAAmBzB,CAAK,EAExB8B,EAAiBM,GAAqB,CAC9B,MAAAC,EAAsB,CAAE,GAAGD,CAAiB,EAClD,cAAO,KAAKC,CAAmB,EAAE,QAAS1B,GAAQ,CAChD0B,EAAoB1B,CAAG,EAAI,EAAA,CAC5B,EACM0B,CAAA,CACR,CACH,EAEMC,EAAyBtC,GAAsB,CAC/CA,IAAU,QACZyB,EAAmB,MAAM,EAE3BG,EAAoB5B,CAAK,EAEzB8B,EAAiBM,GAAqB,CAC9B,MAAAC,EAAsB,CAAE,GAAGD,CAAiB,EAClD,OAAAF,EAAkBK,GAAsB,CAChC,MAAAC,EAAuB,CAAE,GAAGD,CAAkB,EACpD,OAAC,GAAG1B,EAAwB,GAAGS,CAAkB,EAAE,QAASU,GAAW,CACjDK,EAAAL,EAAO,KAAK,EAAI,GACfQ,EAAAR,EAAO,KAAK,EAAI,EAAA,CACtC,EACMQ,CAAA,CACR,EACMH,CAAA,CACR,CACH,EAEMI,EAAqB,CAAC9B,EAAa+B,EAAwB1C,IAAmB,CAC9E0C,IAAS,OACXZ,EAAiBM,IACa,CAAE,GAAGA,EAAkB,CAACzB,CAAG,EAAGX,CAAM,EAEjE,EAEDkC,EAAkBK,IACa,CAAE,GAAGA,EAAmB,CAAC5B,CAAG,EAAGX,CAAM,EAEnE,CAEL,EAEM2C,EAAqB,IACrBnB,IAAoB,QAAUG,IAAqB,OAC9C,OAGF,OAAO,QAAQE,CAAY,EAC/B,OAAO,CAAC,CAACe,EAAG5C,CAAK,IAAMA,CAAK,EAC5B,IAAI,CAAC,CAACW,CAAG,IAAMA,CAAG,EAClB,KAAK,GAAG,EAGPkC,EAAsB,IACtBlB,IAAqB,OAChB,OAGF,OAAO,QAAQM,CAAa,EAChC,OAAO,CAAC,CAACW,EAAG5C,CAAK,IAAMA,CAAK,EAC5B,IAAI,CAAC,CAACW,CAAG,IAAMA,CAAG,EAClB,KAAK,GAAG,EAIX,OAAAmC,EAAA,KAACC,GAAA,CACC,SAAA,CAAAjD,EAAA,IAAC,QAAM,CAAA,KAAK,OAAO,OAAM,GAAC,SAAQ,GAAC,IAAKoB,EAAS,MAAOyB,EAAmB,GAAK,GAAK,CAAA,EACpF7C,EAAA,IAAA,QAAA,CAAM,KAAK,QAAQ,OAAM,GAAC,SAAQ,GAAC,IAAKqB,EAAU,MAAO0B,KAAyB,GAAK,CAAA,SACvF,MACC,CAAA,SAAA,CAAA/C,EAAA,IAACkD,EAAA,CAAY,MAAM,cAAc,YAAY,uDAAuD,SACnG,MACC,CAAA,SAAA,CAAAlD,EAAA,IAACN,EAAA,CACC,MAAOmC,EACP,cAAeW,EACf,YAAY,aACZ,MAAO,CACL,CAAE,MAAO,OAAQ,MAAO,mDAAoD,EAC5E,CAAE,MAAO,SAAU,MAAO,cAAe,CAAA,CAC3C,CACF,EACAxC,EAAA,IAACN,EAAA,CACC,MAAOgC,EACP,cAAeW,EACf,YAAY,aACZ,SAAUR,IAAqB,OAC/B,MAAO,CACL,CAAE,MAAO,OAAQ,MAAO,kDAAmD,EAC3E,CAAE,MAAO,SAAU,MAAO,aAAc,CAAA,CAC1C,CAAA,CACF,CACF,CAAA,CAAA,EACF,EACCmB,EAAA,KAAA,MAAA,CAAI,UAAW5C,EAAM,QACpB,SAAA,CAAC4C,EAAA,KAAA,MAAA,CAAI,UAAW5C,EAAM,KACpB,SAAA,CAACJ,EAAAA,IAAAmD,EAAA,CAAkB,SAAc,gBAAA,CAAA,EAChCnD,EAAAA,IAAAmD,EAAA,CAAkB,SAAI,MAAA,CAAA,EACtBnD,EAAAA,IAAAmD,EAAA,CAAkB,SAAK,OAAA,CAAA,EACvBpC,EAAuB,IAAKmB,UAC1BkB,EAAAA,SACC,CAAA,SAAA,CAACpD,EAAAA,IAAA,MAAA,CAAK,WAAO,KAAM,CAAA,EACnBA,EAAA,IAACqD,EAAA,CACC,QAAS,EAAQtB,EAAaG,EAAO,KAAK,EAC1C,gBAAkBhC,GAAmByC,EAAmBT,EAAO,MAAO,OAAQhC,CAAK,EACnF,SAAUwB,IAAoB,QAAUG,IAAqB,OAC7D,cAAa,QAAQK,EAAO,KAAK,EAAA,CACnC,EACAlC,EAAA,IAACqD,EAAA,CACC,QAAS,EAAQlB,EAAcD,EAAO,KAAK,EAC3C,gBAAkBhC,GAAmByC,EAAmBT,EAAO,MAAO,QAAShC,CAAK,EACpF,SAAU2B,IAAqB,OAC/B,cAAa,SAASK,EAAO,KAAK,EAAA,CAAA,CACpC,CAba,EAAAA,EAAO,KActB,CACD,CAAA,EACH,EACCV,EAAmB,OAAS,UAC1B,MAAI,CAAA,UAAWpB,EAAM,KACpB,SAAA,CAACJ,EAAAA,IAAAmD,EAAA,CAAkB,SAAa,eAAA,CAAA,EAC/BnD,EAAAA,IAAAmD,EAAA,CAAkB,SAAI,MAAA,CAAA,EACtBnD,EAAAA,IAAAmD,EAAA,CAAkB,SAAK,OAAA,CAAA,EACvB3B,EAAmB,IAAKU,UACtBkB,EAAAA,SACE,CAAA,SAAA,CAAOlB,EAAA,MACRlC,EAAA,IAACqD,EAAA,CACC,QAAS,EAAQtB,EAAaG,EAAO,KAAK,EAC1C,gBAAkBhC,GAAmByC,EAAmBT,EAAO,MAAO,OAAQhC,CAAK,EACnF,SAAUwB,IAAoB,QAAUG,IAAqB,OAC7D,cAAa,QAAQK,EAAO,KAAK,EAAA,CACnC,EACAlC,EAAA,IAACqD,EAAA,CACC,QAAS,EAAQlB,EAAcD,EAAO,KAAK,EAC3C,gBAAkBhC,GAAmByC,EAAmBT,EAAO,MAAO,QAAShC,CAAK,EACpF,SAAU2B,IAAqB,OAC/B,cAAa,SAASK,EAAO,KAAK,EAAA,CAAA,CACpC,CAba,EAAAA,EAAO,KActB,CACD,CAAA,CACH,CAAA,CAAA,CAEJ,CAAA,CAAA,EACF,CAEJ,2LCnIA,SAAwBoB,GAAiB,CAAE,YAAAC,EAAa,YAAAC,EAAa,QAAAC,EAAS,eAAAC,GAAyC,SACrH,KAAM,CAACC,EAAWC,CAAY,EAAIhC,EAAAA,SAA4B,SAAS,EACjE,CAACiC,EAAKC,CAAM,EAAIlC,EAAAA,SAASmC,CAAS,EAClCC,EAAkBC,SAAyB,IAAI,EAC/CC,EAAmBD,SAAyB,IAAI,EAChDE,EAAiBF,EAAAA,OAAe,YAAYG,GAAA,CAAY,EAAE,EAE1D,CAAE,UAAAC,CAAU,EAAIC,GAAmB,EAEnC,CACJ,aAAAC,EACA,SAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,SAAAC,EACA,UAAW,CAAE,OAAAC,EAAQ,QAAAC,CAAQ,GAC3BC,GAAiC,CACnC,KAAM,WACN,cAAe,CACb,QAAShB,EACT,KAAML,EAAiBF,EAAY,CAAC,EAAE,MAAQwB,EAAW,MACzD,aAAc,GACd,WAAY,GACZ,QAAS,EAAA,CACX,CACD,EAMKC,EAA0B,MAC9BC,EACAC,IACmC,CAC/B,GAAAA,EAAQ,OAAS,IACb,MAAA,IAAI,MAAM,gDAAgD,EAYlE,OAVgB,MAAMd,EAAU,CAC9B,OAAQW,EAAW,SACnB,QAAS,GACT,MAAAE,EACA,OAAQ,GACR,QAAS,CACP,KAAMC,EAAQ,KACd,MAAOA,EAAQ,KAAA,CACjB,CACD,GACc,KAAMC,GAAWA,EAAO,QAAUF,CAAK,CACxD,EAEMG,EAAW,MAAOF,GAAqC,WACvD,GAAA,CAEE,GADJvB,EAAa,SAAS,EAClBuB,EAAQ,OAASH,EAAW,SAAU,CACxC,MAAMM,EAAY,MAAML,EAAyBE,EAAgC,MAAO,CACtF,OAAMI,EAAAvB,EAAgB,UAAhB,YAAAuB,EAAyB,QAAS,OACxC,QAAOC,EAAAtB,EAAiB,UAAjB,YAAAsB,EAA0B,QAAS,MAAA,CAC3C,EAED,GAAI,CAACF,EACG,MAAA,IAAI,MAAM,0CAA0C,EAGtDzB,MAAAA,EAAM,MAAM4B,EAAY,CAC5B,QAASN,EAAQ,QACjB,KAAMA,EAAQ,KACd,aAAcA,EAAQ,aACtB,WAAYA,EAAQ,WACpB,QAASA,EAAQ,QACjB,OAAQG,EAAU,KAAA,CACnB,EACD,MAAMI,EAAgB7B,CAAG,EACzBC,EAAOD,CAAG,CAAA,KACL,CACC,MAAA8B,EAAaR,EAAQ,KAAK,WAAW,SAAS,EAAIA,EAAQ,KAAK,QAAQ,UAAW,EAAE,EAAI,OACxFS,EAAOD,GAAaE,EAAApC,EAAQ,KAAM2B,GAAWA,EAAO,QAAUO,CAAU,IAApD,YAAAE,EAAuD,OAASV,EAAQ,KAClG,GAAI,CAACS,EACH,MAAM,IAAI,MAAM,6BAA6BA,CAAI,EAAE,EAG/C/B,MAAAA,EAAM,MAAM4B,EAAY,CAC5B,QAASK,GAAgBX,EAAQ,OAAO,EACxC,KAAAS,EACA,aAAcT,EAAQ,aACtB,WAAYA,EAAQ,WACpB,QAASA,EAAQ,QACjB,OAAQQ,CAAA,CACT,EAED,MAAMD,EAAgB7B,CAAG,EACzBC,EAAOD,CAAG,CAAA,CAEZc,EAAMQ,EAAS,CACb,WAAY,GACZ,UAAW,EAAA,CACZ,EACDvB,EAAa,SAAS,QACfmC,EAAO,CACR,MAAAC,EAAUC,GAAgBF,CAAK,EAC5BvB,EAAA,OAAQ,CAAE,QAAAwB,EAAS,EAC5BpC,EAAa,OAAO,CAAA,CAExB,EAEMsC,EAAYpB,GAAWnB,IAAc,UAGzC,OAAAX,EAAA,KAAC,OAAK,CAAA,SAAUuB,EAAac,CAAQ,EAAG,UAAYc,GAAUC,GAAcD,CAAK,EAC9E,SAAA,CAAC,CAAAzC,GACC1D,EAAAA,IAAAqG,GAAA,CAAK,SAA4F,8FAAA,CAAA,EAEnGrD,EAAA,KAAA,MAAA,CAAI,UAAW5C,EAAM,YACpB,SAAA,CAAC4C,EAAA,KAAA,MAAA,CAAI,UAAW5C,EAAM,OACpB,SAAA,CAAC4C,OAAAsD,GAAA,CACE,SAAA,CAAAC,EACEvG,EAAA,IAAA,QAAA,CAAM,OAAM,GAAC,SAAQ,GAAC,KAAK,UAAU,MAAO+D,CAAW,CAAA,EAEvDf,EAAAA,KAAAwD,EAAA,CACC,SAAA,CAAAxG,EAAA,IAACkD,EAAA,CACC,MAAM,UACN,YAAa,gCAAgCqD,EAAgB,oCAAsC,EAAE,EAAA,CACvG,EACAvG,EAAA,IAACyG,EAAA,CACC,QAASlD,EACT,MAAOkB,EAAM,SAAS,EACtB,cAAgBvE,GAAUwE,EAAS,UAAWxE,CAAK,CAAA,CAAA,CACrD,EACF,EAEDwD,EACC1D,EAAAA,IAAC,QAAM,CAAA,KAAK,SAAS,MAAOyE,EAAM,MAAM,CAAG,CAAA,EAE1CzB,EAAA,KAAAwD,EAAA,CACC,SAAA,CAAAxG,EAAA,IAACkD,EAAA,CAAY,MAAM,cAAc,YAAY,8CAA8C,EAC3FlD,EAAA,IAACyG,EAAA,CACC,QAASjD,EACT,MAAOiB,EAAM,MAAM,EACnB,cAAgBvE,GAAUwE,EAAS,OAAQxE,EAAO,CAAE,YAAa,EAAM,CAAA,CAAA,CAAA,CACzE,EACF,EAGDuE,EAAM,MAAM,IAAMO,EAAW,UAE1BhC,OAAAI,EAAAA,SAAA,CAAA,SAAA,CAACJ,OAAAwD,EAAA,CACC,SAAA,CAAAxG,EAAA,IAACkD,EAAA,CACC,MAAM,eACN,YAAY,6DACZ,OAAQqC,EAAAV,EAA4C,QAA5C,YAAAU,EAAmD,OAAA,CAC7D,EACAvF,EAAA,IAAC0G,GAAA,CACC,aAAcvC,EAAe,QAC5B,GAAGS,EAAS,QAAS,CACpB,SAAU,2CACV,QAAS,CACP,MAAOnF,GACP,QAAS,gEAAA,CAEZ,CAAA,CAAA,CAAA,CACH,EACF,EACCO,EAAA,IAAAmB,GAAA,CAAoB,QAAS6C,EAAiB,SAAUE,CAAkB,CAAA,CAAA,EAC7E,EAGFlB,OAACwD,EAAA,CACC,SAAA,CAAAxG,EAAA,IAACkD,EAAA,CAAY,MAAM,kBAAkB,YAAY,sCAAsC,EACvFlD,EAAA,IAACqD,EAAA,CACC,KAAK,QACL,KAAK,UACL,cAAY,UACZ,QAASoB,EAAM,SAAS,EACxB,gBAAkBkC,GAAYjC,EAAS,UAAWiC,EAAS,CAAE,YAAa,GAAM,EAChF,SAAUlC,EAAM,YAAY,CAAA,CAAA,CAC9B,EACF,EACCA,EAAM,MAAM,IAAMO,EAAW,UAC3BhC,OAAAwD,EAAA,CACC,SAAA,CAAAxG,EAAA,IAACkD,EAAA,CACC,MAAM,qBACN,YAAY,iEAAA,CACd,EACAlD,EAAA,IAACqD,EAAA,CACC,KAAK,QACL,KAAK,aACL,cAAY,aACZ,QAASoB,EAAM,YAAY,EAC3B,gBAAkBkC,GAAY,CACxBA,GACFjC,EAAS,UAAWiC,EAAS,CAAE,YAAa,GAAM,EAEpDjC,EAAS,aAAciC,EAAS,CAAE,YAAa,GAAM,CAAA,CACvD,CAAA,CACF,EACF,EAEF3D,OAACwD,EAAA,CACC,SAAA,CAAAxG,EAAA,IAACkD,EAAA,CAAY,MAAM,eAAe,YAAY,8CAA8C,EAC5FlD,EAAA,IAACqD,EAAA,CACC,KAAK,QACL,KAAK,eACL,cAAY,eACZ,QAASoB,EAAM,cAAc,EAC7B,gBAAkBkC,GAAYjC,EAAS,eAAgBiC,EAAS,CAAE,YAAa,EAAM,CAAA,CAAA,CAAA,CACvF,CACF,CAAA,CAAA,EACF,QACCC,GAAA,CAAa,UAAApB,EAAAX,EAAO,OAAP,YAAAW,EAAa,QAAQ,EACnCxF,EAAAA,IAAC6G,GAAA,CAAqB,MAAM,MAAM,UAAWzG,EAAM,IACjD,SAACJ,MAAA8G,GAAA,CAAO,KAAK,SAAS,QAASZ,EAAY,UAAY,SAAU,QAASvC,IAAc,UACrF,SAAAuC,EAAY,oBAAsB,2BACrC,CAAA,CACF,CAAA,CAAA,EACF,SACCa,GAAA,CAAc,UAAW3G,EAAM,OAC9B,SAAA,CAACJ,EAAAA,IAAAmD,EAAA,CAAkB,SAAe,iBAAA,CAAA,EAClCnD,MAACgH,IAAO,KAAM,IAAK,MAAOnD,EAAK,UAAWzD,EAAM,OAAQ,QACvD,MAAI,CAAA,UAAWA,EAAM,aAAc,cAAY,YAC7C,SACHyD,EAAA,EACC7D,EAAA,IAAAiH,GAAA,CAAQ,UAAWpD,EAAK,SAAS,WAAA,CAAA,CAAA,CACpC,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAEJ,CC9QwB,SAAAqD,GAAuB,CAAE,WAAAC,GAA2C,CAC1F,KAAM,CAAE,KAAMC,CAAS,EAAIC,GAAQ,EAC7B,CAAE,KAAMC,GAAkBC,GAAc,CAAE,KAAMJ,IAAe,OAAW,EAQ1E5D,EAAc9B,EAAAA,QAAQ,IACnB2F,EAAS,kBAAkB,IAAKI,IAAS,CAC9C,MAAO,UAAUA,EAAI,OAAO,IAAIJ,EAAS,UAAU,GACnD,MAAO,GAAGI,EAAI,IAAI,MAAMA,EAAI,OAAO,EAAA,EACnC,EACD,CAACJ,EAAS,kBAAmBA,EAAS,UAAU,CAAC,EAE9C5D,EAAc/B,EAAAA,QAAQ,IACtB0F,EACK,CAAC,CAAE,MAAOA,EAAW,MAAO,MAAOA,EAAW,MAAO,EAEvD,CACL,CAAE,MAAOnC,EAAW,MAAO,MAAO,OAAQ,EAC1C,CAAE,MAAOA,EAAW,SAAU,MAAO,UAAW,EAChD,CAAE,MAAOA,EAAW,SAAU,MAAO,UAAW,EAChD,CAAE,MAAO,gBAAiB,MAAO,WAAY,EAC7C,GAAGsC,EAAc,IAAKlC,IAAY,CAChC,MAAO,UAAUA,EAAO,KAAK,GAC7B,MAAO,eAAeA,EAAO,KAAK,EAAA,EAClC,CACJ,EACC,CAAC+B,EAAYG,CAAa,CAAC,EAG5B,OAAAtH,EAAA,IAACsD,GAAA,CACC,YAAAC,EACA,YAAAC,EACA,QAAS8D,EACT,eAAgB,EAAQH,CAAU,CACpC,CAEJ,mFCjDA,SAAwBM,IAAgB,CAChC,KAAA,CAAE,KAAAnG,CAAK,EAAIoG,GAAe,EAEhC,MAAI,CAACpG,EAAK,OAAS,CAACA,EAAK,YAChB,YAIN,MACC,CAAA,SAAA,CAAAtB,MAAC,MAAI,CAAA,UAAWI,EAAM,MAAQ,WAAK,MAAM,QACxC,MAAI,CAAA,UAAWA,EAAM,YAAc,WAAK,WAAY,CAAA,CAAA,EACvD,CAEJ,2ICLO,SAASuH,GAAgB,CAAE,YAAAC,EAAa,SAAAC,GAAqD,CAC5F,KAAA,CAAE,SAAAC,CAAS,EAAIC,GAAY,EACjC,OACG/H,EAAAA,IAAA,MAAA,CAAI,UAAWG,EAAG,CAACC,EAAM,SAAU,CAAC0H,GAAY1H,EAAM,SAAS,CAAC,EAC/D,gBAAC4H,GACC,CAAA,SAAA,CAAAhI,EAAA,IAAC,MAAI,CAAA,UAAWI,EAAM,IAAM,SAAYwH,EAAA,EACvC5H,EAAA,IAAA,MAAA,CAAI,UAAWI,EAAM,KAAO,SAAAyH,CAAS,CAAA,CAAA,CAAA,CACxC,CACF,CAAA,CAEJ"}
@@ -1 +0,0 @@
1
- ._blink_1cc8f_1{animation:_blink_1cc8f_1 1s step-start infinite}@keyframes _blink_1cc8f_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1cc8f_13{transform:rotate(45deg)}._radioGroup_1cc8f_17{display:flex;color:#4c4c4c;font-size:calc(1rem - 2px);color:#f6f6f6}._radioGroup_1cc8f_17[data-disabled] ._item_1cc8f_23{opacity:.4;cursor:not-allowed}._horizontal_1cc8f_28{align-items:center;flex-direction:row;gap:1rem;width:100%}._vertical_1cc8f_35{align-items:start;flex-direction:column}._item_1cc8f_23{display:flex;align-items:center;gap:.5rem;height:2rem}._item_1cc8f_23:has([data-checked]){color:#f6f6f6}._radio_1cc8f_17{box-sizing:border-box;display:flex;width:16px;height:16px;align-items:center;justify-content:center;border-radius:100%;outline:0;border:none}._radio_1cc8f_17[data-unchecked]{border:1px solid #262626;background-color:#262626}._radio_1cc8f_17[data-checked]{background-color:#2b5abc}._radio_1cc8f_17:focus-visible{outline:2px solid #578AF4;outline-offset:2px}._indicator_1cc8f_73{display:grid;place-content:center}._indicator_1cc8f_73[data-unchecked]{display:none}._indicator_1cc8f_73:before{content:"";border-radius:100%;width:6px;height:6px;aspect-ratio:1;background-color:#f6f6f6}._blink_1wch9_1{animation:_blink_1wch9_1 1s step-start infinite}@keyframes _blink_1wch9_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1wch9_13{transform:rotate(45deg)}._twoCols_1wch9_17{display:grid;grid-template-columns:max-content max-content;column-gap:3rem}._grid_1wch9_23{display:grid;grid-template-columns:repeat(3,max-content);column-gap:1rem;row-gap:.5rem;align-content:start}._inline_1wch9_31{display:flex;gap:.5rem}._blink_kmiy6_1{animation:_blink_kmiy6_1 1s step-start infinite}@keyframes _blink_kmiy6_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_kmiy6_13{transform:rotate(45deg)}._qrCode_kmiy6_17{padding:.5rem;background:#f6f6f6;border-radius:3px}._column_kmiy6_23{margin-top:1rem;display:flex;flex-direction:column;gap:.5rem;color:#b1b1b1;-webkit-user-select:text;user-select:text}._copiableLink_kmiy6_32{-webkit-user-select:text;user-select:text;color:#f6f6f6;white-space:nowrap;overflow-x:auto}._shareInline_kmiy6_39{display:grid;grid-template-columns:1fr 172px;gap:1rem}._end_kmiy6_45{padding-right:2rem}._blink_g70eo_1{animation:_blink_g70eo_1 1s step-start infinite}@keyframes _blink_g70eo_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_g70eo_13{transform:rotate(45deg)}._title_g70eo_17{font-size:1.5rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._description_g70eo_24{font-size:1rem;color:#b1b1b1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._blink_zh5tn_1{animation:_blink_zh5tn_1 1s step-start infinite}@keyframes _blink_zh5tn_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_zh5tn_13{transform:rotate(45deg)}._overview_zh5tn_17{grid-area:overview;font-size:calc(1rem - 2px);display:flex;overflow:hidden}._isOffline_zh5tn_24 ._info_zh5tn_24{opacity:.4}._isOffline_zh5tn_24:after{content:"Disconnected";position:absolute;padding-inline:.5rem;bottom:.5rem;right:.5rem;background-color:#d20300;border-radius:2px;font-size:calc(1rem - 2px);z-index:1000}._nav_zh5tn_39{display:flex;align-items:center;gap:.5rem}._info_zh5tn_24{flex:1;padding-left:1rem;display:flex;align-items:center;justify-content:space-between}
@@ -1,2 +0,0 @@
1
- import{j as e,ac as f}from"./vendor-CCiSQ9k9.js";import{u as m,L as u,f as j,O as o}from"./index-BQEUaoAf.js";import{E as l}from"./EmptyPage-Dcbg6rmF.js";import{V as x}from"./ViewLogo-_3Z1hIHi.js";import{V as a}from"./ViewParamsEditor-Bca1TIDW.js";import{u as _}from"./useWindowTitle-DqdFTWns.js";import{u as h}from"./useProjectData-C1hVamxc.js";import"./Empty-gWT_HMeu.js";import"./Select-CedN80WS.js";(function(){try{var s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new s.Error().stack;r&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[r]="ce864784-26a5-4afd-b831-7fdb93549169",s._sentryDebugIdIdentifier="sentry-dbid-ce864784-26a5-4afd-b831-7fdb93549169")}catch{}})();function g(){const s=m(t=>t.mirror),{data:r,status:n}=h();return{data:{projectData:r,isMirrored:s},status:n}}function V(){const{data:s,status:r}=g();return _("Project info"),r==="pending"?e.jsx(u,{}):r==="error"?e.jsx(l,{text:"There was an error fetching data, please refresh the page."}):e.jsx(v,{...s})}function v({projectData:s,isMirrored:r}){const{getLocalizedString:n}=j();return!s||Object.values(s).every(i=>!i||i&&Array.isArray(i)&&i.length===0)?e.jsxs(e.Fragment,{children:[e.jsx(a,{target:o.ProjectInfo,viewOptions:[]}),e.jsx(l,{text:n("common.no_data")}),";"]}):e.jsxs("div",{className:`project ${r?"mirror":""}`,"data-testid":"project-view",children:[e.jsx(a,{target:o.ProjectInfo,viewOptions:[]}),s.logo&&e.jsx(x,{name:s.logo,className:"logo"}),e.jsxs("div",{className:"info",children:[s.title&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.title")}),e.jsx("div",{className:"info__value",children:s.title})]}),s.description&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.description")}),e.jsx("div",{className:"info__value",children:s.description})]}),s.info&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.info")}),e.jsx("div",{className:"info__value",children:s.info})]}),s.url&&e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:n("project.url")}),e.jsxs("a",{href:s.url,target:"_blank",rel:"noreferrer",className:"info__value link",children:[s.url," ",e.jsx(f,{style:{fontSize:"1em"}})]})]}),s.custom.map((i,d)=>{const c=!!i.url;return e.jsxs("div",{className:"info__custom",children:[c&&e.jsx("div",{className:"info__image-container",children:e.jsx("img",{className:"info__image",src:i.url,loading:"lazy"})}),e.jsxs("div",{children:[e.jsx("div",{className:"info__label",children:i.title}),e.jsx("div",{className:"info__value",children:i.value})]})]},`${i.title}-${d}`)})]})]})}export{V as default};
2
- //# sourceMappingURL=ProjectInfo-z4k3cipS.js.map
@@ -1,2 +0,0 @@
1
- import{h as l,j as t,A as f}from"./vendor-CCiSQ9k9.js";import{i as h,af as p,ai as b,bN as g,S as x}from"./index-BQEUaoAf.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]="85a7d0ce-b73e-4216-b0cc-3068e25ab5bf",e._sentryDebugIdIdentifier="sentry-dbid-85a7d0ce-b73e-4216-b0cc-3068e25ab5bf")}catch{}})();const y="_container_o8th0_17",_="_pin_o8th0_27",m="_pinFailed_o8th0_51",d={container:y,pin:_,pinFailed:m};function v({permission:e,handleValidation:n}){const[s,o]=l.useState(""),[i,r]=l.useState(!1),u=()=>{n(s)||(r(!0),o(""))},c=a=>{o(a),i&&r(!1)};return t.jsxs("div",{className:d.container,children:[`Ontime ${e}`,t.jsxs("form",{onSubmit:a=>{a.preventDefault(),u()},className:h([d.pin,i&&d.pinFailed]),children:[t.jsx(p,{type:"password",maxLength:4,height:"large",value:s,onChange:a=>c(a.target.value)}),t.jsx(b,{type:"submit",variant:"primary","aria-label":"Enter",children:t.jsx(f,{})})]})]})}function w({permission:e,children:n}){const{editorAuth:s,operatorAuth:o,validate:i}=l.useContext(g),r=l.useCallback(c=>i(c,e),[e,i]);return x||(e==="editor"?s:e==="operator"?o:!1)?t.jsx(t.Fragment,{children:n}):t.jsx(v,{permission:e,handleValidation:r})}export{w as P};
2
- //# sourceMappingURL=ProtectRoute-CrcWfOlG.js.map
@@ -1,2 +0,0 @@
1
- import{y as et,h as m,j as e,f as ue,aw as _e,ax as tt,ay as ge,az as nt,aA as st,aB as ot,aC as it,aD as at,aE as rt,aF as lt,aG as K,aH as ct,aI as ut,aq as de,aJ as ke,aK as Ce,T as ye,x as dt,aL as mt,ah as ft,am as pt,C as Te,aM as B,aN as Ie,aO as ht,aP as xt,aQ as je,aR as we,aS as Me,m as gt,aT as Re,aU as Ct,aV as yt,aW as jt,aX as bt,I as vt}from"./vendor-CCiSQ9k9.js";import{P as St}from"./ProtectRoute-CrcWfOlG.js";import{c as Et,a_ as _t,a$ as me,af as De,y as F,B as N,i as ee,g as L,b0 as k,l as be,b1 as kt,aA as H,b2 as re,b3 as le,ai as te,w as Tt,al as It,au as wt,O as Mt,P as Ne,b4 as X,o as Rt,b5 as Dt,b6 as Nt,aZ as zt}from"./index-BQEUaoAf.js";import{C as $,u as Ot}from"./useWindowTitle-DqdFTWns.js";import{T as ze,O as Oe,S as Wt,M as Pt,C as $t}from"./TimeElements-CALNfv6u.js";import{O as We,T as Bt,u as z,G as Ft}from"./OverviewWrapper-BveJ6GjK.js";import{M as Pe,P as Lt}from"./Modal-C2sFA0zf.js";import{h as Ht,i as U,k as $e,j as Be,q as fe,S as A,u as At}from"./useRundown-BfpjcCEJ.js";import{s as ie,E as Kt,M as Ut,G as Gt,u as Fe,T as Le,A as Vt}from"./MilestoneEditor-Bge8xLrV.js";import{M as qt}from"./MultiPartProgressBar-D3jJZjb5.js";import{E as He}from"./EmptyPage-Dcbg6rmF.js";import{u as Jt}from"./useCustomFields-DqCYz8Kt.js";import{T as Ae}from"./validateEvent-P9sf7C10.js";import{D as Y}from"./DelayIndicator-vT7n8ypf.js";import{p as Ke}from"./parseUserTime-BeTKj08M.js";import{m as Zt,u as Ue}from"./dateConfig-DRQGMWDF.js";import{S as Ge,L as D}from"./EditorUtils-Da5ALK1P.js";import{P as Ve}from"./useProjectData-C1hVamxc.js";import"./Tooltip-D9XRnwOW.js";import"./offset-DJAHqjFW.js";import"./playbackstate-B_khF6xU.js";import"./Select-CedN80WS.js";import"./TimeInput-Dg1naiy3.js";import"./editorSettings-BU0pTMSY.js";import"./getProgress-Cw79NL_O.js";import"./Empty-gWT_HMeu.js";import"./rundownUtils-BZHazkXR.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]="c38bd860-390b-4af3-bfae-9a5f2555ed27",t._sentryDebugIdIdentifier="sentry-dbid-c38bd860-390b-4af3-bfae-9a5f2555ed27")}catch{}})();function Qt(){const{width:t}=et();return m.useMemo(()=>t<800,[t])}const Xt=m.memo(Yt);function Yt({children:t}){return Qt()?e.jsx(en,{children:t}):e.jsx(tn,{children:t})}function en({children:t}){return e.jsxs(We,{navElements:t,children:[e.jsx(ze,{}),e.jsx(Oe,{})]})}function tn({children:t}){return e.jsxs(We,{navElements:t,children:[e.jsx(Bt,{}),e.jsx(Wt,{}),e.jsx(ze,{}),e.jsx(Oe,{}),e.jsx(Pt,{}),e.jsx($t,{})]})}function nn({entryId:t}){const{data:n}=Ht(),[o,s]=m.useState(null);return m.useEffect(()=>{if(n.order.length===0){s(null);return}const i=n.entries[t];s(i||null)},[t,n.order,n.entries]),U(o)?e.jsx("div",{className:ie.entryEditor,"data-testid":"editor-container",children:e.jsx(Kt,{event:o})}):$e(o)?e.jsx("div",{className:ie.inModal,"data-testid":"editor-container",children:e.jsx(Ut,{milestone:o})}):Be(o)?e.jsx("div",{className:ie.inModal,"data-testid":"editor-container",children:e.jsx(Gt,{group:o})}):null}const ce=ue(t=>({selectedEntryId:null,setEditableEntry:n=>t({selectedEntryId:n}),clearSelection:()=>t({selectedEntryId:null})})),sn=m.memo(on);function on(){const t=ce(o=>o.selectedEntryId),n=ce(o=>o.clearSelection);return t===null?null:e.jsx(Pe,{isOpen:!0,onClose:n,title:"Edit entry",showCloseButton:!0,bodyElements:e.jsx(nn,{entryId:t})})}const an="_progressOverride_av4z0_17",rn={progressOverride:an};function ln(){const{data:t}=Et(),{current:n,duration:o,timeWarning:s,timeDanger:i}=_t();return e.jsx(qt,{now:n,complete:o,normalColor:t.normalColor,warning:s,warningColor:t.warningColor,danger:i,dangerColor:t.dangerColor,className:rn.progressOverride,ignoreCssOverride:!0})}function cn(t,n){let o;return(...s)=>{o&&clearTimeout(o),o=setTimeout(()=>{o=null,t(...s)},n)}}const qe=me("cuesheet-sizes"),un=me("cuesheet-hidden"),dn=me("cuesheet-order"),mn=cn(t=>{localStorage.setItem(qe,JSON.stringify(t))},500);function fn(){const[t,n]=m.useState(()=>{try{const s=localStorage.getItem(qe);return s?JSON.parse(s):{}}catch{return{}}});m.useEffect(()=>{mn(t)},[t]);const o=m.useCallback(s=>{n(s)},[]);return{columnSizing:t,setColumnSizing:o}}function Je(t){const[n,o]=_e({key:dn,defaultValue:t.map(i=>i.id)});m.useEffect(()=>{const i=t.map(a=>a.id);i.some(a=>!n.includes(a))&&o(i)},[n,t,o]);const s=m.useCallback(()=>{o(t.map(i=>i.id))},[t,o]);return{columnOrder:n,saveColumnOrder:o,resetColumnOrder:s}}function pn(){const[t,n]=_e({key:un,defaultValue:{}});return{columnVisibility:t,setColumnVisibility:n}}function hn({columns:t,children:n}){const{columnOrder:o,saveColumnOrder:s}=Je(t),i=tt(ge(it,{activationConstraint:{delay:100,tolerance:50}}),ge(ot,{activationConstraint:{delay:100,tolerance:50}})),a=c=>{const{delta:l,active:d,over:r}=c;if(l.y>200||(r==null?void 0:r.id)==null)return;const u=o.indexOf(d.id),p=o.indexOf(r.id);if(p===-1)return;const x=[...o],h=x.splice(u,1);x.splice(p,0,h[0]),s(x)};return e.jsx(nt,{sensors:i,collisionDetection:st,onDragEnd:a,children:n})}const Ze=m.forwardRef(({initialValue:t,allowSubmitSameValue:n,handleUpdate:o,handleCancelUpdate:s},i)=>{const a=m.useRef(null),c=m.useCallback(p=>o(p),[o]),{value:l,onChange:d,onBlur:r,onKeyDown:u}=Fe(t,c,a,{allowSubmitSameValue:n,allowKeyboardNavigation:!0,submitOnEnter:!0,submitOnCtrlEnter:!0,onCancelUpdate:s});return m.useImperativeHandle(i,()=>({focus(){var p;(p=a.current)==null||p.focus()},select(){var p;(p=a.current)==null||p.select()},focusParentElement(){var p,x;(x=(p=a.current)==null?void 0:p.parentElement)==null||x.focus()}}),[a]),e.jsx(De,{ref:a,variant:"ghosted",fluid:!0,value:l,onChange:d,onBlur:r,onKeyDown:u})});Ze.displayName="SingleLineCell";const pe=m.memo(Ze),xn=m.memo(gn);function gn({initialValue:t,lockedValue:n,delayed:o,onSubmit:s,children:i}){const[a,c]=m.useState(!1),[l,d]=m.useState(t),r=m.useRef(null),u=m.useRef(null);m.useEffect(()=>{a&&r.current&&(r.current.focus(),r.current.select())},[a]),m.useEffect(()=>{a||d(t)},[t,a]);const p=()=>c(!0),x=()=>{c(!1),setTimeout(()=>{var f;return(f=u.current)==null?void 0:f.focusParentElement()})},h=m.useCallback(f=>{var S,w,j;if(c(!1),f===""){s(f),(S=r.current)==null||S.focusParentElement();return}if(f.startsWith("p")||f.startsWith("+")){s(f),(w=r.current)==null||w.focusParentElement();return}const g=Ke(f);if(g<0||isNaN(g)){d(t),setTimeout(()=>{var _;return(_=u.current)==null?void 0:_.focusParentElement()});return}if(g===t&&n){(j=r.current)==null||j.focusParentElement();return}s(f),d(Number(f)),setTimeout(()=>{var _;return(_=u.current)==null?void 0:_.focusParentElement()})},[t,n,s]),E=F(l);return a?e.jsx(pe,{ref:r,initialValue:E,allowSubmitSameValue:!n,handleUpdate:h,handleCancelUpdate:x}):e.jsx(Le,{onClick:p,onFocus:p,muted:!n,offset:o?"over":void 0,ref:u,children:i})}const Cn="_imageInput_1dtk5_17",yn="_imageCell_1dtk5_24",jn="_overlay_1dtk5_28",bn="_image_1dtk5_17",J={imageInput:Cn,imageCell:yn,overlay:jn,image:bn},vn=m.memo(Sn);function Sn({initialValue:t,readOnly:n,updateValue:o}){const s=a=>{a!==t&&(a!==""&&!a.startsWith("http")||o(a))},i=()=>{t&&window.open(t,"_blank","noopener,noreferrer")};return t?e.jsxs("div",{className:J.imageCell,children:[!n&&e.jsxs("div",{className:J.overlay,children:[e.jsx(N,{onClick:i,children:"Preview"}),e.jsx(N,{variant:"subtle-destructive",onClick:()=>s(""),children:"Delete"})]}),!!t&&e.jsx("img",{loading:"lazy",src:t,className:J.image})]}):e.jsx(De,{variant:"ghosted",className:J.imageInput,fluid:!0,readOnly:n,disabled:n,placeholder:"Paste image URL",onBlur:a=>s(a.currentTarget.value),onKeyDown:a=>{a.key==="Enter"&&s(a.currentTarget.value)},defaultValue:t})}const En="_flag_qc1zd_17",_n={flag:En};function kn(){return e.jsx("div",{className:_n.flag,children:e.jsx(at,{})})}const Tn="_ghostedText_18xqt_17",In="_multiline_18xqt_24",ve={ghostedText:Tn,multiline:In};function he({children:t,multiline:n}){return e.jsx("div",{className:`${ve.ghostedText} ${n?ve.multiline:""}`,children:t})}const Qe=m.memo(wn);function wn({initialValue:t,handleUpdate:n}){const o=m.useRef(null),s=m.useCallback(d=>n(d),[n]),{value:i,onChange:a,onBlur:c,onKeyDown:l}=Fe(t,s,o,{submitOnCtrlEnter:!0,allowKeyboardNavigation:!0});return e.jsx(Vt,{inputref:o,variant:"ghosted",fluid:!0,rows:1,value:i,onChange:a,onBlur:c,onKeyDown:l,spellCheck:!1})}const Mn="_muted_1u021_17",Rn="_numeric_1u021_22",Se={muted:Mn,numeric:Rn};function P({numeric:t,children:n}){return e.jsx("span",{className:ee([Se.muted,t&&Se.numeric]),children:n})}const Xe=m.memo(Dn);function Dn({initialValue:t,lockedValue:n,delayed:o,onSubmit:s,children:i}){const[a,c]=m.useState(!1),[l,d]=m.useState(t),r=m.useRef(null),u=m.useRef(null);m.useEffect(()=>{a&&r.current&&(r.current.focus(),r.current.select())},[a]),m.useEffect(()=>{a||d(t)},[t,a]);const p=()=>c(!0),x=()=>{c(!1),setTimeout(()=>{var f;return(f=u.current)==null?void 0:f.focusParentElement()})},h=m.useCallback(f=>{var S,w,j;if(c(!1),f===""){s(f),(S=r.current)==null||S.focusParentElement();return}if(f.startsWith("p")||f.startsWith("+")){s(f),(w=r.current)==null||w.focusParentElement();return}const g=Ke(f);if(g<0||isNaN(g)){d(t),setTimeout(()=>{var _;return(_=u.current)==null?void 0:_.focusParentElement()});return}if(g===t&&n){(j=r.current)==null||j.focusParentElement();return}s(f),d(Number(f)),setTimeout(()=>{var _;return(_=u.current)==null?void 0:_.focusParentElement()})},[t,n,s]),E=L(l);return a?e.jsx(pe,{ref:r,initialValue:E,allowSubmitSameValue:!n,handleUpdate:h,handleCancelUpdate:x}):e.jsx(Le,{onClick:p,onFocus:p,muted:!n,offset:o?"over":void 0,ref:u,children:i})}function Nn({getValue:t,row:n,table:o,column:s}){var f;if(!o.options.meta)return null;const{showDelayedTimes:i,hideTableSeconds:a}=o.options.meta.options,c=a?{format12:"hh:mm a",format24:"HH:mm"}:void 0,l=n.original;if(!U(l))return e.jsx(P,{numeric:!0,children:L(t(),c)});const{handleUpdateTimer:d}=o.options.meta,r=g=>d(n.original.id,"timeStart",g),u=t(),p=!l.linkStart,x=i?u+l.delay:u,h=L(x,c);return((f=s.columnDef.meta)==null?void 0:f.canWrite)?e.jsxs(Xe,{initialValue:u,onSubmit:r,lockedValue:p,delayed:l.delay!==0,children:[h,e.jsx(Y,{delayValue:l.delay,tooltipPrefix:F(u)})]}):e.jsxs(P,{numeric:!0,children:[h,e.jsx(Y,{delayValue:l.delay,tooltipPrefix:F(u)})]})}function zn({getValue:t,row:n,table:o,column:s}){var f;if(!o.options.meta)return null;const{showDelayedTimes:i,hideTableSeconds:a}=o.options.meta.options,c=a?{format12:"hh:mm a",format24:"HH:mm"}:void 0,l=n.original;if(!U(l))return e.jsx(P,{numeric:!0,children:L(t(),c)});const{handleUpdateTimer:d}=o.options.meta,r=g=>d(n.original.id,"timeEnd",g),u=t(),p=l.timeStrategy===Ae.LockEnd,x=i?u+l.delay:u,h=L(x,c);return((f=s.columnDef.meta)==null?void 0:f.canWrite)?e.jsxs(Xe,{initialValue:u,onSubmit:r,lockedValue:p,delayed:l.delay!==0,children:[h,e.jsx(Y,{delayValue:l.delay,tooltipPrefix:F(u)})]}):e.jsxs(P,{numeric:!0,children:[h,e.jsx(Y,{delayValue:l.delay,tooltipPrefix:F(u)})]})}function On({getValue:t,row:n,table:o,column:s}){var x;if(!o.options.meta)return null;const{hideTableSeconds:i}=o.options.meta.options,a=n.original;if(!U(a))return e.jsx(P,{numeric:!0,children:be(t(),i)});const{handleUpdateTimer:c}=o.options.meta,l=h=>c(n.original.id,"duration",h),d=t(),r=a.timeStrategy===Ae.LockDuration,u=be(d,i);return((x=s.columnDef.meta)==null?void 0:x.canWrite)?e.jsx(xn,{initialValue:d,onSubmit:l,lockedValue:r,children:u}):e.jsx(P,{numeric:!0,children:u})}function Wn({row:t,column:n,table:o}){var c;const s=m.useCallback(l=>{var d;(d=o.options.meta)==null||d.handleUpdate(t.index,n.id,l,!1)},[n.id,t.index,o.options.meta]),i=t.original[n.id];return typeof i!="string"?null:((c=n.columnDef.meta)==null?void 0:c.canWrite)?e.jsx(Qe,{initialValue:i,handleUpdate:s}):e.jsx(he,{multiline:!0,children:i})}function Pn({row:t,column:n,table:o}){var l;const s=m.useCallback(d=>{var r;(r=o.options.meta)==null||r.handleUpdate(t.index,n.id,d,!0)},[n.id,t.index,o.options.meta]),i=t.original;if(fe(i))return null;const a=(l=n.columnDef.meta)==null?void 0:l.canWrite,c=i.custom[n.id];return e.jsx(vn,{initialValue:c,updateValue:s,readOnly:!a})}function Ee({row:t,column:n,table:o}){var c;const s=m.useCallback(l=>{var d;(d=o.options.meta)==null||d.handleUpdate(t.index,n.id,l,!1)},[n.id,t.index,o.options.meta]),i=t.original[n.id];return typeof i!="string"?null:((c=n.columnDef.meta)==null?void 0:c.canWrite)?e.jsx(pe,{initialValue:i,handleUpdate:s}):e.jsx(he,{children:i})}function $n({row:t}){const n=t.original;return!U(n)||!n.flag?null:e.jsx(kn,{})}function Bn({row:t,column:n,table:o}){var l;const s=m.useCallback(d=>{var r;(r=o.options.meta)==null||r.handleUpdate(t.index,n.id,d,!0)},[n.id,t.index,o.options.meta]),i=t.original;if(fe(i))return null;const a=i.custom[n.id]??"";return((l=n.columnDef.meta)==null?void 0:l.canWrite)?e.jsx(Qe,{initialValue:a,handleUpdate:s}):e.jsx(he,{multiline:!0,children:a})}function Fn(t,n,o){var x,h,E,f;const s=[],i=n===k.Edit,a=o?((x=o.options)==null?void 0:x.read)==="full":!0,c=o?((h=o.options)==null?void 0:h.write)==="full":!0,l=(E=o==null?void 0:o.options)!=null&&E.write?new Set(o.options.write.split(",")):new Set,d=(f=o==null?void 0:o.options)!=null&&f.read?new Set(o.options.read.split(",")):new Set,r=g=>a||d.has(g),u=g=>i&&(c||l.has(g));r("flag")&&s.push({accessorKey:"flag",id:"flag",header:"Flag",cell:$n,size:45,minSize:45,meta:{canWrite:u("flag")}}),r("cue")&&s.push({accessorKey:"cue",id:"cue",header:"Cue",cell:Ee,size:75,minSize:40,meta:{canWrite:u("cue")}}),r("timeStart")&&s.push({accessorKey:"timeStart",id:"timeStart",header:"Start",cell:Nn,size:75,minSize:75,meta:{canWrite:u("timeStart")}}),r("timeEnd")&&s.push({accessorKey:"timeEnd",id:"timeEnd",header:"End",cell:zn,size:75,minSize:75,meta:{canWrite:u("timeEnd")}}),r("duration")&&s.push({accessorKey:"duration",id:"duration",header:"Duration",cell:On,size:75,minSize:75,meta:{canWrite:u("duration")}}),r("title")&&s.push({accessorKey:"title",id:"title",header:"Title",cell:Ee,size:250,minSize:75,meta:{canWrite:u("title")}}),r("note")&&s.push({accessorKey:"note",id:"note",header:"Note",cell:Wn,size:250,minSize:75,meta:{canWrite:u("note")}});const p=Object.keys(t);for(let g=0;g<p.length;g++){const S=p[g],w=`custom-${S}`;r(w)&&s.push({accessorKey:S,id:S,header:t[S].label,cell:t[S].type==="text"?Bn:Pn,size:250,minSize:75,meta:{colour:t[S].colour,canWrite:u(w)}})}return s}const Ln="_emptyContainer_1dp7m_17",Hn="_emptyCell_1dp7m_21",An="_empty_1dp7m_17",Kn="_text_1dp7m_30",Z={emptyContainer:Ln,emptyCell:Hn,empty:An,text:Kn};function Un({text:t}){return e.jsx("tbody",{className:Z.emptyContainer,children:e.jsx("tr",{children:e.jsxs("td",{colSpan:99,className:Z.emptyCell,children:[e.jsx(kt,{className:Z.empty}),t&&e.jsx("span",{className:Z.text,children:t})]})})})}const Gn="_cuesheet_1f3ag_17",Vn="_resizer_1f3ag_37",qn="_actionColumn_1f3ag_53",Jn="_indexColumn_1f3ag_62",Zn="_tableHeader_1f3ag_73",O={cuesheet:Gn,resizer:Vn,actionColumn:qn,indexColumn:Jn,tableHeader:Zn};function Qn({columnId:t,colSpan:n,injectedStyles:o,children:s,draggable:i}){const{attributes:a,listeners:c,setNodeRef:l,transform:d,transition:r,isDragging:u}=rt({id:t}),p={...o,zIndex:u?2:"inherit",transform:lt.Translate.toString(d),transition:r};return e.jsxs("th",{ref:l,style:p,colSpan:n,tabIndex:-1,children:[e.jsx("div",{...a,...c,children:s}),i]})}function Xn({colSpan:t,injectedStyles:n,children:o,draggable:s}){return e.jsxs("th",{style:n,colSpan:t,tabIndex:-1,children:[e.jsx("div",{children:o}),s]})}function Ye({header:t}){return e.jsx("div",{onDoubleClick:()=>t.column.resetSize(),onMouseDown:t.getResizeHandler(),onTouchStart:t.getResizeHandler(),className:O.resizer})}function Yn({headerGroup:t,cuesheetMode:n}){const o=z(s=>s.hideIndexColumn);return e.jsxs("tr",{children:[n===k.Edit&&e.jsx("th",{className:O.actionColumn,tabIndex:-1}),!o&&e.jsx("th",{className:O.indexColumn,tabIndex:-1,children:"#"}),e.jsx(ct,{items:t.headers,strategy:ut,children:t.headers.map(s=>{var l,d;const i=(l=s.column.columnDef.meta)==null?void 0:l.colour,c={opacity:((d=s.column.columnDef.meta)==null?void 0:d.canWrite)?1:.6};if(i){const r=H(i);c.backgroundColor=r.backgroundColor,c.color=r.color}return e.jsx(Qn,{columnId:s.column.id,colSpan:s.colSpan,injectedStyles:{width:`calc(var(--header-${s==null?void 0:s.id}-size) * 1px)`,...c},draggable:e.jsx(Ye,{header:s}),children:s.isPlaceholder?null:K(s.column.columnDef.header,s.getContext())},s.column.columnDef.id)})},t.id)]},t.id)}function es({headerGroup:t,cuesheetMode:n}){const o=z(s=>s.hideIndexColumn);return e.jsxs("tr",{children:[n===k.Edit&&e.jsx("th",{className:O.actionColumn,tabIndex:-1}),!o&&e.jsx("th",{className:O.indexColumn,tabIndex:-1,children:"#"}),t.headers.map(s=>{var l,d;const i=(l=s.column.columnDef.meta)==null?void 0:l.colour,c={opacity:((d=s.column.columnDef.meta)==null?void 0:d.canWrite)?1:.6};if(i){const r=H(i);c.backgroundColor=r.backgroundColor,c.color=r.color}return e.jsx(Xn,{columnId:s.column.id,colSpan:s.colSpan,injectedStyles:{width:`calc(var(--header-${s==null?void 0:s.id}-size) * 1px)`,...c},draggable:e.jsx(Ye,{header:s}),children:s.isPlaceholder?null:K(s.column.columnDef.header,s.getContext())},s.column.columnDef.id)})]},t.id)}const ts="_delayRow_lk49a_106",ns={delayRow:ts};function ss({duration:t,injectedStyles:n,...o}){if(z(a=>a.hideDelays)||t===0)return null;const i=Zt(t,"expanded");return e.jsx("tr",{className:ns.delayRow,"data-testid":"cuesheet-delay",style:n,...o,children:e.jsx("td",{tabIndex:0,children:i})})}const os=m.memo(ss),ne=ue(t=>({isOpen:!1,entryId:null,entryType:null,entryIndex:null,parentId:null,position:{x:0,y:0},flag:null,openMenu:(n,o,s,i,a,c)=>t({isOpen:!0,position:n,entryId:o,entryType:s,entryIndex:i,parentId:a,flag:c}),closeMenu:()=>t({isOpen:!1})})),is="_actionColumn_1npa7_53",as="_indexColumn_1npa7_62",rs="_eventRow_1npa7_106",ls="_firstAfterGroup_1npa7_116",cs="_skip_1npa7_119",W={actionColumn:is,indexColumn:as,eventRow:rs,firstAfterGroup:ls,skip:cs};function us({rowId:t,id:n,eventIndex:o,colour:s,isFirstAfterGroup:i,isLoaded:a,isPast:c,groupColour:l,flag:d,skip:r,parent:u,rowIndex:p,table:x,injectedStyles:h,...E}){var G;const{cuesheetMode:f,hideIndexColumn:g}=((G=x.options.meta)==null?void 0:G.options)??{cuesheetMode:k.Edit,hideIndexColumn:!1},S=ne(I=>I.openMenu),{color:w,backgroundColor:j}=H(s),_=re(w),se=le({..._,alpha:_.alpha*.8}),oe=m.useMemo(()=>{if(a)return"#087A27";if(s){const I=re(H(s).backgroundColor);if(I!==null)return le({...I,alpha:I.alpha*.25})}},[s,a]);return e.jsxs("tr",{id:t,className:ee([W.eventRow,r&&W.skip,i&&W.firstAfterGroup,u&&W.hasParent]),style:{...h,opacity:`${c?"0.2":"1"}`,"--user-bg":l??"transparent"},"data-testid":"cuesheet-event",...E,children:[f===k.Edit&&e.jsx("td",{className:W.actionColumn,tabIndex:-1,role:"cell",children:e.jsx(te,{"aria-label":"Options",variant:"ghosted-white",size:"small",onClick:I=>{const V=I.currentTarget.getBoundingClientRect(),C=8+V.y+V.height/2;S({x:V.x,y:C},n,A.Event,p,u,d)},children:e.jsx(de,{})})}),!g&&e.jsx("td",{className:W.indexColumn,style:{backgroundColor:j,color:se},tabIndex:-1,role:"cell",children:o}),x.getRow(t).getVisibleCells().map(I=>e.jsx("td",{style:{width:`calc(var(--col-${I.column.id}-size) * 1px)`,backgroundColor:oe},tabIndex:-1,role:"cell",children:K(I.column.columnDef.cell,I.getContext())},I.id))]})}const ds="_actionColumn_1p2se_53",ms="_indexColumn_1p2se_62",fs="_groupRow_1p2se_106",ae={actionColumn:ds,indexColumn:ms,groupRow:fs};function ps({groupId:t,colour:n,rowId:o,rowIndex:s,table:i,injectedStyles:a,...c}){var u;const{cuesheetMode:l,hideIndexColumn:d}=((u=i.options.meta)==null?void 0:u.options)??{cuesheetMode:k.Edit,hideIndexColumn:!1},r=ne(p=>p.openMenu);return e.jsxs("tr",{className:ae.groupRow,style:{...a,"--user-bg":n},"data-testid":"cuesheet-group",...c,children:[l===k.Edit&&e.jsx("td",{className:ae.actionColumn,tabIndex:-1,role:"cell",children:e.jsx(te,{"aria-label":"Options",variant:"ghosted-white",size:"small",onClick:p=>{const x=p.currentTarget.getBoundingClientRect(),h=8+x.y+x.height/2;r({x:x.x,y:h},t,A.Group,s,null,null)},children:e.jsx(de,{})})}),!d&&e.jsx("td",{className:ae.indexColumn,tabIndex:-1,role:"cell"}),i.getRow(o).getVisibleCells().map(p=>e.jsx("td",{tabIndex:-1,style:{width:`calc(var(--col-${p.column.id}-size) * 1px)`},role:"cell",children:K(p.column.columnDef.cell,p.getContext())},p.id))]})}const hs="_actionColumn_lp3t6_53",xs="_indexColumn_lp3t6_62",gs="_milestoneRow_lp3t6_106",Q={actionColumn:hs,indexColumn:xs,milestoneRow:gs};function Cs({entryId:t,isPast:n,parentBgColour:o,parentId:s,colour:i,rowId:a,rowIndex:c,table:l,injectedStyles:d,...r}){var E;const{cuesheetMode:u,hideIndexColumn:p}=((E=l.options.meta)==null?void 0:E.options)??{cuesheetMode:k.Edit,hideIndexColumn:!1},x=ne(f=>f.openMenu);let h;if(i){const f=re(H(i).backgroundColor);f!==null&&(h=le({...f,alpha:f.alpha*.25}))}return e.jsxs("tr",{className:ee([Q.milestoneRow,!!o&&Q.hasParent]),style:{...d,opacity:`${n?"0.2":"1"}`,"--user-bg":o??"transparent"},"data-testid":"cuesheet-milestone",...r,children:[u===k.Edit&&e.jsx("td",{className:Q.actionColumn,tabIndex:-1,role:"cell",children:e.jsx(te,{"aria-label":"Options",variant:"ghosted-white",size:"small",onClick:f=>{const g=f.currentTarget.getBoundingClientRect(),S=8+g.y+g.height/2;x({x:g.x,y:S},t,A.Milestone,c,s,null)},children:e.jsx(de,{})})}),!p&&e.jsx("td",{className:Q.indexColumn,tabIndex:-1,role:"cell",children:Tt}),l.getRow(a).getVisibleCells().map(f=>{const g=f.column.id!=="duration"&&f.column.id!=="timeStart"&&f.column.id!=="timeEnd";return e.jsx("td",{style:{width:`calc(var(--col-${f.column.id}-size) * 1px)`,backgroundColor:h,opacity:g?1:.4},tabIndex:-1,children:g&&K(f.column.columnDef.cell,f.getContext())},f.id)})]})}const xe=ue(t=>({canChangeMode:!1,canCreateEntries:!1,canEditEntries:!1,canFlag:!1,canShare:!1,setPermissions(n){t({canChangeMode:n.canChangeMode,canFlag:n.canFlag,canCreateEntries:n.canCreateEntries,canEditEntries:n.canEditEntries,canShare:n.canShare})}})),ys=m.memo(js);function js(){const{isOpen:t,entryId:n,entryIndex:o,parentId:s,flag:i,position:a,closeMenu:c}=ne(),{addEntry:l,clone:d,deleteEntry:r,move:u,updateEntry:p}=Ue(),x=ce(E=>E.setEditableEntry),h=xe();return t?e.jsx(Lt,{isOpen:!0,onClose:c,items:[{type:"item",label:"Edit...",onClick:()=>x(n),icon:ke,disabled:!h.canEditEntries},{type:"divider"},{type:"item",label:i?"Remove flag":"Add flag",onClick:()=>p({id:n,flag:!i}),icon:Ce,disabled:i===null||!h.canFlag},{type:"divider"},{type:"item",label:"Add event above",onClick:()=>l({type:A.Event,parent:s},{before:n}),icon:ye,disabled:!h.canCreateEntries},{type:"item",label:"Add event below",onClick:()=>l({type:A.Event,parent:s},{after:n}),icon:ye,disabled:!h.canCreateEntries},{type:"item",label:"Clone event",onClick:()=>d(n),icon:Ce,disabled:!h.canCreateEntries},{type:"divider"},{type:"item",label:"Move up",onClick:()=>u(n,"up"),icon:dt,disabled:o<1||!h.canEditEntries},{type:"item",label:"Move down",onClick:()=>u(n,"down"),icon:mt,disabled:!h.canEditEntries},{type:"divider"},{type:"item",label:"Delete",onClick:()=>r([n]),icon:ft,disabled:!h.canEditEntries}],position:a}):null}function bs(t){return e.jsx(pt,{style:{transform:"rotate(-45deg)"},...t})}function vs(){const{data:t}=It(),{data:n}=wt(),[o,s]=Te(),i=o&&t&&n;return e.jsxs(e.Fragment,{children:[e.jsxs(B,{onClick:s.open,render:e.jsx(N,{}),children:[e.jsx(bs,{}),"Share..."]}),e.jsx(Pe,{isOpen:o,onClose:s.close,title:"Share cuesheet view",showBackdrop:!0,showCloseButton:!0,bodyElements:i?e.jsx(Ft,{lockedPath:{value:Mt.Cuesheet,label:"Cuesheet"}}):null})]})}const Ss="_tableSettings_18k3s_17",Es="_sectionTitle_18k3s_29",_s="_option_18k3s_40",ks="_column_18k3s_47",Ts="_inline_18k3s_54",Is="_apart_18k3s_60",ws="_group_18k3s_65",Ms="_radioButton_18k3s_76",v={tableSettings:Ss,sectionTitle:Es,option:_s,column:ks,inline:Ts,apart:Is,group:ws,radioButton:Ms};function Rs({columns:t,handleResetResizing:n,handleResetReordering:o,handleClearToggles:s}){const i=xe(r=>r.canShare),a=m.use(Ne),[c,l]=Ie({key:a?`${a.alias}${X.cuesheetMode}`:X.cuesheetMode,defaultValue:a?k.Run:k.Edit}),d=r=>{const u=r.at(0);u&&l(u)};return e.jsxs(ht,{className:v.tableSettings,children:[e.jsx(Ds,{}),e.jsx(Ns,{columns:t,handleResetResizing:n,handleResetReordering:o,handleClearToggles:s}),e.jsxs(xt,{value:[c],onValueChange:d,className:ee([v.group,v.apart]),children:[e.jsx(B,{render:e.jsx(je,{}),value:k.Run,className:v.radioButton,children:"Run"}),e.jsx(B,{render:e.jsx(je,{}),value:k.Edit,className:v.radioButton,children:"Edit"})]}),i&&e.jsxs(e.Fragment,{children:[e.jsx(Ge,{orientation:"vertical"}),e.jsx(vs,{})]})]})}function Ds(){const t=z();return e.jsxs(we,{children:[e.jsx(Me,{render:e.jsx(B,{render:e.jsxs(N,{variant:"ghosted-white",children:[e.jsx(gt,{})," Settings",e.jsx(Re,{})]})})}),e.jsxs(Ve,{align:"start",className:v.inline,children:[e.jsxs("div",{className:v.column,children:[e.jsx(D,{className:v.sectionTitle,children:"Element visibility"}),e.jsxs(D,{className:v.option,children:[e.jsx($,{defaultChecked:t.hideTableSeconds,onCheckedChange:n=>t.setOption("hideTableSeconds",n)}),"Hide seconds in table"]}),e.jsxs(D,{className:v.option,children:[e.jsx($,{defaultChecked:t.hideIndexColumn,onCheckedChange:n=>t.setOption("hideIndexColumn",n)}),"Hide index column"]})]}),e.jsxs("div",{className:v.column,children:[e.jsx(D,{className:v.sectionTitle,children:"Table Behaviour"}),e.jsxs(D,{className:v.option,children:[e.jsx($,{defaultChecked:t.showDelayedTimes,onCheckedChange:n=>t.setOption("showDelayedTimes",n)}),"Show delayed times"]}),e.jsxs(D,{className:v.option,children:[e.jsx($,{defaultChecked:t.hideDelays,onCheckedChange:n=>t.setOption("hideDelays",n)}),"Hide delay entries"]})]})]})]})}function Ns({columns:t,handleResetResizing:n,handleResetReordering:o,handleClearToggles:s}){return e.jsxs(we,{children:[e.jsx(Me,{render:e.jsx(B,{render:e.jsxs(N,{variant:"ghosted-white",children:[e.jsx(ke,{})," View",e.jsx(Re,{})]})})}),e.jsxs(Ve,{align:"start",className:v.inline,children:[e.jsxs("div",{className:v.column,children:[e.jsx(D,{className:v.sectionTitle,children:"Column visibility"}),t.map(i=>{const a=i.columnDef.header,c=i.getIsVisible();return e.jsxs(D,{className:v.option,children:[e.jsx($,{defaultChecked:c,onCheckedChange:i.toggleVisibility}),a]},`${i.id}-${c}`)})]}),e.jsx(Ge,{orientation:"vertical"}),e.jsxs("div",{className:v.column,children:[e.jsx(D,{className:v.sectionTitle,children:"Reset Options"}),e.jsx(N,{size:"small",fluid:!0,onClick:s,children:"Show All"}),e.jsx(N,{size:"small",fluid:!0,onClick:n,children:"Reset Resizing"}),e.jsx(N,{size:"small",fluid:!0,onClick:o,children:"Reset Reordering"})]})]})]})}function zs({columns:t,cuesheetMode:n}){const{data:o,status:s}=At(),{updateEntry:i,updateTimer:a}=Ue(),c=z(C=>C.showDelayedTimes),l=z(C=>C.hideTableSeconds),d=z(C=>C.hideIndexColumn),{selectedEventId:r}=Rt(),u=m.useRef(null),{listeners:p}=Ct(),x=m.useMemo(()=>({handleUpdate:(C,b,T,R=!1)=>{const M=o[C];if(!(!M||M[b]===T)){if(R){i({id:M.id,custom:{[b]:T}});return}i({id:M.id,[b]:T})}},handleUpdateTimer:(C,b,T)=>{a(C,b,T,!0)},options:{showDelayedTimes:c,hideTableSeconds:l,cuesheetMode:n,hideIndexColumn:d}}),[n,o,d,l,c,i,a]),{columnOrder:h,resetColumnOrder:E}=Je(t),{columnSizing:f,setColumnSizing:g}=fn(),{columnVisibility:S,setColumnVisibility:w}=pn(),j=yt({data:o,columns:t,columnResizeMode:"onChange",state:{columnOrder:h,columnVisibility:S,columnSizing:f},onColumnVisibilityChange:w,onColumnSizingChange:g,getCoreRowModel:bt(),meta:x}),_=m.useCallback(()=>{j.toggleAllColumnsVisible(!0)},[j]),se=m.useCallback(()=>{g({})},[g]);m.useEffect(()=>{if(n===k.Edit||u.current===null||!r)return;const C=o.findIndex(b=>b.id===r);u.current.scrollToIndex({index:C,behavior:"smooth"})},[n,o,r]);const oe=m.useMemo(()=>{const C=j.getFlatHeaders(),b={};for(let T=0;T<C.length;T++){const R=C[T];R&&(b[`--header-${R.id}-size`]=R.getSize(),b[`--col-${R.column.id}-size`]=R.column.getSize())}return b},[j.getState().columnSizingInfo,j.getState().columnSizing]),G=j.getAllLeafColumns(),{rows:I}=j.getRowModel();return!o||s==="pending"?e.jsx(He,{text:"Loading..."}):e.jsxs(e.Fragment,{children:[e.jsx(Rs,{columns:G,handleResetResizing:se,handleResetReordering:E,handleClearToggles:_}),e.jsx(jt,{ref:u,data:o,increaseViewportBy:{top:100,bottom:200},components:{EmptyPlaceholder:()=>e.jsx(Un,{text:"No data in rundown"}),Table:({style:C,...b})=>e.jsx("table",{className:O.cuesheet,id:"cuesheet",style:{...C,...oe},...p,...b}),TableRow:({item:C,style:b,...T})=>{const R=T["data-index"],M=I[R],q=M.original.id,y=M.original;return Be(y)?e.jsx(ps,{groupId:y.id,colour:y.colour,rowId:M.id,rowIndex:M.index,table:j,injectedStyles:b,...T},q):fe(y)?e.jsx(os,{duration:y.duration,injectedStyles:b,...T},q):$e(y)?e.jsx(Cs,{entryId:y.id,isPast:y.isPast,parentBgColour:y.groupColour,parentId:y.parent,colour:y.colour,rowId:M.id,rowIndex:R,table:j,injectedStyles:b,...T},q):e.jsx(us,{id:y.id,eventIndex:y.eventIndex,colour:y.colour,isFirstAfterGroup:y.isFirstAfterGroup,isLoaded:y.isLoaded,isPast:y.isPast,groupColour:y.groupColour,flag:y.flag,skip:y.skip,parent:y.parent,rowId:M.id,rowIndex:R,table:j,injectedStyles:b,...T},M.id)},TableHead:C=>e.jsx("thead",{className:O.tableHeader,...C})},fixedHeaderContent:()=>j.getHeaderGroups().map(C=>{const b=j.getState().columnSizingInfo.isResizingColumn?es:Yn;return e.jsx(b,{cuesheetMode:n,headerGroup:C},C.id)})}),e.jsx(ys,{})]})}const Os=m.memo(Ws);function Ws(){const{data:t,status:n}=Jt(),o=xe(l=>l.setPermissions),s=m.use(Ne);m.useEffect(()=>{var l,d,r;if(s){const u=((l=s.options)==null?void 0:l.write)==="full";o({canChangeMode:((d=s.options)==null?void 0:d.write)!=="-",canCreateEntries:u,canEditEntries:u,canFlag:u||!!((r=s.options)!=null&&r.write.includes("flag")),canShare:!1})}else o({canChangeMode:!0,canCreateEntries:!0,canEditEntries:!0,canFlag:!0,canShare:Dt==="rw"})},[s,o]);const[i]=Ie({key:s?`${s.alias}${X.cuesheetMode}`:X.cuesheetMode,defaultValue:s?k.Run:k.Edit}),a=m.useMemo(()=>Fn(t,i,s),[t,i,s]),c=!t||n==="pending";return e.jsx(hn,{columns:a,children:c?e.jsx(He,{text:"Loading..."}):e.jsx(zs,{columns:a,cuesheetMode:i})})}const Ps="_tableWrapper_h9gr1_17",$s={tableWrapper:Ps};function Bs(){const[t,n]=Te();Ot("Cuesheet");const o=Nt();return e.jsxs(e.Fragment,{children:[e.jsx(zt,{isOpen:t,onClose:n.close}),e.jsx(sn,{}),e.jsxs("div",{className:$s.tableWrapper,"data-testid":"cuesheet",children:[e.jsx(Xt,{children:!o&&e.jsx(te,{"aria-label":"Toggle navigation",variant:"subtle-white",size:"xlarge",onClick:n.open,children:e.jsx(vt,{})})}),e.jsx(ln,{}),e.jsx(Os,{})]})]})}function po(){return e.jsx(St,{permission:"operator",children:e.jsx(Bs,{})})}export{po as default};
2
- //# sourceMappingURL=ProtectedCuesheet-Deo4Aw6f.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProtectedCuesheet-Deo4Aw6f.js","sources":["../../src/common/hooks/useIsMobileScreen.ts","../../src/features/overview/CuesheetOverview.tsx","../../src/features/rundown/entry-editor/CuesheetEventEditor.tsx","../../src/views/cuesheet/cuesheet-edit-modal/useCuesheetEditModal.tsx","../../src/views/cuesheet/cuesheet-edit-modal/CuesheetEditModal.tsx","../../src/views/cuesheet/cuesheet-progress/CuesheetProgress.tsx","../../src/common/utils/debounce.ts","../../src/views/cuesheet/cuesheet-table/useColumnManager.tsx","../../src/views/cuesheet/cuesheet-dnd/CuesheetDnd.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/SingleLineCell.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/DurationInput.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/EditableImage.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/FlagCell.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/GhostedText.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/MultiLineCell.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/MutedText.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/TimeInput.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/cuesheetColsFactory.tsx","../../src/common/components/state/EmptyTableBody.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/SortableCell.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/CuesheetHeader.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/DelayRow.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-menu/useCuesheetTableMenu.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/EventRow.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/GroupRow.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-elements/MilestoneRow.tsx","../../src/views/cuesheet/useTablePermissions.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-menu/CuesheetTableMenu.tsx","../../src/common/components/icons/RotatedLink.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-settings/CuesheetShareModal.tsx","../../src/views/cuesheet/cuesheet-table/cuesheet-table-settings/CuesheetTableSettings.tsx","../../src/views/cuesheet/cuesheet-table/CuesheetTable.tsx","../../src/views/cuesheet/CuesheetTableWrapper.tsx","../../src/views/cuesheet/CuesheetPage.tsx","../../src/views/cuesheet/ProtectedCuesheet.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useViewportSize } from '@mantine/hooks';\n\nexport function useIsMobileScreen(): boolean {\n const { width } = useViewportSize();\n\n return useMemo(() => width < 800, [width]);\n}\n","import { memo, PropsWithChildren } from 'react';\n\nimport { useIsMobileScreen } from '../../common/hooks/useIsMobileScreen';\n\nimport { ClockOverview, MetadataTimes, OffsetOverview, StartTimes, TimerOverview } from './composite/TimeElements';\nimport TitleOverview from './composite/TitleOverview';\nimport { OverviewWrapper } from './OverviewWrapper';\n\nexport default memo(CuesheetOverview);\nfunction CuesheetOverview({ children }: PropsWithChildren) {\n const isMobileScreen = useIsMobileScreen();\n\n if (isMobileScreen) return <CuesheetMobile>{children}</CuesheetMobile>;\n else return <CuesheetDesktop>{children}</CuesheetDesktop>;\n}\n\nfunction CuesheetMobile({ children }: PropsWithChildren) {\n return (\n <OverviewWrapper navElements={children}>\n <TimerOverview />\n <OffsetOverview />\n </OverviewWrapper>\n );\n}\n\nfunction CuesheetDesktop({ children }: PropsWithChildren) {\n return (\n <OverviewWrapper navElements={children}>\n <TitleOverview />\n <StartTimes />\n <TimerOverview />\n <OffsetOverview />\n <MetadataTimes />\n <ClockOverview />\n </OverviewWrapper>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { isOntimeEvent, isOntimeGroup, isOntimeMilestone, OntimeEntry } from 'ontime-types';\n\nimport useRundown from '../../../common/hooks-query/useRundown';\n\nimport EventEditor from './EventEditor';\nimport GroupEditor from './GroupEditor';\nimport MilestoneEditor from './MilestoneEditor';\n\nimport style from './EntryEditor.module.scss';\n\ninterface CuesheetEntryEditorProps {\n entryId: string;\n}\n\nexport default function CuesheetEntryEditor({ entryId }: CuesheetEntryEditorProps) {\n const { data } = useRundown();\n const [entry, setEntry] = useState<OntimeEntry | null>(null);\n\n useEffect(() => {\n if (data.order.length === 0) {\n setEntry(null);\n return;\n }\n\n const event = data.entries[entryId];\n if (event) {\n setEntry(event);\n } else {\n setEntry(null);\n }\n }, [entryId, data.order, data.entries]);\n\n if (isOntimeEvent(entry)) {\n return (\n <div className={style.entryEditor} data-testid='editor-container'>\n <EventEditor event={entry} />\n </div>\n );\n }\n\n if (isOntimeMilestone(entry)) {\n return (\n <div className={style.inModal} data-testid='editor-container'>\n <MilestoneEditor milestone={entry} />\n </div>\n );\n }\n\n if (isOntimeGroup(entry)) {\n return (\n <div className={style.inModal} data-testid='editor-container'>\n <GroupEditor group={entry} />\n </div>\n );\n }\n\n return null;\n}\n","import { EntryId } from 'ontime-types';\nimport { create } from 'zustand';\n\ninterface SelectedEntryState {\n selectedEntryId: EntryId | null;\n setEditableEntry: (entryId: EntryId) => void;\n clearSelection: () => void;\n}\n\nexport const useCuesheetEditModal = create<SelectedEntryState>((set) => ({\n selectedEntryId: null,\n setEditableEntry: (entryId: EntryId) => set({ selectedEntryId: entryId }),\n clearSelection: () => set({ selectedEntryId: null }),\n}));\n","import { memo } from 'react';\n\nimport Modal from '../../../common/components/modal/Modal';\nimport CuesheetEntryEditor from '../../../features/rundown/entry-editor/CuesheetEventEditor';\n\nimport { useCuesheetEditModal } from './useCuesheetEditModal';\n\nexport default memo(CuesheetEditModal);\nfunction CuesheetEditModal() {\n const entryId = useCuesheetEditModal((state) => state.selectedEntryId);\n const closeModal = useCuesheetEditModal((state) => state.clearSelection);\n\n if (entryId === null) {\n return null;\n }\n\n return (\n <Modal\n isOpen\n onClose={closeModal}\n title='Edit entry'\n showCloseButton\n bodyElements={<CuesheetEntryEditor entryId={entryId} />}\n />\n );\n}\n","import MultiPartProgressBar from '../../../common/components/multi-part-progress-bar/MultiPartProgressBar';\nimport { useProgressData } from '../../../common/hooks/useSocket';\nimport useViewSettings from '../../../common/hooks-query/useViewSettings';\n\nimport styles from './CuesheetProgress.module.scss';\n\nexport default function CuesheetProgress() {\n const { data } = useViewSettings();\n const { current, duration, timeWarning, timeDanger } = useProgressData();\n\n return (\n <MultiPartProgressBar\n now={current}\n complete={duration}\n normalColor={data.normalColor}\n warning={timeWarning}\n warningColor={data.warningColor}\n danger={timeDanger}\n dangerColor={data.dangerColor}\n className={styles.progressOverride}\n ignoreCssOverride\n />\n );\n}\n","export function debounce<T extends any[]>(callback: (...args: T) => void, wait: number) {\n let timeout: NodeJS.Timeout | null;\n return (...args: T) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n timeout = null;\n callback(...args);\n }, wait);\n };\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport { useLocalStorage } from '@mantine/hooks';\nimport { ColumnDef, ColumnSizingState, Updater } from '@tanstack/react-table';\n\nimport { debounce } from '../../../common/utils/debounce';\nimport { makeStageKey } from '../../../common/utils/localStorage';\nimport type { ExtendedEntry } from '../../../common/utils/rundownMetadata';\n\nconst tableSizesKey = makeStageKey('cuesheet-sizes');\nconst tableHiddenKey = makeStageKey('cuesheet-hidden');\nconst tableOrderKey = makeStageKey('cuesheet-order');\n\nconst saveSizesToStorage = debounce((sizes: Record<string, number>) => {\n localStorage.setItem(tableSizesKey, JSON.stringify(sizes));\n}, 500);\n\nexport function useColumnSizes() {\n const [columnSizing, setColumnSizingState] = useState<Record<string, number>>(() => {\n try {\n const stored = localStorage.getItem(tableSizesKey);\n return stored ? JSON.parse(stored) : {};\n } catch {\n return {};\n }\n });\n\n // save sizes to localStorage whenever they change (debounced)\n useEffect(() => {\n saveSizesToStorage(columnSizing);\n }, [columnSizing]);\n\n const setColumnSizing = useCallback((sizesOrUpdater: Updater<ColumnSizingState>) => {\n setColumnSizingState(sizesOrUpdater);\n }, []);\n\n return {\n columnSizing,\n setColumnSizing,\n };\n}\n\nexport function useColumnOrder(columns: ColumnDef<ExtendedEntry>[]) {\n const [columnOrder, saveColumnOrder] = useLocalStorage<string[]>({\n key: tableOrderKey,\n defaultValue: columns.map((col) => col.id as string),\n });\n\n // update column order if columns change\n useEffect(() => {\n const newColumns = columns.map((col) => col.id as string);\n if (newColumns.some((id) => !columnOrder.includes(id))) {\n saveColumnOrder(newColumns);\n }\n }, [columnOrder, columns, saveColumnOrder]);\n\n const resetColumnOrder = useCallback(() => {\n saveColumnOrder(columns.map((col) => col.id as string));\n }, [columns, saveColumnOrder]);\n\n return {\n columnOrder,\n saveColumnOrder,\n resetColumnOrder,\n };\n}\n\nexport function useColumnVisibility() {\n const [columnVisibility, setColumnVisibility] = useLocalStorage({\n key: tableHiddenKey,\n defaultValue: {},\n });\n\n return {\n columnVisibility,\n setColumnVisibility,\n };\n}\n","import { PropsWithChildren } from 'react';\nimport {\n closestCorners,\n DndContext,\n DragEndEvent,\n PointerSensor,\n TouchSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport { ColumnDef } from '@tanstack/react-table';\n\nimport type { ExtendedEntry } from '../../../common/utils/rundownMetadata';\nimport { useColumnOrder } from '../cuesheet-table/useColumnManager';\n\ninterface CuesheetDndProps {\n columns: ColumnDef<ExtendedEntry>[];\n}\n\nexport default function CuesheetDnd({ columns, children }: PropsWithChildren<CuesheetDndProps>) {\n const { columnOrder, saveColumnOrder } = useColumnOrder(columns);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n delay: 100,\n tolerance: 50,\n },\n }),\n useSensor(TouchSensor, {\n activationConstraint: {\n delay: 100,\n tolerance: 50,\n },\n }),\n );\n\n const handleOnDragEnd = (event: DragEndEvent) => {\n const { delta, active, over } = event;\n\n // cancel if delta y is greater than 200\n if (delta.y > 200) return;\n // cancel if we do not have an over id\n if (over?.id == null) return;\n\n // get index of from\n const fromIndex = columnOrder.indexOf(active.id as string);\n\n // get index of to\n const toIndex = columnOrder.indexOf(over.id as string);\n\n if (toIndex === -1) {\n return;\n }\n\n const reorderedCols = [...columnOrder];\n const reorderedItem = reorderedCols.splice(fromIndex, 1);\n reorderedCols.splice(toIndex, 0, reorderedItem[0]);\n saveColumnOrder(reorderedCols);\n };\n\n return (\n <DndContext sensors={sensors} collisionDetection={closestCorners} onDragEnd={handleOnDragEnd}>\n {children}\n </DndContext>\n );\n}\n","import { forwardRef, memo, useCallback, useImperativeHandle, useRef } from 'react';\n\nimport Input from '../../../../common/components/input/input/Input';\nimport useReactiveTextInput from '../../../../common/components/input/text-input/useReactiveTextInput';\n\ninterface SingleLineCellProps {\n initialValue: string;\n allowSubmitSameValue?: boolean;\n handleUpdate: (newValue: string) => void;\n handleCancelUpdate?: () => void;\n}\n\nconst SingleLineCell = forwardRef(\n ({ initialValue, allowSubmitSameValue, handleUpdate, handleCancelUpdate }: SingleLineCellProps, inputRef) => {\n const ref = useRef<HTMLInputElement | null>(null);\n const submitCallback = useCallback((newValue: string) => handleUpdate(newValue), [handleUpdate]);\n\n const { value, onChange, onBlur, onKeyDown } = useReactiveTextInput(initialValue, submitCallback, ref, {\n allowSubmitSameValue,\n allowKeyboardNavigation: true,\n submitOnEnter: true, // single line should submit on enter\n submitOnCtrlEnter: true,\n onCancelUpdate: handleCancelUpdate,\n });\n\n // expose a subset of the methods to the parent\n useImperativeHandle(inputRef, () => {\n return {\n focus() {\n ref.current?.focus();\n },\n select() {\n ref.current?.select();\n },\n focusParentElement() {\n ref.current?.parentElement?.focus();\n },\n };\n }, [ref]);\n\n return (\n <Input\n ref={ref}\n variant='ghosted'\n fluid\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n />\n );\n },\n);\n\nSingleLineCell.displayName = 'SingleLineCell';\n\nexport default memo(SingleLineCell);\n","import { memo, PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';\nimport { millisToString, parseUserTime } from 'ontime-utils';\n\nimport SingleLineCell from './SingleLineCell';\nimport TextLikeInput from './TextLikeInput';\n\ninterface DurationInputProps {\n initialValue: number;\n lockedValue: boolean;\n delayed?: boolean;\n onSubmit: (value: string) => void;\n}\n\ninterface ParentFocusableInput extends HTMLInputElement {\n focusParentElement: () => void;\n}\n\nexport default memo(DurationInput);\n\nfunction DurationInput({\n initialValue,\n lockedValue,\n delayed,\n onSubmit,\n children,\n}: PropsWithChildren<DurationInputProps>) {\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(initialValue);\n const inputRef = useRef<ParentFocusableInput>(null);\n const textRef = useRef<ParentFocusableInput>(null);\n\n // when we go into edit mode, set focus to the input\n useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n // reset value when initialValue changes, avoiding interrupting the user if we are in edit mode\n useEffect(() => {\n if (!isEditing) {\n setValue(initialValue);\n }\n }, [initialValue, isEditing]);\n\n const handleFakeFocus = () => setIsEditing(true);\n const handleFakeBlur = () => {\n setIsEditing(false);\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n };\n\n const handleUpdate = useCallback(\n (newValue: string) => {\n setIsEditing(false);\n\n // if the user sends an empty string, we want to clear the value\n if (newValue === '') {\n onSubmit(newValue);\n inputRef.current?.focusParentElement();\n return;\n }\n\n // we dont know the values in the rundown, escalate to handler\n if (newValue.startsWith('p') || newValue.startsWith('+')) {\n onSubmit(newValue);\n inputRef.current?.focusParentElement();\n return;\n }\n\n const valueInMillis = parseUserTime(newValue);\n if (valueInMillis < 0 || isNaN(valueInMillis)) {\n setValue(initialValue);\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n return;\n }\n\n // if the value is the same, we may still want to push the lock change\n if (valueInMillis === initialValue && lockedValue) {\n inputRef.current?.focusParentElement();\n return;\n }\n\n onSubmit(newValue);\n setValue(Number(newValue));\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n },\n [initialValue, lockedValue, onSubmit],\n );\n\n const timeString = millisToString(value);\n\n return isEditing ? (\n <SingleLineCell\n ref={inputRef}\n initialValue={timeString}\n allowSubmitSameValue={!lockedValue} // if the value is not locked, submitting will lock the value\n handleUpdate={handleUpdate}\n handleCancelUpdate={handleFakeBlur}\n />\n ) : (\n <TextLikeInput\n onClick={handleFakeFocus}\n onFocus={handleFakeFocus}\n muted={!lockedValue}\n offset={delayed ? 'over' : undefined}\n ref={textRef}\n >\n {children}\n </TextLikeInput>\n );\n}\n","import { memo } from 'react';\n\nimport Button from '../../../../common/components/buttons/Button';\nimport Input from '../../../../common/components/input/input/Input';\n\nimport style from './EditableImage.module.scss';\n\ninterface EditableImageProps {\n initialValue: string;\n readOnly?: boolean;\n updateValue: (newValue: string) => void;\n}\n\nexport default memo(EditableImage);\n\nfunction EditableImage({ initialValue, readOnly, updateValue }: EditableImageProps) {\n const handleUpdate = (newValue: string) => {\n if (newValue === initialValue) {\n return;\n }\n if (newValue !== '' && !newValue.startsWith('http')) {\n return;\n }\n updateValue(newValue);\n };\n\n const openInNewTab = () => {\n if (initialValue) {\n window.open(initialValue, '_blank', 'noopener,noreferrer');\n }\n };\n\n if (!initialValue) {\n return (\n <Input\n variant='ghosted'\n className={style.imageInput}\n fluid\n readOnly={readOnly}\n // we disable the field to prevent receiving focus\n disabled={readOnly}\n placeholder='Paste image URL'\n onBlur={(event) => handleUpdate(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n handleUpdate(event.currentTarget.value);\n }\n }}\n defaultValue={initialValue}\n />\n );\n }\n\n return (\n <div className={style.imageCell}>\n {!readOnly && (\n <div className={style.overlay}>\n <Button onClick={openInNewTab}>Preview</Button>\n <Button variant='subtle-destructive' onClick={() => handleUpdate('')}>\n Delete\n </Button>\n </div>\n )}\n {Boolean(initialValue) && <img loading='lazy' src={initialValue} className={style.image} />}\n </div>\n );\n}\n","import { TbFlagFilled } from 'react-icons/tb';\n\nimport style from './FlagCell.module.scss';\n\nexport default function FlagCell() {\n return (\n <div className={style.flag}>\n <TbFlagFilled />\n </div>\n );\n}\n","import { PropsWithChildren } from 'react';\n\nimport style from './GhostedText.module.scss';\n\ninterface GhostedTextProps {\n multiline?: boolean;\n}\n\nexport default function GhostedText({ children, multiline }: PropsWithChildren<GhostedTextProps>) {\n return <div className={`${style.ghostedText} ${multiline ? style.multiline : ''}`}>{children}</div>;\n}\n","import { memo, useCallback, useRef } from 'react';\n\nimport { AutoTextarea } from '../../../../common/components/input/auto-textarea/AutoTextarea';\nimport useReactiveTextInput from '../../../../common/components/input/text-input/useReactiveTextInput';\n\ninterface MultiLineCellProps {\n initialValue: string;\n handleUpdate: (newValue: string) => void;\n}\n\nexport default memo(MultiLineCell);\n\nfunction MultiLineCell({ initialValue, handleUpdate }: MultiLineCellProps) {\n const ref = useRef<HTMLTextAreaElement | null>(null);\n const submitCallback = useCallback((newValue: string) => handleUpdate(newValue), [handleUpdate]);\n\n const { value, onChange, onBlur, onKeyDown } = useReactiveTextInput(initialValue, submitCallback, ref, {\n submitOnCtrlEnter: true,\n allowKeyboardNavigation: true,\n });\n\n return (\n <AutoTextarea\n inputref={ref}\n variant='ghosted'\n fluid\n rows={1}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n spellCheck={false}\n />\n );\n}\n","import { PropsWithChildren } from 'react';\n\nimport { cx } from '../../../../common/utils/styleUtils';\n\nimport style from './MutedText.module.scss';\n\ninterface MutedTextProps {\n numeric?: boolean;\n}\n\nexport default function MutedText({ numeric, children }: PropsWithChildren<MutedTextProps>) {\n return <span className={cx([style.muted, numeric && style.numeric])}>{children}</span>;\n}\n","import { memo, PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';\nimport { parseUserTime } from 'ontime-utils';\n\nimport { formatTime } from '../../../../common/utils/time';\n\nimport SingleLineCell from './SingleLineCell';\nimport TextLikeInput from './TextLikeInput';\n\ninterface TimeInputDurationProps {\n initialValue: number;\n lockedValue: boolean;\n delayed?: boolean;\n onSubmit: (value: string) => void;\n}\n\ninterface ParentFocusableInput extends HTMLInputElement {\n focusParentElement: () => void;\n}\n\nexport default memo(TimeInputDuration);\n\nfunction TimeInputDuration({\n initialValue,\n lockedValue,\n delayed,\n onSubmit,\n children,\n}: PropsWithChildren<TimeInputDurationProps>) {\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(initialValue);\n const inputRef = useRef<ParentFocusableInput>(null);\n const textRef = useRef<ParentFocusableInput>(null);\n\n // when we go into edit mode, set focus to the input\n useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n // reset value when initialValue changes, avoiding interrupting the user if we are in edit mode\n useEffect(() => {\n if (!isEditing) {\n setValue(initialValue);\n }\n }, [initialValue, isEditing]);\n\n const handleFakeFocus = () => setIsEditing(true);\n const handleFakeBlur = () => {\n setIsEditing(false);\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n };\n\n const handleUpdate = useCallback(\n (newValue: string) => {\n setIsEditing(false);\n\n // if the user sends an empty string, we want to clear the value\n if (newValue === '') {\n onSubmit(newValue);\n inputRef.current?.focusParentElement();\n return;\n }\n\n // we dont know the values in the rundown, escalate to handler\n if (newValue.startsWith('p') || newValue.startsWith('+')) {\n onSubmit(newValue);\n inputRef.current?.focusParentElement();\n return;\n }\n\n const valueInMillis = parseUserTime(newValue);\n if (valueInMillis < 0 || isNaN(valueInMillis)) {\n setValue(initialValue);\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n return;\n }\n\n // if the value is the same, we may still want to push the lock change\n if (valueInMillis === initialValue && lockedValue) {\n inputRef.current?.focusParentElement();\n return;\n }\n\n onSubmit(newValue);\n setValue(Number(newValue));\n setTimeout(() => textRef.current?.focusParentElement()); // Immediate timeout to ensure state change takes place first\n },\n [initialValue, lockedValue, onSubmit],\n );\n\n const timeString = formatTime(value);\n\n return isEditing ? (\n <SingleLineCell\n ref={inputRef}\n initialValue={timeString}\n allowSubmitSameValue={!lockedValue} // if the value is not locked, submitting will lock the value\n handleUpdate={handleUpdate}\n handleCancelUpdate={handleFakeBlur}\n />\n ) : (\n <TextLikeInput\n onClick={handleFakeFocus}\n onFocus={handleFakeFocus}\n muted={!lockedValue}\n offset={delayed ? 'over' : undefined}\n ref={textRef}\n >\n {children}\n </TextLikeInput>\n );\n}\n","import { useCallback } from 'react';\nimport { CellContext, ColumnDef } from '@tanstack/react-table';\nimport { CustomFields, isOntimeDelay, isOntimeEvent, TimeStrategy, URLPreset } from 'ontime-types';\nimport { millisToString } from 'ontime-utils';\n\nimport DelayIndicator from '../../../../common/components/delay-indicator/DelayIndicator';\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { formatDuration, formatTime } from '../../../../common/utils/time';\nimport { AppMode } from '../../../../ontimeConfig';\n\nimport DurationInput from './DurationInput';\nimport EditableImage from './EditableImage';\nimport FlagCell from './FlagCell';\nimport GhostedText from './GhostedText';\nimport MultiLineCell from './MultiLineCell';\nimport MutedText from './MutedText';\nimport SingleLineCell from './SingleLineCell';\nimport TimeInput from './TimeInput';\n\nfunction MakeStart({ getValue, row, table, column }: CellContext<ExtendedEntry, unknown>) {\n if (!table.options.meta) {\n return null;\n }\n\n const { showDelayedTimes, hideTableSeconds } = table.options.meta.options;\n const formatOpts = hideTableSeconds ? { format12: 'hh:mm a', format24: 'HH:mm' } : undefined;\n\n const event = row.original;\n if (!isOntimeEvent(event)) {\n return <MutedText numeric>{formatTime(getValue() as number, formatOpts)}</MutedText>;\n }\n\n const { handleUpdateTimer } = table.options.meta;\n\n const update = (newValue: string) => handleUpdateTimer(row.original.id, 'timeStart', newValue);\n\n const startTime = getValue() as number;\n const isStartLocked = !event.linkStart;\n const displayTime = showDelayedTimes ? startTime + event.delay : startTime;\n const formattedTime = formatTime(displayTime, formatOpts);\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return (\n <MutedText numeric>\n {formattedTime}\n <DelayIndicator delayValue={event.delay} tooltipPrefix={millisToString(startTime)} />\n </MutedText>\n );\n }\n return (\n <TimeInput initialValue={startTime} onSubmit={update} lockedValue={isStartLocked} delayed={event.delay !== 0}>\n {formattedTime}\n <DelayIndicator delayValue={event.delay} tooltipPrefix={millisToString(startTime)} />\n </TimeInput>\n );\n}\n\nfunction MakeEnd({ getValue, row, table, column }: CellContext<ExtendedEntry, unknown>) {\n if (!table.options.meta) {\n return null;\n }\n\n const { showDelayedTimes, hideTableSeconds } = table.options.meta.options;\n const formatOpts = hideTableSeconds ? { format12: 'hh:mm a', format24: 'HH:mm' } : undefined;\n\n const event = row.original;\n if (!isOntimeEvent(event)) {\n return <MutedText numeric>{formatTime(getValue() as number, formatOpts)}</MutedText>;\n }\n\n const { handleUpdateTimer } = table.options.meta;\n\n const update = (newValue: string) => handleUpdateTimer(row.original.id, 'timeEnd', newValue);\n\n const endTime = getValue() as number;\n const isEndLocked = event.timeStrategy === TimeStrategy.LockEnd;\n const displayTime = showDelayedTimes ? endTime + event.delay : endTime;\n const formattedTime = formatTime(displayTime, formatOpts);\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return (\n <MutedText numeric>\n {formattedTime}\n <DelayIndicator delayValue={event.delay} tooltipPrefix={millisToString(endTime)} />\n </MutedText>\n );\n }\n\n return (\n <TimeInput initialValue={endTime} onSubmit={update} lockedValue={isEndLocked} delayed={event.delay !== 0}>\n {formattedTime}\n <DelayIndicator delayValue={event.delay} tooltipPrefix={millisToString(endTime)} />\n </TimeInput>\n );\n}\n\nfunction MakeDuration({ getValue, row, table, column }: CellContext<ExtendedEntry, unknown>) {\n if (!table.options.meta) {\n return null;\n }\n\n const { hideTableSeconds } = table.options.meta.options;\n const event = row.original;\n if (!isOntimeEvent(event)) {\n return <MutedText numeric>{formatDuration(getValue() as number, hideTableSeconds)}</MutedText>;\n }\n\n const { handleUpdateTimer } = table.options.meta;\n\n const update = (newValue: string) => handleUpdateTimer(row.original.id, 'duration', newValue);\n\n const duration = getValue() as number;\n const isDurationLocked = event.timeStrategy === TimeStrategy.LockDuration;\n const formattedDuration = formatDuration(duration, hideTableSeconds);\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return <MutedText numeric>{formattedDuration}</MutedText>;\n }\n\n return (\n <DurationInput initialValue={duration} onSubmit={update} lockedValue={isDurationLocked}>\n {formattedDuration}\n </DurationInput>\n );\n}\n\nfunction MakeMultiLineField({ row, column, table }: CellContext<ExtendedEntry, unknown>) {\n const update = useCallback(\n (newValue: string) => {\n table.options.meta?.handleUpdate(row.index, column.id, newValue, false);\n },\n [column.id, row.index, table.options.meta],\n );\n\n // not all entries have all properties (eg groups)\n const initialValue = row.original[column.id as keyof ExtendedEntry];\n if (typeof initialValue !== 'string') {\n return null;\n }\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return <GhostedText multiline>{initialValue}</GhostedText>;\n }\n\n return <MultiLineCell initialValue={initialValue as string} handleUpdate={update} />;\n}\n\nfunction LazyImage({ row, column, table }: CellContext<ExtendedEntry, unknown>) {\n const update = useCallback(\n (newValue: string) => {\n table.options.meta?.handleUpdate(row.index, column.id, newValue, true);\n },\n [column.id, row.index, table.options.meta],\n );\n\n const event = row.original;\n if (isOntimeDelay(event)) {\n return null;\n }\n\n const canWrite = column.columnDef.meta?.canWrite;\n const initialValue = event.custom[column.id];\n return <EditableImage initialValue={initialValue} updateValue={update} readOnly={!canWrite} />;\n}\n\nfunction MakeSingleLineField({ row, column, table }: CellContext<ExtendedEntry, unknown>) {\n const update = useCallback(\n (newValue: string) => {\n table.options.meta?.handleUpdate(row.index, column.id, newValue, false);\n },\n [column.id, row.index, table.options.meta],\n );\n\n // not all entries have all properties (eg groups)\n const initialValue = row.original[column.id as keyof ExtendedEntry];\n if (typeof initialValue !== 'string') {\n return null;\n }\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return <GhostedText>{initialValue}</GhostedText>;\n }\n\n return <SingleLineCell initialValue={initialValue as string} handleUpdate={update} />;\n}\n\nfunction MakeFlagField({ row }: CellContext<ExtendedEntry, unknown>) {\n const event = row.original;\n if (!isOntimeEvent(event) || !event.flag) {\n return null;\n }\n return <FlagCell />;\n}\n\nfunction MakeCustomField({ row, column, table }: CellContext<ExtendedEntry, unknown>) {\n const update = useCallback(\n (newValue: string) => {\n table.options.meta?.handleUpdate(row.index, column.id, newValue, true);\n },\n [column.id, row.index, table.options.meta],\n );\n\n const event = row.original;\n if (isOntimeDelay(event)) {\n return null;\n }\n\n // entries will not contain the field if there is no value set by the user\n // event if there is no initial value, we still render the cell\n const initialValue = event.custom[column.id] ?? '';\n\n const canWrite = column.columnDef.meta?.canWrite;\n if (!canWrite) {\n return <GhostedText multiline>{initialValue}</GhostedText>;\n }\n\n return <MultiLineCell initialValue={initialValue} handleUpdate={update} />;\n}\n\n/**\n * we cant use the createColumnHelper() because we have custom logic for rendering the cells\n * This means that the display columns: index and action are added inline by the row components\n */\nexport function makeCuesheetColumns(\n customFields: CustomFields,\n cuesheetMode: AppMode,\n preset: URLPreset | undefined,\n): ColumnDef<ExtendedEntry>[] {\n const columnsDef: ColumnDef<ExtendedEntry>[] = [];\n const modeAllowsWrite = cuesheetMode === AppMode.Edit;\n const fullRead = preset ? preset.options?.read === 'full' : true;\n const fullWrite = preset ? preset.options?.write === 'full' : true;\n const canWriteKeys = preset?.options?.write ? new Set(preset.options.write.split(',')) : new Set<string>();\n const canReadKeys = preset?.options?.read ? new Set(preset.options.read.split(',')) : new Set<string>();\n\n // helpers to check read/write for a given key\n const canRead = (key: string) => fullRead || canReadKeys.has(key);\n const canWrite = (key: string) => modeAllowsWrite && (fullWrite || canWriteKeys.has(key));\n\n if (canRead('flag')) {\n columnsDef.push({\n accessorKey: 'flag',\n id: 'flag',\n header: 'Flag',\n cell: MakeFlagField,\n size: 45,\n minSize: 45,\n meta: { canWrite: canWrite('flag') },\n });\n }\n\n if (canRead('cue')) {\n columnsDef.push({\n accessorKey: 'cue',\n id: 'cue',\n header: 'Cue',\n cell: MakeSingleLineField,\n size: 75,\n minSize: 40,\n meta: { canWrite: canWrite('cue') },\n });\n }\n\n if (canRead('timeStart')) {\n columnsDef.push({\n accessorKey: 'timeStart',\n id: 'timeStart',\n header: 'Start',\n cell: MakeStart,\n size: 75,\n minSize: 75,\n meta: { canWrite: canWrite('timeStart') },\n });\n }\n\n if (canRead('timeEnd')) {\n columnsDef.push({\n accessorKey: 'timeEnd',\n id: 'timeEnd',\n header: 'End',\n cell: MakeEnd,\n size: 75,\n minSize: 75,\n meta: { canWrite: canWrite('timeEnd') },\n });\n }\n\n if (canRead('duration')) {\n columnsDef.push({\n accessorKey: 'duration',\n id: 'duration',\n header: 'Duration',\n cell: MakeDuration,\n size: 75,\n minSize: 75,\n meta: { canWrite: canWrite('duration') },\n });\n }\n\n if (canRead('title')) {\n columnsDef.push({\n accessorKey: 'title',\n id: 'title',\n header: 'Title',\n cell: MakeSingleLineField,\n size: 250,\n minSize: 75,\n meta: { canWrite: canWrite('title') },\n });\n }\n\n if (canRead('note')) {\n columnsDef.push({\n accessorKey: 'note',\n id: 'note',\n header: 'Note',\n cell: MakeMultiLineField,\n size: 250,\n minSize: 75,\n meta: { canWrite: canWrite('note') },\n });\n }\n\n // custom fields at the end\n const customFieldKeys = Object.keys(customFields);\n\n for (let i = 0; i < customFieldKeys.length; i++) {\n const key = customFieldKeys[i];\n const permissionKey = `custom-${key}`;\n if (!canRead(permissionKey)) continue;\n columnsDef.push({\n accessorKey: key,\n id: key,\n header: customFields[key].label,\n cell: customFields[key].type === 'text' ? MakeCustomField : LazyImage,\n size: 250,\n minSize: 75,\n meta: {\n colour: customFields[key].colour,\n canWrite: canWrite(permissionKey),\n },\n });\n }\n\n return columnsDef;\n}\n","import EmptyImage from '../../../assets/images/empty.svg?react';\n\nimport style from './EmptyTableBody.module.scss';\n\ninterface EmptyTableBodyProps {\n text: string;\n}\n\nexport default function EmptyTableBody({ text }: EmptyTableBodyProps) {\n return (\n <tbody className={style.emptyContainer}>\n <tr>\n <td colSpan={99} className={style.emptyCell}>\n <EmptyImage className={style.empty} />\n {text && <span className={style.text}>{text}</span>}\n </td>\n </tr>\n </tbody>\n );\n}\n","import { CSSProperties, ReactNode } from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { Header } from '@tanstack/react-table';\n\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\n\nimport style from '../CuesheetTable.module.scss';\n\ninterface SortableCellProps {\n columnId: string;\n colSpan: number;\n injectedStyles: CSSProperties;\n children: ReactNode;\n draggable: ReactNode;\n}\n\nexport function SortableCell({ columnId, colSpan, injectedStyles, children, draggable }: SortableCellProps) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: columnId,\n });\n\n // build drag styles\n const dragStyle = {\n ...injectedStyles,\n zIndex: isDragging ? 2 : 'inherit',\n transform: CSS.Translate.toString(transform),\n transition,\n };\n\n return (\n <th ref={setNodeRef} style={dragStyle} colSpan={colSpan} tabIndex={-1}>\n <div {...attributes} {...listeners}>\n {children}\n </div>\n {draggable}\n </th>\n );\n}\n\nexport function TableCell({ colSpan, injectedStyles, children, draggable }: SortableCellProps) {\n return (\n <th style={injectedStyles} colSpan={colSpan} tabIndex={-1}>\n <div>{children}</div>\n {draggable}\n </th>\n );\n}\n\ninterface DraggableProps {\n header: Header<ExtendedEntry, unknown>;\n}\n\nexport function Draggable({ header }: DraggableProps) {\n return (\n <div\n onDoubleClick={() => header.column.resetSize()}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={style.resizer}\n />\n );\n}\n","import { CSSProperties } from 'react';\nimport { horizontalListSortingStrategy, SortableContext } from '@dnd-kit/sortable';\nimport { flexRender, HeaderGroup } from '@tanstack/react-table';\n\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { getAccessibleColour } from '../../../../common/utils/styleUtils';\nimport { AppMode } from '../../../../ontimeConfig';\nimport { usePersistedCuesheetOptions } from '../../cuesheet.options';\n\nimport { Draggable, SortableCell, TableCell } from './SortableCell';\n\nimport style from '../CuesheetTable.module.scss';\n\ninterface CuesheetHeaderProps {\n headerGroup: HeaderGroup<ExtendedEntry>;\n cuesheetMode: AppMode;\n}\n\nexport function SortableCuesheetHeader({ headerGroup, cuesheetMode }: CuesheetHeaderProps) {\n const hideIndexColumn = usePersistedCuesheetOptions((state) => state.hideIndexColumn);\n\n return (\n <tr key={headerGroup.id}>\n {cuesheetMode === AppMode.Edit && <th className={style.actionColumn} tabIndex={-1} />}\n {!hideIndexColumn && (\n <th className={style.indexColumn} tabIndex={-1}>\n #\n </th>\n )}\n <SortableContext key={headerGroup.id} items={headerGroup.headers} strategy={horizontalListSortingStrategy}>\n {headerGroup.headers.map((header) => {\n const customBackground = header.column.columnDef.meta?.colour;\n const canWrite = header.column.columnDef.meta?.canWrite;\n\n const customStyles: CSSProperties = {\n opacity: canWrite ? 1 : 0.6,\n };\n if (customBackground) {\n const customColour = getAccessibleColour(customBackground);\n customStyles.backgroundColor = customColour.backgroundColor;\n customStyles.color = customColour.color;\n }\n\n return (\n <SortableCell\n key={header.column.columnDef.id}\n columnId={header.column.id}\n colSpan={header.colSpan}\n injectedStyles={{ width: `calc(var(--header-${header?.id}-size) * 1px)`, ...customStyles }}\n draggable={<Draggable header={header} />}\n >\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </SortableCell>\n );\n })}\n </SortableContext>\n </tr>\n );\n}\n\nexport function CuesheetHeader({ headerGroup, cuesheetMode }: CuesheetHeaderProps) {\n const hideIndexColumn = usePersistedCuesheetOptions((state) => state.hideIndexColumn);\n\n return (\n <tr key={headerGroup.id}>\n {cuesheetMode === AppMode.Edit && <th className={style.actionColumn} tabIndex={-1} />}\n {!hideIndexColumn && (\n <th className={style.indexColumn} tabIndex={-1}>\n #\n </th>\n )}\n {headerGroup.headers.map((header) => {\n const customBackground = header.column.columnDef.meta?.colour;\n const canWrite = header.column.columnDef.meta?.canWrite;\n\n const customStyles: CSSProperties = {\n opacity: canWrite ? 1 : 0.6,\n };\n if (customBackground) {\n const customColour = getAccessibleColour(customBackground);\n customStyles.backgroundColor = customColour.backgroundColor;\n customStyles.color = customColour.color;\n }\n\n return (\n <TableCell\n key={header.column.columnDef.id}\n columnId={header.column.id}\n colSpan={header.colSpan}\n injectedStyles={{ width: `calc(var(--header-${header?.id}-size) * 1px)`, ...customStyles }}\n draggable={<Draggable header={header} />}\n >\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableCell>\n );\n })}\n </tr>\n );\n}\n","import { CSSProperties, memo } from 'react';\n\nimport { millisToDelayString } from '../../../../common/utils/dateConfig';\nimport { usePersistedCuesheetOptions } from '../../cuesheet.options';\n\nimport style from './DelayRow.module.scss';\n\ninterface DelayRowProps {\n duration: number;\n injectedStyles?: CSSProperties;\n}\n\nfunction DelayRow({ duration, injectedStyles, ...virtuosoProps }: DelayRowProps) {\n const hideDelays = usePersistedCuesheetOptions((state) => state.hideDelays);\n\n if (hideDelays || duration === 0) {\n return null;\n }\n\n const delayTime = millisToDelayString(duration, 'expanded');\n\n return (\n <tr className={style.delayRow} data-testid='cuesheet-delay' style={injectedStyles} {...virtuosoProps}>\n <td tabIndex={0}>{delayTime}</td>\n </tr>\n );\n}\n\nexport default memo(DelayRow);\n","import { EntryId, SupportedEntry } from 'ontime-types';\nimport { create } from 'zustand';\n\ntype Anchor = { x: number; y: number };\n\ntype OpenMenu = {\n isOpen: true;\n entryId: EntryId;\n entryType: SupportedEntry;\n entryIndex: number;\n parentId: EntryId | null;\n flag: boolean | null;\n};\n\ntype ClosedMenu = {\n isOpen: false;\n entryId: null;\n entryType: null;\n entryIndex: null;\n parentId: null;\n flag: null;\n};\n\ntype CuesheetTableMenuStore = (OpenMenu | ClosedMenu) & {\n position: Anchor;\n openMenu: (\n position: Anchor,\n entryId: EntryId,\n entryType: SupportedEntry,\n entryIndex: number,\n parentId: EntryId | null,\n flag: boolean | null,\n ) => void;\n closeMenu: () => void;\n};\n\nexport const useCuesheetTableMenu = create<CuesheetTableMenuStore>((set) => ({\n isOpen: false,\n entryId: null,\n entryType: null,\n entryIndex: null,\n parentId: null,\n position: { x: 0, y: 0 },\n flag: null,\n openMenu: (\n position: Anchor,\n entryId: EntryId,\n entryType: SupportedEntry,\n entryIndex: number,\n parentId: EntryId | null,\n flag: null | boolean,\n ) => set({ isOpen: true, position, entryId, entryType, entryIndex, parentId, flag }),\n closeMenu: () => set({ isOpen: false }),\n}));\n","import { CSSProperties, useMemo } from 'react';\nimport { IoEllipsisHorizontal } from 'react-icons/io5';\nimport { flexRender, Table } from '@tanstack/react-table';\nimport { EntryId, OntimeEntry, RGBColour, SupportedEntry } from 'ontime-types';\nimport { colourToHex, cssOrHexToColour } from 'ontime-utils';\n\nimport IconButton from '../../../../common/components/buttons/IconButton';\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { cx, getAccessibleColour } from '../../../../common/utils/styleUtils';\nimport { AppMode } from '../../../../ontimeConfig';\nimport { useCuesheetTableMenu } from '../cuesheet-table-menu/useCuesheetTableMenu';\n\nimport style from './EventRow.module.scss';\n\ninterface EventRowProps {\n rowId: string;\n id: EntryId;\n eventIndex: number;\n colour: string;\n isFirstAfterGroup: boolean;\n isLoaded: boolean;\n isPast: boolean;\n groupColour: string | undefined;\n flag: boolean;\n skip: boolean;\n parent: EntryId | null;\n rowIndex: number;\n table: Table<ExtendedEntry<OntimeEntry>>;\n injectedStyles?: CSSProperties;\n}\n\nexport default function EventRow({\n rowId,\n id,\n eventIndex,\n colour,\n isFirstAfterGroup,\n isLoaded,\n isPast,\n groupColour,\n flag,\n skip,\n parent,\n rowIndex,\n table,\n injectedStyles,\n ...virtuosoProps\n}: EventRowProps) {\n const { cuesheetMode, hideIndexColumn } = table.options.meta?.options ?? {\n cuesheetMode: AppMode.Edit,\n hideIndexColumn: false,\n };\n\n const openMenu = useCuesheetTableMenu((store) => store.openMenu);\n\n const { color, backgroundColor } = getAccessibleColour(colour);\n const tmpColour = cssOrHexToColour(color) as RGBColour; // we know this to be a correct colour\n const mutedText = colourToHex({ ...tmpColour, alpha: tmpColour.alpha * 0.8 });\n\n const rowBgColour: string | undefined = useMemo(() => {\n if (isLoaded) {\n return '#087A27'; // $active-green\n } else if (colour) {\n // the colour is user defined and might be invalid\n const accessibleBackgroundColor = cssOrHexToColour(getAccessibleColour(colour).backgroundColor);\n if (accessibleBackgroundColor !== null) {\n return colourToHex({\n ...accessibleBackgroundColor,\n alpha: accessibleBackgroundColor.alpha * 0.25,\n });\n }\n }\n return;\n }, [colour, isLoaded]);\n\n return (\n <tr\n id={rowId}\n className={cx([\n style.eventRow,\n skip && style.skip,\n isFirstAfterGroup && style.firstAfterGroup,\n parent && style.hasParent,\n ])}\n style={{\n ...injectedStyles,\n opacity: `${isPast ? '0.2' : '1'}`,\n '--user-bg': groupColour ?? 'transparent',\n }}\n data-testid='cuesheet-event'\n {...virtuosoProps}\n >\n {cuesheetMode === AppMode.Edit && (\n <td className={style.actionColumn} tabIndex={-1} role='cell'>\n <IconButton\n aria-label='Options'\n variant='ghosted-white'\n size='small'\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const yPos = 8 + rect.y + rect.height / 2;\n openMenu({ x: rect.x, y: yPos }, id, SupportedEntry.Event, rowIndex, parent, flag);\n }}\n >\n <IoEllipsisHorizontal />\n </IconButton>\n </td>\n )}\n {!hideIndexColumn && (\n <td className={style.indexColumn} style={{ backgroundColor, color: mutedText }} tabIndex={-1} role='cell'>\n {eventIndex}\n </td>\n )}\n {table\n .getRow(rowId)\n .getVisibleCells()\n .map((cell) => {\n return (\n <td\n key={cell.id}\n style={{\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n backgroundColor: rowBgColour,\n }}\n tabIndex={-1}\n role='cell'\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n );\n })}\n </tr>\n );\n}\n","import { CSSProperties } from 'react';\nimport { IoEllipsisHorizontal } from 'react-icons/io5';\nimport { flexRender, Table } from '@tanstack/react-table';\nimport { EntryId, SupportedEntry } from 'ontime-types';\n\nimport IconButton from '../../../../common/components/buttons/IconButton';\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { AppMode } from '../../../../ontimeConfig';\nimport { useCuesheetTableMenu } from '../cuesheet-table-menu/useCuesheetTableMenu';\n\nimport style from './GroupRow.module.scss';\n\ninterface GroupRowProps {\n groupId: EntryId;\n colour: string;\n rowId: string;\n rowIndex: number;\n table: Table<ExtendedEntry>;\n injectedStyles?: CSSProperties;\n}\n\nexport default function GroupRow({\n groupId,\n colour,\n rowId,\n rowIndex,\n table,\n injectedStyles,\n ...virtuosoProps\n}: GroupRowProps) {\n const { cuesheetMode, hideIndexColumn } = table.options.meta?.options ?? {\n cuesheetMode: AppMode.Edit,\n hideIndexColumn: false,\n };\n\n const openMenu = useCuesheetTableMenu((store) => store.openMenu);\n\n return (\n <tr\n className={style.groupRow}\n style={{ ...injectedStyles, '--user-bg': colour }}\n data-testid='cuesheet-group'\n {...virtuosoProps}\n >\n {cuesheetMode === AppMode.Edit && (\n <td className={style.actionColumn} tabIndex={-1} role='cell'>\n <IconButton\n aria-label='Options'\n variant='ghosted-white'\n size='small'\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const yPos = 8 + rect.y + rect.height / 2;\n openMenu({ x: rect.x, y: yPos }, groupId, SupportedEntry.Group, rowIndex, null, null);\n }}\n >\n <IoEllipsisHorizontal />\n </IconButton>\n </td>\n )}\n {!hideIndexColumn && <td className={style.indexColumn} tabIndex={-1} role='cell' />}\n {table\n .getRow(rowId)\n .getVisibleCells()\n .map((cell) => {\n return (\n <td\n key={cell.id}\n tabIndex={-1}\n style={{\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n }}\n role='cell'\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n );\n })}\n </tr>\n );\n}\n","import { CSSProperties } from 'react';\nimport { IoEllipsisHorizontal } from 'react-icons/io5';\nimport { flexRender, Table } from '@tanstack/react-table';\nimport { EntryId, SupportedEntry } from 'ontime-types';\nimport { colourToHex, cssOrHexToColour } from 'ontime-utils';\n\nimport IconButton from '../../../../common/components/buttons/IconButton';\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { cx, enDash, getAccessibleColour } from '../../../../common/utils/styleUtils';\nimport { AppMode } from '../../../../ontimeConfig';\nimport { useCuesheetTableMenu } from '../cuesheet-table-menu/useCuesheetTableMenu';\n\nimport style from './MilestoneRow.module.scss';\n\ninterface MilestoneRowProps {\n entryId: EntryId;\n isPast: boolean;\n parentBgColour?: string;\n parentId: EntryId | null;\n colour: string;\n rowId: string;\n rowIndex: number;\n table: Table<ExtendedEntry>;\n injectedStyles?: CSSProperties;\n}\n\nexport default function MilestoneRow({\n entryId,\n isPast,\n parentBgColour,\n parentId,\n colour,\n rowId,\n rowIndex,\n table,\n injectedStyles,\n ...virtuosoProps\n}: MilestoneRowProps) {\n const { cuesheetMode, hideIndexColumn } = table.options.meta?.options ?? {\n cuesheetMode: AppMode.Edit,\n hideIndexColumn: false,\n };\n\n const openMenu = useCuesheetTableMenu((store) => store.openMenu);\n\n let rowBgColour: string | undefined;\n if (colour) {\n // the colour is user defined and might be invalid\n const accessibleBackgroundColor = cssOrHexToColour(getAccessibleColour(colour).backgroundColor);\n if (accessibleBackgroundColor !== null) {\n rowBgColour = colourToHex({\n ...accessibleBackgroundColor,\n alpha: accessibleBackgroundColor.alpha * 0.25,\n });\n }\n }\n\n return (\n <tr\n className={cx([style.milestoneRow, Boolean(parentBgColour) && style.hasParent])}\n style={{\n ...injectedStyles,\n opacity: `${isPast ? '0.2' : '1'}`,\n '--user-bg': parentBgColour ?? 'transparent',\n }}\n data-testid='cuesheet-milestone'\n {...virtuosoProps}\n >\n {cuesheetMode === AppMode.Edit && (\n <td className={style.actionColumn} tabIndex={-1} role='cell'>\n <IconButton\n aria-label='Options'\n variant='ghosted-white'\n size='small'\n onClick={(e) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const yPos = 8 + rect.y + rect.height / 2;\n openMenu({ x: rect.x, y: yPos }, entryId, SupportedEntry.Milestone, rowIndex, parentId, null);\n }}\n >\n <IoEllipsisHorizontal />\n </IconButton>\n </td>\n )}\n {!hideIndexColumn && (\n <td className={style.indexColumn} tabIndex={-1} role='cell'>\n {enDash}\n </td>\n )}\n {table\n .getRow(rowId)\n .getVisibleCells()\n .map((cell) => {\n const canRender =\n cell.column.id !== 'duration' && cell.column.id !== 'timeStart' && cell.column.id !== 'timeEnd';\n return (\n <td\n key={cell.id}\n style={{\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n backgroundColor: rowBgColour,\n opacity: canRender ? 1 : 0.4,\n }}\n tabIndex={-1}\n >\n {canRender && flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n );\n })}\n </tr>\n );\n}\n","import { create } from 'zustand';\n\ninterface CuesheetPermissionsStore {\n canChangeMode: boolean;\n canCreateEntries: boolean;\n canEditEntries: boolean;\n canFlag: boolean;\n canShare: boolean;\n setPermissions: (permissions: Omit<CuesheetPermissionsStore, 'setPermissions'>) => void;\n}\n\nexport const useCuesheetPermissions = create<CuesheetPermissionsStore>((set) => ({\n canChangeMode: false,\n canCreateEntries: false,\n canEditEntries: false,\n canFlag: false,\n canShare: false,\n setPermissions(permissions) {\n set({\n canChangeMode: permissions.canChangeMode,\n canFlag: permissions.canFlag,\n canCreateEntries: permissions.canCreateEntries,\n canEditEntries: permissions.canEditEntries,\n canShare: permissions.canShare,\n });\n },\n}));\n","import { memo } from 'react';\nimport { IoAdd, IoArrowDown, IoArrowUp, IoDuplicateOutline, IoOptions, IoTrash } from 'react-icons/io5';\nimport { SupportedEntry } from 'ontime-types';\n\nimport { PositionedDropdownMenu } from '../../../../common/components/dropdown-menu/DropdownMenu';\nimport { useEntryActions } from '../../../../common/hooks/useEntryAction';\nimport { useCuesheetEditModal } from '../../cuesheet-edit-modal/useCuesheetEditModal';\nimport { useCuesheetPermissions } from '../../useTablePermissions';\n\nimport { useCuesheetTableMenu } from './useCuesheetTableMenu';\n\nexport default memo(CuesheetTableMenu);\n\nfunction CuesheetTableMenu() {\n const { isOpen, entryId, entryIndex, parentId, flag, position, closeMenu } = useCuesheetTableMenu();\n const { addEntry, clone, deleteEntry, move, updateEntry } = useEntryActions();\n const showModal = useCuesheetEditModal((state) => state.setEditableEntry);\n const permissions = useCuesheetPermissions();\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <PositionedDropdownMenu\n isOpen\n onClose={closeMenu}\n items={[\n {\n type: 'item',\n label: 'Edit...',\n onClick: () => showModal(entryId),\n icon: IoOptions,\n disabled: !permissions.canEditEntries,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: flag ? 'Remove flag' : 'Add flag',\n onClick: () => updateEntry({ id: entryId, flag: !flag }),\n icon: IoDuplicateOutline,\n disabled: flag === null || !permissions.canFlag,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Add event above',\n onClick: () => addEntry({ type: SupportedEntry.Event, parent: parentId }, { before: entryId }),\n icon: IoAdd,\n disabled: !permissions.canCreateEntries,\n },\n {\n type: 'item',\n label: 'Add event below',\n onClick: () => addEntry({ type: SupportedEntry.Event, parent: parentId }, { after: entryId }),\n icon: IoAdd,\n disabled: !permissions.canCreateEntries,\n },\n {\n type: 'item',\n label: 'Clone event',\n onClick: () => clone(entryId),\n icon: IoDuplicateOutline,\n disabled: !permissions.canCreateEntries,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Move up',\n onClick: () => move(entryId, 'up'),\n icon: IoArrowUp,\n disabled: entryIndex < 1 || !permissions.canEditEntries,\n },\n {\n type: 'item',\n label: 'Move down',\n onClick: () => move(entryId, 'down'),\n icon: IoArrowDown,\n disabled: !permissions.canEditEntries,\n },\n { type: 'divider' },\n {\n type: 'item',\n label: 'Delete',\n onClick: () => deleteEntry([entryId]),\n icon: IoTrash,\n disabled: !permissions.canEditEntries,\n },\n ]}\n position={position}\n />\n );\n}\n","import { IconBaseProps } from 'react-icons';\nimport { IoLink } from 'react-icons/io5';\n\nexport default function RotatedLink(linkProps: IconBaseProps) {\n return <IoLink style={{ transform: 'rotate(-45deg)' }} {...linkProps} />;\n}\n","import { Toolbar } from '@base-ui-components/react/toolbar';\nimport { useDisclosure } from '@mantine/hooks';\nimport { OntimeView } from 'ontime-types';\n\nimport Button from '../../../../common/components/buttons/Button';\nimport RotatedLink from '../../../../common/components/icons/RotatedLink';\nimport Modal from '../../../../common/components/modal/Modal';\nimport useInfo from '../../../../common/hooks-query/useInfo';\nimport useUrlPresets from '../../../../common/hooks-query/useUrlPresets';\nimport GenerateLinkFormExport from '../../../../features/sharing/GenerateLinkFormExport';\n\nfunction CuesheetShareModal() {\n const { data: infoData } = useInfo();\n const { data: urlPresetData } = useUrlPresets();\n const [isOpen, handler] = useDisclosure();\n\n // Don't render the modal content until it's open and data is loaded\n const showModalContent = isOpen && infoData && urlPresetData;\n\n return (\n <>\n <Toolbar.Button onClick={handler.open} render={<Button />}>\n <RotatedLink />\n Share...\n </Toolbar.Button>\n <Modal\n isOpen={isOpen}\n onClose={handler.close}\n title='Share cuesheet view'\n showBackdrop\n showCloseButton\n bodyElements={\n showModalContent ? (\n <GenerateLinkFormExport lockedPath={{ value: OntimeView.Cuesheet, label: 'Cuesheet' }} />\n ) : null\n }\n />\n </>\n );\n}\n\nexport default CuesheetShareModal;\n","import { ReactNode, use } from 'react';\nimport { IoChevronDown, IoOptions, IoSettingsOutline } from 'react-icons/io5';\nimport { Popover } from '@base-ui-components/react/popover';\nimport { Toggle } from '@base-ui-components/react/toggle';\nimport { ToggleGroup } from '@base-ui-components/react/toggle-group';\nimport { Toolbar } from '@base-ui-components/react/toolbar';\nimport { useSessionStorage } from '@mantine/hooks';\nimport type { Column } from '@tanstack/react-table';\n\nimport Button from '../../../../common/components/buttons/Button';\nimport Checkbox from '../../../../common/components/checkbox/Checkbox';\nimport * as Editor from '../../../../common/components/editor-utils/EditorUtils';\nimport PopoverContents from '../../../../common/components/popover/Popover';\nimport { PresetContext } from '../../../../common/context/PresetContext';\nimport type { ExtendedEntry } from '../../../../common/utils/rundownMetadata';\nimport { cx } from '../../../../common/utils/styleUtils';\nimport { AppMode, sessionKeys } from '../../../../ontimeConfig';\nimport { usePersistedCuesheetOptions } from '../../cuesheet.options';\nimport { useCuesheetPermissions } from '../../useTablePermissions';\n\nimport CuesheetShareModal from './CuesheetShareModal';\n\nimport style from './CuesheetTableSettings.module.scss';\n\ninterface CuesheetTableSettingsProps {\n columns: Column<ExtendedEntry, unknown>[];\n handleResetResizing: () => void;\n handleResetReordering: () => void;\n handleClearToggles: () => void;\n}\n\nexport default function CuesheetTableSettings({\n columns,\n handleResetResizing,\n handleResetReordering,\n handleClearToggles,\n}: CuesheetTableSettingsProps) {\n const canShare = useCuesheetPermissions((state) => state.canShare);\n const preset = use(PresetContext);\n\n const [cuesheetMode, setCuesheetMode] = useSessionStorage({\n key: preset ? `${preset.alias}${sessionKeys.cuesheetMode}` : sessionKeys.cuesheetMode,\n defaultValue: preset ? AppMode.Run : AppMode.Edit,\n });\n\n const toggleCuesheetMode = (mode: AppMode[]) => {\n // we need to stop user from deselecting a mode\n const newValue = mode.at(0);\n if (!newValue) return;\n setCuesheetMode(newValue);\n };\n\n return (\n <Toolbar.Root className={style.tableSettings}>\n <ViewSettings />\n <ColumnSettings\n columns={columns}\n handleResetResizing={handleResetResizing}\n handleResetReordering={handleResetReordering}\n handleClearToggles={handleClearToggles}\n />\n <ToggleGroup value={[cuesheetMode]} onValueChange={toggleCuesheetMode} className={cx([style.group, style.apart])}>\n <Toolbar.Button render={<Toggle />} value={AppMode.Run} className={style.radioButton}>\n Run\n </Toolbar.Button>\n <Toolbar.Button render={<Toggle />} value={AppMode.Edit} className={style.radioButton}>\n Edit\n </Toolbar.Button>\n </ToggleGroup>\n\n {canShare && (\n <>\n <Editor.Separator orientation='vertical' />\n <CuesheetShareModal />\n </>\n )}\n </Toolbar.Root>\n );\n}\n\nfunction ViewSettings() {\n const options = usePersistedCuesheetOptions();\n\n return (\n <Popover.Root>\n <Popover.Trigger\n render={\n <Toolbar.Button\n render={\n <Button variant='ghosted-white'>\n <IoSettingsOutline /> Settings\n <IoChevronDown />\n </Button>\n }\n />\n }\n />\n\n <PopoverContents align='start' className={style.inline}>\n <div className={style.column}>\n <Editor.Label className={style.sectionTitle}>Element visibility</Editor.Label>\n <Editor.Label className={style.option}>\n <Checkbox\n defaultChecked={options.hideTableSeconds}\n onCheckedChange={(checked) => options.setOption('hideTableSeconds', checked)}\n />\n Hide seconds in table\n </Editor.Label>\n <Editor.Label className={style.option}>\n <Checkbox\n defaultChecked={options.hideIndexColumn}\n onCheckedChange={(checked) => options.setOption('hideIndexColumn', checked)}\n />\n Hide index column\n </Editor.Label>\n </div>\n\n <div className={style.column}>\n <Editor.Label className={style.sectionTitle}>Table Behaviour</Editor.Label>\n <Editor.Label className={style.option}>\n <Checkbox\n defaultChecked={options.showDelayedTimes}\n onCheckedChange={(checked) => options.setOption('showDelayedTimes', checked)}\n />\n Show delayed times\n </Editor.Label>\n <Editor.Label className={style.option}>\n <Checkbox\n defaultChecked={options.hideDelays}\n onCheckedChange={(checked) => options.setOption('hideDelays', checked)}\n />\n Hide delay entries\n </Editor.Label>\n </div>\n </PopoverContents>\n </Popover.Root>\n );\n}\n\nfunction ColumnSettings({\n columns,\n handleResetResizing,\n handleResetReordering,\n handleClearToggles,\n}: CuesheetTableSettingsProps) {\n return (\n <Popover.Root>\n <Popover.Trigger\n render={\n <Toolbar.Button\n render={\n <Button variant='ghosted-white'>\n <IoOptions /> View\n <IoChevronDown />\n </Button>\n }\n />\n }\n />\n <PopoverContents align='start' className={style.inline}>\n <div className={style.column}>\n <Editor.Label className={style.sectionTitle}>Column visibility</Editor.Label>\n {columns.map((column) => {\n const columnHeader = column.columnDef.header;\n const visible = column.getIsVisible();\n return (\n <Editor.Label key={`${column.id}-${visible}`} className={style.option}>\n <Checkbox defaultChecked={visible} onCheckedChange={column.toggleVisibility} />\n {columnHeader as ReactNode}\n </Editor.Label>\n );\n })}\n </div>\n <Editor.Separator orientation='vertical' />\n <div className={style.column}>\n <Editor.Label className={style.sectionTitle}>Reset Options</Editor.Label>\n <Button size='small' fluid onClick={handleClearToggles}>\n Show All\n </Button>\n <Button size='small' fluid onClick={handleResetResizing}>\n Reset Resizing\n </Button>\n <Button size='small' fluid onClick={handleResetReordering}>\n Reset Reordering\n </Button>\n </div>\n </PopoverContents>\n </Popover.Root>\n );\n}\n","import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { TableVirtuoso, TableVirtuosoHandle } from 'react-virtuoso';\nimport { useTableNav } from '@table-nav/react';\nimport { ColumnDef, getCoreRowModel, useReactTable } from '@tanstack/react-table';\nimport { isOntimeDelay, isOntimeGroup, isOntimeMilestone, OntimeEntry, TimeField } from 'ontime-types';\n\nimport EmptyPage from '../../../common/components/state/EmptyPage';\nimport EmptyTableBody from '../../../common/components/state/EmptyTableBody';\nimport { useEntryActions } from '../../../common/hooks/useEntryAction';\nimport { useSelectedEventId } from '../../../common/hooks/useSocket';\nimport { useFlatRundownWithMetadata } from '../../../common/hooks-query/useRundown';\nimport type { ExtendedEntry } from '../../../common/utils/rundownMetadata';\nimport { AppMode } from '../../../ontimeConfig';\nimport { usePersistedCuesheetOptions } from '../cuesheet.options';\n\nimport { CuesheetHeader, SortableCuesheetHeader } from './cuesheet-table-elements/CuesheetHeader';\nimport DelayRow from './cuesheet-table-elements/DelayRow';\nimport EventRow from './cuesheet-table-elements/EventRow';\nimport GroupRow from './cuesheet-table-elements/GroupRow';\nimport MilestoneRow from './cuesheet-table-elements/MilestoneRow';\nimport CuesheetTableMenu from './cuesheet-table-menu/CuesheetTableMenu';\nimport CuesheetTableSettings from './cuesheet-table-settings/CuesheetTableSettings';\nimport { useColumnOrder, useColumnSizes, useColumnVisibility } from './useColumnManager';\n\nimport style from './CuesheetTable.module.scss';\n\ninterface CuesheetTableProps {\n columns: ColumnDef<ExtendedEntry>[];\n cuesheetMode: AppMode;\n}\n\nexport default function CuesheetTable({ columns, cuesheetMode }: CuesheetTableProps) {\n const { data, status } = useFlatRundownWithMetadata();\n const { updateEntry, updateTimer } = useEntryActions();\n const showDelayedTimes = usePersistedCuesheetOptions((state) => state.showDelayedTimes);\n const hideTableSeconds = usePersistedCuesheetOptions((state) => state.hideTableSeconds);\n const hideIndexColumn = usePersistedCuesheetOptions((state) => state.hideIndexColumn);\n\n const { selectedEventId } = useSelectedEventId();\n\n const virtuosoRef = useRef<TableVirtuosoHandle | null>(null);\n const { listeners } = useTableNav();\n\n const meta = useMemo(\n () => ({\n handleUpdate: (rowIndex: number, accessor: string, payload: string, isCustom = false) => {\n // check if value is the same\n const event = data[rowIndex];\n\n if (!event) {\n return;\n }\n\n // skip if there is no value change\n const key = accessor as keyof OntimeEntry;\n const previousValue = event[key];\n if (previousValue === payload) {\n return;\n }\n\n if (isCustom) {\n updateEntry({ id: event.id, custom: { [accessor]: payload } });\n return;\n }\n\n updateEntry({ id: event.id, [accessor]: payload });\n },\n handleUpdateTimer: (eventId: string, field: TimeField, payload: string) => {\n // the timer element already contains logic to avoid submitting a unchanged value\n updateTimer(eventId, field, payload, true);\n },\n options: {\n showDelayedTimes,\n hideTableSeconds,\n cuesheetMode,\n hideIndexColumn,\n },\n }),\n [cuesheetMode, data, hideIndexColumn, hideTableSeconds, showDelayedTimes, updateEntry, updateTimer],\n );\n\n const { columnOrder, resetColumnOrder } = useColumnOrder(columns);\n const { columnSizing, setColumnSizing } = useColumnSizes();\n const { columnVisibility, setColumnVisibility } = useColumnVisibility();\n\n const table = useReactTable({\n data,\n columns,\n columnResizeMode: 'onChange',\n state: {\n columnOrder,\n columnVisibility,\n columnSizing,\n },\n onColumnVisibilityChange: setColumnVisibility,\n onColumnSizingChange: setColumnSizing,\n getCoreRowModel: getCoreRowModel(),\n meta,\n });\n\n const setAllVisible = useCallback(() => {\n table.toggleAllColumnsVisible(true);\n }, [table]);\n\n const resetColumnResizing = useCallback(() => {\n setColumnSizing({});\n }, [setColumnSizing]);\n\n // in run mode, we follow the selected row\n useEffect(() => {\n if (cuesheetMode === AppMode.Edit || virtuosoRef.current === null || !selectedEventId) {\n return;\n }\n\n const eventIndex = data.findIndex((event) => event.id === selectedEventId);\n virtuosoRef.current.scrollToIndex({ index: eventIndex, behavior: 'smooth' });\n }, [cuesheetMode, data, selectedEventId]);\n\n /**\n * To improve performance on resizing, we memoise the column sizes\n * and pass them as CSS variables to the table container.\n */\n const columnSizeVars = useMemo(() => {\n const headers = table.getFlatHeaders();\n const colSizes: { [key: string]: number } = {};\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i];\n if (!header) continue;\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n return colSizes;\n // eslint-disable-next-line react-compiler/react-compiler -- unfortunately this is what we need\n // eslint-disable-next-line react-hooks/exhaustive-deps -- this works well and follows documentation\n }, [table.getState().columnSizingInfo, table.getState().columnSizing]);\n\n const allLeafColumns = table.getAllLeafColumns();\n const { rows } = table.getRowModel();\n\n const isLoading = !data || status === 'pending';\n\n if (isLoading) {\n return <EmptyPage text='Loading...' />;\n }\n\n return (\n <>\n <CuesheetTableSettings\n columns={allLeafColumns}\n handleResetResizing={resetColumnResizing}\n handleResetReordering={resetColumnOrder}\n handleClearToggles={setAllVisible}\n />\n <TableVirtuoso\n ref={virtuosoRef}\n data={data}\n increaseViewportBy={{ top: 100, bottom: 200 }}\n components={{\n EmptyPlaceholder: () => <EmptyTableBody text='No data in rundown' />,\n Table: ({ style: injectedStyles, ...virtuosoProps }) => {\n return (\n <table\n className={style.cuesheet}\n id='cuesheet'\n style={{ ...injectedStyles, ...columnSizeVars }}\n {...listeners}\n {...virtuosoProps}\n />\n );\n },\n TableRow: ({ item: _item, style: injectedStyles, ...virtuosoProps }) => {\n // eslint-disable-next-line react/destructuring-assignment\n const rowIndex = virtuosoProps['data-index'];\n const row = rows[rowIndex];\n const key = row.original.id;\n const entry = row.original;\n\n if (isOntimeGroup(entry)) {\n return (\n <GroupRow\n key={key}\n groupId={entry.id}\n colour={entry.colour}\n rowId={row.id}\n rowIndex={row.index}\n table={table}\n injectedStyles={injectedStyles}\n {...virtuosoProps}\n />\n );\n }\n\n if (isOntimeDelay(entry)) {\n return (\n <DelayRow key={key} duration={entry.duration} injectedStyles={injectedStyles} {...virtuosoProps} />\n );\n }\n\n if (isOntimeMilestone(entry)) {\n return (\n <MilestoneRow\n key={key}\n entryId={entry.id}\n isPast={entry.isPast}\n parentBgColour={entry.groupColour}\n parentId={entry.parent}\n colour={entry.colour}\n rowId={row.id}\n rowIndex={rowIndex}\n table={table}\n injectedStyles={injectedStyles}\n {...virtuosoProps}\n />\n );\n }\n\n return (\n <EventRow\n key={row.id}\n id={entry.id}\n eventIndex={entry.eventIndex}\n colour={entry.colour}\n isFirstAfterGroup={entry.isFirstAfterGroup}\n isLoaded={entry.isLoaded}\n isPast={entry.isPast}\n groupColour={entry.groupColour}\n flag={entry.flag}\n skip={entry.skip}\n parent={entry.parent}\n rowId={row.id}\n rowIndex={rowIndex}\n table={table}\n injectedStyles={injectedStyles}\n {...virtuosoProps}\n />\n );\n },\n TableHead: (virtuosoProps) => <thead className={style.tableHeader} {...virtuosoProps} />,\n }}\n fixedHeaderContent={() => {\n return table.getHeaderGroups().map((headerGroup) => {\n const HeaderComponent = table.getState().columnSizingInfo.isResizingColumn\n ? CuesheetHeader\n : SortableCuesheetHeader;\n\n // if the table is being resized, we render non-sortable headers to avoid performance issues\n return <HeaderComponent key={headerGroup.id} cuesheetMode={cuesheetMode} headerGroup={headerGroup} />;\n });\n }}\n />\n\n <CuesheetTableMenu />\n </>\n );\n}\n","import { memo, use, useEffect, useMemo } from 'react';\nimport { useSessionStorage } from '@mantine/hooks';\n\nimport EmptyPage from '../../common/components/state/EmptyPage';\nimport { PresetContext } from '../../common/context/PresetContext';\nimport useCustomFields from '../../common/hooks-query/useCustomFields';\nimport { sessionScope } from '../../externals';\nimport { AppMode, sessionKeys } from '../../ontimeConfig';\n\nimport CuesheetDnd from './cuesheet-dnd/CuesheetDnd';\nimport { makeCuesheetColumns } from './cuesheet-table/cuesheet-table-elements/cuesheetColsFactory';\nimport CuesheetTable from './cuesheet-table/CuesheetTable';\nimport { useCuesheetPermissions } from './useTablePermissions';\n\nexport default memo(CuesheetTableWrapper);\nfunction CuesheetTableWrapper() {\n const { data: customFields, status: customFieldStatus } = useCustomFields();\n const setPermissions = useCuesheetPermissions((state) => state.setPermissions);\n const preset = use(PresetContext);\n\n // set permissions based on preset\n useEffect(() => {\n if (preset) {\n const fullWrite = preset.options?.write === 'full';\n setPermissions({\n canChangeMode: preset.options?.write !== '-',\n canCreateEntries: fullWrite,\n canEditEntries: fullWrite,\n canFlag: fullWrite || Boolean(preset.options?.write.includes('flag')),\n canShare: false, // TODO: should be sessionScope === 'rw' when we have granular scopes\n });\n } else {\n setPermissions({\n canChangeMode: true,\n canCreateEntries: true,\n canEditEntries: true,\n canFlag: true,\n canShare: sessionScope === 'rw',\n });\n }\n }, [preset, setPermissions]);\n\n const [cuesheetMode] = useSessionStorage({\n key: preset ? `${preset.alias}${sessionKeys.cuesheetMode}` : sessionKeys.cuesheetMode,\n defaultValue: preset ? AppMode.Run : AppMode.Edit,\n });\n\n const columns = useMemo(\n () => makeCuesheetColumns(customFields, cuesheetMode, preset),\n [customFields, cuesheetMode, preset],\n );\n\n const isLoading = !customFields || customFieldStatus === 'pending';\n\n return (\n <CuesheetDnd columns={columns}>\n {isLoading ? <EmptyPage text='Loading...' /> : <CuesheetTable columns={columns} cuesheetMode={cuesheetMode} />}\n </CuesheetDnd>\n );\n}\n","import { IoApps } from 'react-icons/io5';\nimport { useDisclosure } from '@mantine/hooks';\n\nimport IconButton from '../../common/components/buttons/IconButton';\nimport NavigationMenu from '../../common/components/navigation-menu/NavigationMenu';\nimport { useWindowTitle } from '../../common/hooks/useWindowTitle';\nimport { getIsNavigationLocked } from '../../externals';\nimport CuesheetOverview from '../../features/overview/CuesheetOverview';\n\nimport CuesheetEditModal from './cuesheet-edit-modal/CuesheetEditModal';\nimport CuesheetProgress from './cuesheet-progress/CuesheetProgress';\nimport CuesheetTableWrapper from './CuesheetTableWrapper';\n\nimport styles from './CuesheetPage.module.scss';\n\nexport default function CuesheetPage() {\n const [isMenuOpen, menuHandler] = useDisclosure();\n\n useWindowTitle('Cuesheet');\n\n const isLocked = getIsNavigationLocked();\n\n return (\n <>\n <NavigationMenu isOpen={isMenuOpen} onClose={menuHandler.close} />\n <CuesheetEditModal />\n <div className={styles.tableWrapper} data-testid='cuesheet'>\n <CuesheetOverview>\n {!isLocked && (\n <IconButton aria-label='Toggle navigation' variant='subtle-white' size='xlarge' onClick={menuHandler.open}>\n <IoApps />\n </IconButton>\n )}\n </CuesheetOverview>\n <CuesheetProgress />\n <CuesheetTableWrapper />\n </div>\n </>\n );\n}\n","import ProtectRoute from '../../common/components/protect-route/ProtectRoute';\n\nimport CuesheetPage from './CuesheetPage';\n\nexport default function ProtectedCuesheet() {\n return (\n <ProtectRoute permission='operator'>\n <CuesheetPage />\n </ProtectRoute>\n );\n}\n"],"names":["useIsMobileScreen","width","useViewportSize","useMemo","memo","CuesheetOverview","children","jsx","CuesheetMobile","CuesheetDesktop","jsxs","OverviewWrapper","TimerOverview","OffsetOverview","TitleOverview","StartTimes","MetadataTimes","ClockOverview","CuesheetEntryEditor","entryId","data","useRundown","entry","setEntry","useState","useEffect","event","isOntimeEvent","style","EventEditor","isOntimeMilestone","MilestoneEditor","isOntimeGroup","GroupEditor","useCuesheetEditModal","create","set","CuesheetEditModal","state","closeModal","Modal","CuesheetProgress","useViewSettings","current","duration","timeWarning","timeDanger","useProgressData","MultiPartProgressBar","styles","debounce","callback","wait","timeout","args","tableSizesKey","makeStageKey","tableHiddenKey","tableOrderKey","saveSizesToStorage","sizes","useColumnSizes","columnSizing","setColumnSizingState","stored","setColumnSizing","useCallback","sizesOrUpdater","useColumnOrder","columns","columnOrder","saveColumnOrder","useLocalStorage","col","newColumns","id","resetColumnOrder","useColumnVisibility","columnVisibility","setColumnVisibility","CuesheetDnd","sensors","useSensors","useSensor","PointerSensor","TouchSensor","handleOnDragEnd","delta","active","over","fromIndex","toIndex","reorderedCols","reorderedItem","DndContext","closestCorners","SingleLineCell","forwardRef","initialValue","allowSubmitSameValue","handleUpdate","handleCancelUpdate","inputRef","ref","useRef","submitCallback","newValue","value","onChange","onBlur","onKeyDown","useReactiveTextInput","useImperativeHandle","_a","_b","Input","DurationInput","lockedValue","delayed","onSubmit","isEditing","setIsEditing","setValue","textRef","handleFakeFocus","handleFakeBlur","valueInMillis","parseUserTime","_c","timeString","millisToString","TextLikeInput","EditableImage","readOnly","updateValue","openInNewTab","Button","FlagCell","TbFlagFilled","GhostedText","multiline","MultiLineCell","AutoTextarea","MutedText","numeric","cx","TimeInputDuration","formatTime","MakeStart","getValue","row","table","column","showDelayedTimes","hideTableSeconds","formatOpts","handleUpdateTimer","update","startTime","isStartLocked","displayTime","formattedTime","TimeInput","DelayIndicator","MakeEnd","endTime","isEndLocked","TimeStrategy","MakeDuration","isDurationLocked","formattedDuration","formatDuration","MakeMultiLineField","LazyImage","isOntimeDelay","canWrite","MakeSingleLineField","MakeFlagField","MakeCustomField","makeCuesheetColumns","customFields","cuesheetMode","preset","columnsDef","modeAllowsWrite","AppMode","fullRead","fullWrite","canWriteKeys","canReadKeys","_d","canRead","key","customFieldKeys","i","permissionKey","EmptyTableBody","text","EmptyImage","SortableCell","columnId","colSpan","injectedStyles","draggable","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","dragStyle","CSS","TableCell","Draggable","header","SortableCuesheetHeader","headerGroup","hideIndexColumn","usePersistedCuesheetOptions","SortableContext","horizontalListSortingStrategy","customBackground","customStyles","customColour","getAccessibleColour","flexRender","CuesheetHeader","DelayRow","virtuosoProps","delayTime","millisToDelayString","useCuesheetTableMenu","position","entryType","entryIndex","parentId","flag","EventRow","rowId","eventIndex","colour","isFirstAfterGroup","isLoaded","isPast","groupColour","skip","parent","rowIndex","openMenu","store","color","backgroundColor","tmpColour","cssOrHexToColour","mutedText","colourToHex","rowBgColour","accessibleBackgroundColor","IconButton","e","rect","yPos","SupportedEntry","IoEllipsisHorizontal","cell","GroupRow","groupId","MilestoneRow","parentBgColour","enDash","canRender","useCuesheetPermissions","permissions","CuesheetTableMenu","isOpen","closeMenu","addEntry","clone","deleteEntry","move","updateEntry","useEntryActions","showModal","PositionedDropdownMenu","IoOptions","IoDuplicateOutline","IoAdd","IoArrowUp","IoArrowDown","IoTrash","RotatedLink","linkProps","IoLink","CuesheetShareModal","infoData","useInfo","urlPresetData","useUrlPresets","handler","useDisclosure","showModalContent","Fragment","Toolbar.Button","GenerateLinkFormExport","OntimeView","CuesheetTableSettings","handleResetResizing","handleResetReordering","handleClearToggles","canShare","use","PresetContext","setCuesheetMode","useSessionStorage","sessionKeys","toggleCuesheetMode","mode","Toolbar.Root","ViewSettings","ColumnSettings","ToggleGroup","Toggle","Editor.Separator","options","Popover.Root","Popover.Trigger","IoSettingsOutline","IoChevronDown","PopoverContents","Editor.Label","Checkbox","checked","columnHeader","visible","CuesheetTable","status","useFlatRundownWithMetadata","updateTimer","selectedEventId","useSelectedEventId","virtuosoRef","useTableNav","meta","accessor","payload","isCustom","eventId","field","useReactTable","getCoreRowModel","setAllVisible","resetColumnResizing","columnSizeVars","headers","colSizes","allLeafColumns","rows","EmptyPage","TableVirtuoso","_item","HeaderComponent","CuesheetTableWrapper","customFieldStatus","useCustomFields","setPermissions","sessionScope","isLoading","CuesheetPage","isMenuOpen","menuHandler","useWindowTitle","isLocked","getIsNavigationLocked","NavigationMenu","IoApps","ProtectedCuesheet","ProtectRoute"],"mappings":"uqEAGO,SAASA,IAA6B,CACrC,KAAA,CAAE,MAAAC,CAAM,EAAIC,GAAgB,EAElC,OAAOC,UAAQ,IAAMF,EAAQ,IAAK,CAACA,CAAK,CAAC,CAC3C,CCCA,MAAeG,GAAAA,EAAAA,KAAKC,EAAgB,EACpC,SAASA,GAAiB,CAAE,SAAAC,GAA+B,CAGzD,OAFuBN,GAAkB,EAEbO,EAAAA,IAAAC,GAAA,CAAgB,SAAAF,CAAS,CAAA,EACxCC,MAAAE,GAAA,CAAiB,SAAAH,EAAS,CACzC,CAEA,SAASE,GAAe,CAAE,SAAAF,GAA+B,CAErD,OAAAI,EAAA,KAACC,GAAgB,CAAA,YAAaL,EAC5B,SAAA,CAAAC,EAAA,IAACK,GAAc,EAAA,QACdC,GAAe,CAAA,CAAA,CAAA,EAClB,CAEJ,CAEA,SAASJ,GAAgB,CAAE,SAAAH,GAA+B,CAEtD,OAAAI,EAAA,KAACC,GAAgB,CAAA,YAAaL,EAC5B,SAAA,CAAAC,EAAA,IAACO,GAAc,EAAA,QACdC,GAAW,EAAA,QACXH,GAAc,EAAA,QACdC,GAAe,EAAA,QACfG,GAAc,EAAA,QACdC,GAAc,CAAA,CAAA,CAAA,EACjB,CAEJ,CCrBwB,SAAAC,GAAoB,CAAE,QAAAC,GAAqC,CAC3E,KAAA,CAAE,KAAAC,CAAK,EAAIC,GAAW,EACtB,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAA6B,IAAI,EAgBvD,OAdJC,EAAAA,UAAU,IAAM,CACV,GAAAL,EAAK,MAAM,SAAW,EAAG,CAC3BG,EAAS,IAAI,EACb,MAAA,CAGI,MAAAG,EAAQN,EAAK,QAAQD,CAAO,EAEhCI,EADEG,GAGO,IAFK,CAGhB,EACC,CAACP,EAASC,EAAK,MAAOA,EAAK,OAAO,CAAC,EAElCO,EAAcL,CAAK,EAEnBf,EAAAA,IAAC,MAAI,CAAA,UAAWqB,GAAM,YAAa,cAAY,mBAC7C,SAACrB,EAAA,IAAAsB,GAAA,CAAY,MAAOP,CAAO,CAAA,EAC7B,EAIAQ,GAAkBR,CAAK,EAEvBf,EAAAA,IAAC,MAAI,CAAA,UAAWqB,GAAM,QAAS,cAAY,mBACzC,SAACrB,EAAA,IAAAwB,GAAA,CAAgB,UAAWT,CAAO,CAAA,EACrC,EAIAU,GAAcV,CAAK,EAEnBf,EAAAA,IAAC,MAAI,CAAA,UAAWqB,GAAM,QAAS,cAAY,mBACzC,SAACrB,EAAA,IAAA0B,GAAA,CAAY,MAAOX,CAAO,CAAA,EAC7B,EAIG,IACT,CCjDa,MAAAY,GAAuBC,GAA4BC,IAAS,CACvE,gBAAiB,KACjB,iBAAmBjB,GAAqBiB,EAAI,CAAE,gBAAiBjB,EAAS,EACxE,eAAgB,IAAMiB,EAAI,CAAE,gBAAiB,IAAM,CAAA,CACrD,EAAE,ECNahC,GAAAA,EAAAA,KAAKiC,EAAiB,EACrC,SAASA,IAAoB,CAC3B,MAAMlB,EAAUe,GAAsBI,GAAUA,EAAM,eAAe,EAC/DC,EAAaL,GAAsBI,GAAUA,EAAM,cAAc,EAEvE,OAAInB,IAAY,KACP,KAIPZ,EAAA,IAACiC,GAAA,CACC,OAAM,GACN,QAASD,EACT,MAAM,aACN,gBAAe,GACf,aAAehC,EAAA,IAAAW,GAAA,CAAoB,QAAAC,CAAkB,CAAA,CAAA,CACvD,CAEJ,gECnBA,SAAwBsB,IAAmB,CACnC,KAAA,CAAE,KAAArB,CAAK,EAAIsB,GAAgB,EAC3B,CAAE,QAAAC,EAAS,SAAAC,EAAU,YAAAC,EAAa,WAAAC,CAAA,EAAeC,GAAgB,EAGrE,OAAAxC,EAAA,IAACyC,GAAA,CACC,IAAKL,EACL,SAAUC,EACV,YAAaxB,EAAK,YAClB,QAASyB,EACT,aAAczB,EAAK,aACnB,OAAQ0B,EACR,YAAa1B,EAAK,YAClB,UAAW6B,GAAO,iBAClB,kBAAiB,EAAA,CACnB,CAEJ,CCvBgB,SAAAC,GAA0BC,EAAgCC,EAAc,CAClF,IAAAC,EACJ,MAAO,IAAIC,IAAY,CACjBD,GACF,aAAaA,CAAO,EAEtBA,EAAU,WAAW,IAAM,CACfA,EAAA,KACVF,EAAS,GAAGG,CAAI,GACfF,CAAI,CACT,CACF,CCHA,MAAMG,GAAgBC,GAAa,gBAAgB,EAC7CC,GAAiBD,GAAa,iBAAiB,EAC/CE,GAAgBF,GAAa,gBAAgB,EAE7CG,GAAqBT,GAAUU,GAAkC,CACrE,aAAa,QAAQL,GAAe,KAAK,UAAUK,CAAK,CAAC,CAC3D,EAAG,GAAG,EAEC,SAASC,IAAiB,CAC/B,KAAM,CAACC,EAAcC,CAAoB,EAAIvC,WAAiC,IAAM,CAC9E,GAAA,CACI,MAAAwC,EAAS,aAAa,QAAQT,EAAa,EACjD,OAAOS,EAAS,KAAK,MAAMA,CAAM,EAAI,CAAC,CAAA,MAChC,CACN,MAAO,CAAC,CAAA,CACV,CACD,EAGDvC,EAAAA,UAAU,IAAM,CACdkC,GAAmBG,CAAY,CAAA,EAC9B,CAACA,CAAY,CAAC,EAEX,MAAAG,EAAkBC,cAAaC,GAA+C,CAClFJ,EAAqBI,CAAc,CACrC,EAAG,EAAE,EAEE,MAAA,CACL,aAAAL,EACA,gBAAAG,CACF,CACF,CAEO,SAASG,GAAeC,EAAqC,CAClE,KAAM,CAACC,EAAaC,CAAe,EAAIC,GAA0B,CAC/D,IAAKd,GACL,aAAcW,EAAQ,IAAKI,GAAQA,EAAI,EAAY,CAAA,CACpD,EAGDhD,EAAAA,UAAU,IAAM,CACd,MAAMiD,EAAaL,EAAQ,IAAKI,GAAQA,EAAI,EAAY,EACpDC,EAAW,KAAMC,GAAO,CAACL,EAAY,SAASK,CAAE,CAAC,GACnDJ,EAAgBG,CAAU,CAE3B,EAAA,CAACJ,EAAaD,EAASE,CAAe,CAAC,EAEpC,MAAAK,EAAmBV,EAAAA,YAAY,IAAM,CACzCK,EAAgBF,EAAQ,IAAKI,GAAQA,EAAI,EAAY,CAAC,CAAA,EACrD,CAACJ,EAASE,CAAe,CAAC,EAEtB,MAAA,CACL,YAAAD,EACA,gBAAAC,EACA,iBAAAK,CACF,CACF,CAEO,SAASC,IAAsB,CACpC,KAAM,CAACC,EAAkBC,CAAmB,EAAIP,GAAgB,CAC9D,IAAKf,GACL,aAAc,CAAA,CAAC,CAChB,EAEM,MAAA,CACL,iBAAAqB,EACA,oBAAAC,CACF,CACF,CCzDA,SAAwBC,GAAY,CAAE,QAAAX,EAAS,SAAA/D,GAAiD,CAC9F,KAAM,CAAE,YAAAgE,EAAa,gBAAAC,GAAoBH,GAAeC,CAAO,EAEzDY,EAAUC,GACdC,GAAUC,GAAe,CACvB,qBAAsB,CACpB,MAAO,IACP,UAAW,EAAA,CACb,CACD,EACDD,GAAUE,GAAa,CACrB,qBAAsB,CACpB,MAAO,IACP,UAAW,EAAA,CAEd,CAAA,CACH,EAEMC,EAAmB5D,GAAwB,CAC/C,KAAM,CAAE,MAAA6D,EAAO,OAAAC,EAAQ,KAAAC,CAAS,EAAA/D,EAK5B,GAFA6D,EAAM,EAAI,MAEVE,GAAA,YAAAA,EAAM,KAAM,KAAM,OAGtB,MAAMC,EAAYpB,EAAY,QAAQkB,EAAO,EAAY,EAGnDG,EAAUrB,EAAY,QAAQmB,EAAK,EAAY,EAErD,GAAIE,IAAY,GACd,OAGI,MAAAC,EAAgB,CAAC,GAAGtB,CAAW,EAC/BuB,EAAgBD,EAAc,OAAOF,EAAW,CAAC,EACvDE,EAAc,OAAOD,EAAS,EAAGE,EAAc,CAAC,CAAC,EACjDtB,EAAgBqB,CAAa,CAC/B,EAEA,aACGE,GAAW,CAAA,QAAAb,EAAkB,mBAAoBc,GAAgB,UAAWT,EAC1E,SAAAhF,EACH,CAEJ,CCtDA,MAAM0F,GAAiBC,EAAA,WACrB,CAAC,CAAE,aAAAC,EAAc,qBAAAC,EAAsB,aAAAC,EAAc,mBAAAC,CAAA,EAA2CC,IAAa,CACrG,MAAAC,EAAMC,SAAgC,IAAI,EAC1CC,EAAiBvC,cAAawC,GAAqBN,EAAaM,CAAQ,EAAG,CAACN,CAAY,CAAC,EAEzF,CAAE,MAAAO,EAAO,SAAAC,EAAU,OAAAC,EAAQ,UAAAC,CAAc,EAAAC,GAAqBb,EAAcO,EAAgBF,EAAK,CACrG,qBAAAJ,EACA,wBAAyB,GACzB,cAAe,GACf,kBAAmB,GACnB,eAAgBE,CAAA,CACjB,EAGDW,OAAAA,EAAA,oBAAoBV,EAAU,KACrB,CACL,OAAQ,QACNW,EAAAV,EAAI,UAAJ,MAAAU,EAAa,OACf,EACA,QAAS,QACPA,EAAAV,EAAI,UAAJ,MAAAU,EAAa,QACf,EACA,oBAAqB,UACfC,GAAAD,EAAAV,EAAA,UAAA,YAAAU,EAAS,gBAAT,MAAAC,EAAwB,OAAM,CAEtC,GACC,CAACX,CAAG,CAAC,EAGNhG,EAAA,IAAC4G,GAAA,CACC,IAAAZ,EACA,QAAQ,UACR,MAAK,GACL,MAAAI,EACA,SAAAC,EACA,OAAAC,EACA,UAAAC,CAAA,CACF,CAAA,CAGN,EAEAd,GAAe,YAAc,iBAE7B,MAAe5F,GAAAA,EAAAA,KAAK4F,EAAc,ECvCnB5F,GAAAA,EAAAA,KAAKgH,EAAa,EAEjC,SAASA,GAAc,CACrB,aAAAlB,EACA,YAAAmB,EACA,QAAAC,EACA,SAAAC,EACA,SAAAjH,CACF,EAA0C,CACxC,KAAM,CAACkH,EAAWC,CAAY,EAAIjG,EAAAA,SAAS,EAAK,EAC1C,CAACmF,EAAOe,CAAQ,EAAIlG,EAAAA,SAAS0E,CAAY,EACzCI,EAAWE,SAA6B,IAAI,EAC5CmB,EAAUnB,SAA6B,IAAI,EAGjD/E,EAAAA,UAAU,IAAM,CACV+F,GAAalB,EAAS,UACxBA,EAAS,QAAQ,MAAM,EACvBA,EAAS,QAAQ,OAAO,EAC1B,EACC,CAACkB,CAAS,CAAC,EAGd/F,EAAAA,UAAU,IAAM,CACT+F,GACHE,EAASxB,CAAY,CACvB,EACC,CAACA,EAAcsB,CAAS,CAAC,EAEtB,MAAAI,EAAkB,IAAMH,EAAa,EAAI,EACzCI,EAAiB,IAAM,CAC3BJ,EAAa,EAAK,EAClB,WAAW,IAAM,OAAA,OAAAR,EAAAU,EAAQ,UAAR,YAAAV,EAAiB,qBAAoB,CACxD,EAEMb,EAAelC,EAAA,YAClBwC,GAAqB,WAIpB,GAHAe,EAAa,EAAK,EAGdf,IAAa,GAAI,CACnBa,EAASb,CAAQ,GACjBO,EAAAX,EAAS,UAAT,MAAAW,EAAkB,qBAClB,MAAA,CAIF,GAAIP,EAAS,WAAW,GAAG,GAAKA,EAAS,WAAW,GAAG,EAAG,CACxDa,EAASb,CAAQ,GACjBQ,EAAAZ,EAAS,UAAT,MAAAY,EAAkB,qBAClB,MAAA,CAGI,MAAAY,EAAgBC,GAAcrB,CAAQ,EAC5C,GAAIoB,EAAgB,GAAK,MAAMA,CAAa,EAAG,CAC7CJ,EAASxB,CAAY,EACrB,WAAW,IAAM,OAAA,OAAAe,EAAAU,EAAQ,UAAR,YAAAV,EAAiB,qBAAoB,EACtD,MAAA,CAIE,GAAAa,IAAkB5B,GAAgBmB,EAAa,EACjDW,EAAA1B,EAAS,UAAT,MAAA0B,EAAkB,qBAClB,MAAA,CAGFT,EAASb,CAAQ,EACRgB,EAAA,OAAOhB,CAAQ,CAAC,EACzB,WAAW,IAAM,OAAA,OAAAO,EAAAU,EAAQ,UAAR,YAAAV,EAAiB,qBAAoB,CACxD,EACA,CAACf,EAAcmB,EAAaE,CAAQ,CACtC,EAEMU,EAAaC,EAAevB,CAAK,EAEvC,OAAOa,EACLjH,EAAA,IAACyF,GAAA,CACC,IAAKM,EACL,aAAc2B,EACd,qBAAsB,CAACZ,EACvB,aAAAjB,EACA,mBAAoByB,CAAA,CAAA,EAGtBtH,EAAA,IAAC4H,GAAA,CACC,QAASP,EACT,QAASA,EACT,MAAO,CAACP,EACR,OAAQC,EAAU,OAAS,OAC3B,IAAKK,EAEJ,SAAArH,CAAA,CACH,CAEJ,yJClGeF,GAAAA,EAAAA,KAAKgI,EAAa,EAEjC,SAASA,GAAc,CAAE,aAAAlC,EAAc,SAAAmC,EAAU,YAAAC,GAAmC,CAC5E,MAAAlC,EAAgBM,GAAqB,CACrCA,IAAaR,IAGbQ,IAAa,IAAM,CAACA,EAAS,WAAW,MAAM,GAGlD4B,EAAY5B,CAAQ,EACtB,EAEM6B,EAAe,IAAM,CACrBrC,GACK,OAAA,KAAKA,EAAc,SAAU,qBAAqB,CAE7D,EAEA,OAAKA,EAsBFxF,EAAAA,KAAA,MAAA,CAAI,UAAWkB,EAAM,UACnB,SAAA,CAAA,CAACyG,GACA3H,EAAAA,KAAC,MAAI,CAAA,UAAWkB,EAAM,QACpB,SAAA,CAACrB,EAAA,IAAAiI,EAAA,CAAO,QAASD,EAAc,SAAO,UAAA,EACtChI,EAAAA,IAACiI,GAAO,QAAQ,qBAAqB,QAAS,IAAMpC,EAAa,EAAE,EAAG,SAEtE,QAAA,CAAA,CAAA,EACF,EAED,EAAQF,GAAkB3F,EAAA,IAAA,MAAA,CAAI,QAAQ,OAAO,IAAK2F,EAAc,UAAWtE,EAAM,KAAO,CAAA,CAAA,EAC3F,EA9BErB,EAAA,IAAC4G,GAAA,CACC,QAAQ,UACR,UAAWvF,EAAM,WACjB,MAAK,GACL,SAAAyG,EAEA,SAAUA,EACV,YAAY,kBACZ,OAAS3G,GAAU0E,EAAa1E,EAAM,cAAc,KAAK,EACzD,UAAYA,GAAU,CAChBA,EAAM,MAAQ,SACH0E,EAAA1E,EAAM,cAAc,KAAK,CAE1C,EACA,aAAcwE,CAAA,CAChB,CAiBN,wCC9DA,SAAwBuC,IAAW,CACjC,aACG,MAAI,CAAA,UAAW7G,GAAM,KACpB,SAAArB,EAAA,IAACmI,KAAa,CAChB,CAAA,CAEJ,4FCFA,SAAwBC,GAAY,CAAE,SAAArI,EAAU,UAAAsI,GAAkD,CAChG,OAAQrI,EAAAA,IAAA,MAAA,CAAI,UAAW,GAAGqB,GAAM,WAAW,IAAIgH,EAAYhH,GAAM,UAAY,EAAE,GAAK,SAAAtB,CAAS,CAAA,CAC/F,CCAA,MAAeF,GAAAA,EAAAA,KAAKyI,EAAa,EAEjC,SAASA,GAAc,CAAE,aAAA3C,EAAc,aAAAE,GAAoC,CACnE,MAAAG,EAAMC,SAAmC,IAAI,EAC7CC,EAAiBvC,cAAawC,GAAqBN,EAAaM,CAAQ,EAAG,CAACN,CAAY,CAAC,EAEzF,CAAE,MAAAO,EAAO,SAAAC,EAAU,OAAAC,EAAQ,UAAAC,CAAc,EAAAC,GAAqBb,EAAcO,EAAgBF,EAAK,CACrG,kBAAmB,GACnB,wBAAyB,EAAA,CAC1B,EAGC,OAAAhG,EAAA,IAACuI,GAAA,CACC,SAAUvC,EACV,QAAQ,UACR,MAAK,GACL,KAAM,EACN,MAAAI,EACA,SAAAC,EACA,OAAAC,EACA,UAAAC,EACA,WAAY,EAAA,CACd,CAEJ,4ECxBA,SAAwBiC,EAAU,CAAE,QAAAC,EAAS,SAAA1I,GAA+C,CAC1F,OAAQC,EAAA,IAAA,OAAA,CAAK,UAAW0I,GAAG,CAACrH,GAAM,MAAOoH,GAAWpH,GAAM,OAAO,CAAC,EAAI,SAAAtB,CAAS,CAAA,CACjF,CCOA,MAAeF,GAAAA,EAAAA,KAAK8I,EAAiB,EAErC,SAASA,GAAkB,CACzB,aAAAhD,EACA,YAAAmB,EACA,QAAAC,EACA,SAAAC,EACA,SAAAjH,CACF,EAA8C,CAC5C,KAAM,CAACkH,EAAWC,CAAY,EAAIjG,EAAAA,SAAS,EAAK,EAC1C,CAACmF,EAAOe,CAAQ,EAAIlG,EAAAA,SAAS0E,CAAY,EACzCI,EAAWE,SAA6B,IAAI,EAC5CmB,EAAUnB,SAA6B,IAAI,EAGjD/E,EAAAA,UAAU,IAAM,CACV+F,GAAalB,EAAS,UACxBA,EAAS,QAAQ,MAAM,EACvBA,EAAS,QAAQ,OAAO,EAC1B,EACC,CAACkB,CAAS,CAAC,EAGd/F,EAAAA,UAAU,IAAM,CACT+F,GACHE,EAASxB,CAAY,CACvB,EACC,CAACA,EAAcsB,CAAS,CAAC,EAEtB,MAAAI,EAAkB,IAAMH,EAAa,EAAI,EACzCI,EAAiB,IAAM,CAC3BJ,EAAa,EAAK,EAClB,WAAW,IAAM,OAAA,OAAAR,EAAAU,EAAQ,UAAR,YAAAV,EAAiB,qBAAoB,CACxD,EAEMb,EAAelC,EAAA,YAClBwC,GAAqB,WAIpB,GAHAe,EAAa,EAAK,EAGdf,IAAa,GAAI,CACnBa,EAASb,CAAQ,GACjBO,EAAAX,EAAS,UAAT,MAAAW,EAAkB,qBAClB,MAAA,CAIF,GAAIP,EAAS,WAAW,GAAG,GAAKA,EAAS,WAAW,GAAG,EAAG,CACxDa,EAASb,CAAQ,GACjBQ,EAAAZ,EAAS,UAAT,MAAAY,EAAkB,qBAClB,MAAA,CAGI,MAAAY,EAAgBC,GAAcrB,CAAQ,EAC5C,GAAIoB,EAAgB,GAAK,MAAMA,CAAa,EAAG,CAC7CJ,EAASxB,CAAY,EACrB,WAAW,IAAM,OAAA,OAAAe,EAAAU,EAAQ,UAAR,YAAAV,EAAiB,qBAAoB,EACtD,MAAA,CAIE,GAAAa,IAAkB5B,GAAgBmB,EAAa,EACjDW,EAAA1B,EAAS,UAAT,MAAA0B,EAAkB,qBAClB,MAAA,CAGFT,EAASb,CAAQ,EACRgB,EAAA,OAAOhB,CAAQ,CAAC,EACzB,WAAW,IAAM,OAAA,OAAAO,EAAAU,EAAQ,UAAR,YAAAV,EAAiB,qBAAoB,CACxD,EACA,CAACf,EAAcmB,EAAaE,CAAQ,CACtC,EAEMU,EAAakB,EAAWxC,CAAK,EAEnC,OAAOa,EACLjH,EAAA,IAACyF,GAAA,CACC,IAAKM,EACL,aAAc2B,EACd,qBAAsB,CAACZ,EACvB,aAAAjB,EACA,mBAAoByB,CAAA,CAAA,EAGtBtH,EAAA,IAAC4H,GAAA,CACC,QAASP,EACT,QAASA,EACT,MAAO,CAACP,EACR,OAAQC,EAAU,OAAS,OAC3B,IAAKK,EAEJ,SAAArH,CAAA,CACH,CAEJ,CC9FA,SAAS8I,GAAU,CAAE,SAAAC,EAAU,IAAAC,EAAK,MAAAC,EAAO,OAAAC,GAA+C,OACpF,GAAA,CAACD,EAAM,QAAQ,KACV,OAAA,KAGT,KAAM,CAAE,iBAAAE,EAAkB,iBAAAC,CAAA,EAAqBH,EAAM,QAAQ,KAAK,QAC5DI,EAAaD,EAAmB,CAAE,SAAU,UAAW,SAAU,SAAY,OAE7EhI,EAAQ4H,EAAI,SACd,GAAA,CAAC3H,EAAcD,CAAK,EACf,OAAAnB,MAACwI,GAAU,QAAO,GAAE,WAAWM,EAAS,EAAaM,CAAU,EAAE,EAG1E,KAAM,CAAE,kBAAAC,CAAA,EAAsBL,EAAM,QAAQ,KAEtCM,EAAUnD,GAAqBkD,EAAkBN,EAAI,SAAS,GAAI,YAAa5C,CAAQ,EAEvFoD,EAAYT,EAAS,EACrBU,EAAgB,CAACrI,EAAM,UACvBsI,EAAcP,EAAmBK,EAAYpI,EAAM,MAAQoI,EAC3DG,EAAgBd,EAAWa,EAAaL,CAAU,EAGxD,QADiB1C,EAAAuC,EAAO,UAAU,OAAjB,YAAAvC,EAAuB,UAUtCvG,EAAA,KAACwJ,GAAU,CAAA,aAAcJ,EAAW,SAAUD,EAAQ,YAAaE,EAAe,QAASrI,EAAM,QAAU,EACxG,SAAA,CAAAuI,EACD1J,MAAC4J,GAAe,WAAYzI,EAAM,MAAO,cAAewG,EAAe4B,CAAS,CAAG,CAAA,CAAA,EACrF,EAVEpJ,EAAA,KAACqI,EAAU,CAAA,QAAO,GACf,SAAA,CAAAkB,EACD1J,MAAC4J,GAAe,WAAYzI,EAAM,MAAO,cAAewG,EAAe4B,CAAS,CAAG,CAAA,CAAA,EACrF,CASN,CAEA,SAASM,GAAQ,CAAE,SAAAf,EAAU,IAAAC,EAAK,MAAAC,EAAO,OAAAC,GAA+C,OAClF,GAAA,CAACD,EAAM,QAAQ,KACV,OAAA,KAGT,KAAM,CAAE,iBAAAE,EAAkB,iBAAAC,CAAA,EAAqBH,EAAM,QAAQ,KAAK,QAC5DI,EAAaD,EAAmB,CAAE,SAAU,UAAW,SAAU,SAAY,OAE7EhI,EAAQ4H,EAAI,SACd,GAAA,CAAC3H,EAAcD,CAAK,EACf,OAAAnB,MAACwI,GAAU,QAAO,GAAE,WAAWM,EAAS,EAAaM,CAAU,EAAE,EAG1E,KAAM,CAAE,kBAAAC,CAAA,EAAsBL,EAAM,QAAQ,KAEtCM,EAAUnD,GAAqBkD,EAAkBN,EAAI,SAAS,GAAI,UAAW5C,CAAQ,EAErF2D,EAAUhB,EAAS,EACnBiB,EAAc5I,EAAM,eAAiB6I,GAAa,QAClDP,EAAcP,EAAmBY,EAAU3I,EAAM,MAAQ2I,EACzDJ,EAAgBd,EAAWa,EAAaL,CAAU,EAGxD,QADiB1C,EAAAuC,EAAO,UAAU,OAAjB,YAAAvC,EAAuB,UAWtCvG,EAAA,KAACwJ,GAAU,CAAA,aAAcG,EAAS,SAAUR,EAAQ,YAAaS,EAAa,QAAS5I,EAAM,QAAU,EACpG,SAAA,CAAAuI,EACD1J,MAAC4J,GAAe,WAAYzI,EAAM,MAAO,cAAewG,EAAemC,CAAO,CAAG,CAAA,CAAA,EACnF,EAXE3J,EAAA,KAACqI,EAAU,CAAA,QAAO,GACf,SAAA,CAAAkB,EACD1J,MAAC4J,GAAe,WAAYzI,EAAM,MAAO,cAAewG,EAAemC,CAAO,CAAG,CAAA,CAAA,EACnF,CAUN,CAEA,SAASG,GAAa,CAAE,SAAAnB,EAAU,IAAAC,EAAK,MAAAC,EAAO,OAAAC,GAA+C,OACvF,GAAA,CAACD,EAAM,QAAQ,KACV,OAAA,KAGT,KAAM,CAAE,iBAAAG,CAAqB,EAAAH,EAAM,QAAQ,KAAK,QAC1C7H,EAAQ4H,EAAI,SACd,GAAA,CAAC3H,EAAcD,CAAK,EACf,OAAAnB,MAACwI,GAAU,QAAO,GAAE,YAAeM,EAAS,EAAaK,CAAgB,EAAE,EAGpF,KAAM,CAAE,kBAAAE,CAAA,EAAsBL,EAAM,QAAQ,KAEtCM,EAAUnD,GAAqBkD,EAAkBN,EAAI,SAAS,GAAI,WAAY5C,CAAQ,EAEtF9D,EAAWyG,EAAS,EACpBoB,EAAmB/I,EAAM,eAAiB6I,GAAa,aACvDG,EAAoBC,GAAe/H,EAAU8G,CAAgB,EAGnE,QADiBzC,EAAAuC,EAAO,UAAU,OAAjB,YAAAvC,EAAuB,UAMtC1G,MAAC6G,IAAc,aAAcxE,EAAU,SAAUiH,EAAQ,YAAaY,EACnE,SACHC,CAAA,CAAA,EANQnK,EAAAA,IAAAwI,EAAA,CAAU,QAAO,GAAE,SAAkB2B,EAAA,CAQjD,CAEA,SAASE,GAAmB,CAAE,IAAAtB,EAAK,OAAAE,EAAQ,MAAAD,GAA8C,OACvF,MAAMM,EAAS3F,EAAA,YACZwC,GAAqB,QACdO,EAAAsC,EAAA,QAAQ,OAAR,MAAAtC,EAAc,aAAaqC,EAAI,MAAOE,EAAO,GAAI9C,EAAU,GACnE,EACA,CAAC8C,EAAO,GAAIF,EAAI,MAAOC,EAAM,QAAQ,IAAI,CAC3C,EAGMrD,EAAeoD,EAAI,SAASE,EAAO,EAAyB,EAC9D,OAAA,OAAOtD,GAAiB,SACnB,OAGQe,EAAAuC,EAAO,UAAU,OAAjB,YAAAvC,EAAuB,UAKhC1G,EAAAA,IAAAsI,GAAA,CAAc,aAAA3C,EAAsC,aAAc2D,CAAQ,CAAA,EAHxEtJ,EAAAA,IAAAoI,GAAA,CAAY,UAAS,GAAE,SAAazC,EAAA,CAIhD,CAEA,SAAS2E,GAAU,CAAE,IAAAvB,EAAK,OAAAE,EAAQ,MAAAD,GAA8C,OAC9E,MAAMM,EAAS3F,EAAA,YACZwC,GAAqB,QACdO,EAAAsC,EAAA,QAAQ,OAAR,MAAAtC,EAAc,aAAaqC,EAAI,MAAOE,EAAO,GAAI9C,EAAU,GACnE,EACA,CAAC8C,EAAO,GAAIF,EAAI,MAAOC,EAAM,QAAQ,IAAI,CAC3C,EAEM7H,EAAQ4H,EAAI,SACd,GAAAwB,GAAcpJ,CAAK,EACd,OAAA,KAGH,MAAAqJ,GAAW9D,EAAAuC,EAAO,UAAU,OAAjB,YAAAvC,EAAuB,SAClCf,EAAexE,EAAM,OAAO8H,EAAO,EAAE,EAC3C,aAAQpB,GAAc,CAAA,aAAAlC,EAA4B,YAAa2D,EAAQ,SAAU,CAACkB,EAAU,CAC9F,CAEA,SAASC,GAAoB,CAAE,IAAA1B,EAAK,OAAAE,EAAQ,MAAAD,GAA8C,OACxF,MAAMM,EAAS3F,EAAA,YACZwC,GAAqB,QACdO,EAAAsC,EAAA,QAAQ,OAAR,MAAAtC,EAAc,aAAaqC,EAAI,MAAOE,EAAO,GAAI9C,EAAU,GACnE,EACA,CAAC8C,EAAO,GAAIF,EAAI,MAAOC,EAAM,QAAQ,IAAI,CAC3C,EAGMrD,EAAeoD,EAAI,SAASE,EAAO,EAAyB,EAC9D,OAAA,OAAOtD,GAAiB,SACnB,OAGQe,EAAAuC,EAAO,UAAU,OAAjB,YAAAvC,EAAuB,UAKhC1G,EAAAA,IAAAyF,GAAA,CAAe,aAAAE,EAAsC,aAAc2D,CAAQ,CAAA,EAH1EtJ,EAAA,IAACoI,IAAa,SAAazC,CAAA,CAAA,CAItC,CAEA,SAAS+E,GAAc,CAAE,IAAA3B,GAA4C,CACnE,MAAM5H,EAAQ4H,EAAI,SAClB,MAAI,CAAC3H,EAAcD,CAAK,GAAK,CAACA,EAAM,KAC3B,WAED+G,GAAS,EAAA,CACnB,CAEA,SAASyC,GAAgB,CAAE,IAAA5B,EAAK,OAAAE,EAAQ,MAAAD,GAA8C,OACpF,MAAMM,EAAS3F,EAAA,YACZwC,GAAqB,QACdO,EAAAsC,EAAA,QAAQ,OAAR,MAAAtC,EAAc,aAAaqC,EAAI,MAAOE,EAAO,GAAI9C,EAAU,GACnE,EACA,CAAC8C,EAAO,GAAIF,EAAI,MAAOC,EAAM,QAAQ,IAAI,CAC3C,EAEM7H,EAAQ4H,EAAI,SACd,GAAAwB,GAAcpJ,CAAK,EACd,OAAA,KAKT,MAAMwE,EAAexE,EAAM,OAAO8H,EAAO,EAAE,GAAK,GAGhD,QADiBvC,EAAAuC,EAAO,UAAU,OAAjB,YAAAvC,EAAuB,UAKhC1G,EAAAA,IAAAsI,GAAA,CAAc,aAAA3C,EAA4B,aAAc2D,CAAQ,CAAA,EAH9DtJ,EAAAA,IAAAoI,GAAA,CAAY,UAAS,GAAE,SAAazC,EAAA,CAIhD,CAMgB,SAAAiF,GACdC,EACAC,EACAC,EAC4B,aAC5B,MAAMC,EAAyC,CAAC,EAC1CC,EAAkBH,IAAiBI,EAAQ,KAC3CC,EAAWJ,IAASrE,EAAAqE,EAAO,UAAP,YAAArE,EAAgB,QAAS,OAAS,GACtD0E,EAAYL,IAASpE,EAAAoE,EAAO,UAAP,YAAApE,EAAgB,SAAU,OAAS,GACxD0E,GAAe5D,EAAAsD,GAAA,YAAAA,EAAQ,UAAR,MAAAtD,EAAiB,MAAQ,IAAI,IAAIsD,EAAO,QAAQ,MAAM,MAAM,GAAG,CAAC,MAAQ,IACvFO,GAAcC,EAAAR,GAAA,YAAAA,EAAQ,UAAR,MAAAQ,EAAiB,KAAO,IAAI,IAAIR,EAAO,QAAQ,KAAK,MAAM,GAAG,CAAC,MAAQ,IAGpFS,EAAWC,GAAgBN,GAAYG,EAAY,IAAIG,CAAG,EAC1DjB,EAAYiB,GAAgBR,IAAoBG,GAAaC,EAAa,IAAII,CAAG,GAEnFD,EAAQ,MAAM,GAChBR,EAAW,KAAK,CACd,YAAa,OACb,GAAI,OACJ,OAAQ,OACR,KAAMN,GACN,KAAM,GACN,QAAS,GACT,KAAM,CAAE,SAAUF,EAAS,MAAM,CAAE,CAAA,CACpC,EAGCgB,EAAQ,KAAK,GACfR,EAAW,KAAK,CACd,YAAa,MACb,GAAI,MACJ,OAAQ,MACR,KAAMP,GACN,KAAM,GACN,QAAS,GACT,KAAM,CAAE,SAAUD,EAAS,KAAK,CAAE,CAAA,CACnC,EAGCgB,EAAQ,WAAW,GACrBR,EAAW,KAAK,CACd,YAAa,YACb,GAAI,YACJ,OAAQ,QACR,KAAMnC,GACN,KAAM,GACN,QAAS,GACT,KAAM,CAAE,SAAU2B,EAAS,WAAW,CAAE,CAAA,CACzC,EAGCgB,EAAQ,SAAS,GACnBR,EAAW,KAAK,CACd,YAAa,UACb,GAAI,UACJ,OAAQ,MACR,KAAMnB,GACN,KAAM,GACN,QAAS,GACT,KAAM,CAAE,SAAUW,EAAS,SAAS,CAAE,CAAA,CACvC,EAGCgB,EAAQ,UAAU,GACpBR,EAAW,KAAK,CACd,YAAa,WACb,GAAI,WACJ,OAAQ,WACR,KAAMf,GACN,KAAM,GACN,QAAS,GACT,KAAM,CAAE,SAAUO,EAAS,UAAU,CAAE,CAAA,CACxC,EAGCgB,EAAQ,OAAO,GACjBR,EAAW,KAAK,CACd,YAAa,QACb,GAAI,QACJ,OAAQ,QACR,KAAMP,GACN,KAAM,IACN,QAAS,GACT,KAAM,CAAE,SAAUD,EAAS,OAAO,CAAE,CAAA,CACrC,EAGCgB,EAAQ,MAAM,GAChBR,EAAW,KAAK,CACd,YAAa,OACb,GAAI,OACJ,OAAQ,OACR,KAAMX,GACN,KAAM,IACN,QAAS,GACT,KAAM,CAAE,SAAUG,EAAS,MAAM,CAAE,CAAA,CACpC,EAIG,MAAAkB,EAAkB,OAAO,KAAKb,CAAY,EAEhD,QAASc,EAAI,EAAGA,EAAID,EAAgB,OAAQC,IAAK,CACzC,MAAAF,EAAMC,EAAgBC,CAAC,EACvBC,EAAgB,UAAUH,CAAG,GAC9BD,EAAQI,CAAa,GAC1BZ,EAAW,KAAK,CACd,YAAaS,EACb,GAAIA,EACJ,OAAQZ,EAAaY,CAAG,EAAE,MAC1B,KAAMZ,EAAaY,CAAG,EAAE,OAAS,OAASd,GAAkBL,GAC5D,KAAM,IACN,QAAS,GACT,KAAM,CACJ,OAAQO,EAAaY,CAAG,EAAE,OAC1B,SAAUjB,EAASoB,CAAa,CAAA,CAClC,CACD,CAAA,CAGI,OAAAZ,CACT,2JCtVwB,SAAAa,GAAe,CAAE,KAAAC,GAA6B,CACpE,OACG9L,EAAA,IAAA,QAAA,CAAM,UAAWqB,EAAM,eACtB,SAAArB,EAAAA,IAAC,KACC,CAAA,SAAAG,EAAA,KAAC,KAAG,CAAA,QAAS,GAAI,UAAWkB,EAAM,UAChC,SAAA,CAACrB,EAAAA,IAAA+L,GAAA,CAAW,UAAW1K,EAAM,KAAO,CAAA,EACnCyK,GAAS9L,EAAAA,IAAA,OAAA,CAAK,UAAWqB,EAAM,KAAO,SAAKyK,CAAA,CAAA,CAAA,CAC9C,CAAA,CACF,CAAA,EACF,CAEJ,iNCFO,SAASE,GAAa,CAAE,SAAAC,EAAU,QAAAC,EAAS,eAAAC,EAAgB,SAAApM,EAAU,UAAAqM,GAAgC,CACpG,KAAA,CAAE,WAAAC,EAAY,UAAAC,EAAW,WAAAC,EAAY,UAAAC,EAAW,WAAAC,EAAY,WAAAC,GAAeC,GAAY,CAC3F,GAAIV,CAAA,CACL,EAGKW,EAAY,CAChB,GAAGT,EACH,OAAQO,EAAa,EAAI,UACzB,UAAWG,GAAI,UAAU,SAASL,CAAS,EAC3C,WAAAC,CACF,EAGE,OAAAtM,OAAC,MAAG,IAAKoM,EAAY,MAAOK,EAAW,QAAAV,EAAkB,SAAU,GACjE,SAAA,CAAAlM,EAAA,IAAC,MAAK,CAAA,GAAGqM,EAAa,GAAGC,EACtB,SAAAvM,EACH,EACCqM,CAAA,EACH,CAEJ,CAEO,SAASU,GAAU,CAAE,QAAAZ,EAAS,eAAAC,EAAgB,SAAApM,EAAU,UAAAqM,GAAgC,CAC7F,cACG,KAAG,CAAA,MAAOD,EAAgB,QAAAD,EAAkB,SAAU,GACrD,SAAA,CAAAlM,MAAC,OAAK,SAAAD,EAAS,EACdqM,CAAA,EACH,CAEJ,CAMgB,SAAAW,GAAU,CAAE,OAAAC,GAA0B,CAElD,OAAAhN,EAAA,IAAC,MAAA,CACC,cAAe,IAAMgN,EAAO,OAAO,UAAU,EAC7C,YAAaA,EAAO,iBAAiB,EACrC,aAAcA,EAAO,iBAAiB,EACtC,UAAW3L,EAAM,OAAA,CACnB,CAEJ,CC5CO,SAAS4L,GAAuB,CAAE,YAAAC,EAAa,aAAApC,GAAqC,CACzF,MAAMqC,EAAkBC,EAA6BrL,GAAUA,EAAM,eAAe,EAEpF,cACG,KACE,CAAA,SAAA,CAAiB+I,IAAAI,EAAQ,MAASlL,EAAAA,IAAA,KAAA,CAAG,UAAWqB,EAAM,aAAc,SAAU,EAAI,CAAA,EAClF,CAAC8L,GACCnN,EAAAA,IAAA,KAAA,CAAG,UAAWqB,EAAM,YAAa,SAAU,GAAI,SAEhD,GAAA,CAAA,EAEFrB,EAAAA,IAACqN,GAAqC,CAAA,MAAOH,EAAY,QAAS,SAAUI,GACzE,SAAYJ,EAAA,QAAQ,IAAKF,GAAW,SACnC,MAAMO,GAAmB7G,EAAAsG,EAAO,OAAO,UAAU,OAAxB,YAAAtG,EAA8B,OAGjD8G,EAA8B,CAClC,UAHe7G,EAAAqG,EAAO,OAAO,UAAU,OAAxB,YAAArG,EAA8B,UAGzB,EAAI,EAC1B,EACA,GAAI4G,EAAkB,CACd,MAAAE,EAAeC,EAAoBH,CAAgB,EACzDC,EAAa,gBAAkBC,EAAa,gBAC5CD,EAAa,MAAQC,EAAa,KAAA,CAIlC,OAAAzN,EAAA,IAACgM,GAAA,CAEC,SAAUgB,EAAO,OAAO,GACxB,QAASA,EAAO,QAChB,eAAgB,CAAE,MAAO,qBAAqBA,GAAA,YAAAA,EAAQ,EAAE,gBAAiB,GAAGQ,CAAa,EACzF,UAAYxN,EAAA,IAAA+M,GAAA,CAAU,OAAAC,CAAgB,CAAA,EAErC,SAAAA,EAAO,cAAgB,KAAOW,EAAWX,EAAO,OAAO,UAAU,OAAQA,EAAO,WAAY,CAAA,CAAA,EANxFA,EAAO,OAAO,UAAU,EAO/B,CAAA,CAEH,CAzBmB,EAAAE,EAAY,EA0BlC,CAAA,CAAA,EAjCOA,EAAY,EAkCrB,CAEJ,CAEO,SAASU,GAAe,CAAE,YAAAV,EAAa,aAAApC,GAAqC,CACjF,MAAMqC,EAAkBC,EAA6BrL,GAAUA,EAAM,eAAe,EAEpF,cACG,KACE,CAAA,SAAA,CAAiB+I,IAAAI,EAAQ,MAASlL,EAAAA,IAAA,KAAA,CAAG,UAAWqB,EAAM,aAAc,SAAU,EAAI,CAAA,EAClF,CAAC8L,GACCnN,EAAAA,IAAA,KAAA,CAAG,UAAWqB,EAAM,YAAa,SAAU,GAAI,SAEhD,GAAA,CAAA,EAED6L,EAAY,QAAQ,IAAKF,GAAW,SACnC,MAAMO,GAAmB7G,EAAAsG,EAAO,OAAO,UAAU,OAAxB,YAAAtG,EAA8B,OAGjD8G,EAA8B,CAClC,UAHe7G,EAAAqG,EAAO,OAAO,UAAU,OAAxB,YAAArG,EAA8B,UAGzB,EAAI,EAC1B,EACA,GAAI4G,EAAkB,CACd,MAAAE,EAAeC,EAAoBH,CAAgB,EACzDC,EAAa,gBAAkBC,EAAa,gBAC5CD,EAAa,MAAQC,EAAa,KAAA,CAIlC,OAAAzN,EAAA,IAAC8M,GAAA,CAEC,SAAUE,EAAO,OAAO,GACxB,QAASA,EAAO,QAChB,eAAgB,CAAE,MAAO,qBAAqBA,GAAA,YAAAA,EAAQ,EAAE,gBAAiB,GAAGQ,CAAa,EACzF,UAAYxN,EAAA,IAAA+M,GAAA,CAAU,OAAAC,CAAgB,CAAA,EAErC,SAAAA,EAAO,cAAgB,KAAOW,EAAWX,EAAO,OAAO,UAAU,OAAQA,EAAO,WAAY,CAAA,CAAA,EANxFA,EAAO,OAAO,UAAU,EAO/B,CAEH,CAAA,CAAA,CAAA,EA/BME,EAAY,EAgCrB,CAEJ,iDCtFA,SAASW,GAAS,CAAE,SAAAxL,EAAU,eAAA8J,EAAgB,GAAG2B,GAAgC,CAG3E,GAFeV,EAA6BrL,GAAUA,EAAM,UAAU,GAExDM,IAAa,EACtB,OAAA,KAGH,MAAA0L,EAAYC,GAAoB3L,EAAU,UAAU,EAE1D,aACG,KAAG,CAAA,UAAWhB,GAAM,SAAU,cAAY,iBAAiB,MAAO8K,EAAiB,GAAG2B,EACrF,SAAC9N,MAAA,KAAA,CAAG,SAAU,EAAI,UAAU,CAAA,EAC9B,CAEJ,CAEA,MAAeH,GAAAA,EAAAA,KAAKgO,EAAQ,ECQfI,GAAuBrM,GAAgCC,IAAS,CAC3E,OAAQ,GACR,QAAS,KACT,UAAW,KACX,WAAY,KACZ,SAAU,KACV,SAAU,CAAE,EAAG,EAAG,EAAG,CAAE,EACvB,KAAM,KACN,SAAU,CACRqM,EACAtN,EACAuN,EACAC,EACAC,EACAC,IACGzM,EAAI,CAAE,OAAQ,GAAM,SAAAqM,EAAU,QAAAtN,EAAS,UAAAuN,EAAW,WAAAC,EAAY,SAAAC,EAAU,KAAAC,EAAM,EACnF,UAAW,IAAMzM,EAAI,CAAE,OAAQ,EAAO,CAAA,CACxC,EAAE,iNCtBF,SAAwB0M,GAAS,CAC/B,MAAAC,EACA,GAAApK,EACA,WAAAqK,EACA,OAAAC,EACA,kBAAAC,EACA,SAAAC,EACA,OAAAC,EACA,YAAAC,EACA,KAAAR,EACA,KAAAS,EACA,OAAAC,EACA,SAAAC,EACA,MAAAjG,EACA,eAAAmD,EACA,GAAG2B,CACL,EAAkB,OAChB,KAAM,CAAE,aAAAhD,EAAc,gBAAAqC,KAAoBzG,EAAAsC,EAAM,QAAQ,OAAd,YAAAtC,EAAoB,UAAW,CACvE,aAAcwE,EAAQ,KACtB,gBAAiB,EACnB,EAEMgE,EAAWjB,GAAsBkB,GAAUA,EAAM,QAAQ,EAEzD,CAAE,MAAAC,EAAO,gBAAAC,GAAoB3B,EAAoBgB,CAAM,EACvDY,EAAYC,GAAiBH,CAAK,EAClCI,GAAYC,GAAY,CAAE,GAAGH,EAAW,MAAOA,EAAU,MAAQ,GAAK,EAEtEI,GAAkC9P,EAAAA,QAAQ,IAAM,CACpD,GAAIgP,EACK,MAAA,aACEF,EAAQ,CAEjB,MAAMiB,EAA4BJ,GAAiB7B,EAAoBgB,CAAM,EAAE,eAAe,EAC9F,GAAIiB,IAA8B,KAChC,OAAOF,GAAY,CACjB,GAAGE,EACH,MAAOA,EAA0B,MAAQ,GAAA,CAC1C,CACH,CAEF,EACC,CAACjB,EAAQE,CAAQ,CAAC,EAGnB,OAAAzO,EAAA,KAAC,KAAA,CACC,GAAIqO,EACJ,UAAW9F,GAAG,CACZrH,EAAM,SACN0N,GAAQ1N,EAAM,KACdsN,GAAqBtN,EAAM,gBAC3B2N,GAAU3N,EAAM,SAAA,CACjB,EACD,MAAO,CACL,GAAG8K,EACH,QAAS,GAAG0C,EAAS,MAAQ,GAAG,GAChC,YAAaC,GAAe,aAC9B,EACA,cAAY,iBACX,GAAGhB,EAEH,SAAA,CAAiBhD,IAAAI,EAAQ,MACxBlL,EAAAA,IAAC,KAAG,CAAA,UAAWqB,EAAM,aAAc,SAAU,GAAI,KAAK,OACpD,SAAArB,EAAA,IAAC4P,GAAA,CACC,aAAW,UACX,QAAQ,gBACR,KAAK,QACL,QAAUC,GAAM,CACR,MAAAC,EAAOD,EAAE,cAAc,sBAAsB,EAC7CE,EAAO,EAAID,EAAK,EAAIA,EAAK,OAAS,EACxCZ,EAAS,CAAE,EAAGY,EAAK,EAAG,EAAGC,GAAQ3L,EAAI4L,EAAe,MAAOf,EAAUD,EAAQV,CAAI,CACnF,EAEA,eAAC2B,GAAqB,CAAA,CAAA,CAAA,CAAA,EAE1B,EAED,CAAC9C,GACAnN,EAAA,IAAC,KAAG,CAAA,UAAWqB,EAAM,YAAa,MAAO,CAAE,gBAAAgO,EAAiB,MAAOG,EAAU,EAAG,SAAU,GAAI,KAAK,OAChG,SACHf,EAAA,EAEDzF,EACE,OAAOwF,CAAK,EACZ,kBACA,IAAK0B,GAEFlQ,EAAA,IAAC,KAAA,CAEC,MAAO,CACL,MAAO,kBAAkBkQ,EAAK,OAAO,EAAE,gBACvC,gBAAiBR,EACnB,EACA,SAAU,GACV,KAAK,OAEJ,WAAWQ,EAAK,OAAO,UAAU,KAAMA,EAAK,WAAY,CAAA,CAAA,EARpDA,EAAK,EASZ,CAEH,CAAA,CAAA,CACL,CAEJ,uIChHA,SAAwBC,GAAS,CAC/B,QAAAC,EACA,OAAA1B,EACA,MAAAF,EACA,SAAAS,EACA,MAAAjG,EACA,eAAAmD,EACA,GAAG2B,CACL,EAAkB,OAChB,KAAM,CAAE,aAAAhD,EAAc,gBAAAqC,KAAoBzG,EAAAsC,EAAM,QAAQ,OAAd,YAAAtC,EAAoB,UAAW,CACvE,aAAcwE,EAAQ,KACtB,gBAAiB,EACnB,EAEMgE,EAAWjB,GAAsBkB,GAAUA,EAAM,QAAQ,EAG7D,OAAAhP,EAAA,KAAC,KAAA,CACC,UAAWkB,GAAM,SACjB,MAAO,CAAE,GAAG8K,EAAgB,YAAauC,CAAO,EAChD,cAAY,iBACX,GAAGZ,EAEH,SAAA,CAAiBhD,IAAAI,EAAQ,MACxBlL,EAAAA,IAAC,KAAG,CAAA,UAAWqB,GAAM,aAAc,SAAU,GAAI,KAAK,OACpD,SAAArB,EAAA,IAAC4P,GAAA,CACC,aAAW,UACX,QAAQ,gBACR,KAAK,QACL,QAAUC,GAAM,CACR,MAAAC,EAAOD,EAAE,cAAc,sBAAsB,EAC7CE,EAAO,EAAID,EAAK,EAAIA,EAAK,OAAS,EACxCZ,EAAS,CAAE,EAAGY,EAAK,EAAG,EAAGC,GAAQK,EAASJ,EAAe,MAAOf,EAAU,KAAM,IAAI,CACtF,EAEA,eAACgB,GAAqB,CAAA,CAAA,CAAA,CAAA,EAE1B,EAED,CAAC9C,GAAmBnN,EAAAA,IAAC,KAAG,CAAA,UAAWqB,GAAM,YAAa,SAAU,GAAI,KAAK,MAAO,CAAA,EAChF2H,EACE,OAAOwF,CAAK,EACZ,kBACA,IAAK0B,GAEFlQ,EAAA,IAAC,KAAA,CAEC,SAAU,GACV,MAAO,CACL,MAAO,kBAAkBkQ,EAAK,OAAO,EAAE,eACzC,EACA,KAAK,OAEJ,WAAWA,EAAK,OAAO,UAAU,KAAMA,EAAK,WAAY,CAAA,CAAA,EAPpDA,EAAK,EAQZ,CAEH,CAAA,CAAA,CACL,CAEJ,8ICtDA,SAAwBG,GAAa,CACnC,QAAAzP,EACA,OAAAiO,EACA,eAAAyB,EACA,SAAAjC,EACA,OAAAK,EACA,MAAAF,EACA,SAAAS,EACA,MAAAjG,EACA,eAAAmD,EACA,GAAG2B,CACL,EAAsB,OACpB,KAAM,CAAE,aAAAhD,EAAc,gBAAAqC,KAAoBzG,EAAAsC,EAAM,QAAQ,OAAd,YAAAtC,EAAoB,UAAW,CACvE,aAAcwE,EAAQ,KACtB,gBAAiB,EACnB,EAEMgE,EAAWjB,GAAsBkB,GAAUA,EAAM,QAAQ,EAE3D,IAAAO,EACJ,GAAIhB,EAAQ,CAEV,MAAMiB,EAA4BJ,GAAiB7B,EAAoBgB,CAAM,EAAE,eAAe,EAC1FiB,IAA8B,OAChCD,EAAcD,GAAY,CACxB,GAAGE,EACH,MAAOA,EAA0B,MAAQ,GAAA,CAC1C,EACH,CAIA,OAAAxP,EAAA,KAAC,KAAA,CACC,UAAWuI,GAAG,CAACrH,EAAM,aAAc,EAAQiP,GAAmBjP,EAAM,SAAS,CAAC,EAC9E,MAAO,CACL,GAAG8K,EACH,QAAS,GAAG0C,EAAS,MAAQ,GAAG,GAChC,YAAayB,GAAkB,aACjC,EACA,cAAY,qBACX,GAAGxC,EAEH,SAAA,CAAiBhD,IAAAI,EAAQ,MACxBlL,EAAAA,IAAC,KAAG,CAAA,UAAWqB,EAAM,aAAc,SAAU,GAAI,KAAK,OACpD,SAAArB,EAAA,IAAC4P,GAAA,CACC,aAAW,UACX,QAAQ,gBACR,KAAK,QACL,QAAUC,GAAM,CACR,MAAAC,EAAOD,EAAE,cAAc,sBAAsB,EAC7CE,EAAO,EAAID,EAAK,EAAIA,EAAK,OAAS,EACxCZ,EAAS,CAAE,EAAGY,EAAK,EAAG,EAAGC,GAAQnP,EAASoP,EAAe,UAAWf,EAAUZ,EAAU,IAAI,CAC9F,EAEA,eAAC4B,GAAqB,CAAA,CAAA,CAAA,CAAA,EAE1B,EAED,CAAC9C,GACAnN,EAAA,IAAC,KAAG,CAAA,UAAWqB,EAAM,YAAa,SAAU,GAAI,KAAK,OAClD,SACHkP,EAAA,CAAA,EAEDvH,EACE,OAAOwF,CAAK,EACZ,kBACA,IAAK0B,GAAS,CACP,MAAAM,EACJN,EAAK,OAAO,KAAO,YAAcA,EAAK,OAAO,KAAO,aAAeA,EAAK,OAAO,KAAO,UAEtF,OAAAlQ,EAAA,IAAC,KAAA,CAEC,MAAO,CACL,MAAO,kBAAkBkQ,EAAK,OAAO,EAAE,gBACvC,gBAAiBR,EACjB,QAASc,EAAY,EAAI,EAC3B,EACA,SAAU,GAET,SAAAA,GAAa7C,EAAWuC,EAAK,OAAO,UAAU,KAAMA,EAAK,WAAY,CAAA,CAAA,EARjEA,EAAK,EASZ,CAEH,CAAA,CAAA,CAAA,CACL,CAEJ,CCpGa,MAAAO,GAAyB7O,GAAkCC,IAAS,CAC/E,cAAe,GACf,iBAAkB,GAClB,eAAgB,GAChB,QAAS,GACT,SAAU,GACV,eAAe6O,EAAa,CACtB7O,EAAA,CACF,cAAe6O,EAAY,cAC3B,QAASA,EAAY,QACrB,iBAAkBA,EAAY,iBAC9B,eAAgBA,EAAY,eAC5B,SAAUA,EAAY,QAAA,CACvB,CAAA,CAEL,EAAE,ECfa7Q,GAAAA,EAAAA,KAAK8Q,EAAiB,EAErC,SAASA,IAAoB,CACrB,KAAA,CAAE,OAAAC,EAAQ,QAAAhQ,EAAS,WAAAwN,EAAY,SAAAC,EAAU,KAAAC,EAAM,SAAAJ,EAAU,UAAA2C,CAAU,EAAI5C,GAAqB,EAC5F,CAAE,SAAA6C,EAAU,MAAAC,EAAO,YAAAC,EAAa,KAAAC,EAAM,YAAAC,GAAgBC,GAAgB,EACtEC,EAAYzP,GAAsBI,GAAUA,EAAM,gBAAgB,EAClE2O,EAAcD,GAAuB,EAE3C,OAAKG,EAKH5Q,EAAA,IAACqR,GAAA,CACC,OAAM,GACN,QAASR,EACT,MAAO,CACL,CACE,KAAM,OACN,MAAO,UACP,QAAS,IAAMO,EAAUxQ,CAAO,EAChC,KAAM0Q,GACN,SAAU,CAACZ,EAAY,cACzB,EACA,CAAE,KAAM,SAAU,EAClB,CACE,KAAM,OACN,MAAOpC,EAAO,cAAgB,WAC9B,QAAS,IAAM4C,EAAY,CAAE,GAAItQ,EAAS,KAAM,CAAC0N,EAAM,EACvD,KAAMiD,GACN,SAAUjD,IAAS,MAAQ,CAACoC,EAAY,OAC1C,EACA,CAAE,KAAM,SAAU,EAClB,CACE,KAAM,OACN,MAAO,kBACP,QAAS,IAAMI,EAAS,CAAE,KAAMd,EAAe,MAAO,OAAQ3B,CAAS,EAAG,CAAE,OAAQzN,EAAS,EAC7F,KAAM4Q,GACN,SAAU,CAACd,EAAY,gBACzB,EACA,CACE,KAAM,OACN,MAAO,kBACP,QAAS,IAAMI,EAAS,CAAE,KAAMd,EAAe,MAAO,OAAQ3B,CAAS,EAAG,CAAE,MAAOzN,EAAS,EAC5F,KAAM4Q,GACN,SAAU,CAACd,EAAY,gBACzB,EACA,CACE,KAAM,OACN,MAAO,cACP,QAAS,IAAMK,EAAMnQ,CAAO,EAC5B,KAAM2Q,GACN,SAAU,CAACb,EAAY,gBACzB,EACA,CAAE,KAAM,SAAU,EAClB,CACE,KAAM,OACN,MAAO,UACP,QAAS,IAAMO,EAAKrQ,EAAS,IAAI,EACjC,KAAM6Q,GACN,SAAUrD,EAAa,GAAK,CAACsC,EAAY,cAC3C,EACA,CACE,KAAM,OACN,MAAO,YACP,QAAS,IAAMO,EAAKrQ,EAAS,MAAM,EACnC,KAAM8Q,GACN,SAAU,CAAChB,EAAY,cACzB,EACA,CAAE,KAAM,SAAU,EAClB,CACE,KAAM,OACN,MAAO,SACP,QAAS,IAAMM,EAAY,CAACpQ,CAAO,CAAC,EACpC,KAAM+Q,GACN,SAAU,CAACjB,EAAY,cAAA,CAE3B,EACA,SAAAxC,CAAA,CACF,EAtEO,IAwEX,CCzFA,SAAwB0D,GAAYC,EAA0B,CACrD,OAAA7R,EAAA,IAAC8R,IAAO,MAAO,CAAE,UAAW,gBAAiB,EAAI,GAAGD,EAAW,CACxE,CCMA,SAASE,IAAqB,CAC5B,KAAM,CAAE,KAAMC,CAAS,EAAIC,GAAQ,EAC7B,CAAE,KAAMC,CAAc,EAAIC,GAAc,EACxC,CAACvB,EAAQwB,CAAO,EAAIC,GAAc,EAGlCC,EAAmB1B,GAAUoB,GAAYE,EAE/C,OAEI/R,EAAA,KAAAoS,WAAA,CAAA,SAAA,CAACpS,EAAAA,KAAAqS,EAAA,CAAe,QAASJ,EAAQ,KAAM,OAASpS,MAAAiI,EAAA,CAAO,CAAA,EACrD,SAAA,CAAAjI,EAAA,IAAC4R,GAAY,EAAA,EAAE,UAAA,EAEjB,EACA5R,EAAA,IAACiC,GAAA,CACC,OAAA2O,EACA,QAASwB,EAAQ,MACjB,MAAM,sBACN,aAAY,GACZ,gBAAe,GACf,aACEE,EACGtS,EAAAA,IAAAyS,GAAA,CAAuB,WAAY,CAAE,MAAOC,GAAW,SAAU,MAAO,UAAW,CAAG,CAAA,EACrF,IAAA,CAAA,CAER,EACF,CAEJ,2SCRA,SAAwBC,GAAsB,CAC5C,QAAA7O,EACA,oBAAA8O,EACA,sBAAAC,EACA,mBAAAC,CACF,EAA+B,CAC7B,MAAMC,EAAWtC,GAAwB1O,GAAUA,EAAM,QAAQ,EAC3DgJ,EAASiI,MAAIC,EAAa,EAE1B,CAACnI,EAAcoI,CAAe,EAAIC,GAAkB,CACxD,IAAKpI,EAAS,GAAGA,EAAO,KAAK,GAAGqI,EAAY,YAAY,GAAKA,EAAY,aACzE,aAAcrI,EAASG,EAAQ,IAAMA,EAAQ,IAAA,CAC9C,EAEKmI,EAAsBC,GAAoB,CAExC,MAAAnN,EAAWmN,EAAK,GAAG,CAAC,EACrBnN,GACL+M,EAAgB/M,CAAQ,CAC1B,EAEA,cACGoN,GAAA,CAAa,UAAWlS,EAAM,cAC7B,SAAA,CAAArB,EAAA,IAACwT,GAAa,EAAA,EACdxT,EAAA,IAACyT,GAAA,CACC,QAAA3P,EACA,oBAAA8O,EACA,sBAAAC,EACA,mBAAAC,CAAA,CACF,SACCY,GAAY,CAAA,MAAO,CAAC5I,CAAY,EAAG,cAAeuI,EAAoB,UAAW3K,GAAG,CAACrH,EAAM,MAAOA,EAAM,KAAK,CAAC,EAC7G,SAAA,CAAArB,EAAA,IAACwS,EAAA,CAAe,OAASxS,EAAAA,IAAA2T,GAAA,CAAA,CAAO,EAAI,MAAOzI,EAAQ,IAAK,UAAW7J,EAAM,YAAa,SAEtF,MAAA,EACCrB,EAAA,IAAAwS,EAAA,CAAe,OAASxS,EAAAA,IAAA2T,GAAA,CAAA,CAAO,EAAI,MAAOzI,EAAQ,KAAM,UAAW7J,EAAM,YAAa,SAEvF,MAAA,CAAA,CAAA,EACF,EAEC0R,GAEG5S,EAAA,KAAAoS,WAAA,CAAA,SAAA,CAAAvS,EAAAA,IAAC4T,GAAA,CAAiB,YAAY,UAAW,CAAA,QACxC7B,GAAmB,CAAA,CAAA,CAAA,CACtB,CAAA,CAAA,EAEJ,CAEJ,CAEA,SAASyB,IAAe,CACtB,MAAMK,EAAUzG,EAA4B,EAG1C,OAAAjN,EAAA,KAAC2T,GAAA,CACC,SAAA,CAAA9T,EAAA,IAAC+T,GAAA,CACC,OACE/T,EAAA,IAACwS,EAAA,CACC,OACErS,EAAA,KAAC8H,EAAO,CAAA,QAAQ,gBACd,SAAA,CAAAjI,EAAA,IAACgU,GAAkB,EAAA,EAAE,kBACpBC,GAAc,CAAA,CAAA,CAAA,CACjB,CAAA,CAAA,CAAA,CAEJ,CAEJ,SAECC,GAAgB,CAAA,MAAM,QAAQ,UAAW7S,EAAM,OAC9C,SAAA,CAAClB,EAAA,KAAA,MAAA,CAAI,UAAWkB,EAAM,OACpB,SAAA,CAAArB,EAAA,IAACmU,EAAA,CAAa,UAAW9S,EAAM,aAAc,SAAkB,qBAAA,SAC9D8S,EAAA,CAAa,UAAW9S,EAAM,OAC7B,SAAA,CAAArB,EAAA,IAACoU,EAAA,CACC,eAAgBP,EAAQ,iBACxB,gBAAkBQ,GAAYR,EAAQ,UAAU,mBAAoBQ,CAAO,CAAA,CAC7E,EAAE,uBAAA,EAEJ,SACCF,EAAA,CAAa,UAAW9S,EAAM,OAC7B,SAAA,CAAArB,EAAA,IAACoU,EAAA,CACC,eAAgBP,EAAQ,gBACxB,gBAAkBQ,GAAYR,EAAQ,UAAU,kBAAmBQ,CAAO,CAAA,CAC5E,EAAE,mBAAA,CAEJ,CAAA,CAAA,EACF,EAEClU,EAAA,KAAA,MAAA,CAAI,UAAWkB,EAAM,OACpB,SAAA,CAAArB,EAAA,IAACmU,EAAA,CAAa,UAAW9S,EAAM,aAAc,SAAe,kBAAA,SAC3D8S,EAAA,CAAa,UAAW9S,EAAM,OAC7B,SAAA,CAAArB,EAAA,IAACoU,EAAA,CACC,eAAgBP,EAAQ,iBACxB,gBAAkBQ,GAAYR,EAAQ,UAAU,mBAAoBQ,CAAO,CAAA,CAC7E,EAAE,oBAAA,EAEJ,SACCF,EAAA,CAAa,UAAW9S,EAAM,OAC7B,SAAA,CAAArB,EAAA,IAACoU,EAAA,CACC,eAAgBP,EAAQ,WACxB,gBAAkBQ,GAAYR,EAAQ,UAAU,aAAcQ,CAAO,CAAA,CACvE,EAAE,oBAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAEJ,CAEA,SAASZ,GAAe,CACtB,QAAA3P,EACA,oBAAA8O,EACA,sBAAAC,EACA,mBAAAC,CACF,EAA+B,CAE3B,OAAA3S,EAAA,KAAC2T,GAAA,CACC,SAAA,CAAA9T,EAAA,IAAC+T,GAAA,CACC,OACE/T,EAAA,IAACwS,EAAA,CACC,OACErS,EAAA,KAAC8H,EAAO,CAAA,QAAQ,gBACd,SAAA,CAAAjI,EAAA,IAACsR,GAAU,EAAA,EAAE,cACZ2C,GAAc,CAAA,CAAA,CAAA,CACjB,CAAA,CAAA,CAAA,CAEJ,CAEJ,SACCC,GAAgB,CAAA,MAAM,QAAQ,UAAW7S,EAAM,OAC9C,SAAA,CAAClB,EAAA,KAAA,MAAA,CAAI,UAAWkB,EAAM,OACpB,SAAA,CAAArB,EAAA,IAACmU,EAAA,CAAa,UAAW9S,EAAM,aAAc,SAAiB,oBAAA,EAC7DyC,EAAQ,IAAKmF,GAAW,CACjB,MAAAqL,EAAerL,EAAO,UAAU,OAChCsL,EAAUtL,EAAO,aAAa,EACpC,cACGkL,EAAA,CAA6C,UAAW9S,EAAM,OAC7D,SAAA,CAAArB,EAAA,IAACoU,EAAS,CAAA,eAAgBG,EAAS,gBAAiBtL,EAAO,iBAAkB,EAC5EqL,CAAA,CAAA,EAFgB,GAAGrL,EAAO,EAAE,IAAIsL,CAAO,EAG1C,CAEH,CAAA,CAAA,EACH,EACCvU,EAAAA,IAAA4T,GAAA,CAAiB,YAAY,UAAW,CAAA,EACxCzT,EAAA,KAAA,MAAA,CAAI,UAAWkB,EAAM,OACpB,SAAA,CAAArB,EAAA,IAACmU,EAAA,CAAa,UAAW9S,EAAM,aAAc,SAAa,gBAAA,EAC1DrB,EAAAA,IAACiI,GAAO,KAAK,QAAQ,MAAK,GAAC,QAAS6K,EAAoB,SAExD,UAAA,CAAA,EACA9S,EAAAA,IAACiI,GAAO,KAAK,QAAQ,MAAK,GAAC,QAAS2K,EAAqB,SAEzD,gBAAA,CAAA,EACA5S,EAAAA,IAACiI,GAAO,KAAK,QAAQ,MAAK,GAAC,QAAS4K,EAAuB,SAE3D,kBAAA,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAEJ,CC9JA,SAAwB2B,GAAc,CAAE,QAAA1Q,EAAS,aAAAgH,GAAoC,CACnF,KAAM,CAAE,KAAAjK,EAAM,OAAA4T,CAAO,EAAIC,GAA2B,EAC9C,CAAE,YAAAxD,EAAa,YAAAyD,CAAY,EAAIxD,GAAgB,EAC/CjI,EAAmBkE,EAA6BrL,GAAUA,EAAM,gBAAgB,EAChFoH,EAAmBiE,EAA6BrL,GAAUA,EAAM,gBAAgB,EAChFoL,EAAkBC,EAA6BrL,GAAUA,EAAM,eAAe,EAE9E,CAAE,gBAAA6S,CAAgB,EAAIC,GAAmB,EAEzCC,EAAc7O,SAAmC,IAAI,EACrD,CAAE,UAAAqG,CAAU,EAAIyI,GAAY,EAE5BC,EAAOpV,EAAA,QACX,KAAO,CACL,aAAc,CAACqP,EAAkBgG,EAAkBC,EAAiBC,EAAW,KAAU,CAEjF,MAAAhU,EAAQN,EAAKoO,CAAQ,EAS3B,GAPI,GAAC9N,GAMiBA,EADV8T,CACmB,IACTC,GAItB,IAAIC,EAAU,CACAjE,EAAA,CAAE,GAAI/P,EAAM,GAAI,OAAQ,CAAE,CAAC8T,CAAQ,EAAGC,CAAQ,EAAG,EAC7D,MAAA,CAGUhE,EAAA,CAAE,GAAI/P,EAAM,GAAI,CAAC8T,CAAQ,EAAGC,EAAS,EACnD,EACA,kBAAmB,CAACE,EAAiBC,EAAkBH,IAAoB,CAE7DP,EAAAS,EAASC,EAAOH,EAAS,EAAI,CAC3C,EACA,QAAS,CACP,iBAAAhM,EACA,iBAAAC,EACA,aAAA2B,EACA,gBAAAqC,CAAA,CACF,GAEF,CAACrC,EAAcjK,EAAMsM,EAAiBhE,EAAkBD,EAAkBgI,EAAayD,CAAW,CACpG,EAEM,CAAE,YAAA5Q,EAAa,iBAAAM,GAAqBR,GAAeC,CAAO,EAC1D,CAAE,aAAAP,EAAc,gBAAAG,CAAgB,EAAIJ,GAAe,EACnD,CAAE,iBAAAiB,EAAkB,oBAAAC,CAAoB,EAAIF,GAAoB,EAEhE0E,EAAQsM,GAAc,CAC1B,KAAAzU,EACA,QAAAiD,EACA,iBAAkB,WAClB,MAAO,CACL,YAAAC,EACA,iBAAAQ,EACA,aAAAhB,CACF,EACA,yBAA0BiB,EAC1B,qBAAsBd,EACtB,gBAAiB6R,GAAgB,EACjC,KAAAP,CAAA,CACD,EAEKQ,EAAgB7R,EAAAA,YAAY,IAAM,CACtCqF,EAAM,wBAAwB,EAAI,CAAA,EACjC,CAACA,CAAK,CAAC,EAEJyM,GAAsB9R,EAAAA,YAAY,IAAM,CAC5CD,EAAgB,CAAA,CAAE,CAAA,EACjB,CAACA,CAAe,CAAC,EAGpBxC,EAAAA,UAAU,IAAM,CACd,GAAI4J,IAAiBI,EAAQ,MAAQ4J,EAAY,UAAY,MAAQ,CAACF,EACpE,OAGF,MAAMnG,EAAa5N,EAAK,UAAWM,GAAUA,EAAM,KAAOyT,CAAe,EACzEE,EAAY,QAAQ,cAAc,CAAE,MAAOrG,EAAY,SAAU,SAAU,CAC1E,EAAA,CAAC3D,EAAcjK,EAAM+T,CAAe,CAAC,EAMlC,MAAAc,GAAiB9V,EAAAA,QAAQ,IAAM,CAC7B,MAAA+V,EAAU3M,EAAM,eAAe,EAC/B4M,EAAsC,CAAC,EAC7C,QAASjK,EAAI,EAAGA,EAAIgK,EAAQ,OAAQhK,IAAK,CACjC,MAAAqB,EAAS2I,EAAQhK,CAAC,EACnBqB,IACL4I,EAAS,YAAY5I,EAAO,EAAE,OAAO,EAAIA,EAAO,QAAQ,EAC/C4I,EAAA,SAAS5I,EAAO,OAAO,EAAE,OAAO,EAAIA,EAAO,OAAO,QAAQ,EAAA,CAE9D,OAAA4I,CAAA,EAGN,CAAC5M,EAAM,WAAW,iBAAkBA,EAAM,SAAA,EAAW,YAAY,CAAC,EAE/D6M,EAAiB7M,EAAM,kBAAkB,EACzC,CAAE,KAAA8M,CAAA,EAAS9M,EAAM,YAAY,EAInC,MAFkB,CAACnI,GAAQ4T,IAAW,UAG7BzU,EAAA,IAAC+V,GAAU,CAAA,KAAK,YAAa,CAAA,EAKlC5V,EAAA,KAAAoS,WAAA,CAAA,SAAA,CAAAvS,EAAA,IAAC2S,GAAA,CACC,QAASkD,EACT,oBAAqBJ,GACrB,sBAAuBpR,EACvB,mBAAoBmR,CAAA,CACtB,EACAxV,EAAA,IAACgW,GAAA,CACC,IAAKlB,EACL,KAAAjU,EACA,mBAAoB,CAAE,IAAK,IAAK,OAAQ,GAAI,EAC5C,WAAY,CACV,iBAAkB,IAAOb,EAAAA,IAAA6L,GAAA,CAAe,KAAK,oBAAqB,CAAA,EAClE,MAAO,CAAC,CAAE,MAAOM,EAAgB,GAAG2B,KAEhC9N,EAAA,IAAC,QAAA,CACC,UAAWqB,EAAM,SACjB,GAAG,WACH,MAAO,CAAE,GAAG8K,EAAgB,GAAGuJ,EAAe,EAC7C,GAAGpJ,EACH,GAAGwB,CAAA,CACN,EAGJ,SAAU,CAAC,CAAE,KAAMmI,EAAO,MAAO9J,EAAgB,GAAG2B,KAAoB,CAEhE,MAAAmB,EAAWnB,EAAc,YAAY,EACrC/E,EAAM+M,EAAK7G,CAAQ,EACnBxD,EAAM1C,EAAI,SAAS,GACnBhI,EAAQgI,EAAI,SAEd,OAAAtH,GAAcV,CAAK,EAEnBf,EAAA,IAACmQ,GAAA,CAEC,QAASpP,EAAM,GACf,OAAQA,EAAM,OACd,MAAOgI,EAAI,GACX,SAAUA,EAAI,MACd,MAAAC,EACA,eAAAmD,EACC,GAAG2B,CAAA,EAPCrC,CAQP,EAIAlB,GAAcxJ,CAAK,EAEnBf,EAAA,IAAC6N,IAAmB,SAAU9M,EAAM,SAAU,eAAAoL,EAAiC,GAAG2B,GAAnErC,CAAkF,EAIjGlK,GAAkBR,CAAK,EAEvBf,EAAA,IAACqQ,GAAA,CAEC,QAAStP,EAAM,GACf,OAAQA,EAAM,OACd,eAAgBA,EAAM,YACtB,SAAUA,EAAM,OAChB,OAAQA,EAAM,OACd,MAAOgI,EAAI,GACX,SAAAkG,EACA,MAAAjG,EACA,eAAAmD,EACC,GAAG2B,CAAA,EAVCrC,CAWP,EAKFzL,EAAA,IAACuO,GAAA,CAEC,GAAIxN,EAAM,GACV,WAAYA,EAAM,WAClB,OAAQA,EAAM,OACd,kBAAmBA,EAAM,kBACzB,SAAUA,EAAM,SAChB,OAAQA,EAAM,OACd,YAAaA,EAAM,YACnB,KAAMA,EAAM,KACZ,KAAMA,EAAM,KACZ,OAAQA,EAAM,OACd,MAAOgI,EAAI,GACX,SAAAkG,EACA,MAAAjG,EACA,eAAAmD,EACC,GAAG2B,CAAA,EAfC/E,EAAI,EAgBX,CAEJ,EACA,UAAY+E,GAAkB9N,EAAAA,IAAC,SAAM,UAAWqB,EAAM,YAAc,GAAGyM,CAAe,CAAA,CACxF,EACA,mBAAoB,IACX9E,EAAM,gBAAA,EAAkB,IAAKkE,GAAgB,CAClD,MAAMgJ,EAAkBlN,EAAM,SAAA,EAAW,iBAAiB,iBACtD4E,GACAX,GAGJ,OAAQjN,EAAAA,IAAAkW,EAAA,CAAqC,aAAApL,EAA4B,YAAAoC,CAAA,EAA5CA,EAAY,EAA0D,CAAA,CACpG,CACH,CACF,QAECyD,GAAkB,CAAA,CAAA,CAAA,EACrB,CAEJ,CChPA,MAAe9Q,GAAAA,EAAAA,KAAKsW,EAAoB,EACxC,SAASA,IAAuB,CAC9B,KAAM,CAAE,KAAMtL,EAAc,OAAQuL,CAAA,EAAsBC,GAAgB,EACpEC,EAAiB7F,GAAwB1O,GAAUA,EAAM,cAAc,EACvEgJ,EAASiI,MAAIC,EAAa,EAGhC/R,EAAAA,UAAU,IAAM,WACd,GAAI6J,EAAQ,CACJ,MAAAK,IAAY1E,EAAAqE,EAAO,UAAP,YAAArE,EAAgB,SAAU,OAC7B4P,EAAA,CACb,gBAAe3P,EAAAoE,EAAO,UAAP,YAAApE,EAAgB,SAAU,IACzC,iBAAkByE,EAClB,eAAgBA,EAChB,QAASA,GAAa,IAAQ3D,EAAAsD,EAAO,UAAP,MAAAtD,EAAgB,MAAM,SAAS,SAC7D,SAAU,EAAA,CACX,CAAA,MAEc6O,EAAA,CACb,cAAe,GACf,iBAAkB,GAClB,eAAgB,GAChB,QAAS,GACT,SAAUC,KAAiB,IAAA,CAC5B,CACH,EACC,CAACxL,EAAQuL,CAAc,CAAC,EAErB,KAAA,CAACxL,CAAY,EAAIqI,GAAkB,CACvC,IAAKpI,EAAS,GAAGA,EAAO,KAAK,GAAGqI,EAAY,YAAY,GAAKA,EAAY,aACzE,aAAcrI,EAASG,EAAQ,IAAMA,EAAQ,IAAA,CAC9C,EAEKpH,EAAUlE,EAAA,QACd,IAAMgL,GAAoBC,EAAcC,EAAcC,CAAM,EAC5D,CAACF,EAAcC,EAAcC,CAAM,CACrC,EAEMyL,EAAY,CAAC3L,GAAgBuL,IAAsB,UAEzD,OACGpW,EAAAA,IAAAyE,GAAA,CAAY,QAAAX,EACV,SAAA0S,EAAaxW,EAAA,IAAA+V,GAAA,CAAU,KAAK,YAAA,CAAa,EAAK/V,MAACwU,GAAc,CAAA,QAAA1Q,EAAkB,aAAAgH,CAA4B,CAAA,EAC9G,CAEJ,wDC5CA,SAAwB2L,IAAe,CACrC,KAAM,CAACC,EAAYC,CAAW,EAAItE,GAAc,EAEhDuE,GAAe,UAAU,EAEzB,MAAMC,EAAWC,GAAsB,EAEvC,OAEI3W,EAAA,KAAAoS,WAAA,CAAA,SAAA,CAAAvS,EAAA,IAAC+W,GAAe,CAAA,OAAQL,EAAY,QAASC,EAAY,MAAO,QAC/D7U,GAAkB,EAAA,SAClB,MAAI,CAAA,UAAWY,GAAO,aAAc,cAAY,WAC/C,SAAA,CAAA1C,EAAAA,IAACF,IACE,SAAC,CAAA+W,GACC7W,MAAA4P,GAAA,CAAW,aAAW,oBAAoB,QAAQ,eAAe,KAAK,SAAS,QAAS+G,EAAY,KACnG,SAAC3W,EAAA,IAAAgX,GAAA,CAAA,CAAO,CACV,CAAA,EAEJ,QACC9U,GAAiB,EAAA,QACjBiU,GAAqB,CAAA,CAAA,CAAA,CACxB,CAAA,CAAA,EACF,CAEJ,CCnCA,SAAwBc,IAAoB,CAC1C,aACGC,GAAa,CAAA,WAAW,WACvB,SAAAlX,MAACyW,IAAa,CAAA,EAChB,CAEJ"}
@@ -1 +0,0 @@
1
- ._blink_70oau_1{animation:_blink_70oau_1 1s step-start infinite}@keyframes _blink_70oau_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_70oau_13{transform:rotate(45deg)}._link_70oau_17{display:flex;align-items:center;gap:.25rem;color:#578af4;transition-property:color;transition-duration:.1s;width:fit-content;text-decoration:none}._link_70oau_17._inline_70oau_27{display:inline-flex}._link_70oau_17:hover{color:#ff7597}._link_70oau_17:focus{outline:none;box-shadow:0 1px 0 0 currentColor}._blink_11839_1{animation:_blink_11839_1 1s step-start infinite}@keyframes _blink_11839_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_11839_13{transform:rotate(45deg)}._wrapper_11839_17{position:relative}._suggestions_11839_21{background:#202020;color:#f6f6f6;position:absolute;top:100%;left:0;width:100%;margin:0;z-index:100;padding-block:.25rem;max-height:200px;overflow-y:auto;color:#b1b1b1}._suggestions_11839_21 li{padding:.25rem}._suggestions_11839_21 li:hover{color:#f6f6f6;background:#2b5abc}._blink_dem8v_1{animation:_blink_dem8v_1 1s step-start infinite}@keyframes _blink_dem8v_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_dem8v_13{transform:rotate(45deg)}._outerColumn_dem8v_17{gap:2rem;margin-bottom:2rem}._outerColumn_dem8v_17 h3{font-size:1rem}._innerColumn_dem8v_25{display:flex;flex-direction:column;gap:.5rem}._ruleSection_dem8v_31{display:flex;flex-direction:column;gap:1rem}._titleSection_dem8v_37,._filterSection_dem8v_38,._oscSection_dem8v_39,._httpSection_dem8v_40,._actionSection_dem8v_41{display:grid;grid-gap:.5rem}._titleSection_dem8v_37 button,._filterSection_dem8v_38 button,._oscSection_dem8v_39 button,._httpSection_dem8v_40 button,._actionSection_dem8v_41 button{align-self:flex-end}._titleSection_dem8v_37 label,._titleSection_dem8v_37 div,._ruleSection_dem8v_31 label,._ruleSection_dem8v_31 div,._filterSection_dem8v_38 label,._filterSection_dem8v_38 div,._oscSection_dem8v_39 label,._oscSection_dem8v_39 div,._httpSection_dem8v_40 label,._httpSection_dem8v_40 div,._actionSection_dem8v_41 label,._actionSection_dem8v_41 div{font-size:calc(1rem - 3px)}._titleSection_dem8v_37 label,._ruleSection_dem8v_31 label,._filterSection_dem8v_38 label,._oscSection_dem8v_39 label,._httpSection_dem8v_40 label,._actionSection_dem8v_41 label{color:#b1b1b1}._titleSection_dem8v_37{grid-template-columns:1fr}._filterSection_dem8v_38{grid-template-columns:2fr 1fr 2fr auto}._oscSection_dem8v_39{grid-template-columns:9rem 5rem 3fr 4fr auto}._httpSection_dem8v_40{grid-template-columns:1fr auto}._actionSection_dem8v_41{grid-template-columns:auto 1fr 1fr auto}._actionSection_dem8v_41 ._test_dem8v_95{grid-column:-1}._outputCard_dem8v_99{border-left:.25rem solid #262626;padding-left:.5rem}._blink_1fzu7_1{animation:_blink_1fzu7_1 1s step-start infinite}@keyframes _blink_1fzu7_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1fzu7_13{transform:rotate(45deg)}._goIcon_1fzu7_17{transform:rotate(45deg);margin-left:.25rem;margin-bottom:.25rem}._blink_15peo_1{animation:_blink_15peo_1 1s step-start infinite}@keyframes _blink_15peo_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_15peo_13{transform:rotate(45deg)}th._over_15peo_17{color:#f57c13}th._under_15peo_21{color:#55b469}._blink_1sy0c_1{animation:_blink_1sy0c_1 1s step-start infinite}@keyframes _blink_1sy0c_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1sy0c_13{transform:rotate(45deg)}._expand_1sy0c_17{flex:1}._column_1sy0c_21{display:flex;flex-direction:column;gap:1rem}._blink_10owf_1{animation:_blink_10owf_1 1s step-start infinite}@keyframes _blink_10owf_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_10owf_13{transform:rotate(45deg)}._uploadSection_10owf_17,._finishSection_10owf_18{margin-top:1rem;display:flex;padding:3rem 1rem;align-items:center;justify-content:center;background-color:#101010;border:1px solid rgba(255,255,255,.1);border-radius:3px}._uploadSection_10owf_17{flex-direction:row;gap:2rem}._finishSection_10owf_18{font-size:1.5rem;text-align:center;flex-direction:column;gap:1rem}._finishSection_10owf_18 ._error_10owf_40{color:#fa5656}._finishSection_10owf_18 ._success_10owf_43{color:#55b469}._singleActionCell_10owf_47{width:50px;text-align:center}._blink_1q0ge_1{animation:_blink_1q0ge_1 1s step-start infinite}@keyframes _blink_1q0ge_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1q0ge_13{transform:rotate(45deg)}._center_1q0ge_17{text-align:center}._nowrap_1q0ge_21{white-space:nowrap}tr ._secondaryRow_1q0ge_25{background-color:#ffffff12;padding-left:2em}._linkStartActive_1q0ge_30{flex-shrink:0;color:#8bb33d;transform:rotate(-45deg)}._flex_1q0ge_36{display:flex;align-items:center;gap:.5rem}._subdued_1q0ge_42{opacity:.4}._blink_6p65m_1{animation:_blink_6p65m_1 1s step-start infinite}@keyframes _blink_6p65m_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_6p65m_13{transform:rotate(45deg)}._halfWidth_6p65m_17{width:50%}._fullWidth_6p65m_21{width:100%}._twoCols_6p65m_25{display:grid;grid-template-columns:1fr 1fr;gap:1rem}._current_6p65m_31{background-color:#001a64!important}._blink_dpb46_1{animation:_blink_dpb46_1 1s step-start infinite}@keyframes _blink_dpb46_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_dpb46_13{transform:rotate(45deg)}._textEntry_dpb46_17{grid-area:input;display:flex;align-items:center;gap:.5rem;color:#b1b1b1}._inlineEntry_dpb46_25{display:grid;grid-template-areas:"label label" "input btn";grid-template-columns:1fr auto;column-gap:.5rem}._redirect_dpb46_32{grid-area:btn}._label_dpb46_36{color:#b1b1b1}._blink_vtewd_1{animation:_blink_vtewd_1 1s step-start infinite}@keyframes _blink_vtewd_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_vtewd_13{transform:rotate(45deg)}._fullWidth_vtewd_17{width:100%}._halfWidth_vtewd_21{width:50%}._halfWidthNoWrap_vtewd_25{width:50%;white-space:nowrap}._copiable_vtewd_30{cursor:text;-webkit-user-select:text;user-select:text}._self_vtewd_35{background-color:#001a64}._blink_l21m9_1{animation:_blink_l21m9_1 1s step-start infinite}@keyframes _blink_l21m9_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_l21m9_13,._iconRotate_l21m9_17{transform:rotate(45deg)}._blink_1iru7_1{animation:_blink_1iru7_1 1s step-start infinite}@keyframes _blink_1iru7_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1iru7_13{transform:rotate(45deg)}._current_1iru7_17{background-color:#001a64}._isEditing_1iru7_21{color:#578af4}._form_1iru7_25{display:flex;align-items:center;justify-content:space-between;width:100%;gap:1rem}._formInput_1iru7_33{flex:2}._saveButton_1iru7_37{text-transform:capitalize}._containCell_1iru7_41{max-width:400px}._fullWidth_1iru7_45{width:100%}._innerColumn_1iru7_49{margin:0 2rem 2rem;display:flex;flex-direction:column;gap:1em}._inlineLabels_1iru7_57 label{display:flex;gap:1rem}._warningInfo_1iru7_62{margin-bottom:1rem}._empty_1iru7_66{height:300px;position:relative}._blink_cq029_1{animation:_blink_cq029_1 1s step-start infinite}@keyframes _blink_cq029_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_cq029_13{transform:rotate(45deg)}._container_cq029_17{display:flex;align-items:center;gap:.25rem}._container_cq029_17 input{width:5em}._blink_m5263_1{animation:_blink_m5263_1 1s step-start infinite}@keyframes _blink_m5263_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_m5263_13{transform:rotate(45deg)}._uploadLogoCard_m5263_17{display:flex;gap:1rem;justify-content:center;align-items:center;flex-direction:column;background-color:#101010;border:1px solid rgba(255,255,255,.1);border-radius:3px}._uploadLogoCard_m5263_17 img{max-width:250px;height:auto}._customDataItem_m5263_32{width:100%;display:flex;flex-direction:column;gap:.5rem}._titleRow_m5263_39{display:flex;gap:1rem;align-items:end}._titleRow_m5263_39 label{flex:1}._customImage_m5263_48{display:grid;grid-template-columns:1fr 72px;gap:1rem}._imageContainer_m5263_54{width:72px;height:72px;background-color:#202020}._blink_18rtd_1{animation:_blink_18rtd_1 1s step-start infinite}@keyframes _blink_18rtd_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_18rtd_13{transform:rotate(45deg)}._editorActions_18rtd_17{width:100%}._right_18rtd_21{align-self:end;text-align:right}._column_18rtd_26{width:100%;display:flex;gap:1rem;flex-direction:column}._blink_1dxip_1{animation:_blink_1dxip_1 1s step-start infinite}@keyframes _blink_1dxip_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1dxip_13{transform:rotate(45deg)}._corner_1dxip_17{position:fixed;top:6rem;right:4rem;z-index:100}._contentWrapper_1dxip_24{display:flex;flex-direction:column;height:100%;width:100%;position:relative}._content_1dxip_24{margin:1rem;overflow-y:auto;flex-grow:1;padding-bottom:300px}._blink_86c70_1{animation:_blink_86c70_1 1s step-start infinite}@keyframes _blink_86c70_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_86c70_13{transform:rotate(45deg)}._tabs_86c70_17,ul{list-style:none;padding:0;margin:0}._tabs_86c70_17{width:min(30vw,300px);display:flex;flex-direction:column;overflow-y:auto}._primary_86c70_31,._secondary_86c70_32{padding:.25rem 1rem;margin-right:1rem}._primary_86c70_31:focus,._secondary_86c70_32:focus{background-color:#404040;outline:0}._primary_86c70_31:hover,._secondary_86c70_32:hover{background-color:#404040;cursor:pointer}._primary_86c70_31{font-size:1rem;border-radius:2px;display:flex;align-items:center;gap:.5rem}._primary_86c70_31._active_86c70_54{color:#779be7;background-color:#2d2d2d}._primary_86c70_31._highlight_86c70_58{color:#ff7878}._primary_86c70_31._highlight_86c70_58:before{content:"";width:.5em;height:.5em;border-radius:99px;background-color:#ff7878}._primary_86c70_31._split_86c70_68{margin-top:1rem}._secondary_86c70_32{margin-left:1rem;color:#b1b1b1;border-left:1px solid rgba(255,255,255,.1);font-size:calc(1rem - 2px)}._secondary_86c70_32._active_86c70_54{color:#779be7}._blink_1fy3l_1{animation:_blink_1fy3l_1 1s step-start infinite}@keyframes _blink_1fy3l_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_1fy3l_13{transform:rotate(45deg)}._container_1fy3l_17{grid-area:main;width:100%;padding:1rem;display:flex;gap:.25rem;overflow:hidden;background-color:#101010}._blink_khqv6_1{animation:_blink_khqv6_1 1s step-start infinite}@keyframes _blink_khqv6_1{0%{opacity:100%}50%{opacity:20%}}._fourtyfive_khqv6_13{transform:rotate(45deg)}._sections_khqv6_17{display:grid;grid-template-columns:1fr 5fr;gap:2rem}._column_khqv6_23,._about_khqv6_23{display:flex;flex-direction:column;gap:1rem;width:100%}._about_khqv6_23{font-size:calc(1rem - 3px);padding-inline:.25rem}._inline_khqv6_35{display:flex;align-items:center;gap:.5rem}._header_khqv6_41{font-size:1.5rem;display:flex;align-items:center;justify-content:space-between}._logo_khqv6_48{max-width:100px;height:auto}._buttonRow_khqv6_53{display:flex;gap:1rem;justify-content:end}._buttonRow_khqv6_53 :first-child{margin-right:auto}._tableContainer_khqv6_62{height:350px;max-height:350px;overflow-y:auto}._table_khqv6_62{width:100%;font-size:calc(1rem - 2px)}._table_khqv6_62 tbody{background-color:#1a1a1a}._table_khqv6_62 tbody tr:hover:not(._current_khqv6_75){background-color:#101010}._table_khqv6_62 tbody tr ._current_khqv6_75:hover{background-color:#0036a6}._table_khqv6_62 tr{height:2rem;cursor:pointer}._table_khqv6_62 th,._table_khqv6_62 td{padding-inline:.5rem}._table_khqv6_62 th{text-align:left;font-size:calc(1rem - 3px);color:#b1b1b1}._current_khqv6_75{background-color:#2b5abc}._current_khqv6_75:hover{background-color:#0036a6}