@openc3/vue-common 6.6.0 → 6.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/dist/{ArrayWidget-Bb_Ldxq7.cjs → ArrayWidget-DaONH8Iv.cjs} +2 -2
  2. package/dist/{ArrayWidget-Bb_Ldxq7.cjs.map → ArrayWidget-DaONH8Iv.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-Ck6pzAyW.js → ArrayWidget-j3ncPuPx.js} +4 -4
  4. package/dist/{ArrayWidget-Ck6pzAyW.js.map → ArrayWidget-j3ncPuPx.js.map} +1 -1
  5. package/dist/ArrayplotWidget-DPMVlst7.cjs +2 -0
  6. package/dist/ArrayplotWidget-DPMVlst7.cjs.map +1 -0
  7. package/dist/{ArrayplotWidget-ntRLh6-B.js → ArrayplotWidget-DuLaiGa9.js} +22 -22
  8. package/dist/ArrayplotWidget-DuLaiGa9.js.map +1 -0
  9. package/dist/{BarColumn-Bgz2YJ59.js → BarColumn-BWJ0Dd4O.js} +3 -3
  10. package/dist/{BarColumn-Bgz2YJ59.js.map → BarColumn-BWJ0Dd4O.js.map} +1 -1
  11. package/dist/{BarColumn-DtRNuOpa.cjs → BarColumn-CchXr_ex.cjs} +2 -2
  12. package/dist/{BarColumn-DtRNuOpa.cjs.map → BarColumn-CchXr_ex.cjs.map} +1 -1
  13. package/dist/{BlockWidget-DGH3Zz5p.js → BlockWidget-Bf5Dd6Cr.js} +4 -4
  14. package/dist/{BlockWidget-DGH3Zz5p.js.map → BlockWidget-Bf5Dd6Cr.js.map} +1 -1
  15. package/dist/{BlockWidget-DOY5lVfa.cjs → BlockWidget-CeDueZQ0.cjs} +2 -2
  16. package/dist/{BlockWidget-DOY5lVfa.cjs.map → BlockWidget-CeDueZQ0.cjs.map} +1 -1
  17. package/dist/{ButtonWidget-CFyZXGt6.cjs → ButtonWidget-BZulfQct.cjs} +3 -3
  18. package/dist/{ButtonWidget-CFyZXGt6.cjs.map → ButtonWidget-BZulfQct.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-D_tupiPB.js → ButtonWidget-bl_mGFYh.js} +17 -17
  20. package/dist/{ButtonWidget-D_tupiPB.js.map → ButtonWidget-bl_mGFYh.js.map} +1 -1
  21. package/dist/{CanvasWidget-C6dc7mUw.cjs → CanvasWidget-DwAXTAyn.cjs} +2 -2
  22. package/dist/{CanvasWidget-C6dc7mUw.cjs.map → CanvasWidget-DwAXTAyn.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-CzG2jYQb.js → CanvasWidget-boDemgx1.js} +2 -2
  24. package/dist/{CanvasWidget-CzG2jYQb.js.map → CanvasWidget-boDemgx1.js.map} +1 -1
  25. package/dist/{CanvasdotWidget-0FAaw4G2.js → CanvasdotWidget-BZBbJcER.js} +2 -2
  26. package/dist/{CanvasdotWidget-0FAaw4G2.js.map → CanvasdotWidget-BZBbJcER.js.map} +1 -1
  27. package/dist/{CanvasdotWidget-9bBVHC1l.cjs → CanvasdotWidget-ByJp9ZIa.cjs} +2 -2
  28. package/dist/{CanvasdotWidget-9bBVHC1l.cjs.map → CanvasdotWidget-ByJp9ZIa.cjs.map} +1 -1
  29. package/dist/{CanvasimageWidget-CNJlzLqo.js → CanvasimageWidget-6ywvT5jd.js} +3 -3
  30. package/dist/{CanvasimageWidget-CNJlzLqo.js.map → CanvasimageWidget-6ywvT5jd.js.map} +1 -1
  31. package/dist/{CanvasimageWidget-DjvdDCRS.cjs → CanvasimageWidget-BDprHuH3.cjs} +2 -2
  32. package/dist/{CanvasimageWidget-DjvdDCRS.cjs.map → CanvasimageWidget-BDprHuH3.cjs.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-C1fI-ftP.cjs → CanvasimagevalueWidget-Cl_EuzNC.cjs} +2 -2
  34. package/dist/{CanvasimagevalueWidget-C1fI-ftP.cjs.map → CanvasimagevalueWidget-Cl_EuzNC.cjs.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-DudwwOD6.js → CanvasimagevalueWidget-DjWrA3gX.js} +3 -3
  36. package/dist/{CanvasimagevalueWidget-DudwwOD6.js.map → CanvasimagevalueWidget-DjWrA3gX.js.map} +1 -1
  37. package/dist/{CanvaslabelWidget-BZQp16dH.js → CanvaslabelWidget-Bq4V2BQh.js} +2 -2
  38. package/dist/{CanvaslabelWidget-BZQp16dH.js.map → CanvaslabelWidget-Bq4V2BQh.js.map} +1 -1
  39. package/dist/{CanvaslabelWidget--6Sjc4E8.cjs → CanvaslabelWidget-aalWFBxK.cjs} +2 -2
  40. package/dist/{CanvaslabelWidget--6Sjc4E8.cjs.map → CanvaslabelWidget-aalWFBxK.cjs.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-CHS36Te9.js → CanvaslabelvalueWidget-C8oNcFLi.js} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-CHS36Te9.js.map → CanvaslabelvalueWidget-C8oNcFLi.js.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-DZCxsIKk.cjs → CanvaslabelvalueWidget-DIO0fADo.cjs} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-DZCxsIKk.cjs.map → CanvaslabelvalueWidget-DIO0fADo.cjs.map} +1 -1
  45. package/dist/{CanvaslineWidget-Bn83Rb10.cjs → CanvaslineWidget-CqNOzV_A.cjs} +2 -2
  46. package/dist/{CanvaslineWidget-Bn83Rb10.cjs.map → CanvaslineWidget-CqNOzV_A.cjs.map} +1 -1
  47. package/dist/{CanvaslineWidget-nhKEAGhs.js → CanvaslineWidget-nvbL2GoL.js} +2 -2
  48. package/dist/{CanvaslineWidget-nhKEAGhs.js.map → CanvaslineWidget-nvbL2GoL.js.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-C6x_4Gc9.cjs → CanvaslinevalueWidget-D0kOhxXn.cjs} +2 -2
  50. package/dist/{CanvaslinevalueWidget-C6x_4Gc9.cjs.map → CanvaslinevalueWidget-D0kOhxXn.cjs.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-DsyIDkJy.js → CanvaslinevalueWidget-ZACQedKx.js} +2 -2
  52. package/dist/{CanvaslinevalueWidget-DsyIDkJy.js.map → CanvaslinevalueWidget-ZACQedKx.js.map} +1 -1
  53. package/dist/{CheckbuttonWidget-DCam7Jd0.js → CheckbuttonWidget-B82UE8AB.js} +2 -2
  54. package/dist/{CheckbuttonWidget-DCam7Jd0.js.map → CheckbuttonWidget-B82UE8AB.js.map} +1 -1
  55. package/dist/{CheckbuttonWidget-BvggsGZY.cjs → CheckbuttonWidget-L9xyRwfS.cjs} +2 -2
  56. package/dist/{CheckbuttonWidget-BvggsGZY.cjs.map → CheckbuttonWidget-L9xyRwfS.cjs.map} +1 -1
  57. package/dist/ClassificationBanners-ZF9Ab7D0.cjs +2 -0
  58. package/dist/ClassificationBanners-ZF9Ab7D0.cjs.map +1 -0
  59. package/dist/ClassificationBanners-jiqWjTAZ.js +35 -0
  60. package/dist/ClassificationBanners-jiqWjTAZ.js.map +1 -0
  61. package/dist/{ComboboxWidget-ZX-k-_aK.js → ComboboxWidget-4OFiSkI6.js} +2 -2
  62. package/dist/{ComboboxWidget-ZX-k-_aK.js.map → ComboboxWidget-4OFiSkI6.js.map} +1 -1
  63. package/dist/{ComboboxWidget-BS5WSbrK.cjs → ComboboxWidget-6hmnB_mK.cjs} +2 -2
  64. package/dist/{ComboboxWidget-BS5WSbrK.cjs.map → ComboboxWidget-6hmnB_mK.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-7tOK2XQk.cjs → CriticalCmdDialog-C-UGhtjE.cjs} +2 -2
  66. package/dist/{CriticalCmdDialog-7tOK2XQk.cjs.map → CriticalCmdDialog-C-UGhtjE.cjs.map} +1 -1
  67. package/dist/{CriticalCmdDialog-Dylpoz_4.js → CriticalCmdDialog-FhXDdBn4.js} +9 -9
  68. package/dist/{CriticalCmdDialog-Dylpoz_4.js.map → CriticalCmdDialog-FhXDdBn4.js.map} +1 -1
  69. package/dist/CustomIcon-Bop2mEnu.cjs.map +1 -1
  70. package/dist/CustomIcon-h5X7369N.js.map +1 -1
  71. package/dist/{DateWidget-DuJ5uC2t.js → DateWidget-BmwtdirF.js} +2 -2
  72. package/dist/{DateWidget-DuJ5uC2t.js.map → DateWidget-BmwtdirF.js.map} +1 -1
  73. package/dist/{DateWidget-jejbk2-G.cjs → DateWidget-CmSp7svA.cjs} +2 -2
  74. package/dist/{DateWidget-jejbk2-G.cjs.map → DateWidget-CmSp7svA.cjs.map} +1 -1
  75. package/dist/{DetailsDialog-BQE0TraI.js → DetailsDialog-CLKEfU0s.js} +89 -89
  76. package/dist/DetailsDialog-CLKEfU0s.js.map +1 -0
  77. package/dist/DetailsDialog-DEicfRO1.cjs +2 -0
  78. package/dist/DetailsDialog-DEicfRO1.cjs.map +1 -0
  79. package/dist/DynamicWidget-BWEVCUfd.cjs.map +1 -1
  80. package/dist/DynamicWidget-CfMtj7H8.js.map +1 -1
  81. package/dist/{EventListDialog-CGUFCrJF.js → EventListDialog-BvSMSn7J.js} +52 -52
  82. package/dist/{EventListDialog-CGUFCrJF.js.map → EventListDialog-BvSMSn7J.js.map} +1 -1
  83. package/dist/EventListDialog-Em1RcH7I.cjs +2 -0
  84. package/dist/{EventListDialog-CDcJcxy5.cjs.map → EventListDialog-Em1RcH7I.cjs.map} +1 -1
  85. package/dist/{FormatvalueWidget-DYICPNcx.js → FormatvalueWidget-C8exC3bj.js} +3 -3
  86. package/dist/{FormatvalueWidget-DYICPNcx.js.map → FormatvalueWidget-C8exC3bj.js.map} +1 -1
  87. package/dist/{FormatvalueWidget-wu7Q3sXu.cjs → FormatvalueWidget-auKALSPC.cjs} +2 -2
  88. package/dist/{FormatvalueWidget-wu7Q3sXu.cjs.map → FormatvalueWidget-auKALSPC.cjs.map} +1 -1
  89. package/dist/Graph-BJqtVAaV.cjs +2 -0
  90. package/dist/Graph-BJqtVAaV.cjs.map +1 -0
  91. package/dist/Graph-CWcrowaT.js +2662 -0
  92. package/dist/Graph-CWcrowaT.js.map +1 -0
  93. package/dist/GraphWidget-BroqS0SO.cjs +2 -0
  94. package/dist/{GraphWidget-CQjKAMPR.cjs.map → GraphWidget-BroqS0SO.cjs.map} +1 -1
  95. package/dist/{GraphWidget-cTVq29cY.js → GraphWidget-CvzxZYVx.js} +31 -44
  96. package/dist/{GraphWidget-cTVq29cY.js.map → GraphWidget-CvzxZYVx.js.map} +1 -1
  97. package/dist/{HorizontalWidget-v1pfd94Z.js → HorizontalWidget-Ck151zVw.js} +6 -6
  98. package/dist/{HorizontalWidget-v1pfd94Z.js.map → HorizontalWidget-Ck151zVw.js.map} +1 -1
  99. package/dist/HorizontalWidget-DBeyBZCp.cjs +2 -0
  100. package/dist/{HorizontalWidget--AkRJPlL.cjs.map → HorizontalWidget-DBeyBZCp.cjs.map} +1 -1
  101. package/dist/HorizontalboxWidget-CuWtYdgh.cjs +2 -0
  102. package/dist/{HorizontalboxWidget-synL-Bar.cjs.map → HorizontalboxWidget-CuWtYdgh.cjs.map} +1 -1
  103. package/dist/{HorizontalboxWidget-B06-c_n4.js → HorizontalboxWidget-D3P-cl9V.js} +15 -15
  104. package/dist/{HorizontalboxWidget-B06-c_n4.js.map → HorizontalboxWidget-D3P-cl9V.js.map} +1 -1
  105. package/dist/{HorizontallineWidget-DEODVJCk.js → HorizontallineWidget-BE1TjPU8.js} +2 -2
  106. package/dist/{HorizontallineWidget-DEODVJCk.js.map → HorizontallineWidget-BE1TjPU8.js.map} +1 -1
  107. package/dist/{HorizontallineWidget-lTr2JTFY.cjs → HorizontallineWidget-QUFjdOSu.cjs} +2 -2
  108. package/dist/{HorizontallineWidget-lTr2JTFY.cjs.map → HorizontallineWidget-QUFjdOSu.cjs.map} +1 -1
  109. package/dist/{IframeWidget-n8lNXrpt.js → IframeWidget-BgJCgues.js} +2 -2
  110. package/dist/{IframeWidget-n8lNXrpt.js.map → IframeWidget-BgJCgues.js.map} +1 -1
  111. package/dist/{IframeWidget-ByhwW9yG.cjs → IframeWidget-DOZ1YyS2.cjs} +2 -2
  112. package/dist/{IframeWidget-ByhwW9yG.cjs.map → IframeWidget-DOZ1YyS2.cjs.map} +1 -1
  113. package/dist/{ImageLoader-DBWVFtNu.cjs → ImageLoader-AGF0VbZ5.cjs} +2 -2
  114. package/dist/{ImageLoader-DBWVFtNu.cjs.map → ImageLoader-AGF0VbZ5.cjs.map} +1 -1
  115. package/dist/{ImageLoader-CfcErydq.js → ImageLoader-CWn-PLOk.js} +2 -2
  116. package/dist/{ImageLoader-CfcErydq.js.map → ImageLoader-CWn-PLOk.js.map} +1 -1
  117. package/dist/{ImageviewerWidget-DE8fj06Z.js → ImageviewerWidget-BlhFZD2f.js} +2 -2
  118. package/dist/{ImageviewerWidget-DE8fj06Z.js.map → ImageviewerWidget-BlhFZD2f.js.map} +1 -1
  119. package/dist/{ImageviewerWidget-D4mU6wLX.cjs → ImageviewerWidget-DnmhYP68.cjs} +2 -2
  120. package/dist/{ImageviewerWidget-D4mU6wLX.cjs.map → ImageviewerWidget-DnmhYP68.cjs.map} +1 -1
  121. package/dist/{InterfacesTab-DTAAIx-y.cjs → InterfacesTab-76UJTIwF.cjs} +2 -2
  122. package/dist/{InterfacesTab-DTAAIx-y.cjs.map → InterfacesTab-76UJTIwF.cjs.map} +1 -1
  123. package/dist/{InterfacesTab-BF-Wx5gk.js → InterfacesTab-Cwz-zG7j.js} +3 -3
  124. package/dist/{InterfacesTab-BF-Wx5gk.js.map → InterfacesTab-Cwz-zG7j.js.map} +1 -1
  125. package/dist/{LabelWidget-DQZqRxKF.cjs → LabelWidget-C0DhD9Mn.cjs} +2 -2
  126. package/dist/{LabelWidget-DQZqRxKF.cjs.map → LabelWidget-C0DhD9Mn.cjs.map} +1 -1
  127. package/dist/{LabelWidget-iUIJLhdA.js → LabelWidget-Cwosk4x2.js} +2 -2
  128. package/dist/{LabelWidget-iUIJLhdA.js.map → LabelWidget-Cwosk4x2.js.map} +1 -1
  129. package/dist/{LabelledWidget-9HWChRmv.cjs → LabelledWidget-D8-aKfA_.cjs} +2 -2
  130. package/dist/{LabelledWidget-9HWChRmv.cjs.map → LabelledWidget-D8-aKfA_.cjs.map} +1 -1
  131. package/dist/{LabelledWidget-KI6fMlsr.js → LabelledWidget-Dl6rAFTQ.js} +4 -4
  132. package/dist/{LabelledWidget-KI6fMlsr.js.map → LabelledWidget-Dl6rAFTQ.js.map} +1 -1
  133. package/dist/{LabelprogressbarWidget-DwzTP73u.cjs → LabelprogressbarWidget-DosPhvaY.cjs} +2 -2
  134. package/dist/{LabelprogressbarWidget-DwzTP73u.cjs.map → LabelprogressbarWidget-DosPhvaY.cjs.map} +1 -1
  135. package/dist/{LabelprogressbarWidget-C2lzmqBH.js → LabelprogressbarWidget-MuAKesOz.js} +4 -4
  136. package/dist/{LabelprogressbarWidget-C2lzmqBH.js.map → LabelprogressbarWidget-MuAKesOz.js.map} +1 -1
  137. package/dist/{LabelsparklineWidget-Ci6GGm29.js → LabelsparklineWidget-6LA6Ox3d.js} +4 -4
  138. package/dist/{LabelsparklineWidget-Ci6GGm29.js.map → LabelsparklineWidget-6LA6Ox3d.js.map} +1 -1
  139. package/dist/{LabelsparklineWidget-DMjBshq8.cjs → LabelsparklineWidget-CLU8722I.cjs} +2 -2
  140. package/dist/{LabelsparklineWidget-DMjBshq8.cjs.map → LabelsparklineWidget-CLU8722I.cjs.map} +1 -1
  141. package/dist/{LabelvalueWidget-oiW-JDw6.js → LabelvalueWidget-BxAXx-Tf.js} +4 -4
  142. package/dist/{LabelvalueWidget-oiW-JDw6.js.map → LabelvalueWidget-BxAXx-Tf.js.map} +1 -1
  143. package/dist/{LabelvalueWidget-mAb0eLA8.cjs → LabelvalueWidget-WP4gK29n.cjs} +2 -2
  144. package/dist/{LabelvalueWidget-mAb0eLA8.cjs.map → LabelvalueWidget-WP4gK29n.cjs.map} +1 -1
  145. package/dist/{LabelvaluedescWidget-CZJ0kZN-.cjs → LabelvaluedescWidget-BQ-6OXHc.cjs} +2 -2
  146. package/dist/{LabelvaluedescWidget-CZJ0kZN-.cjs.map → LabelvaluedescWidget-BQ-6OXHc.cjs.map} +1 -1
  147. package/dist/{LabelvaluedescWidget-Ck0AJ9g0.js → LabelvaluedescWidget-Dwwlnd1g.js} +5 -5
  148. package/dist/{LabelvaluedescWidget-Ck0AJ9g0.js.map → LabelvaluedescWidget-Dwwlnd1g.js.map} +1 -1
  149. package/dist/{LabelvaluelimitsbarWidget-aaVLaejn.js → LabelvaluelimitsbarWidget-Dv8Qk8kK.js} +4 -4
  150. package/dist/{LabelvaluelimitsbarWidget-aaVLaejn.js.map → LabelvaluelimitsbarWidget-Dv8Qk8kK.js.map} +1 -1
  151. package/dist/{LabelvaluelimitsbarWidget-DjBqYxRr.cjs → LabelvaluelimitsbarWidget-Z_7ARnvo.cjs} +2 -2
  152. package/dist/{LabelvaluelimitsbarWidget-DjBqYxRr.cjs.map → LabelvaluelimitsbarWidget-Z_7ARnvo.cjs.map} +1 -1
  153. package/dist/{LabelvaluelimitscolumnWidget-Uur6aqOg.js → LabelvaluelimitscolumnWidget-D-_gl6fq.js} +5 -5
  154. package/dist/{LabelvaluelimitscolumnWidget-Uur6aqOg.js.map → LabelvaluelimitscolumnWidget-D-_gl6fq.js.map} +1 -1
  155. package/dist/{LabelvaluelimitscolumnWidget-GputlDZq.cjs → LabelvaluelimitscolumnWidget-DiO1b01N.cjs} +2 -2
  156. package/dist/{LabelvaluelimitscolumnWidget-GputlDZq.cjs.map → LabelvaluelimitscolumnWidget-DiO1b01N.cjs.map} +1 -1
  157. package/dist/{LabelvaluerangebarWidget-Bs9locqu.js → LabelvaluerangebarWidget-B3MKT-3Y.js} +4 -4
  158. package/dist/{LabelvaluerangebarWidget-Bs9locqu.js.map → LabelvaluerangebarWidget-B3MKT-3Y.js.map} +1 -1
  159. package/dist/{LabelvaluerangebarWidget-Ci-n_hxk.cjs → LabelvaluerangebarWidget-DtajHP0b.cjs} +2 -2
  160. package/dist/{LabelvaluerangebarWidget-Ci-n_hxk.cjs.map → LabelvaluerangebarWidget-DtajHP0b.cjs.map} +1 -1
  161. package/dist/{Layout-1z8iJV5-.js → Layout-Bkb6VP3e.js} +2 -2
  162. package/dist/{Layout-1z8iJV5-.js.map → Layout-Bkb6VP3e.js.map} +1 -1
  163. package/dist/Layout-CSbYbZWA.cjs +2 -0
  164. package/dist/{Layout-kOQnicRa.cjs.map → Layout-CSbYbZWA.cjs.map} +1 -1
  165. package/dist/{LedWidget-BN8IgAxJ.js → LedWidget-DOuDD8LI.js} +6 -6
  166. package/dist/LedWidget-DOuDD8LI.js.map +1 -0
  167. package/dist/LedWidget-DeREi8-u.cjs +2 -0
  168. package/dist/LedWidget-DeREi8-u.cjs.map +1 -0
  169. package/dist/LimitsbarWidget-BHr3IcIx.cjs +2 -0
  170. package/dist/{LimitsbarWidget-Co5GAHro.cjs.map → LimitsbarWidget-BHr3IcIx.cjs.map} +1 -1
  171. package/dist/{LimitsbarWidget-BxxoKTjp.js → LimitsbarWidget-D1U6SvVL.js} +4 -4
  172. package/dist/{LimitsbarWidget-BxxoKTjp.js.map → LimitsbarWidget-D1U6SvVL.js.map} +1 -1
  173. package/dist/{LimitscolorWidget-BpTcgqRC.cjs → LimitscolorWidget-BUkKRrSL.cjs} +2 -2
  174. package/dist/{LimitscolorWidget-BpTcgqRC.cjs.map → LimitscolorWidget-BUkKRrSL.cjs.map} +1 -1
  175. package/dist/{LimitscolorWidget-DFDwf4In.js → LimitscolorWidget-iSMGusqt.js} +2 -2
  176. package/dist/{LimitscolorWidget-DFDwf4In.js.map → LimitscolorWidget-iSMGusqt.js.map} +1 -1
  177. package/dist/{LimitscolumnWidget-CqJJKDzz.cjs → LimitscolumnWidget-COfNnb6f.cjs} +2 -2
  178. package/dist/{LimitscolumnWidget-CqJJKDzz.cjs.map → LimitscolumnWidget-COfNnb6f.cjs.map} +1 -1
  179. package/dist/{LimitscolumnWidget-CdBh2mJu.js → LimitscolumnWidget-DjxZTt_r.js} +4 -4
  180. package/dist/{LimitscolumnWidget-CdBh2mJu.js.map → LimitscolumnWidget-DjxZTt_r.js.map} +1 -1
  181. package/dist/{LinegraphWidget-jXksfbPb.js → LinegraphWidget-BHKU6zlT.js} +13 -13
  182. package/dist/LinegraphWidget-BHKU6zlT.js.map +1 -0
  183. package/dist/LinegraphWidget-RleSRWKa.cjs +2 -0
  184. package/dist/LinegraphWidget-RleSRWKa.cjs.map +1 -0
  185. package/dist/{MatrixbycolumnsWidget-DCwxPjwS.js → MatrixbycolumnsWidget-BKO-A2QD.js} +4 -4
  186. package/dist/{MatrixbycolumnsWidget-DCwxPjwS.js.map → MatrixbycolumnsWidget-BKO-A2QD.js.map} +1 -1
  187. package/dist/MatrixbycolumnsWidget-DWouVj7A.cjs +2 -0
  188. package/dist/{MatrixbycolumnsWidget-DxRhvPGv.cjs.map → MatrixbycolumnsWidget-DWouVj7A.cjs.map} +1 -1
  189. package/dist/{MicroservicesTab-DGaTcj-y.cjs → MicroservicesTab-L6qMAy4x.cjs} +2 -2
  190. package/dist/{MicroservicesTab-DGaTcj-y.cjs.map → MicroservicesTab-L6qMAy4x.cjs.map} +1 -1
  191. package/dist/{MicroservicesTab-B-SdMwek.js → MicroservicesTab-xLup6THU.js} +4 -4
  192. package/dist/{MicroservicesTab-B-SdMwek.js.map → MicroservicesTab-xLup6THU.js.map} +1 -1
  193. package/dist/{Openc3Screen-BZN0Wtrm.js → Openc3Screen-1rQ_Dbp4.js} +585 -452
  194. package/dist/Openc3Screen-1rQ_Dbp4.js.map +1 -0
  195. package/dist/Openc3Screen-BHHnSEoI.cjs +6 -0
  196. package/dist/Openc3Screen-BHHnSEoI.cjs.map +1 -0
  197. package/dist/{OutputDialog-CxKDhrg6.cjs → OutputDialog-DgM7aoa-.cjs} +2 -2
  198. package/dist/{OutputDialog-CxKDhrg6.cjs.map → OutputDialog-DgM7aoa-.cjs.map} +1 -1
  199. package/dist/{OutputDialog-CcSp-Uqo.js → OutputDialog-Ut5cXGxQ.js} +12 -12
  200. package/dist/{OutputDialog-CcSp-Uqo.js.map → OutputDialog-Ut5cXGxQ.js.map} +1 -1
  201. package/dist/{PackagesTab-Dx25CfF0.js → PackagesTab-ChJDyU3Z.js} +17 -17
  202. package/dist/{PackagesTab-Dx25CfF0.js.map → PackagesTab-ChJDyU3Z.js.map} +1 -1
  203. package/dist/PackagesTab-jqsRJEcJ.cjs +2 -0
  204. package/dist/{PackagesTab-B4V2n4io.cjs.map → PackagesTab-jqsRJEcJ.cjs.map} +1 -1
  205. package/dist/PluginsTab-CayzDij0.js +1340 -0
  206. package/dist/PluginsTab-CayzDij0.js.map +1 -0
  207. package/dist/PluginsTab-DYEv8EPg.cjs +6 -0
  208. package/dist/PluginsTab-DYEv8EPg.cjs.map +1 -0
  209. package/dist/{ProgressbarWidget-C0AkbX_o.cjs → ProgressbarWidget-Xba7gDbW.cjs} +2 -2
  210. package/dist/{ProgressbarWidget-C0AkbX_o.cjs.map → ProgressbarWidget-Xba7gDbW.cjs.map} +1 -1
  211. package/dist/{ProgressbarWidget-Cdu5nJC3.js → ProgressbarWidget-fbr2qu_N.js} +2 -2
  212. package/dist/{ProgressbarWidget-Cdu5nJC3.js.map → ProgressbarWidget-fbr2qu_N.js.map} +1 -1
  213. package/dist/{RadiobuttonWidget-DslmJO31.cjs → RadiobuttonWidget-CdpKw7jr.cjs} +2 -2
  214. package/dist/{RadiobuttonWidget-DslmJO31.cjs.map → RadiobuttonWidget-CdpKw7jr.cjs.map} +1 -1
  215. package/dist/{RadiobuttonWidget-CZZGbvdG.js → RadiobuttonWidget-DL08zcQT.js} +2 -2
  216. package/dist/{RadiobuttonWidget-CZZGbvdG.js.map → RadiobuttonWidget-DL08zcQT.js.map} +1 -1
  217. package/dist/{RadiogroupWidget-DKgBAR9E.cjs → RadiogroupWidget-DSA8ENmw.cjs} +2 -2
  218. package/dist/{RadiogroupWidget-DKgBAR9E.cjs.map → RadiogroupWidget-DSA8ENmw.cjs.map} +1 -1
  219. package/dist/{RadiogroupWidget-CQN3v8Ip.js → RadiogroupWidget-DW9Xpj3c.js} +2 -2
  220. package/dist/{RadiogroupWidget-CQN3v8Ip.js.map → RadiogroupWidget-DW9Xpj3c.js.map} +1 -1
  221. package/dist/{RangebarWidget-Tq80I5zA.cjs → RangebarWidget-B4oRyUwG.cjs} +2 -2
  222. package/dist/{RangebarWidget-Tq80I5zA.cjs.map → RangebarWidget-B4oRyUwG.cjs.map} +1 -1
  223. package/dist/{RangebarWidget-dZN9WjoZ.js → RangebarWidget-o9q55kjc.js} +4 -4
  224. package/dist/{RangebarWidget-dZN9WjoZ.js.map → RangebarWidget-o9q55kjc.js.map} +1 -1
  225. package/dist/RedisTab-BGz2ZN9T.js +171 -0
  226. package/dist/RedisTab-BGz2ZN9T.js.map +1 -0
  227. package/dist/RedisTab-Uqcfgux1.cjs +2 -0
  228. package/dist/RedisTab-Uqcfgux1.cjs.map +1 -0
  229. package/dist/{RollupWidget-CHdZAUCb.cjs → RollupWidget-43v3NX_Z.cjs} +2 -2
  230. package/dist/{RollupWidget-CHdZAUCb.cjs.map → RollupWidget-43v3NX_Z.cjs.map} +1 -1
  231. package/dist/{RollupWidget-i9DnNJl6.js → RollupWidget-BHnjj-DF.js} +2 -2
  232. package/dist/{RollupWidget-i9DnNJl6.js.map → RollupWidget-BHnjj-DF.js.map} +1 -1
  233. package/dist/{RoutersTab-Cp8wM-mS.cjs → RoutersTab-Be53r61Y.cjs} +2 -2
  234. package/dist/{RoutersTab-Cp8wM-mS.cjs.map → RoutersTab-Be53r61Y.cjs.map} +1 -1
  235. package/dist/{RoutersTab-DiYEI1Nq.js → RoutersTab-CCEPlZ_Y.js} +3 -3
  236. package/dist/{RoutersTab-DiYEI1Nq.js.map → RoutersTab-CCEPlZ_Y.js.map} +1 -1
  237. package/dist/{ScriptChooser-BnTP6ucF.cjs → ScriptChooser-B6TGFTBN.cjs} +2 -2
  238. package/dist/{ScriptChooser-BnTP6ucF.cjs.map → ScriptChooser-B6TGFTBN.cjs.map} +1 -1
  239. package/dist/{ScriptChooser-Cua8ObYv.js → ScriptChooser-CXjcm3bN.js} +2 -2
  240. package/dist/{ScriptChooser-Cua8ObYv.js.map → ScriptChooser-CXjcm3bN.js.map} +1 -1
  241. package/dist/{ScrollwindowWidget-54GU96Ve.js → ScrollwindowWidget-D-QVwztC.js} +15 -15
  242. package/dist/ScrollwindowWidget-D-QVwztC.js.map +1 -0
  243. package/dist/ScrollwindowWidget-D6ZHZr3o.cjs +2 -0
  244. package/dist/ScrollwindowWidget-D6ZHZr3o.cjs.map +1 -0
  245. package/dist/{SecretsTab-DY16usGc.cjs → SecretsTab-DDZ1VoUf.cjs} +2 -2
  246. package/dist/{SecretsTab-DY16usGc.cjs.map → SecretsTab-DDZ1VoUf.cjs.map} +1 -1
  247. package/dist/{SecretsTab-uWRVI1EE.js → SecretsTab-vVy356vr.js} +7 -7
  248. package/dist/{SecretsTab-uWRVI1EE.js.map → SecretsTab-vVy356vr.js.map} +1 -1
  249. package/dist/SettingsTab-CbWrf7U9.js +1763 -0
  250. package/dist/SettingsTab-CbWrf7U9.js.map +1 -0
  251. package/dist/SettingsTab-DsIVE5UL.cjs +3 -0
  252. package/dist/SettingsTab-DsIVE5UL.cjs.map +1 -0
  253. package/dist/{SignalWidget-B_kA9eCJ.js → SignalWidget-CsWuufdx.js} +2 -2
  254. package/dist/{SignalWidget-B_kA9eCJ.js.map → SignalWidget-CsWuufdx.js.map} +1 -1
  255. package/dist/{SignalWidget-COL8kXSJ.cjs → SignalWidget-CysAE9ZG.cjs} +2 -2
  256. package/dist/{SignalWidget-COL8kXSJ.cjs.map → SignalWidget-CysAE9ZG.cjs.map} +1 -1
  257. package/dist/{SimpleTextDialog-BWUqPlTv.cjs → SimpleTextDialog-CU6G5CBY.cjs} +2 -2
  258. package/dist/{SimpleTextDialog-BWUqPlTv.cjs.map → SimpleTextDialog-CU6G5CBY.cjs.map} +1 -1
  259. package/dist/{SimpleTextDialog-BulqUrdH.js → SimpleTextDialog-ChV5vRcV.js} +5 -5
  260. package/dist/{SimpleTextDialog-BulqUrdH.js.map → SimpleTextDialog-ChV5vRcV.js.map} +1 -1
  261. package/dist/{SpacerWidget-D_Ya_b1j.cjs → SpacerWidget-ChNk5TFU.cjs} +2 -2
  262. package/dist/{SpacerWidget-D_Ya_b1j.cjs.map → SpacerWidget-ChNk5TFU.cjs.map} +1 -1
  263. package/dist/{SpacerWidget-XoMPHak8.js → SpacerWidget-Di9-qunj.js} +2 -2
  264. package/dist/{SpacerWidget-XoMPHak8.js.map → SpacerWidget-Di9-qunj.js.map} +1 -1
  265. package/dist/{SparklineWidget-DQNsvEj9.js → SparklineWidget-B6-zhdPW.js} +4 -4
  266. package/dist/{SparklineWidget-DQNsvEj9.js.map → SparklineWidget-B6-zhdPW.js.map} +1 -1
  267. package/dist/{SparklineWidget-CRzXTS5z.cjs → SparklineWidget-D1tVqSRL.cjs} +2 -2
  268. package/dist/{SparklineWidget-CRzXTS5z.cjs.map → SparklineWidget-D1tVqSRL.cjs.map} +1 -1
  269. package/dist/{TabbookWidget-_HVA72t5.js → TabbookWidget-B1E1_mzA.js} +2 -2
  270. package/dist/{TabbookWidget-_HVA72t5.js.map → TabbookWidget-B1E1_mzA.js.map} +1 -1
  271. package/dist/{TabbookWidget-Bh-GDBXg.cjs → TabbookWidget-Btg-Axid.cjs} +2 -2
  272. package/dist/{TabbookWidget-Bh-GDBXg.cjs.map → TabbookWidget-Btg-Axid.cjs.map} +1 -1
  273. package/dist/{TargetsTab-BfoRYnTP.js → TargetsTab-DbbQcBuK.js} +3 -3
  274. package/dist/{TargetsTab-BfoRYnTP.js.map → TargetsTab-DbbQcBuK.js.map} +1 -1
  275. package/dist/{TargetsTab-CGE-jQAz.cjs → TargetsTab-pbmAAkOA.cjs} +2 -2
  276. package/dist/{TargetsTab-CGE-jQAz.cjs.map → TargetsTab-pbmAAkOA.cjs.map} +1 -1
  277. package/dist/{TextBoxDialog-C60jmnyN.js → TextBoxDialog-CdFHdj5W.js} +4 -4
  278. package/dist/{TextBoxDialog-C60jmnyN.js.map → TextBoxDialog-CdFHdj5W.js.map} +1 -1
  279. package/dist/{TextBoxDialog-DWt30tB8.cjs → TextBoxDialog-DbD8P4Xc.cjs} +2 -2
  280. package/dist/{TextBoxDialog-DWt30tB8.cjs.map → TextBoxDialog-DbD8P4Xc.cjs.map} +1 -1
  281. package/dist/{TextboxWidget-0JXn4bMH.js → TextboxWidget-CBVEXPw_.js} +4 -4
  282. package/dist/{TextboxWidget-0JXn4bMH.js.map → TextboxWidget-CBVEXPw_.js.map} +1 -1
  283. package/dist/{TextboxWidget-uDptDK_z.cjs → TextboxWidget-CHXcR8lA.cjs} +2 -2
  284. package/dist/{TextboxWidget-uDptDK_z.cjs.map → TextboxWidget-CHXcR8lA.cjs.map} +1 -1
  285. package/dist/{TextfieldWidget-BXr9MkVW.js → TextfieldWidget-DZMHrtQa.js} +2 -2
  286. package/dist/{TextfieldWidget-BXr9MkVW.js.map → TextfieldWidget-DZMHrtQa.js.map} +1 -1
  287. package/dist/{TextfieldWidget-B0FCskrL.cjs → TextfieldWidget-vSJ9CtKs.cjs} +2 -2
  288. package/dist/{TextfieldWidget-B0FCskrL.cjs.map → TextfieldWidget-vSJ9CtKs.cjs.map} +1 -1
  289. package/dist/{TimeWidget-q5tUvHC6.cjs → TimeWidget-ClkxS_oo.cjs} +2 -2
  290. package/dist/{TimeWidget-q5tUvHC6.cjs.map → TimeWidget-ClkxS_oo.cjs.map} +1 -1
  291. package/dist/{TimeWidget-C67uwMGH.js → TimeWidget-K4MNmJ7J.js} +2 -2
  292. package/dist/{TimeWidget-C67uwMGH.js.map → TimeWidget-K4MNmJ7J.js.map} +1 -1
  293. package/dist/{TitleWidget-t_YLgUMB.js → TitleWidget-8IcwweFE.js} +2 -2
  294. package/dist/{TitleWidget-t_YLgUMB.js.map → TitleWidget-8IcwweFE.js.map} +1 -1
  295. package/dist/{TitleWidget-REsd7MqR.cjs → TitleWidget-DJJ17ATm.cjs} +2 -2
  296. package/dist/{TitleWidget-REsd7MqR.cjs.map → TitleWidget-DJJ17ATm.cjs.map} +1 -1
  297. package/dist/ToolsTab-BkabqeR_.cjs +7 -0
  298. package/dist/{ToolsTab-CGztf9_j.cjs.map → ToolsTab-BkabqeR_.cjs.map} +1 -1
  299. package/dist/{ToolsTab-DKYeIlXu.js → ToolsTab-tkganPCk.js} +6 -6
  300. package/dist/{ToolsTab-DKYeIlXu.js.map → ToolsTab-tkganPCk.js.map} +1 -1
  301. package/dist/{TopBar-BrCfgCxc.js → TopBar-BoI8SRaF.js} +10 -10
  302. package/dist/{TopBar-BrCfgCxc.js.map → TopBar-BoI8SRaF.js.map} +1 -1
  303. package/dist/TopBar-zJvwq8pr.cjs +2 -0
  304. package/dist/{TopBar-B0UcAtIW.cjs.map → TopBar-zJvwq8pr.cjs.map} +1 -1
  305. package/dist/{UpgradeToEnterpriseDialog-CGyR2v7U.js → UpgradeToEnterpriseDialog-BYz9YoyY.js} +9 -9
  306. package/dist/{UpgradeToEnterpriseDialog-CGyR2v7U.js.map → UpgradeToEnterpriseDialog-BYz9YoyY.js.map} +1 -1
  307. package/dist/{UpgradeToEnterpriseDialog-DJ3oth3I.cjs → UpgradeToEnterpriseDialog-BxHUptQB.cjs} +2 -2
  308. package/dist/{UpgradeToEnterpriseDialog-DJ3oth3I.cjs.map → UpgradeToEnterpriseDialog-BxHUptQB.cjs.map} +1 -1
  309. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BflJrsRh.cjs +1498 -0
  310. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BflJrsRh.cjs.map +1 -0
  311. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-quWsUlLr.js} +12916 -12652
  312. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-quWsUlLr.js.map +1 -0
  313. package/dist/VWidget-3ziiUuPM.cjs +2 -0
  314. package/dist/VWidget-3ziiUuPM.cjs.map +1 -0
  315. package/dist/VWidget-CoIgX3hM.js +190 -0
  316. package/dist/VWidget-CoIgX3hM.js.map +1 -0
  317. package/dist/{ValueWidget-3jNtnh5i.js → ValueWidget-BvT1ASar.js} +4 -4
  318. package/dist/{ValueWidget-3jNtnh5i.js.map → ValueWidget-BvT1ASar.js.map} +1 -1
  319. package/dist/{ValueWidget-CjZeSiPQ.cjs → ValueWidget-RU-vFOh9.cjs} +2 -2
  320. package/dist/{ValueWidget-CjZeSiPQ.cjs.map → ValueWidget-RU-vFOh9.cjs.map} +1 -1
  321. package/dist/{ValuelimitsbarWidget-CkLbRP8P.cjs → ValuelimitsbarWidget-B5UtwjJW.cjs} +2 -2
  322. package/dist/{ValuelimitsbarWidget-CkLbRP8P.cjs.map → ValuelimitsbarWidget-B5UtwjJW.cjs.map} +1 -1
  323. package/dist/{ValuelimitsbarWidget-JSceOzGS.js → ValuelimitsbarWidget-C5lBnUmB.js} +4 -4
  324. package/dist/{ValuelimitsbarWidget-JSceOzGS.js.map → ValuelimitsbarWidget-C5lBnUmB.js.map} +1 -1
  325. package/dist/{ValuelimitscolumnWidget-DpU4BoB7.cjs → ValuelimitscolumnWidget-BruOZb26.cjs} +2 -2
  326. package/dist/{ValuelimitscolumnWidget-DpU4BoB7.cjs.map → ValuelimitscolumnWidget-BruOZb26.cjs.map} +1 -1
  327. package/dist/{ValuelimitscolumnWidget-HR1TNHwQ.js → ValuelimitscolumnWidget-DHYI0WBL.js} +4 -4
  328. package/dist/{ValuelimitscolumnWidget-HR1TNHwQ.js.map → ValuelimitscolumnWidget-DHYI0WBL.js.map} +1 -1
  329. package/dist/{ValuerangebarWidget-DnZrho8S.js → ValuerangebarWidget-BSszZhlE.js} +4 -4
  330. package/dist/{ValuerangebarWidget-DnZrho8S.js.map → ValuerangebarWidget-BSszZhlE.js.map} +1 -1
  331. package/dist/{ValuerangebarWidget-CpZYmUl_.cjs → ValuerangebarWidget-BhQVRHhm.cjs} +2 -2
  332. package/dist/{ValuerangebarWidget-CpZYmUl_.cjs.map → ValuerangebarWidget-BhQVRHhm.cjs.map} +1 -1
  333. package/dist/{VerticalWidget-DJvoxqLE.js → VerticalWidget-1GhgYrC3.js} +13 -13
  334. package/dist/{VerticalWidget-DJvoxqLE.js.map → VerticalWidget-1GhgYrC3.js.map} +1 -1
  335. package/dist/VerticalWidget-XZrIw9zV.cjs +2 -0
  336. package/dist/{VerticalWidget-CcJMMaK_.cjs.map → VerticalWidget-XZrIw9zV.cjs.map} +1 -1
  337. package/dist/VerticalboxWidget-BV-onQ8m.cjs +2 -0
  338. package/dist/{VerticalboxWidget-CJR_mOLa.cjs.map → VerticalboxWidget-BV-onQ8m.cjs.map} +1 -1
  339. package/dist/{VerticalboxWidget-CYYyLBoO.js → VerticalboxWidget-DYHJqEzd.js} +13 -13
  340. package/dist/{VerticalboxWidget-CYYyLBoO.js.map → VerticalboxWidget-DYHJqEzd.js.map} +1 -1
  341. package/dist/{Widget-Bn_S-zBo.js → Widget-B8t93Oid.js} +4 -4
  342. package/dist/Widget-B8t93Oid.js.map +1 -0
  343. package/dist/{Widget-O7wkmc39.cjs → Widget-Blq-k5SB.cjs} +2 -2
  344. package/dist/{Widget-O7wkmc39.cjs.map → Widget-Blq-k5SB.cjs.map} +1 -1
  345. package/dist/cmdUtilities-BMsSNjt_.js +46 -0
  346. package/dist/cmdUtilities-BMsSNjt_.js.map +1 -0
  347. package/dist/cmdUtilities-ChD8v8-7.cjs +2 -0
  348. package/dist/cmdUtilities-ChD8v8-7.cjs.map +1 -0
  349. package/dist/components.cjs +3 -3
  350. package/dist/components.cjs.map +1 -1
  351. package/dist/components.js +685 -823
  352. package/dist/components.js.map +1 -1
  353. package/dist/icons.cjs.map +1 -1
  354. package/dist/icons.js.map +1 -1
  355. package/dist/{index-qCq0L4jN.js → index-DDjz5VQq.js} +345 -327
  356. package/dist/index-DDjz5VQq.js.map +1 -0
  357. package/dist/index-DZh4NjG5.cjs +7 -0
  358. package/dist/index-DZh4NjG5.cjs.map +1 -0
  359. package/dist/plugins.cjs +2 -2
  360. package/dist/plugins.cjs.map +1 -1
  361. package/dist/plugins.js +184 -177
  362. package/dist/plugins.js.map +1 -1
  363. package/dist/settings-DyvFSj59.cjs +2 -0
  364. package/dist/settings-DyvFSj59.cjs.map +1 -0
  365. package/dist/settings-UZsgbUSr.js +34 -0
  366. package/dist/settings-UZsgbUSr.js.map +1 -0
  367. package/dist/tools/admin.cjs +3 -3
  368. package/dist/tools/admin.cjs.map +1 -1
  369. package/dist/tools/admin.js +84 -76
  370. package/dist/tools/admin.js.map +1 -1
  371. package/dist/tools/base.cjs +1 -1
  372. package/dist/tools/base.cjs.map +1 -1
  373. package/dist/tools/base.js +504 -473
  374. package/dist/tools/base.js.map +1 -1
  375. package/dist/tools/calendar.cjs +1 -1
  376. package/dist/tools/calendar.js +1 -1
  377. package/dist/tools/scriptrunner.cjs +34 -34
  378. package/dist/tools/scriptrunner.cjs.map +1 -1
  379. package/dist/tools/scriptrunner.js +945 -876
  380. package/dist/tools/scriptrunner.js.map +1 -1
  381. package/dist/util.cjs +1 -1
  382. package/dist/util.js +4 -2
  383. package/dist/util.js.map +1 -1
  384. package/dist/vue-common.css +1 -1
  385. package/dist/widgets.cjs +1 -1
  386. package/dist/widgets.js +63 -63
  387. package/package.json +15 -15
  388. package/dist/ArrayplotWidget-DC41cpv1.cjs +0 -2
  389. package/dist/ArrayplotWidget-DC41cpv1.cjs.map +0 -1
  390. package/dist/ArrayplotWidget-ntRLh6-B.js.map +0 -1
  391. package/dist/DetailsDialog-BQE0TraI.js.map +0 -1
  392. package/dist/DetailsDialog-DmKpPDNn.cjs +0 -2
  393. package/dist/DetailsDialog-DmKpPDNn.cjs.map +0 -1
  394. package/dist/EventListDialog-CDcJcxy5.cjs +0 -2
  395. package/dist/Graph-DCihpnT0.js +0 -1853
  396. package/dist/Graph-DCihpnT0.js.map +0 -1
  397. package/dist/Graph-mSqImgca.cjs +0 -2
  398. package/dist/Graph-mSqImgca.cjs.map +0 -1
  399. package/dist/GraphWidget-CQjKAMPR.cjs +0 -2
  400. package/dist/HorizontalWidget--AkRJPlL.cjs +0 -2
  401. package/dist/HorizontalboxWidget-synL-Bar.cjs +0 -2
  402. package/dist/Layout-kOQnicRa.cjs +0 -2
  403. package/dist/LedWidget-BN8IgAxJ.js.map +0 -1
  404. package/dist/LedWidget-BUTbyEBi.cjs +0 -2
  405. package/dist/LedWidget-BUTbyEBi.cjs.map +0 -1
  406. package/dist/LimitsbarWidget-Co5GAHro.cjs +0 -2
  407. package/dist/LinegraphWidget-Bay0EtbI.cjs +0 -2
  408. package/dist/LinegraphWidget-Bay0EtbI.cjs.map +0 -1
  409. package/dist/LinegraphWidget-jXksfbPb.js.map +0 -1
  410. package/dist/MatrixbycolumnsWidget-DxRhvPGv.cjs +0 -2
  411. package/dist/Openc3Screen-BZN0Wtrm.js.map +0 -1
  412. package/dist/Openc3Screen-dtpBWZdA.cjs +0 -5
  413. package/dist/Openc3Screen-dtpBWZdA.cjs.map +0 -1
  414. package/dist/PackagesTab-B4V2n4io.cjs +0 -2
  415. package/dist/PluginsTab-DHO1tK2S.cjs +0 -6
  416. package/dist/PluginsTab-DHO1tK2S.cjs.map +0 -1
  417. package/dist/PluginsTab-lHDR5v6S.js +0 -562
  418. package/dist/PluginsTab-lHDR5v6S.js.map +0 -1
  419. package/dist/RedisTab-CdiSo-CO.cjs +0 -2
  420. package/dist/RedisTab-CdiSo-CO.cjs.map +0 -1
  421. package/dist/RedisTab-CkSwEwTZ.js +0 -135
  422. package/dist/RedisTab-CkSwEwTZ.js.map +0 -1
  423. package/dist/ScrollwindowWidget-54GU96Ve.js.map +0 -1
  424. package/dist/ScrollwindowWidget-C5_X-KwQ.cjs +0 -2
  425. package/dist/ScrollwindowWidget-C5_X-KwQ.cjs.map +0 -1
  426. package/dist/SettingsTab-BVnr4OtU.js +0 -1445
  427. package/dist/SettingsTab-BVnr4OtU.js.map +0 -1
  428. package/dist/SettingsTab-BkwaDhYo.cjs +0 -3
  429. package/dist/SettingsTab-BkwaDhYo.cjs.map +0 -1
  430. package/dist/ToolsTab-CGztf9_j.cjs +0 -7
  431. package/dist/TopBar-B0UcAtIW.cjs +0 -2
  432. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs +0 -1497
  433. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs.map +0 -1
  434. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js.map +0 -1
  435. package/dist/VWidget-BMxLXtSO.cjs +0 -2
  436. package/dist/VWidget-BMxLXtSO.cjs.map +0 -1
  437. package/dist/VWidget-j2GIGGSX.js +0 -326
  438. package/dist/VWidget-j2GIGGSX.js.map +0 -1
  439. package/dist/VerticalWidget-CcJMMaK_.cjs +0 -2
  440. package/dist/VerticalboxWidget-CJR_mOLa.cjs +0 -2
  441. package/dist/Widget-Bn_S-zBo.js.map +0 -1
  442. package/dist/index-DcL65Mqb.cjs +0 -7
  443. package/dist/index-DcL65Mqb.cjs.map +0 -1
  444. package/dist/index-qCq0L4jN.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Graph-CWcrowaT.js","sources":["../src/components/TargetPacketItemChooser.vue","../src/components/GraphEditDialog.vue","../src/components/GraphEditItemDialog.vue","../src/components/Graph.vue"],"sourcesContent":["<!--\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 class=\"pt-4 pb-4\">\n <v-row :no-gutters=\"!vertical\">\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"select-target\">\n <v-autocomplete\n v-model=\"selectedTargetName\"\n label=\"Select Target\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"autocompleteDisabled || lockTarget\"\n :items=\"targetNames\"\n item-title=\"label\"\n item-value=\"value\"\n @update:model-value=\"targetNameChanged\"\n />\n </v-col>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"select-packet\">\n <v-autocomplete\n v-model=\"selectedPacketName\"\n label=\"Select Packet\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"packetsDisabled || autocompleteDisabled || lockPacket\"\n :items=\"packetNames\"\n item-title=\"label\"\n item-value=\"value\"\n @update:model-value=\"packetNameChanged\"\n >\n <template v-if=\"includeLatestPacketInDropdown\" #prepend-item>\n <v-list-item title=\"LATEST\" @click=\"packetNameChanged('LATEST')\" />\n <v-divider />\n </template>\n </v-autocomplete>\n </v-col>\n <v-col\n v-if=\"chooseItem\"\n :cols=\"colSize\"\n class=\"tpic-select pr-4\"\n data-test=\"select-item\"\n >\n <v-autocomplete\n v-model=\"selectedItemName\"\n label=\"Select Item\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"itemsDisabled || autocompleteDisabled\"\n :items=\"itemNames\"\n item-title=\"label\"\n item-value=\"value\"\n @update:model-value=\"itemNameChanged($event)\"\n />\n </v-col>\n <!-- min-width: 105px is enough to display a 2 digit index -->\n <v-col\n v-if=\"chooseItem && itemIsArray\"\n cols=\"1\"\n class=\"tpic-select pr-4\"\n data-test=\"array-index\"\n style=\"min-width: 105px\"\n >\n <v-combobox\n v-model=\"selectedArrayIndex\"\n label=\"Index\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"itemsDisabled || autocompleteDisabled\"\n :items=\"arrayIndexes\"\n item-title=\"label\"\n item-value=\"value\"\n @update:model-value=\"indexChanged($event)\"\n />\n </v-col>\n <v-col v-if=\"buttonText\" :cols=\"colSize\" style=\"max-width: 140px\">\n <v-btn\n :disabled=\"buttonDisabled\"\n color=\"primary\"\n data-test=\"select-send\"\n @click=\"buttonPressed\"\n >\n {{ actualButtonText }}\n </v-btn>\n </v-col>\n </v-row>\n <v-row v-if=\"selectTypes\" class=\"pt-6\" no-gutters>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"data-type\">\n <v-autocomplete\n v-model=\"selectedValueType\"\n label=\"Value Type\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :items=\"valueTypes\"\n />\n </v-col>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"reduced\">\n <v-autocomplete\n v-model=\"selectedReduced\"\n label=\"Reduced\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :items=\"reductionModes\"\n />\n </v-col>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"reduced-type\">\n <v-autocomplete\n v-model=\"selectedReducedType\"\n label=\"Reduced Type\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"selectedReduced === 'DECOM'\"\n :items=\"reducedTypes\"\n />\n </v-col>\n <v-col :cols=\"colSize\" style=\"max-width: 140px\"> </v-col>\n </v-row>\n <v-row no-gutters class=\"pa-3\">\n <v-col :cols=\"colSize\" :class=\"{ 'openc3-yellow': hazardous }\">\n Description: {{ description }}\n <template v-if=\"hazardous\"> (HAZARDOUS) </template>\n </v-col>\n </v-row>\n </div>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n allowAll: {\n type: Boolean,\n default: false,\n },\n allowAllTargets: {\n type: Boolean,\n default: false,\n },\n allowAllArrayIndex: {\n type: Boolean,\n default: false,\n },\n buttonText: {\n type: String,\n default: null,\n },\n chooseItem: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n initialTargetName: {\n type: String,\n default: '',\n },\n initialPacketName: {\n type: String,\n default: '',\n },\n initialItemName: {\n type: String,\n default: '',\n },\n selectTypes: {\n type: Boolean,\n default: false,\n },\n showLatest: {\n type: Boolean,\n default: false,\n },\n mode: {\n type: String,\n default: 'tlm',\n // TODO: add validators throughout\n validator: (propValue) => {\n return ['cmd', 'tlm'].includes(propValue)\n },\n },\n unknown: {\n type: Boolean,\n default: false,\n },\n vertical: {\n type: Boolean,\n default: false,\n },\n hidden: {\n type: Boolean,\n default: false,\n },\n lockTarget: {\n type: Boolean,\n default: false,\n },\n lockPacket: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['on-set', 'addItem'],\n data() {\n return {\n targetNames: [],\n selectedTargetName: this.initialTargetName?.toUpperCase(),\n packetNames: [],\n selectedPacketName: this.initialPacketName?.toUpperCase(),\n itemNames: [],\n selectedItemName: this.initialItemName?.toUpperCase(),\n valueTypes: ['CONVERTED', 'RAW'],\n selectedValueType: 'CONVERTED',\n reductionModes: [\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 selectedArrayIndex: null,\n selectedReduced: 'DECOM',\n reducedTypes: ['MIN', 'MAX', 'AVG', 'STDDEV'],\n selectedReducedType: 'AVG',\n description: '',\n hazardous: false,\n internalDisabled: false,\n packetsDisabled: false,\n itemsDisabled: false,\n api: null,\n ALL: {\n label: '[ ALL ]',\n value: 'ALL',\n description: 'ALL',\n }, // Constant to indicate all packets or items\n UNKNOWN: {\n label: '[ UNKNOWN ]',\n value: 'UNKNOWN',\n description: 'UNKNOWN',\n },\n }\n },\n computed: {\n actualButtonText: function () {\n if (this.selectedPacketName === 'ALL') {\n return 'Add Target'\n }\n if (this.selectedItemName === 'ALL') {\n return 'Add Packet'\n }\n return this.buttonText\n },\n autocompleteDisabled: function () {\n return this.disabled || this.internalDisabled\n },\n buttonDisabled: function () {\n return (\n this.disabled ||\n this.internalDisabled ||\n this.selectedTargetName === null ||\n this.selectedPacketName === null ||\n this.selectedItemNameWIndex === null\n )\n },\n colSize: function () {\n return this.vertical ? 12 : false\n },\n selectedItemNameWIndex: function () {\n if (\n this.itemIsArray &&\n this.selectedArrayIndex !== null &&\n this.selectedArrayIndex !== this.ALL.label\n ) {\n return `${this.selectedItemName}[${this.selectedArrayIndex}]`\n } else {\n return this.selectedItemName\n }\n },\n includeLatestPacketInDropdown: function () {\n return this.showLatest && this.mode === 'tlm' // because LATEST cmd doesn't have much use and thus isn't currently implemented\n },\n arrayIndexes: function () {\n let i = this.itemNames.findIndex(\n (item) => item.value === this.selectedItemName,\n )\n let indexes = [...Array(this.itemNames[i].array).keys()]\n if (this.allowAll || this.allowAllArrayIndex) {\n indexes.unshift(this.ALL.label)\n }\n return indexes\n },\n itemIsArray: function () {\n let i = this.itemNames.findIndex(\n (item) => item.value === this.selectedItemName,\n )\n if (i === -1 || isNaN(this.itemNames[i].array)) {\n return false\n } else {\n return true\n }\n },\n },\n watch: {\n initialTargetName: function (val) {\n // These three \"initial\" watchers are here in case the parent component doesn't figure out its initial values\n // until after this component has already been created. All this logic incl. the \"on-set\" events could be\n // simplified with a refactor to use named v-models, but that's probably a significant breaking change.\n if (val) {\n this.selectedTargetName = val.toUpperCase()\n }\n },\n initialPacketName: function (val) {\n if (val) {\n this.selectedPacketName = val.toUpperCase()\n }\n },\n initialItemName: function (val) {\n if (val) {\n this.selectedItemName = val.toUpperCase()\n }\n },\n mode: function (newVal, oldVal) {\n this.selectedPacketName = null\n this.selectedItemName = null\n // This also updates packets and items as needed\n this.targetNameChanged(this.selectedTargetName)\n },\n chooseItem: function (newVal, oldVal) {\n if (newVal) {\n this.updateItems()\n } else {\n this.itemNames = []\n }\n },\n itemIsArray: function (val) {\n if (val) {\n this.selectedArrayIndex ||= 0\n } else {\n this.selectedArrayIndex = null\n }\n },\n },\n created() {\n this.internalDisabled = true\n this.api = new OpenC3Api()\n this.api.get_target_names().then((result) => {\n this.targetNames = result.flatMap((target) => {\n // Ignore the UNKNOWN target as it doesn't make sense to select this\n if (target == 'UNKNOWN') {\n return []\n }\n return { label: target, value: target }\n })\n // TODO: This is a nice enhancement but results in logs of API calls for many targets\n // See if we can reduce this to a single API call\n // Filter out any targets without packets\n // for (let i = this.targetNames.length - 1; i >= 0; i--) {\n // const cmd =\n // this.mode === 'tlm' ? 'get_all_tlm_names' : 'get_all_cmd_names'\n // await this.api[cmd](this.targetNames[i].value).then((names) => {\n // if (names.length === 0) {\n // this.targetNames.splice(i, 1)\n // }\n // })\n // }\n if (this.allowAllTargets) {\n this.targetNames.unshift(this.ALL)\n }\n // If the initial target name is not set, default to the first target\n // which also updates packets and items as needed\n if (!this.selectedTargetName) {\n this.selectedTargetName = this.targetNames[0].value\n this.targetNameChanged(this.selectedTargetName)\n } else {\n // Selected target name was set but we still have to update packets\n this.updatePackets()\n }\n if (this.unknown) {\n this.targetNames.push(this.UNKNOWN)\n }\n })\n },\n methods: {\n updatePackets: function () {\n if (this.selectedTargetName === 'UNKNOWN') {\n this.packetNames = [this.UNKNOWN]\n this.selectedPacketName = this.packetNames[0].value\n this.updatePacketDetails(this.UNKNOWN.value)\n this.description = 'UNKNOWN'\n return\n }\n if (this.selectedTargetName === 'ALL') {\n this.packetNames = [this.ALL]\n this.selectedPacketName = this.packetNames[0].value\n this.updatePacketDetails(this.ALL.value)\n this.description = 'ALL'\n return\n }\n this.internalDisabled = true\n const cmd =\n this.mode === 'tlm' ? 'get_all_tlm_names' : 'get_all_cmd_names'\n this.api[cmd](this.selectedTargetName, this.hidden).then((names) => {\n this.packetNames = names.map((name) => {\n return {\n label: name,\n value: name,\n }\n })\n if (this.allowAll) {\n this.packetNames.unshift(this.ALL)\n }\n if (!this.selectedPacketName) {\n if (this.packetNames.length === 0) {\n this.selectedPacketName = null\n } else {\n this.selectedPacketName = this.packetNames[0].value\n }\n }\n this.updatePacketDetails(this.selectedPacketName)\n const item = this.packetNames.find((packet) => {\n return packet.value === this.selectedPacketName\n })\n if (item && this.chooseItem) {\n this.updateItems()\n }\n this.internalDisabled = false\n })\n },\n\n updateItems: function () {\n if (this.selectedPacketName === 'ALL') {\n return\n }\n this.internalDisabled = true\n\n if (this.selectedPacketName === 'LATEST') {\n this.api\n .get_all_tlm_item_names(this.selectedTargetName)\n .then((items) => {\n this.itemNames = items.map((item) => {\n return {\n label: item,\n value: item,\n description: `LATEST ${item}`,\n // Don't handle array for LATEST\n }\n })\n this.finishUpdateItems()\n })\n } else {\n const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.itemNames = packet.items.map((item) => {\n let label = item.name\n if (item.data_type == 'DERIVED') {\n label += ' *'\n }\n return {\n label: label,\n value: item.name,\n description: item.description,\n array: item.array_size / item.bit_size,\n }\n })\n this.itemNames.sort((a, b) => (a.label > b.label ? 1 : -1))\n this.finishUpdateItems()\n },\n )\n }\n },\n finishUpdateItems: function () {\n if (this.allowAll) {\n this.itemNames.unshift(this.ALL)\n }\n if (!this.selectedItemName) {\n this.selectedItemName = this.itemNames[0].value\n }\n this.description = this.itemNames[0].description\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n this.internalDisabled = false\n },\n\n targetNameChanged: function (value) {\n this.selectedTargetName = value\n this.selectedPacketName = ''\n this.selectedItemName = ''\n // When the target name is completed deleted in the v-autocomplete\n // the @change handler is fired but the value is null\n // In this case we don't want to update packets\n if (value !== null) {\n this.updatePackets()\n }\n },\n\n packetNameChanged: function (value) {\n this.selectedItemName = ''\n // When the packet name is completed deleted in the v-autocomplete\n // the @change handler is fired but the value is null\n // In this case we don't want to update packet details\n if (value !== null) {\n this.updatePacketDetails(value)\n }\n },\n\n updatePacketDetails: function (value) {\n if (value === 'ALL') {\n this.itemsDisabled = true\n this.internalDisabled = false\n } else if (value === 'LATEST') {\n this.itemsDisabled = false\n this.selectedPacketName = 'LATEST'\n } else {\n this.itemsDisabled = false\n const packet = this.packetNames.find((packet) => {\n return value === packet.value\n })\n if (packet) {\n this.selectedPacketName = packet.value\n const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.description = packet.description\n this.hazardous = packet.hazardous\n },\n )\n }\n }\n if (this.chooseItem) {\n this.updateItems()\n } else {\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n }\n },\n\n itemNameChanged: function (value) {\n const item = this.itemNames.find((item) => {\n return value === item.value\n })\n if (item) {\n this.selectedItemName = item.value\n this.description = item.description\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n }\n },\n\n indexChanged: function (value) {\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n },\n\n buttonPressed: function () {\n if (this.selectedPacketName === 'ALL') {\n this.allTargetPacketItems()\n } else if (this.selectedItemName === 'ALL') {\n this.allPacketItems()\n } else if (this.chooseItem) {\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n } else {\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n }\n },\n\n allTargetPacketItems: function () {\n this.packetNames.forEach((packetName) => {\n if (packetName === this.ALL) return\n const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'\n this.api[cmd](this.selectedTargetName, packetName.value).then(\n (packet) => {\n packet.items.forEach((item) => {\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: packetName.value,\n itemName: item['name'],\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n })\n },\n )\n })\n },\n\n allPacketItems: function () {\n this.itemNames.forEach((item) => {\n if (item === this.ALL) return\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: item.value,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n })\n },\n },\n}\n</script>\n<style scoped>\n.button {\n padding: 4px;\n}\n.tpic-select {\n max-width: 400px;\n}\n.v-autocomplete .v-select__selections {\n word-break: break-all;\n}\n</style>\n","<!--\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","propValue","_a","_b","_c","i","item","indexes","val","newVal","oldVal","OpenC3Api","result","target","cmd","names","name","packet","items","label","a","b","value","packetName","_hoisted_1","_openBlock","_createElementBlock","_createVNode","_component_v_row","$props","_component_v_col","$options","_component_v_autocomplete","$data","$event","_component_v_list_item","_component_v_divider","_createBlock","_cache","_component_v_combobox","_component_v_btn","_toDisplayString","_Fragment","TargetPacketItemChooser","TimeFilters","isValid","parse","itemId","date","toDate","dline","enabled","selection","xAxisItemKey","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_component_v_dialog","_ctx","_component_v_toolbar","_component_v_spacer","_createElementVNode","_component_v_card","_component_v_tabs","_component_v_tab","_component_v_tabs_window","_component_v_tabs_window_item","_component_v_card_text","_component_v_text_field","_component_v_select","_component_v_list","_component_v_checkbox","_component_target_packet_item_chooser","_component_v_data_table","_withCtx","_component_v_card_actions","details","key","_component_v_card_title","DEFAULT_X_AXIS_ITEM","GraphEditDialog","GraphEditItemDialog","Cable","targetName","timeItems","newState","oldState","_newState","_oldState","data","j","dateStr","dateObj","newData","oldData","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","refreshed","xAxisVal","length","bs","idealIndex","newStartTime","element","needle","keyIndex","array","_normalizeClass","_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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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const T=require("./Widget-Blq-k5SB.cjs"),b=require("./format-B22VpiOS.cjs"),h=require("./parse-DwfgQboe.cjs"),N=require("./addMonths-n1tnl3ab.cjs");function S(e,t,s){return h.addDays(e,-t,s)}function f(e,t,s){return N.addMonths(e,-t,s)}function k(e,t,s){const{years:r=0,months:a=0,weeks:i=0,days:n=0,hours:c=0,minutes:d=0,seconds:o=0}=t,m=f(e,a+r*12,s),u=S(m,n+i*7,s),p=d+c*60,l=(o+p*60)*1e3;return b.constructFrom(e,+u-l)}const y={mixins:[T.Widget],data:function(){return{id:Math.floor(Math.random()*1e11),state:"start",items:[{targetName:this.parameters[0],packetName:this.parameters[1],itemName:this.parameters[2],valueType:this.parameters[3]||"CONVERTED",reduced:this.parameters[4]||"DECOM",reducedType:this.parameters[5]||null}],startTime:null,secondsGraphed:3600,pointsSaved:3600,pointsGraphed:3600,size:{height:300,width:400}}},created:function(){this.appliedSettings.forEach(e=>{switch(e[0]){case"ITEM":this.items.push({targetName:e[1],packetName:e[2],itemName:e[3],valueType:e[4]||"CONVERTED",reduced:e[5]||"DECOM",reducedType:e[6]||null});break;case"STARTTIME":let t=h.parse(e[1],"yyyy/MM/dd HH:mm:ss",new Date);this.startTime=t.getTime()*1e6;break;case"HISTORY":let s=parseInt(e[1].slice(0,e[1].length-1)),r=null,a=1;switch(e[1][e[1].length-1]){case"d":r="days",a=3600*24;break;case"h":r="hours",a=3600;break;case"m":r="minutes",a=60;break;case"s":r="seconds";break;default:throw new Error(`Unknown time suffix: ${e[1]}!`)}let i={};i[r]=s,this.startTime=k(new Date,i).getTime()*1e6,s*a>this.secondsGraphed&&(this.secondsGraphed=s*a),s*a>this.pointsSaved&&(this.pointsSaved=s*a),s*a>this.pointsGraphed&&(this.pointsGraphed=s*a);break;case"SECONDSGRAPHED":this.secondsGraphed=parseInt(e[1]);break;case"POINTSSAVED":this.pointsSaved=parseInt(e[1]);break;case"POINTSGRAPHED":this.pointsGraphed=parseInt(e[1]);break;case"SIZE":this.size.width=parseInt(e[1]),this.size.height=parseInt(e[2]);break}}),this.items=this.items.map(e=>{if(e.itemName,e.itemName.includes("[["))e.itemName=e.itemName.replace("[[","[").replace("]]","]"),e.itemName;else if(e.itemName.includes("[")){let t=e.itemName.match(/\[(\d+)\]/);this.arrayIndex=parseInt(t[1]),e.itemName.replace(t[0],"")}return e})}};exports.GraphWidget=y;
2
+ //# sourceMappingURL=GraphWidget-BroqS0SO.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"GraphWidget-CQjKAMPR.cjs","sources":["../../../node_modules/date-fns/subDays.js","../../../node_modules/date-fns/subMonths.js","../../../node_modules/date-fns/sub.js","../src/widgets/GraphWidget.js"],"sourcesContent":["import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 amount - The amount of days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The subMonths function options.\n */\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 amount - The amount of months to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the months subtracted\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function subMonths(date, amount, options) {\n return addMonths(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subMonths;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { subDays } from \"./subDays.js\";\nimport { subMonths } from \"./subMonths.js\";\n\n/**\n * The {@link sub} function options.\n */\n\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 subtracted\n * @param options - An object with options\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns The new date with the seconds subtracted\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\nexport function sub(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 const withoutMonths = subMonths(date, months + years * 12, options);\n const withoutDays = subDays(withoutMonths, days + weeks * 7, options);\n\n const minutesToSub = minutes + hours * 60;\n const secondsToSub = seconds + minutesToSub * 60;\n const msToSub = secondsToSub * 1000;\n\n return constructFrom(options?.in || date, +withoutDays - msToSub);\n}\n\n// Fallback for modularized imports:\nexport default sub;\n","/*\n# Copyright 2025 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 { sub, parse } from 'date-fns'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data: function () {\n return {\n id: Math.floor(Math.random() * 100000000000), // Unique-ish\n state: 'start',\n items: [\n {\n targetName: this.parameters[0],\n packetName: this.parameters[1],\n itemName: this.parameters[2],\n valueType: this.parameters[3] || 'CONVERTED',\n reduced: this.parameters[4] || 'DECOM',\n reducedType: this.parameters[5] || null,\n },\n ],\n startTime: null,\n // 1hr of data by default\n secondsGraphed: 3600,\n pointsSaved: 3600,\n pointsGraphed: 3600,\n // Make it a decently sized graph\n size: {\n height: 300,\n width: 400,\n },\n }\n },\n created: function () {\n this.appliedSettings.forEach((setting) => {\n switch (setting[0]) {\n case 'ITEM':\n this.items.push({\n targetName: setting[1],\n packetName: setting[2],\n itemName: setting[3],\n valueType: setting[4] || 'CONVERTED',\n reduced: setting[5] || 'DECOM',\n reducedType: setting[6] || null,\n })\n break\n case 'STARTTIME':\n let date = parse(setting[1], 'yyyy/MM/dd HH:mm:ss', new Date())\n this.startTime = date.getTime() * 1000000 // nanoseconds\n break\n case 'HISTORY':\n let amount = parseInt(setting[1].slice(0, setting[1].length - 1))\n let key = null\n let multiplier = 1\n switch (setting[1][setting[1].length - 1]) {\n case 'd':\n key = 'days'\n multiplier = 3600 * 24\n break\n case 'h':\n key = 'hours'\n multiplier = 3600\n break\n case 'm':\n key = 'minutes'\n multiplier = 60\n break\n case 's':\n key = 'seconds'\n break\n default:\n throw new Error(`Unknown time suffix: ${setting[1]}!`)\n }\n let obj = {}\n obj[key] = amount\n this.startTime = sub(new Date(), obj).getTime() * 1000000\n if (amount * multiplier > this.secondsGraphed) {\n this.secondsGraphed = amount * multiplier\n }\n if (amount * multiplier > this.pointsSaved) {\n this.pointsSaved = amount * multiplier\n }\n if (amount * multiplier > this.pointsGraphed) {\n this.pointsGraphed = amount * multiplier\n }\n break\n case 'SECONDSGRAPHED':\n this.secondsGraphed = parseInt(setting[1])\n break\n case 'POINTSSAVED':\n this.pointsSaved = parseInt(setting[1])\n break\n case 'POINTSGRAPHED':\n this.pointsGraphed = parseInt(setting[1])\n break\n case 'SIZE':\n this.size.width = parseInt(setting[1])\n this.size.height = parseInt(setting[2])\n break\n }\n })\n this.items = this.items.map((item) => {\n let itemName = item.itemName\n // Remove double bracket escaping. This means they actually have an item\n // with a bracket in the name, not an array index.\n if (item.itemName.includes('[[')) {\n // Change the actual item and the the name we're passing to the screen\n item.itemName = item.itemName.replace('[[', '[').replace(']]', ']')\n itemName = item.itemName\n } else if (item.itemName.includes('[')) {\n // Brackets mean array indexes (normally, but see above)\n let match = item.itemName.match(/\\[(\\d+)\\]/)\n this.arrayIndex = parseInt(match[1])\n // Here we keep the original item name with the brackets but change\n // the item we're passing to the screen to the non-bracket item\n itemName = item.itemName.replace(match[0], '')\n }\n this.$emit(\n 'addItem',\n `${item.targetName}__${item.packetName}__${itemName}__${item.valueType}`,\n true,\n )\n // Return the mapped values since we may have removed bracket escaping\n return item\n })\n },\n destroyed() {\n this.items.map((item) =>\n this.$emit(\n 'deleteItem',\n `${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`,\n ),\n )\n },\n}\n"],"names":["subDays","date","amount","options","addDays","subMonths","addMonths","sub","duration","years","months","weeks","days","hours","minutes","seconds","withoutMonths","withoutDays","minutesToSub","msToSub","constructFrom","GraphWidget","Widget","setting","parse","key","multiplier","obj","item","itemName","match"],"mappings":"iKAyBO,SAASA,EAAQC,EAAMC,EAAQC,EAAS,CAC7C,OAAOC,UAAQH,EAAM,CAACC,EAAQC,CAAO,CACvC,CCCO,SAASE,EAAUJ,EAAMC,EAAQC,EAAS,CAC/C,OAAOG,YAAUL,EAAM,CAACC,EAAQC,CAAO,CACzC,CCoBO,SAASI,EAAIN,EAAMO,EAAUL,EAAS,CAC3C,KAAM,CACJ,MAAAM,EAAQ,EACR,OAAAC,EAAS,EACT,MAAAC,EAAQ,EACR,KAAAC,EAAO,EACP,MAAAC,EAAQ,EACR,QAAAC,EAAU,EACV,QAAAC,EAAU,CACd,EAAMP,EAEEQ,EAAgBX,EAAUJ,EAAMS,EAASD,EAAQ,GAAIN,CAAO,EAC5Dc,EAAcjB,EAAQgB,EAAeJ,EAAOD,EAAQ,EAAGR,CAAO,EAE9De,EAAeJ,EAAUD,EAAQ,GAEjCM,GADeJ,EAAUG,EAAe,IACf,IAE/B,OAAOE,gBAA6BnB,EAAM,CAACgB,EAAcE,CAAO,CAClE,CChDA,MAAAE,EAAe,CACb,OAAQ,CAACC,EAAAA,MAAM,EACf,KAAM,UAAY,CAChB,MAAO,CACL,GAAI,KAAK,MAAM,KAAK,OAAM,EAAK,IAAY,EAC3C,MAAO,QACP,MAAO,CACL,CACE,WAAY,KAAK,WAAW,CAAC,EAC7B,WAAY,KAAK,WAAW,CAAC,EAC7B,SAAU,KAAK,WAAW,CAAC,EAC3B,UAAW,KAAK,WAAW,CAAC,GAAK,YACjC,QAAS,KAAK,WAAW,CAAC,GAAK,QAC/B,YAAa,KAAK,WAAW,CAAC,GAAK,IAC7C,CACA,EACM,UAAW,KAEX,eAAgB,KAChB,YAAa,KACb,cAAe,KAEf,KAAM,CACJ,OAAQ,IACR,MAAO,GACf,CACA,CACE,EACA,QAAS,UAAY,CACnB,KAAK,gBAAgB,QAASC,GAAY,CACxC,OAAQA,EAAQ,CAAC,EAAC,CAChB,IAAK,OACH,KAAK,MAAM,KAAK,CACd,WAAYA,EAAQ,CAAC,EACrB,WAAYA,EAAQ,CAAC,EACrB,SAAUA,EAAQ,CAAC,EACnB,UAAWA,EAAQ,CAAC,GAAK,YACzB,QAASA,EAAQ,CAAC,GAAK,QACvB,YAAaA,EAAQ,CAAC,GAAK,IACvC,CAAW,EACD,MACF,IAAK,YACH,IAAItB,EAAOuB,EAAAA,MAAMD,EAAQ,CAAC,EAAG,sBAAuB,IAAI,IAAM,EAC9D,KAAK,UAAYtB,EAAK,QAAO,EAAK,IAClC,MACF,IAAK,UACH,IAAIC,EAAS,SAASqB,EAAQ,CAAC,EAAE,MAAM,EAAGA,EAAQ,CAAC,EAAE,OAAS,CAAC,CAAC,EAC5DE,EAAM,KACNC,EAAa,EACjB,OAAQH,EAAQ,CAAC,EAAEA,EAAQ,CAAC,EAAE,OAAS,CAAC,EAAC,CACvC,IAAK,IACHE,EAAM,OACNC,EAAa,KAAO,GACpB,MACF,IAAK,IACHD,EAAM,QACNC,EAAa,KACb,MACF,IAAK,IACHD,EAAM,UACNC,EAAa,GACb,MACF,IAAK,IACHD,EAAM,UACN,MACF,QACE,MAAM,IAAI,MAAM,wBAAwBF,EAAQ,CAAC,CAAC,GAAG,CACnE,CACU,IAAII,EAAM,CAAA,EACVA,EAAIF,CAAG,EAAIvB,EACX,KAAK,UAAYK,EAAI,IAAI,KAAQoB,CAAG,EAAE,UAAY,IAC9CzB,EAASwB,EAAa,KAAK,iBAC7B,KAAK,eAAiBxB,EAASwB,GAE7BxB,EAASwB,EAAa,KAAK,cAC7B,KAAK,YAAcxB,EAASwB,GAE1BxB,EAASwB,EAAa,KAAK,gBAC7B,KAAK,cAAgBxB,EAASwB,GAEhC,MACF,IAAK,iBACH,KAAK,eAAiB,SAASH,EAAQ,CAAC,CAAC,EACzC,MACF,IAAK,cACH,KAAK,YAAc,SAASA,EAAQ,CAAC,CAAC,EACtC,MACF,IAAK,gBACH,KAAK,cAAgB,SAASA,EAAQ,CAAC,CAAC,EACxC,MACF,IAAK,OACH,KAAK,KAAK,MAAQ,SAASA,EAAQ,CAAC,CAAC,EACrC,KAAK,KAAK,OAAS,SAASA,EAAQ,CAAC,CAAC,EACtC,KACV,CACI,CAAC,EACD,KAAK,MAAQ,KAAK,MAAM,IAAKK,GAAS,CACpC,IAAIC,EAAWD,EAAK,SAGpB,GAAIA,EAAK,SAAS,SAAS,IAAI,EAE7BA,EAAK,SAAWA,EAAK,SAAS,QAAQ,KAAM,GAAG,EAAE,QAAQ,KAAM,GAAG,EAClEC,EAAWD,EAAK,iBACPA,EAAK,SAAS,SAAS,GAAG,EAAG,CAEtC,IAAIE,EAAQF,EAAK,SAAS,MAAM,WAAW,EAC3C,KAAK,WAAa,SAASE,EAAM,CAAC,CAAC,EAGnCD,EAAWD,EAAK,SAAS,QAAQE,EAAM,CAAC,EAAG,EAAE,CAC/C,CACA,YAAK,MACH,UACA,GAAGF,EAAK,UAAU,KAAKA,EAAK,UAAU,KAAKC,CAAQ,KAAKD,EAAK,SAAS,GACtE,EACR,EAEaA,CACT,CAAC,CACH,EACA,WAAY,CACV,KAAK,MAAM,IAAKA,GACd,KAAK,MACH,aACA,GAAGA,EAAK,UAAU,KAAKA,EAAK,UAAU,KAAKA,EAAK,QAAQ,KAAKA,EAAK,SAAS,EACnF,CACA,CACE,CACF","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"GraphWidget-BroqS0SO.cjs","sources":["../../../node_modules/date-fns/subDays.js","../../../node_modules/date-fns/subMonths.js","../../../node_modules/date-fns/sub.js","../src/widgets/GraphWidget.js"],"sourcesContent":["import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 amount - The amount of days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The subMonths function options.\n */\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 amount - The amount of months to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the months subtracted\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function subMonths(date, amount, options) {\n return addMonths(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subMonths;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { subDays } from \"./subDays.js\";\nimport { subMonths } from \"./subMonths.js\";\n\n/**\n * The {@link sub} function options.\n */\n\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 subtracted\n * @param options - An object with options\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns The new date with the seconds subtracted\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\nexport function sub(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 const withoutMonths = subMonths(date, months + years * 12, options);\n const withoutDays = subDays(withoutMonths, days + weeks * 7, options);\n\n const minutesToSub = minutes + hours * 60;\n const secondsToSub = seconds + minutesToSub * 60;\n const msToSub = secondsToSub * 1000;\n\n return constructFrom(options?.in || date, +withoutDays - msToSub);\n}\n\n// Fallback for modularized imports:\nexport default sub;\n","/*\n# Copyright 2025 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 { sub, parse } from 'date-fns'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data: function () {\n return {\n id: Math.floor(Math.random() * 100000000000), // Unique-ish\n state: 'start',\n items: [\n {\n targetName: this.parameters[0],\n packetName: this.parameters[1],\n itemName: this.parameters[2],\n valueType: this.parameters[3] || 'CONVERTED',\n reduced: this.parameters[4] || 'DECOM',\n reducedType: this.parameters[5] || null,\n },\n ],\n startTime: null,\n // 1hr of data by default\n secondsGraphed: 3600,\n pointsSaved: 3600,\n pointsGraphed: 3600,\n // Make it a decently sized graph\n size: {\n height: 300,\n width: 400,\n },\n }\n },\n created: function () {\n this.appliedSettings.forEach((setting) => {\n switch (setting[0]) {\n case 'ITEM':\n this.items.push({\n targetName: setting[1],\n packetName: setting[2],\n itemName: setting[3],\n valueType: setting[4] || 'CONVERTED',\n reduced: setting[5] || 'DECOM',\n reducedType: setting[6] || null,\n })\n break\n case 'STARTTIME':\n let date = parse(setting[1], 'yyyy/MM/dd HH:mm:ss', new Date())\n this.startTime = date.getTime() * 1000000 // nanoseconds\n break\n case 'HISTORY':\n let amount = parseInt(setting[1].slice(0, setting[1].length - 1))\n let key = null\n let multiplier = 1\n switch (setting[1][setting[1].length - 1]) {\n case 'd':\n key = 'days'\n multiplier = 3600 * 24\n break\n case 'h':\n key = 'hours'\n multiplier = 3600\n break\n case 'm':\n key = 'minutes'\n multiplier = 60\n break\n case 's':\n key = 'seconds'\n break\n default:\n throw new Error(`Unknown time suffix: ${setting[1]}!`)\n }\n let obj = {}\n obj[key] = amount\n this.startTime = sub(new Date(), obj).getTime() * 1000000\n if (amount * multiplier > this.secondsGraphed) {\n this.secondsGraphed = amount * multiplier\n }\n if (amount * multiplier > this.pointsSaved) {\n this.pointsSaved = amount * multiplier\n }\n if (amount * multiplier > this.pointsGraphed) {\n this.pointsGraphed = amount * multiplier\n }\n break\n case 'SECONDSGRAPHED':\n this.secondsGraphed = parseInt(setting[1])\n break\n case 'POINTSSAVED':\n this.pointsSaved = parseInt(setting[1])\n break\n case 'POINTSGRAPHED':\n this.pointsGraphed = parseInt(setting[1])\n break\n case 'SIZE':\n this.size.width = parseInt(setting[1])\n this.size.height = parseInt(setting[2])\n break\n }\n })\n this.items = this.items.map((item) => {\n let itemName = item.itemName\n // Remove double bracket escaping. This means they actually have an item\n // with a bracket in the name, not an array index.\n if (item.itemName.includes('[[')) {\n // Change the actual item and the the name we're passing to the screen\n item.itemName = item.itemName.replace('[[', '[').replace(']]', ']')\n itemName = item.itemName\n } else if (item.itemName.includes('[')) {\n // Brackets mean array indexes (normally, but see above)\n let match = item.itemName.match(/\\[(\\d+)\\]/)\n this.arrayIndex = parseInt(match[1])\n // Here we keep the original item name with the brackets but change\n // the item we're passing to the screen to the non-bracket item\n itemName = item.itemName.replace(match[0], '')\n }\n // We don't emit 'addItem' because graphWidgets use streams in realtime\n // and manage their own playback requests\n\n // Return the mapped values since we may have removed bracket escaping\n return item\n })\n },\n}\n"],"names":["subDays","date","amount","options","addDays","subMonths","addMonths","sub","duration","years","months","weeks","days","hours","minutes","seconds","withoutMonths","withoutDays","minutesToSub","msToSub","constructFrom","GraphWidget","Widget","setting","parse","key","multiplier","obj","item","match"],"mappings":"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","x_google_ignoreList":[0,1,2]}