@getontime/cli 4.4.1 → 4.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/client/assets/{Backstage-BY9GL_rk.js → Backstage-BdrcXNr9.js} +2 -2
  2. package/client/assets/Backstage-BdrcXNr9.js.br +0 -0
  3. package/client/assets/Backstage-BdrcXNr9.js.gz +0 -0
  4. package/client/assets/{Backstage-BY9GL_rk.js.map → Backstage-BdrcXNr9.js.map} +1 -1
  5. package/client/assets/{Countdown-CXFgDHND.js → Countdown-DQM2ppPg.js} +2 -2
  6. package/client/assets/Countdown-DQM2ppPg.js.br +0 -0
  7. package/client/assets/Countdown-DQM2ppPg.js.gz +0 -0
  8. package/client/assets/{Countdown-CXFgDHND.js.map → Countdown-DQM2ppPg.js.map} +1 -1
  9. package/client/assets/{CuesheetTable-BLICUNky.js → CuesheetTable-B5LQVh5m.js} +2 -2
  10. package/client/assets/CuesheetTable-B5LQVh5m.js.br +0 -0
  11. package/client/assets/CuesheetTable-B5LQVh5m.js.gz +0 -0
  12. package/client/assets/{CuesheetTable-BLICUNky.js.map → CuesheetTable-B5LQVh5m.js.map} +1 -1
  13. package/client/assets/{CustomTranslationModal-4PVZBtkC.js → CustomTranslationModal-CML7Vsot.js} +2 -2
  14. package/client/assets/CustomTranslationModal-CML7Vsot.js.br +0 -0
  15. package/client/assets/CustomTranslationModal-CML7Vsot.js.gz +0 -0
  16. package/client/assets/{CustomTranslationModal-4PVZBtkC.js.map → CustomTranslationModal-CML7Vsot.js.map} +1 -1
  17. package/client/assets/{DelayIndicator-DUbpd6DG.js → DelayIndicator-DKS6mZdB.js} +2 -2
  18. package/client/assets/DelayIndicator-DKS6mZdB.js.br +0 -0
  19. package/client/assets/DelayIndicator-DKS6mZdB.js.gz +0 -0
  20. package/client/assets/{DelayIndicator-DUbpd6DG.js.map → DelayIndicator-DKS6mZdB.js.map} +1 -1
  21. package/client/assets/{EditorFeatureWrapper-CV_zaDoG.js → EditorFeatureWrapper-C1vLQxiy.js} +2 -2
  22. package/client/assets/EditorFeatureWrapper-C1vLQxiy.js.br +0 -0
  23. package/client/assets/EditorFeatureWrapper-C1vLQxiy.js.gz +0 -0
  24. package/client/assets/{EditorFeatureWrapper-CV_zaDoG.js.map → EditorFeatureWrapper-C1vLQxiy.js.map} +1 -1
  25. package/client/assets/{EditorUtils-CLBWDP4k.js → EditorUtils-BLcTuWz1.js} +2 -2
  26. package/client/assets/EditorUtils-BLcTuWz1.js.br +0 -0
  27. package/client/assets/EditorUtils-BLcTuWz1.js.gz +0 -0
  28. package/client/assets/{EditorUtils-CLBWDP4k.js.map → EditorUtils-BLcTuWz1.js.map} +1 -1
  29. package/client/assets/{EmptyPage-DmpOAg7R.js → EmptyPage-CYVrjOvI.js} +2 -2
  30. package/client/assets/EmptyPage-CYVrjOvI.js.br +0 -0
  31. package/client/assets/EmptyPage-CYVrjOvI.js.gz +0 -0
  32. package/client/assets/{EmptyPage-DmpOAg7R.js.map → EmptyPage-CYVrjOvI.js.map} +1 -1
  33. package/client/assets/{FollowButton-CAUWz5Ma.js → FollowButton-DcSbb4R_.js} +2 -2
  34. package/client/assets/FollowButton-DcSbb4R_.js.br +0 -0
  35. package/client/assets/FollowButton-DcSbb4R_.js.gz +0 -0
  36. package/client/assets/{FollowButton-CAUWz5Ma.js.map → FollowButton-DcSbb4R_.js.map} +1 -1
  37. package/client/assets/{MessageControlExport-Dm8IjSr4.js → MessageControlExport-BgT9JaXk.js} +3 -3
  38. package/client/assets/MessageControlExport-BgT9JaXk.js.br +0 -0
  39. package/client/assets/MessageControlExport-BgT9JaXk.js.gz +0 -0
  40. package/client/assets/{MessageControlExport-Dm8IjSr4.js.map → MessageControlExport-BgT9JaXk.js.map} +1 -1
  41. package/client/assets/{MultiPartProgressBar-Fp-sTN2u.js → MultiPartProgressBar-W2a-JWPY.js} +2 -2
  42. package/client/assets/MultiPartProgressBar-W2a-JWPY.js.br +0 -0
  43. package/client/assets/MultiPartProgressBar-W2a-JWPY.js.gz +0 -0
  44. package/client/assets/{MultiPartProgressBar-Fp-sTN2u.js.map → MultiPartProgressBar-W2a-JWPY.js.map} +1 -1
  45. package/client/assets/{OperatorExport-CE4ajLPS.js → OperatorExport-CbWojpp6.js} +2 -2
  46. package/client/assets/OperatorExport-CbWojpp6.js.br +0 -0
  47. package/client/assets/OperatorExport-CbWojpp6.js.gz +0 -0
  48. package/client/assets/{OperatorExport-CE4ajLPS.js.map → OperatorExport-CbWojpp6.js.map} +1 -1
  49. package/client/assets/{OverviewWrapper-BNnAIUP1.js → OverviewWrapper-B2i8d3rt.js} +2 -2
  50. package/client/assets/OverviewWrapper-B2i8d3rt.js.br +0 -0
  51. package/client/assets/OverviewWrapper-B2i8d3rt.js.gz +0 -0
  52. package/client/assets/{OverviewWrapper-BNnAIUP1.js.map → OverviewWrapper-B2i8d3rt.js.map} +1 -1
  53. package/client/assets/{PipHost-CbNFsfqp.js → PipHost-Dz2oy7XG.js} +2 -2
  54. package/client/assets/PipHost-Dz2oy7XG.js.br +0 -0
  55. package/client/assets/PipHost-Dz2oy7XG.js.gz +0 -0
  56. package/client/assets/{PipHost-CbNFsfqp.js.map → PipHost-Dz2oy7XG.js.map} +1 -1
  57. package/client/assets/{ProjectInfo-Bf5z4Xsv.js → ProjectInfo-BR_7Hp5u.js} +2 -2
  58. package/client/assets/ProjectInfo-BR_7Hp5u.js.br +0 -0
  59. package/client/assets/ProjectInfo-BR_7Hp5u.js.gz +0 -0
  60. package/client/assets/{ProjectInfo-Bf5z4Xsv.js.map → ProjectInfo-BR_7Hp5u.js.map} +1 -1
  61. package/client/assets/{ProtectRoute-CCHzyy0I.js → ProtectRoute-Bxq6q7ba.js} +2 -2
  62. package/client/assets/ProtectRoute-Bxq6q7ba.js.br +0 -0
  63. package/client/assets/ProtectRoute-Bxq6q7ba.js.gz +0 -0
  64. package/client/assets/{ProtectRoute-CCHzyy0I.js.map → ProtectRoute-Bxq6q7ba.js.map} +1 -1
  65. package/client/assets/{ProtectedCuesheet-COI1W_V3.js → ProtectedCuesheet-C7AqD2dy.js} +2 -2
  66. package/client/assets/ProtectedCuesheet-C7AqD2dy.js.br +0 -0
  67. package/client/assets/ProtectedCuesheet-C7AqD2dy.js.gz +0 -0
  68. package/client/assets/{ProtectedCuesheet-COI1W_V3.js.map → ProtectedCuesheet-C7AqD2dy.js.map} +1 -1
  69. package/client/assets/{ProtectedEditor-BvTFmv-F.js → ProtectedEditor-CsfvVyOU.js} +3 -3
  70. package/client/assets/ProtectedEditor-CsfvVyOU.js.br +0 -0
  71. package/client/assets/ProtectedEditor-CsfvVyOU.js.gz +0 -0
  72. package/client/assets/{ProtectedEditor-BvTFmv-F.js.map → ProtectedEditor-CsfvVyOU.js.map} +1 -1
  73. package/client/assets/{RundownExport-C_q3KYN_.js → RundownExport-25orDQIW.js} +2 -2
  74. package/client/assets/RundownExport-25orDQIW.js.br +0 -0
  75. package/client/assets/RundownExport-25orDQIW.js.gz +0 -0
  76. package/client/assets/{RundownExport-C_q3KYN_.js.map → RundownExport-25orDQIW.js.map} +1 -1
  77. package/client/assets/{Select-DQwYPDyI.js → Select-BnGTAeXJ.js} +2 -2
  78. package/client/assets/Select-BnGTAeXJ.js.br +0 -0
  79. package/client/assets/Select-BnGTAeXJ.js.gz +0 -0
  80. package/client/assets/{Select-DQwYPDyI.js.map → Select-BnGTAeXJ.js.map} +1 -1
  81. package/client/assets/{Studio-DzXTmBx4.js → Studio-BK2Klo_K.js} +2 -2
  82. package/client/assets/Studio-BK2Klo_K.js.br +0 -0
  83. package/client/assets/Studio-BK2Klo_K.js.gz +0 -0
  84. package/client/assets/{Studio-DzXTmBx4.js.map → Studio-BK2Klo_K.js.map} +1 -1
  85. package/client/assets/{StyleEditor-ClMEMaWh.js → StyleEditor-DIHQ1PUV.js} +2 -2
  86. package/client/assets/StyleEditor-DIHQ1PUV.js.br +0 -0
  87. package/client/assets/StyleEditor-DIHQ1PUV.js.gz +0 -0
  88. package/client/assets/{StyleEditor-ClMEMaWh.js.map → StyleEditor-DIHQ1PUV.js.map} +1 -1
  89. package/client/assets/{SuperscriptPeriod-CBiZU34J.js → SuperscriptPeriod-EEedc9rG.js} +2 -2
  90. package/client/assets/SuperscriptPeriod-EEedc9rG.js.br +0 -0
  91. package/client/assets/SuperscriptPeriod-EEedc9rG.js.gz +0 -0
  92. package/client/assets/{SuperscriptPeriod-CBiZU34J.js.map → SuperscriptPeriod-EEedc9rG.js.map} +1 -1
  93. package/client/assets/{SuperscriptTime-DP1CDlOX.js → SuperscriptTime-BVanhNvd.js} +2 -2
  94. package/client/assets/SuperscriptTime-BVanhNvd.js.br +0 -0
  95. package/client/assets/SuperscriptTime-BVanhNvd.js.gz +0 -0
  96. package/client/assets/{SuperscriptTime-DP1CDlOX.js.map → SuperscriptTime-BVanhNvd.js.map} +1 -1
  97. package/client/assets/{SwatchPicker-Dyxkxf3_.js → SwatchPicker-Ckpchvjo.js} +2 -2
  98. package/client/assets/SwatchPicker-Ckpchvjo.js.br +0 -0
  99. package/client/assets/SwatchPicker-Ckpchvjo.js.gz +0 -0
  100. package/client/assets/{SwatchPicker-Dyxkxf3_.js.map → SwatchPicker-Ckpchvjo.js.map} +1 -1
  101. package/client/assets/{TimeElements-pDYJeFbV.js → TimeElements-CYIgGk0T.js} +2 -2
  102. package/client/assets/TimeElements-CYIgGk0T.js.br +0 -0
  103. package/client/assets/TimeElements-CYIgGk0T.js.gz +0 -0
  104. package/client/assets/{TimeElements-pDYJeFbV.js.map → TimeElements-CYIgGk0T.js.map} +1 -1
  105. package/client/assets/{TimeInput-DTWDnaum.js → TimeInput-Cwl9vLWA.js} +2 -2
  106. package/client/assets/TimeInput-Cwl9vLWA.js.br +0 -0
  107. package/client/assets/TimeInput-Cwl9vLWA.js.gz +0 -0
  108. package/client/assets/{TimeInput-DTWDnaum.js.map → TimeInput-Cwl9vLWA.js.map} +1 -1
  109. package/client/assets/{TimelinePage-DbLt9rQi.js → TimelinePage-D4QNdk-Z.js} +2 -2
  110. package/client/assets/TimelinePage-D4QNdk-Z.js.br +0 -0
  111. package/client/assets/TimelinePage-D4QNdk-Z.js.gz +0 -0
  112. package/client/assets/{TimelinePage-DbLt9rQi.js.map → TimelinePage-D4QNdk-Z.js.map} +1 -1
  113. package/client/assets/{Timer-BfyVKQ8U.js → Timer-BJQKNHfo.js} +2 -2
  114. package/client/assets/Timer-BJQKNHfo.js.br +0 -0
  115. package/client/assets/Timer-BJQKNHfo.js.gz +0 -0
  116. package/client/assets/{Timer-BfyVKQ8U.js.map → Timer-BJQKNHfo.js.map} +1 -1
  117. package/client/assets/{TimerControlExport-BJfhJc07.js → TimerControlExport-Ba1vifNg.js} +2 -2
  118. package/client/assets/TimerControlExport-Ba1vifNg.js.br +0 -0
  119. package/client/assets/TimerControlExport-Ba1vifNg.js.gz +0 -0
  120. package/client/assets/{TimerControlExport-BJfhJc07.js.map → TimerControlExport-Ba1vifNg.js.map} +1 -1
  121. package/client/assets/{TimerDisplay-Dgmbqf65.js → TimerDisplay-tVcUk9j3.js} +2 -2
  122. package/client/assets/TimerDisplay-tVcUk9j3.js.br +0 -0
  123. package/client/assets/TimerDisplay-tVcUk9j3.js.gz +0 -0
  124. package/client/assets/{TimerDisplay-Dgmbqf65.js.map → TimerDisplay-tVcUk9j3.js.map} +1 -1
  125. package/client/assets/{TitleCard-MUurHeZ7.js → TitleCard-BNjv58eq.js} +2 -2
  126. package/client/assets/TitleCard-BNjv58eq.js.br +0 -0
  127. package/client/assets/TitleCard-BNjv58eq.js.gz +0 -0
  128. package/client/assets/{TitleCard-MUurHeZ7.js.map → TitleCard-BNjv58eq.js.map} +1 -1
  129. package/client/assets/{Tooltip-DXph8P8p.js → Tooltip-DZJ7u9gm.js} +2 -2
  130. package/client/assets/Tooltip-DZJ7u9gm.js.br +4 -0
  131. package/client/assets/Tooltip-DZJ7u9gm.js.gz +0 -0
  132. package/client/assets/{Tooltip-DXph8P8p.js.map → Tooltip-DZJ7u9gm.js.map} +1 -1
  133. package/client/assets/{ViewLogo-Ckp7i75x.js → ViewLogo-2I7w5Yms.js} +2 -2
  134. package/client/assets/ViewLogo-2I7w5Yms.js.br +0 -0
  135. package/client/assets/ViewLogo-2I7w5Yms.js.gz +0 -0
  136. package/client/assets/{ViewLogo-Ckp7i75x.js.map → ViewLogo-2I7w5Yms.js.map} +1 -1
  137. package/client/assets/{ViewParamsEditor-Cxngd15h.js → ViewParamsEditor-BX2RM8sx.js} +2 -2
  138. package/client/assets/ViewParamsEditor-BX2RM8sx.js.br +0 -0
  139. package/client/assets/ViewParamsEditor-BX2RM8sx.js.gz +0 -0
  140. package/client/assets/{ViewParamsEditor-Cxngd15h.js.map → ViewParamsEditor-BX2RM8sx.js.map} +1 -1
  141. package/client/assets/{editorSettings-D4jfu68W.js → editorSettings-_x6YKRfR.js} +2 -2
  142. package/client/assets/editorSettings-_x6YKRfR.js.br +6 -0
  143. package/client/assets/editorSettings-_x6YKRfR.js.gz +0 -0
  144. package/client/assets/{editorSettings-D4jfu68W.js.map → editorSettings-_x6YKRfR.js.map} +1 -1
  145. package/client/assets/{getProgress-B9UANc25.js → getProgress-ZUTmCn_v.js} +2 -2
  146. package/client/assets/getProgress-ZUTmCn_v.js.br +0 -0
  147. package/client/assets/getProgress-ZUTmCn_v.js.gz +0 -0
  148. package/client/assets/{getProgress-B9UANc25.js.map → getProgress-ZUTmCn_v.js.map} +1 -1
  149. package/client/assets/{index-2lQ-45a9.js → index-Dm-4OTmY.js} +3 -3
  150. package/client/assets/index-Dm-4OTmY.js.br +0 -0
  151. package/client/assets/index-Dm-4OTmY.js.gz +0 -0
  152. package/client/assets/{index-2lQ-45a9.js.map → index-Dm-4OTmY.js.map} +1 -1
  153. package/client/assets/{offset-DAyBfv5b.js → offset-VthsmtrO.js} +2 -2
  154. package/client/assets/offset-VthsmtrO.js.br +0 -0
  155. package/client/assets/offset-VthsmtrO.js.gz +0 -0
  156. package/client/assets/{offset-DAyBfv5b.js.map → offset-VthsmtrO.js.map} +1 -1
  157. package/client/assets/{parseUserTime-WkVNjkkE.js → parseUserTime-sZbEBi61.js} +2 -2
  158. package/client/assets/parseUserTime-sZbEBi61.js.br +0 -0
  159. package/client/assets/parseUserTime-sZbEBi61.js.gz +0 -0
  160. package/client/assets/{parseUserTime-WkVNjkkE.js.map → parseUserTime-sZbEBi61.js.map} +1 -1
  161. package/client/assets/{playbackstate-znZk3SSJ.js → playbackstate-Dl_ZJABT.js} +2 -2
  162. package/client/assets/playbackstate-Dl_ZJABT.js.br +0 -0
  163. package/client/assets/playbackstate-Dl_ZJABT.js.gz +0 -0
  164. package/client/assets/{playbackstate-znZk3SSJ.js.map → playbackstate-Dl_ZJABT.js.map} +1 -1
  165. package/client/assets/{presentation.utils-CjjYs5II.js → presentation.utils-Z61KykAH.js} +2 -2
  166. package/client/assets/presentation.utils-Z61KykAH.js.br +0 -0
  167. package/client/assets/presentation.utils-Z61KykAH.js.gz +0 -0
  168. package/client/assets/{presentation.utils-CjjYs5II.js.map → presentation.utils-Z61KykAH.js.map} +1 -1
  169. package/client/assets/{rundownUtils-BTQ3EeqN.js → rundownUtils-CXZRD6yP.js} +2 -2
  170. package/client/assets/rundownUtils-CXZRD6yP.js.br +0 -0
  171. package/client/assets/rundownUtils-CXZRD6yP.js.gz +0 -0
  172. package/client/assets/{rundownUtils-BTQ3EeqN.js.map → rundownUtils-CXZRD6yP.js.map} +1 -1
  173. package/client/assets/timer.utils-B4bvsns3.js +2 -0
  174. package/client/assets/timer.utils-B4bvsns3.js.br +0 -0
  175. package/client/assets/timer.utils-B4bvsns3.js.gz +0 -0
  176. package/client/assets/{timer.utils-B-Ui91P7.js.map → timer.utils-B4bvsns3.js.map} +1 -1
  177. package/client/assets/{useCustomFields-zr9SUl5o.js → useCustomFields-BBE4LBBr.js} +2 -2
  178. package/client/assets/useCustomFields-BBE4LBBr.js.br +0 -0
  179. package/client/assets/useCustomFields-BBE4LBBr.js.gz +0 -0
  180. package/client/assets/{useCustomFields-zr9SUl5o.js.map → useCustomFields-BBE4LBBr.js.map} +1 -1
  181. package/client/assets/{useEventSelection-B9mbj1cM.js → useEventSelection-Bpbu89c7.js} +2 -2
  182. package/client/assets/useEventSelection-Bpbu89c7.js.br +0 -0
  183. package/client/assets/useEventSelection-Bpbu89c7.js.gz +0 -0
  184. package/client/assets/{useEventSelection-B9mbj1cM.js.map → useEventSelection-Bpbu89c7.js.map} +1 -1
  185. package/client/assets/{useProjectData-DD_BQ9eJ.js → useProjectData-C110zIXC.js} +2 -2
  186. package/client/assets/useProjectData-C110zIXC.js.br +0 -0
  187. package/client/assets/useProjectData-C110zIXC.js.gz +0 -0
  188. package/client/assets/{useProjectData-DD_BQ9eJ.js.map → useProjectData-C110zIXC.js.map} +1 -1
  189. package/client/assets/{useReport-DozG5uz5.js → useReport-DqSBq4MG.js} +2 -2
  190. package/client/assets/useReport-DqSBq4MG.js.br +0 -0
  191. package/client/assets/useReport-DqSBq4MG.js.gz +0 -0
  192. package/client/assets/{useReport-DozG5uz5.js.map → useReport-DqSBq4MG.js.map} +1 -1
  193. package/client/assets/{useRundown-D6vokFHi.js → useRundown-DAo6huE4.js} +2 -2
  194. package/client/assets/useRundown-DAo6huE4.js.br +0 -0
  195. package/client/assets/useRundown-DAo6huE4.js.gz +0 -0
  196. package/client/assets/{useRundown-D6vokFHi.js.map → useRundown-DAo6huE4.js.map} +1 -1
  197. package/client/assets/{useSelectAndRevealEntry-Dd6MpVHe.js → useSelectAndRevealEntry-DTg0hmxA.js} +2 -2
  198. package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.br +0 -0
  199. package/client/assets/useSelectAndRevealEntry-DTg0hmxA.js.gz +0 -0
  200. package/client/assets/{useSelectAndRevealEntry-Dd6MpVHe.js.map → useSelectAndRevealEntry-DTg0hmxA.js.map} +1 -1
  201. package/client/assets/{useWindowTitle-bg-fLPOk.js → useWindowTitle-DM8dIp8L.js} +2 -2
  202. package/client/assets/useWindowTitle-DM8dIp8L.js.br +0 -0
  203. package/client/assets/useWindowTitle-DM8dIp8L.js.gz +0 -0
  204. package/client/assets/{useWindowTitle-bg-fLPOk.js.map → useWindowTitle-DM8dIp8L.js.map} +1 -1
  205. package/client/assets/{validateEvent-BUgLWn7x.js → validateEvent-GnPt-e9-.js} +2 -2
  206. package/client/assets/validateEvent-GnPt-e9-.js.br +0 -0
  207. package/client/assets/validateEvent-GnPt-e9-.js.gz +0 -0
  208. package/client/assets/{validateEvent-BUgLWn7x.js.map → validateEvent-GnPt-e9-.js.map} +1 -1
  209. package/client/assets/{vendor-CKDP5hij.js → vendor-BKUJ0_Du.js} +2 -2
  210. package/client/assets/vendor-BKUJ0_Du.js.br +0 -0
  211. package/client/assets/{vendor-CKDP5hij.js.gz → vendor-BKUJ0_Du.js.gz} +0 -0
  212. package/client/assets/{vendor-CKDP5hij.js.map → vendor-BKUJ0_Du.js.map} +1 -1
  213. package/client/assets/{viewLoader.utils-Bn5zu5sz.js → viewLoader.utils-4lL4PiNI.js} +2 -2
  214. package/client/assets/viewLoader.utils-4lL4PiNI.js.br +0 -0
  215. package/client/assets/viewLoader.utils-4lL4PiNI.js.gz +0 -0
  216. package/client/assets/{viewLoader.utils-Bn5zu5sz.js.map → viewLoader.utils-4lL4PiNI.js.map} +1 -1
  217. package/client/assets/{viewUtils-DQFwr7hm.js → viewUtils-29a3Mmiu.js} +2 -2
  218. package/client/assets/viewUtils-29a3Mmiu.js.br +0 -0
  219. package/client/assets/viewUtils-29a3Mmiu.js.gz +0 -0
  220. package/client/assets/{viewUtils-DQFwr7hm.js.map → viewUtils-29a3Mmiu.js.map} +1 -1
  221. package/client/index.html +2 -2
  222. package/package.json +1 -1
  223. package/server/index.cjs +1 -1
  224. package/client/assets/Backstage-BY9GL_rk.js.br +0 -0
  225. package/client/assets/Backstage-BY9GL_rk.js.gz +0 -0
  226. package/client/assets/Countdown-CXFgDHND.js.br +0 -0
  227. package/client/assets/Countdown-CXFgDHND.js.gz +0 -0
  228. package/client/assets/CuesheetTable-BLICUNky.js.br +0 -0
  229. package/client/assets/CuesheetTable-BLICUNky.js.gz +0 -0
  230. package/client/assets/CustomTranslationModal-4PVZBtkC.js.br +0 -0
  231. package/client/assets/CustomTranslationModal-4PVZBtkC.js.gz +0 -0
  232. package/client/assets/DelayIndicator-DUbpd6DG.js.br +0 -0
  233. package/client/assets/DelayIndicator-DUbpd6DG.js.gz +0 -0
  234. package/client/assets/EditorFeatureWrapper-CV_zaDoG.js.br +0 -0
  235. package/client/assets/EditorFeatureWrapper-CV_zaDoG.js.gz +0 -0
  236. package/client/assets/EditorUtils-CLBWDP4k.js.br +0 -0
  237. package/client/assets/EditorUtils-CLBWDP4k.js.gz +0 -0
  238. package/client/assets/EmptyPage-DmpOAg7R.js.br +0 -2
  239. package/client/assets/EmptyPage-DmpOAg7R.js.gz +0 -0
  240. package/client/assets/FollowButton-CAUWz5Ma.js.br +0 -0
  241. package/client/assets/FollowButton-CAUWz5Ma.js.gz +0 -0
  242. package/client/assets/MessageControlExport-Dm8IjSr4.js.br +0 -0
  243. package/client/assets/MessageControlExport-Dm8IjSr4.js.gz +0 -0
  244. package/client/assets/MultiPartProgressBar-Fp-sTN2u.js.br +0 -0
  245. package/client/assets/MultiPartProgressBar-Fp-sTN2u.js.gz +0 -0
  246. package/client/assets/OperatorExport-CE4ajLPS.js.br +0 -0
  247. package/client/assets/OperatorExport-CE4ajLPS.js.gz +0 -0
  248. package/client/assets/OverviewWrapper-BNnAIUP1.js.br +0 -0
  249. package/client/assets/OverviewWrapper-BNnAIUP1.js.gz +0 -0
  250. package/client/assets/PipHost-CbNFsfqp.js.br +0 -0
  251. package/client/assets/PipHost-CbNFsfqp.js.gz +0 -0
  252. package/client/assets/ProjectInfo-Bf5z4Xsv.js.br +0 -0
  253. package/client/assets/ProjectInfo-Bf5z4Xsv.js.gz +0 -0
  254. package/client/assets/ProtectRoute-CCHzyy0I.js.br +0 -0
  255. package/client/assets/ProtectRoute-CCHzyy0I.js.gz +0 -0
  256. package/client/assets/ProtectedCuesheet-COI1W_V3.js.br +0 -0
  257. package/client/assets/ProtectedCuesheet-COI1W_V3.js.gz +0 -0
  258. package/client/assets/ProtectedEditor-BvTFmv-F.js.br +0 -0
  259. package/client/assets/ProtectedEditor-BvTFmv-F.js.gz +0 -0
  260. package/client/assets/RundownExport-C_q3KYN_.js.br +0 -0
  261. package/client/assets/RundownExport-C_q3KYN_.js.gz +0 -0
  262. package/client/assets/Select-DQwYPDyI.js.br +0 -0
  263. package/client/assets/Select-DQwYPDyI.js.gz +0 -0
  264. package/client/assets/Studio-DzXTmBx4.js.br +0 -0
  265. package/client/assets/Studio-DzXTmBx4.js.gz +0 -0
  266. package/client/assets/StyleEditor-ClMEMaWh.js.br +0 -0
  267. package/client/assets/StyleEditor-ClMEMaWh.js.gz +0 -0
  268. package/client/assets/SuperscriptPeriod-CBiZU34J.js.br +0 -0
  269. package/client/assets/SuperscriptPeriod-CBiZU34J.js.gz +0 -0
  270. package/client/assets/SuperscriptTime-DP1CDlOX.js.br +0 -0
  271. package/client/assets/SuperscriptTime-DP1CDlOX.js.gz +0 -0
  272. package/client/assets/SwatchPicker-Dyxkxf3_.js.br +0 -0
  273. package/client/assets/SwatchPicker-Dyxkxf3_.js.gz +0 -0
  274. package/client/assets/TimeElements-pDYJeFbV.js.br +0 -0
  275. package/client/assets/TimeElements-pDYJeFbV.js.gz +0 -0
  276. package/client/assets/TimeInput-DTWDnaum.js.br +0 -0
  277. package/client/assets/TimeInput-DTWDnaum.js.gz +0 -0
  278. package/client/assets/TimelinePage-DbLt9rQi.js.br +0 -0
  279. package/client/assets/TimelinePage-DbLt9rQi.js.gz +0 -0
  280. package/client/assets/Timer-BfyVKQ8U.js.br +0 -0
  281. package/client/assets/Timer-BfyVKQ8U.js.gz +0 -0
  282. package/client/assets/TimerControlExport-BJfhJc07.js.br +0 -0
  283. package/client/assets/TimerControlExport-BJfhJc07.js.gz +0 -0
  284. package/client/assets/TimerDisplay-Dgmbqf65.js.br +0 -0
  285. package/client/assets/TimerDisplay-Dgmbqf65.js.gz +0 -0
  286. package/client/assets/TitleCard-MUurHeZ7.js.br +0 -0
  287. package/client/assets/TitleCard-MUurHeZ7.js.gz +0 -0
  288. package/client/assets/Tooltip-DXph8P8p.js.br +0 -0
  289. package/client/assets/Tooltip-DXph8P8p.js.gz +0 -0
  290. package/client/assets/ViewLogo-Ckp7i75x.js.br +0 -0
  291. package/client/assets/ViewLogo-Ckp7i75x.js.gz +0 -0
  292. package/client/assets/ViewParamsEditor-Cxngd15h.js.br +0 -0
  293. package/client/assets/ViewParamsEditor-Cxngd15h.js.gz +0 -0
  294. package/client/assets/editorSettings-D4jfu68W.js.br +0 -0
  295. package/client/assets/editorSettings-D4jfu68W.js.gz +0 -0
  296. package/client/assets/getProgress-B9UANc25.js.br +0 -0
  297. package/client/assets/getProgress-B9UANc25.js.gz +0 -0
  298. package/client/assets/index-2lQ-45a9.js.br +0 -0
  299. package/client/assets/index-2lQ-45a9.js.gz +0 -0
  300. package/client/assets/offset-DAyBfv5b.js.br +0 -4
  301. package/client/assets/offset-DAyBfv5b.js.gz +0 -0
  302. package/client/assets/parseUserTime-WkVNjkkE.js.br +0 -0
  303. package/client/assets/parseUserTime-WkVNjkkE.js.gz +0 -0
  304. package/client/assets/playbackstate-znZk3SSJ.js.br +0 -0
  305. package/client/assets/playbackstate-znZk3SSJ.js.gz +0 -0
  306. package/client/assets/presentation.utils-CjjYs5II.js.br +0 -0
  307. package/client/assets/presentation.utils-CjjYs5II.js.gz +0 -0
  308. package/client/assets/rundownUtils-BTQ3EeqN.js.br +0 -0
  309. package/client/assets/rundownUtils-BTQ3EeqN.js.gz +0 -0
  310. package/client/assets/timer.utils-B-Ui91P7.js +0 -2
  311. package/client/assets/timer.utils-B-Ui91P7.js.br +0 -0
  312. package/client/assets/timer.utils-B-Ui91P7.js.gz +0 -0
  313. package/client/assets/useCustomFields-zr9SUl5o.js.br +0 -0
  314. package/client/assets/useCustomFields-zr9SUl5o.js.gz +0 -0
  315. package/client/assets/useEventSelection-B9mbj1cM.js.br +0 -0
  316. package/client/assets/useEventSelection-B9mbj1cM.js.gz +0 -0
  317. package/client/assets/useProjectData-DD_BQ9eJ.js.br +0 -0
  318. package/client/assets/useProjectData-DD_BQ9eJ.js.gz +0 -0
  319. package/client/assets/useReport-DozG5uz5.js.br +0 -0
  320. package/client/assets/useReport-DozG5uz5.js.gz +0 -0
  321. package/client/assets/useRundown-D6vokFHi.js.br +0 -0
  322. package/client/assets/useRundown-D6vokFHi.js.gz +0 -0
  323. package/client/assets/useSelectAndRevealEntry-Dd6MpVHe.js.br +0 -0
  324. package/client/assets/useSelectAndRevealEntry-Dd6MpVHe.js.gz +0 -0
  325. package/client/assets/useWindowTitle-bg-fLPOk.js.br +0 -0
  326. package/client/assets/useWindowTitle-bg-fLPOk.js.gz +0 -0
  327. package/client/assets/validateEvent-BUgLWn7x.js.br +0 -0
  328. package/client/assets/validateEvent-BUgLWn7x.js.gz +0 -0
  329. package/client/assets/vendor-CKDP5hij.js.br +0 -0
  330. package/client/assets/viewLoader.utils-Bn5zu5sz.js.br +0 -0
  331. package/client/assets/viewLoader.utils-Bn5zu5sz.js.gz +0 -0
  332. package/client/assets/viewUtils-DQFwr7hm.js.br +0 -0
  333. package/client/assets/viewUtils-DQFwr7hm.js.gz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ViewParamsEditor-Cxngd15h.js","sources":["../../src/common/components/view-params-editor/viewParams.utils.ts","../../src/common/components/view-params-editor/ViewParamsPresets.tsx","../../src/common/components/view-params-editor/constants.ts","../../src/common/components/view-params-editor/InlineColourPicker.tsx","../../src/common/components/view-params-editor/ParamInput.tsx","../../src/common/components/view-params-editor/ViewParamsSection.tsx","../../src/common/components/view-params-editor/ViewParamsEditor.tsx"],"sourcesContent":["import type { CustomFields, ProjectData } from 'ontime-types';\n\nimport type { SelectOption } from '../select/Select';\n\nimport type { MultiselectOption, ViewOption } from './viewParams.types';\n\n/**\n * Creates a list of custom fields for a select\n * Filters out image type custom fields\n */\nexport function makeOptionsFromCustomFields(\n customFields: CustomFields,\n additionalOptions: SelectOption[] = [],\n filterImageType = true,\n): SelectOption[] {\n const options: SelectOption[] = [...additionalOptions];\n\n // Add custom fields first\n for (const [key, value] of Object.entries(customFields)) {\n if (filterImageType && value.type === 'image') {\n continue;\n }\n\n options.push({\n value: `custom-${key}`,\n label: `Custom: ${value.label}`,\n });\n }\n\n return options;\n}\n\n/**\n * Creates data for a multiselect component from custom fields\n * Filters out image type custom fields\n */\nexport function makeCustomFieldSelectOptions(customFields: CustomFields, filterImageType = true): MultiselectOption[] {\n const options: MultiselectOption[] = [];\n\n // Add custom fields first\n for (const [key, value] of Object.entries(customFields)) {\n if (filterImageType && value.type === 'image') {\n continue;\n }\n\n options.push({\n value: key,\n label: value.label,\n colour: value.colour,\n });\n }\n\n return options;\n}\n\n/**\n * Creates data for a select element that displays project custom data\n */\nexport function makeProjectDataOptions(\n projectData: ProjectData,\n additionalOptions: SelectOption[] = [],\n): SelectOption[] {\n const generatedOptions = projectData.custom.map((entry, index) => {\n return {\n value: `${index}-${entry.title}`,\n label: entry.title,\n };\n });\n\n return [...additionalOptions, ...generatedOptions];\n}\n\ntype ViewParamsObj = { [key: string]: string | FormDataEntryValue };\n\n/**\n * Utility remove the # character from a hex string\n */\nfunction sanitiseColour(colour: string) {\n if (colour.startsWith('#')) {\n return colour.substring(1);\n }\n return colour;\n}\n\ntype FieldMetadata = {\n defaultValues: Record<string, string>;\n colorFields: Set<string>;\n booleanFields: Set<string>;\n isPersistedField: Set<string>;\n persistedValues: Record<string, string[]>;\n};\n\n/**\n * Utility collects metadata about fields from view options\n * - where are the default values\n * - which fields are colours\n * - which fields are persisted\n */\nfunction collectFieldMetadata(paramFields: ViewOption[]): FieldMetadata {\n const metadata: FieldMetadata = {\n defaultValues: {},\n colorFields: new Set(),\n booleanFields: new Set(),\n isPersistedField: new Set(),\n persistedValues: {},\n };\n\n paramFields.forEach((section) => {\n section.options.forEach((option) => {\n if (option.type === 'persist') {\n metadata.isPersistedField.add(option.id);\n if (option.values) {\n metadata.persistedValues[option.id] = option.values;\n }\n } else {\n metadata.defaultValues[option.id] = String(option.defaultValue);\n }\n\n if (option.type === 'colour') {\n metadata.colorFields.add(option.id);\n } else if (option.type === 'boolean') {\n metadata.booleanFields.add(option.id);\n }\n });\n });\n\n return metadata;\n}\n\n/**\n * Makes a new URLSearchParams object from the given params object\n * @param paramsObj - The object containing parameters to be converted\n * @param paramFields - The view options that define the parameters\n * @returns A new URLSearchParams object with the parameters\n */\nexport function getURLSearchParamsFromObj(paramsObj: ViewParamsObj, paramFields: ViewOption[]) {\n const newSearchParams = new URLSearchParams();\n const addedPairs = new Set<string>();\n const metadata = collectFieldMetadata(paramFields);\n\n // Utility function to safely add params without duplicates\n const addUniqueParam = (id: string, value: string) => {\n const pair = `${id}:${value}`;\n if (!addedPairs.has(pair)) {\n addedPairs.add(pair);\n newSearchParams.append(id, value);\n }\n };\n\n // First add all persisted values\n Object.entries(metadata.persistedValues).forEach(([id, values]) => {\n values.forEach((value) => {\n if (value) {\n addUniqueParam(id, value);\n }\n });\n });\n\n // Then process user-provided values\n Object.entries(paramsObj).forEach(([id, value]) => {\n if (typeof value === 'string' && value.length) {\n // For persisted fields, clear existing values before adding new ones\n if (metadata.isPersistedField.has(id)) {\n // Clear tracking of previous values for this field\n Array.from(addedPairs).forEach((pair) => {\n if (pair.startsWith(`${id}:`)) {\n addedPairs.delete(pair);\n }\n });\n newSearchParams.delete(id);\n }\n\n // Process and add new values\n value.split(',').forEach((v) => {\n // some field types need extra processing\n const processedValue = (() => {\n if (metadata.colorFields.has(id)) {\n return sanitiseColour(v);\n }\n if (metadata.booleanFields.has(id)) {\n return v === 'on' ? 'true' : 'false';\n }\n return v;\n })();\n if (metadata.isPersistedField.has(id) || metadata.defaultValues[id] !== processedValue) {\n addUniqueParam(id, processedValue);\n }\n });\n }\n });\n\n return newSearchParams;\n}\n\n/**\n * Extracts search params that are not managed by the view params editor\n * @param currentParams - The current URL search params\n * @param paramFields - The view options that define the managed parameters\n * @returns A new URLSearchParams object with preserved params\n */\nexport function getPreservedSearchParams(currentParams: URLSearchParams, paramFields: ViewOption[]) {\n const managedParamIds = new Set<string>();\n paramFields.forEach((section) => {\n section.options.forEach((option) => {\n managedParamIds.add(option.id);\n });\n });\n\n const preserved = new URLSearchParams();\n currentParams.forEach((value, key) => {\n if (!managedParamIds.has(key)) {\n preserved.append(key, value);\n }\n });\n return preserved;\n}\n","import { useSearchParams } from 'react-router';\nimport { OntimeView, URLPreset } from 'ontime-types';\n\nimport { useViewUrlPresets } from '../../hooks-query/useUrlPresets';\nimport { cx } from '../../utils/styleUtils';\nimport Button from '../buttons/Button';\n\nimport style from './ViewParamsPresets.module.scss';\n\n/**\n * Shows a list of presets for the current view\n */\nexport function ViewParamsPresets({ target }: { target: OntimeView }) {\n const { viewPresets } = useViewUrlPresets(target);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const handleRecall = (preset: URLPreset) => {\n const newSearch = new URLSearchParams(preset.search);\n newSearch.set('alias', preset.alias);\n setSearchParams(newSearch);\n };\n\n if (viewPresets.length === 0) {\n return null;\n }\n\n return (\n <div className={style.presetSection}>\n {viewPresets.map((preset) => {\n const active = searchParams.get('alias') === preset.alias;\n return (\n <div key={preset.alias} className={cx([style.preset, active && style.active])}>\n <div>{preset.alias}</div>\n <Button\n variant={active ? 'ghosted' : 'subtle-white'}\n onClick={() => handleRecall(preset)}\n disabled={active}\n className={style.presetActions}\n >\n {active ? 'Applied' : 'Apply'}\n </Button>\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * Gathers possible titles for view options\n */\nexport enum OptionTitle {\n ClockOptions = 'Clock Options',\n TimerOptions = 'Timer Options',\n DataSources = 'Data sources',\n ElementVisibility = 'Element visibility',\n BehaviourOptions = 'View behaviour',\n StyleOverride = 'View style override',\n Animation = 'View animation',\n Schedule = 'Schedule options',\n\n /** rendered as hidden inputs */\n Hidden = 'Hidden options',\n}\n","import { useEffect, useState } from 'react';\n\nimport SwatchPicker from '../input/colour-input/SwatchPicker';\n\nimport style from './InlineColourPicker.module.scss';\n\ninterface InlineColourPickerProps {\n name: string;\n value: string;\n}\n\nconst ensureHex = (value: string) => {\n if (!value.startsWith('#')) {\n return `#${value}`;\n }\n return value;\n};\n\nexport default function InlineColourPicker({ name, value }: InlineColourPickerProps) {\n const [colour, setColour] = useState(() => ensureHex(value));\n\n useEffect(() => {\n setColour(ensureHex(value));\n }, [value]);\n\n return (\n <div className={style.inline}>\n <SwatchPicker color={colour} onChange={setColour} alwaysDisplayColor />\n <span>{colour}</span>\n <input type='hidden' name={name} value={colour} />\n </div>\n );\n}\n","import { ComponentProps, useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router';\n\nimport { isStringBoolean } from '../../../views/common/viewUtils';\nimport Checkbox from '../checkbox/Checkbox';\nimport Input from '../input/input/Input';\nimport Select, { SelectOption } from '../select/Select';\nimport Switch from '../switch/Switch';\n\nimport InlineColourPicker from './InlineColourPicker';\nimport { ParamField } from './viewParams.types';\n\nimport style from './ParamInput.module.scss';\n\ninterface ParamInputProps {\n paramField: ParamField;\n}\n\nexport default function ParamInput({ paramField }: ParamInputProps) {\n const [searchParams] = useSearchParams();\n const { id, type, defaultValue } = paramField;\n\n if (type === 'persist') {\n if (!paramField.values || !paramField.values.length) {\n return null;\n }\n return <input hidden name={id} readOnly value={paramField.values.join(',')} />;\n }\n\n if (type === 'option') {\n const optionFromParams = searchParams.get(id);\n const defaultOptionValue = optionFromParams || defaultValue;\n\n if (paramField.values.length === 0) {\n return <span className={style.empty}>No options available</span>;\n }\n\n return <ControlledSelect id={id} initialValue={defaultOptionValue} options={paramField.values} />;\n }\n\n if (type === 'multi-option') {\n const optionFromParams = searchParams.getAll(id);\n\n return (\n <MultiOption\n paramField={paramField}\n options={optionFromParams.length ? optionFromParams : paramField.defaultValue ?? ['']}\n />\n );\n }\n\n if (type === 'boolean') {\n return <ControlledSwitch id={id} initialValue={isStringBoolean(searchParams.get(id)) ?? defaultValue} />;\n }\n\n if (type === 'number') {\n const { placeholder } = paramField;\n const defaultNumberValue = searchParams.get(id) ?? defaultValue;\n\n return (\n <Input\n height='large'\n type='number'\n step='any'\n name={id}\n defaultValue={defaultNumberValue}\n placeholder={placeholder}\n />\n );\n }\n\n if (type === 'colour') {\n return <InlineColourPicker name={id} value={searchParams.get(id) ?? defaultValue} />;\n }\n\n const defaultStringValue = searchParams.get(id) ?? defaultValue ?? '';\n const { placeholder } = paramField;\n\n return <ControlledInput id={id} initialValue={defaultStringValue} placeholder={placeholder} />;\n}\n\ninterface EditFormMultiOptionProps {\n paramField: ParamField & { type: 'multi-option' };\n options: string[];\n}\n\nfunction MultiOption({ paramField, options }: EditFormMultiOptionProps) {\n const { id, values } = paramField;\n const [paramState, setParamState] = useState<string[]>(options);\n\n // synchronise options\n useEffect(() => {\n setParamState(options);\n }, [options]);\n\n const toggleValue = (value: string, checked: boolean) => {\n if (checked) {\n setParamState((prev) => [...prev, value]);\n } else {\n setParamState((prev) => prev.filter((v) => v !== value));\n }\n };\n\n if (values.length === 0) {\n return <span className={style.empty}>No options available</span>;\n }\n\n return (\n <>\n <input name={id} hidden readOnly value={paramState.join(',')} />\n <div className={style.inline}>\n {values.map((option) => {\n return (\n <label\n key={option.value}\n className={style.toggleSelect}\n style={{\n '--user-bg': option.colour,\n }}\n >\n <Checkbox\n checked={paramState.includes(option.value)}\n onCheckedChange={(checked) => toggleValue(option.value, checked as boolean)}\n />\n {option.label}\n </label>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface ControlledSwitchProps {\n id: string;\n initialValue: boolean;\n}\nfunction ControlledSwitch({ id, initialValue }: ControlledSwitchProps) {\n const [checked, setChecked] = useState(initialValue);\n\n // synchronise checked state\n useEffect(() => {\n setChecked(initialValue);\n }, [initialValue]);\n\n return <Switch size='large' name={id} checked={checked} onCheckedChange={setChecked} />;\n}\n\ninterface ControlledSelectProps {\n id: string;\n initialValue?: string;\n options: SelectOption[];\n}\nfunction ControlledSelect({ id, initialValue, options }: ControlledSelectProps) {\n const [selected, setSelected] = useState(initialValue);\n\n // synchronise selected state\n useEffect(() => {\n setSelected(initialValue);\n }, [initialValue]);\n\n return (\n <Select\n size='large'\n name={id}\n options={options}\n value={selected}\n onValueChange={(value) => {\n if (value === null) return;\n setSelected(value);\n }}\n />\n );\n}\n\ninterface ControlledInputProps<T extends number | string> extends ComponentProps<typeof Input> {\n id: string;\n initialValue: T;\n}\nfunction ControlledInput<T extends number | string>({ id, initialValue, ...inputProps }: ControlledInputProps<T>) {\n const [value, setValue] = useState(initialValue);\n\n // synchronise selected state\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n return (\n <Input\n height='large'\n name={id}\n value={value}\n onChange={(event) => setValue(event.target.value as T)}\n {...inputProps}\n />\n );\n}\n","import { IoChevronDown } from 'react-icons/io5';\nimport { useLocalStorage } from '@mantine/hooks';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport { OptionTitle } from './constants';\nimport ParamInput from './ParamInput';\nimport { type ParamField } from './viewParams.types';\n\nimport style from './ViewParamsSection.module.scss';\n\ninterface ViewParamsSectionProps {\n title: string;\n collapsible?: boolean;\n options: ParamField[];\n}\n\nexport default function ViewParamsSection({ title, collapsible, options }: ViewParamsSectionProps) {\n const [collapsed, setCollapsed] = useLocalStorage({ key: `params-${title}`, defaultValue: false });\n\n const handleCollapse = () => {\n if (collapsible) {\n setCollapsed((prev) => !prev);\n }\n };\n\n return (\n <section className={style.section}>\n {title === OptionTitle.Hidden ? (\n <HiddenContents options={options} />\n ) : (\n <>\n <div className={cx([style.sectionHeader, collapsible && style.collapsible])} onClick={handleCollapse}>\n {title}\n {collapsible && <IoChevronDown className={cx([collapsed ? style.closed : style.open])} />}\n </div>\n <SectionContents options={options} collapsed={collapsed} />\n </>\n )}\n </section>\n );\n}\n\ninterface SectionContentsProps {\n options: ParamField[];\n collapsed: boolean;\n}\n\nfunction SectionContents({ options, collapsed }: SectionContentsProps) {\n return (\n <>\n {options.map((option) => {\n return (\n <label key={option.title} className={cx([style.label, collapsed && style.hidden])}>\n <span className={style.title}>{option.title}</span>\n <span className={style.description}>{option.description}</span>\n <ParamInput paramField={option} />\n </label>\n );\n })}\n </>\n );\n}\n\nfunction HiddenContents({ options }: { options: ParamField[] }) {\n return (\n <>\n {options.map((option, index) => {\n return <ParamInput key={option.title + index} paramField={option} />;\n })}\n </>\n );\n}\n","import { FormEvent, memo } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { useSearchParams } from 'react-router';\nimport { Dialog } from '@base-ui/react/dialog';\nimport { OntimeView } from 'ontime-types';\n\nimport { useIsSmallScreen } from '../../hooks/useIsSmallScreen';\nimport useViewSettings from '../../hooks-query/useViewSettings';\nimport Button from '../buttons/Button';\nimport IconButton from '../buttons/IconButton';\nimport Info from '../info/Info';\n\nimport { ViewOption } from './viewParams.types';\nimport { getPreservedSearchParams, getURLSearchParamsFromObj } from './viewParams.utils';\nimport { useViewParamsEditorStore } from './viewParamsEditor.store';\nimport { ViewParamsPresets } from './ViewParamsPresets';\nimport ViewParamsSection from './ViewParamsSection';\n\nimport style from './ViewParamsEditor.module.scss';\n\ninterface EditFormDrawerProps {\n target: OntimeView;\n viewOptions: ViewOption[];\n}\n\nexport default memo(ViewParamsEditor);\nfunction ViewParamsEditor({ target, viewOptions }: EditFormDrawerProps) {\n const [searchParams, setSearchParams] = useSearchParams();\n const { data: viewSettings } = useViewSettings();\n const { isOpen, close } = useViewParamsEditorStore();\n const isSmallScreen = useIsSmallScreen();\n\n const getPreservedParams = () => getPreservedSearchParams(searchParams, viewOptions);\n\n const handleClose = () => {\n close();\n };\n\n const resetParams = () => {\n setSearchParams(getPreservedParams());\n };\n\n const onParamsFormSubmit = (formEvent: FormEvent<HTMLFormElement>) => {\n formEvent.preventDefault();\n\n const newParamsObject = Object.fromEntries(new FormData(formEvent.currentTarget));\n const newSearchParams = getURLSearchParamsFromObj(newParamsObject, viewOptions);\n const preservedParams = getPreservedParams();\n preservedParams.forEach((value, key) => {\n newSearchParams.append(key, value);\n });\n setSearchParams(newSearchParams);\n\n if (isSmallScreen) {\n close();\n }\n };\n\n return (\n <Dialog.Root\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) {\n handleClose();\n }\n }}\n >\n <Dialog.Portal>\n <Dialog.Backdrop className={style.backdrop} />\n <Dialog.Popup className={style.drawer}>\n <div className={style.header}>\n <Dialog.Title>Customise</Dialog.Title>\n <IconButton variant='subtle-white' size='large' data-testid='close-view-params' onClick={handleClose}>\n <IoClose />\n </IconButton>\n </div>\n <div className={style.body}>\n {viewSettings.overrideStyles && (\n <Info className={style.info}>This view style is being modified by a custom CSS file.</Info>\n )}\n <ViewParamsPresets target={target} />\n <form id='edit-params-form' onSubmit={onParamsFormSubmit} className={style.sectionList}>\n {viewOptions.map((section) => (\n <ViewParamsSection\n key={section.title}\n title={section.title}\n collapsible={section.collapsible}\n options={section.options}\n />\n ))}\n </form>\n </div>\n <div className={style.footer}>\n <Button variant='subtle' size='large' onClick={resetParams} type='reset'>\n Reset to default\n </Button>\n <Button\n variant='primary'\n size='large'\n form='edit-params-form'\n type='submit'\n data-testid='apply-view-params'\n >\n Apply\n </Button>\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n"],"names":["makeOptionsFromCustomFields","customFields","additionalOptions","filterImageType","options","key","value","Object","entries","type","push","label","makeCustomFieldSelectOptions","colour","makeProjectDataOptions","projectData","generatedOptions","custom","map","entry","index","title","sanitiseColour","startsWith","substring","collectFieldMetadata","paramFields","metadata","defaultValues","colorFields","Set","booleanFields","isPersistedField","persistedValues","forEach","section","option","add","id","values","String","defaultValue","getURLSearchParamsFromObj","paramsObj","newSearchParams","URLSearchParams","addedPairs","addUniqueParam","pair","has","append","length","Array","from","delete","split","v","processedValue","getPreservedSearchParams","currentParams","managedParamIds","preserved","ViewParamsPresets","target","viewPresets","useViewUrlPresets","searchParams","setSearchParams","useSearchParams","handleRecall","preset","newSearch","search","set","alias","style","presetSection","active","get","jsxs","cx","jsx","Button","presetActions","OptionTitle","ClockOptions","TimerOptions","DataSources","ElementVisibility","BehaviourOptions","StyleOverride","Animation","Schedule","Hidden","ensureHex","InlineColourPicker","name","setColour","useState","useEffect","inline","SwatchPicker","ParamInput","paramField","join","defaultOptionValue","empty","ControlledSelect","optionFromParams","getAll","MultiOption","ControlledSwitch","isStringBoolean","placeholder","defaultNumberValue","Input","defaultStringValue","ControlledInput","paramState","setParamState","toggleValue","checked","prev","filter","Fragment","toggleSelect","Checkbox","includes","initialValue","setChecked","Switch","selected","setSelected","Select","inputProps","setValue","event","ViewParamsSection","collapsible","collapsed","setCollapsed","useLocalStorage","handleCollapse","HiddenContents","sectionHeader","IoChevronDown","closed","open","SectionContents","hidden","description","memo","ViewParamsEditor","viewOptions","data","viewSettings","useViewSettings","isOpen","close","useViewParamsEditorStore","isSmallScreen","useIsSmallScreen","getPreservedParams","handleClose","resetParams","onParamsFormSubmit","formEvent","preventDefault","newParamsObject","fromEntries","FormData","currentTarget","Dialog.Root","Dialog.Portal","Dialog.Backdrop","backdrop","Dialog.Popup","drawer","header","Dialog.Title","IconButton","IoClose","body","overrideStyles","Info","info","sectionList","footer"],"mappings":"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"}
1
+ {"version":3,"file":"ViewParamsEditor-BX2RM8sx.js","sources":["../../src/common/components/view-params-editor/viewParams.utils.ts","../../src/common/components/view-params-editor/ViewParamsPresets.tsx","../../src/common/components/view-params-editor/constants.ts","../../src/common/components/view-params-editor/InlineColourPicker.tsx","../../src/common/components/view-params-editor/ParamInput.tsx","../../src/common/components/view-params-editor/ViewParamsSection.tsx","../../src/common/components/view-params-editor/ViewParamsEditor.tsx"],"sourcesContent":["import type { CustomFields, ProjectData } from 'ontime-types';\n\nimport type { SelectOption } from '../select/Select';\n\nimport type { MultiselectOption, ViewOption } from './viewParams.types';\n\n/**\n * Creates a list of custom fields for a select\n * Filters out image type custom fields\n */\nexport function makeOptionsFromCustomFields(\n customFields: CustomFields,\n additionalOptions: SelectOption[] = [],\n filterImageType = true,\n): SelectOption[] {\n const options: SelectOption[] = [...additionalOptions];\n\n // Add custom fields first\n for (const [key, value] of Object.entries(customFields)) {\n if (filterImageType && value.type === 'image') {\n continue;\n }\n\n options.push({\n value: `custom-${key}`,\n label: `Custom: ${value.label}`,\n });\n }\n\n return options;\n}\n\n/**\n * Creates data for a multiselect component from custom fields\n * Filters out image type custom fields\n */\nexport function makeCustomFieldSelectOptions(customFields: CustomFields, filterImageType = true): MultiselectOption[] {\n const options: MultiselectOption[] = [];\n\n // Add custom fields first\n for (const [key, value] of Object.entries(customFields)) {\n if (filterImageType && value.type === 'image') {\n continue;\n }\n\n options.push({\n value: key,\n label: value.label,\n colour: value.colour,\n });\n }\n\n return options;\n}\n\n/**\n * Creates data for a select element that displays project custom data\n */\nexport function makeProjectDataOptions(\n projectData: ProjectData,\n additionalOptions: SelectOption[] = [],\n): SelectOption[] {\n const generatedOptions = projectData.custom.map((entry, index) => {\n return {\n value: `${index}-${entry.title}`,\n label: entry.title,\n };\n });\n\n return [...additionalOptions, ...generatedOptions];\n}\n\ntype ViewParamsObj = { [key: string]: string | FormDataEntryValue };\n\n/**\n * Utility remove the # character from a hex string\n */\nfunction sanitiseColour(colour: string) {\n if (colour.startsWith('#')) {\n return colour.substring(1);\n }\n return colour;\n}\n\ntype FieldMetadata = {\n defaultValues: Record<string, string>;\n colorFields: Set<string>;\n booleanFields: Set<string>;\n isPersistedField: Set<string>;\n persistedValues: Record<string, string[]>;\n};\n\n/**\n * Utility collects metadata about fields from view options\n * - where are the default values\n * - which fields are colours\n * - which fields are persisted\n */\nfunction collectFieldMetadata(paramFields: ViewOption[]): FieldMetadata {\n const metadata: FieldMetadata = {\n defaultValues: {},\n colorFields: new Set(),\n booleanFields: new Set(),\n isPersistedField: new Set(),\n persistedValues: {},\n };\n\n paramFields.forEach((section) => {\n section.options.forEach((option) => {\n if (option.type === 'persist') {\n metadata.isPersistedField.add(option.id);\n if (option.values) {\n metadata.persistedValues[option.id] = option.values;\n }\n } else {\n metadata.defaultValues[option.id] = String(option.defaultValue);\n }\n\n if (option.type === 'colour') {\n metadata.colorFields.add(option.id);\n } else if (option.type === 'boolean') {\n metadata.booleanFields.add(option.id);\n }\n });\n });\n\n return metadata;\n}\n\n/**\n * Makes a new URLSearchParams object from the given params object\n * @param paramsObj - The object containing parameters to be converted\n * @param paramFields - The view options that define the parameters\n * @returns A new URLSearchParams object with the parameters\n */\nexport function getURLSearchParamsFromObj(paramsObj: ViewParamsObj, paramFields: ViewOption[]) {\n const newSearchParams = new URLSearchParams();\n const addedPairs = new Set<string>();\n const metadata = collectFieldMetadata(paramFields);\n\n // Utility function to safely add params without duplicates\n const addUniqueParam = (id: string, value: string) => {\n const pair = `${id}:${value}`;\n if (!addedPairs.has(pair)) {\n addedPairs.add(pair);\n newSearchParams.append(id, value);\n }\n };\n\n // First add all persisted values\n Object.entries(metadata.persistedValues).forEach(([id, values]) => {\n values.forEach((value) => {\n if (value) {\n addUniqueParam(id, value);\n }\n });\n });\n\n // Then process user-provided values\n Object.entries(paramsObj).forEach(([id, value]) => {\n if (typeof value === 'string' && value.length) {\n // For persisted fields, clear existing values before adding new ones\n if (metadata.isPersistedField.has(id)) {\n // Clear tracking of previous values for this field\n Array.from(addedPairs).forEach((pair) => {\n if (pair.startsWith(`${id}:`)) {\n addedPairs.delete(pair);\n }\n });\n newSearchParams.delete(id);\n }\n\n // Process and add new values\n value.split(',').forEach((v) => {\n // some field types need extra processing\n const processedValue = (() => {\n if (metadata.colorFields.has(id)) {\n return sanitiseColour(v);\n }\n if (metadata.booleanFields.has(id)) {\n return v === 'on' ? 'true' : 'false';\n }\n return v;\n })();\n if (metadata.isPersistedField.has(id) || metadata.defaultValues[id] !== processedValue) {\n addUniqueParam(id, processedValue);\n }\n });\n }\n });\n\n return newSearchParams;\n}\n\n/**\n * Extracts search params that are not managed by the view params editor\n * @param currentParams - The current URL search params\n * @param paramFields - The view options that define the managed parameters\n * @returns A new URLSearchParams object with preserved params\n */\nexport function getPreservedSearchParams(currentParams: URLSearchParams, paramFields: ViewOption[]) {\n const managedParamIds = new Set<string>();\n paramFields.forEach((section) => {\n section.options.forEach((option) => {\n managedParamIds.add(option.id);\n });\n });\n\n const preserved = new URLSearchParams();\n currentParams.forEach((value, key) => {\n if (!managedParamIds.has(key)) {\n preserved.append(key, value);\n }\n });\n return preserved;\n}\n","import { useSearchParams } from 'react-router';\nimport { OntimeView, URLPreset } from 'ontime-types';\n\nimport { useViewUrlPresets } from '../../hooks-query/useUrlPresets';\nimport { cx } from '../../utils/styleUtils';\nimport Button from '../buttons/Button';\n\nimport style from './ViewParamsPresets.module.scss';\n\n/**\n * Shows a list of presets for the current view\n */\nexport function ViewParamsPresets({ target }: { target: OntimeView }) {\n const { viewPresets } = useViewUrlPresets(target);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const handleRecall = (preset: URLPreset) => {\n const newSearch = new URLSearchParams(preset.search);\n newSearch.set('alias', preset.alias);\n setSearchParams(newSearch);\n };\n\n if (viewPresets.length === 0) {\n return null;\n }\n\n return (\n <div className={style.presetSection}>\n {viewPresets.map((preset) => {\n const active = searchParams.get('alias') === preset.alias;\n return (\n <div key={preset.alias} className={cx([style.preset, active && style.active])}>\n <div>{preset.alias}</div>\n <Button\n variant={active ? 'ghosted' : 'subtle-white'}\n onClick={() => handleRecall(preset)}\n disabled={active}\n className={style.presetActions}\n >\n {active ? 'Applied' : 'Apply'}\n </Button>\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * Gathers possible titles for view options\n */\nexport enum OptionTitle {\n ClockOptions = 'Clock Options',\n TimerOptions = 'Timer Options',\n DataSources = 'Data sources',\n ElementVisibility = 'Element visibility',\n BehaviourOptions = 'View behaviour',\n StyleOverride = 'View style override',\n Animation = 'View animation',\n Schedule = 'Schedule options',\n\n /** rendered as hidden inputs */\n Hidden = 'Hidden options',\n}\n","import { useEffect, useState } from 'react';\n\nimport SwatchPicker from '../input/colour-input/SwatchPicker';\n\nimport style from './InlineColourPicker.module.scss';\n\ninterface InlineColourPickerProps {\n name: string;\n value: string;\n}\n\nconst ensureHex = (value: string) => {\n if (!value.startsWith('#')) {\n return `#${value}`;\n }\n return value;\n};\n\nexport default function InlineColourPicker({ name, value }: InlineColourPickerProps) {\n const [colour, setColour] = useState(() => ensureHex(value));\n\n useEffect(() => {\n setColour(ensureHex(value));\n }, [value]);\n\n return (\n <div className={style.inline}>\n <SwatchPicker color={colour} onChange={setColour} alwaysDisplayColor />\n <span>{colour}</span>\n <input type='hidden' name={name} value={colour} />\n </div>\n );\n}\n","import { ComponentProps, useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router';\n\nimport { isStringBoolean } from '../../../views/common/viewUtils';\nimport Checkbox from '../checkbox/Checkbox';\nimport Input from '../input/input/Input';\nimport Select, { SelectOption } from '../select/Select';\nimport Switch from '../switch/Switch';\n\nimport InlineColourPicker from './InlineColourPicker';\nimport { ParamField } from './viewParams.types';\n\nimport style from './ParamInput.module.scss';\n\ninterface ParamInputProps {\n paramField: ParamField;\n}\n\nexport default function ParamInput({ paramField }: ParamInputProps) {\n const [searchParams] = useSearchParams();\n const { id, type, defaultValue } = paramField;\n\n if (type === 'persist') {\n if (!paramField.values || !paramField.values.length) {\n return null;\n }\n return <input hidden name={id} readOnly value={paramField.values.join(',')} />;\n }\n\n if (type === 'option') {\n const optionFromParams = searchParams.get(id);\n const defaultOptionValue = optionFromParams || defaultValue;\n\n if (paramField.values.length === 0) {\n return <span className={style.empty}>No options available</span>;\n }\n\n return <ControlledSelect id={id} initialValue={defaultOptionValue} options={paramField.values} />;\n }\n\n if (type === 'multi-option') {\n const optionFromParams = searchParams.getAll(id);\n\n return (\n <MultiOption\n paramField={paramField}\n options={optionFromParams.length ? optionFromParams : paramField.defaultValue ?? ['']}\n />\n );\n }\n\n if (type === 'boolean') {\n return <ControlledSwitch id={id} initialValue={isStringBoolean(searchParams.get(id)) ?? defaultValue} />;\n }\n\n if (type === 'number') {\n const { placeholder } = paramField;\n const defaultNumberValue = searchParams.get(id) ?? defaultValue;\n\n return (\n <Input\n height='large'\n type='number'\n step='any'\n name={id}\n defaultValue={defaultNumberValue}\n placeholder={placeholder}\n />\n );\n }\n\n if (type === 'colour') {\n return <InlineColourPicker name={id} value={searchParams.get(id) ?? defaultValue} />;\n }\n\n const defaultStringValue = searchParams.get(id) ?? defaultValue ?? '';\n const { placeholder } = paramField;\n\n return <ControlledInput id={id} initialValue={defaultStringValue} placeholder={placeholder} />;\n}\n\ninterface EditFormMultiOptionProps {\n paramField: ParamField & { type: 'multi-option' };\n options: string[];\n}\n\nfunction MultiOption({ paramField, options }: EditFormMultiOptionProps) {\n const { id, values } = paramField;\n const [paramState, setParamState] = useState<string[]>(options);\n\n // synchronise options\n useEffect(() => {\n setParamState(options);\n }, [options]);\n\n const toggleValue = (value: string, checked: boolean) => {\n if (checked) {\n setParamState((prev) => [...prev, value]);\n } else {\n setParamState((prev) => prev.filter((v) => v !== value));\n }\n };\n\n if (values.length === 0) {\n return <span className={style.empty}>No options available</span>;\n }\n\n return (\n <>\n <input name={id} hidden readOnly value={paramState.join(',')} />\n <div className={style.inline}>\n {values.map((option) => {\n return (\n <label\n key={option.value}\n className={style.toggleSelect}\n style={{\n '--user-bg': option.colour,\n }}\n >\n <Checkbox\n checked={paramState.includes(option.value)}\n onCheckedChange={(checked) => toggleValue(option.value, checked as boolean)}\n />\n {option.label}\n </label>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface ControlledSwitchProps {\n id: string;\n initialValue: boolean;\n}\nfunction ControlledSwitch({ id, initialValue }: ControlledSwitchProps) {\n const [checked, setChecked] = useState(initialValue);\n\n // synchronise checked state\n useEffect(() => {\n setChecked(initialValue);\n }, [initialValue]);\n\n return <Switch size='large' name={id} checked={checked} onCheckedChange={setChecked} />;\n}\n\ninterface ControlledSelectProps {\n id: string;\n initialValue?: string;\n options: SelectOption[];\n}\nfunction ControlledSelect({ id, initialValue, options }: ControlledSelectProps) {\n const [selected, setSelected] = useState(initialValue);\n\n // synchronise selected state\n useEffect(() => {\n setSelected(initialValue);\n }, [initialValue]);\n\n return (\n <Select\n size='large'\n name={id}\n options={options}\n value={selected}\n onValueChange={(value) => {\n if (value === null) return;\n setSelected(value);\n }}\n />\n );\n}\n\ninterface ControlledInputProps<T extends number | string> extends ComponentProps<typeof Input> {\n id: string;\n initialValue: T;\n}\nfunction ControlledInput<T extends number | string>({ id, initialValue, ...inputProps }: ControlledInputProps<T>) {\n const [value, setValue] = useState(initialValue);\n\n // synchronise selected state\n useEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n return (\n <Input\n height='large'\n name={id}\n value={value}\n onChange={(event) => setValue(event.target.value as T)}\n {...inputProps}\n />\n );\n}\n","import { IoChevronDown } from 'react-icons/io5';\nimport { useLocalStorage } from '@mantine/hooks';\n\nimport { cx } from '../../utils/styleUtils';\n\nimport { OptionTitle } from './constants';\nimport ParamInput from './ParamInput';\nimport { type ParamField } from './viewParams.types';\n\nimport style from './ViewParamsSection.module.scss';\n\ninterface ViewParamsSectionProps {\n title: string;\n collapsible?: boolean;\n options: ParamField[];\n}\n\nexport default function ViewParamsSection({ title, collapsible, options }: ViewParamsSectionProps) {\n const [collapsed, setCollapsed] = useLocalStorage({ key: `params-${title}`, defaultValue: false });\n\n const handleCollapse = () => {\n if (collapsible) {\n setCollapsed((prev) => !prev);\n }\n };\n\n return (\n <section className={style.section}>\n {title === OptionTitle.Hidden ? (\n <HiddenContents options={options} />\n ) : (\n <>\n <div className={cx([style.sectionHeader, collapsible && style.collapsible])} onClick={handleCollapse}>\n {title}\n {collapsible && <IoChevronDown className={cx([collapsed ? style.closed : style.open])} />}\n </div>\n <SectionContents options={options} collapsed={collapsed} />\n </>\n )}\n </section>\n );\n}\n\ninterface SectionContentsProps {\n options: ParamField[];\n collapsed: boolean;\n}\n\nfunction SectionContents({ options, collapsed }: SectionContentsProps) {\n return (\n <>\n {options.map((option) => {\n return (\n <label key={option.title} className={cx([style.label, collapsed && style.hidden])}>\n <span className={style.title}>{option.title}</span>\n <span className={style.description}>{option.description}</span>\n <ParamInput paramField={option} />\n </label>\n );\n })}\n </>\n );\n}\n\nfunction HiddenContents({ options }: { options: ParamField[] }) {\n return (\n <>\n {options.map((option, index) => {\n return <ParamInput key={option.title + index} paramField={option} />;\n })}\n </>\n );\n}\n","import { FormEvent, memo } from 'react';\nimport { IoClose } from 'react-icons/io5';\nimport { useSearchParams } from 'react-router';\nimport { Dialog } from '@base-ui/react/dialog';\nimport { OntimeView } from 'ontime-types';\n\nimport { useIsSmallScreen } from '../../hooks/useIsSmallScreen';\nimport useViewSettings from '../../hooks-query/useViewSettings';\nimport Button from '../buttons/Button';\nimport IconButton from '../buttons/IconButton';\nimport Info from '../info/Info';\n\nimport { ViewOption } from './viewParams.types';\nimport { getPreservedSearchParams, getURLSearchParamsFromObj } from './viewParams.utils';\nimport { useViewParamsEditorStore } from './viewParamsEditor.store';\nimport { ViewParamsPresets } from './ViewParamsPresets';\nimport ViewParamsSection from './ViewParamsSection';\n\nimport style from './ViewParamsEditor.module.scss';\n\ninterface EditFormDrawerProps {\n target: OntimeView;\n viewOptions: ViewOption[];\n}\n\nexport default memo(ViewParamsEditor);\nfunction ViewParamsEditor({ target, viewOptions }: EditFormDrawerProps) {\n const [searchParams, setSearchParams] = useSearchParams();\n const { data: viewSettings } = useViewSettings();\n const { isOpen, close } = useViewParamsEditorStore();\n const isSmallScreen = useIsSmallScreen();\n\n const getPreservedParams = () => getPreservedSearchParams(searchParams, viewOptions);\n\n const handleClose = () => {\n close();\n };\n\n const resetParams = () => {\n setSearchParams(getPreservedParams());\n };\n\n const onParamsFormSubmit = (formEvent: FormEvent<HTMLFormElement>) => {\n formEvent.preventDefault();\n\n const newParamsObject = Object.fromEntries(new FormData(formEvent.currentTarget));\n const newSearchParams = getURLSearchParamsFromObj(newParamsObject, viewOptions);\n const preservedParams = getPreservedParams();\n preservedParams.forEach((value, key) => {\n newSearchParams.append(key, value);\n });\n setSearchParams(newSearchParams);\n\n if (isSmallScreen) {\n close();\n }\n };\n\n return (\n <Dialog.Root\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) {\n handleClose();\n }\n }}\n >\n <Dialog.Portal>\n <Dialog.Backdrop className={style.backdrop} />\n <Dialog.Popup className={style.drawer}>\n <div className={style.header}>\n <Dialog.Title>Customise</Dialog.Title>\n <IconButton variant='subtle-white' size='large' data-testid='close-view-params' onClick={handleClose}>\n <IoClose />\n </IconButton>\n </div>\n <div className={style.body}>\n {viewSettings.overrideStyles && (\n <Info className={style.info}>This view style is being modified by a custom CSS file.</Info>\n )}\n <ViewParamsPresets target={target} />\n <form id='edit-params-form' onSubmit={onParamsFormSubmit} className={style.sectionList}>\n {viewOptions.map((section) => (\n <ViewParamsSection\n key={section.title}\n title={section.title}\n collapsible={section.collapsible}\n options={section.options}\n />\n ))}\n </form>\n </div>\n <div className={style.footer}>\n <Button variant='subtle' size='large' onClick={resetParams} type='reset'>\n Reset to default\n </Button>\n <Button\n variant='primary'\n size='large'\n form='edit-params-form'\n type='submit'\n data-testid='apply-view-params'\n >\n Apply\n </Button>\n </div>\n </Dialog.Popup>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n"],"names":["makeOptionsFromCustomFields","customFields","additionalOptions","filterImageType","options","key","value","Object","entries","type","push","label","makeCustomFieldSelectOptions","colour","makeProjectDataOptions","projectData","generatedOptions","custom","map","entry","index","title","sanitiseColour","startsWith","substring","collectFieldMetadata","paramFields","metadata","defaultValues","colorFields","Set","booleanFields","isPersistedField","persistedValues","forEach","section","option","add","id","values","String","defaultValue","getURLSearchParamsFromObj","paramsObj","newSearchParams","URLSearchParams","addedPairs","addUniqueParam","pair","has","append","length","Array","from","delete","split","v","processedValue","getPreservedSearchParams","currentParams","managedParamIds","preserved","ViewParamsPresets","target","viewPresets","useViewUrlPresets","searchParams","setSearchParams","useSearchParams","handleRecall","preset","newSearch","search","set","alias","style","presetSection","active","get","jsxs","cx","jsx","Button","presetActions","OptionTitle","ClockOptions","TimerOptions","DataSources","ElementVisibility","BehaviourOptions","StyleOverride","Animation","Schedule","Hidden","ensureHex","InlineColourPicker","name","setColour","useState","useEffect","inline","SwatchPicker","ParamInput","paramField","join","defaultOptionValue","empty","ControlledSelect","optionFromParams","getAll","MultiOption","ControlledSwitch","isStringBoolean","placeholder","defaultNumberValue","Input","defaultStringValue","ControlledInput","paramState","setParamState","toggleValue","checked","prev","filter","Fragment","toggleSelect","Checkbox","includes","initialValue","setChecked","Switch","selected","setSelected","Select","inputProps","setValue","event","ViewParamsSection","collapsible","collapsed","setCollapsed","useLocalStorage","handleCollapse","HiddenContents","sectionHeader","IoChevronDown","closed","open","SectionContents","hidden","description","memo","ViewParamsEditor","viewOptions","data","viewSettings","useViewSettings","isOpen","close","useViewParamsEditorStore","isSmallScreen","useIsSmallScreen","getPreservedParams","handleClose","resetParams","onParamsFormSubmit","formEvent","preventDefault","newParamsObject","fromEntries","FormData","currentTarget","Dialog.Root","Dialog.Portal","Dialog.Backdrop","backdrop","Dialog.Popup","drawer","header","Dialog.Title","IconButton","IoClose","body","overrideStyles","Info","info","sectionList","footer"],"mappings":"isBAUO,SAASA,GACdC,EACAC,EAAoC,CAAA,EACpCC,EAAkB,GACF,CACVC,MAAAA,EAA0B,CAAC,GAAGF,CAAiB,EAGrD,SAAW,CAACG,EAAKC,CAAK,IAAKC,OAAOC,QAAQP,CAAY,EAChDE,GAAmBG,EAAMG,OAAS,SAItCL,EAAQM,KAAK,CACXJ,MAAO,UAAUD,CAAG,GACpBM,MAAO,WAAWL,EAAMK,KAAK,EAAA,CAC9B,EAGIP,OAAAA,CACT,CAMgBQ,SAAAA,GAA6BX,EAA4BE,EAAkB,GAA2B,CACpH,MAAMC,EAA+B,CAAE,EAGvC,SAAW,CAACC,EAAKC,CAAK,IAAKC,OAAOC,QAAQP,CAAY,EAChDE,GAAmBG,EAAMG,OAAS,SAItCL,EAAQM,KAAK,CACXJ,MAAOD,EACPM,MAAOL,EAAMK,MACbE,OAAQP,EAAMO,MAAAA,CACf,EAGIT,OAAAA,CACT,CAKO,SAASU,GACdC,EACAb,EAAoC,GACpB,CAChB,MAAMc,EAAmBD,EAAYE,OAAOC,IAAI,CAACC,EAAOC,KAC/C,CACLd,MAAO,GAAGc,CAAK,IAAID,EAAME,KAAK,GAC9BV,MAAOQ,EAAME,KACf,EACD,EAED,MAAO,CAAC,GAAGnB,EAAmB,GAAGc,CAAgB,CACnD,CAOA,SAASM,EAAeT,EAAgB,CAClCA,OAAAA,EAAOU,WAAW,GAAG,EAChBV,EAAOW,UAAU,CAAC,EAEpBX,CACT,CAgBA,SAASY,EAAqBC,EAA0C,CACtE,MAAMC,EAA0B,CAC9BC,cAAe,CAAC,EAChBC,gBAAiBC,IACjBC,kBAAmBD,IACnBE,qBAAsBF,IACtBG,gBAAiB,CAAA,CACnB,EAEAP,OAAAA,EAAYQ,QAAqBC,GAAA,CACvB/B,EAAAA,QAAQ8B,QAAoBE,GAAA,CAC9BA,EAAO3B,OAAS,WACTuB,EAAAA,iBAAiBK,IAAID,EAAOE,EAAE,EACnCF,EAAOG,SACTZ,EAASM,gBAAgBG,EAAOE,EAAE,EAAIF,EAAOG,SAG/CZ,EAASC,cAAcQ,EAAOE,EAAE,EAAIE,OAAOJ,EAAOK,YAAY,EAG5DL,EAAO3B,OAAS,SACToB,EAAAA,YAAYQ,IAAID,EAAOE,EAAE,EACzBF,EAAO3B,OAAS,WAChBsB,EAAAA,cAAcM,IAAID,EAAOE,EAAE,CACtC,CACD,CAAA,CACF,EAEMX,CACT,CAQgBe,SAAAA,EAA0BC,EAA0BjB,EAA2B,CACvFkB,MAAAA,EAAkB,IAAIC,gBACtBC,MAAiBhB,IACjBH,EAAWF,EAAqBC,CAAW,EAG3CqB,EAAiBA,CAACT,EAAYhC,IAAkB,CACpD,MAAM0C,EAAO,GAAGV,CAAE,IAAIhC,CAAK,GACtBwC,EAAWG,IAAID,CAAI,IACtBF,EAAWT,IAAIW,CAAI,EACHE,EAAAA,OAAOZ,EAAIhC,CAAK,EAEpC,EAGOE,cAAAA,QAAQmB,EAASM,eAAe,EAAEC,QAAQ,CAAC,CAACI,EAAIC,CAAM,IAAM,CACjEA,EAAOL,QAAmB5B,GAAA,CACpBA,GACFyC,EAAeT,EAAIhC,CAAK,CAC1B,CACD,CAAA,CACF,EAGME,OAAAA,QAAQmC,CAAS,EAAET,QAAQ,CAAC,CAACI,EAAIhC,CAAK,IAAM,CAC7C,OAAOA,GAAU,UAAYA,EAAM6C,SAEjCxB,EAASK,iBAAiBiB,IAAIX,CAAE,IAElCc,MAAMC,KAAKP,CAAU,EAAEZ,QAAkBc,GAAA,CACnCA,EAAKzB,WAAW,GAAGe,CAAE,GAAG,GAC1BQ,EAAWQ,OAAON,CAAI,CACxB,CACD,EACDJ,EAAgBU,OAAOhB,CAAE,GAI3BhC,EAAMiD,MAAM,GAAG,EAAErB,QAAesB,GAAA,CAE9B,MAAMC,EACA9B,EAASE,YAAYoB,IAAIX,CAAE,EACtBhB,EAAekC,CAAC,EAErB7B,EAASI,cAAckB,IAAIX,CAAE,EACxBkB,IAAM,KAAO,OAAS,QAExBA,GAEL7B,EAASK,iBAAiBiB,IAAIX,CAAE,GAAKX,EAASC,cAAcU,CAAE,IAAMmB,IACtEV,EAAeT,EAAImB,CAAc,CACnC,CACD,EACH,CACD,EAEMb,CACT,CAQgBc,SAAAA,EAAyBC,EAAgCjC,EAA2B,CAC5FkC,MAAAA,MAAsB9B,IAC5BJ,EAAYQ,QAAqBC,GAAA,CACvB/B,EAAAA,QAAQ8B,QAAoBE,GAAA,CAClBC,EAAAA,IAAID,EAAOE,EAAE,CAAA,CAC9B,CAAA,CACF,EAEKuB,MAAAA,EAAY,IAAIhB,gBACRX,OAAAA,EAAAA,QAAQ,CAAC5B,EAAOD,IAAQ,CAC/BuD,EAAgBX,IAAI5C,CAAG,GAChB6C,EAAAA,OAAO7C,EAAKC,CAAK,CAC7B,CACD,EACMuD,CACT,qKC3MO,SAASC,GAAkB,CAAEC,OAAAA,CAA+B,EAAG,CAC9D,KAAA,CAAEC,YAAAA,CAAAA,EAAgBC,EAAkBF,CAAM,EAC1C,CAACG,EAAcC,CAAe,EAAIC,EAAgB,EAElDC,EAAgBC,GAAsB,CAC1C,MAAMC,EAAY,IAAI1B,gBAAgByB,EAAOE,MAAM,EACzCC,EAAAA,IAAI,QAASH,EAAOI,KAAK,EACnCP,EAAgBI,CAAS,CAC3B,EAEIP,OAAAA,EAAYb,SAAW,EAClB,WAIN,MAAI,CAAA,UAAWwB,EAAMC,cACnBZ,SAAAA,EAAY9C,IAAgBoD,GAAA,CAC3B,MAAMO,EAASX,EAAaY,IAAI,OAAO,IAAMR,EAAOI,MAElD,OAAAK,EAAA,KAAC,MAAuB,CAAA,UAAWC,EAAG,CAACL,EAAML,OAAQO,GAAUF,EAAME,MAAM,CAAC,EAC1E,SAAA,CAACI,EAAAA,IAAA,MAAA,CAAKX,WAAOI,KAAM,CAAA,QAClBQ,EACC,CAAA,QAASL,EAAS,UAAY,eAC9B,QAAS,IAAMR,EAAaC,CAAM,EAClC,SAAUO,EACV,UAAWF,EAAMQ,cAEhBN,SAAAA,EAAS,UAAY,OACxB,CAAA,CAAA,CAAA,EATQP,EAAOI,KAUjB,CAEH,CAAA,EACH,CAEJ,CC3CYU,IAAAA,GAAAA,IACVC,EAAAA,aAAe,gBACfC,EAAAA,aAAe,gBACfC,EAAAA,YAAc,eACdC,EAAAA,kBAAoB,qBACpBC,EAAAA,iBAAmB,iBACnBC,EAAAA,cAAgB,sBAChBC,EAAAA,UAAY,iBACZC,EAAAA,SAAW,mBAGXC,EAAAA,OAAS,iBAXCT,IAAAA,GAAAA,CAAAA,CAAAA,6CCQNU,EAAaxF,GACZA,EAAMiB,WAAW,GAAG,EAGlBjB,EAFE,IAAIA,CAAK,GAKpB,SAAwByF,GAAmB,CAAEC,KAAAA,EAAM1F,MAAAA,CAA+B,EAAG,CAC7E,KAAA,CAACO,EAAQoF,CAAS,EAAIC,WAAS,IAAMJ,EAAUxF,CAAK,CAAC,EAE3D6F,OAAAA,EAAAA,UAAU,IAAM,CACJL,EAAAA,EAAUxF,CAAK,CAAC,CAAA,EACzB,CAACA,CAAK,CAAC,EAGPyE,EAAAA,KAAA,MAAA,CAAI,UAAWJ,GAAMyB,OACpB,SAAA,CAAAnB,MAACoB,GAAa,MAAOxF,EAAQ,SAAUoF,EAAW,mBAAkB,GAAA,EACpEhB,EAAAA,IAAC,QAAMpE,SAAOA,CAAA,CAAA,QACb,QAAM,CAAA,KAAK,SAAS,KAAAmF,EAAY,MAAOnF,CAAO,CAAA,CAAA,EACjD,CAEJ,qHCdA,SAAwByF,EAAW,CAAEC,WAAAA,CAA4B,EAAG,CAC5D,KAAA,CAACrC,CAAY,EAAIE,EAAgB,EACjC,CAAE9B,GAAAA,EAAI7B,KAAAA,EAAMgC,aAAAA,CAAAA,EAAiB8D,EAEnC,GAAI9F,IAAS,UACX,MAAI,CAAC8F,EAAWhE,QAAU,CAACgE,EAAWhE,OAAOY,OACpC,KAED8B,EAAAA,IAAA,QAAA,CAAM,OAAM,GAAC,KAAM3C,EAAI,SAAQ,GAAC,MAAOiE,EAAWhE,OAAOiE,KAAK,GAAG,EAAK,EAGhF,GAAI/F,IAAS,SAAU,CAErB,MAAMgG,EADmBvC,EAAaY,IAAIxC,CAAE,GACGG,EAE3C8D,OAAAA,EAAWhE,OAAOY,SAAW,EACvB8B,EAAA,IAAA,OAAA,CAAK,UAAWN,EAAM+B,MAAO,SAAoB,uBAAA,QAGnDC,GAAiB,CAAA,GAAArE,EAAQ,aAAcmE,EAAoB,QAASF,EAAWhE,OAAU,CAAA,CAGnG,GAAI9B,IAAS,eAAgB,CACrBmG,MAAAA,EAAmB1C,EAAa2C,OAAOvE,CAAE,EAG7C,OAAA2C,EAAA,IAAC6B,GACC,CAAA,WAAAP,EACA,QAASK,EAAiBzD,OAASyD,EAAmBL,EAAW9D,cAAgB,CAAC,EAAE,CACpF,CAAA,CAAA,CAIN,GAAIhC,IAAS,UACJ,OAAAwE,MAAC8B,GAAiB,CAAA,GAAAzE,EAAQ,aAAc0E,EAAgB9C,EAAaY,IAAIxC,CAAE,CAAC,GAAKG,CAAgB,CAAA,EAG1G,GAAIhC,IAAS,SAAU,CACf,KAAA,CAAEwG,YAAAA,CAAAA,EAAgBV,EAClBW,EAAqBhD,EAAaY,IAAIxC,CAAE,GAAKG,EAEnD,OACGwC,EAAAA,IAAAkC,EAAA,CACC,OAAO,QACP,KAAK,SACL,KAAK,MACL,KAAM7E,EACN,aAAc4E,EACd,YAAaD,EACb,CAAA,CAIN,GAAIxG,IAAS,SACJ,OAAAwE,MAACc,IAAmB,KAAMzD,EAAI,MAAO4B,EAAaY,IAAIxC,CAAE,GAAKG,CAAgB,CAAA,EAGtF,MAAM2E,EAAqBlD,EAAaY,IAAIxC,CAAE,GAAKG,GAAgB,GAC7D,CAAEwE,YAAAA,CAAAA,EAAgBV,EAExB,OAAQtB,EAAAA,IAAAoC,GAAA,CAAgB,GAAA/E,EAAQ,aAAc8E,EAAoB,YAAAH,EAA4B,CAChG,CAOA,SAASH,GAAY,CAAEP,WAAAA,EAAYnG,QAAAA,CAAkC,EAAG,CAChE,KAAA,CAAEkC,GAAAA,EAAIC,OAAAA,CAAAA,EAAWgE,EACjB,CAACe,EAAYC,CAAa,EAAIrB,EAAAA,SAAmB9F,CAAO,EAG9D+F,EAAAA,UAAU,IAAM,CACdoB,EAAcnH,CAAO,CAAA,EACpB,CAACA,CAAO,CAAC,EAENoH,MAAAA,EAAcA,CAAClH,EAAemH,IAAqB,CAErDF,EADEE,EACsBC,GAAA,CAAC,GAAGA,EAAMpH,CAAK,KAEfoH,EAAKC,OAAcnE,GAAAA,IAAMlD,CAAK,CAFd,CAI5C,EAEIiC,OAAAA,EAAOY,SAAW,EACZ8B,EAAA,IAAA,OAAA,CAAK,UAAWN,EAAM+B,MAAO,SAAoB,uBAAA,EAKvD3B,EAAA,KAAA6C,WAAA,CAAA,SAAA,CAAC3C,EAAAA,IAAA,QAAA,CAAM,KAAM3C,EAAI,OAAM,GAAC,SAAQ,GAAC,MAAOgF,EAAWd,KAAK,GAAG,CAAE,CAAA,QAC5D,MAAI,CAAA,UAAW7B,EAAMyB,OACnB7D,SAAAA,EAAOrB,IAAgBkB,GAEnB2C,EAAAA,KAAA,QAAA,CAEC,UAAWJ,EAAMkD,aACjB,MAAO,CACL,YAAazF,EAAOvB,MAGtB,EAAA,SAAA,CAAAoE,EAAA,IAAC6C,EACC,CAAA,QAASR,EAAWS,SAAS3F,EAAO9B,KAAK,EACzC,gBAA8BkH,GAAAA,EAAYpF,EAAO9B,MAAOmH,CAAkB,EAAE,EAE7ErF,EAAOzB,KAAAA,CAAAA,EAVHyB,EAAO9B,KAWd,CAEH,CACH,CAAA,CAAA,EACF,CAEJ,CAMA,SAASyG,GAAiB,CAAEzE,GAAAA,EAAI0F,aAAAA,CAAoC,EAAG,CACrE,KAAM,CAACP,EAASQ,CAAU,EAAI/B,EAAAA,SAAS8B,CAAY,EAGnD7B,OAAAA,EAAAA,UAAU,IAAM,CACd8B,EAAWD,CAAY,CAAA,EACtB,CAACA,CAAY,CAAC,EAEV/C,MAACiD,GAAO,KAAK,QAAQ,KAAM5F,EAAI,QAAAmF,EAAkB,gBAAiBQ,EAAc,CACzF,CAOA,SAAStB,GAAiB,CAAErE,GAAAA,EAAI0F,aAAAA,EAAc5H,QAAAA,CAA+B,EAAG,CAC9E,KAAM,CAAC+H,EAAUC,CAAW,EAAIlC,EAAAA,SAAS8B,CAAY,EAGrD7B,OAAAA,EAAAA,UAAU,IAAM,CACdiC,EAAYJ,CAAY,CAAA,EACvB,CAACA,CAAY,CAAC,EAGf/C,EAAA,IAACoD,EACC,CAAA,KAAK,QACL,KAAM/F,EACN,QAAAlC,EACA,MAAO+H,EACP,cAA0B7H,GAAA,CACpBA,IAAU,MACd8H,EAAY9H,CAAK,CAAA,EAEnB,CAEN,CAMA,SAAS+G,GAA2C,CAAE/E,GAAAA,EAAI0F,aAAAA,EAAc,GAAGM,CAAoC,EAAG,CAChH,KAAM,CAAChI,EAAOiI,CAAQ,EAAIrC,EAAAA,SAAS8B,CAAY,EAG/C7B,OAAAA,EAAAA,UAAU,IAAM,CACdoC,EAASP,CAAY,CAAA,EACpB,CAACA,CAAY,CAAC,EAGd/C,EAAAA,IAAAkC,EAAA,CACC,OAAO,QACP,KAAM7E,EACN,MAAAhC,EACA,SAAWkI,GAAUD,EAASC,EAAMzE,OAAOzD,KAAU,EACjDgI,GAAAA,EACJ,CAEN,uUCnLA,SAAwBG,GAAkB,CAAEpH,MAAAA,EAAOqH,YAAAA,EAAatI,QAAAA,CAAgC,EAAG,CACjG,KAAM,CAACuI,EAAWC,CAAY,EAAIC,EAAgB,CAAExI,IAAK,UAAUgB,CAAK,GAAIoB,aAAc,EAAA,CAAO,EAE3FqG,EAAiBA,IAAM,CACvBJ,GACYhB,EAAAA,GAAS,CAACA,CAAI,CAEhC,EAEA,OACGzC,EAAAA,IAAA,UAAA,CAAQ,UAAWN,EAAMxC,QACvBd,SAAAA,IAAU+D,EAAYS,OACpBZ,EAAA,IAAA8D,GAAA,CAAe,QAAA3I,IAGd2E,OAAA6C,EAAAA,SAAA,CAAA,SAAA,CAAA7C,EAAAA,KAAC,MAAI,CAAA,UAAWC,EAAG,CAACL,EAAMqE,cAAeN,GAAe/D,EAAM+D,WAAW,CAAC,EAAG,QAASI,EACnFzH,SAAAA,CAAAA,EACAqH,GAAezD,EAAA,IAACgE,EAAc,CAAA,UAAWjE,EAAG,CAAC2D,EAAYhE,EAAMuE,OAASvE,EAAMwE,IAAI,CAAC,CAAK,CAAA,CAAA,EAC3F,EACAlE,EAAAA,IAACmE,GAAgB,CAAA,QAAAhJ,EAAkB,UAAAuI,CAAqB,CAAA,CAAA,CAAA,CAC1D,CAEJ,CAAA,CAEJ,CAOA,SAASS,GAAgB,CAAEhJ,QAAAA,EAASuI,UAAAA,CAAgC,EAAG,CAEnE,OAAA1D,EAAAA,IAAA2C,EAAAA,SAAA,CACGxH,SAAQc,EAAAA,IAAgBkB,GAErB2C,EAAA,KAAC,QAAyB,CAAA,UAAWC,EAAG,CAACL,EAAMhE,MAAOgI,GAAahE,EAAM0E,MAAM,CAAC,EAC9E,SAAA,CAAApE,MAAC,OAAK,CAAA,UAAWN,EAAMtD,MAAQe,WAAOf,MAAM,QAC3C,OAAK,CAAA,UAAWsD,EAAM2E,YAAclH,WAAOkH,YAAY,EACxDrE,EAAAA,IAACqB,EAAW,CAAA,WAAYlE,CAAO,CAAA,CAAA,CAAA,EAHrBA,EAAOf,KAInB,CAEH,EACH,CAEJ,CAEA,SAAS0H,GAAe,CAAE3I,QAAAA,CAAmC,EAAG,CAC9D,OAEKA,EAAAA,IAAAA,EAAAA,SAAAA,CAAAA,SAAAA,EAAQc,IAAI,CAACkB,EAAQhB,UACZkF,EAAsC,CAAA,WAAYlE,CAAlCA,EAAAA,EAAOf,MAAQD,CAA6B,CACrE,EACH,CAEJ,iPC/CemI,GAAAA,EAAAA,KAAKC,EAAgB,EACpC,SAASA,GAAiB,CAAEzF,OAAAA,EAAQ0F,YAAAA,CAAiC,EAAG,CACtE,KAAM,CAACvF,EAAcC,CAAe,EAAIC,EAAgB,EAClD,CAAEsF,KAAMC,GAAiBC,EAAgB,EACzC,CAAEC,OAAAA,EAAQC,MAAAA,GAAUC,EAAyB,EAC7CC,EAAgBC,EAAiB,EAEjCC,EAAqBA,IAAMxG,EAAyBQ,EAAcuF,CAAW,EAE7EU,EAAcA,IAAM,CAClBL,EAAA,CACR,EAEMM,EAAcA,IAAM,CACxBjG,EAAgB+F,GAAoB,CACtC,EAEMG,EAAsBC,GAA0C,CACpEA,EAAUC,eAAe,EAEzB,MAAMC,EAAkBjK,OAAOkK,YAAY,IAAIC,SAASJ,EAAUK,aAAa,CAAC,EAC1E/H,EAAkBF,EAA0B8H,EAAiBf,CAAW,EACtDS,EAAmB,EAC3BhI,QAAQ,CAAC5B,EAAOD,IAAQ,CACtB6C,EAAAA,OAAO7C,EAAKC,CAAK,CAAA,CAClC,EACD6D,EAAgBvB,CAAe,EAE3BoH,GACIF,EAAA,CAEV,EAEA,aACGc,EAAA,CACC,KAAMf,EACN,aAAwBV,GAAA,CACjBA,GACSgB,EAAA,CAIhB,EAAA,SAAApF,EAAAA,KAAC8F,EAAA,CACC,SAAA,CAAA5F,EAAAA,IAAC6F,EAAA,CAAgB,UAAWnG,EAAMoG,QAAS,CAAA,SAC1CC,EAAA,CAAa,UAAWrG,EAAMsG,OAC7B,SAAA,CAAClG,EAAA,KAAA,MAAA,CAAI,UAAWJ,EAAMuG,OACpB,SAAA,CAACjG,EAAAA,IAAAkG,EAAA,CAAa,SAAS,WAAA,CAAA,EACtBlG,EAAA,IAAAmG,EAAA,CAAW,QAAQ,eAAe,KAAK,QAAQ,cAAY,oBAAoB,QAASjB,EACvF,SAAClF,EAAAA,IAAAoG,EAAA,CAAA,CAAO,CACV,CAAA,CAAA,EACF,EACCtG,EAAA,KAAA,MAAA,CAAI,UAAWJ,EAAM2G,KACnB3B,SAAAA,CAAAA,EAAa4B,gBACXtG,EAAA,IAAAuG,EAAA,CAAK,UAAW7G,EAAM8G,KAAM,SAAuD,0DAAA,EAEtFxG,MAACnB,IAAkB,OAAAC,EAAe,EAClCkB,EAAAA,IAAC,OAAK,CAAA,GAAG,mBAAmB,SAAUoF,EAAoB,UAAW1F,EAAM+G,YACxEjC,SAAYvI,EAAAA,IACXiB,GAAA8C,MAACwD,IAEC,MAAOtG,EAAQd,MACf,YAAac,EAAQuG,YACrB,QAASvG,EAAQ/B,OAHZ+B,EAAAA,EAAQd,MAKhB,CACH,CAAA,CAAA,EACF,EACC0D,EAAA,KAAA,MAAA,CAAI,UAAWJ,EAAMgH,OACpB,SAAA,CAAC1G,EAAAA,IAAAC,EAAA,CAAO,QAAQ,SAAS,KAAK,QAAQ,QAASkF,EAAa,KAAK,QAAO,SAExE,kBAAA,CAAA,EACCnF,EAAA,IAAAC,EAAA,CACC,QAAQ,UACR,KAAK,QACL,KAAK,mBACL,KAAK,SACL,cAAY,oBAAmB,SAGjC,OAAA,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{h as f,j as d,f as g}from"./vendor-CKDP5hij.js";import{e as c,bO as y,T as S}from"./index-2lQ-45a9.js";import{b as T,v as b,a as _,E as p,T as I}from"./validateEvent-BUgLWn7x.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new t.Error().stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="cf192132-a9fa-4149-b54b-55138385c45f",t._sentryDebugIdIdentifier="sentry-dbid-cf192132-a9fa-4149-b54b-55138385c45f")}catch{}})();const h="_blink_19ahf_1",v="_fourtyfive_19ahf_13",x="_textarea_19ahf_17",D="_subtle_19ahf_47",k="_ghosted_19ahf_53",w="_fluid_19ahf_59",o={blink:h,fourtyfive:v,textarea:x,subtle:D,ghosted:k,fluid:w},j=f.forwardRef(function({className:e,variant:r="subtle",fluid:n,rows:i=5,resize:l="none",style:s,...u},m){return d.jsx("textarea",{ref:m,autoCorrect:"off",autoComplete:"off",spellCheck:"false",rows:i,style:{...s,resize:l},className:c([o.textarea,o[r],n&&o.fluid,e]),...u})}),a={duration:"00:10:00",linkPrevious:!0,timeStrategy:I.LockDuration,warnTime:"00:02:00",dangerTime:"00:01:00",timerType:S.CountDown,endAction:p.None},L=g(t=>({defaultDuration:localStorage.getItem("ontime-default-duration")??a.duration,linkPrevious:y("ontime-link-previous",a.linkPrevious),defaultTimeStrategy:_(localStorage.getItem("ontime-time-strategy"),a.timeStrategy),defaultWarnTime:localStorage.getItem("ontime-default-warn-time")??a.warnTime,defaultDangerTime:localStorage.getItem("ontime-default-danger-time")??a.dangerTime,defaultTimerType:b(localStorage.getItem("ontime-default-timer-type"),a.timerType),defaultEndAction:T(localStorage.getItem("ontime-default-end-action"),a.endAction),setDefaultDuration:e=>t(()=>(localStorage.setItem("ontime-default-duration",String(e)),{defaultDuration:e})),setLinkPrevious:e=>t(()=>(localStorage.setItem("ontime-link-previous",String(e)),{linkPrevious:e})),setTimeStrategy:e=>t(()=>(localStorage.setItem("ontime-time-strategy",String(e)),{defaultTimeStrategy:e})),setWarnTime:e=>t(()=>(localStorage.setItem("ontime-default-warn-time",String(e)),{defaultWarnTime:e})),setDangerTime:e=>t(()=>(localStorage.setItem("ontime-default-danger-time",String(e)),{defaultDangerTime:e})),setDefaultTimerType:e=>t(()=>(localStorage.setItem("ontime-default-timer-type",String(e)),{defaultTimerType:e})),setDefaultEndAction:e=>t(()=>(localStorage.setItem("ontime-default-end-action",String(e)),{defaultEndAction:e}))}));export{j as T,a as e,L as u};
2
- //# sourceMappingURL=editorSettings-D4jfu68W.js.map
1
+ import{h as f,j as d,f as g}from"./vendor-BKUJ0_Du.js";import{e as c,bO as y,T as S}from"./index-Dm-4OTmY.js";import{b as T,v as b,a as _,E as p,T as I}from"./validateEvent-GnPt-e9-.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},e=new t.Error().stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="cf192132-a9fa-4149-b54b-55138385c45f",t._sentryDebugIdIdentifier="sentry-dbid-cf192132-a9fa-4149-b54b-55138385c45f")}catch{}})();const h="_blink_19ahf_1",v="_fourtyfive_19ahf_13",x="_textarea_19ahf_17",D="_subtle_19ahf_47",k="_ghosted_19ahf_53",w="_fluid_19ahf_59",o={blink:h,fourtyfive:v,textarea:x,subtle:D,ghosted:k,fluid:w},j=f.forwardRef(function({className:e,variant:r="subtle",fluid:n,rows:i=5,resize:l="none",style:s,...u},m){return d.jsx("textarea",{ref:m,autoCorrect:"off",autoComplete:"off",spellCheck:"false",rows:i,style:{...s,resize:l},className:c([o.textarea,o[r],n&&o.fluid,e]),...u})}),a={duration:"00:10:00",linkPrevious:!0,timeStrategy:I.LockDuration,warnTime:"00:02:00",dangerTime:"00:01:00",timerType:S.CountDown,endAction:p.None},L=g(t=>({defaultDuration:localStorage.getItem("ontime-default-duration")??a.duration,linkPrevious:y("ontime-link-previous",a.linkPrevious),defaultTimeStrategy:_(localStorage.getItem("ontime-time-strategy"),a.timeStrategy),defaultWarnTime:localStorage.getItem("ontime-default-warn-time")??a.warnTime,defaultDangerTime:localStorage.getItem("ontime-default-danger-time")??a.dangerTime,defaultTimerType:b(localStorage.getItem("ontime-default-timer-type"),a.timerType),defaultEndAction:T(localStorage.getItem("ontime-default-end-action"),a.endAction),setDefaultDuration:e=>t(()=>(localStorage.setItem("ontime-default-duration",String(e)),{defaultDuration:e})),setLinkPrevious:e=>t(()=>(localStorage.setItem("ontime-link-previous",String(e)),{linkPrevious:e})),setTimeStrategy:e=>t(()=>(localStorage.setItem("ontime-time-strategy",String(e)),{defaultTimeStrategy:e})),setWarnTime:e=>t(()=>(localStorage.setItem("ontime-default-warn-time",String(e)),{defaultWarnTime:e})),setDangerTime:e=>t(()=>(localStorage.setItem("ontime-default-danger-time",String(e)),{defaultDangerTime:e})),setDefaultTimerType:e=>t(()=>(localStorage.setItem("ontime-default-timer-type",String(e)),{defaultTimerType:e})),setDefaultEndAction:e=>t(()=>(localStorage.setItem("ontime-default-end-action",String(e)),{defaultEndAction:e}))}));export{j as T,a as e,L as u};
2
+ //# sourceMappingURL=editorSettings-_x6YKRfR.js.map
@@ -0,0 +1,6 @@
1
+ � @���i�^N�owךyR���b�(9�R�c�s���\�B����,%�ړЛ���� ���SَXp�ϩC��+�n!����%05i�J��z�n���?������[�x��=1��%��!��b�?�����U2��,[!d>��((*���x|�ns4�'=n�Ɋ�ީ76�Gc?iA��hi%��$�"�������B"K�0Tf9��U���,�%օ񠣿���mQS����*39��������SQl��J�Z�aۄ�V��yT�E�^_����q�nȷ'��s{��犬��'Q/�x�
2
+ �U?��U�GT��/�î�˄�!'r�ې6~��X��X�73&�"rC���f�@��*���z5c5h���iz�u��(ܓ]��!��M���.��*�Y'W9�ʈŽ;mS�MIO����sEh� jƘj����C��ȡ���a�z6Z!9F�;&�o�E��`�c��A���X��n�.�r�hz�ʨW�2
3
+ 2��LT�Ȝˑ���{��`�0y�b���D���?YTCX��,Y�u���J%Y.�R��ͨ��#wK� ��"OE�I}�Qc��&#��RE
4
+ �� �r����C/#B�
5
+ T?g�.$�g3a�t!��r|W������q�|(��Gޞʷ���H6ԩ�o�ൾ�R��%a*�xd�;`�T�~9�c��Y�h|�֌�r�:g������Ovn�'�e8��s���'wط��<t��E ^���d��l�h!�����)d�N�z���[2I|����OK��̐i\�]䝝bq��N�oѾǻ � ���s�x=�3w�1
6
+ �;
@@ -1 +1 @@
1
- {"version":3,"file":"editorSettings-D4jfu68W.js","sources":["../../src/common/components/input/textarea/Textarea.tsx","../../src/common/stores/editorSettings.ts"],"sourcesContent":["import { forwardRef, TextareaHTMLAttributes } from 'react';\n\nimport { cx } from '../../../utils/styleUtils';\n\nimport style from './Textarea.module.scss';\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n variant?: 'subtle' | 'ghosted';\n fluid?: boolean;\n resize?: 'none' | 'both' | 'horizontal' | 'vertical';\n}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function TextArea(\n { className, variant = 'subtle', fluid, rows = 5, resize = 'none', style: customStyle, ...textareaProps },\n ref,\n) {\n return (\n <textarea\n ref={ref}\n autoCorrect='off'\n autoComplete='off'\n spellCheck='false'\n rows={rows}\n style={{ ...customStyle, resize }}\n className={cx([style.textarea, style[variant], fluid && style.fluid, className])}\n {...textareaProps}\n />\n );\n});\n\nexport default Textarea;\n","import { EndAction, TimerType, TimeStrategy } from 'ontime-types';\nimport { validateEndAction, validateTimerType, validateTimeStrategy } from 'ontime-utils';\nimport { create } from 'zustand';\n\nimport { booleanFromLocalStorage } from '../utils/localStorage';\n\ntype EditorSettingsStore = {\n defaultDuration: string;\n linkPrevious: boolean;\n defaultTimeStrategy: TimeStrategy;\n defaultWarnTime: string;\n defaultDangerTime: string;\n defaultTimerType: TimerType;\n defaultEndAction: EndAction;\n setDefaultDuration: (defaultDuration: string) => void;\n setLinkPrevious: (linkPrevious: boolean) => void;\n setTimeStrategy: (timeStrategy: TimeStrategy) => void;\n setWarnTime: (warnTime: string) => void;\n setDangerTime: (dangerTime: string) => void;\n setDefaultTimerType: (defaultTimerType: TimerType) => void;\n setDefaultEndAction: (defaultEndAction: EndAction) => void;\n};\n\nexport const editorSettingsDefaults = {\n duration: '00:10:00',\n linkPrevious: true,\n timeStrategy: TimeStrategy.LockDuration,\n warnTime: '00:02:00', // 120000 same as backend\n dangerTime: '00:01:00', // 60000 same as backend\n timerType: TimerType.CountDown,\n endAction: EndAction.None,\n};\n\nenum EditorSettingsKeys {\n DefaultDuration = 'ontime-default-duration',\n LinkPrevious = 'ontime-link-previous',\n DefaultTimeStrategy = 'ontime-time-strategy',\n DefaultWarnTime = 'ontime-default-warn-time',\n DefaultDangerTime = 'ontime-default-danger-time',\n DefaultTimerType = 'ontime-default-timer-type',\n DefaultEndAction = 'ontime-default-end-action',\n}\n\nexport const useEditorSettings = create<EditorSettingsStore>((set) => {\n return {\n defaultDuration: localStorage.getItem(EditorSettingsKeys.DefaultDuration) ?? editorSettingsDefaults.duration,\n linkPrevious: booleanFromLocalStorage(EditorSettingsKeys.LinkPrevious, editorSettingsDefaults.linkPrevious),\n defaultTimeStrategy: validateTimeStrategy(\n localStorage.getItem(EditorSettingsKeys.DefaultTimeStrategy),\n editorSettingsDefaults.timeStrategy,\n ),\n defaultWarnTime: localStorage.getItem(EditorSettingsKeys.DefaultWarnTime) ?? editorSettingsDefaults.warnTime,\n defaultDangerTime: localStorage.getItem(EditorSettingsKeys.DefaultDangerTime) ?? editorSettingsDefaults.dangerTime,\n defaultTimerType: validateTimerType(\n localStorage.getItem(EditorSettingsKeys.DefaultTimerType),\n editorSettingsDefaults.timerType,\n ),\n defaultEndAction: validateEndAction(\n localStorage.getItem(EditorSettingsKeys.DefaultEndAction),\n editorSettingsDefaults.endAction,\n ),\n\n setDefaultDuration: (defaultDuration) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultDuration, String(defaultDuration));\n return { defaultDuration };\n }),\n\n setLinkPrevious: (linkPrevious) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.LinkPrevious, String(linkPrevious));\n return { linkPrevious };\n }),\n setTimeStrategy: (defaultTimeStrategy) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultTimeStrategy, String(defaultTimeStrategy));\n return { defaultTimeStrategy };\n }),\n\n setWarnTime: (defaultWarnTime) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultWarnTime, String(defaultWarnTime));\n return { defaultWarnTime };\n }),\n setDangerTime: (defaultDangerTime) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultDangerTime, String(defaultDangerTime));\n return { defaultDangerTime };\n }),\n setDefaultTimerType: (defaultTimerType) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultTimerType, String(defaultTimerType));\n return { defaultTimerType };\n }),\n setDefaultEndAction: (defaultEndAction) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultEndAction, String(defaultEndAction));\n return { defaultEndAction };\n }),\n };\n});\n"],"names":["Textarea","forwardRef","className","variant","fluid","rows","resize","style","customStyle","textareaProps","ref","jsx","cx","textarea","editorSettingsDefaults","duration","linkPrevious","timeStrategy","TimeStrategy","LockDuration","warnTime","dangerTime","timerType","TimerType","CountDown","endAction","EndAction","None","useEditorSettings","create","set","defaultDuration","localStorage","getItem","EditorSettingsKeys","booleanFromLocalStorage","defaultTimeStrategy","validateTimeStrategy","defaultWarnTime","defaultDangerTime","defaultTimerType","validateTimerType","defaultEndAction","validateEndAction","setDefaultDuration","setItem","String","setLinkPrevious","setTimeStrategy","setWarnTime","setDangerTime","setDefaultTimerType","setDefaultEndAction"],"mappings":"2tBAYMA,EAAWC,EAAAA,WAA+C,SAC9D,CAAEC,UAAAA,EAAWC,QAAAA,EAAU,SAAUC,MAAAA,EAAOC,KAAAA,EAAO,EAAGC,OAAAA,EAAS,OAAQC,MAAOC,EAAa,GAAGC,CAAc,EACxGC,EACA,CAEE,OAAAC,MAAC,WACC,CAAA,IAAAD,EACA,YAAY,MACZ,aAAa,MACb,WAAW,QACX,KAAAL,EACA,MAAO,CAAE,GAAGG,EAAaF,OAAAA,CAAAA,EACzB,UAAWM,EAAG,CAACL,EAAMM,SAAUN,EAAMJ,CAAO,EAAGC,GAASG,EAAMH,MAAOF,CAAS,CAAC,EAC3EO,GAAAA,CACJ,CAAA,CAEN,CAAC,ECLYK,EAAyB,CACpCC,SAAU,WACVC,aAAc,GACdC,aAAcC,EAAaC,aAC3BC,SAAU,WACVC,WAAY,WACZC,UAAWC,EAAUC,UACrBC,UAAWC,EAAUC,IACvB,EAYaC,EAAoBC,EAAqCC,IAC7D,CACLC,gBAAiBC,aAAaC,QAAQC,4BAAuCpB,EAAuBC,SACpGC,aAAcmB,EAAwBD,uBAAiCpB,EAAuBE,YAAY,EAC1GoB,oBAAqBC,EACnBL,aAAaC,QAAQC,sBAAsC,EAC3DpB,EAAuBG,YACzB,EACAqB,gBAAiBN,aAAaC,QAAQC,6BAAuCpB,EAAuBM,SACpGmB,kBAAmBP,aAAaC,QAAQC,+BAAyCpB,EAAuBO,WACxGmB,iBAAkBC,EAChBT,aAAaC,QAAQC,2BAAmC,EACxDpB,EAAuBQ,SACzB,EACAoB,iBAAkBC,EAChBX,aAAaC,QAAQC,2BAAmC,EACxDpB,EAAuBW,SACzB,EAEAmB,mBACEd,GAAAA,EAAI,KACFE,aAAaa,QAAQX,0BAAoCY,OAAOf,CAAe,CAAC,EACzE,CAAEA,gBAAAA,CAAgB,EAC1B,EAEHgB,gBACEjB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,uBAAiCY,OAAO9B,CAAY,CAAC,EACnE,CAAEA,aAAAA,CAAa,EACvB,EACHgC,gBACElB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,uBAAwCY,OAAOV,CAAmB,CAAC,EACjF,CAAEA,oBAAAA,CAAoB,EAC9B,EAEHa,YACEnB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,2BAAoCY,OAAOR,CAAe,CAAC,EACzE,CAAEA,gBAAAA,CAAgB,EAC1B,EACHY,cACEpB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,6BAAsCY,OAAOP,CAAiB,CAAC,EAC7E,CAAEA,kBAAAA,CAAkB,EAC5B,EACHY,oBACErB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,4BAAqCY,OAAON,CAAgB,CAAC,EAC3E,CAAEA,iBAAAA,CAAiB,EAC3B,EACHY,oBACEtB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,4BAAqCY,OAAOJ,CAAgB,CAAC,EAC3E,CAAEA,iBAAAA,CAAiB,EAC3B,CACL,EACD"}
1
+ {"version":3,"file":"editorSettings-_x6YKRfR.js","sources":["../../src/common/components/input/textarea/Textarea.tsx","../../src/common/stores/editorSettings.ts"],"sourcesContent":["import { forwardRef, TextareaHTMLAttributes } from 'react';\n\nimport { cx } from '../../../utils/styleUtils';\n\nimport style from './Textarea.module.scss';\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n variant?: 'subtle' | 'ghosted';\n fluid?: boolean;\n resize?: 'none' | 'both' | 'horizontal' | 'vertical';\n}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function TextArea(\n { className, variant = 'subtle', fluid, rows = 5, resize = 'none', style: customStyle, ...textareaProps },\n ref,\n) {\n return (\n <textarea\n ref={ref}\n autoCorrect='off'\n autoComplete='off'\n spellCheck='false'\n rows={rows}\n style={{ ...customStyle, resize }}\n className={cx([style.textarea, style[variant], fluid && style.fluid, className])}\n {...textareaProps}\n />\n );\n});\n\nexport default Textarea;\n","import { EndAction, TimerType, TimeStrategy } from 'ontime-types';\nimport { validateEndAction, validateTimerType, validateTimeStrategy } from 'ontime-utils';\nimport { create } from 'zustand';\n\nimport { booleanFromLocalStorage } from '../utils/localStorage';\n\ntype EditorSettingsStore = {\n defaultDuration: string;\n linkPrevious: boolean;\n defaultTimeStrategy: TimeStrategy;\n defaultWarnTime: string;\n defaultDangerTime: string;\n defaultTimerType: TimerType;\n defaultEndAction: EndAction;\n setDefaultDuration: (defaultDuration: string) => void;\n setLinkPrevious: (linkPrevious: boolean) => void;\n setTimeStrategy: (timeStrategy: TimeStrategy) => void;\n setWarnTime: (warnTime: string) => void;\n setDangerTime: (dangerTime: string) => void;\n setDefaultTimerType: (defaultTimerType: TimerType) => void;\n setDefaultEndAction: (defaultEndAction: EndAction) => void;\n};\n\nexport const editorSettingsDefaults = {\n duration: '00:10:00',\n linkPrevious: true,\n timeStrategy: TimeStrategy.LockDuration,\n warnTime: '00:02:00', // 120000 same as backend\n dangerTime: '00:01:00', // 60000 same as backend\n timerType: TimerType.CountDown,\n endAction: EndAction.None,\n};\n\nenum EditorSettingsKeys {\n DefaultDuration = 'ontime-default-duration',\n LinkPrevious = 'ontime-link-previous',\n DefaultTimeStrategy = 'ontime-time-strategy',\n DefaultWarnTime = 'ontime-default-warn-time',\n DefaultDangerTime = 'ontime-default-danger-time',\n DefaultTimerType = 'ontime-default-timer-type',\n DefaultEndAction = 'ontime-default-end-action',\n}\n\nexport const useEditorSettings = create<EditorSettingsStore>((set) => {\n return {\n defaultDuration: localStorage.getItem(EditorSettingsKeys.DefaultDuration) ?? editorSettingsDefaults.duration,\n linkPrevious: booleanFromLocalStorage(EditorSettingsKeys.LinkPrevious, editorSettingsDefaults.linkPrevious),\n defaultTimeStrategy: validateTimeStrategy(\n localStorage.getItem(EditorSettingsKeys.DefaultTimeStrategy),\n editorSettingsDefaults.timeStrategy,\n ),\n defaultWarnTime: localStorage.getItem(EditorSettingsKeys.DefaultWarnTime) ?? editorSettingsDefaults.warnTime,\n defaultDangerTime: localStorage.getItem(EditorSettingsKeys.DefaultDangerTime) ?? editorSettingsDefaults.dangerTime,\n defaultTimerType: validateTimerType(\n localStorage.getItem(EditorSettingsKeys.DefaultTimerType),\n editorSettingsDefaults.timerType,\n ),\n defaultEndAction: validateEndAction(\n localStorage.getItem(EditorSettingsKeys.DefaultEndAction),\n editorSettingsDefaults.endAction,\n ),\n\n setDefaultDuration: (defaultDuration) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultDuration, String(defaultDuration));\n return { defaultDuration };\n }),\n\n setLinkPrevious: (linkPrevious) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.LinkPrevious, String(linkPrevious));\n return { linkPrevious };\n }),\n setTimeStrategy: (defaultTimeStrategy) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultTimeStrategy, String(defaultTimeStrategy));\n return { defaultTimeStrategy };\n }),\n\n setWarnTime: (defaultWarnTime) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultWarnTime, String(defaultWarnTime));\n return { defaultWarnTime };\n }),\n setDangerTime: (defaultDangerTime) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultDangerTime, String(defaultDangerTime));\n return { defaultDangerTime };\n }),\n setDefaultTimerType: (defaultTimerType) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultTimerType, String(defaultTimerType));\n return { defaultTimerType };\n }),\n setDefaultEndAction: (defaultEndAction) =>\n set(() => {\n localStorage.setItem(EditorSettingsKeys.DefaultEndAction, String(defaultEndAction));\n return { defaultEndAction };\n }),\n };\n});\n"],"names":["Textarea","forwardRef","className","variant","fluid","rows","resize","style","customStyle","textareaProps","ref","jsx","cx","textarea","editorSettingsDefaults","duration","linkPrevious","timeStrategy","TimeStrategy","LockDuration","warnTime","dangerTime","timerType","TimerType","CountDown","endAction","EndAction","None","useEditorSettings","create","set","defaultDuration","localStorage","getItem","EditorSettingsKeys","booleanFromLocalStorage","defaultTimeStrategy","validateTimeStrategy","defaultWarnTime","defaultDangerTime","defaultTimerType","validateTimerType","defaultEndAction","validateEndAction","setDefaultDuration","setItem","String","setLinkPrevious","setTimeStrategy","setWarnTime","setDangerTime","setDefaultTimerType","setDefaultEndAction"],"mappings":"2tBAYMA,EAAWC,EAAAA,WAA+C,SAC9D,CAAEC,UAAAA,EAAWC,QAAAA,EAAU,SAAUC,MAAAA,EAAOC,KAAAA,EAAO,EAAGC,OAAAA,EAAS,OAAQC,MAAOC,EAAa,GAAGC,CAAc,EACxGC,EACA,CAEE,OAAAC,MAAC,WACC,CAAA,IAAAD,EACA,YAAY,MACZ,aAAa,MACb,WAAW,QACX,KAAAL,EACA,MAAO,CAAE,GAAGG,EAAaF,OAAAA,CAAAA,EACzB,UAAWM,EAAG,CAACL,EAAMM,SAAUN,EAAMJ,CAAO,EAAGC,GAASG,EAAMH,MAAOF,CAAS,CAAC,EAC3EO,GAAAA,CACJ,CAAA,CAEN,CAAC,ECLYK,EAAyB,CACpCC,SAAU,WACVC,aAAc,GACdC,aAAcC,EAAaC,aAC3BC,SAAU,WACVC,WAAY,WACZC,UAAWC,EAAUC,UACrBC,UAAWC,EAAUC,IACvB,EAYaC,EAAoBC,EAAqCC,IAC7D,CACLC,gBAAiBC,aAAaC,QAAQC,4BAAuCpB,EAAuBC,SACpGC,aAAcmB,EAAwBD,uBAAiCpB,EAAuBE,YAAY,EAC1GoB,oBAAqBC,EACnBL,aAAaC,QAAQC,sBAAsC,EAC3DpB,EAAuBG,YACzB,EACAqB,gBAAiBN,aAAaC,QAAQC,6BAAuCpB,EAAuBM,SACpGmB,kBAAmBP,aAAaC,QAAQC,+BAAyCpB,EAAuBO,WACxGmB,iBAAkBC,EAChBT,aAAaC,QAAQC,2BAAmC,EACxDpB,EAAuBQ,SACzB,EACAoB,iBAAkBC,EAChBX,aAAaC,QAAQC,2BAAmC,EACxDpB,EAAuBW,SACzB,EAEAmB,mBACEd,GAAAA,EAAI,KACFE,aAAaa,QAAQX,0BAAoCY,OAAOf,CAAe,CAAC,EACzE,CAAEA,gBAAAA,CAAgB,EAC1B,EAEHgB,gBACEjB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,uBAAiCY,OAAO9B,CAAY,CAAC,EACnE,CAAEA,aAAAA,CAAa,EACvB,EACHgC,gBACElB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,uBAAwCY,OAAOV,CAAmB,CAAC,EACjF,CAAEA,oBAAAA,CAAoB,EAC9B,EAEHa,YACEnB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,2BAAoCY,OAAOR,CAAe,CAAC,EACzE,CAAEA,gBAAAA,CAAgB,EAC1B,EACHY,cACEpB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,6BAAsCY,OAAOP,CAAiB,CAAC,EAC7E,CAAEA,kBAAAA,CAAkB,EAC5B,EACHY,oBACErB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,4BAAqCY,OAAON,CAAgB,CAAC,EAC3E,CAAEA,iBAAAA,CAAiB,EAC3B,EACHY,oBACEtB,GAAAA,EAAI,KACFE,aAAaa,QAAQX,4BAAqCY,OAAOJ,CAAgB,CAAC,EAC3E,CAAEA,iBAAAA,CAAiB,EAC3B,CACL,EACD"}
@@ -1,2 +1,2 @@
1
- import"./vendor-CKDP5hij.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]="3bddcef3-3c46-4d76-a6ef-4958e2a23011",e._sentryDebugIdIdentifier="sentry-dbid-3bddcef3-3c46-4d76-a6ef-4958e2a23011")}catch{}})();const d=(e,n,t)=>Math.max(Math.min(e,Math.max(n,t)),Math.min(n,t));function s(e,n){return e===null||n===null?0:e<=0?100:e>=n?0:d((n-e)/n*100,0,100)}export{s as g};
2
- //# sourceMappingURL=getProgress-B9UANc25.js.map
1
+ import"./vendor-BKUJ0_Du.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]="3bddcef3-3c46-4d76-a6ef-4958e2a23011",e._sentryDebugIdIdentifier="sentry-dbid-3bddcef3-3c46-4d76-a6ef-4958e2a23011")}catch{}})();const d=(e,n,t)=>Math.max(Math.min(e,Math.max(n,t)),Math.min(n,t));function s(e,n){return e===null||n===null?0:e<=0?100:e>=n?0:d((n-e)/n*100,0,100)}export{s as g};
2
+ //# sourceMappingURL=getProgress-ZUTmCn_v.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getProgress-B9UANc25.js","sources":["../../src/common/utils/math.ts","../../src/common/utils/getProgress.ts"],"sourcesContent":["/**\n * Clamps a value between a min and a max\n * @param {number} num - Value to clamp\n * @param {number} min - min value\n * @param {number} max - max value\n * @returns {number}\n */\nexport const clamp = (num: number, min: number, max: number) =>\n Math.max(Math.min(num, Math.max(min, max)), Math.min(min, max));\n","import { MaybeNumber } from 'ontime-types';\n\nimport { clamp } from './math';\n\n/**\n * Returns completion percentage of a progress bar\n * This code assumes the current time and duration have addedTime already applied\n */\nexport function getProgress(current: MaybeNumber, duration: MaybeNumber) {\n if (current === null || duration === null) {\n return 0;\n }\n\n if (current <= 0) {\n return 100;\n }\n\n if (current >= duration) {\n return 0;\n }\n\n return clamp(((duration - current) / duration) * 100, 0, 100);\n}\n"],"names":["clamp","num","min","max","Math","getProgress","current","duration"],"mappings":"uXAOaA,MAAAA,EAAQA,CAACC,EAAaC,EAAaC,IAC9CC,KAAKD,IAAIC,KAAKF,IAAID,EAAKG,KAAKD,IAAID,EAAKC,CAAG,CAAC,EAAGC,KAAKF,IAAIA,EAAKC,CAAG,CAAC,ECAhDE,SAAAA,EAAYC,EAAsBC,EAAuB,CACnED,OAAAA,IAAY,MAAQC,IAAa,KAC5B,EAGLD,GAAW,EACN,IAGLA,GAAWC,EACN,EAGFP,GAAQO,EAAWD,GAAWC,EAAY,IAAK,EAAG,GAAG,CAC9D"}
1
+ {"version":3,"file":"getProgress-ZUTmCn_v.js","sources":["../../src/common/utils/math.ts","../../src/common/utils/getProgress.ts"],"sourcesContent":["/**\n * Clamps a value between a min and a max\n * @param {number} num - Value to clamp\n * @param {number} min - min value\n * @param {number} max - max value\n * @returns {number}\n */\nexport const clamp = (num: number, min: number, max: number) =>\n Math.max(Math.min(num, Math.max(min, max)), Math.min(min, max));\n","import { MaybeNumber } from 'ontime-types';\n\nimport { clamp } from './math';\n\n/**\n * Returns completion percentage of a progress bar\n * This code assumes the current time and duration have addedTime already applied\n */\nexport function getProgress(current: MaybeNumber, duration: MaybeNumber) {\n if (current === null || duration === null) {\n return 0;\n }\n\n if (current <= 0) {\n return 100;\n }\n\n if (current >= duration) {\n return 0;\n }\n\n return clamp(((duration - current) / duration) * 100, 0, 100);\n}\n"],"names":["clamp","num","min","max","Math","getProgress","current","duration"],"mappings":"uXAOaA,MAAAA,EAAQA,CAACC,EAAaC,EAAaC,IAC9CC,KAAKD,IAAIC,KAAKF,IAAID,EAAKG,KAAKD,IAAID,EAAKC,CAAG,CAAC,EAAGC,KAAKF,IAAIA,EAAKC,CAAG,CAAC,ECAhDE,SAAAA,EAAYC,EAAsBC,EAAuB,CACnED,OAAAA,IAAY,MAAQC,IAAa,KAC5B,EAGLD,GAAW,EACN,IAGLA,GAAWC,EACN,EAGFP,GAAQO,EAAWD,GAAWC,EAAY,IAAK,EAAG,GAAG,CAC9D"}