@openc3/vue-common 6.5.0 → 6.6.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 (386) hide show
  1. package/dist/{ArrayWidget-DaQV8y9D.cjs → ArrayWidget-Bb_Ldxq7.cjs} +2 -2
  2. package/dist/{ArrayWidget-DaQV8y9D.cjs.map → ArrayWidget-Bb_Ldxq7.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-CC3iwyQc.js → ArrayWidget-Ck6pzAyW.js} +4 -4
  4. package/dist/{ArrayWidget-CC3iwyQc.js.map → ArrayWidget-Ck6pzAyW.js.map} +1 -1
  5. package/dist/{ArrayplotWidget-CkiRBYrb.cjs → ArrayplotWidget-DC41cpv1.cjs} +2 -2
  6. package/dist/{ArrayplotWidget-CkiRBYrb.cjs.map → ArrayplotWidget-DC41cpv1.cjs.map} +1 -1
  7. package/dist/{ArrayplotWidget-CiQdsmVy.js → ArrayplotWidget-ntRLh6-B.js} +3 -3
  8. package/dist/{ArrayplotWidget-CiQdsmVy.js.map → ArrayplotWidget-ntRLh6-B.js.map} +1 -1
  9. package/dist/AstroStatus-CILMWL6F.cjs.map +1 -1
  10. package/dist/AstroStatus-CY9VkeTN.js.map +1 -1
  11. package/dist/{BarColumn-BhjcS87D.js → BarColumn-Bgz2YJ59.js} +3 -3
  12. package/dist/{BarColumn-BhjcS87D.js.map → BarColumn-Bgz2YJ59.js.map} +1 -1
  13. package/dist/{BarColumn-Ci9fqSL1.cjs → BarColumn-DtRNuOpa.cjs} +2 -2
  14. package/dist/{BarColumn-Ci9fqSL1.cjs.map → BarColumn-DtRNuOpa.cjs.map} +1 -1
  15. package/dist/{BlockWidget-LLPHBYVU.js → BlockWidget-DGH3Zz5p.js} +4 -4
  16. package/dist/{BlockWidget-LLPHBYVU.js.map → BlockWidget-DGH3Zz5p.js.map} +1 -1
  17. package/dist/{BlockWidget-yNjXB1gO.cjs → BlockWidget-DOY5lVfa.cjs} +2 -2
  18. package/dist/{BlockWidget-yNjXB1gO.cjs.map → BlockWidget-DOY5lVfa.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-C_R8sVl5.cjs → ButtonWidget-CFyZXGt6.cjs} +2 -2
  20. package/dist/{ButtonWidget-C_R8sVl5.cjs.map → ButtonWidget-CFyZXGt6.cjs.map} +1 -1
  21. package/dist/{ButtonWidget-Co0KMkIG.js → ButtonWidget-D_tupiPB.js} +4 -4
  22. package/dist/{ButtonWidget-Co0KMkIG.js.map → ButtonWidget-D_tupiPB.js.map} +1 -1
  23. package/dist/{CanvasWidget-CMVhjpJc.cjs → CanvasWidget-C6dc7mUw.cjs} +2 -2
  24. package/dist/{CanvasWidget-CMVhjpJc.cjs.map → CanvasWidget-C6dc7mUw.cjs.map} +1 -1
  25. package/dist/{CanvasWidget-DPrxnI7M.js → CanvasWidget-CzG2jYQb.js} +2 -2
  26. package/dist/{CanvasWidget-DPrxnI7M.js.map → CanvasWidget-CzG2jYQb.js.map} +1 -1
  27. package/dist/{CanvasdotWidget-s1ALDR4k.js → CanvasdotWidget-0FAaw4G2.js} +2 -2
  28. package/dist/{CanvasdotWidget-s1ALDR4k.js.map → CanvasdotWidget-0FAaw4G2.js.map} +1 -1
  29. package/dist/{CanvasdotWidget-DskyFyIC.cjs → CanvasdotWidget-9bBVHC1l.cjs} +2 -2
  30. package/dist/{CanvasdotWidget-DskyFyIC.cjs.map → CanvasdotWidget-9bBVHC1l.cjs.map} +1 -1
  31. package/dist/{CanvasimageWidget-Cs-KjdqK.js → CanvasimageWidget-CNJlzLqo.js} +3 -3
  32. package/dist/{CanvasimageWidget-Cs-KjdqK.js.map → CanvasimageWidget-CNJlzLqo.js.map} +1 -1
  33. package/dist/{CanvasimageWidget-BngTI0bl.cjs → CanvasimageWidget-DjvdDCRS.cjs} +2 -2
  34. package/dist/{CanvasimageWidget-BngTI0bl.cjs.map → CanvasimageWidget-DjvdDCRS.cjs.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-0qTn6Gb5.cjs → CanvasimagevalueWidget-C1fI-ftP.cjs} +2 -2
  36. package/dist/{CanvasimagevalueWidget-0qTn6Gb5.cjs.map → CanvasimagevalueWidget-C1fI-ftP.cjs.map} +1 -1
  37. package/dist/{CanvasimagevalueWidget-B-wBQisl.js → CanvasimagevalueWidget-DudwwOD6.js} +3 -3
  38. package/dist/{CanvasimagevalueWidget-B-wBQisl.js.map → CanvasimagevalueWidget-DudwwOD6.js.map} +1 -1
  39. package/dist/{CanvaslabelWidget-b2yvqZBZ.cjs → CanvaslabelWidget--6Sjc4E8.cjs} +2 -2
  40. package/dist/{CanvaslabelWidget-b2yvqZBZ.cjs.map → CanvaslabelWidget--6Sjc4E8.cjs.map} +1 -1
  41. package/dist/{CanvaslabelWidget-CLBK52pP.js → CanvaslabelWidget-BZQp16dH.js} +2 -2
  42. package/dist/{CanvaslabelWidget-CLBK52pP.js.map → CanvaslabelWidget-BZQp16dH.js.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-CAa70y_o.js → CanvaslabelvalueWidget-CHS36Te9.js} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-CAa70y_o.js.map → CanvaslabelvalueWidget-CHS36Te9.js.map} +1 -1
  45. package/dist/{CanvaslabelvalueWidget-CA03ncx0.cjs → CanvaslabelvalueWidget-DZCxsIKk.cjs} +2 -2
  46. package/dist/{CanvaslabelvalueWidget-CA03ncx0.cjs.map → CanvaslabelvalueWidget-DZCxsIKk.cjs.map} +1 -1
  47. package/dist/{CanvaslineWidget-B-yhgIlR.cjs → CanvaslineWidget-Bn83Rb10.cjs} +2 -2
  48. package/dist/{CanvaslineWidget-B-yhgIlR.cjs.map → CanvaslineWidget-Bn83Rb10.cjs.map} +1 -1
  49. package/dist/{CanvaslineWidget-PdwVJOQ5.js → CanvaslineWidget-nhKEAGhs.js} +2 -2
  50. package/dist/{CanvaslineWidget-PdwVJOQ5.js.map → CanvaslineWidget-nhKEAGhs.js.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-PVW-_nOk.cjs → CanvaslinevalueWidget-C6x_4Gc9.cjs} +2 -2
  52. package/dist/{CanvaslinevalueWidget-PVW-_nOk.cjs.map → CanvaslinevalueWidget-C6x_4Gc9.cjs.map} +1 -1
  53. package/dist/{CanvaslinevalueWidget-CKrp1f3Z.js → CanvaslinevalueWidget-DsyIDkJy.js} +2 -2
  54. package/dist/{CanvaslinevalueWidget-CKrp1f3Z.js.map → CanvaslinevalueWidget-DsyIDkJy.js.map} +1 -1
  55. package/dist/{CheckbuttonWidget-BItae9qq.cjs → CheckbuttonWidget-BvggsGZY.cjs} +2 -2
  56. package/dist/{CheckbuttonWidget-BItae9qq.cjs.map → CheckbuttonWidget-BvggsGZY.cjs.map} +1 -1
  57. package/dist/{CheckbuttonWidget-CTSfH4NN.js → CheckbuttonWidget-DCam7Jd0.js} +2 -2
  58. package/dist/{CheckbuttonWidget-CTSfH4NN.js.map → CheckbuttonWidget-DCam7Jd0.js.map} +1 -1
  59. package/dist/{ComboboxWidget-BFKz1kva.cjs → ComboboxWidget-BS5WSbrK.cjs} +2 -2
  60. package/dist/{ComboboxWidget-BFKz1kva.cjs.map → ComboboxWidget-BS5WSbrK.cjs.map} +1 -1
  61. package/dist/{ComboboxWidget-BQzv9zk5.js → ComboboxWidget-ZX-k-_aK.js} +2 -2
  62. package/dist/{ComboboxWidget-BQzv9zk5.js.map → ComboboxWidget-ZX-k-_aK.js.map} +1 -1
  63. package/dist/{CriticalCmdDialog-CfUGhKPh.cjs → CriticalCmdDialog-7tOK2XQk.cjs} +2 -2
  64. package/dist/{CriticalCmdDialog-CfUGhKPh.cjs.map → CriticalCmdDialog-7tOK2XQk.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-D5m3w1fr.js → CriticalCmdDialog-Dylpoz_4.js} +2 -2
  66. package/dist/{CriticalCmdDialog-D5m3w1fr.js.map → CriticalCmdDialog-Dylpoz_4.js.map} +1 -1
  67. package/dist/CustomIcon-Bop2mEnu.cjs.map +1 -1
  68. package/dist/CustomIcon-h5X7369N.js.map +1 -1
  69. package/dist/{DateWidget-DKXxXT1g.js → DateWidget-DuJ5uC2t.js} +2 -2
  70. package/dist/{DateWidget-DKXxXT1g.js.map → DateWidget-DuJ5uC2t.js.map} +1 -1
  71. package/dist/{DateWidget-CuUySNFb.cjs → DateWidget-jejbk2-G.cjs} +2 -2
  72. package/dist/{DateWidget-CuUySNFb.cjs.map → DateWidget-jejbk2-G.cjs.map} +1 -1
  73. package/dist/{DetailsDialog-DEjAO6yp.js → DetailsDialog-BQE0TraI.js} +2 -2
  74. package/dist/DetailsDialog-BQE0TraI.js.map +1 -0
  75. package/dist/{DetailsDialog-DlUuDdFa.cjs → DetailsDialog-DmKpPDNn.cjs} +2 -2
  76. package/dist/{DetailsDialog-DlUuDdFa.cjs.map → DetailsDialog-DmKpPDNn.cjs.map} +1 -1
  77. package/dist/DynamicWidget-BWEVCUfd.cjs.map +1 -1
  78. package/dist/DynamicWidget-CfMtj7H8.js.map +1 -1
  79. package/dist/{EventListDialog-CPYg1a2g.cjs → EventListDialog-CDcJcxy5.cjs} +2 -2
  80. package/dist/{EventListDialog-CPYg1a2g.cjs.map → EventListDialog-CDcJcxy5.cjs.map} +1 -1
  81. package/dist/{EventListDialog-CabnKWVX.js → EventListDialog-CGUFCrJF.js} +3 -3
  82. package/dist/{EventListDialog-CabnKWVX.js.map → EventListDialog-CGUFCrJF.js.map} +1 -1
  83. package/dist/{FormatvalueWidget-7Yp9jfgX.js → FormatvalueWidget-DYICPNcx.js} +3 -3
  84. package/dist/{FormatvalueWidget-7Yp9jfgX.js.map → FormatvalueWidget-DYICPNcx.js.map} +1 -1
  85. package/dist/{FormatvalueWidget-LNNT9pLh.cjs → FormatvalueWidget-wu7Q3sXu.cjs} +2 -2
  86. package/dist/{FormatvalueWidget-LNNT9pLh.cjs.map → FormatvalueWidget-wu7Q3sXu.cjs.map} +1 -1
  87. package/dist/{Graph-hzxapkW-.js → Graph-DCihpnT0.js} +2 -2
  88. package/dist/{Graph-hzxapkW-.js.map → Graph-DCihpnT0.js.map} +1 -1
  89. package/dist/{Graph-ZGEBRGOA.cjs → Graph-mSqImgca.cjs} +2 -2
  90. package/dist/{Graph-ZGEBRGOA.cjs.map → Graph-mSqImgca.cjs.map} +1 -1
  91. package/dist/{GraphWidget-caScsshg.cjs → GraphWidget-CQjKAMPR.cjs} +2 -2
  92. package/dist/{GraphWidget-caScsshg.cjs.map → GraphWidget-CQjKAMPR.cjs.map} +1 -1
  93. package/dist/{GraphWidget-Dn0ZaxHo.js → GraphWidget-cTVq29cY.js} +2 -2
  94. package/dist/{GraphWidget-Dn0ZaxHo.js.map → GraphWidget-cTVq29cY.js.map} +1 -1
  95. package/dist/{HorizontalWidget-Bt7N0bIN.cjs → HorizontalWidget--AkRJPlL.cjs} +2 -2
  96. package/dist/{HorizontalWidget-Bt7N0bIN.cjs.map → HorizontalWidget--AkRJPlL.cjs.map} +1 -1
  97. package/dist/{HorizontalWidget-BFzi3rMl.js → HorizontalWidget-v1pfd94Z.js} +2 -2
  98. package/dist/{HorizontalWidget-BFzi3rMl.js.map → HorizontalWidget-v1pfd94Z.js.map} +1 -1
  99. package/dist/{HorizontalboxWidget-DIagyace.js → HorizontalboxWidget-B06-c_n4.js} +5 -5
  100. package/dist/{HorizontalboxWidget-DIagyace.js.map → HorizontalboxWidget-B06-c_n4.js.map} +1 -1
  101. package/dist/{HorizontalboxWidget-Dv6NWovB.cjs → HorizontalboxWidget-synL-Bar.cjs} +2 -2
  102. package/dist/{HorizontalboxWidget-Dv6NWovB.cjs.map → HorizontalboxWidget-synL-Bar.cjs.map} +1 -1
  103. package/dist/{HorizontallineWidget-BOZNWM3a.js → HorizontallineWidget-DEODVJCk.js} +2 -2
  104. package/dist/{HorizontallineWidget-BOZNWM3a.js.map → HorizontallineWidget-DEODVJCk.js.map} +1 -1
  105. package/dist/{HorizontallineWidget-CFsWevmI.cjs → HorizontallineWidget-lTr2JTFY.cjs} +2 -2
  106. package/dist/{HorizontallineWidget-CFsWevmI.cjs.map → HorizontallineWidget-lTr2JTFY.cjs.map} +1 -1
  107. package/dist/{IframeWidget-J6g6EhHh.cjs → IframeWidget-ByhwW9yG.cjs} +2 -2
  108. package/dist/{IframeWidget-J6g6EhHh.cjs.map → IframeWidget-ByhwW9yG.cjs.map} +1 -1
  109. package/dist/{IframeWidget-BU24bhc2.js → IframeWidget-n8lNXrpt.js} +2 -2
  110. package/dist/{IframeWidget-BU24bhc2.js.map → IframeWidget-n8lNXrpt.js.map} +1 -1
  111. package/dist/{ImageLoader-xxDrxPAX.js → ImageLoader-CfcErydq.js} +2 -2
  112. package/dist/{ImageLoader-xxDrxPAX.js.map → ImageLoader-CfcErydq.js.map} +1 -1
  113. package/dist/{ImageLoader-BVVI9FSl.cjs → ImageLoader-DBWVFtNu.cjs} +2 -2
  114. package/dist/{ImageLoader-BVVI9FSl.cjs.map → ImageLoader-DBWVFtNu.cjs.map} +1 -1
  115. package/dist/{ImageviewerWidget-BSTS4nPw.cjs → ImageviewerWidget-D4mU6wLX.cjs} +2 -2
  116. package/dist/{ImageviewerWidget-BSTS4nPw.cjs.map → ImageviewerWidget-D4mU6wLX.cjs.map} +1 -1
  117. package/dist/{ImageviewerWidget-YMA4CVsl.js → ImageviewerWidget-DE8fj06Z.js} +2 -2
  118. package/dist/{ImageviewerWidget-YMA4CVsl.js.map → ImageviewerWidget-DE8fj06Z.js.map} +1 -1
  119. package/dist/{InterfacesTab-Cv50gOTl.js → InterfacesTab-BF-Wx5gk.js} +3 -3
  120. package/dist/{InterfacesTab-Cv50gOTl.js.map → InterfacesTab-BF-Wx5gk.js.map} +1 -1
  121. package/dist/{InterfacesTab-DOjyTYVC.cjs → InterfacesTab-DTAAIx-y.cjs} +2 -2
  122. package/dist/{InterfacesTab-DOjyTYVC.cjs.map → InterfacesTab-DTAAIx-y.cjs.map} +1 -1
  123. package/dist/{LabelWidget-t-nltZ16.cjs → LabelWidget-DQZqRxKF.cjs} +2 -2
  124. package/dist/{LabelWidget-t-nltZ16.cjs.map → LabelWidget-DQZqRxKF.cjs.map} +1 -1
  125. package/dist/{LabelWidget-2402SA18.js → LabelWidget-iUIJLhdA.js} +2 -2
  126. package/dist/{LabelWidget-2402SA18.js.map → LabelWidget-iUIJLhdA.js.map} +1 -1
  127. package/dist/{LabelledWidget-tWrIx1sj.cjs → LabelledWidget-9HWChRmv.cjs} +2 -2
  128. package/dist/{LabelledWidget-tWrIx1sj.cjs.map → LabelledWidget-9HWChRmv.cjs.map} +1 -1
  129. package/dist/{LabelledWidget-Cbubzj_g.js → LabelledWidget-KI6fMlsr.js} +4 -4
  130. package/dist/{LabelledWidget-Cbubzj_g.js.map → LabelledWidget-KI6fMlsr.js.map} +1 -1
  131. package/dist/{LabelprogressbarWidget-s8V7w6LJ.js → LabelprogressbarWidget-C2lzmqBH.js} +4 -4
  132. package/dist/{LabelprogressbarWidget-s8V7w6LJ.js.map → LabelprogressbarWidget-C2lzmqBH.js.map} +1 -1
  133. package/dist/{LabelprogressbarWidget-1k8njgQG.cjs → LabelprogressbarWidget-DwzTP73u.cjs} +2 -2
  134. package/dist/{LabelprogressbarWidget-1k8njgQG.cjs.map → LabelprogressbarWidget-DwzTP73u.cjs.map} +1 -1
  135. package/dist/{LabelsparklineWidget-qbM_OXLh.js → LabelsparklineWidget-Ci6GGm29.js} +4 -4
  136. package/dist/{LabelsparklineWidget-qbM_OXLh.js.map → LabelsparklineWidget-Ci6GGm29.js.map} +1 -1
  137. package/dist/{LabelsparklineWidget-4yoeI7gJ.cjs → LabelsparklineWidget-DMjBshq8.cjs} +2 -2
  138. package/dist/{LabelsparklineWidget-4yoeI7gJ.cjs.map → LabelsparklineWidget-DMjBshq8.cjs.map} +1 -1
  139. package/dist/{LabelvalueWidget-CEua41bt.cjs → LabelvalueWidget-mAb0eLA8.cjs} +2 -2
  140. package/dist/{LabelvalueWidget-CEua41bt.cjs.map → LabelvalueWidget-mAb0eLA8.cjs.map} +1 -1
  141. package/dist/{LabelvalueWidget-B5Ihc2yP.js → LabelvalueWidget-oiW-JDw6.js} +4 -4
  142. package/dist/{LabelvalueWidget-B5Ihc2yP.js.map → LabelvalueWidget-oiW-JDw6.js.map} +1 -1
  143. package/dist/{LabelvaluedescWidget-7jth-OmG.cjs → LabelvaluedescWidget-CZJ0kZN-.cjs} +2 -2
  144. package/dist/{LabelvaluedescWidget-7jth-OmG.cjs.map → LabelvaluedescWidget-CZJ0kZN-.cjs.map} +1 -1
  145. package/dist/{LabelvaluedescWidget-Cl3JHPGR.js → LabelvaluedescWidget-Ck0AJ9g0.js} +5 -5
  146. package/dist/{LabelvaluedescWidget-Cl3JHPGR.js.map → LabelvaluedescWidget-Ck0AJ9g0.js.map} +1 -1
  147. package/dist/{LabelvaluelimitsbarWidget-BDhDe4-V.cjs → LabelvaluelimitsbarWidget-DjBqYxRr.cjs} +2 -2
  148. package/dist/{LabelvaluelimitsbarWidget-BDhDe4-V.cjs.map → LabelvaluelimitsbarWidget-DjBqYxRr.cjs.map} +1 -1
  149. package/dist/{LabelvaluelimitsbarWidget-DnpfRyHl.js → LabelvaluelimitsbarWidget-aaVLaejn.js} +4 -4
  150. package/dist/{LabelvaluelimitsbarWidget-DnpfRyHl.js.map → LabelvaluelimitsbarWidget-aaVLaejn.js.map} +1 -1
  151. package/dist/{LabelvaluelimitscolumnWidget-d1puBx2r.cjs → LabelvaluelimitscolumnWidget-GputlDZq.cjs} +2 -2
  152. package/dist/{LabelvaluelimitscolumnWidget-d1puBx2r.cjs.map → LabelvaluelimitscolumnWidget-GputlDZq.cjs.map} +1 -1
  153. package/dist/{LabelvaluelimitscolumnWidget-D4L9L5oa.js → LabelvaluelimitscolumnWidget-Uur6aqOg.js} +5 -5
  154. package/dist/{LabelvaluelimitscolumnWidget-D4L9L5oa.js.map → LabelvaluelimitscolumnWidget-Uur6aqOg.js.map} +1 -1
  155. package/dist/{LabelvaluerangebarWidget-BivnHCbE.js → LabelvaluerangebarWidget-Bs9locqu.js} +4 -4
  156. package/dist/{LabelvaluerangebarWidget-BivnHCbE.js.map → LabelvaluerangebarWidget-Bs9locqu.js.map} +1 -1
  157. package/dist/{LabelvaluerangebarWidget-BczxhVFU.cjs → LabelvaluerangebarWidget-Ci-n_hxk.cjs} +2 -2
  158. package/dist/{LabelvaluerangebarWidget-BczxhVFU.cjs.map → LabelvaluerangebarWidget-Ci-n_hxk.cjs.map} +1 -1
  159. package/dist/{Layout-B7KU2jmu.js → Layout-1z8iJV5-.js} +2 -2
  160. package/dist/{Layout-B7KU2jmu.js.map → Layout-1z8iJV5-.js.map} +1 -1
  161. package/dist/Layout-kOQnicRa.cjs +2 -0
  162. package/dist/{Layout-DoI_Bpyu.cjs.map → Layout-kOQnicRa.cjs.map} +1 -1
  163. package/dist/{LedWidget-DpdthKEd.js → LedWidget-BN8IgAxJ.js} +4 -4
  164. package/dist/{LedWidget-DpdthKEd.js.map → LedWidget-BN8IgAxJ.js.map} +1 -1
  165. package/dist/{LedWidget-BSZWv-hh.cjs → LedWidget-BUTbyEBi.cjs} +2 -2
  166. package/dist/{LedWidget-BSZWv-hh.cjs.map → LedWidget-BUTbyEBi.cjs.map} +1 -1
  167. package/dist/{LimitsbarWidget-CLyj3Kb-.js → LimitsbarWidget-BxxoKTjp.js} +2 -2
  168. package/dist/{LimitsbarWidget-CLyj3Kb-.js.map → LimitsbarWidget-BxxoKTjp.js.map} +1 -1
  169. package/dist/{LimitsbarWidget-CaBnnZR-.cjs → LimitsbarWidget-Co5GAHro.cjs} +2 -2
  170. package/dist/{LimitsbarWidget-CaBnnZR-.cjs.map → LimitsbarWidget-Co5GAHro.cjs.map} +1 -1
  171. package/dist/{LimitscolorWidget-DilOPB_Q.cjs → LimitscolorWidget-BpTcgqRC.cjs} +2 -2
  172. package/dist/{LimitscolorWidget-DilOPB_Q.cjs.map → LimitscolorWidget-BpTcgqRC.cjs.map} +1 -1
  173. package/dist/{LimitscolorWidget-ChvzYoug.js → LimitscolorWidget-DFDwf4In.js} +2 -2
  174. package/dist/{LimitscolorWidget-ChvzYoug.js.map → LimitscolorWidget-DFDwf4In.js.map} +1 -1
  175. package/dist/{LimitscolumnWidget-IOhsLFZ1.js → LimitscolumnWidget-CdBh2mJu.js} +2 -2
  176. package/dist/{LimitscolumnWidget-IOhsLFZ1.js.map → LimitscolumnWidget-CdBh2mJu.js.map} +1 -1
  177. package/dist/{LimitscolumnWidget-C8m6Sqp8.cjs → LimitscolumnWidget-CqJJKDzz.cjs} +2 -2
  178. package/dist/{LimitscolumnWidget-C8m6Sqp8.cjs.map → LimitscolumnWidget-CqJJKDzz.cjs.map} +1 -1
  179. package/dist/{LinegraphWidget-DOPBUi0Y.cjs → LinegraphWidget-Bay0EtbI.cjs} +2 -2
  180. package/dist/{LinegraphWidget-DOPBUi0Y.cjs.map → LinegraphWidget-Bay0EtbI.cjs.map} +1 -1
  181. package/dist/{LinegraphWidget-DZdqMqjw.js → LinegraphWidget-jXksfbPb.js} +4 -4
  182. package/dist/{LinegraphWidget-DZdqMqjw.js.map → LinegraphWidget-jXksfbPb.js.map} +1 -1
  183. package/dist/{MatrixbycolumnsWidget-BzGYMhJ2.js → MatrixbycolumnsWidget-DCwxPjwS.js} +3 -3
  184. package/dist/{MatrixbycolumnsWidget-BzGYMhJ2.js.map → MatrixbycolumnsWidget-DCwxPjwS.js.map} +1 -1
  185. package/dist/{MatrixbycolumnsWidget-BrynJcbR.cjs → MatrixbycolumnsWidget-DxRhvPGv.cjs} +2 -2
  186. package/dist/{MatrixbycolumnsWidget-BrynJcbR.cjs.map → MatrixbycolumnsWidget-DxRhvPGv.cjs.map} +1 -1
  187. package/dist/{MicroservicesTab-DrqUNTBZ.js → MicroservicesTab-B-SdMwek.js} +3 -3
  188. package/dist/{MicroservicesTab-DrqUNTBZ.js.map → MicroservicesTab-B-SdMwek.js.map} +1 -1
  189. package/dist/{MicroservicesTab-pL6PYFy5.cjs → MicroservicesTab-DGaTcj-y.cjs} +2 -2
  190. package/dist/{MicroservicesTab-pL6PYFy5.cjs.map → MicroservicesTab-DGaTcj-y.cjs.map} +1 -1
  191. package/dist/{Openc3Screen-CPknMmN8.js → Openc3Screen-BZN0Wtrm.js} +8 -4
  192. package/dist/Openc3Screen-BZN0Wtrm.js.map +1 -0
  193. package/dist/{Openc3Screen-CQkUFNEH.cjs → Openc3Screen-dtpBWZdA.cjs} +3 -3
  194. package/dist/Openc3Screen-dtpBWZdA.cjs.map +1 -0
  195. package/dist/{OutputDialog-B6i5yvkr.js → OutputDialog-CcSp-Uqo.js} +2 -2
  196. package/dist/{OutputDialog-B6i5yvkr.js.map → OutputDialog-CcSp-Uqo.js.map} +1 -1
  197. package/dist/{OutputDialog-BwBPgVHK.cjs → OutputDialog-CxKDhrg6.cjs} +2 -2
  198. package/dist/{OutputDialog-BwBPgVHK.cjs.map → OutputDialog-CxKDhrg6.cjs.map} +1 -1
  199. package/dist/{PackagesTab-DYoGxaWx.cjs → PackagesTab-B4V2n4io.cjs} +2 -2
  200. package/dist/{PackagesTab-DYoGxaWx.cjs.map → PackagesTab-B4V2n4io.cjs.map} +1 -1
  201. package/dist/{PackagesTab-CjcBp95A.js → PackagesTab-Dx25CfF0.js} +3 -3
  202. package/dist/{PackagesTab-CjcBp95A.js.map → PackagesTab-Dx25CfF0.js.map} +1 -1
  203. package/dist/{PluginsTab-UcluFu7J.cjs → PluginsTab-DHO1tK2S.cjs} +3 -3
  204. package/dist/PluginsTab-DHO1tK2S.cjs.map +1 -0
  205. package/dist/{PluginsTab-Diu6vzUR.js → PluginsTab-lHDR5v6S.js} +6 -4
  206. package/dist/PluginsTab-lHDR5v6S.js.map +1 -0
  207. package/dist/{ProgressbarWidget-BwnZ2_h4.cjs → ProgressbarWidget-C0AkbX_o.cjs} +2 -2
  208. package/dist/{ProgressbarWidget-BwnZ2_h4.cjs.map → ProgressbarWidget-C0AkbX_o.cjs.map} +1 -1
  209. package/dist/{ProgressbarWidget-Bre-0zcS.js → ProgressbarWidget-Cdu5nJC3.js} +2 -2
  210. package/dist/{ProgressbarWidget-Bre-0zcS.js.map → ProgressbarWidget-Cdu5nJC3.js.map} +1 -1
  211. package/dist/{RadiobuttonWidget-CLbfhrkc.js → RadiobuttonWidget-CZZGbvdG.js} +2 -2
  212. package/dist/{RadiobuttonWidget-CLbfhrkc.js.map → RadiobuttonWidget-CZZGbvdG.js.map} +1 -1
  213. package/dist/{RadiobuttonWidget-BzO43-f0.cjs → RadiobuttonWidget-DslmJO31.cjs} +2 -2
  214. package/dist/{RadiobuttonWidget-BzO43-f0.cjs.map → RadiobuttonWidget-DslmJO31.cjs.map} +1 -1
  215. package/dist/{RadiogroupWidget-DvRc70_Q.js → RadiogroupWidget-CQN3v8Ip.js} +2 -2
  216. package/dist/{RadiogroupWidget-DvRc70_Q.js.map → RadiogroupWidget-CQN3v8Ip.js.map} +1 -1
  217. package/dist/{RadiogroupWidget-CCHJJuvX.cjs → RadiogroupWidget-DKgBAR9E.cjs} +2 -2
  218. package/dist/{RadiogroupWidget-CCHJJuvX.cjs.map → RadiogroupWidget-DKgBAR9E.cjs.map} +1 -1
  219. package/dist/{RangebarWidget-DbmeAM6e.cjs → RangebarWidget-Tq80I5zA.cjs} +2 -2
  220. package/dist/{RangebarWidget-DbmeAM6e.cjs.map → RangebarWidget-Tq80I5zA.cjs.map} +1 -1
  221. package/dist/{RangebarWidget-BvzVWcfZ.js → RangebarWidget-dZN9WjoZ.js} +2 -2
  222. package/dist/{RangebarWidget-BvzVWcfZ.js.map → RangebarWidget-dZN9WjoZ.js.map} +1 -1
  223. package/dist/{RedisTab-Dq_xGlhh.cjs → RedisTab-CdiSo-CO.cjs} +2 -2
  224. package/dist/{RedisTab-Dq_xGlhh.cjs.map → RedisTab-CdiSo-CO.cjs.map} +1 -1
  225. package/dist/{RedisTab-BWYQfcqX.js → RedisTab-CkSwEwTZ.js} +2 -2
  226. package/dist/{RedisTab-BWYQfcqX.js.map → RedisTab-CkSwEwTZ.js.map} +1 -1
  227. package/dist/{RollupWidget-BnhD1fw1.cjs → RollupWidget-CHdZAUCb.cjs} +2 -2
  228. package/dist/{RollupWidget-BnhD1fw1.cjs.map → RollupWidget-CHdZAUCb.cjs.map} +1 -1
  229. package/dist/{RollupWidget-KT243Ed8.js → RollupWidget-i9DnNJl6.js} +2 -2
  230. package/dist/{RollupWidget-KT243Ed8.js.map → RollupWidget-i9DnNJl6.js.map} +1 -1
  231. package/dist/{RoutersTab-DS95AQxI.cjs → RoutersTab-Cp8wM-mS.cjs} +2 -2
  232. package/dist/{RoutersTab-DS95AQxI.cjs.map → RoutersTab-Cp8wM-mS.cjs.map} +1 -1
  233. package/dist/{RoutersTab-CLwJ6J7T.js → RoutersTab-DiYEI1Nq.js} +3 -3
  234. package/dist/{RoutersTab-CLwJ6J7T.js.map → RoutersTab-DiYEI1Nq.js.map} +1 -1
  235. package/dist/{ScriptChooser-D2-VTc4T.cjs → ScriptChooser-BnTP6ucF.cjs} +2 -2
  236. package/dist/{ScriptChooser-D2-VTc4T.cjs.map → ScriptChooser-BnTP6ucF.cjs.map} +1 -1
  237. package/dist/{ScriptChooser-CA2eMEE2.js → ScriptChooser-Cua8ObYv.js} +2 -2
  238. package/dist/{ScriptChooser-CA2eMEE2.js.map → ScriptChooser-Cua8ObYv.js.map} +1 -1
  239. package/dist/{ScrollwindowWidget-DcpdXyrP.js → ScrollwindowWidget-54GU96Ve.js} +3 -3
  240. package/dist/{ScrollwindowWidget-DcpdXyrP.js.map → ScrollwindowWidget-54GU96Ve.js.map} +1 -1
  241. package/dist/{ScrollwindowWidget-vnhzeIMy.cjs → ScrollwindowWidget-C5_X-KwQ.cjs} +2 -2
  242. package/dist/{ScrollwindowWidget-vnhzeIMy.cjs.map → ScrollwindowWidget-C5_X-KwQ.cjs.map} +1 -1
  243. package/dist/{SecretsTab-HP8E21SW.cjs → SecretsTab-DY16usGc.cjs} +2 -2
  244. package/dist/{SecretsTab-HP8E21SW.cjs.map → SecretsTab-DY16usGc.cjs.map} +1 -1
  245. package/dist/{SecretsTab-CQNTFJAM.js → SecretsTab-uWRVI1EE.js} +2 -2
  246. package/dist/{SecretsTab-CQNTFJAM.js.map → SecretsTab-uWRVI1EE.js.map} +1 -1
  247. package/dist/{SettingsTab-BAOaLzuc.js → SettingsTab-BVnr4OtU.js} +3 -3
  248. package/dist/{SettingsTab-BAOaLzuc.js.map → SettingsTab-BVnr4OtU.js.map} +1 -1
  249. package/dist/{SettingsTab-CMQxLfkn.cjs → SettingsTab-BkwaDhYo.cjs} +2 -2
  250. package/dist/{SettingsTab-CMQxLfkn.cjs.map → SettingsTab-BkwaDhYo.cjs.map} +1 -1
  251. package/dist/{SignalWidget-CoTi0Uzy.js → SignalWidget-B_kA9eCJ.js} +2 -2
  252. package/dist/{SignalWidget-CoTi0Uzy.js.map → SignalWidget-B_kA9eCJ.js.map} +1 -1
  253. package/dist/{SignalWidget-DqxDT42W.cjs → SignalWidget-COL8kXSJ.cjs} +2 -2
  254. package/dist/{SignalWidget-DqxDT42W.cjs.map → SignalWidget-COL8kXSJ.cjs.map} +1 -1
  255. package/dist/{SimpleTextDialog-BdV90ARp.cjs → SimpleTextDialog-BWUqPlTv.cjs} +2 -2
  256. package/dist/{SimpleTextDialog-BdV90ARp.cjs.map → SimpleTextDialog-BWUqPlTv.cjs.map} +1 -1
  257. package/dist/{SimpleTextDialog-BqVdFj1n.js → SimpleTextDialog-BulqUrdH.js} +2 -2
  258. package/dist/{SimpleTextDialog-BqVdFj1n.js.map → SimpleTextDialog-BulqUrdH.js.map} +1 -1
  259. package/dist/{SpacerWidget--x9MPrff.cjs → SpacerWidget-D_Ya_b1j.cjs} +2 -2
  260. package/dist/{SpacerWidget--x9MPrff.cjs.map → SpacerWidget-D_Ya_b1j.cjs.map} +1 -1
  261. package/dist/{SpacerWidget-CTekSgNO.js → SpacerWidget-XoMPHak8.js} +2 -2
  262. package/dist/{SpacerWidget-CTekSgNO.js.map → SpacerWidget-XoMPHak8.js.map} +1 -1
  263. package/dist/{SparklineWidget-BHdwgOeC.cjs → SparklineWidget-CRzXTS5z.cjs} +2 -2
  264. package/dist/{SparklineWidget-BHdwgOeC.cjs.map → SparklineWidget-CRzXTS5z.cjs.map} +1 -1
  265. package/dist/{SparklineWidget-BxwPKrIr.js → SparklineWidget-DQNsvEj9.js} +4 -4
  266. package/dist/{SparklineWidget-BxwPKrIr.js.map → SparklineWidget-DQNsvEj9.js.map} +1 -1
  267. package/dist/{TabbookWidget-DuszE8ho.cjs → TabbookWidget-Bh-GDBXg.cjs} +2 -2
  268. package/dist/{TabbookWidget-DuszE8ho.cjs.map → TabbookWidget-Bh-GDBXg.cjs.map} +1 -1
  269. package/dist/{TabbookWidget-B6Nx3Kmt.js → TabbookWidget-_HVA72t5.js} +2 -2
  270. package/dist/{TabbookWidget-B6Nx3Kmt.js.map → TabbookWidget-_HVA72t5.js.map} +1 -1
  271. package/dist/{TargetsTab-u-6nY7FX.js → TargetsTab-BfoRYnTP.js} +3 -3
  272. package/dist/{TargetsTab-u-6nY7FX.js.map → TargetsTab-BfoRYnTP.js.map} +1 -1
  273. package/dist/{TargetsTab-B8appkxl.cjs → TargetsTab-CGE-jQAz.cjs} +2 -2
  274. package/dist/{TargetsTab-B8appkxl.cjs.map → TargetsTab-CGE-jQAz.cjs.map} +1 -1
  275. package/dist/TextBoxDialog-C60jmnyN.js.map +1 -1
  276. package/dist/TextBoxDialog-DWt30tB8.cjs.map +1 -1
  277. package/dist/{TextboxWidget-DJgAfLFU.js → TextboxWidget-0JXn4bMH.js} +4 -4
  278. package/dist/{TextboxWidget-DJgAfLFU.js.map → TextboxWidget-0JXn4bMH.js.map} +1 -1
  279. package/dist/{TextboxWidget-CBdukKN5.cjs → TextboxWidget-uDptDK_z.cjs} +2 -2
  280. package/dist/{TextboxWidget-CBdukKN5.cjs.map → TextboxWidget-uDptDK_z.cjs.map} +1 -1
  281. package/dist/{TextfieldWidget-u6w1_wqO.cjs → TextfieldWidget-B0FCskrL.cjs} +2 -2
  282. package/dist/{TextfieldWidget-u6w1_wqO.cjs.map → TextfieldWidget-B0FCskrL.cjs.map} +1 -1
  283. package/dist/{TextfieldWidget-Bc2xGs8v.js → TextfieldWidget-BXr9MkVW.js} +2 -2
  284. package/dist/{TextfieldWidget-Bc2xGs8v.js.map → TextfieldWidget-BXr9MkVW.js.map} +1 -1
  285. package/dist/{TimeWidget-DO6ZuMLO.js → TimeWidget-C67uwMGH.js} +2 -2
  286. package/dist/{TimeWidget-DO6ZuMLO.js.map → TimeWidget-C67uwMGH.js.map} +1 -1
  287. package/dist/{TimeWidget-Bmzei1k_.cjs → TimeWidget-q5tUvHC6.cjs} +2 -2
  288. package/dist/{TimeWidget-Bmzei1k_.cjs.map → TimeWidget-q5tUvHC6.cjs.map} +1 -1
  289. package/dist/{TitleWidget-B8f0Sa7B.cjs → TitleWidget-REsd7MqR.cjs} +2 -2
  290. package/dist/{TitleWidget-B8f0Sa7B.cjs.map → TitleWidget-REsd7MqR.cjs.map} +1 -1
  291. package/dist/{TitleWidget-CkZhMme1.js → TitleWidget-t_YLgUMB.js} +2 -2
  292. package/dist/{TitleWidget-CkZhMme1.js.map → TitleWidget-t_YLgUMB.js.map} +1 -1
  293. package/dist/{ToolsTab-WSIi50nR.cjs → ToolsTab-CGztf9_j.cjs} +2 -2
  294. package/dist/{ToolsTab-WSIi50nR.cjs.map → ToolsTab-CGztf9_j.cjs.map} +1 -1
  295. package/dist/{ToolsTab-BI6lImcw.js → ToolsTab-DKYeIlXu.js} +3 -3
  296. package/dist/{ToolsTab-BI6lImcw.js.map → ToolsTab-DKYeIlXu.js.map} +1 -1
  297. package/dist/{TopBar-BwdXu4vD.cjs → TopBar-B0UcAtIW.cjs} +2 -2
  298. package/dist/{TopBar-BwdXu4vD.cjs.map → TopBar-B0UcAtIW.cjs.map} +1 -1
  299. package/dist/{TopBar-h_jaZ23r.js → TopBar-BrCfgCxc.js} +2 -2
  300. package/dist/{TopBar-h_jaZ23r.js.map → TopBar-BrCfgCxc.js.map} +1 -1
  301. package/dist/{UpgradeToEnterpriseDialog-DE2DoA0l.js → UpgradeToEnterpriseDialog-CGyR2v7U.js} +2 -2
  302. package/dist/{UpgradeToEnterpriseDialog-DE2DoA0l.js.map → UpgradeToEnterpriseDialog-CGyR2v7U.js.map} +1 -1
  303. package/dist/{UpgradeToEnterpriseDialog-B2LIPuO6.cjs → UpgradeToEnterpriseDialog-DJ3oth3I.cjs} +2 -2
  304. package/dist/{UpgradeToEnterpriseDialog-B2LIPuO6.cjs.map → UpgradeToEnterpriseDialog-DJ3oth3I.cjs.map} +1 -1
  305. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-CKn4Dnn-.cjs → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs} +2 -2
  306. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-CKn4Dnn-.cjs.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs.map} +1 -1
  307. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-Vn0OLZcG.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js} +2 -2
  308. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-Vn0OLZcG.js.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js.map} +1 -1
  309. package/dist/{VWidget-DKQBzANO.cjs → VWidget-BMxLXtSO.cjs} +2 -2
  310. package/dist/{VWidget-DKQBzANO.cjs.map → VWidget-BMxLXtSO.cjs.map} +1 -1
  311. package/dist/{VWidget-DzhcRBQe.js → VWidget-j2GIGGSX.js} +6 -3
  312. package/dist/{VWidget-DzhcRBQe.js.map → VWidget-j2GIGGSX.js.map} +1 -1
  313. package/dist/{ValueWidget-tieHz2H1.js → ValueWidget-3jNtnh5i.js} +4 -4
  314. package/dist/{ValueWidget-tieHz2H1.js.map → ValueWidget-3jNtnh5i.js.map} +1 -1
  315. package/dist/{ValueWidget-BpS7e3Ks.cjs → ValueWidget-CjZeSiPQ.cjs} +2 -2
  316. package/dist/{ValueWidget-BpS7e3Ks.cjs.map → ValueWidget-CjZeSiPQ.cjs.map} +1 -1
  317. package/dist/{ValuelimitsbarWidget-COsc2aMd.cjs → ValuelimitsbarWidget-CkLbRP8P.cjs} +2 -2
  318. package/dist/{ValuelimitsbarWidget-COsc2aMd.cjs.map → ValuelimitsbarWidget-CkLbRP8P.cjs.map} +1 -1
  319. package/dist/{ValuelimitsbarWidget-oFqxZu0t.js → ValuelimitsbarWidget-JSceOzGS.js} +4 -4
  320. package/dist/{ValuelimitsbarWidget-oFqxZu0t.js.map → ValuelimitsbarWidget-JSceOzGS.js.map} +1 -1
  321. package/dist/{ValuelimitscolumnWidget-DPmkVEuC.cjs → ValuelimitscolumnWidget-DpU4BoB7.cjs} +2 -2
  322. package/dist/{ValuelimitscolumnWidget-DPmkVEuC.cjs.map → ValuelimitscolumnWidget-DpU4BoB7.cjs.map} +1 -1
  323. package/dist/{ValuelimitscolumnWidget-DYBv8POg.js → ValuelimitscolumnWidget-HR1TNHwQ.js} +4 -4
  324. package/dist/{ValuelimitscolumnWidget-DYBv8POg.js.map → ValuelimitscolumnWidget-HR1TNHwQ.js.map} +1 -1
  325. package/dist/{ValuerangebarWidget-D5zHCKXQ.cjs → ValuerangebarWidget-CpZYmUl_.cjs} +2 -2
  326. package/dist/{ValuerangebarWidget-D5zHCKXQ.cjs.map → ValuerangebarWidget-CpZYmUl_.cjs.map} +1 -1
  327. package/dist/{ValuerangebarWidget-m3gFyG4v.js → ValuerangebarWidget-DnZrho8S.js} +4 -4
  328. package/dist/{ValuerangebarWidget-m3gFyG4v.js.map → ValuerangebarWidget-DnZrho8S.js.map} +1 -1
  329. package/dist/{VerticalWidget-DHWIKJUB.cjs → VerticalWidget-CcJMMaK_.cjs} +2 -2
  330. package/dist/{VerticalWidget-DHWIKJUB.cjs.map → VerticalWidget-CcJMMaK_.cjs.map} +1 -1
  331. package/dist/{VerticalWidget-CcdRZmQK.js → VerticalWidget-DJvoxqLE.js} +2 -2
  332. package/dist/{VerticalWidget-CcdRZmQK.js.map → VerticalWidget-DJvoxqLE.js.map} +1 -1
  333. package/dist/{VerticalboxWidget-BHNt0RrX.cjs → VerticalboxWidget-CJR_mOLa.cjs} +2 -2
  334. package/dist/{VerticalboxWidget-BHNt0RrX.cjs.map → VerticalboxWidget-CJR_mOLa.cjs.map} +1 -1
  335. package/dist/{VerticalboxWidget-DfsCYhrX.js → VerticalboxWidget-CYYyLBoO.js} +5 -5
  336. package/dist/{VerticalboxWidget-DfsCYhrX.js.map → VerticalboxWidget-CYYyLBoO.js.map} +1 -1
  337. package/dist/{Widget-B5HKasz2.js → Widget-Bn_S-zBo.js} +2 -2
  338. package/dist/{Widget-B5HKasz2.js.map → Widget-Bn_S-zBo.js.map} +1 -1
  339. package/dist/{Widget-CMzBJCGp.cjs → Widget-O7wkmc39.cjs} +2 -2
  340. package/dist/{Widget-CMzBJCGp.cjs.map → Widget-O7wkmc39.cjs.map} +1 -1
  341. package/dist/addMonths-BtG7uZLJ.js.map +1 -1
  342. package/dist/addMonths-n1tnl3ab.cjs.map +1 -1
  343. package/dist/components.cjs +2 -2
  344. package/dist/components.cjs.map +1 -1
  345. package/dist/components.js +13 -13
  346. package/dist/components.js.map +1 -1
  347. package/dist/fileIcon-BduOQcTc.cjs.map +1 -1
  348. package/dist/fileIcon-DqRHb1_Z.js.map +1 -1
  349. package/dist/format-B22VpiOS.cjs.map +1 -1
  350. package/dist/format-CVeawcIv.js.map +1 -1
  351. package/dist/getDefaultOptions-Batab9o8.cjs.map +1 -1
  352. package/dist/getDefaultOptions-BhSDk-Jo.js.map +1 -1
  353. package/dist/icons.cjs.map +1 -1
  354. package/dist/icons.js.map +1 -1
  355. package/dist/index-DcL65Mqb.cjs.map +1 -1
  356. package/dist/index-qCq0L4jN.js.map +1 -1
  357. package/dist/parse-DnkEsW-3.js.map +1 -1
  358. package/dist/parse-DwfgQboe.cjs.map +1 -1
  359. package/dist/plugins.cjs.map +1 -1
  360. package/dist/plugins.js.map +1 -1
  361. package/dist/timeFilters-BKnCM4rv.js.map +1 -1
  362. package/dist/timeFilters-CJFxfjqN.cjs.map +1 -1
  363. package/dist/tools/admin.cjs +1 -1
  364. package/dist/tools/admin.cjs.map +1 -1
  365. package/dist/tools/admin.js +12 -12
  366. package/dist/tools/admin.js.map +1 -1
  367. package/dist/tools/base.cjs +1 -1
  368. package/dist/tools/base.cjs.map +1 -1
  369. package/dist/tools/base.js +483 -481
  370. package/dist/tools/base.js.map +1 -1
  371. package/dist/tools/calendar.cjs +1 -1
  372. package/dist/tools/calendar.js +1 -1
  373. package/dist/tools/scriptrunner.cjs +2 -2
  374. package/dist/tools/scriptrunner.cjs.map +1 -1
  375. package/dist/tools/scriptrunner.js +10 -9
  376. package/dist/tools/scriptrunner.js.map +1 -1
  377. package/dist/vue-common.css +1 -1
  378. package/dist/widgets.cjs +1 -1
  379. package/dist/widgets.js +63 -63
  380. package/package.json +2 -2
  381. package/dist/DetailsDialog-DEjAO6yp.js.map +0 -1
  382. package/dist/Layout-DoI_Bpyu.cjs +0 -2
  383. package/dist/Openc3Screen-CPknMmN8.js.map +0 -1
  384. package/dist/Openc3Screen-CQkUFNEH.cjs.map +0 -1
  385. package/dist/PluginsTab-Diu6vzUR.js.map +0 -1
  386. package/dist/PluginsTab-UcluFu7J.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Graph-ZGEBRGOA.cjs","sources":["../src/components/GraphEditDialog.vue","../src/components/GraphEditItemDialog.vue","../src/components/Graph.vue"],"sourcesContent":["<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" max-width=\"700\" @keydown.esc=\"$emit('cancel')\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Edit Graph </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-tabs v-model=\"tab\" class=\"ml-3\">\n <v-tab value=\"0\"> Settings </v-tab>\n <v-tab value=\"1\"> Scale / Lines </v-tab>\n <v-tab value=\"2\"> Items </v-tab>\n </v-tabs>\n <v-tabs-window v-model=\"tab\">\n <v-tabs-window-item value=\"0\" eager>\n <div class=\"edit-box\">\n <v-row>\n <v-col>\n <v-card-text class=\"pa-0\">\n <v-text-field\n v-model=\"graph.title\"\n class=\"pb-2\"\n label=\"Title\"\n hide-details\n />\n </v-card-text>\n </v-col>\n <v-col>\n <v-select\n v-model=\"graph.legendPosition\"\n label=\"Legend Position\"\n hide-details\n :items=\"legendPositions\"\n style=\"max-width: 280px\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Select a start date/time for the graph. Leave blank for start now.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"startDate\"\n label=\"Start Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"startTime\"\n label=\"Start Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n <v-card-text class=\"pa-0\">\n Select a end date/time for the graph. Leave blank for continuous\n real-time graphing.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"endDate\"\n label=\"End Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"endTime\"\n label=\"End Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"1\" eager>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Set a min or max Y value to override automatic scaling\n </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMinY\"\n hide-details\n label=\"Min Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMaxY\"\n hide-details\n label=\"Max Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-list density=\"compact\" class=\"horizontal-lines\">\n <v-list-item>\n <span style=\"padding-top: 5px\">\n Add horizontal lines to the graph\n </span>\n <v-spacer />\n <v-btn @click=\"addLine()\"> New Line </v-btn>\n </v-list-item>\n <v-list-item\n v-for=\"(item, i) in graph.lines\"\n :key=\"i\"\n :value=\"item\"\n color=\"primary\"\n >\n <v-row>\n <v-col>\n <v-text-field v-model=\"item.yValue\" label=\"Y Value\" />\n </v-col>\n <v-col>\n <v-select\n v-model=\"item.color\"\n label=\"Color\"\n hide-details\n :items=\"colors\"\n />\n </v-col>\n <v-col>\n <v-btn\n style=\"padding: 30px\"\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Line\"\n @click=\"removeLine(item)\"\n />\n </v-col>\n </v-row>\n </v-list-item>\n </v-list>\n </div>\n </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 { isValid, parse, toDate } from 'date-fns'\nexport default {\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 },\n data: function () {\n return {\n tab: 0,\n graph: {},\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 },\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 // 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 },\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 variant=\"outlined\"\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n v-model=\"editItem.valueType\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Reduction\"\n :items=\"reduction\"\n v-model=\"editItem.reduced\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Reduced Type\"\n :items=\"reducedTypes\"\n :disabled=\"editItem.reduced === 'DECOM'\"\n v-model=\"editItem.reducedType\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Color\"\n :items=\"colors\"\n v-model=\"editItem.color\"\n @update:model-value=\"$emit('changeColor', $event)\"\n class=\"mb-2\"\n />\n <div v-if=\"limitsNames.length > 1\">\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Display Limits\"\n :items=\"limitsNames\"\n v-model=\"limitsName\"\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 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 :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 @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 { Cable } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\n\nimport 'uplot/dist/uPlot.min.css'\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 // Not required because we pass 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 },\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 },\n // These allow the parent to force a specific height and/or width\n height: {\n type: Number,\n },\n width: {\n type: Number,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n data() {\n return {\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 timeout: null,\n graphMinY: null,\n graphMaxY: null,\n graphStartDateTime: null,\n graphEndDateTime: null,\n indexes: {},\n items: this.initialItems || [],\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 },\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 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 },\n created() {\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 let chartOpts = {}\n if (this.sparkline) {\n this.hideToolbarData = true\n this.hideOverviewData = true\n this.showOverview = false\n 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 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 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: 'Time',\n value: (u, v) =>\n // Convert the unix timestamp into a formatted date / time\n v == null ? '--' : this.formatSeconds(v, this.timeZone),\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 chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n\n const 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 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.state !== 'stop') {\n this.startGraph()\n }\n },\n beforeUnmount: function () {\n this.stopGraph()\n this.cable.disconnect()\n window.removeEventListener('resize', this.resize)\n },\n methods: {\n startGraph: function () {\n this.subscribe()\n this.timeout = setTimeout(() => {\n this.updateTimeout()\n }, this.refreshIntervalMs)\n },\n stopGraph: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n this.subscription = null\n }\n if (this.timeout) {\n clearTimeout(this.timeout)\n this.timeout = null\n }\n },\n updateTimeout: function () {\n this.updateGraphData()\n this.timeout = setTimeout(() => {\n this.updateTimeout()\n }, this.refreshIntervalMs)\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 let max = this.data[0][this.data[0].length - 1]\n let ptsMin = this.data[0][this.data[0].length - this.pointsGraphed]\n let min = this.data[0][0]\n if (min < max - this.secondsGraphed) {\n min = max - this.secondsGraphed\n }\n if (ptsMin > min) {\n min = ptsMin\n }\n this.graph.setScale('x', { min, max })\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 this.addItemsToSubscription(this.items)\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) return [1566453600, 1566497660]\n return [dataMin, dataMax]\n },\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 let height = 0\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 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 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: itemArray.map(this.subscriptionKey),\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 this.subscription.perform('remove', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: itemArray.map(this.subscriptionKey),\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 let time = data[i].__time / 1000000000.0 // Time in seconds\n let length = this.data[0].length\n if (length === 0 || time > 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.set_data_at_index(this.data[0].length - 1, time, data[i])\n } else {\n let index = bs(this.data[0], time, this.bs_comparator)\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 while (index >= 0) {\n time -= 1e-5 // Subtract 10 microseconds\n index = bs(this.data[0], time, this.bs_comparator)\n }\n // Now that we have a unique time, insert at the ideal index\n let ideal_index = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(ideal_index, 0, null)\n }\n // Use the adjusted time but keep the original data\n this.set_data_at_index(ideal_index, time, data[i])\n } else {\n // Insert a new null slot at the ideal index\n let ideal_index = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(ideal_index, 0, null)\n }\n this.set_data_at_index(ideal_index, time, 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] * 1000000000\n this.$emit('started', newStartTime)\n }\n this.dataChanged = true\n },\n bs_comparator: function (element, needle) {\n return element - needle\n },\n set_data_at_index: function (index, time, new_data) {\n this.data[0][index] = time\n for (const [key, value] of Object.entries(new_data)) {\n if (key === 'time') {\n continue\n }\n let key_index = this.indexes[key]\n if (key_index) {\n let array = this.data[key_index]\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","TimeFilters","value","isValid","parse","itemId","item","date","toDate","dline","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_dialog","$options","_cache","$event","_withKeys","_ctx","_withCtx","_createVNode","_component_v_toolbar","_component_v_spacer","_createElementVNode","_component_v_card","_component_v_tabs","_component_v_tab","_createTextVNode","_component_v_tabs_window","_component_v_tabs_window_item","_component_v_row","_component_v_col","_component_v_card_text","_component_v_text_field","_component_v_select","_component_v_list","_component_v_list_item","_component_v_btn","_createElementBlock","_Fragment","_renderList","$props","_component_v_data_table","_component_v_card_actions","OpenC3Api","details","key","_component_v_card_title","_openBlock","_toDisplayString","_createCommentVNode","GraphEditDialog","GraphEditItemDialog","Cable","newState","oldState","newData","oldData","newVal","oldVal","val","index","chartSeries","overviewSeries","seriesObj","commonProps","u","seriesIdx","self","rawValue","chartOpts","uPlot","timeZoneName","ts","v","targ","handler","e","chart","left","right","legend","seriesEl","series","overviewOpts","min","max","ptsMin","description","desired","graph","clonedItems","pad","dataMin","dataMax","data","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","time","length","j","bs","ideal_index","newStartTime","element","needle","new_data","key_index","array","_withModifiers","_normalizeClass","$data","_vShow","_component_v_expand_transition","_withDirectives","_component_graph_edit_dialog","_component_v_textarea","_component_v_menu","_component_v_list_item_title","_component_graph_edit_item_dialog","_component_v_list_subheader","_component_v_icon","_component_v_tooltip","props","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
1
+ {"version":3,"file":"Graph-mSqImgca.cjs","sources":["../src/components/GraphEditDialog.vue","../src/components/GraphEditItemDialog.vue","../src/components/Graph.vue"],"sourcesContent":["<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" max-width=\"700\" @keydown.esc=\"$emit('cancel')\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Edit Graph </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-tabs v-model=\"tab\" class=\"ml-3\">\n <v-tab value=\"0\"> Settings </v-tab>\n <v-tab value=\"1\"> Scale / Lines </v-tab>\n <v-tab value=\"2\"> Items </v-tab>\n </v-tabs>\n <v-tabs-window v-model=\"tab\">\n <v-tabs-window-item value=\"0\" eager>\n <div class=\"edit-box\">\n <v-row>\n <v-col>\n <v-card-text class=\"pa-0\">\n <v-text-field\n v-model=\"graph.title\"\n class=\"pb-2\"\n label=\"Title\"\n hide-details\n />\n </v-card-text>\n </v-col>\n <v-col>\n <v-select\n v-model=\"graph.legendPosition\"\n label=\"Legend Position\"\n hide-details\n :items=\"legendPositions\"\n style=\"max-width: 280px\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Select a start date/time for the graph. Leave blank for start now.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"startDate\"\n label=\"Start Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"startTime\"\n label=\"Start Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n <v-card-text class=\"pa-0\">\n Select a end date/time for the graph. Leave blank for continuous\n real-time graphing.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"endDate\"\n label=\"End Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"endTime\"\n label=\"End Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"1\" eager>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Set a min or max Y value to override automatic scaling\n </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMinY\"\n hide-details\n label=\"Min Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMaxY\"\n hide-details\n label=\"Max Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-list density=\"compact\" class=\"horizontal-lines\">\n <v-list-item>\n <span style=\"padding-top: 5px\">\n Add horizontal lines to the graph\n </span>\n <v-spacer />\n <v-btn @click=\"addLine()\"> New Line </v-btn>\n </v-list-item>\n <v-list-item\n v-for=\"(item, i) in graph.lines\"\n :key=\"i\"\n :value=\"item\"\n color=\"primary\"\n >\n <v-row>\n <v-col>\n <v-text-field v-model=\"item.yValue\" label=\"Y Value\" />\n </v-col>\n <v-col>\n <v-select\n v-model=\"item.color\"\n label=\"Color\"\n hide-details\n :items=\"colors\"\n />\n </v-col>\n <v-col>\n <v-btn\n style=\"padding: 30px\"\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Line\"\n @click=\"removeLine(item)\"\n />\n </v-col>\n </v-row>\n </v-list-item>\n </v-list>\n </div>\n </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 { isValid, parse, toDate } from 'date-fns'\nexport default {\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 },\n data: function () {\n return {\n tab: 0,\n graph: {},\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 },\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 // 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 },\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 variant=\"outlined\"\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n v-model=\"editItem.valueType\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Reduction\"\n :items=\"reduction\"\n v-model=\"editItem.reduced\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Reduced Type\"\n :items=\"reducedTypes\"\n :disabled=\"editItem.reduced === 'DECOM'\"\n v-model=\"editItem.reducedType\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Color\"\n :items=\"colors\"\n v-model=\"editItem.color\"\n @update:model-value=\"$emit('changeColor', $event)\"\n class=\"mb-2\"\n />\n <div v-if=\"limitsNames.length > 1\">\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Display Limits\"\n :items=\"limitsNames\"\n v-model=\"limitsName\"\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 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 :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 @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 { Cable } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\n\nimport 'uplot/dist/uPlot.min.css'\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 // Not required because we pass 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 },\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 },\n // These allow the parent to force a specific height and/or width\n height: {\n type: Number,\n },\n width: {\n type: Number,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n data() {\n return {\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 timeout: null,\n graphMinY: null,\n graphMaxY: null,\n graphStartDateTime: null,\n graphEndDateTime: null,\n indexes: {},\n items: this.initialItems || [],\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 },\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 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 },\n created() {\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 let chartOpts = {}\n if (this.sparkline) {\n this.hideToolbarData = true\n this.hideOverviewData = true\n this.showOverview = false\n 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 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 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: 'Time',\n value: (u, v) =>\n // Convert the unix timestamp into a formatted date / time\n v == null ? '--' : this.formatSeconds(v, this.timeZone),\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 chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n\n const 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 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.state !== 'stop') {\n this.startGraph()\n }\n },\n beforeUnmount: function () {\n this.stopGraph()\n this.cable.disconnect()\n window.removeEventListener('resize', this.resize)\n },\n methods: {\n startGraph: function () {\n this.subscribe()\n this.timeout = setTimeout(() => {\n this.updateTimeout()\n }, this.refreshIntervalMs)\n },\n stopGraph: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n this.subscription = null\n }\n if (this.timeout) {\n clearTimeout(this.timeout)\n this.timeout = null\n }\n },\n updateTimeout: function () {\n this.updateGraphData()\n this.timeout = setTimeout(() => {\n this.updateTimeout()\n }, this.refreshIntervalMs)\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 let max = this.data[0][this.data[0].length - 1]\n let ptsMin = this.data[0][this.data[0].length - this.pointsGraphed]\n let min = this.data[0][0]\n if (min < max - this.secondsGraphed) {\n min = max - this.secondsGraphed\n }\n if (ptsMin > min) {\n min = ptsMin\n }\n this.graph.setScale('x', { min, max })\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 this.addItemsToSubscription(this.items)\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) return [1566453600, 1566497660]\n return [dataMin, dataMax]\n },\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 let height = 0\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 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 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: itemArray.map(this.subscriptionKey),\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 this.subscription.perform('remove', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: itemArray.map(this.subscriptionKey),\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 let time = data[i].__time / 1000000000.0 // Time in seconds\n let length = this.data[0].length\n if (length === 0 || time > 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.set_data_at_index(this.data[0].length - 1, time, data[i])\n } else {\n let index = bs(this.data[0], time, this.bs_comparator)\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 while (index >= 0) {\n time -= 1e-5 // Subtract 10 microseconds\n index = bs(this.data[0], time, this.bs_comparator)\n }\n // Now that we have a unique time, insert at the ideal index\n let ideal_index = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(ideal_index, 0, null)\n }\n // Use the adjusted time but keep the original data\n this.set_data_at_index(ideal_index, time, data[i])\n } else {\n // Insert a new null slot at the ideal index\n let ideal_index = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(ideal_index, 0, null)\n }\n this.set_data_at_index(ideal_index, time, 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] * 1000000000\n this.$emit('started', newStartTime)\n }\n this.dataChanged = true\n },\n bs_comparator: function (element, needle) {\n return element - needle\n },\n set_data_at_index: function (index, time, new_data) {\n this.data[0][index] = time\n for (const [key, value] of Object.entries(new_data)) {\n if (key === 'time') {\n continue\n }\n let key_index = this.indexes[key]\n if (key_index) {\n let array = this.data[key_index]\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","TimeFilters","value","isValid","parse","itemId","item","date","toDate","dline","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_dialog","$options","_cache","$event","_withKeys","_ctx","_withCtx","_createVNode","_component_v_toolbar","_component_v_spacer","_createElementVNode","_component_v_card","_component_v_tabs","_component_v_tab","_createTextVNode","_component_v_tabs_window","_component_v_tabs_window_item","_component_v_row","_component_v_col","_component_v_card_text","_component_v_text_field","_component_v_select","_component_v_list","_component_v_list_item","_component_v_btn","_createElementBlock","_Fragment","_renderList","$props","_component_v_data_table","_component_v_card_actions","OpenC3Api","details","key","_component_v_card_title","_openBlock","_toDisplayString","_createCommentVNode","GraphEditDialog","GraphEditItemDialog","Cable","newState","oldState","newData","oldData","newVal","oldVal","val","index","chartSeries","overviewSeries","seriesObj","commonProps","u","seriesIdx","self","rawValue","chartOpts","uPlot","timeZoneName","ts","v","targ","handler","e","chart","left","right","legend","seriesEl","series","overviewOpts","min","max","ptsMin","description","desired","graph","clonedItems","pad","dataMin","dataMax","data","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","time","length","j","bs","ideal_index","newStartTime","element","needle","new_data","key_index","array","_withModifiers","_normalizeClass","$data","_vShow","_component_v_expand_transition","_withDirectives","_component_graph_edit_dialog","_component_v_textarea","_component_v_menu","_component_v_list_item_title","_component_graph_edit_item_dialog","_component_v_list_subheader","_component_v_icon","_component_v_tooltip","props","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const N=require("./Widget-CMzBJCGp.cjs"),T=require("./format-B22VpiOS.cjs"),h=require("./parse-DwfgQboe.cjs"),b=require("./addMonths-n1tnl3ab.cjs");function y(e,s,a){return h.addDays(e,-s,a)}function k(e,s,a){return b.addMonths(e,-s,a)}function S(e,s,a){const{years:r=0,months:t=0,weeks:i=0,days:d=0,hours:n=0,minutes:c=0,seconds:m=0}=s,o=k(e,t+r*12,a),p=y(o,d+i*7,a),u=c+n*60,l=(m+u*60)*1e3;return T.constructFrom(e,+p-l)}const f={mixins:[N.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 s=h.parse(e[1],"yyyy/MM/dd HH:mm:ss",new Date);this.startTime=s.getTime()*1e6;break;case"HISTORY":let a=parseInt(e[1].slice(0,e[1].length-1)),r=null,t=1;switch(e[1][e[1].length-1]){case"d":r="days",t=3600*24;break;case"h":r="hours",t=3600;break;case"m":r="minutes",t=60;break;case"s":r="seconds";break;default:throw new Error(`Unknown time suffix: ${e[1]}!`)}let i={};i[r]=a,this.startTime=S(new Date,i).getTime()*1e6,a*t>this.secondsGraphed&&(this.secondsGraphed=a*t),a*t>this.pointsSaved&&(this.pointsSaved=a*t),a*t>this.pointsGraphed&&(this.pointsGraphed=a*t);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=>{let s=e.itemName;if(e.itemName.includes("[["))e.itemName=e.itemName.replace("[[","[").replace("]]","]"),s=e.itemName;else if(e.itemName.includes("[")){let a=e.itemName.match(/\[(\d+)\]/);this.arrayIndex=parseInt(a[1]),s=e.itemName.replace(a[0],"")}return this.$emit("addItem",`${e.targetName}__${e.packetName}__${s}__${e.valueType}`,!0),e})},destroyed(){this.items.map(e=>this.$emit("deleteItem",`${e.targetName}__${e.packetName}__${e.itemName}__${e.valueType}`))}};exports.GraphWidget=f;
2
- //# sourceMappingURL=GraphWidget-caScsshg.cjs.map
1
+ "use strict";const N=require("./Widget-O7wkmc39.cjs"),T=require("./format-B22VpiOS.cjs"),h=require("./parse-DwfgQboe.cjs"),b=require("./addMonths-n1tnl3ab.cjs");function y(e,s,a){return h.addDays(e,-s,a)}function k(e,s,a){return b.addMonths(e,-s,a)}function S(e,s,a){const{years:r=0,months:t=0,weeks:i=0,days:d=0,hours:n=0,minutes:c=0,seconds:m=0}=s,o=k(e,t+r*12,a),p=y(o,d+i*7,a),u=c+n*60,l=(m+u*60)*1e3;return T.constructFrom(e,+p-l)}const f={mixins:[N.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 s=h.parse(e[1],"yyyy/MM/dd HH:mm:ss",new Date);this.startTime=s.getTime()*1e6;break;case"HISTORY":let a=parseInt(e[1].slice(0,e[1].length-1)),r=null,t=1;switch(e[1][e[1].length-1]){case"d":r="days",t=3600*24;break;case"h":r="hours",t=3600;break;case"m":r="minutes",t=60;break;case"s":r="seconds";break;default:throw new Error(`Unknown time suffix: ${e[1]}!`)}let i={};i[r]=a,this.startTime=S(new Date,i).getTime()*1e6,a*t>this.secondsGraphed&&(this.secondsGraphed=a*t),a*t>this.pointsSaved&&(this.pointsSaved=a*t),a*t>this.pointsGraphed&&(this.pointsGraphed=a*t);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=>{let s=e.itemName;if(e.itemName.includes("[["))e.itemName=e.itemName.replace("[[","[").replace("]]","]"),s=e.itemName;else if(e.itemName.includes("[")){let a=e.itemName.match(/\[(\d+)\]/);this.arrayIndex=parseInt(a[1]),s=e.itemName.replace(a[0],"")}return this.$emit("addItem",`${e.targetName}__${e.packetName}__${s}__${e.valueType}`,!0),e})},destroyed(){this.items.map(e=>this.$emit("deleteItem",`${e.targetName}__${e.packetName}__${e.itemName}__${e.valueType}`))}};exports.GraphWidget=f;
2
+ //# sourceMappingURL=GraphWidget-CQjKAMPR.cjs.map