@openc3/vue-common 6.9.1 → 6.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. package/dist/{ArrayWidget-DLfNWDzN.js → ArrayWidget-DQRQ7dPa.js} +5 -5
  2. package/dist/{ArrayWidget-DLfNWDzN.js.map → ArrayWidget-DQRQ7dPa.js.map} +1 -1
  3. package/dist/{ArrayWidget-DJkuPBFS.cjs → ArrayWidget-DvCX-1Om.cjs} +2 -2
  4. package/dist/{ArrayWidget-DJkuPBFS.cjs.map → ArrayWidget-DvCX-1Om.cjs.map} +1 -1
  5. package/dist/{ArrayplotWidget-CoRsUxHG.js → ArrayplotWidget-BeSfz3MR.js} +4 -4
  6. package/dist/{ArrayplotWidget-CoRsUxHG.js.map → ArrayplotWidget-BeSfz3MR.js.map} +1 -1
  7. package/dist/{ArrayplotWidget-COGxmBEP.cjs → ArrayplotWidget-DA4SCxEg.cjs} +2 -2
  8. package/dist/{ArrayplotWidget-COGxmBEP.cjs.map → ArrayplotWidget-DA4SCxEg.cjs.map} +1 -1
  9. package/dist/{BarColumn-DHP-zQ4R.js → BarColumn-BdIaQfOz.js} +3 -3
  10. package/dist/{BarColumn-DHP-zQ4R.js.map → BarColumn-BdIaQfOz.js.map} +1 -1
  11. package/dist/{BarColumn-BaPaYtki.cjs → BarColumn-C5VfAEOx.cjs} +2 -2
  12. package/dist/{BarColumn-BaPaYtki.cjs.map → BarColumn-C5VfAEOx.cjs.map} +1 -1
  13. package/dist/{BlockWidget-DLncsLLX.cjs → BlockWidget-C33RBqR2.cjs} +2 -2
  14. package/dist/{BlockWidget-DLncsLLX.cjs.map → BlockWidget-C33RBqR2.cjs.map} +1 -1
  15. package/dist/{BlockWidget-BmHSFvOq.js → BlockWidget-DSFKrUxl.js} +5 -5
  16. package/dist/{BlockWidget-BmHSFvOq.js.map → BlockWidget-DSFKrUxl.js.map} +1 -1
  17. package/dist/{ButtonWidget-C3ZWRjZZ.js → ButtonWidget-CFbjdxSr.js} +7 -7
  18. package/dist/{ButtonWidget-C3ZWRjZZ.js.map → ButtonWidget-CFbjdxSr.js.map} +1 -1
  19. package/dist/{ButtonWidget-BLePbTf_.cjs → ButtonWidget-DV33-G5z.cjs} +3 -3
  20. package/dist/{ButtonWidget-BLePbTf_.cjs.map → ButtonWidget-DV33-G5z.cjs.map} +1 -1
  21. package/dist/{CanvasWidget-CL-XzPF4.js → CanvasWidget-BloYxuKE.js} +3 -3
  22. package/dist/{CanvasWidget-CL-XzPF4.js.map → CanvasWidget-BloYxuKE.js.map} +1 -1
  23. package/dist/{CanvasWidget-C8Sy9t9G.cjs → CanvasWidget-CO5Ql5FM.cjs} +2 -2
  24. package/dist/{CanvasWidget-C8Sy9t9G.cjs.map → CanvasWidget-CO5Ql5FM.cjs.map} +1 -1
  25. package/dist/{CanvasdotWidget-D8Y9DgVE.js → CanvasdotWidget-CZxUOPRd.js} +3 -3
  26. package/dist/{CanvasdotWidget-D8Y9DgVE.js.map → CanvasdotWidget-CZxUOPRd.js.map} +1 -1
  27. package/dist/{CanvasdotWidget-6MPKD5iZ.cjs → CanvasdotWidget-v73CXaR2.cjs} +2 -2
  28. package/dist/{CanvasdotWidget-6MPKD5iZ.cjs.map → CanvasdotWidget-v73CXaR2.cjs.map} +1 -1
  29. package/dist/{CanvasimageWidget-DYUaf3zy.cjs → CanvasimageWidget-CCwRuLep.cjs} +2 -2
  30. package/dist/{CanvasimageWidget-DYUaf3zy.cjs.map → CanvasimageWidget-CCwRuLep.cjs.map} +1 -1
  31. package/dist/{CanvasimageWidget-DHSGK_tD.js → CanvasimageWidget-ULQq3nqZ.js} +4 -4
  32. package/dist/{CanvasimageWidget-DHSGK_tD.js.map → CanvasimageWidget-ULQq3nqZ.js.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-Bu1ECOWl.cjs → CanvasimagevalueWidget-NZYl_3mA.cjs} +2 -2
  34. package/dist/{CanvasimagevalueWidget-Bu1ECOWl.cjs.map → CanvasimagevalueWidget-NZYl_3mA.cjs.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-Btt_fQfC.js → CanvasimagevalueWidget-jFCVXYhi.js} +4 -4
  36. package/dist/{CanvasimagevalueWidget-Btt_fQfC.js.map → CanvasimagevalueWidget-jFCVXYhi.js.map} +1 -1
  37. package/dist/{CanvaslabelWidget-BF_8RTjv.js → CanvaslabelWidget-DQhBI1vZ.js} +3 -3
  38. package/dist/{CanvaslabelWidget-BF_8RTjv.js.map → CanvaslabelWidget-DQhBI1vZ.js.map} +1 -1
  39. package/dist/{CanvaslabelWidget-Dik-ld55.cjs → CanvaslabelWidget-XfEANCQ-.cjs} +2 -2
  40. package/dist/{CanvaslabelWidget-Dik-ld55.cjs.map → CanvaslabelWidget-XfEANCQ-.cjs.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-scbwaujI.js → CanvaslabelvalueWidget-C4REgztL.js} +3 -3
  42. package/dist/{CanvaslabelvalueWidget-scbwaujI.js.map → CanvaslabelvalueWidget-C4REgztL.js.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-BBlKBoZO.cjs → CanvaslabelvalueWidget-CJCZdHId.cjs} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-BBlKBoZO.cjs.map → CanvaslabelvalueWidget-CJCZdHId.cjs.map} +1 -1
  45. package/dist/{CanvaslineWidget-DN0ojc37.cjs → CanvaslineWidget-DycxDsyJ.cjs} +2 -2
  46. package/dist/{CanvaslineWidget-DN0ojc37.cjs.map → CanvaslineWidget-DycxDsyJ.cjs.map} +1 -1
  47. package/dist/{CanvaslineWidget-gRvm_-TT.js → CanvaslineWidget-S4PCEvZM.js} +3 -3
  48. package/dist/{CanvaslineWidget-gRvm_-TT.js.map → CanvaslineWidget-S4PCEvZM.js.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-CljziRek.js → CanvaslinevalueWidget-597khOSA.js} +3 -3
  50. package/dist/{CanvaslinevalueWidget-CljziRek.js.map → CanvaslinevalueWidget-597khOSA.js.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-Cz1XYp0r.cjs → CanvaslinevalueWidget-bChpy38C.cjs} +2 -2
  52. package/dist/{CanvaslinevalueWidget-Cz1XYp0r.cjs.map → CanvaslinevalueWidget-bChpy38C.cjs.map} +1 -1
  53. package/dist/{CheckbuttonWidget-BOabI_jE.js → CheckbuttonWidget-BcblKat3.js} +3 -3
  54. package/dist/{CheckbuttonWidget-BOabI_jE.js.map → CheckbuttonWidget-BcblKat3.js.map} +1 -1
  55. package/dist/{CheckbuttonWidget-B5jOzhZ4.cjs → CheckbuttonWidget-BwDttJTf.cjs} +2 -2
  56. package/dist/{CheckbuttonWidget-B5jOzhZ4.cjs.map → CheckbuttonWidget-BwDttJTf.cjs.map} +1 -1
  57. package/dist/{ClassificationBanners-CbcQDr3v.cjs → ClassificationBanners-CEzDn5cM.cjs} +2 -2
  58. package/dist/{ClassificationBanners-CbcQDr3v.cjs.map → ClassificationBanners-CEzDn5cM.cjs.map} +1 -1
  59. package/dist/{ClassificationBanners-BGDnMx4r.js → ClassificationBanners-CS4GUeYv.js} +2 -2
  60. package/dist/{ClassificationBanners-BGDnMx4r.js.map → ClassificationBanners-CS4GUeYv.js.map} +1 -1
  61. package/dist/{ComboboxWidget-BLXNYFiY.js → ComboboxWidget-BMcHS4g5.js} +3 -3
  62. package/dist/{ComboboxWidget-BLXNYFiY.js.map → ComboboxWidget-BMcHS4g5.js.map} +1 -1
  63. package/dist/{ComboboxWidget-_lxTm8Wb.cjs → ComboboxWidget-DkBtLQ41.cjs} +2 -2
  64. package/dist/{ComboboxWidget-_lxTm8Wb.cjs.map → ComboboxWidget-DkBtLQ41.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-niBmkudw.cjs → CriticalCmdDialog-C4DRtDnA.cjs} +2 -2
  66. package/dist/CriticalCmdDialog-C4DRtDnA.cjs.map +1 -0
  67. package/dist/{CriticalCmdDialog-CnNlsHRX.js → CriticalCmdDialog-CVLyYtng.js} +17 -17
  68. package/dist/CriticalCmdDialog-CVLyYtng.js.map +1 -0
  69. package/dist/{CustomIcon-h5X7369N.js → CustomIcon-DTfsnDJn.js} +6 -6
  70. package/dist/{CustomIcon-h5X7369N.js.map → CustomIcon-DTfsnDJn.js.map} +1 -1
  71. package/dist/CustomIcon-eie3rPKh.cjs +2 -0
  72. package/dist/{CustomIcon-Bop2mEnu.cjs.map → CustomIcon-eie3rPKh.cjs.map} +1 -1
  73. package/dist/{DateWidget-BTqLCtLS.js → DateWidget-BpnMzSBn.js} +3 -3
  74. package/dist/{DateWidget-BTqLCtLS.js.map → DateWidget-BpnMzSBn.js.map} +1 -1
  75. package/dist/{DateWidget-BvabEAhO.cjs → DateWidget-CRFiLyxD.cjs} +2 -2
  76. package/dist/{DateWidget-BvabEAhO.cjs.map → DateWidget-CRFiLyxD.cjs.map} +1 -1
  77. package/dist/DetailsDialog-Brv3nVs3.cjs +2 -0
  78. package/dist/DetailsDialog-Brv3nVs3.cjs.map +1 -0
  79. package/dist/{DetailsDialog-BNCS3QAe.js → DetailsDialog-q9piPmHq.js} +77 -74
  80. package/dist/DetailsDialog-q9piPmHq.js.map +1 -0
  81. package/dist/{DynamicWidget-BWEVCUfd.cjs → DynamicWidget-BNfJRfR5.cjs} +2 -2
  82. package/dist/{DynamicWidget-BWEVCUfd.cjs.map → DynamicWidget-BNfJRfR5.cjs.map} +1 -1
  83. package/dist/{DynamicWidget-CfMtj7H8.js → DynamicWidget-DHL7pbgW.js} +2 -2
  84. package/dist/{DynamicWidget-CfMtj7H8.js.map → DynamicWidget-DHL7pbgW.js.map} +1 -1
  85. package/dist/{EventListDialog-C2pwmD0d.js → EventListDialog-BlcxcO8a.js} +129 -123
  86. package/dist/EventListDialog-BlcxcO8a.js.map +1 -0
  87. package/dist/EventListDialog-DXIYmkWb.cjs +2 -0
  88. package/dist/EventListDialog-DXIYmkWb.cjs.map +1 -0
  89. package/dist/{FormatvalueWidget-ulLzg1E-.cjs → FormatvalueWidget-AXH-VW-A.cjs} +2 -2
  90. package/dist/{FormatvalueWidget-ulLzg1E-.cjs.map → FormatvalueWidget-AXH-VW-A.cjs.map} +1 -1
  91. package/dist/{FormatvalueWidget-CLYx8qbg.js → FormatvalueWidget-Cm-HmAmw.js} +4 -4
  92. package/dist/{FormatvalueWidget-CLYx8qbg.js.map → FormatvalueWidget-Cm-HmAmw.js.map} +1 -1
  93. package/dist/{Graph-BliBYJxD.js → Graph-BEodMaxQ.js} +102 -95
  94. package/dist/Graph-BEodMaxQ.js.map +1 -0
  95. package/dist/Graph-wDFY6Kd7.cjs +2 -0
  96. package/dist/Graph-wDFY6Kd7.cjs.map +1 -0
  97. package/dist/{GraphWidget-g-0vO4_S.cjs → GraphWidget-B878ArE1.cjs} +2 -2
  98. package/dist/{GraphWidget-g-0vO4_S.cjs.map → GraphWidget-B878ArE1.cjs.map} +1 -1
  99. package/dist/{GraphWidget-Cb6Ozf54.js → GraphWidget-CAADBFV-.js} +2 -2
  100. package/dist/{GraphWidget-Cb6Ozf54.js.map → GraphWidget-CAADBFV-.js.map} +1 -1
  101. package/dist/{HorizontalWidget-BiEZZpZQ.cjs → HorizontalWidget-D2lXnQqQ.cjs} +2 -2
  102. package/dist/{HorizontalWidget-BiEZZpZQ.cjs.map → HorizontalWidget-D2lXnQqQ.cjs.map} +1 -1
  103. package/dist/{HorizontalWidget-AY2M01qP.js → HorizontalWidget-NcXIXxh7.js} +3 -3
  104. package/dist/{HorizontalWidget-AY2M01qP.js.map → HorizontalWidget-NcXIXxh7.js.map} +1 -1
  105. package/dist/{HorizontalboxWidget-CWq4ej6k.cjs → HorizontalboxWidget-BGzl7-Rt.cjs} +2 -2
  106. package/dist/{HorizontalboxWidget-CWq4ej6k.cjs.map → HorizontalboxWidget-BGzl7-Rt.cjs.map} +1 -1
  107. package/dist/{HorizontalboxWidget-2MEKvq_C.js → HorizontalboxWidget-CW9XX4uH.js} +6 -6
  108. package/dist/{HorizontalboxWidget-2MEKvq_C.js.map → HorizontalboxWidget-CW9XX4uH.js.map} +1 -1
  109. package/dist/{HorizontallineWidget-DgpOPA7q.js → HorizontallineWidget-Cu2dDt7k.js} +3 -3
  110. package/dist/{HorizontallineWidget-DgpOPA7q.js.map → HorizontallineWidget-Cu2dDt7k.js.map} +1 -1
  111. package/dist/{HorizontallineWidget-Dm5G1l4A.cjs → HorizontallineWidget-x2u6MQNz.cjs} +2 -2
  112. package/dist/{HorizontallineWidget-Dm5G1l4A.cjs.map → HorizontallineWidget-x2u6MQNz.cjs.map} +1 -1
  113. package/dist/{IframeWidget-DDw5t7eV.cjs → IframeWidget-B5simCWn.cjs} +2 -2
  114. package/dist/{IframeWidget-DDw5t7eV.cjs.map → IframeWidget-B5simCWn.cjs.map} +1 -1
  115. package/dist/{IframeWidget-UKKUl7k5.js → IframeWidget-BBU3MkSq.js} +3 -3
  116. package/dist/{IframeWidget-UKKUl7k5.js.map → IframeWidget-BBU3MkSq.js.map} +1 -1
  117. package/dist/{ImageLoader-9TCd0KxL.cjs → ImageLoader-Dj3MZVq9.cjs} +2 -2
  118. package/dist/{ImageLoader-9TCd0KxL.cjs.map → ImageLoader-Dj3MZVq9.cjs.map} +1 -1
  119. package/dist/{ImageLoader-C-CIL4YD.js → ImageLoader-XAGgjKkq.js} +2 -2
  120. package/dist/{ImageLoader-C-CIL4YD.js.map → ImageLoader-XAGgjKkq.js.map} +1 -1
  121. package/dist/{ImageviewerWidget-DpXzLOpF.cjs → ImageviewerWidget-BtuiORhN.cjs} +2 -2
  122. package/dist/{ImageviewerWidget-DpXzLOpF.cjs.map → ImageviewerWidget-BtuiORhN.cjs.map} +1 -1
  123. package/dist/{ImageviewerWidget-DhuQH5Io.js → ImageviewerWidget-UByjeO63.js} +3 -3
  124. package/dist/{ImageviewerWidget-DhuQH5Io.js.map → ImageviewerWidget-UByjeO63.js.map} +1 -1
  125. package/dist/{InterfacesTab-Dq3oAKqz.js → InterfacesTab-6hli9fcg.js} +7 -7
  126. package/dist/{InterfacesTab-Dq3oAKqz.js.map → InterfacesTab-6hli9fcg.js.map} +1 -1
  127. package/dist/{InterfacesTab-CiVfsUia.cjs → InterfacesTab-B1CwBWFu.cjs} +2 -2
  128. package/dist/{InterfacesTab-CiVfsUia.cjs.map → InterfacesTab-B1CwBWFu.cjs.map} +1 -1
  129. package/dist/{LabelWidget-SO9zqcNN.js → LabelWidget-BsOpolUL.js} +3 -3
  130. package/dist/{LabelWidget-SO9zqcNN.js.map → LabelWidget-BsOpolUL.js.map} +1 -1
  131. package/dist/{LabelWidget-D-m2gFIZ.cjs → LabelWidget-X4cBbl5N.cjs} +2 -2
  132. package/dist/{LabelWidget-D-m2gFIZ.cjs.map → LabelWidget-X4cBbl5N.cjs.map} +1 -1
  133. package/dist/{LabelledWidget-DWoM5AJ5.js → LabelledWidget-DVOGpgZ-.js} +5 -5
  134. package/dist/{LabelledWidget-DWoM5AJ5.js.map → LabelledWidget-DVOGpgZ-.js.map} +1 -1
  135. package/dist/{LabelledWidget-BFfsD2wz.cjs → LabelledWidget-DaHqSURc.cjs} +2 -2
  136. package/dist/{LabelledWidget-BFfsD2wz.cjs.map → LabelledWidget-DaHqSURc.cjs.map} +1 -1
  137. package/dist/{LabelprogressbarWidget-D3vnkvQZ.js → LabelprogressbarWidget-BeE9fDs6.js} +5 -5
  138. package/dist/{LabelprogressbarWidget-D3vnkvQZ.js.map → LabelprogressbarWidget-BeE9fDs6.js.map} +1 -1
  139. package/dist/{LabelprogressbarWidget-B8x5YimU.cjs → LabelprogressbarWidget-Cz3nXacL.cjs} +2 -2
  140. package/dist/{LabelprogressbarWidget-B8x5YimU.cjs.map → LabelprogressbarWidget-Cz3nXacL.cjs.map} +1 -1
  141. package/dist/{LabelsparklineWidget-DO0T-Jot.js → LabelsparklineWidget-Bj7trKML.js} +5 -5
  142. package/dist/{LabelsparklineWidget-DO0T-Jot.js.map → LabelsparklineWidget-Bj7trKML.js.map} +1 -1
  143. package/dist/{LabelsparklineWidget-DyPaUfc9.cjs → LabelsparklineWidget-Bns8kwBj.cjs} +2 -2
  144. package/dist/{LabelsparklineWidget-DyPaUfc9.cjs.map → LabelsparklineWidget-Bns8kwBj.cjs.map} +1 -1
  145. package/dist/{LabelvalueWidget-cTPG6Xqi.cjs → LabelvalueWidget-D-sncwem.cjs} +2 -2
  146. package/dist/{LabelvalueWidget-cTPG6Xqi.cjs.map → LabelvalueWidget-D-sncwem.cjs.map} +1 -1
  147. package/dist/{LabelvalueWidget-B6BbNFnk.js → LabelvalueWidget-Dwqsh5o2.js} +5 -5
  148. package/dist/{LabelvalueWidget-B6BbNFnk.js.map → LabelvalueWidget-Dwqsh5o2.js.map} +1 -1
  149. package/dist/{LabelvaluedescWidget-CxfL-H9C.js → LabelvaluedescWidget-Cfu2vuja.js} +10 -10
  150. package/dist/{LabelvaluedescWidget-CxfL-H9C.js.map → LabelvaluedescWidget-Cfu2vuja.js.map} +1 -1
  151. package/dist/{LabelvaluedescWidget-C4sIZ0md.cjs → LabelvaluedescWidget-DmqG8dzJ.cjs} +2 -2
  152. package/dist/{LabelvaluedescWidget-C4sIZ0md.cjs.map → LabelvaluedescWidget-DmqG8dzJ.cjs.map} +1 -1
  153. package/dist/{LabelvaluelimitsbarWidget-BT5k9mHv.js → LabelvaluelimitsbarWidget-DYV68AJ_.js} +5 -5
  154. package/dist/{LabelvaluelimitsbarWidget-BT5k9mHv.js.map → LabelvaluelimitsbarWidget-DYV68AJ_.js.map} +1 -1
  155. package/dist/{LabelvaluelimitsbarWidget-CBnU6Afl.cjs → LabelvaluelimitsbarWidget-_l7xjrX9.cjs} +2 -2
  156. package/dist/{LabelvaluelimitsbarWidget-CBnU6Afl.cjs.map → LabelvaluelimitsbarWidget-_l7xjrX9.cjs.map} +1 -1
  157. package/dist/{LabelvaluelimitscolumnWidget-DUbmxh4p.js → LabelvaluelimitscolumnWidget-CtaoTixt.js} +6 -6
  158. package/dist/{LabelvaluelimitscolumnWidget-DUbmxh4p.js.map → LabelvaluelimitscolumnWidget-CtaoTixt.js.map} +1 -1
  159. package/dist/{LabelvaluelimitscolumnWidget-CwoMfO0P.cjs → LabelvaluelimitscolumnWidget-D0WEVZMc.cjs} +2 -2
  160. package/dist/{LabelvaluelimitscolumnWidget-CwoMfO0P.cjs.map → LabelvaluelimitscolumnWidget-D0WEVZMc.cjs.map} +1 -1
  161. package/dist/{LabelvaluerangebarWidget-DexAc2UB.js → LabelvaluerangebarWidget-3EaUB6E6.js} +5 -5
  162. package/dist/{LabelvaluerangebarWidget-DexAc2UB.js.map → LabelvaluerangebarWidget-3EaUB6E6.js.map} +1 -1
  163. package/dist/{LabelvaluerangebarWidget-DB4gw6Rd.cjs → LabelvaluerangebarWidget-BZTEfPQh.cjs} +2 -2
  164. package/dist/{LabelvaluerangebarWidget-DB4gw6Rd.cjs.map → LabelvaluerangebarWidget-BZTEfPQh.cjs.map} +1 -1
  165. package/dist/{Layout-Dd6dRf3R.js → Layout-DNR3xnku.js} +2 -2
  166. package/dist/{Layout-Dd6dRf3R.js.map → Layout-DNR3xnku.js.map} +1 -1
  167. package/dist/Layout-U0MXDxLO.cjs +2 -0
  168. package/dist/{Layout-DvBekli8.cjs.map → Layout-U0MXDxLO.cjs.map} +1 -1
  169. package/dist/{LedWidget-D1RwHb_V.js → LedWidget-Gi6GXtrW.js} +5 -5
  170. package/dist/{LedWidget-D1RwHb_V.js.map → LedWidget-Gi6GXtrW.js.map} +1 -1
  171. package/dist/{LedWidget-a99ygZOA.cjs → LedWidget-MAyRDM2n.cjs} +2 -2
  172. package/dist/{LedWidget-a99ygZOA.cjs.map → LedWidget-MAyRDM2n.cjs.map} +1 -1
  173. package/dist/{LimitsbarWidget-ClOmoV50.js → LimitsbarWidget-BTZQY9XQ.js} +3 -3
  174. package/dist/{LimitsbarWidget-ClOmoV50.js.map → LimitsbarWidget-BTZQY9XQ.js.map} +1 -1
  175. package/dist/{LimitsbarWidget-DaHpj-rM.cjs → LimitsbarWidget-ytyfCphX.cjs} +2 -2
  176. package/dist/{LimitsbarWidget-DaHpj-rM.cjs.map → LimitsbarWidget-ytyfCphX.cjs.map} +1 -1
  177. package/dist/{LimitscolorWidget-CBUoEYKp.js → LimitscolorWidget-CFnmvlrA.js} +3 -3
  178. package/dist/{LimitscolorWidget-CBUoEYKp.js.map → LimitscolorWidget-CFnmvlrA.js.map} +1 -1
  179. package/dist/{LimitscolorWidget-D4nPHQlI.cjs → LimitscolorWidget-CeZYYSQn.cjs} +2 -2
  180. package/dist/{LimitscolorWidget-D4nPHQlI.cjs.map → LimitscolorWidget-CeZYYSQn.cjs.map} +1 -1
  181. package/dist/{LimitscolumnWidget-wIx0L9hb.cjs → LimitscolumnWidget-CXzLYznR.cjs} +2 -2
  182. package/dist/{LimitscolumnWidget-wIx0L9hb.cjs.map → LimitscolumnWidget-CXzLYznR.cjs.map} +1 -1
  183. package/dist/{LimitscolumnWidget-hsHkmY-_.js → LimitscolumnWidget-DSsz36tT.js} +3 -3
  184. package/dist/{LimitscolumnWidget-hsHkmY-_.js.map → LimitscolumnWidget-DSsz36tT.js.map} +1 -1
  185. package/dist/{LinegraphWidget-CXrKtxOo.js → LinegraphWidget-CeBijgDo.js} +5 -5
  186. package/dist/{LinegraphWidget-CXrKtxOo.js.map → LinegraphWidget-CeBijgDo.js.map} +1 -1
  187. package/dist/{LinegraphWidget-BRnwhfEQ.cjs → LinegraphWidget-WVSJOuTE.cjs} +2 -2
  188. package/dist/{LinegraphWidget-BRnwhfEQ.cjs.map → LinegraphWidget-WVSJOuTE.cjs.map} +1 -1
  189. package/dist/{MatrixbycolumnsWidget-3jldaS14.cjs → MatrixbycolumnsWidget-COWMt_-r.cjs} +2 -2
  190. package/dist/{MatrixbycolumnsWidget-3jldaS14.cjs.map → MatrixbycolumnsWidget-COWMt_-r.cjs.map} +1 -1
  191. package/dist/{MatrixbycolumnsWidget-CsogVU9c.js → MatrixbycolumnsWidget-DX9uhjAv.js} +4 -4
  192. package/dist/{MatrixbycolumnsWidget-CsogVU9c.js.map → MatrixbycolumnsWidget-DX9uhjAv.js.map} +1 -1
  193. package/dist/{MicroservicesTab-DzEvbxlM.js → MicroservicesTab-BSSCh5Ss.js} +5 -5
  194. package/dist/{MicroservicesTab-DzEvbxlM.js.map → MicroservicesTab-BSSCh5Ss.js.map} +1 -1
  195. package/dist/{MicroservicesTab-3pNZZ5I0.cjs → MicroservicesTab-Btw8r_9N.cjs} +2 -2
  196. package/dist/{MicroservicesTab-3pNZZ5I0.cjs.map → MicroservicesTab-Btw8r_9N.cjs.map} +1 -1
  197. package/dist/Openc3Screen-DIN4KVsw.cjs +6 -0
  198. package/dist/Openc3Screen-DIN4KVsw.cjs.map +1 -0
  199. package/dist/{Openc3Screen-Cqm5Xtd-.js → Openc3Screen-iW_gaikc.js} +266 -253
  200. package/dist/Openc3Screen-iW_gaikc.js.map +1 -0
  201. package/dist/{OutputDialog-7M4L50tA.js → OutputDialog-BMzp6wy3.js} +3 -3
  202. package/dist/{OutputDialog-7M4L50tA.js.map → OutputDialog-BMzp6wy3.js.map} +1 -1
  203. package/dist/{OutputDialog-CnDQxHTZ.cjs → OutputDialog-CKObLICh.cjs} +2 -2
  204. package/dist/{OutputDialog-CnDQxHTZ.cjs.map → OutputDialog-CKObLICh.cjs.map} +1 -1
  205. package/dist/{PackagesTab-N4SD1Pxj.js → PackagesTab-BascLTCK.js} +4 -4
  206. package/dist/{PackagesTab-N4SD1Pxj.js.map → PackagesTab-BascLTCK.js.map} +1 -1
  207. package/dist/{PackagesTab-DPPXZvoV.cjs → PackagesTab-D_1kbMkk.cjs} +2 -2
  208. package/dist/{PackagesTab-DPPXZvoV.cjs.map → PackagesTab-D_1kbMkk.cjs.map} +1 -1
  209. package/dist/PluginsTab-CjYoMrbj.cjs +6 -0
  210. package/dist/PluginsTab-CjYoMrbj.cjs.map +1 -0
  211. package/dist/{PluginsTab-C7PH2Wym.js → PluginsTab-Yz9HZqpp.js} +376 -294
  212. package/dist/PluginsTab-Yz9HZqpp.js.map +1 -0
  213. package/dist/{ProgressbarWidget-CPeGR-Az.cjs → ProgressbarWidget-BUSOhcZ3.cjs} +2 -2
  214. package/dist/{ProgressbarWidget-CPeGR-Az.cjs.map → ProgressbarWidget-BUSOhcZ3.cjs.map} +1 -1
  215. package/dist/{ProgressbarWidget-CO6CEkxP.js → ProgressbarWidget-DJepvOip.js} +3 -3
  216. package/dist/{ProgressbarWidget-CO6CEkxP.js.map → ProgressbarWidget-DJepvOip.js.map} +1 -1
  217. package/dist/{RadiobuttonWidget-DrxUclws.js → RadiobuttonWidget-4e8ROIfg.js} +3 -3
  218. package/dist/{RadiobuttonWidget-DrxUclws.js.map → RadiobuttonWidget-4e8ROIfg.js.map} +1 -1
  219. package/dist/{RadiobuttonWidget-DucgkAYD.cjs → RadiobuttonWidget-D4Fka1eN.cjs} +2 -2
  220. package/dist/{RadiobuttonWidget-DucgkAYD.cjs.map → RadiobuttonWidget-D4Fka1eN.cjs.map} +1 -1
  221. package/dist/{RadiogroupWidget-DN9C38cg.js → RadiogroupWidget-CUucj6aT.js} +3 -3
  222. package/dist/{RadiogroupWidget-DN9C38cg.js.map → RadiogroupWidget-CUucj6aT.js.map} +1 -1
  223. package/dist/{RadiogroupWidget-C7oVFRf3.cjs → RadiogroupWidget-DU9G6qLq.cjs} +2 -2
  224. package/dist/{RadiogroupWidget-C7oVFRf3.cjs.map → RadiogroupWidget-DU9G6qLq.cjs.map} +1 -1
  225. package/dist/{RangebarWidget-5uQTfLMP.js → RangebarWidget-Bu4rqlrx.js} +3 -3
  226. package/dist/{RangebarWidget-5uQTfLMP.js.map → RangebarWidget-Bu4rqlrx.js.map} +1 -1
  227. package/dist/{RangebarWidget-Da9S3KMB.cjs → RangebarWidget-DlMJo2o3.cjs} +2 -2
  228. package/dist/{RangebarWidget-Da9S3KMB.cjs.map → RangebarWidget-DlMJo2o3.cjs.map} +1 -1
  229. package/dist/{RedisTab-Cyrr_g9k.js → RedisTab-C00rFmdl.js} +3 -3
  230. package/dist/{RedisTab-Cyrr_g9k.js.map → RedisTab-C00rFmdl.js.map} +1 -1
  231. package/dist/{RedisTab-BFTaPNRc.cjs → RedisTab-Dz4m_JfV.cjs} +2 -2
  232. package/dist/{RedisTab-BFTaPNRc.cjs.map → RedisTab-Dz4m_JfV.cjs.map} +1 -1
  233. package/dist/{RollupWidget-B0DCULnu.js → RollupWidget-ByLvEEau.js} +3 -3
  234. package/dist/{RollupWidget-B0DCULnu.js.map → RollupWidget-ByLvEEau.js.map} +1 -1
  235. package/dist/{RollupWidget-DK0eFASs.cjs → RollupWidget-D-Dx6Dkx.cjs} +2 -2
  236. package/dist/{RollupWidget-DK0eFASs.cjs.map → RollupWidget-D-Dx6Dkx.cjs.map} +1 -1
  237. package/dist/{RoutersTab-BAfpG8k3.js → RoutersTab-CEe4oS0x.js} +7 -7
  238. package/dist/{RoutersTab-BAfpG8k3.js.map → RoutersTab-CEe4oS0x.js.map} +1 -1
  239. package/dist/{RoutersTab-B8JIxjdI.cjs → RoutersTab-CyjPaVVb.cjs} +2 -2
  240. package/dist/{RoutersTab-B8JIxjdI.cjs.map → RoutersTab-CyjPaVVb.cjs.map} +1 -1
  241. package/dist/ScriptChooser-B83Pgq2H.cjs +2 -0
  242. package/dist/ScriptChooser-B83Pgq2H.cjs.map +1 -0
  243. package/dist/{ScriptChooser-ahp4Tu3O.js → ScriptChooser-CbVbI0x-.js} +55 -50
  244. package/dist/ScriptChooser-CbVbI0x-.js.map +1 -0
  245. package/dist/{ScrollwindowWidget-xM_R_Arq.cjs → ScrollwindowWidget-0UcfntpY.cjs} +2 -2
  246. package/dist/{ScrollwindowWidget-xM_R_Arq.cjs.map → ScrollwindowWidget-0UcfntpY.cjs.map} +1 -1
  247. package/dist/{ScrollwindowWidget-BOkZQgtf.js → ScrollwindowWidget-CXJ9QGN1.js} +4 -4
  248. package/dist/{ScrollwindowWidget-BOkZQgtf.js.map → ScrollwindowWidget-CXJ9QGN1.js.map} +1 -1
  249. package/dist/{SecretsTab-DoHYppoO.cjs → SecretsTab-B07A5MeK.cjs} +2 -2
  250. package/dist/{SecretsTab-DoHYppoO.cjs.map → SecretsTab-B07A5MeK.cjs.map} +1 -1
  251. package/dist/{SecretsTab-D5RxHYVp.js → SecretsTab-DFrxV8Q8.js} +8 -8
  252. package/dist/{SecretsTab-D5RxHYVp.js.map → SecretsTab-DFrxV8Q8.js.map} +1 -1
  253. package/dist/{SettingsTab-Dvnzqzdp.cjs → SettingsTab-CDaG6VS1.cjs} +2 -2
  254. package/dist/{SettingsTab-Dvnzqzdp.cjs.map → SettingsTab-CDaG6VS1.cjs.map} +1 -1
  255. package/dist/{SettingsTab-CKGQEwd_.js → SettingsTab-CpLxrjTc.js} +5 -5
  256. package/dist/{SettingsTab-CKGQEwd_.js.map → SettingsTab-CpLxrjTc.js.map} +1 -1
  257. package/dist/{SignalWidget-BWKgNMdV.cjs → SignalWidget-DhS8nGJu.cjs} +2 -2
  258. package/dist/{SignalWidget-BWKgNMdV.cjs.map → SignalWidget-DhS8nGJu.cjs.map} +1 -1
  259. package/dist/{SignalWidget-Cis0Xkea.js → SignalWidget-qvL2YZJA.js} +3 -3
  260. package/dist/{SignalWidget-Cis0Xkea.js.map → SignalWidget-qvL2YZJA.js.map} +1 -1
  261. package/dist/{SimpleTextDialog-D2mEDvGY.js → SimpleTextDialog--iSWgPgq.js} +7 -7
  262. package/dist/SimpleTextDialog--iSWgPgq.js.map +1 -0
  263. package/dist/{SimpleTextDialog-BCNn5FZh.cjs → SimpleTextDialog-tZ7qO1zq.cjs} +2 -2
  264. package/dist/SimpleTextDialog-tZ7qO1zq.cjs.map +1 -0
  265. package/dist/{SpacerWidget-_daU5QnM.cjs → SpacerWidget-CUrYZDLP.cjs} +2 -2
  266. package/dist/{SpacerWidget-_daU5QnM.cjs.map → SpacerWidget-CUrYZDLP.cjs.map} +1 -1
  267. package/dist/{SpacerWidget-CLcqC2Qk.js → SpacerWidget-CaWx41K7.js} +3 -3
  268. package/dist/{SpacerWidget-CLcqC2Qk.js.map → SpacerWidget-CaWx41K7.js.map} +1 -1
  269. package/dist/{SparklineWidget-qRnlPzJ_.cjs → SparklineWidget-BOnHnJOh.cjs} +2 -2
  270. package/dist/{SparklineWidget-qRnlPzJ_.cjs.map → SparklineWidget-BOnHnJOh.cjs.map} +1 -1
  271. package/dist/{SparklineWidget-CTp83eZ-.js → SparklineWidget-BkNSRypJ.js} +5 -5
  272. package/dist/{SparklineWidget-CTp83eZ-.js.map → SparklineWidget-BkNSRypJ.js.map} +1 -1
  273. package/dist/{TabbookWidget-C0Fvv-o5.cjs → TabbookWidget-BTvyYn7i.cjs} +2 -2
  274. package/dist/{TabbookWidget-C0Fvv-o5.cjs.map → TabbookWidget-BTvyYn7i.cjs.map} +1 -1
  275. package/dist/{TabbookWidget-uucd-zsX.js → TabbookWidget-MsrRG1vn.js} +3 -3
  276. package/dist/{TabbookWidget-uucd-zsX.js.map → TabbookWidget-MsrRG1vn.js.map} +1 -1
  277. package/dist/TargetPacketItemChooser-CmjEcxN3.cjs +2 -0
  278. package/dist/TargetPacketItemChooser-CmjEcxN3.cjs.map +1 -0
  279. package/dist/{TargetPacketItemChooser-CXpSx-eA.js → TargetPacketItemChooser-oSQHf8Ht.js} +158 -108
  280. package/dist/TargetPacketItemChooser-oSQHf8Ht.js.map +1 -0
  281. package/dist/{TargetsTab-CM4ABe5y.js → TargetsTab-B6tf2hKl.js} +7 -7
  282. package/dist/{TargetsTab-CM4ABe5y.js.map → TargetsTab-B6tf2hKl.js.map} +1 -1
  283. package/dist/{TargetsTab-Ixql3xzm.cjs → TargetsTab-DwFb3_1K.cjs} +2 -2
  284. package/dist/{TargetsTab-Ixql3xzm.cjs.map → TargetsTab-DwFb3_1K.cjs.map} +1 -1
  285. package/dist/{TextBoxDialog-DbD8P4Xc.cjs → TextBoxDialog-DXG7H7kQ.cjs} +2 -2
  286. package/dist/{TextBoxDialog-DbD8P4Xc.cjs.map → TextBoxDialog-DXG7H7kQ.cjs.map} +1 -1
  287. package/dist/{TextBoxDialog-CdFHdj5W.js → TextBoxDialog-Xs-gitZd.js} +2 -2
  288. package/dist/{TextBoxDialog-CdFHdj5W.js.map → TextBoxDialog-Xs-gitZd.js.map} +1 -1
  289. package/dist/{TextboxWidget-DrdMC0EB.cjs → TextboxWidget-CPmQEhMm.cjs} +2 -2
  290. package/dist/{TextboxWidget-DrdMC0EB.cjs.map → TextboxWidget-CPmQEhMm.cjs.map} +1 -1
  291. package/dist/{TextboxWidget-C2n38ti5.js → TextboxWidget-DbwpPVGB.js} +5 -5
  292. package/dist/{TextboxWidget-C2n38ti5.js.map → TextboxWidget-DbwpPVGB.js.map} +1 -1
  293. package/dist/{TextfieldWidget-VeOem1w3.cjs → TextfieldWidget-BzaNs7J4.cjs} +2 -2
  294. package/dist/{TextfieldWidget-VeOem1w3.cjs.map → TextfieldWidget-BzaNs7J4.cjs.map} +1 -1
  295. package/dist/{TextfieldWidget--HTv9ddk.js → TextfieldWidget-DzMlTMYW.js} +3 -3
  296. package/dist/{TextfieldWidget--HTv9ddk.js.map → TextfieldWidget-DzMlTMYW.js.map} +1 -1
  297. package/dist/{TimeWidget-CPNVZaUM.js → TimeWidget-BHybAfg8.js} +3 -3
  298. package/dist/{TimeWidget-CPNVZaUM.js.map → TimeWidget-BHybAfg8.js.map} +1 -1
  299. package/dist/{TimeWidget-C9ltUWFh.cjs → TimeWidget-DksEVe5c.cjs} +2 -2
  300. package/dist/{TimeWidget-C9ltUWFh.cjs.map → TimeWidget-DksEVe5c.cjs.map} +1 -1
  301. package/dist/{TitleWidget-IuUVZkLh.cjs → TitleWidget-C7_pj0lU.cjs} +2 -2
  302. package/dist/{TitleWidget-IuUVZkLh.cjs.map → TitleWidget-C7_pj0lU.cjs.map} +1 -1
  303. package/dist/{TitleWidget-Cp0cb6V8.js → TitleWidget-DL_sE5YE.js} +3 -3
  304. package/dist/{TitleWidget-Cp0cb6V8.js.map → TitleWidget-DL_sE5YE.js.map} +1 -1
  305. package/dist/{ToolsTab-DGjyBWkp.js → ToolsTab-CXoxIck8.js} +4 -4
  306. package/dist/{ToolsTab-DGjyBWkp.js.map → ToolsTab-CXoxIck8.js.map} +1 -1
  307. package/dist/{ToolsTab-Bgrj0eGr.cjs → ToolsTab-DTL8ujgd.cjs} +3 -3
  308. package/dist/{ToolsTab-Bgrj0eGr.cjs.map → ToolsTab-DTL8ujgd.cjs.map} +1 -1
  309. package/dist/TopBar-B8LJESUg.js +324 -0
  310. package/dist/TopBar-B8LJESUg.js.map +1 -0
  311. package/dist/TopBar-CGSMcenK.cjs +2 -0
  312. package/dist/TopBar-CGSMcenK.cjs.map +1 -0
  313. package/dist/{UpgradeToEnterpriseDialog-C2Ggr_Xd.js → UpgradeToEnterpriseDialog-CqnhQ8So.js} +3 -3
  314. package/dist/{UpgradeToEnterpriseDialog-C2Ggr_Xd.js.map → UpgradeToEnterpriseDialog-CqnhQ8So.js.map} +1 -1
  315. package/dist/{UpgradeToEnterpriseDialog-DtckZO3_.cjs → UpgradeToEnterpriseDialog-Dv_egyCM.cjs} +2 -2
  316. package/dist/{UpgradeToEnterpriseDialog-DtckZO3_.cjs.map → UpgradeToEnterpriseDialog-Dv_egyCM.cjs.map} +1 -1
  317. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-JEZNdnan.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C3WTK6F-.js} +15036 -14930
  318. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C3WTK6F-.js.map +1 -0
  319. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-RGlL9jUF.cjs +1498 -0
  320. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-RGlL9jUF.cjs.map +1 -0
  321. package/dist/VWidget-CTcOKw09.cjs +2 -0
  322. package/dist/VWidget-CTcOKw09.cjs.map +1 -0
  323. package/dist/{VWidget-DQGJRgAk.js → VWidget-D06LY-Yc.js} +7 -7
  324. package/dist/VWidget-D06LY-Yc.js.map +1 -0
  325. package/dist/{ValueWidget-BmXm9dYt.cjs → ValueWidget-C2qn7lVq.cjs} +2 -2
  326. package/dist/{ValueWidget-BmXm9dYt.cjs.map → ValueWidget-C2qn7lVq.cjs.map} +1 -1
  327. package/dist/{ValueWidget-Bk1RFjks.js → ValueWidget-CGT0LV_n.js} +5 -5
  328. package/dist/{ValueWidget-Bk1RFjks.js.map → ValueWidget-CGT0LV_n.js.map} +1 -1
  329. package/dist/{ValuelimitsbarWidget-C0HIBYh2.js → ValuelimitsbarWidget-CmpyPO-1.js} +5 -5
  330. package/dist/{ValuelimitsbarWidget-C0HIBYh2.js.map → ValuelimitsbarWidget-CmpyPO-1.js.map} +1 -1
  331. package/dist/{ValuelimitsbarWidget-PjCpjhsr.cjs → ValuelimitsbarWidget-_lEKCmQl.cjs} +2 -2
  332. package/dist/{ValuelimitsbarWidget-PjCpjhsr.cjs.map → ValuelimitsbarWidget-_lEKCmQl.cjs.map} +1 -1
  333. package/dist/{ValuelimitscolumnWidget-BGiDDUI_.cjs → ValuelimitscolumnWidget-0urjo-hR.cjs} +2 -2
  334. package/dist/{ValuelimitscolumnWidget-BGiDDUI_.cjs.map → ValuelimitscolumnWidget-0urjo-hR.cjs.map} +1 -1
  335. package/dist/{ValuelimitscolumnWidget-BTT90uyX.js → ValuelimitscolumnWidget-jzxrQd-f.js} +5 -5
  336. package/dist/{ValuelimitscolumnWidget-BTT90uyX.js.map → ValuelimitscolumnWidget-jzxrQd-f.js.map} +1 -1
  337. package/dist/{ValuerangebarWidget-CcQw_XK9.js → ValuerangebarWidget-C8ckuAeh.js} +5 -5
  338. package/dist/{ValuerangebarWidget-CcQw_XK9.js.map → ValuerangebarWidget-C8ckuAeh.js.map} +1 -1
  339. package/dist/{ValuerangebarWidget-ClmX-qH_.cjs → ValuerangebarWidget-lXHRe4YZ.cjs} +2 -2
  340. package/dist/{ValuerangebarWidget-ClmX-qH_.cjs.map → ValuerangebarWidget-lXHRe4YZ.cjs.map} +1 -1
  341. package/dist/{VerticalWidget-BeDWsvP6.cjs → VerticalWidget-XBSrdA2c.cjs} +2 -2
  342. package/dist/{VerticalWidget-BeDWsvP6.cjs.map → VerticalWidget-XBSrdA2c.cjs.map} +1 -1
  343. package/dist/{VerticalWidget-CNtFQv3R.js → VerticalWidget-qN82km_m.js} +3 -3
  344. package/dist/{VerticalWidget-CNtFQv3R.js.map → VerticalWidget-qN82km_m.js.map} +1 -1
  345. package/dist/{VerticalboxWidget-DlokKDBD.cjs → VerticalboxWidget-1FHkgmf0.cjs} +2 -2
  346. package/dist/{VerticalboxWidget-DlokKDBD.cjs.map → VerticalboxWidget-1FHkgmf0.cjs.map} +1 -1
  347. package/dist/{VerticalboxWidget-Yxmz1SnU.js → VerticalboxWidget-CiJZDlHJ.js} +6 -6
  348. package/dist/{VerticalboxWidget-Yxmz1SnU.js.map → VerticalboxWidget-CiJZDlHJ.js.map} +1 -1
  349. package/dist/{Widget-HC1_yuQg.cjs → Widget-BwvnfXRa.cjs} +2 -2
  350. package/dist/{Widget-HC1_yuQg.cjs.map → Widget-BwvnfXRa.cjs.map} +1 -1
  351. package/dist/{Widget-LsyjS7ZS.js → Widget-DXvVFSH5.js} +2 -2
  352. package/dist/{Widget-LsyjS7ZS.js.map → Widget-DXvVFSH5.js.map} +1 -1
  353. package/dist/cmdUtilities--4ZqS2At.js +44 -0
  354. package/dist/{cmdUtilities-BMsSNjt_.js.map → cmdUtilities--4ZqS2At.js.map} +1 -1
  355. package/dist/{cmdUtilities-ChD8v8-7.cjs → cmdUtilities-N30xDV6q.cjs} +2 -2
  356. package/dist/{cmdUtilities-ChD8v8-7.cjs.map → cmdUtilities-N30xDV6q.cjs.map} +1 -1
  357. package/dist/components.cjs +2 -2
  358. package/dist/components.cjs.map +1 -1
  359. package/dist/components.js +93 -93
  360. package/dist/components.js.map +1 -1
  361. package/dist/composables.cjs +2 -0
  362. package/dist/composables.cjs.map +1 -0
  363. package/dist/composables.js +5 -0
  364. package/dist/composables.js.map +1 -0
  365. package/dist/icons.cjs +1 -1
  366. package/dist/icons.js +1 -1
  367. package/dist/{index-DS1ACWVr.js → index-3k1IXN1T.js} +244 -226
  368. package/dist/index-3k1IXN1T.js.map +1 -0
  369. package/dist/index-DlWUR7vt.cjs +7 -0
  370. package/dist/index-DlWUR7vt.cjs.map +1 -0
  371. package/dist/plugins.cjs +2 -2
  372. package/dist/plugins.cjs.map +1 -1
  373. package/dist/plugins.js +87 -85
  374. package/dist/plugins.js.map +1 -1
  375. package/dist/purify.es-BuxjWxA2.js +554 -0
  376. package/dist/purify.es-BuxjWxA2.js.map +1 -0
  377. package/dist/purify.es-d7tb6jjJ.cjs +3 -0
  378. package/dist/purify.es-d7tb6jjJ.cjs.map +1 -0
  379. package/dist/{settings-DCxXjkio.js → settings-DRNFiuf0.js} +2 -2
  380. package/dist/{settings-DCxXjkio.js.map → settings-DRNFiuf0.js.map} +1 -1
  381. package/dist/{settings-zRw8EylV.cjs → settings-s8NuYKD-.cjs} +2 -2
  382. package/dist/{settings-zRw8EylV.cjs.map → settings-s8NuYKD-.cjs.map} +1 -1
  383. package/dist/tools/admin.cjs +5 -5
  384. package/dist/tools/admin.cjs.map +1 -1
  385. package/dist/tools/admin.js +605 -849
  386. package/dist/tools/admin.js.map +1 -1
  387. package/dist/tools/base.cjs +1 -1
  388. package/dist/tools/base.js +6 -6
  389. package/dist/tools/calendar.cjs +1 -1
  390. package/dist/tools/calendar.js +1 -1
  391. package/dist/tools/scriptrunner.cjs +9 -9
  392. package/dist/tools/scriptrunner.cjs.map +1 -1
  393. package/dist/tools/scriptrunner.js +925 -894
  394. package/dist/tools/scriptrunner.js.map +1 -1
  395. package/dist/useContainerHeight-BAw05dIa.js +11 -0
  396. package/dist/useContainerHeight-BAw05dIa.js.map +1 -0
  397. package/dist/useContainerHeight-BEd4f2Lr.cjs +2 -0
  398. package/dist/useContainerHeight-BEd4f2Lr.cjs.map +1 -0
  399. package/dist/util.cjs +1 -1
  400. package/dist/util.js +1 -1
  401. package/dist/vue-common.css +1 -1
  402. package/dist/widgets.cjs +1 -1
  403. package/dist/widgets.js +64 -64
  404. package/package.json +23 -25
  405. package/dist/CriticalCmdDialog-CnNlsHRX.js.map +0 -1
  406. package/dist/CriticalCmdDialog-niBmkudw.cjs.map +0 -1
  407. package/dist/CustomIcon-Bop2mEnu.cjs +0 -2
  408. package/dist/DetailsDialog-BNCS3QAe.js.map +0 -1
  409. package/dist/DetailsDialog-DgN9Jcio.cjs +0 -2
  410. package/dist/DetailsDialog-DgN9Jcio.cjs.map +0 -1
  411. package/dist/EventListDialog-B8rnN9Zi.cjs +0 -2
  412. package/dist/EventListDialog-B8rnN9Zi.cjs.map +0 -1
  413. package/dist/EventListDialog-C2pwmD0d.js.map +0 -1
  414. package/dist/Graph-BliBYJxD.js.map +0 -1
  415. package/dist/Graph-DxC2MPYf.cjs +0 -2
  416. package/dist/Graph-DxC2MPYf.cjs.map +0 -1
  417. package/dist/Layout-DvBekli8.cjs +0 -2
  418. package/dist/Openc3Screen-CD3C_EUo.cjs +0 -6
  419. package/dist/Openc3Screen-CD3C_EUo.cjs.map +0 -1
  420. package/dist/Openc3Screen-Cqm5Xtd-.js.map +0 -1
  421. package/dist/PluginsTab-C7PH2Wym.js.map +0 -1
  422. package/dist/PluginsTab-xzPlEMYj.cjs +0 -6
  423. package/dist/PluginsTab-xzPlEMYj.cjs.map +0 -1
  424. package/dist/ScriptChooser-ahp4Tu3O.js.map +0 -1
  425. package/dist/ScriptChooser-ma6P0WuM.cjs +0 -2
  426. package/dist/ScriptChooser-ma6P0WuM.cjs.map +0 -1
  427. package/dist/SimpleTextDialog-BCNn5FZh.cjs.map +0 -1
  428. package/dist/SimpleTextDialog-D2mEDvGY.js.map +0 -1
  429. package/dist/TargetPacketItemChooser-CAl-fNql.cjs +0 -2
  430. package/dist/TargetPacketItemChooser-CAl-fNql.cjs.map +0 -1
  431. package/dist/TargetPacketItemChooser-CXpSx-eA.js.map +0 -1
  432. package/dist/TopBar-B48yYbtR.js +0 -296
  433. package/dist/TopBar-B48yYbtR.js.map +0 -1
  434. package/dist/TopBar-DLz-U85G.cjs +0 -2
  435. package/dist/TopBar-DLz-U85G.cjs.map +0 -1
  436. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs +0 -1498
  437. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs.map +0 -1
  438. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-JEZNdnan.js.map +0 -1
  439. package/dist/VWidget-Cf9MXbCl.cjs +0 -2
  440. package/dist/VWidget-Cf9MXbCl.cjs.map +0 -1
  441. package/dist/VWidget-DQGJRgAk.js.map +0 -1
  442. package/dist/cmdUtilities-BMsSNjt_.js +0 -46
  443. package/dist/index-DS1ACWVr.js.map +0 -1
  444. package/dist/index-Nd4O4kac.cjs +0 -7
  445. package/dist/index-Nd4O4kac.cjs.map +0 -1
  446. package/dist/purify.es-GHnZTJ9O.cjs +0 -3
  447. package/dist/purify.es-GHnZTJ9O.cjs.map +0 -1
  448. package/dist/purify.es-eYFoHPwR.js +0 -529
  449. package/dist/purify.es-eYFoHPwR.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"EventListDialog-C2pwmD0d.js","sources":["../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/add.js","../src/tools/calendar/CreateDialog.js","../src/tools/calendar/ActivityCreateDialog.vue","../src/tools/calendar/ColorSelectForm.vue","../src/tools/calendar/DeleteItem.js","../src/tools/calendar/MetadataInputForm.vue","../src/tools/calendar/MetadataCreateDialog.vue","../src/tools/calendar/NoteCreateDialog.vue","../src/tools/calendar/EventListDialog.vue"],"sourcesContent":["import { addDays } from \"./addDays.js\";\nimport { addMonths } from \"./addMonths.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link add} function options.\n */\n\n/**\n * @name add\n * @category Common Helpers\n * @summary Add the specified years, months, weeks, days, hours, minutes, and seconds to the given date.\n *\n * @description\n * Add the specified years, months, weeks, days, hours, minutes, and seconds to the given date.\n *\n * @typeParam DateType - The `Date` type the function operates on. Gets inferred from passed arguments. Allows using extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param duration - The object with years, months, weeks, days, hours, minutes, and seconds to be added.\n * @param options - An object with options\n *\n * @returns The new date with the seconds added\n *\n * @example\n * // Add the following duration to 1 September 2014, 10:19:50\n * const result = add(new Date(2014, 8, 1, 10, 19, 50), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30,\n * })\n * //=> Thu Jun 15 2017 15:29:20\n */\nexport function add(date, duration, options) {\n const {\n years = 0,\n months = 0,\n weeks = 0,\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n } = duration;\n\n // Add years and months\n const _date = toDate(date, options?.in);\n const dateWithMonths =\n months || years ? addMonths(_date, months + years * 12) : _date;\n\n // Add weeks and days\n const dateWithDays =\n days || weeks ? addDays(dateWithMonths, days + weeks * 7) : dateWithMonths;\n\n // Add days, hours, minutes, and seconds\n const minutesToAdd = minutes + hours * 60;\n const secondsToAdd = seconds + minutesToAdd * 60;\n const msToAdd = secondsToAdd * 1000;\n\n return constructFrom(options?.in || date, +dateWithDays + msToAdd);\n}\n\n// Fallback for modularized imports:\nexport default add;\n","/*\n# Copyright 2023 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { add, format, parse } from 'date-fns'\n\nexport default {\n props: {\n date: {\n type: String,\n },\n time: {\n type: String,\n },\n timeZone: {\n type: String,\n },\n },\n data() {\n return {\n startDate: '',\n startTime: '',\n endDate: '',\n endTime: '',\n }\n },\n methods: {\n calcStartDateTime: function () {\n if (this.date) {\n this.startDate = this.date\n this.endDate = this.date\n } else {\n this.startDate = format(new Date(), 'yyyy-MM-dd')\n this.endDate = format(new Date(), 'yyyy-MM-dd')\n }\n let ms = 1000 * 60 * 30 // 30 min\n let start = null\n if (this.time) {\n start = parse(this.time, 'HH:mm:ss', new Date())\n // Round down so the start is the beginning of the time box where they clicked\n start = new Date(Math.floor(start.getTime() / ms) * ms)\n } else {\n // Round up so the start is in the future\n start = new Date(Math.ceil(new Date().getTime() / ms) * ms)\n }\n this.startTime = format(start, 'HH:mm:ss')\n this.endTime = format(add(start, { minutes: 30 }), 'HH:mm:ss')\n },\n },\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-if=\"activity\">Edit Activity</span>\n <span v-else>Create Activity</span>\n <v-spacer />\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-note-icon\"\n @click=\"clearHandler\"\n />\n </v-toolbar>\n <v-stepper\n v-model=\"dialogStep\"\n :items=\"['Activity Times', 'Activity Type']\"\n >\n <template v-if=\"dialogStep === 1\" #actions>\n <v-row class=\"ma-0 px-6 pb-4\">\n <v-spacer />\n <v-btn\n color=\"primary\"\n :disabled=\"validationError\"\n @click=\"dialogStep = 2\"\n >\n Next\n </v-btn>\n </v-row>\n </template>\n\n <template v-if=\"dialogStep === 2\" #actions>\n <v-row class=\"ma-0 px-6 pb-4\">\n <v-btn variant=\"text\" @click=\"() => (dialogStep -= 1)\">\n Previous\n </v-btn>\n <v-spacer />\n <v-btn variant=\"outlined\" class=\"mr-4\" @click=\"clearHandler\">\n Cancel\n </v-btn>\n <v-btn\n type=\"submit\"\n color=\"primary\"\n :disabled=\"!!error\"\n @click.prevent=\"submitHandler\"\n >\n Ok\n </v-btn>\n </v-row>\n </template>\n\n <template #item.1>\n <v-card-text>\n <div class=\"pr-2\">\n <v-select\n v-model=\"timeline\"\n density=\"compact\"\n hide-details\n variant=\"outlined\"\n :items=\"timelineNames\"\n label=\"Timeline\"\n data-test=\"activity-select-timeline\"\n class=\"pb-2\"\n >\n </v-select>\n <v-text-field\n v-model=\"customTitle\"\n type=\"text\"\n label=\"Custom Title\"\n class=\"pb-2\"\n data-test=\"activity-custom-title\"\n hide-details\n variant=\"outlined\"\n density=\"compact\"\n />\n <v-textarea\n v-model=\"notes\"\n label=\"Notes\"\n class=\"py-2 mb-2\"\n data-test=\"activity-notes\"\n hide-details\n variant=\"outlined\"\n density=\"compact\"\n rows=\"3\"\n />\n <v-row dense>\n <v-text-field\n v-model=\"startDate\"\n type=\"date\"\n label=\"Start Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"activity-start-date\"\n />\n <v-text-field\n v-model=\"startTime\"\n type=\"time\"\n step=\"1\"\n label=\"Start Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"activity-start-time\"\n />\n </v-row>\n <v-row dense>\n <v-text-field\n v-model=\"endDate\"\n type=\"date\"\n label=\"End Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"activity-end-date\"\n />\n <v-text-field\n v-model=\"endTime\"\n type=\"time\"\n step=\"1\"\n label=\"End Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"activity-end-time\"\n />\n </v-row>\n <v-row class=\"pl-3\">\n <v-checkbox\n v-model=\"recurring\"\n :disabled=\"!!activity\"\n label=\"Recurring\"\n hide-details\n data-test=\"recurring\"\n >\n </v-checkbox>\n </v-row>\n <v-row v-if=\"recurring\">\n <v-col>\n <div class=\"repeat\">Repeat every</div>\n </v-col>\n <v-col>\n <v-text-field\n v-model=\"frequency\"\n :disabled=\"!!activity\"\n density=\"compact\"\n variant=\"outlined\"\n single-line\n hide-details\n data-test=\"recurring-frequency\"\n /></v-col>\n <v-col>\n <v-select\n v-model=\"timeSpan\"\n :disabled=\"!!activity\"\n :items=\"timeSpans\"\n style=\"primary\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n data-test=\"recurring-span\"\n />\n </v-col>\n </v-row>\n <v-row v-if=\"recurring\" style=\"padding-bottom: 10px\">\n <v-col>\n <div class=\"repeat\">Ending</div>\n </v-col>\n <v-col>\n <v-text-field\n v-model=\"recurringEndDate\"\n type=\"date\"\n label=\"End Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n :disabled=\"!!activity\"\n data-test=\"recurring-end-date\"\n /></v-col>\n <v-col>\n <v-text-field\n v-model=\"recurringEndTime\"\n type=\"time\"\n step=\"1\"\n label=\"End Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n :disabled=\"!!activity\"\n data-test=\"recurring-end-time\"\n /></v-col>\n </v-row>\n <v-row>\n <span\n v-show=\"timeError\"\n class=\"ma-2 text-red\"\n v-text=\"timeError\"\n />\n </v-row>\n </div>\n </v-card-text>\n </template>\n\n <template #item.2>\n <v-card-text>\n <div class=\"pr-2\">\n <v-select\n v-model=\"kind\"\n density=\"compact\"\n hide-details\n variant=\"outlined\"\n :items=\"types\"\n label=\"Activity Type\"\n data-test=\"activity-select-type\"\n class=\"pb-2\"\n >\n </v-select>\n <div v-if=\"kind === 'COMMAND'\">\n <v-textarea\n v-model=\"activityData\"\n label=\"Command Input\"\n rows=\"1\"\n readonly\n auto-grow\n data-test=\"activity-cmd\"\n @click:control=\"editItem()\"\n />\n </div>\n <div v-else-if=\"kind === 'SCRIPT'\" class=\"ma-3\">\n <script-chooser @file=\"fileHandler\" />\n <environment-chooser v-model=\"activityEnvironment\" />\n </div>\n <div v-else>\n <span class=\"ma-2\"> No required input </span>\n </div>\n <v-row v-show=\"typeError\" class=\"mt-2\">\n <span class=\"ma-2 text-red\" v-text=\"typeError\" />\n </v-row>\n </div>\n </v-card-text>\n </template>\n </v-stepper>\n </v-card>\n </v-dialog>\n\n <!-- Command Editor Dialog -->\n <v-dialog\n v-model=\"showCommandDialog\"\n max-width=\"1200\"\n persistent\n scrollable\n >\n <v-card>\n <v-card-title class=\"d-flex align-center\">\n <span>{{ dialogTitle }}</span>\n <v-spacer />\n <v-btn icon=\"mdi-close\" variant=\"text\" @click=\"closeCommandDialog\" />\n </v-card-title>\n <v-card-text class=\"pa-0\">\n <div v-if=\"dialogError\" class=\"error-message\">\n <v-icon class=\"mr-2\" color=\"error\">mdi-alert-circle</v-icon>\n <span class=\"flex-grow-1\">{{ dialogError }}</span>\n <v-btn\n icon=\"mdi-close\"\n size=\"small\"\n variant=\"text\"\n color=\"error\"\n class=\"ml-2\"\n @click=\"clearDialogError\"\n />\n </div>\n <command-editor\n ref=\"commandEditor\"\n :send-disabled=\"false\"\n :states-in-hex=\"statesInHex\"\n :show-ignored-params=\"showIgnoredParams\"\n :cmd-raw=\"cmdRaw\"\n :cmd-string=\"dialogCmdString\"\n :show-command-button=\"false\"\n @build-cmd=\"updateCommand($event)\"\n />\n </v-card-text>\n <v-card-actions>\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"closeCommandDialog\"> Cancel </v-btn>\n <v-btn color=\"primary\" variant=\"flat\" @click=\"updateCommand()\">\n Update Command\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { EnvironmentChooser, ScriptChooser, CommandEditor } from '@/components'\nimport { TimeFilters } from '@/util'\nimport CreateDialog from './CreateDialog'\n\nexport default {\n components: {\n EnvironmentChooser,\n ScriptChooser,\n CommandEditor,\n },\n mixins: [CreateDialog, TimeFilters],\n props: {\n modelValue: Boolean,\n timelines: {\n type: Array,\n required: true,\n },\n activity: {\n type: Object,\n default: null,\n },\n },\n data() {\n return {\n timeline: null,\n dialogStep: 1,\n kind: '',\n types: ['COMMAND', 'SCRIPT', 'RESERVE'],\n activityData: '',\n activityEnvironment: [],\n customTitle: '',\n notes: '',\n rules: {\n required: (value) => !!value || 'Required',\n },\n recurring: false,\n recurringEndDate: null,\n recurringEndTime: null,\n frequency: 90,\n timeSpan: 'minutes',\n timeSpans: ['minutes', 'hours', 'days'],\n showCommandDialog: false,\n dialogTitle: 'Add Command',\n dialogError: '',\n dialogCmdString: null,\n }\n },\n computed: {\n timeError: function () {\n const now = new Date()\n const start = Date.parse(`${this.startDate}T${this.startTime}`)\n const end = Date.parse(`${this.endDate}T${this.endTime}`)\n if (start === end) {\n return 'Invalid start, end time. Activity must have different start and end times.'\n }\n if (now > start) {\n return 'Invalid start time. Activity must be in the future.'\n }\n if (start > end) {\n return 'Invalid start time. Activity start before end.'\n }\n return null\n },\n typeError: function () {\n if (!this.timeline) {\n return 'Activity must have a timeline selected.'\n }\n if (this.kind !== 'RESERVE' && !this.activityData) {\n return 'No data is selected or inputted'\n }\n return null\n },\n timelineNames: function () {\n return this.timelines.map((timeline) => {\n return timeline.name\n })\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n validationError: function () {\n return !!this.timeError || !this.timeline\n },\n },\n mounted: function () {\n this.updateValues()\n },\n methods: {\n changeKind: function (inputKind) {\n if (inputKind === this.kind) {\n return\n }\n this.kind = inputKind\n this.activityData = ''\n },\n fileHandler: function (event) {\n this.activityData = event\n },\n updateValues: function () {\n this.dialogStep = 1\n if (this.activity) {\n this.timeline = this.activity.name\n const sDate = new Date(this.activity.start * 1000)\n const eDate = new Date(this.activity.stop * 1000)\n this.startDate = this.formatDate(sDate, this.timeZone)\n this.startTime = this.formatTimeHMS(sDate, this.timeZone)\n this.endDate = this.formatDate(eDate, this.timeZone)\n this.endTime = this.formatTimeHMS(eDate, this.timeZone)\n this.kind = this.activity.kind.toUpperCase()\n this.activityData = this.activity.data[this.activity.kind]\n this.activityEnvironment = this.activity.data.environment\n this.customTitle = this.activity.data.customTitle || ''\n this.notes = this.activity.data.notes || ''\n if (this.activity.recurring?.uuid) {\n this.recurring = true\n const rDate = new Date(this.activity.recurring.end * 1000)\n this.recurringEndDate = this.formatDate(rDate, this.timeZone)\n this.recurringEndTime = this.formatTimeHMS(rDate, this.timeZone)\n this.frequency = this.activity.recurring.frequency\n this.timeSpan = this.activity.recurring.span\n }\n } else {\n this.calcStartDateTime()\n this.recurringEndDate = this.startDate\n this.recurringEndTime = this.startTime\n this.kind = ''\n this.activityData = ''\n this.activityEnvironment = []\n this.customTitle = ''\n this.notes = ''\n this.timeline = this.timelineNames[0]\n }\n },\n clearHandler: function () {\n this.show = !this.show\n },\n submitHandler() {\n // Call the api to create a new activity to add to the activities array\n let start = null\n let stop = null // API takes stop instead of end\n let recurringEnd = null\n if (this.timeZone === 'local') {\n start = new Date(this.startDate + ' ' + this.startTime).toISOString()\n stop = new Date(this.endDate + ' ' + this.endTime).toISOString()\n if (this.recurring) {\n recurringEnd = new Date(\n this.recurringEndDate + ' ' + this.recurringEndTime,\n ).toISOString()\n }\n } else {\n start = new Date(\n this.startDate + ' ' + this.startTime + 'Z',\n ).toISOString()\n stop = new Date(this.endDate + ' ' + this.endTime + 'Z').toISOString()\n if (this.recurring) {\n recurringEnd = new Date(\n this.recurringEndDate + ' ' + this.recurringEndTime + 'Z',\n ).toISOString()\n }\n }\n const kind = this.kind.toLowerCase()\n let data = {\n environment: this.activityEnvironment,\n customTitle: this.customTitle,\n notes: this.notes,\n }\n data[kind] = this.activityData\n let recurring = {}\n if (this.recurring) {\n recurring = {\n frequency: this.frequency,\n span: this.timeSpan,\n end: recurringEnd,\n }\n }\n if (this.activity) {\n Api.put(\n `/openc3-api/timeline/${this.activity.name}/activity/${this.activity.start}`,\n {\n data: { start, stop, kind, data, recurring },\n },\n )\n .then((response) => {\n const activityTime = this.formatSeconds(\n new Date(response.data.start * 1000),\n )\n this.$notify.normal({\n title: 'Updated Activity',\n body: `${activityTime} (${response.data.start}) on timeline: ${response.data.name}`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n .catch((error) => {\n this.show = !this.show\n })\n } else {\n Api.post(`/openc3-api/timeline/${this.timeline}/activities`, {\n data: { start, stop, kind, data, recurring },\n })\n .then((response) => {\n const activityTime = this.formatSeconds(\n new Date(response.data.start * 1000),\n )\n this.$notify.normal({\n title: 'Created Activity',\n body: `${activityTime} (${response.data.start}) on timeline: ${response.data.name}`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n .catch((error) => {\n this.show = !this.show\n })\n }\n // We don't do the $emit or set show here because it has to be in the callback\n this.clearHandler()\n },\n editItem: function () {\n // Set up dialog for editing\n this.dialogTitle = 'Edit Command'\n this.dialogCmdString = this.activityData\n this.showCommandDialog = true\n },\n closeCommandDialog: function () {\n this.showCommandDialog = false\n this.dialogCmdString = null\n this.dialogError = ''\n },\n clearDialogError: function () {\n this.dialogError = ''\n },\n updateCommand: function () {\n let commandString = ''\n try {\n commandString = this.$refs.commandEditor.getCmdString()\n } catch (error) {\n this.dialogError = error.message || 'Please fix command parameters'\n return\n }\n this.activityData = commandString\n this.showCommandDialog = false\n },\n },\n}\n</script>\n\n<style scoped>\n.repeat {\n padding-top: 10px;\n text-align: right;\n}\n\n.v-stepper--vertical .v-stepper__content {\n width: auto;\n margin: 0px 0px 0px 36px;\n padding: 0px;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-select label=\"Color\" :items=\"swatches\" v-model=\"color\">\n <template v-slot:prepend-inner>\n <v-icon :color=\"color\"> mdi-square </v-icon>\n </template>\n <template v-slot:item=\"{ props, item }\">\n <v-list-item v-bind=\"props\" :value=\"item.raw\">\n <template v-slot:prepend>\n <v-icon :color=\"item.raw\"> mdi-square </v-icon>\n </template>\n </v-list-item>\n </template>\n </v-select>\n </div>\n</template>\n\n<script>\nexport default {\n components: {},\n props: {\n modelValue: {\n type: String,\n required: true,\n },\n },\n computed: {\n color: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n swatches: function () {\n return [\n '#005a8f',\n '#003784',\n '#8F3400',\n '#df1368',\n '#ff5252',\n '#df323b',\n '#9f0010',\n '#2d9437',\n '#004700',\n '#db7200',\n '#802700',\n '#0f2941',\n ]\n },\n },\n methods: {},\n}\n</script>\n","/*\n# Copyright 2023 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n methods: {\n deleteItem(item) {\n let start = null\n let api = ''\n switch (item.type.toLowerCase()) {\n case 'activity':\n api = 'activity'\n start = item.activity.start\n break\n case 'metadata':\n api = 'metadata'\n start = item.metadata.start\n break\n case 'note':\n api = 'notes'\n start = item.note.start\n break\n }\n this.$dialog\n .confirm(\n `Are you sure you want to remove ${item.typeStr} at ${item.startStr}`,\n {\n okText: 'Delete',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n return Api.delete(`/openc3-api/${api}/${start}`)\n })\n .then(() => {\n this.$emit('delete', item)\n this.$notify.normal({\n title: `Deleted ${item.typeStr}`,\n body: `Deleted ${item.typeStr} at ${item.startStr}`,\n })\n })\n .catch(() => {})\n },\n },\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <span> Add metadata key value(s)</span>\n <v-table density=\"compact\">\n <tbody>\n <tr>\n <th scope=\"col\" class=\"text-left\">Key</th>\n <th scope=\"col\" class=\"text-left\">Value</th>\n <th scope=\"col\" class=\"text-right\" width=\"52px\">\n <v-btn\n icon=\"mdi-plus\"\n variant=\"text\"\n data-test=\"new-metadata-icon\"\n @click=\"newMetadata\"\n />\n </th>\n </tr>\n <tr v-for=\"(meta, i) in metadata\" :key=\"`tr-${i}`\">\n <td>\n <v-text-field\n v-model=\"meta.key\"\n density=\"compact\"\n type=\"text\"\n hide-details\n :data-test=\"`key-${i}`\"\n />\n </td>\n <td>\n <v-text-field\n v-model=\"meta.value\"\n density=\"compact\"\n type=\"text\"\n hide-details\n :data-test=\"`value-${i}`\"\n />\n </td>\n <td>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n :data-test=\"`delete-metadata-icon-${i}`\"\n @click=\"rm(i)\"\n />\n </td>\n </tr>\n </tbody>\n </v-table>\n </div>\n</template>\n\n<script>\nexport default {\n components: {},\n props: {\n modelValue: {\n type: Array,\n required: true,\n },\n },\n data() {\n return {}\n },\n computed: {\n metadata: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n methods: {\n newMetadata: function () {\n this.metadata.push({\n key: '',\n value: '',\n })\n },\n rm: function (index) {\n this.metadata.splice(index, 1)\n },\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-dialog v-model=\"show\" persistent width=\"600\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-if=\"metadata\">Update Metadata</span>\n <span v-else>Create Metadata</span>\n <v-spacer />\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-metadata-icon\"\n @click=\"clearHandler\"\n />\n </v-toolbar>\n <v-stepper\n v-model=\"dialogStep\"\n editable\n :items=\"['Metadata Times', 'Metadata Input']\"\n >\n <template v-if=\"dialogStep === 2\" #actions>\n <v-row class=\"ma-0 px-6 pb-4\">\n <v-btn variant=\"text\" @click=\"() => (dialogStep -= 1)\">\n Previous\n </v-btn>\n <v-spacer />\n <v-btn variant=\"outlined\" class=\"mr-4\" @click=\"clearHandler\">\n Cancel\n </v-btn>\n <v-btn\n type=\"submit\"\n color=\"primary\"\n :disabled=\"!!error\"\n @click.prevent=\"submitHandler\"\n >\n Ok\n </v-btn>\n </v-row>\n </template>\n\n <template #item.1>\n <v-card-text>\n <div class=\"pa-2\">\n <color-select-form v-model=\"color\" />\n <v-row dense>\n <v-text-field\n v-model=\"startDate\"\n type=\"date\"\n label=\"Start Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"metadata-start-date\"\n />\n <v-text-field\n v-model=\"startTime\"\n type=\"time\"\n step=\"1\"\n label=\"Start Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"metadata-start-time\"\n />\n </v-row>\n </div>\n </v-card-text>\n </template>\n\n <template #item.2>\n <v-card-text>\n <div class=\"pa-2\">\n <div style=\"min-height: 200px\">\n <metadata-input-form v-model=\"metadataVals\" />\n </div>\n <v-row v-show=\"typeError\">\n <span class=\"ma-2 text-red\" v-text=\"typeError\" />\n </v-row>\n </div>\n </v-card-text>\n </template>\n </v-stepper>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\nimport ColorSelectForm from './ColorSelectForm.vue'\nimport CreateDialog from './CreateDialog'\nimport MetadataInputForm from './MetadataInputForm.vue'\n\nexport default {\n components: {\n ColorSelectForm,\n MetadataInputForm,\n },\n mixins: [CreateDialog, TimeFilters],\n props: {\n modelValue: Boolean,\n metadata: {\n type: Object,\n default: null,\n },\n },\n data() {\n return {\n dialogStep: 1,\n color: '#003784',\n metadataVals: [],\n rules: {\n required: (value) => !!value || 'Required',\n },\n }\n },\n computed: {\n typeError: function () {\n if (!this.color) {\n return 'A color is required.'\n }\n if (this.metadataVals.length < 1) {\n return 'Please enter a value in the metadata table.'\n }\n const emptyKeyValue = this.metadataVals.find(\n (meta) => meta.key === '' || meta.value === '',\n )\n if (emptyKeyValue) {\n return 'Missing or empty key, value in the metadata table.'\n }\n return null\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted: function () {\n this.updateValues()\n },\n methods: {\n updateValues: function () {\n this.dialogStep = 1\n if (this.metadata) {\n const sDate = new Date(this.metadata.start * 1000)\n this.startDate = this.formatDate(sDate, this.timeZone)\n this.startTime = this.formatTimeHMS(sDate, this.timeZone)\n this.color = this.metadata.color\n this.metadataVals = Object.keys(this.metadata.metadata).map((k) => {\n return { key: k, value: this.metadata.metadata[k] }\n })\n } else {\n this.calcStartDateTime()\n this.color = '#003784'\n this.metadataVals = []\n }\n },\n clearHandler: function () {\n this.show = !this.show\n },\n submitHandler() {\n const color = this.color\n const metadata = this.metadataVals.reduce((result, element) => {\n result[element.key] = element.value\n return result\n }, {})\n const data = { color, metadata }\n if (this.timeZone === 'local') {\n data.start = new Date(\n this.startDate + ' ' + this.startTime,\n ).toISOString()\n } else {\n data.start = new Date(\n this.startDate + ' ' + this.startTime + 'Z',\n ).toISOString()\n }\n if (this.metadata) {\n Api.put(`/openc3-api/metadata/${this.metadata.start}`, {\n data,\n }).then((response) => {\n this.$notify.normal({\n title: 'Updated Metadata',\n body: `Metadata updated: (${response.data.start})`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n } else {\n Api.post('/openc3-api/metadata', {\n data,\n }).then((response) => {\n this.$notify.normal({\n title: 'Created new Metadata',\n body: `Metadata: (${response.data.start})`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n }\n // We don't do the $emit or set show here because it has to be in the callback\n },\n },\n}\n</script>\n\n<style scoped>\n.v-stepper--vertical .v-stepper__content {\n width: auto;\n margin: 0px 0px 0px 36px;\n padding: 0px;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-dialog v-model=\"show\" persistent width=\"600\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-if=\"note\">Update Note</span>\n <span v-else>Create Note</span>\n <v-spacer />\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-note-icon\"\n @click=\"clearHandler\"\n />\n </v-toolbar>\n <v-stepper\n v-model=\"dialogStep\"\n editable\n :items=\"['Note Times', 'Note Input']\"\n >\n <template v-if=\"dialogStep === 2\" #actions>\n <v-row class=\"ma-0 px-6 pb-4\">\n <v-btn variant=\"text\" @click=\"() => (dialogStep -= 1)\">\n Previous\n </v-btn>\n <v-spacer />\n <v-btn variant=\"outlined\" class=\"mr-4\" @click=\"clearHandler\">\n Cancel\n </v-btn>\n <v-btn\n type=\"submit\"\n color=\"primary\"\n :disabled=\"!!error\"\n @click.prevent=\"submitHandler\"\n >\n Ok\n </v-btn>\n </v-row>\n </template>\n\n <template #item.1>\n <v-card-text>\n <div class=\"pa-2\">\n <v-row dense>\n <v-text-field\n v-model=\"startDate\"\n type=\"date\"\n label=\"Start Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"note-start-date\"\n />\n <v-text-field\n v-model=\"startTime\"\n type=\"time\"\n step=\"1\"\n label=\"Start Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"note-start-time\"\n />\n </v-row>\n <v-row dense>\n <v-text-field\n v-model=\"endDate\"\n type=\"date\"\n label=\"End Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"note-end-date\"\n />\n <v-text-field\n v-model=\"endTime\"\n type=\"time\"\n step=\"1\"\n label=\"End Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"note-end-time\"\n />\n </v-row>\n <v-row>\n <span\n v-show=\"timeError\"\n class=\"ma-2 text-red\"\n v-text=\"timeError\"\n />\n </v-row>\n </div>\n </v-card-text>\n </template>\n\n <template #item.2>\n <v-card-text>\n <div class=\"pa-2\">\n <div>\n <color-select-form v-model=\"color\" />\n </div>\n <div>\n <v-text-field\n v-model=\"description\"\n type=\"text\"\n label=\"Note Description\"\n data-test=\"note-description\"\n />\n </div>\n <v-row v-show=\"typeError\">\n <span class=\"ma-2 text-red\" v-text=\"typeError\" />\n </v-row>\n </div>\n </v-card-text>\n </template>\n </v-stepper>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\nimport ColorSelectForm from './ColorSelectForm.vue'\nimport CreateDialog from './CreateDialog'\n\nexport default {\n components: {\n ColorSelectForm,\n },\n mixins: [CreateDialog, TimeFilters],\n props: {\n modelValue: Boolean,\n note: {\n type: Object,\n },\n },\n data() {\n return {\n dialogStep: 1,\n description: '',\n color: '#8F3400',\n rules: {\n required: (value) => !!value || 'Required',\n },\n }\n },\n computed: {\n timeError: function () {\n let start\n let end\n if (this.timeZone === 'local') {\n start = new Date(this.startDate + ' ' + this.startTime)\n end = new Date(this.endDate + ' ' + this.endTime)\n } else {\n start = new Date(this.startDate + ' ' + this.startTime + 'Z')\n end = new Date(this.endDate + ' ' + this.endTime + 'Z')\n }\n if (start === end) {\n return 'Invalid start, end time. Notes must have different start and end times.'\n }\n if (start > end) {\n return 'Invalid start time. Notes start before end.'\n }\n return null\n },\n typeError: function () {\n if (!this.color) {\n return 'A color is required.'\n }\n if (!this.description) {\n return 'A description is required for a valid note.'\n }\n return null\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted: function () {\n this.updateValues()\n },\n methods: {\n updateValues: function () {\n this.dialogStep = 1\n if (this.note) {\n const sDate = new Date(this.note.start * 1000)\n this.startDate = this.formatDate(sDate, this.timeZone)\n this.startTime = this.formatTimeHMS(sDate, this.timeZone)\n const eDate = new Date(this.note.stop * 1000)\n this.endDate = this.formatDate(eDate, this.timeZone)\n this.endTime = this.formatTimeHMS(eDate, this.timeZone)\n this.color = this.note.color\n this.description = this.note.description\n } else {\n this.calcStartDateTime()\n this.color = '#8F3400'\n this.description = ''\n }\n },\n clearHandler: function () {\n this.show = !this.show\n },\n submitHandler() {\n let start\n let stop // API takes stop rather than end\n if (this.timeZone === 'local') {\n start = new Date(this.startDate + ' ' + this.startTime).toISOString()\n stop = new Date(this.endDate + ' ' + this.endTime).toISOString()\n } else {\n start = new Date(\n this.startDate + ' ' + this.startTime + 'Z',\n ).toISOString()\n stop = new Date(this.endDate + ' ' + this.endTime + 'Z').toISOString()\n }\n const color = this.color\n const description = this.description\n if (this.note) {\n Api.put(`/openc3-api/notes/${this.note.start}`, {\n data: { start, stop, color, description },\n }).then((response) => {\n const desc =\n response.data.description.length > 16\n ? `${response.data.description.substring(0, 16)}...`\n : response.data.description\n this.$notify.normal({\n title: 'Updated Note',\n body: `Note updated: (${response.data.start}): \"${desc}\"`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n } else {\n Api.post('/openc3-api/notes', {\n data: { start, stop, color, description },\n }).then((response) => {\n const desc =\n response.data.description.length > 16\n ? `${response.data.description.substring(0, 16)}...`\n : response.data.description\n this.$notify.normal({\n title: 'Created new Note',\n body: `Note: (${response.data.start}) created: \"${desc}\"`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n }\n // We don't do the $emit or set show here because it has to be in the callback\n },\n },\n}\n</script>\n\n<style scoped>\n.v-stepper--vertical .v-stepper__content {\n width: auto;\n margin: 0px 0px 0px 36px;\n padding: 0px;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-dialog v-model=\"show\" persistent width=\"80vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-if=\"newMetadata\">Metadata</span><span v-else>Events</span>\n <v-spacer />\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-metadata-icon\"\n aria-label=\"Close Dialog\"\n @click=\"close\"\n />\n </v-toolbar>\n <v-card-title>\n <v-row class=\"pa-3\">\n <span v-if=\"newMetadata\">Metadata</span><span v-else>Events</span>\n <v-spacer />\n <v-text-field\n v-model=\"search\"\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n single-line\n hide-details\n />\n </v-row>\n </v-card-title>\n <v-data-table\n :headers=\"eventHeaders\"\n :items=\"localEvents\"\n :search=\"search\"\n >\n <template #no-data>\n <span> No events </span>\n </template>\n <template #item.start=\"{ item }\">\n {{ formatDateTime(item.start, timeZone) }}\n </template>\n <template #item.end=\"{ item }\">\n {{ formatDateTime(item.end, timeZone) }}\n </template>\n <template #item.type=\"{ item }\">\n {{ item.type.charAt(0).toUpperCase() + item.type.slice(1) }}\n </template>\n <template #item.data=\"{ item }\">\n {{ dataFormat(item) }}\n </template>\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n size=\"small\"\n class=\"mr-2\"\n data-test=\"edit-event\"\n aria-label=\"Edit Event\"\n @click=\"editAction(item)\"\n />\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n size=\"small\"\n data-test=\"delete-event\"\n aria-label=\"Delete Event\"\n @click=\"deleteAction(item)\"\n />\n </template>\n </v-data-table>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" data-test=\"close-event-list\" @click=\"close\">\n Close\n </v-btn>\n <v-btn\n v-if=\"newMetadata\"\n variant=\"flat\"\n data-test=\"new-event\"\n @click=\"showMetadataCreate = true\"\n >\n New Metadata\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n <!-- Edit existing events -->\n <activity-create-dialog\n v-if=\"showActivityUpdate\"\n v-model=\"showActivityUpdate\"\n :activity=\"editActivity\"\n :time-zone=\"timeZone\"\n @update=\"updateActivity\"\n />\n <metadata-create-dialog\n v-if=\"showMetadataUpdate\"\n v-model=\"showMetadataUpdate\"\n :metadata=\"editMetadata\"\n :time-zone=\"timeZone\"\n @update=\"updateMetadata\"\n />\n <note-create-dialog\n v-if=\"showNoteUpdate\"\n v-model=\"showNoteUpdate\"\n :note=\"editNote\"\n :time-zone=\"timeZone\"\n @update=\"updateNote\"\n />\n <!-- Create new metadata -->\n <metadata-create-dialog\n v-if=\"showMetadataCreate\"\n v-model=\"showMetadataCreate\"\n :time-zone=\"timeZone\"\n @update=\"addMetadata\"\n />\n </div>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\nimport ActivityCreateDialog from './ActivityCreateDialog.vue'\nimport DeleteItem from './DeleteItem'\nimport MetadataCreateDialog from './MetadataCreateDialog.vue'\nimport NoteCreateDialog from './NoteCreateDialog.vue'\n\nexport default {\n components: {\n ActivityCreateDialog,\n MetadataCreateDialog,\n NoteCreateDialog,\n },\n mixins: [TimeFilters, DeleteItem],\n props: {\n events: {\n type: Array,\n required: true,\n },\n modelValue: {\n type: Boolean,\n required: true,\n },\n timeZone: {\n type: String,\n required: true,\n },\n types: {\n type: Array,\n },\n newMetadata: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n search: '',\n localEvents: [...this.events],\n eventHeaders: [\n { title: 'Start', key: 'start', width: 215 },\n { title: 'Stop', key: 'end', width: 215 },\n { title: 'Type', key: 'type' },\n { title: 'Data', key: 'data' },\n { title: 'Actions', key: 'actions', sortable: false },\n ],\n editActivity: { start: new Date(), end: new Date() },\n editMetadata: { start: new Date(), end: new Date() },\n editNote: { start: new Date(), end: new Date() },\n editIndex: 0,\n showActivityUpdate: false,\n showMetadataUpdate: false,\n showNoteUpdate: false,\n showMetadataCreate: false,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n created: function () {\n // TODO: Switch to vue3 syntax\n // this.$on('delete', (item) => {\n // let index = this.localEvents.findIndex((element) => {\n // return element.type === item.type && element.start === item.start\n // })\n // this.localEvents.splice(index, 1)\n // })\n },\n methods: {\n close() {\n this.$emit('close')\n this.show = false\n },\n dataFormat(event) {\n let data = event.name\n switch (event.type) {\n case 'note':\n data = event.note.description\n break\n case 'metadata':\n let rows = []\n Object.entries(event.metadata.metadata).forEach(([key, value]) =>\n rows.push(`${key}: ${value}`),\n )\n data = rows.join(', ')\n break\n }\n return data\n },\n editAction(item) {\n this.editIndex = this.localEvents.findIndex((element) => {\n return element.type === item.type && element.start === item.start\n })\n switch (item.type) {\n case 'activity':\n this.editActivity = item.activity\n this.showActivityUpdate = true\n break\n case 'metadata':\n this.editMetadata = item.metadata\n this.showMetadataUpdate = true\n break\n case 'note':\n this.editNote = item.note\n this.showNoteUpdate = true\n break\n }\n },\n deleteAction(item) {\n let deleteIndex = this.localEvents.findIndex((element) => {\n return element.type === item.type && element.start === item.start\n })\n let api = null\n let start = null\n let uuid = null\n switch (item.type) {\n case 'activity':\n api = `timeline/${item.activity.name}/activity`\n start = item.activity.start\n uuid = item.activity.uuid\n break\n case 'metadata':\n api = 'metadata'\n start = item.metadata.start\n break\n case 'note':\n api = 'notes'\n start = item.note.start\n break\n }\n\n this.$dialog\n .confirm(\n `Are you sure you want to remove ${item.type} at ${item.start}`,\n {\n okText: 'Delete',\n cancelText: 'Cancel',\n },\n )\n .then((dialog) => {\n this.localEvents.splice(deleteIndex, 1)\n let url = `/openc3-api/${api}/${start}`\n if (uuid) {\n url += `/${uuid}`\n }\n return Api.delete(url)\n })\n .then((response) => {\n this.$emit('update')\n this.$notify.normal({\n title: `Deleted ${item.type}`,\n body: `Deleted ${item.type} at ${start}`,\n })\n })\n .catch((error) => {\n // TODO: It returns true on cancel?\n })\n },\n updateActivity(item) {\n this.$emit('update')\n this.localEvents[this.editIndex].activity = item\n },\n updateMetadata(item) {\n this.$emit('update')\n this.localEvents[this.editIndex].metadata = item\n },\n updateNote(item) {\n this.$emit('update')\n this.localEvents[this.editIndex].note = item\n },\n addMetadata(item) {\n // TODO: This is how Calendar creates new metadata items via makeMetadataEvent\n let metadata = {\n name: 'Metadata',\n start: new Date(item.start * 1000),\n end: new Date(item.start * 1000),\n color: item.color,\n type: item.type,\n timed: true,\n metadata: item,\n }\n this.localEvents.push(metadata)\n },\n },\n}\n</script>\n"],"names":["add","date","duration","options","years","months","weeks","days","hours","minutes","seconds","_date","toDate","dateWithMonths","addMonths","dateWithDays","addDays","minutesToAdd","msToAdd","constructFrom","CreateDialog","format","ms","start","parse","_sfc_main","EnvironmentChooser","ScriptChooser","CommandEditor","TimeFilters","value","now","end","timeline","inputKind","event","sDate","eDate","_a","rDate","stop","recurringEnd","kind","data","recurring","Api","response","activityTime","error","commandString","_hoisted_3","_hoisted_5","_hoisted_11","_createElementBlock","_createVNode","_component_v_dialog","$options","$event","_component_v_card","_component_v_toolbar","_component_v_spacer","$props","_openBlock","_component_v_btn","_component_v_stepper","$data","_component_v_card_text","_createElementVNode","_component_v_select","_component_v_text_field","_component_v_textarea","_component_v_row","_ctx","_component_v_checkbox","_createBlock","_component_v_col","_cache","_toDisplayString","_hoisted_6","_hoisted_7","_component_script_chooser","_component_environment_chooser","_hoisted_8","_component_v_card_title","_hoisted_10","_component_v_icon","_component_command_editor","_component_v_card_actions","_withCtx","props","item","_component_v_list_item","_mergeProps","DeleteItem","api","index","_component_v_table","_hoisted_1","_Fragment","_renderList","meta","i","ColorSelectForm","MetadataInputForm","k","color","metadata","result","element","_hoisted_4","_component_color_select_form","_component_metadata_input_form","description","desc","ActivityCreateDialog","MetadataCreateDialog","NoteCreateDialog","rows","key","deleteIndex","uuid","dialog","url","_component_v_data_table","_createTextVNode","_component_activity_create_dialog","_component_metadata_create_dialog","_component_note_create_dialog"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Graph-BliBYJxD.js","sources":["../src/components/GraphEditDialog.vue","../src/components/GraphEditItemDialog.vue","../src/components/Graph.vue"],"sourcesContent":["<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" max-width=\"700\" @keydown.esc=\"$emit('cancel')\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Edit Graph </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-tabs v-model=\"tab\" class=\"ml-3\">\n <v-tab value=\"0\"> Settings </v-tab>\n <v-tab value=\"1\"> Scale / Lines </v-tab>\n <v-tab value=\"2\"> Items </v-tab>\n </v-tabs>\n <v-tabs-window v-model=\"tab\">\n <v-tabs-window-item value=\"0\" eager>\n <div class=\"edit-box\">\n <v-row>\n <v-col>\n <v-card-text class=\"pa-0\">\n <v-text-field\n v-model=\"graph.title\"\n class=\"pb-2\"\n label=\"Title\"\n hide-details\n />\n </v-card-text>\n </v-col>\n <v-col>\n <v-select\n v-model=\"graph.legendPosition\"\n label=\"Legend Position\"\n hide-details\n :items=\"legendPositions\"\n style=\"max-width: 280px\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Select a start date/time for the graph. Leave blank for start now.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"startDate\"\n label=\"Start Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"startTime\"\n label=\"Start Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n <v-card-text class=\"pa-0\">\n Select a end date/time for the graph. Leave blank for continuous\n real-time graphing.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"endDate\"\n label=\"End Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"endTime\"\n label=\"End Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"1\" eager>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Set a min or max Y value to override automatic scaling\n </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMinY\"\n hide-details\n label=\"Min Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMaxY\"\n hide-details\n label=\"Max Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-list density=\"compact\" class=\"horizontal-lines\">\n <v-list-item>\n <span style=\"padding-top: 5px\">\n Add horizontal lines to the graph\n </span>\n <v-spacer />\n <v-btn @click=\"addLine()\"> New Line </v-btn>\n </v-list-item>\n <v-list-item\n v-for=\"(item, i) in graph.lines\"\n :key=\"i\"\n :value=\"item\"\n color=\"primary\"\n >\n <v-row>\n <v-col>\n <v-text-field v-model=\"item.yValue\" label=\"Y Value\" />\n </v-col>\n <v-col>\n <v-select\n v-model=\"item.color\"\n label=\"Color\"\n hide-details\n :items=\"colors\"\n />\n </v-col>\n <v-col>\n <v-btn\n style=\"padding: 30px\"\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Line\"\n @click=\"removeLine(item)\"\n />\n </v-col>\n </v-row>\n </v-list-item>\n </v-list>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0 text-medium-emphasis\">\n Choose a different item to use for the graph's X axis. If\n unchecked, the graph will use the packet's PACKET_TIMESECONDS item\n if it exists, otherwise it will use RECEIVED_TIMESECONDS.\n <br />\n <span class=\"font-italic\">\n Note that the graph may not work correctly if you choose an item\n that does not strictly increase in value. It is recommended to\n use a counter or timestamp.\n </span>\n </v-card-text>\n <v-checkbox\n v-model=\"customXAxisEnabled\"\n :disabled=\"!xAxisItemPacket\"\n label=\"Custom X axis item\"\n density=\"compact\"\n hide-details\n @update:model-value=\"customXAxisToggled\"\n />\n <v-card-text\n v-if=\"!xAxisItemPacket\"\n class=\"pa-0 text-medium-emphasis\"\n >\n All items on the graph must be in the same packet to enable this\n feature.\n </v-card-text>\n <target-packet-item-chooser\n v-if=\"customXAxisEnabled && xAxisItemPacket\"\n :initial-target-name=\"xAxisItemPacket.targetName\"\n :initial-packet-name=\"xAxisItemPacket.packetName\"\n :initial-item-name=\"initialXAxisItem\"\n choose-item\n lock-target\n lock-packet\n button-text=\"Set\"\n @on-set=\"xAxisItemChanged\"\n @add-item=\"xAxisItemSelected\"\n />\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"2\" eager>\n <v-data-table\n item-key=\"itemId\"\n class=\"elevation-1 my-2\"\n data-test=\"edit-graph-items\"\n :headers=\"itemHeaders\"\n :items=\"editItems\"\n :items-per-page=\"5\"\n :footer-props=\"{\n 'items-per-page-options': [5],\n }\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Item\"\n @click=\"$emit('remove', item)\"\n />\n </template>\n <template #no-data>\n <span> Currently no items on this graph </span>\n </template>\n </v-data-table>\n </v-tabs-window-item>\n </v-tabs-window>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"closeOk\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { TimeFilters } from '@/util'\nimport TargetPacketItemChooser from './TargetPacketItemChooser.vue'\nimport { isValid, parse, toDate } from 'date-fns'\nexport default {\n components: {\n TargetPacketItemChooser,\n },\n mixins: [TimeFilters],\n props: {\n modelValue: Boolean, // modelValue is the default prop when using v-model\n title: {\n type: String,\n required: true,\n },\n legendPosition: {\n type: String,\n required: true,\n },\n items: {\n type: Array,\n required: true,\n },\n graphMinY: {\n type: Number,\n },\n graphMaxY: {\n type: Number,\n },\n lines: {\n type: Array,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n startDateTime: {\n type: Number,\n },\n endDateTime: {\n type: Number,\n },\n timeZone: {\n type: String,\n required: true,\n },\n xAxisItemPacket: {\n type: Object,\n default: undefined,\n },\n xAxisItem: {\n type: String,\n default: '__time',\n },\n },\n emits: ['cancel', 'ok', 'remove', 'update:modelValue', 'update:xAxisItem'],\n data: function () {\n return {\n tab: 0,\n graph: {},\n customXAxisEnabled: false,\n selectedXAxisItem: null,\n pendingXAxisSelection: null,\n legendPositions: ['top', 'bottom', 'left', 'right'],\n startDate: null,\n startTime: null,\n endDate: null,\n endTime: null,\n lineHeaders: [\n { title: 'Y Value', value: 'yValue' },\n { title: 'Color', value: 'color' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n itemHeaders: [\n { title: 'Target Name', value: 'targetName' },\n { title: 'Packet Name', value: 'packetName' },\n { title: 'Item Name', value: 'itemName' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n rules: {\n date: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'yyyy-MM-dd', new Date())) ||\n 'Invalid date (YYYY-MM-DD)'\n )\n } catch (e) {\n return 'Invalid date (YYYY-MM-DD)'\n }\n },\n time: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'HH:mm:ss', new Date())) ||\n 'Invalid time (HH:MM:SS)'\n )\n } catch (e) {\n return 'Invalid time (HH:MM:SS)'\n }\n },\n },\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n editItems: function () {\n if (!this.items) return []\n let itemId = 0\n return this.items.map((item) => {\n itemId += 1\n return { ...item, itemId }\n })\n },\n initialXAxisItem: function () {\n // Just for TargetPacketItemChooser\n if (this.xAxisItem === '__time') {\n return\n }\n return this.xAxisItem.split('__').at(4)\n },\n },\n created() {\n this.graph = {\n title: this.title,\n legendPosition: this.legendPosition,\n items: this.items,\n graphMinY: this.graphMinY,\n graphMaxY: this.graphMaxY,\n lines: [...this.lines],\n }\n this.customXAxisEnabled = this.xAxisItem && this.xAxisItem !== '__time'\n this.selectedXAxisItem = this.xAxisItem\n // Set the date and time if they pass a dateTime or set a default\n // Start needs a default because if the timeZone is UTC the time will still be local time\n if (this.startDateTime) {\n // Use the passed dateTime as is\n let date = toDate(this.startDateTime / 1000000)\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n } else {\n // Create a new date 1 hr in the past as a default\n let date = new Date() - 3600000\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n }\n // Only set end date / time if it is explicitly passed\n if (this.endDateTime) {\n let date = toDate(this.endDateTime / 1000000)\n this.endDate = this.formatDate(date, this.timeZone)\n this.endTime = this.formatTimeHMS(date, this.timeZone)\n }\n },\n methods: {\n closeOk() {\n if (!!this.startDate && !!this.startTime) {\n this.graph.startDateTime = this.startDate + ' ' + this.startTime\n } else {\n this.graph.startDateTime = null\n }\n if (!!this.endDate && !!this.endTime) {\n this.graph.endDateTime = this.endDate + ' ' + this.endTime\n } else {\n this.graph.endDateTime = null\n }\n this.$emit('ok', this.graph)\n },\n addLine() {\n this.graph.lines.push({ yValue: 0, color: 'white' })\n },\n removeLine(dline) {\n let i = this.graph.lines.indexOf(dline)\n this.graph.lines.splice(i, 1)\n },\n customXAxisToggled(enabled) {\n if (!enabled) {\n this.selectedXAxisItem = '__time'\n this.$emit('update:xAxisItem', '__time')\n }\n },\n xAxisItemChanged(selection) {\n this.pendingXAxisSelection = selection\n },\n xAxisItemSelected(selection) {\n if (selection.targetName && selection.packetName && selection.itemName) {\n const xAxisItemKey = `DECOM__TLM__${selection.targetName}__${selection.packetName}__${selection.itemName}__CONVERTED`\n this.selectedXAxisItem = xAxisItemKey\n this.$emit('update:xAxisItem', xAxisItemKey)\n }\n },\n },\n}\n</script>\n\n<style>\n.edit-box {\n color: hsla(0, 0%, 100%, 0.7);\n background-color: var(--color-background-surface-default);\n padding: 10px;\n margin-top: 10px;\n}\n\n/* For the Y Axis item editor within the Edit Dialog */\n.v-small-dialog__content {\n background-color: var(--color-background-surface-selected);\n padding: 5px 5px;\n}\n\n.horizontal-lines {\n background-color: var(--color-background-surface-default);\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2023, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" width=\"400\" @keydown.enter=\"success()\">\n <v-card>\n <v-card-title class=\"mb-2\">Edit Item</v-card-title>\n <v-card-text>\n <v-select\n v-model=\"editItem.valueType\"\n variant=\"outlined\"\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n class=\"mb-2\"\n />\n <v-select\n v-model=\"editItem.reduced\"\n variant=\"outlined\"\n hide-details\n label=\"Reduction\"\n :items=\"reduction\"\n class=\"mb-2\"\n />\n <v-select\n v-model=\"editItem.reducedType\"\n variant=\"outlined\"\n hide-details\n label=\"Reduced Type\"\n :items=\"reducedTypes\"\n :disabled=\"editItem.reduced === 'DECOM'\"\n class=\"mb-2\"\n />\n <v-select\n v-model=\"editItem.color\"\n variant=\"outlined\"\n hide-details\n label=\"Color\"\n :items=\"colors\"\n class=\"mb-2\"\n @update:model-value=\"$emit('changeColor', $event)\"\n />\n <div v-if=\"limitsNames.length > 1\">\n <v-select\n v-model=\"limitsName\"\n variant=\"outlined\"\n hide-details\n label=\"Display Limits\"\n :items=\"limitsNames\"\n @update:model-value=\"$emit('changeLimits', limits[limitsName])\"\n />\n <div class=\"pa-3\">{{ limitsName }}: {{ limits[limitsName] }}</div>\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"$emit('close', editItem)\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\nexport default {\n props: {\n modelValue: Boolean,\n item: {\n type: Object,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n },\n emits: [\n 'cancel',\n 'changeColor',\n 'changeLimits',\n 'close',\n 'update:modelValue',\n ],\n data: function () {\n return {\n editItem: null,\n limitsName: 'NONE',\n // NONE: [] matches the default limits assigned in Graph addItems\n limits: { NONE: [] },\n valueTypes: ['CONVERTED', 'RAW'],\n reduction: [\n // Map NONE to DECOM for clarity\n { title: 'NONE', value: 'DECOM' },\n { title: 'REDUCED_MINUTE', value: 'REDUCED_MINUTE' },\n { title: 'REDUCED_HOUR', value: 'REDUCED_HOUR' },\n { title: 'REDUCED_DAY', value: 'REDUCED_DAY' },\n ],\n reducedTypes: ['MIN', 'MAX', 'AVG', 'STDDEV'],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n limitsNames() {\n return Object.keys(this.limits)\n },\n },\n async created() {\n this.editItem = { ...this.item }\n new OpenC3Api()\n .get_item(this.item.targetName, this.item.packetName, this.item.itemName)\n .then((details) => {\n for (const [key, value] of Object.entries(details.limits)) {\n if (Object.keys(value).includes('red_low')) {\n this.limits[key] = Object.values(value)\n }\n }\n // Locate the key for the value array that we pass in\n this.limitsName = Object.keys(this.limits).find(\n // Little hack to compare arrays you convert them to strings\n (key) => this.limits[key] + '' === this.editItem.limits + '',\n )\n })\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n#\n# A portion of this file was funded by Blue Origin Enterprises, L.P.\n# See https://github.com/OpenC3/cosmos/pull/1957\n-->\n\n<template>\n <div @click.prevent=\"$emit('click')\">\n <v-card>\n <v-toolbar\n v-show=\"!hideToolbarData\"\n height=\"24\"\n class=\"pl-2 pr-2\"\n :class=\"selectedGraphId === id ? 'active' : ''\"\n >\n <v-btn\n v-show=\"errors.length !== 0\"\n class=\"mx-2\"\n icon=\"mdi-alert\"\n density=\"compact\"\n variant=\"text\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"edit-graph-icon\"\n aria-label=\"Edit Graph\"\n @click=\"\n () => {\n editGraph = true\n }\n \"\n />\n\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n\n <template v-if=\"expand\">\n <v-btn\n v-if=\"calcFullSize\"\n icon=\"mdi-arrow-collapse\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-all\"\n @click=\"collapseAll\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-all\"\n @click=\"expandAll\"\n />\n\n <v-btn\n v-if=\"fullWidth\"\n icon=\"mdi-arrow-collapse-horizontal\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-width\"\n @click=\"collapseWidth\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand-horizontal\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-width\"\n @click=\"expandWidth\"\n />\n\n <v-btn\n v-if=\"fullHeight\"\n icon=\"mdi-arrow-collapse-vertical\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-height\"\n @click=\"collapseHeight\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand-vertical\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-height\"\n @click=\"expandHeight\"\n />\n </template>\n\n <v-btn\n v-if=\"expand\"\n icon=\"mdi-window-minimize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-else\n icon=\"mdi-window-maximize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n />\n\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-graph-icon\"\n @click.stop=\"$emit('close-graph')\"\n />\n </v-toolbar>\n\n <v-expand-transition>\n <div v-show=\"expand\" id=\"chart\" ref=\"chart\" class=\"pa-1\">\n <div :id=\"`chart${id}`\"></div>\n <div id=\"betweenCharts\"></div>\n <div v-show=\"showOverview\" :id=\"`overview${id}`\"></div>\n </div>\n </v-expand-transition>\n </v-card>\n\n <!-- Edit graph dialog -->\n <graph-edit-dialog\n v-if=\"editGraph\"\n v-model=\"editGraph\"\n v-model:x-axis-item=\"xAxisItem\"\n :title=\"title\"\n :legend-position=\"legendPosition\"\n :items=\"items\"\n :graph-min-y=\"graphMinY\"\n :graph-max-y=\"graphMaxY\"\n :lines=\"lines\"\n :colors=\"colors\"\n :start-date-time=\"graphStartDateTime\"\n :end-date-time=\"graphEndDateTime\"\n :time-zone=\"timeZone\"\n :x-axis-item-packet=\"allowableXAxisItemPacket\"\n @remove=\"removeItems([$event])\"\n @ok=\"editGraphClose\"\n @cancel=\"editGraph = false\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" max-width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n v-model=\"title\"\n readonly\n hide-details\n class=\"pb-2\"\n label=\"Graph Title\"\n />\n </v-row>\n <v-row class=\"my-3\">\n <v-textarea readonly rows=\"8\" :value=\"error\" />\n </v-row>\n <v-row>\n <v-btn block @click=\"clearErrors\"> Clear </v-btn>\n </v-row>\n </v-card>\n </v-dialog>\n\n <!-- Edit right click context menu -->\n <v-menu\n v-if=\"editGraphMenu\"\n v-model=\"editGraphMenu\"\n :target=\"[editGraphMenuX, editGraphMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"editGraph = true\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ title }}\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <graph-edit-item-dialog\n v-if=\"editItem\"\n v-model=\"editItem\"\n :colors=\"colors\"\n :item=\"selectedItem\"\n @change-color=\"changeColor\"\n @change-limits=\"changeLimits\"\n @cancel=\"editItem = false\"\n @close=\"closeEditItem\"\n />\n\n <!-- Edit Item right click context menu -->\n <v-menu\n v-if=\"itemMenu\"\n v-model=\"itemMenu\"\n :target=\"[itemMenuX, itemMenuY]\"\n absolute\n offset-y\n >\n <v-list nav density=\"compact\">\n <v-list-subheader>\n {{ selectedItem.targetName }}\n {{ selectedItem.packetName }}\n {{ selectedItem.itemName }}\n </v-list-subheader>\n <v-list-item @click=\"editItem = true\">\n <template #prepend>\n <v-icon icon=\"mdi-pencil\" />\n </template>\n <v-list-item-title> Edit </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"clearData([selectedItem])\">\n <template #prepend>\n <v-icon icon=\"mdi-eraser\" />\n </template>\n <v-list-item-title> Clear </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"removeItems([selectedItem])\">\n <template #prepend>\n <v-icon icon=\"mdi-delete\" />\n </template>\n <v-list-item-title> Delete </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <!-- Edit Legend right click context menu -->\n <v-menu\n v-if=\"legendMenu\"\n v-model=\"legendMenu\"\n :target=\"[legendMenuX, legendMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"moveLegend('top')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Top\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('bottom')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Bottom\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('left')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Left\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('right')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend RIght\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <div v-if=\"!sparkline\" ref=\"info\" class=\"u-series\">\n <v-tooltip\n text=\"Click item to toggle, Right click to edit\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-icon v-bind=\"props\"> mdi-information-variant-circle </v-icon>\n </template>\n </v-tooltip>\n </div>\n </div>\n</template>\n\n<script>\nimport GraphEditDialog from './GraphEditDialog.vue'\nimport GraphEditItemDialog from './GraphEditItemDialog.vue'\nimport uPlot from 'uplot'\nimport bs from 'binary-search'\nimport { OpenC3Api, Cable } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\nimport 'uplot/dist/uPlot.min.css'\n\nconst DEFAULT_X_AXIS_ITEM = '__time'\n\nexport default {\n components: {\n GraphEditDialog,\n GraphEditItemDialog,\n },\n mixins: [TimeFilters],\n props: {\n id: {\n type: Number,\n required: true,\n },\n selectedGraphId: {\n type: Number,\n default: null,\n },\n state: {\n type: String,\n required: true,\n },\n // start time in nanoseconds to start the graph\n // this allows multiple graphs to be synchronized\n startTime: {\n type: Number,\n default: null,\n },\n secondsGraphed: {\n type: Number,\n required: true,\n },\n pointsSaved: {\n type: Number,\n required: true,\n },\n pointsGraphed: {\n type: Number,\n required: true,\n },\n refreshIntervalMs: {\n type: Number,\n default: 200,\n },\n hideToolbar: {\n type: Boolean,\n default: false,\n },\n hideOverview: {\n type: Boolean,\n default: false,\n },\n sparkline: {\n type: Boolean,\n default: false,\n },\n initialItems: {\n type: Array,\n default: () => [],\n },\n initialXAxisItem: {\n type: String,\n default: DEFAULT_X_AXIS_ITEM,\n },\n // These allow the parent to force a specific height and/or width\n height: {\n type: Number,\n default: null,\n },\n width: {\n type: Number,\n default: null,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n emits: [\n 'click',\n 'close-graph',\n 'edit',\n 'min-max-graph',\n 'pause',\n 'resize',\n 'start',\n 'started',\n ],\n data() {\n return {\n api: null,\n lines: [],\n active: true,\n expand: true,\n fullWidth: true,\n fullHeight: true,\n graph: null,\n editGraph: false,\n editGraphMenu: false,\n editGraphMenuX: 0,\n editGraphMenuY: 0,\n editItem: false,\n itemMenu: false,\n itemMenuX: 0,\n itemMenuY: 0,\n legendMenu: false,\n legendMenuX: 0,\n legendMenuY: 0,\n legendPosition: 'bottom',\n selectedItem: null,\n hideToolbarData: this.hideToolbar,\n showOverview: !this.hideOverview,\n hideOverviewData: this.hideOverview,\n title: '',\n overview: null,\n data: [[]],\n dataChanged: false,\n interval: null,\n graphMinY: null,\n graphMaxY: null,\n graphStartDateTime: null,\n graphEndDateTime: null,\n xAxisItem: this.initialXAxisItem, // '__time' or something like 'DECOM__TLM__INST__ADCS__RECEIVED_COUNT__CONVERTED'\n indexes: {},\n items: this.initialItems,\n graphItems: [],\n lastPlaybackDateTime: null,\n limitsValues: [],\n drawInterval: null,\n zoomChart: false,\n zoomOverview: false,\n cable: new Cable(),\n subscription: null,\n needToUpdate: false,\n errorDialog: false,\n errors: [],\n colorIndex: 0,\n colors: [\n // The first 3 are taken from the Astro css definitions for\n // --color-data-visualization-1 through 3\n '#00c7cb',\n '#938bdb',\n '#4dacff',\n 'lime',\n 'darkorange',\n 'red',\n 'gold',\n 'hotpink',\n 'tan',\n 'cyan',\n 'maroon',\n 'blue',\n 'teal',\n 'purple',\n 'green',\n 'brown',\n 'lightblue',\n 'white',\n 'black',\n ],\n }\n },\n computed: {\n calcFullSize: function () {\n return this.fullWidth || this.fullHeight\n },\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n return JSON.stringify(this.errors, null, 4)\n }\n return null\n },\n itemSubscriptionKeys: function () {\n return this.items.map(this.subscriptionKey)\n },\n allowableXAxisItemPacket: function () {\n if (!this.canUseCustomXAxisItem || this.items.length === 0) {\n return undefined\n }\n const { targetName, packetName } = this.items[0]\n return { targetName, packetName }\n },\n canUseCustomXAxisItem: function () {\n // Make sure we're not mixing packets, because items from different packets will be received at different times.\n // If it was mixed, e.g. `xAxisItem` is 'INST__ADCS__RECEIVED_COUNT' and you were graphing\n // 'INST__HEALTH_STATUS__TEMP1', then the `received` handler wouldn't know which x-axis values to apply to the\n // received TEMP1 data points.\n if (this.items.length === 0) {\n return true\n }\n const { targetName, packetName } = this.items[0]\n return this.items.every(\n (item) =>\n item.targetName === targetName && item.packetName === packetName,\n )\n },\n actualXAxisItem: function () {\n if (this.canUseCustomXAxisItem && this.xAxisItem) {\n return this.xAxisItem\n } else {\n return DEFAULT_X_AXIS_ITEM\n }\n },\n xAxisConverter: function () {\n if (this.xAxisIsDefault) {\n return (val) => val / 1_000_000_000.0 // nsec to sec\n }\n return (val) => val\n },\n xAxisFormatter: function () {\n return (val) => {\n if (val == null) {\n return '--'\n } else if (this.xAxisIsTime) {\n // Convert the unix timestamp into a formatted date / time\n return this.formatSeconds(val, this.timeZone)\n }\n return val\n }\n },\n xAxisLabel: function () {\n return this.xAxisIsTime ? 'Time' : this.actualXAxisItem.split('__').at(-2)\n },\n xAxisIsDefault: function () {\n return this.actualXAxisItem === DEFAULT_X_AXIS_ITEM\n },\n xAxisIsTime: function () {\n const timeItems = ['PACKET_TIMESECONDS', 'RECEIVED_TIMESECONDS']\n return (\n this.xAxisIsDefault ||\n timeItems.includes(this.actualXAxisItem.split('__').at(4))\n )\n },\n xAxisIsAlsoGraphedItem: function () {\n return this.itemSubscriptionKeys.includes(this.actualXAxisItem)\n },\n playbackMode: function () {\n return this.$store.state.playback.playbackMode\n },\n playbackDateTime: function () {\n return this.$store.state.playback.playbackDateTime\n },\n playbackStep: function () {\n return this.$store.state.playback.playbackStep\n },\n },\n watch: {\n state: function (newState, oldState) {\n switch (newState) {\n case 'start':\n // Only subscribe if we were previously stopped\n // If we were paused we do nothing ... see the data function\n if (oldState === 'stop') {\n this.startGraph()\n }\n break\n // case 'pause': Nothing to do ... see the data function\n case 'stop':\n this.stopGraph()\n break\n }\n },\n playbackMode: function (_newState, _oldState) {\n if (this.playbackMode === 'playback') {\n this.setupPlaybackMode()\n } else {\n // realtime\n this.lastPlaybackDateTime = null\n this.clearAllData()\n this.startGraph()\n }\n },\n playbackDateTime: function (_newState, _oldState) {\n if (this.playbackMode === 'playback') {\n if (\n this.lastPlaybackDateTime === null ||\n this.lastPlaybackDateTime > this.playbackDateTime\n ) {\n // If we are going backwards in time we need to clear the data\n this.clearAllData()\n } else {\n this.api\n .get_tlm_values(\n this.graphItems,\n 30, // stale timeout\n null, // no cache timeout\n this.lastPlaybackDateTime, // start time\n this.playbackDateTime, // end time\n )\n .then((data) => {\n if (data.length > 0) {\n if (Array.isArray(data[0]) && Array.isArray(data[0][0])) {\n // data is array of array of arrays\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].length; j++) {\n if (j === 0) {\n let dateStr = data[i][j][0]\n let dateObj = new Date(dateStr)\n this.data[0].push(dateObj.getTime() / 1000.0) // Convert to seconds\n } else {\n this.data[j].push(data[i][j][0])\n }\n }\n }\n } else if (Array.isArray(data) && data.length >= 2) {\n for (let i = 0; i < data.length; i++) {\n if (i === 0) {\n let dateStr = data[i][0]\n let dateObj = new Date(dateStr)\n this.data[0].push(dateObj.getTime() / 1000.0) // Convert to seconds\n } else {\n this.data[i].push(data[i][0])\n }\n }\n }\n }\n this.dataChanged = true\n this.updateGraphData()\n })\n }\n this.lastPlaybackDateTime = this.playbackDateTime\n }\n },\n data: function (newData, oldData) {\n this.dataChanged = true\n },\n graphMinY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMinY = val\n }\n this.setGraphRange()\n },\n graphMaxY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMaxY = val\n }\n this.setGraphRange()\n },\n graphStartDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphStartDateTime =\n this.parseDateTime(this.graphStartDateTime, this.timeZone) * 1000000\n if (this.graphStartDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the start date time we need to update\n this.graphStartDateTime = null\n this.needToUpdate = true\n }\n },\n graphEndDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphEndDateTime =\n this.parseDateTime(this.graphEndDateTime, this.timeZone) * 1000000\n if (this.graphEndDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the end date time we need to update\n this.graphEndDateTime = null\n this.needToUpdate = true\n }\n },\n actualXAxisItem: function (newVal, oldVal) {\n let clonedItems = JSON.parse(JSON.stringify(this.items))\n this.removeItems(clonedItems)\n this.graph.destroy()\n this.chartOpts.series[0].label = this.xAxisLabel\n this.chartOpts.scales.x.time = this.xAxisIsTime\n this.graph = new uPlot(\n this.chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n if (!this.hideOverview) {\n this.overview.destroy()\n this.overviewOpts.scales.x.time = this.xAxisIsTime\n this.overview = new uPlot(\n this.overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`),\n )\n }\n this.addItems(clonedItems)\n // Don't need to $emit('edit') because addItems() does that\n },\n refreshIntervalMs: function (val) {\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = setInterval(() => {\n this.updateGraphData()\n }, val)\n }\n },\n },\n created() {\n this.api = new OpenC3Api()\n this.title = `Graph ${this.id}`\n for (const [index, item] of this.items.entries()) {\n this.data.push([]) // initialize the empty data arrays\n this.indexes[this.subscriptionKey(item)] = index + 1\n if (item.color === undefined) {\n item.color = this.colors[this.colorIndex]\n }\n this.colorIndex++\n if (this.colorIndex === this.colors.length) {\n this.colorIndex = 0\n }\n }\n },\n mounted() {\n // This code allows for temporary pulling in a patched uPlot\n // Also note you need to add 'async' before the mounted method for await\n // const plugin = document.createElement('script')\n // plugin.setAttribute(\n // 'src',\n // 'https://leeoniya.github.io/uPlot/dist/uPlot.iife.min.js'\n // )\n // plugin.async = true\n // document.head.appendChild(plugin)\n // await new Promise(r => setTimeout(r, 500)) // Allow the js to load\n\n // TODO: This is demo / performance code of multiple items with many data points\n // 10 items at 500,000 each renders immediately and uses 180MB in Chrome\n // Refresh still works, chrome is sluggish but once you pause it is very performant\n // 500,000 pts at 1Hz is 138.9hrs .. almost 6 days\n //\n // 10 items at 100,000 each is very performant ... 1,000,000 pts is Qt TlmGrapher default\n // 100,000 pts at 1Hz is 27.8hrs\n //\n // 100,000 takes 40ms, Chrome uses 160MB\n // this.data = []\n // const dataPoints = 100000\n // const items = 10\n // let pts = new Array(dataPoints)\n // let times = new Array(dataPoints)\n // let time = 1589398007\n // let series = [{}]\n // for (let i = 0; i < dataPoints; i++) {\n // times[i] = time\n // pts[i] = i\n // time += 1\n // }\n // this.data.push(times)\n // for (let i = 0; i < items; i++) {\n // this.data.push(pts.map(x => x + i))\n // series.push({\n // label: 'Item' + i,\n // stroke: this.colors[i]\n // })\n // }\n\n // NOTE: These are just initial settings ... actual series are added by this.graph.addSeries\n const { chartSeries, overviewSeries } = this.items.reduce(\n (seriesObj, item) => {\n const commonProps = {\n spanGaps: true,\n }\n seriesObj.chartSeries.push({\n ...commonProps,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => {\n return this.items[seriesIdx - 1].color\n },\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else {\n return rawValue == null ? '--' : rawValue.toFixed(3)\n }\n },\n })\n seriesObj.overviewSeries.push({\n ...commonProps,\n })\n return seriesObj\n },\n { chartSeries: [], overviewSeries: [] },\n )\n\n this.chartOpts = {}\n if (this.sparkline) {\n this.hideToolbarData = true\n this.hideOverviewData = true\n this.showOverview = false\n this.chartOpts = {\n width: this.width,\n height: this.height,\n pxAlign: false,\n cursor: {\n show: false,\n },\n select: {\n show: false,\n },\n legend: {\n show: false,\n },\n scales: {\n x: {\n time: false,\n },\n },\n axes: [\n {\n show: false,\n },\n {\n show: false,\n },\n ],\n series: [\n {},\n {\n stroke: 'white', // TODO: Light / dark theme\n },\n ],\n }\n this.graph = new uPlot(\n this.chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n } else {\n // Uplot wants the real timezone name ('local' doesn't work)\n let timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone\n if (this.timeZone && this.timeZone !== 'local') {\n timeZoneName = this.timeZone\n }\n this.chartOpts = {\n ...this.getSize('chart'),\n ...this.getScales(),\n ...this.getAxes('chart'),\n // series: series, // TODO: Uncomment with the performance code\n plugins: [this.linesPlugin()],\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [\n {\n label: this.xAxisLabel,\n value: (u, v) => this.xAxisFormatter(v),\n },\n ...chartSeries,\n ],\n cursor: {\n drag: {\n x: true,\n y: false,\n },\n // Sync the cursor across graphs so mouseovers are synced\n sync: {\n key: 'openc3',\n // setSeries links graphs so clicking an item to hide it also hides the other graph item\n // setSeries: true,\n },\n bind: {\n mouseup: (self, targ, handler) => {\n return (e) => {\n // Single click while paused will resume the graph\n // This makes it possible to resume in TlmViewer widgets\n if (this.state === 'pause' && self.select.width === 0) {\n this.$emit('start')\n }\n handler(e)\n }\n },\n },\n },\n hooks: {\n setScale: [\n (chart, key) => {\n if (key === 'x' && !this.zoomOverview && this.overview) {\n this.zoomChart = true\n let left = Math.round(\n this.overview.valToPos(chart.scales.x.min, 'x'),\n )\n let right = Math.round(\n this.overview.valToPos(chart.scales.x.max, 'x'),\n )\n this.overview.setSelect({ left, width: right - left })\n this.zoomChart = false\n }\n },\n ],\n setSelect: [\n (chart) => {\n // Pause the graph while selecting a range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n },\n ],\n ready: [\n (u) => {\n let canvas = u.root.querySelector('.u-over')\n canvas.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.itemMenu = false\n this.legendMenu = false\n this.editGraphMenuX = e.clientX\n this.editGraphMenuY = e.clientY\n this.editGraphMenu = true\n })\n let legend = u.root.querySelector('.u-legend')\n legend.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.editGraphMenu = false\n this.legendMenu = false\n this.itemMenuX = e.clientX\n this.itemMenuY = e.clientY\n // Grab the closest series and then figure out which index it is\n let seriesEl = e.target.closest('.u-series')\n let seriesIdx = Array.prototype.slice\n .call(legend.childNodes[0].childNodes)\n .indexOf(seriesEl)\n let series = u.series[seriesIdx]\n if (series.item) {\n this.selectedItem = series.item\n this.itemMenu = true\n } else {\n this.itemMenu = false\n this.legendMenuX = e.clientX\n this.legendMenuY = e.clientY\n this.legendMenu = true\n }\n })\n // Append the info to the legend\n legend.querySelector('tbody').appendChild(this.$refs.info)\n },\n ],\n },\n }\n this.graph = new uPlot(\n this.chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n\n this.overviewOpts = {\n ...this.getSize('overview'),\n ...this.getScales(),\n ...this.getAxes('overview'),\n // series: series, // TODO: Uncomment with the performance code\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [...overviewSeries],\n cursor: {\n y: false,\n drag: {\n setScale: false,\n x: true,\n y: false,\n },\n },\n legend: {\n show: false,\n },\n hooks: {\n setSelect: [\n (chart) => {\n if (!this.zoomChart) {\n // Pause the graph while selecting an overview range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n this.zoomOverview = true\n let min = chart.posToVal(chart.select.left, 'x')\n let max = chart.posToVal(\n chart.select.left + chart.select.width,\n 'x',\n )\n this.graph.setScale('x', { min, max })\n this.zoomOverview = false\n }\n },\n ],\n },\n }\n if (!this.hideOverview) {\n this.overview = new uPlot(\n this.overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`),\n )\n }\n this.moveLegend(this.legendPosition)\n\n // Allow the charts to dynamically resize when the window resizes\n window.addEventListener('resize', this.resize)\n }\n\n if (this.playbackMode !== 'playback') {\n if (this.state !== 'stop') {\n this.startGraph()\n }\n } else {\n this.setupPlaybackMode()\n }\n },\n beforeUnmount: function () {\n this.stopGraph()\n this.cable.disconnect()\n window.removeEventListener('resize', this.resize)\n },\n methods: {\n setupPlaybackMode: function () {\n this.stopGraph()\n this.clearAllData()\n const screenItems = this.itemSubscriptionKeys.map((key) => {\n return key.split('__').slice(2).join('__')\n })\n if (this.actualXAxisItem === DEFAULT_X_AXIS_ITEM) {\n // When in playback we don't have the DEFAULT_X_AXIS_ITEM '__time' available from the stream\n // So parse the first item and add the PACKET_TIMESECONDS from that target / packet\n const tgtpkt = screenItems[0].split('__').slice(0, 2).join('__')\n screenItems.unshift(`${tgtpkt}__PACKET_TIMESECONDS__RAW`)\n } else if (!this.xAxisIsAlsoGraphedItem) {\n // We need to add the x-axis item if it isn't already being graphed\n screenItems.unshift(this.actualXAxisItem)\n }\n this.api.get_tlm_available(screenItems).then((data) => {\n this.graphItems = data\n // This must be the same or we're going to have problems\n // because the data comes back in an ordered array\n if (screenItems.length != data.length) {\n // eslint-disable-next-line no-console\n console.log(\n 'Error getting tlm available',\n screenItems,\n this.graphItems,\n )\n }\n })\n },\n startGraph: function () {\n this.subscribe()\n this.interval = setInterval(() => {\n this.updateGraphData()\n }, this.refreshIntervalMs)\n },\n stopGraph: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n this.subscription = null\n }\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = null\n }\n },\n updateGraphData: function () {\n // Ignore changes to the data while we're paused\n if (this.state === 'pause' || !this.dataChanged) {\n return\n }\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n\n const xAxisData = this.data[0]\n if (xAxisData && xAxisData.length) {\n let max = xAxisData.at(-1)\n const possibleMinValues = [xAxisData.at(0)]\n if (this.pointsGraphed <= xAxisData.length) {\n possibleMinValues.push(xAxisData.at(-this.pointsGraphed))\n }\n if (this.xAxisIsTime) {\n possibleMinValues.push(max - this.secondsGraphed)\n }\n const min = Math.max(...possibleMinValues)\n if (min === max) {\n max += 1\n }\n this.graph.setScale('x', { min, max })\n }\n\n this.dataChanged = false\n },\n formatLabel(item) {\n if (item.valueType === 'CONVERTED' && item.reduced === 'DECOM') {\n return item.itemName\n } else {\n let description = ''\n // Only display valueType if we're not CONVERTED\n if (item.valueType !== 'CONVERTED') {\n description += item.valueType\n }\n // Only display reduced if we're not DECOM\n if (item.reduced !== 'DECOM') {\n // If we already have the valueType add a space\n if (description !== '') {\n description += ' '\n }\n description += `${item.reduced.split('_')[1]} ${item.reducedType}`\n }\n return `${item.itemName} (${description})`\n }\n },\n moveLegend: function (desired) {\n switch (desired) {\n case 'bottom':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.remove('top-legend')\n break\n case 'top':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('top-legend')\n break\n case 'left':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.add('side-legend')\n this.graph.root.classList.add('left-legend')\n break\n case 'right':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('side-legend')\n break\n }\n this.legendPosition = desired\n this.resize()\n },\n clearErrors: function () {\n this.errors = []\n },\n editGraphClose: function (graph) {\n this.editGraph = false\n this.title = graph.title\n // Don't need to copy items because we don't modify them\n this.legendPosition = graph.legendPosition\n this.graphMinY = graph.graphMinY\n this.graphMaxY = graph.graphMaxY\n this.lines = [...graph.lines]\n this.graphStartDateTime = graph.startDateTime\n this.graphEndDateTime = graph.endDateTime\n // Allow the watch to update needToUpdate\n this.$nextTick(() => {\n if (this.needToUpdate) {\n if (this.subscription == null) {\n this.startGraph()\n } else {\n // NOTE: removing and adding back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n // Clone the items first because removeItems modifies this.items\n let clonedItems = JSON.parse(JSON.stringify(this.items))\n this.removeItems(clonedItems)\n setTimeout(() => {\n this.addItems(clonedItems)\n }, 0)\n }\n this.needToUpdate = false\n }\n })\n this.moveLegend(this.legendPosition)\n this.$emit('edit')\n },\n resize: function () {\n this.graph.setSize(this.getSize('chart'))\n if (this.overview) {\n this.overview.setSize(this.getSize('overview'))\n }\n this.$emit('resize', this.id)\n },\n expandAll: function () {\n this.fullWidth = true\n this.fullHeight = true\n this.resize()\n },\n collapseAll: function () {\n this.fullWidth = false\n this.fullHeight = false\n this.resize()\n },\n expandWidth: function () {\n this.fullWidth = true\n this.resize()\n },\n collapseWidth: function () {\n this.fullWidth = false\n this.resize()\n },\n expandHeight: function () {\n this.fullHeight = true\n this.resize()\n },\n collapseHeight: function () {\n this.fullHeight = false\n this.resize()\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-graph', this.id)\n },\n setGraphRange: function () {\n let pad = 0.1\n if (\n this.graphMinY ||\n this.graphMinY === 0 ||\n this.graphMaxY ||\n this.graphMaxY === 0\n ) {\n pad = 0\n }\n this.graph.scales.y.range = (u, dataMin, dataMax) => {\n let min = dataMin\n if (this.graphMinY || this.graphMinY === 0) {\n min = this.graphMinY\n }\n let max = dataMax\n if (this.graphMaxY || this.graphMaxY === 0) {\n max = this.graphMaxY\n }\n return uPlot.rangeNum(min, max, pad, true)\n }\n },\n subscribe: function () {\n this.cable\n .createSubscription('StreamingChannel', window.openc3Scope, {\n received: (data) => this.received(data),\n connected: () => {\n const itemsToAdd = [...this.items]\n if (!this.xAxisIsDefault && !this.xAxisIsAlsoGraphedItem) {\n itemsToAdd.push(this.actualXAxisItem)\n }\n this.addItemsToSubscription(itemsToAdd)\n },\n disconnected: (data) => {\n // If allowReconnect is true it means we got a disconnect due to connection lost or server disconnect\n // If allowReconnect is false this is a normal server close or client close\n if (data.allowReconnect) {\n this.errors.push({\n type: 'disconnected',\n message: 'OpenC3 backend connection disconnected',\n time: new Date().getTime(),\n })\n }\n },\n rejected: () => {\n this.errors.push({\n type: 'rejected',\n message: 'OpenC3 backend connection rejected',\n time: new Date().getTime(),\n })\n },\n })\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n // throttle(cb, limit) {\n // let wait = false\n // return () => {\n // if (!wait) {\n // requestAnimationFrame(cb)\n // wait = true\n // setTimeout(() => {\n // wait = false\n // }, limit)\n // }\n // }\n // },\n getSize: function (type) {\n let navDrawerWidth = 0\n const navDrawer = document.getElementById('openc3-nav-drawer')\n if (navDrawer) {\n navDrawerWidth = navDrawer.classList.contains(\n 'v-navigation-drawer--active',\n )\n ? navDrawer.clientWidth\n : 0\n }\n let legendWidth = 0\n if (this.legendPosition === 'right' || this.legendPosition === 'left') {\n const legend = document.getElementsByClassName('u-legend')[0]\n legendWidth = legend.clientWidth\n }\n const viewWidth =\n Math.max(document.documentElement.clientWidth, window.innerWidth || 0) -\n navDrawerWidth -\n legendWidth\n const viewHeight = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0,\n )\n\n const panel = document.getElementsByClassName('v-expansion-panel')[0]\n let height = 100\n if (type === 'overview') {\n // Show overview if we're full height and we're not explicitly hiding it\n if (this.fullHeight && !this.hideOverviewData) {\n this.showOverview = true\n } else {\n this.showOverview = false\n }\n } else {\n // Height of chart is viewportSize - expansion-panel - overview - fudge factor (primarily padding)\n height = viewHeight - panel.clientHeight - height - 250\n if (!this.fullHeight) {\n height = height / 2.0 + 10 // 5px padding top and bottom\n }\n }\n // subtract off some arbitrary padding left and right to make the layout work\n let width = viewWidth - 70\n if (!this.fullWidth) {\n // 6px padding left and right defined in TlmGrapher.vue .item-content\n width = width / 2.0 - 12\n }\n return {\n width: this.width || width,\n height: this.height || height,\n }\n },\n getScales: function () {\n return {\n scales: {\n x: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) {\n if (this.xAxisIsTime) {\n return [1566453600, 1566497660]\n }\n return [0, 1]\n }\n return [dataMin, dataMax]\n },\n time: this.xAxisIsTime,\n },\n y: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [-100, 100]\n return uPlot.rangeNum(dataMin, dataMax, 0.1, true)\n },\n },\n },\n }\n },\n getAxes: function (type) {\n let strokeColor = 'rgba(255, 255, 255, .1)'\n let axisColor = 'white'\n return {\n axes: [\n {\n stroke: axisColor,\n grid: {\n show: true,\n stroke: strokeColor,\n width: 2,\n },\n },\n {\n size: 80, // This size supports values up to 8 digits plus sign\n stroke: axisColor,\n grid: {\n show: type === 'overview' ? false : true,\n stroke: strokeColor,\n width: 2,\n },\n // Forces the axis values to be formatted correctly\n // especially with really small or large values\n values(u, splits) {\n if (\n splits.some((el) => el >= 10000000) ||\n splits.every((el) => el < 0.01)\n ) {\n splits = splits.map((split) => split.toExponential(3))\n }\n return splits\n },\n },\n ],\n }\n },\n closeEditItem: function (event) {\n this.editItem = false\n if (\n // If we have an end time and anything was changed we basically regraph\n (this.graphEndDateTime !== null && this.selectedItem !== event) ||\n // If we're live graphing we just regraph if the types change\n this.selectedItem.valueType !== event.valueType ||\n this.selectedItem.reduced !== event.reduced ||\n this.selectedItem.reducedType !== event.reducedType\n ) {\n this.changeItem(event)\n }\n },\n changeColor: function (event) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].color = event\n this.selectedItem.color = event\n this.graph.root.querySelectorAll('.u-marker')[index].style.borderColor =\n event\n },\n changeLimits: function (limits) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].limits = limits\n this.selectedItem.limits = limits\n this.limitsValues = limits\n },\n linesPlugin: function () {\n return {\n hooks: {\n draw: (u) => {\n const { ctx, bbox } = u\n // These are all in canvas units\n const yMin = u.valToPos(u.scales.y.min, 'y', true)\n const yMax = u.valToPos(u.scales.y.max, 'y', true)\n const redLow = u.valToPos(this.limitsValues[0], 'y', true)\n const yellowLow = u.valToPos(this.limitsValues[1], 'y', true)\n const yellowHigh = u.valToPos(this.limitsValues[2], 'y', true)\n const redHigh = u.valToPos(this.limitsValues[3], 'y', true)\n\n // NOTE: These comparisons are tricky because the canvas\n // starts in the upper left with 0,0. Thus it grows downward\n // and to the right with increasing values. The comparisons\n // of scale and limitsValues use graph coordinates but the\n // fillRect calculations use the canvas coordinates.\n\n // Draw Y axis lines\n this.lines.forEach((line) => {\n if (\n u.scales.y.min <= line.yValue &&\n line.yValue <= u.scales.y.max\n ) {\n ctx.save()\n ctx.beginPath()\n ctx.strokeStyle = line.color\n ctx.lineWidth = 2\n ctx.moveTo(bbox.left, u.valToPos(line.yValue, 'y', true))\n ctx.lineTo(\n bbox.left + bbox.width,\n u.valToPos(line.yValue, 'y', true),\n )\n ctx.stroke()\n ctx.restore()\n }\n })\n\n ctx.save()\n ctx.beginPath()\n\n // Draw red limits\n ctx.fillStyle = 'rgba(255,0,0,0.15)'\n if (u.scales.y.min < this.limitsValues[0]) {\n let start = redLow < yMax ? yMax : redLow\n ctx.fillRect(bbox.left, redLow, bbox.width, yMin - start)\n }\n if (u.scales.y.max > this.limitsValues[3]) {\n let end = yMin < redHigh ? yMin : redHigh\n ctx.fillRect(bbox.left, yMax, bbox.width, end - yMax)\n }\n\n // Draw yellow limits\n ctx.fillStyle = 'rgba(255,255,0,0.15)'\n if (\n u.scales.y.min < this.limitsValues[1] && // yellowLow\n u.scales.y.max > this.limitsValues[0] // redLow\n ) {\n let start = yellowLow < yMax ? yMax : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, redLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[2] && // yellowHigh\n u.scales.y.min < this.limitsValues[3] // redHigh\n ) {\n let start = yMin < redHigh ? yMin : redHigh\n let end = yMin < yellowHigh ? yMin : yellowHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n\n // Draw green limits & operational limits\n ctx.fillStyle = 'rgba(0,255,0,0.15)'\n // If there are no operational limits the interior is all green\n if (this.limitsValues.length === 4) {\n // Determine if we show any green\n if (\n u.scales.y.min < this.limitsValues[2] && // yellowHigh\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = yellowHigh < yMax ? yMax : yellowHigh\n let end = yMin < yellowLow ? yMin : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n } else {\n // Operational limits\n const greenLow = u.valToPos(this.limitsValues[4], 'y', true)\n const greenHigh = u.valToPos(this.limitsValues[5], 'y', true)\n if (\n u.scales.y.min < this.limitsValues[4] && // greenLow\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = greenLow < yMax ? yMax : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, yellowLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[5] && // greenHigh\n u.scales.y.min < this.limitsValues[2] // yellowHigh\n ) {\n let start = yMin < yellowHigh ? yMin : yellowHigh\n let end = yMin < greenHigh ? yMin : greenHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.fillStyle = 'rgba(0,0,255,0.15)'\n let start = greenHigh < yMax ? yMax : greenHigh\n let end = yMin < greenLow ? yMin : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.stroke()\n ctx.restore()\n },\n },\n }\n },\n changeItem: function (event) {\n // NOTE: removing and adding items back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n this.removeItems([this.selectedItem])\n this.selectedItem.valueType = event.valueType\n this.selectedItem.reduced = event.reduced\n this.selectedItem.reducedType = event.reducedType\n setTimeout(() => {\n this.addItems([this.selectedItem])\n }, 0)\n },\n addItems: function (itemArray, type = 'CONVERTED') {\n itemArray.forEach((item) => {\n item.valueType ||= type // set the default type\n item.color ||= this.colors[this.colorIndex]\n item.limits ||= []\n\n if (item.limits.length > 0) {\n this.limitsValues = item.limits\n }\n\n this.colorIndex = (this.colorIndex + 1) % this.colors.length\n this.items.push(item)\n\n const index = this.data.length\n this.graph.addSeries(this.createSeriesConfig(item), index)\n\n if (this.overview) {\n this.overview.addSeries(this.createOverviewSeriesConfig(), index)\n }\n\n this.data.splice(index, 0, Array(this.data[0].length))\n this.indexes[this.subscriptionKey(item)] = index\n })\n\n this.updateColorIndex(itemArray)\n if (!this.xAxisIsDefault) {\n itemArray.push(this.actualXAxisItem)\n }\n this.addItemsToSubscription(itemArray)\n this.$emit('resize')\n this.$emit('edit')\n },\n createSeriesConfig: function (item) {\n return {\n spanGaps: true,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else if (rawValue == null) {\n return '--'\n } else if (\n (Math.abs(rawValue) < 0.01 && rawValue !== 0) ||\n Math.abs(rawValue) >= 10000000\n ) {\n return rawValue.toExponential(6)\n } else {\n return rawValue.toFixed(6)\n }\n },\n }\n },\n createOverviewSeriesConfig: function () {\n return {\n spanGaps: true,\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n }\n },\n updateColorIndex: function (itemArray) {\n const lastItem = itemArray[itemArray.length - 1]\n if (lastItem) {\n const index = this.colors.indexOf(lastItem.color)\n if (index !== -1) {\n this.colorIndex = (index + 1) % this.colors.length\n }\n }\n },\n addItemsToSubscription: function (itemArray = this.items) {\n let theStartTime = this.startTime\n if (this.graphStartDateTime) {\n theStartTime = this.graphStartDateTime\n }\n const items = itemArray.map((item) => {\n if (typeof item === 'object') {\n return this.subscriptionKey(item)\n } else if (typeof item === 'string') {\n return item\n } else {\n throw new Error(\n `Invalid subscription item type for ${item}: ${typeof item}`,\n )\n }\n })\n if (this.subscription) {\n OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(\n (refreshed) => {\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n this.subscription.perform('add', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: items,\n start_time: theStartTime,\n end_time: this.graphEndDateTime,\n })\n },\n )\n }\n },\n clearAllData: function () {\n // Clear all data so delete the time data as well\n this.data[0] = []\n this.clearData(this.items)\n },\n clearData: function (itemArray) {\n for (const key of itemArray.map(this.subscriptionKey)) {\n let index = this.indexes[key]\n this.data[index] = Array(this.data[0].length).fill(null)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n // data.length of 2 means we only have 1 item\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 2) {\n this.data[0] = []\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n },\n removeItems: function (itemArray) {\n this.removeItemsFromSubscription(itemArray)\n\n for (const key of itemArray.map(this.subscriptionKey)) {\n const index = this.reorderIndexes(key)\n this.items.splice(index - 1, 1)\n this.data.splice(index, 1)\n this.graph.delSeries(index)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.delSeries(index)\n this.overview.setData(this.data)\n }\n }\n // data.length of 1 means we've deleted all our items\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 1) {\n this.data[0] = []\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n this.$emit('resize')\n this.$emit('edit')\n },\n removeItemsFromSubscription: function (itemArray = this.items) {\n if (this.subscription) {\n const items = itemArray.map((item) => {\n if (typeof item === 'object') {\n return this.subscriptionKey(item)\n } else if (typeof item === 'string') {\n return item\n } else {\n throw new Error(\n `Invalid subscription item type for ${item}: ${typeof item}`,\n )\n }\n })\n this.subscription.perform('remove', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: items,\n })\n }\n },\n reorderIndexes: function (key) {\n let index = this.indexes[key]\n delete this.indexes[key]\n for (let i in this.indexes) {\n if (this.indexes[i] > index) {\n this.indexes[i] -= 1\n }\n }\n return index\n },\n received: function (data) {\n this.cable.recordPing()\n // TODO: Shouldn't get errors but should we handle this every time?\n // if (json_data.error) {\n // console.log(json_data.error)\n // return\n // }\n for (let i = 0; i < data.length; i++) {\n if (!data[i].hasOwnProperty(this.actualXAxisItem)) {\n // This happens if the streaming thread was already sending something when we switched xAxisItems.\n // Nothing we can do but throw away the point. It'll come back when the graph is reset anyway.\n continue\n }\n let xAxisVal = this.xAxisConverter(data[i][this.actualXAxisItem])\n let length = this.data[0].length\n if (length === 0 || xAxisVal > this.data[0][length - 1]) {\n // Nominal case - append new data to end\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].push(null)\n }\n this.setDataAtIndex(this.data[0].length - 1, xAxisVal, data[i])\n } else {\n let index = bs(this.data[0], xAxisVal, this.bsComparator)\n if (index >= 0) {\n // Found a slot with the exact same time value\n // Handle duplicate time by subtracting a small amount until we find an open slot\n if (!Number.isFinite(xAxisVal)) {\n // Make sure this exists so that we don't create an infinite loop\n // (Infinity or NaN -= 1e-5 results in Infinity or NaN)\n throw new RangeError(`Invalid x-axis value: ${xAxisVal}`)\n }\n while (index >= 0) {\n xAxisVal -= 1e-5 // Subtract a small amount (10 microseconds if x-axis is time in seconds)\n index = bs(this.data[0], xAxisVal, this.bsComparator)\n }\n // Now that we have a unique time, insert at the ideal index\n const idealIndex = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(idealIndex, 0, null)\n }\n // Use the adjusted time but keep the original data\n this.setDataAtIndex(idealIndex, xAxisVal, data[i])\n } else {\n // Insert a new null slot at the ideal index\n const idealIndex = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(idealIndex, 0, null)\n }\n this.setDataAtIndex(idealIndex, xAxisVal, data[i])\n }\n }\n }\n // If we weren't passed a startTime notify grapher of our start\n if (this.startTime == null && this.data[0][0]) {\n let newStartTime = this.data[0][0] * 1_000_000_000\n this.$emit('started', newStartTime)\n }\n this.dataChanged = true\n },\n bsComparator: function (element, needle) {\n return element - needle\n },\n setDataAtIndex: function (index, xAxisVal, newData) {\n this.data[0][index] = xAxisVal\n for (const [key, value] of Object.entries(newData)) {\n if (key === this.actualXAxisItem && !this.xAxisIsAlsoGraphedItem) {\n continue\n }\n const keyIndex = this.indexes[key]\n if (keyIndex) {\n let array = this.data[keyIndex]\n // NaN and Infinite values are sent as objects with raw attribute set\n // to 'NaN', '-Infinity', or 'Infinity', just set data to null\n if (value?.raw) {\n array[index] = null\n } else if (typeof value === 'string') {\n // Can't graph strings so just set to null\n array[index] = null\n // If it's not already RAW, change the type to RAW\n // NOTE: Some items are RAW strings so they won't ever work\n if (!key.includes('__RAW')) {\n for (let item of this.items) {\n if (this.subscriptionKey(item) === key) {\n this.selectedItem = item\n break\n }\n }\n this.changeItem({\n valueType: 'RAW',\n reduced: this.selectedItem.reduced,\n reducedType: this.selectedItem.reducedType,\n })\n }\n } else {\n array[index] = value\n }\n }\n }\n },\n subscriptionKey: function (item) {\n let key = `${item.reduced}__TLM__${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`\n if (\n item.reduced === 'REDUCED_MINUTE' ||\n item.reduced === 'REDUCED_HOUR' ||\n item.reduced === 'REDUCED_DAY'\n ) {\n key += `__${item.reducedType}`\n }\n return key\n },\n },\n}\n</script>\n\n<style>\n.v-window-item {\n background-color: var(--color-background-surface-default);\n}\n\n/* left right stacked legend */\n.uplot.side-legend {\n display: flex;\n width: auto;\n}\n\n.uplot.side-legend .u-wrap {\n flex: none;\n}\n\n.uplot.side-legend .u-legend {\n text-align: left;\n margin-left: 0;\n width: 220px;\n}\n\n.uplot.side-legend .u-legend,\n.uplot.side-legend .u-legend tr,\n.uplot.side-legend .u-legend th,\n.uplot.side-legend .u-legend td {\n display: revert;\n}\n\n/* left side we need to order the legend before the plot */\n.uplot.left-legend .u-legend {\n order: -1;\n}\n\n/* top legend */\n.uplot.top-legend {\n display: flex;\n flex-direction: column;\n}\n\n.uplot.top-legend .u-legend {\n order: -1;\n}\n\n/* This value is large enough to support negative scientific notation\n that we use on the value with rawValue.toExponential(6) */\n.u-legend.u-inline .u-series .u-value {\n width: 105px;\n}\n\n/* This value is large enough to support our date format: YYYY-MM-DD HH:MM:SS.sss */\n.u-legend.u-inline .u-series:first-child .u-value {\n width: 185px;\n}\n\n.u-select {\n background-color: rgba(255, 255, 255, 0.07);\n}\n</style>\n<style scoped>\n.active {\n background-color: var(--color-background-surface-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","TargetPacketItemChooser","TimeFilters","value","isValid","parse","itemId","item","date","toDate","dline","i","enabled","selection","xAxisItemKey","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_createBlock","_component_v_dialog","$options","$event","_ctx","_createVNode","_component_v_toolbar","_component_v_spacer","_cache","_createElementVNode","_component_v_card","_component_v_tabs","_component_v_tab","_component_v_tabs_window","_component_v_tabs_window_item","_component_v_row","_component_v_col","_component_v_card_text","_component_v_text_field","_component_v_select","_component_v_list","_component_v_list_item","_component_v_btn","_openBlock","_createElementBlock","_Fragment","$props","_component_v_checkbox","_component_target_packet_item_chooser","_component_v_data_table","_withCtx","_component_v_card_actions","OpenC3Api","details","key","_component_v_card_title","_toDisplayString","DEFAULT_X_AXIS_ITEM","GraphEditDialog","GraphEditItemDialog","Cable","targetName","packetName","val","timeItems","newState","oldState","_newState","_oldState","data","j","dateStr","dateObj","newData","oldData","newVal","oldVal","clonedItems","uPlot","index","chartSeries","overviewSeries","seriesObj","commonProps","u","seriesIdx","self","rawValue","timeZoneName","ts","v","targ","handler","e","chart","left","right","legend","seriesEl","series","min","max","screenItems","tgtpkt","xAxisData","possibleMinValues","description","desired","graph","pad","dataMin","dataMax","itemsToAdd","subscription","type","navDrawerWidth","navDrawer","legendWidth","viewWidth","viewHeight","panel","height","width","strokeColor","axisColor","splits","el","split","event","limits","ctx","bbox","yMin","yMax","redLow","yellowLow","yellowHigh","redHigh","line","start","end","greenLow","greenHigh","itemArray","lastItem","theStartTime","items","refreshed","xAxisVal","length","bs","idealIndex","newStartTime","element","needle","keyIndex","array","_normalizeClass","$data","_vShow","_component_v_expand_transition","_withDirectives","_component_graph_edit_dialog","_component_v_textarea","_component_v_menu","_component_v_list_item_title","_createTextVNode","_component_graph_edit_item_dialog","_component_v_list_subheader","_component_v_icon","_component_v_tooltip","props"],"mappings":"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"}