@openc3/vue-common 6.8.1 → 6.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/dist/{ArrayWidget-CiW5R8HE.cjs → ArrayWidget-DJkuPBFS.cjs} +2 -2
  2. package/dist/{ArrayWidget-CiW5R8HE.cjs.map → ArrayWidget-DJkuPBFS.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-FGjLmPfG.js → ArrayWidget-DLfNWDzN.js} +4 -4
  4. package/dist/{ArrayWidget-FGjLmPfG.js.map → ArrayWidget-DLfNWDzN.js.map} +1 -1
  5. package/dist/{ArrayplotWidget-V5C4JRhx.cjs → ArrayplotWidget-COGxmBEP.cjs} +2 -2
  6. package/dist/{ArrayplotWidget-V5C4JRhx.cjs.map → ArrayplotWidget-COGxmBEP.cjs.map} +1 -1
  7. package/dist/{ArrayplotWidget-Cfo18TYm.js → ArrayplotWidget-CoRsUxHG.js} +3 -3
  8. package/dist/{ArrayplotWidget-Cfo18TYm.js.map → ArrayplotWidget-CoRsUxHG.js.map} +1 -1
  9. package/dist/{BarColumn-B4naVXS_.cjs → BarColumn-BaPaYtki.cjs} +2 -2
  10. package/dist/{BarColumn-B4naVXS_.cjs.map → BarColumn-BaPaYtki.cjs.map} +1 -1
  11. package/dist/{BarColumn-BuJ6MTYG.js → BarColumn-DHP-zQ4R.js} +3 -3
  12. package/dist/{BarColumn-BuJ6MTYG.js.map → BarColumn-DHP-zQ4R.js.map} +1 -1
  13. package/dist/{BlockWidget-B_JwY8-N.js → BlockWidget-BmHSFvOq.js} +4 -4
  14. package/dist/{BlockWidget-B_JwY8-N.js.map → BlockWidget-BmHSFvOq.js.map} +1 -1
  15. package/dist/{BlockWidget-BJWENVXd.cjs → BlockWidget-DLncsLLX.cjs} +2 -2
  16. package/dist/{BlockWidget-BJWENVXd.cjs.map → BlockWidget-DLncsLLX.cjs.map} +1 -1
  17. package/dist/{ButtonWidget-C2IS6q9D.cjs → ButtonWidget-BLePbTf_.cjs} +2 -2
  18. package/dist/{ButtonWidget-C2IS6q9D.cjs.map → ButtonWidget-BLePbTf_.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-Cd4M3aBD.js → ButtonWidget-C3ZWRjZZ.js} +4 -4
  20. package/dist/{ButtonWidget-Cd4M3aBD.js.map → ButtonWidget-C3ZWRjZZ.js.map} +1 -1
  21. package/dist/{CanvasWidget-BIIhyH_l.cjs → CanvasWidget-C8Sy9t9G.cjs} +2 -2
  22. package/dist/{CanvasWidget-BIIhyH_l.cjs.map → CanvasWidget-C8Sy9t9G.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-CpKdOgTG.js → CanvasWidget-CL-XzPF4.js} +2 -2
  24. package/dist/{CanvasWidget-CpKdOgTG.js.map → CanvasWidget-CL-XzPF4.js.map} +1 -1
  25. package/dist/{CanvasdotWidget-BVlIdbvL.cjs → CanvasdotWidget-6MPKD5iZ.cjs} +2 -2
  26. package/dist/{CanvasdotWidget-BVlIdbvL.cjs.map → CanvasdotWidget-6MPKD5iZ.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-zYbI5LAw.js → CanvasdotWidget-D8Y9DgVE.js} +2 -2
  28. package/dist/{CanvasdotWidget-zYbI5LAw.js.map → CanvasdotWidget-D8Y9DgVE.js.map} +1 -1
  29. package/dist/{CanvasimageWidget--ORQEPj6.js → CanvasimageWidget-DHSGK_tD.js} +3 -3
  30. package/dist/{CanvasimageWidget--ORQEPj6.js.map → CanvasimageWidget-DHSGK_tD.js.map} +1 -1
  31. package/dist/{CanvasimageWidget-SNXRh4TB.cjs → CanvasimageWidget-DYUaf3zy.cjs} +2 -2
  32. package/dist/{CanvasimageWidget-SNXRh4TB.cjs.map → CanvasimageWidget-DYUaf3zy.cjs.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-CtAtYHRm.js → CanvasimagevalueWidget-Btt_fQfC.js} +3 -3
  34. package/dist/{CanvasimagevalueWidget-CtAtYHRm.js.map → CanvasimagevalueWidget-Btt_fQfC.js.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-DcXjMEYO.cjs → CanvasimagevalueWidget-Bu1ECOWl.cjs} +2 -2
  36. package/dist/{CanvasimagevalueWidget-DcXjMEYO.cjs.map → CanvasimagevalueWidget-Bu1ECOWl.cjs.map} +1 -1
  37. package/dist/{CanvaslabelWidget-DWoROb6o.js → CanvaslabelWidget-BF_8RTjv.js} +2 -2
  38. package/dist/{CanvaslabelWidget-DWoROb6o.js.map → CanvaslabelWidget-BF_8RTjv.js.map} +1 -1
  39. package/dist/{CanvaslabelWidget-8MMfV594.cjs → CanvaslabelWidget-Dik-ld55.cjs} +2 -2
  40. package/dist/{CanvaslabelWidget-8MMfV594.cjs.map → CanvaslabelWidget-Dik-ld55.cjs.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-hDxHrErw.cjs → CanvaslabelvalueWidget-BBlKBoZO.cjs} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-hDxHrErw.cjs.map → CanvaslabelvalueWidget-BBlKBoZO.cjs.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-A4UbtwEc.js → CanvaslabelvalueWidget-scbwaujI.js} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-A4UbtwEc.js.map → CanvaslabelvalueWidget-scbwaujI.js.map} +1 -1
  45. package/dist/{CanvaslineWidget-grGKrpPw.cjs → CanvaslineWidget-DN0ojc37.cjs} +2 -2
  46. package/dist/{CanvaslineWidget-grGKrpPw.cjs.map → CanvaslineWidget-DN0ojc37.cjs.map} +1 -1
  47. package/dist/{CanvaslineWidget-BBGi0nrb.js → CanvaslineWidget-gRvm_-TT.js} +2 -2
  48. package/dist/{CanvaslineWidget-BBGi0nrb.js.map → CanvaslineWidget-gRvm_-TT.js.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-C_9OkL7f.js → CanvaslinevalueWidget-CljziRek.js} +2 -2
  50. package/dist/{CanvaslinevalueWidget-C_9OkL7f.js.map → CanvaslinevalueWidget-CljziRek.js.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-DMIWLqT-.cjs → CanvaslinevalueWidget-Cz1XYp0r.cjs} +2 -2
  52. package/dist/{CanvaslinevalueWidget-DMIWLqT-.cjs.map → CanvaslinevalueWidget-Cz1XYp0r.cjs.map} +1 -1
  53. package/dist/{CheckbuttonWidget-BMYkeGyw.cjs → CheckbuttonWidget-B5jOzhZ4.cjs} +2 -2
  54. package/dist/{CheckbuttonWidget-BMYkeGyw.cjs.map → CheckbuttonWidget-B5jOzhZ4.cjs.map} +1 -1
  55. package/dist/{CheckbuttonWidget-CTJg8Ypg.js → CheckbuttonWidget-BOabI_jE.js} +2 -2
  56. package/dist/{CheckbuttonWidget-CTJg8Ypg.js.map → CheckbuttonWidget-BOabI_jE.js.map} +1 -1
  57. package/dist/{ClassificationBanners-Dz5-_h_0.js → ClassificationBanners-BGDnMx4r.js} +2 -2
  58. package/dist/{ClassificationBanners-Dz5-_h_0.js.map → ClassificationBanners-BGDnMx4r.js.map} +1 -1
  59. package/dist/{ClassificationBanners-De_CDp9I.cjs → ClassificationBanners-CbcQDr3v.cjs} +2 -2
  60. package/dist/{ClassificationBanners-De_CDp9I.cjs.map → ClassificationBanners-CbcQDr3v.cjs.map} +1 -1
  61. package/dist/{ComboboxWidget-DWiMZZk8.js → ComboboxWidget-BLXNYFiY.js} +2 -2
  62. package/dist/{ComboboxWidget-DWiMZZk8.js.map → ComboboxWidget-BLXNYFiY.js.map} +1 -1
  63. package/dist/{ComboboxWidget-CZMUsBRC.cjs → ComboboxWidget-_lxTm8Wb.cjs} +2 -2
  64. package/dist/{ComboboxWidget-CZMUsBRC.cjs.map → ComboboxWidget-_lxTm8Wb.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-CD72VN-P.js → CriticalCmdDialog-CnNlsHRX.js} +2 -2
  66. package/dist/{CriticalCmdDialog-CD72VN-P.js.map → CriticalCmdDialog-CnNlsHRX.js.map} +1 -1
  67. package/dist/{CriticalCmdDialog-ByiHBnFL.cjs → CriticalCmdDialog-niBmkudw.cjs} +2 -2
  68. package/dist/{CriticalCmdDialog-ByiHBnFL.cjs.map → CriticalCmdDialog-niBmkudw.cjs.map} +1 -1
  69. package/dist/{DateWidget-C7GSh68_.js → DateWidget-BTqLCtLS.js} +2 -2
  70. package/dist/{DateWidget-C7GSh68_.js.map → DateWidget-BTqLCtLS.js.map} +1 -1
  71. package/dist/{DateWidget-CR4OfvjB.cjs → DateWidget-BvabEAhO.cjs} +2 -2
  72. package/dist/{DateWidget-CR4OfvjB.cjs.map → DateWidget-BvabEAhO.cjs.map} +1 -1
  73. package/dist/{DetailsDialog-B2l0BNc2.js → DetailsDialog-BNCS3QAe.js} +2 -2
  74. package/dist/{DetailsDialog-B2l0BNc2.js.map → DetailsDialog-BNCS3QAe.js.map} +1 -1
  75. package/dist/{DetailsDialog-CrfaoIk5.cjs → DetailsDialog-DgN9Jcio.cjs} +2 -2
  76. package/dist/{DetailsDialog-CrfaoIk5.cjs.map → DetailsDialog-DgN9Jcio.cjs.map} +1 -1
  77. package/dist/EventListDialog-B8rnN9Zi.cjs +2 -0
  78. package/dist/EventListDialog-B8rnN9Zi.cjs.map +1 -0
  79. package/dist/{EventListDialog-1NXp1MLg.js → EventListDialog-C2pwmD0d.js} +554 -389
  80. package/dist/EventListDialog-C2pwmD0d.js.map +1 -0
  81. package/dist/{FormatvalueWidget-CZJdsUAq.js → FormatvalueWidget-CLYx8qbg.js} +3 -3
  82. package/dist/{FormatvalueWidget-CZJdsUAq.js.map → FormatvalueWidget-CLYx8qbg.js.map} +1 -1
  83. package/dist/{FormatvalueWidget-zoY5Fzwr.cjs → FormatvalueWidget-ulLzg1E-.cjs} +2 -2
  84. package/dist/{FormatvalueWidget-zoY5Fzwr.cjs.map → FormatvalueWidget-ulLzg1E-.cjs.map} +1 -1
  85. package/dist/{Graph-DZBpdSgR.js → Graph-BliBYJxD.js} +486 -1050
  86. package/dist/Graph-BliBYJxD.js.map +1 -0
  87. package/dist/Graph-DxC2MPYf.cjs +2 -0
  88. package/dist/Graph-DxC2MPYf.cjs.map +1 -0
  89. package/dist/{GraphWidget-CHm4bhMI.js → GraphWidget-Cb6Ozf54.js} +2 -2
  90. package/dist/GraphWidget-Cb6Ozf54.js.map +1 -0
  91. package/dist/{GraphWidget-P-EUkwbI.cjs → GraphWidget-g-0vO4_S.cjs} +2 -2
  92. package/dist/GraphWidget-g-0vO4_S.cjs.map +1 -0
  93. package/dist/{HorizontalWidget-B2skpV1m.js → HorizontalWidget-AY2M01qP.js} +2 -2
  94. package/dist/{HorizontalWidget-B2skpV1m.js.map → HorizontalWidget-AY2M01qP.js.map} +1 -1
  95. package/dist/{HorizontalWidget-1Gd93-D7.cjs → HorizontalWidget-BiEZZpZQ.cjs} +2 -2
  96. package/dist/{HorizontalWidget-1Gd93-D7.cjs.map → HorizontalWidget-BiEZZpZQ.cjs.map} +1 -1
  97. package/dist/{HorizontalboxWidget-BI0WZP5M.js → HorizontalboxWidget-2MEKvq_C.js} +5 -5
  98. package/dist/{HorizontalboxWidget-BI0WZP5M.js.map → HorizontalboxWidget-2MEKvq_C.js.map} +1 -1
  99. package/dist/{HorizontalboxWidget-CHFz7lCJ.cjs → HorizontalboxWidget-CWq4ej6k.cjs} +2 -2
  100. package/dist/{HorizontalboxWidget-CHFz7lCJ.cjs.map → HorizontalboxWidget-CWq4ej6k.cjs.map} +1 -1
  101. package/dist/{HorizontallineWidget-AmxVeXcU.js → HorizontallineWidget-DgpOPA7q.js} +2 -2
  102. package/dist/{HorizontallineWidget-AmxVeXcU.js.map → HorizontallineWidget-DgpOPA7q.js.map} +1 -1
  103. package/dist/{HorizontallineWidget-CCuEqHsc.cjs → HorizontallineWidget-Dm5G1l4A.cjs} +2 -2
  104. package/dist/{HorizontallineWidget-CCuEqHsc.cjs.map → HorizontallineWidget-Dm5G1l4A.cjs.map} +1 -1
  105. package/dist/{IframeWidget-DG7yUYb3.cjs → IframeWidget-DDw5t7eV.cjs} +2 -2
  106. package/dist/IframeWidget-DDw5t7eV.cjs.map +1 -0
  107. package/dist/{IframeWidget-DcqRMhyW.js → IframeWidget-UKKUl7k5.js} +2 -2
  108. package/dist/IframeWidget-UKKUl7k5.js.map +1 -0
  109. package/dist/{ImageLoader-BaDVKIBu.cjs → ImageLoader-9TCd0KxL.cjs} +2 -2
  110. package/dist/{ImageLoader-BaDVKIBu.cjs.map → ImageLoader-9TCd0KxL.cjs.map} +1 -1
  111. package/dist/{ImageLoader-ly4zoGpO.js → ImageLoader-C-CIL4YD.js} +2 -2
  112. package/dist/{ImageLoader-ly4zoGpO.js.map → ImageLoader-C-CIL4YD.js.map} +1 -1
  113. package/dist/{ImageviewerWidget-cmDHcmW4.js → ImageviewerWidget-DhuQH5Io.js} +2 -2
  114. package/dist/{ImageviewerWidget-cmDHcmW4.js.map → ImageviewerWidget-DhuQH5Io.js.map} +1 -1
  115. package/dist/{ImageviewerWidget-BgMpAFvG.cjs → ImageviewerWidget-DpXzLOpF.cjs} +2 -2
  116. package/dist/{ImageviewerWidget-BgMpAFvG.cjs.map → ImageviewerWidget-DpXzLOpF.cjs.map} +1 -1
  117. package/dist/{InterfacesTab-K7odu5gi.cjs → InterfacesTab-CiVfsUia.cjs} +2 -2
  118. package/dist/{InterfacesTab-K7odu5gi.cjs.map → InterfacesTab-CiVfsUia.cjs.map} +1 -1
  119. package/dist/{InterfacesTab-BSCFzmW1.js → InterfacesTab-Dq3oAKqz.js} +3 -3
  120. package/dist/{InterfacesTab-BSCFzmW1.js.map → InterfacesTab-Dq3oAKqz.js.map} +1 -1
  121. package/dist/{LabelWidget-D6B4JzLR.cjs → LabelWidget-D-m2gFIZ.cjs} +2 -2
  122. package/dist/{LabelWidget-D6B4JzLR.cjs.map → LabelWidget-D-m2gFIZ.cjs.map} +1 -1
  123. package/dist/{LabelWidget-Bemw8Erq.js → LabelWidget-SO9zqcNN.js} +2 -2
  124. package/dist/{LabelWidget-Bemw8Erq.js.map → LabelWidget-SO9zqcNN.js.map} +1 -1
  125. package/dist/{LabelledWidget-Dg1pZiON.cjs → LabelledWidget-BFfsD2wz.cjs} +2 -2
  126. package/dist/{LabelledWidget-Dg1pZiON.cjs.map → LabelledWidget-BFfsD2wz.cjs.map} +1 -1
  127. package/dist/{LabelledWidget-Cb7EvtUG.js → LabelledWidget-DWoM5AJ5.js} +4 -4
  128. package/dist/{LabelledWidget-Cb7EvtUG.js.map → LabelledWidget-DWoM5AJ5.js.map} +1 -1
  129. package/dist/{LabelprogressbarWidget-DrVVuiXa.cjs → LabelprogressbarWidget-B8x5YimU.cjs} +2 -2
  130. package/dist/{LabelprogressbarWidget-DrVVuiXa.cjs.map → LabelprogressbarWidget-B8x5YimU.cjs.map} +1 -1
  131. package/dist/{LabelprogressbarWidget-qYgrGqLY.js → LabelprogressbarWidget-D3vnkvQZ.js} +4 -4
  132. package/dist/{LabelprogressbarWidget-qYgrGqLY.js.map → LabelprogressbarWidget-D3vnkvQZ.js.map} +1 -1
  133. package/dist/{LabelsparklineWidget-CMklq9-f.js → LabelsparklineWidget-DO0T-Jot.js} +4 -4
  134. package/dist/{LabelsparklineWidget-CMklq9-f.js.map → LabelsparklineWidget-DO0T-Jot.js.map} +1 -1
  135. package/dist/{LabelsparklineWidget-Bht80Ncq.cjs → LabelsparklineWidget-DyPaUfc9.cjs} +2 -2
  136. package/dist/{LabelsparklineWidget-Bht80Ncq.cjs.map → LabelsparklineWidget-DyPaUfc9.cjs.map} +1 -1
  137. package/dist/{LabelvalueWidget-NjCMgiYL.js → LabelvalueWidget-B6BbNFnk.js} +4 -4
  138. package/dist/{LabelvalueWidget-NjCMgiYL.js.map → LabelvalueWidget-B6BbNFnk.js.map} +1 -1
  139. package/dist/{LabelvalueWidget-DKx6dV8b.cjs → LabelvalueWidget-cTPG6Xqi.cjs} +2 -2
  140. package/dist/{LabelvalueWidget-DKx6dV8b.cjs.map → LabelvalueWidget-cTPG6Xqi.cjs.map} +1 -1
  141. package/dist/{LabelvaluedescWidget-D8N6KdzA.cjs → LabelvaluedescWidget-C4sIZ0md.cjs} +2 -2
  142. package/dist/{LabelvaluedescWidget-D8N6KdzA.cjs.map → LabelvaluedescWidget-C4sIZ0md.cjs.map} +1 -1
  143. package/dist/{LabelvaluedescWidget-Dflulqm7.js → LabelvaluedescWidget-CxfL-H9C.js} +5 -5
  144. package/dist/{LabelvaluedescWidget-Dflulqm7.js.map → LabelvaluedescWidget-CxfL-H9C.js.map} +1 -1
  145. package/dist/{LabelvaluelimitsbarWidget-M34NDk2S.js → LabelvaluelimitsbarWidget-BT5k9mHv.js} +4 -4
  146. package/dist/{LabelvaluelimitsbarWidget-M34NDk2S.js.map → LabelvaluelimitsbarWidget-BT5k9mHv.js.map} +1 -1
  147. package/dist/{LabelvaluelimitsbarWidget-DbwVdsfd.cjs → LabelvaluelimitsbarWidget-CBnU6Afl.cjs} +2 -2
  148. package/dist/{LabelvaluelimitsbarWidget-DbwVdsfd.cjs.map → LabelvaluelimitsbarWidget-CBnU6Afl.cjs.map} +1 -1
  149. package/dist/{LabelvaluelimitscolumnWidget-1LXrtBFT.cjs → LabelvaluelimitscolumnWidget-CwoMfO0P.cjs} +2 -2
  150. package/dist/{LabelvaluelimitscolumnWidget-1LXrtBFT.cjs.map → LabelvaluelimitscolumnWidget-CwoMfO0P.cjs.map} +1 -1
  151. package/dist/{LabelvaluelimitscolumnWidget-Cchaw_-k.js → LabelvaluelimitscolumnWidget-DUbmxh4p.js} +5 -5
  152. package/dist/{LabelvaluelimitscolumnWidget-Cchaw_-k.js.map → LabelvaluelimitscolumnWidget-DUbmxh4p.js.map} +1 -1
  153. package/dist/{LabelvaluerangebarWidget-Ca6lJAZV.cjs → LabelvaluerangebarWidget-DB4gw6Rd.cjs} +2 -2
  154. package/dist/{LabelvaluerangebarWidget-Ca6lJAZV.cjs.map → LabelvaluerangebarWidget-DB4gw6Rd.cjs.map} +1 -1
  155. package/dist/{LabelvaluerangebarWidget-7pEykAm3.js → LabelvaluerangebarWidget-DexAc2UB.js} +4 -4
  156. package/dist/{LabelvaluerangebarWidget-7pEykAm3.js.map → LabelvaluerangebarWidget-DexAc2UB.js.map} +1 -1
  157. package/dist/{Layout-BNvQKlyy.js → Layout-Dd6dRf3R.js} +2 -2
  158. package/dist/{Layout-BNvQKlyy.js.map → Layout-Dd6dRf3R.js.map} +1 -1
  159. package/dist/Layout-DvBekli8.cjs +2 -0
  160. package/dist/{Layout-CXwcgFxa.cjs.map → Layout-DvBekli8.cjs.map} +1 -1
  161. package/dist/{LedWidget-_EA7ZKM8.js → LedWidget-D1RwHb_V.js} +4 -4
  162. package/dist/{LedWidget-_EA7ZKM8.js.map → LedWidget-D1RwHb_V.js.map} +1 -1
  163. package/dist/{LedWidget-CafSb6jG.cjs → LedWidget-a99ygZOA.cjs} +2 -2
  164. package/dist/{LedWidget-CafSb6jG.cjs.map → LedWidget-a99ygZOA.cjs.map} +1 -1
  165. package/dist/{LimitsbarWidget-DdoQf46y.js → LimitsbarWidget-ClOmoV50.js} +2 -2
  166. package/dist/{LimitsbarWidget-DdoQf46y.js.map → LimitsbarWidget-ClOmoV50.js.map} +1 -1
  167. package/dist/{LimitsbarWidget-B4E6eQgY.cjs → LimitsbarWidget-DaHpj-rM.cjs} +2 -2
  168. package/dist/{LimitsbarWidget-B4E6eQgY.cjs.map → LimitsbarWidget-DaHpj-rM.cjs.map} +1 -1
  169. package/dist/{LimitscolorWidget-Cv0umnVo.js → LimitscolorWidget-CBUoEYKp.js} +2 -2
  170. package/dist/{LimitscolorWidget-Cv0umnVo.js.map → LimitscolorWidget-CBUoEYKp.js.map} +1 -1
  171. package/dist/{LimitscolorWidget-B-ESO_oy.cjs → LimitscolorWidget-D4nPHQlI.cjs} +2 -2
  172. package/dist/{LimitscolorWidget-B-ESO_oy.cjs.map → LimitscolorWidget-D4nPHQlI.cjs.map} +1 -1
  173. package/dist/{LimitscolumnWidget-CnCQtxim.js → LimitscolumnWidget-hsHkmY-_.js} +2 -2
  174. package/dist/{LimitscolumnWidget-CnCQtxim.js.map → LimitscolumnWidget-hsHkmY-_.js.map} +1 -1
  175. package/dist/{LimitscolumnWidget-PbEe5NP1.cjs → LimitscolumnWidget-wIx0L9hb.cjs} +2 -2
  176. package/dist/{LimitscolumnWidget-PbEe5NP1.cjs.map → LimitscolumnWidget-wIx0L9hb.cjs.map} +1 -1
  177. package/dist/{LinegraphWidget-Bto_2lSc.cjs → LinegraphWidget-BRnwhfEQ.cjs} +2 -2
  178. package/dist/{LinegraphWidget-Bto_2lSc.cjs.map → LinegraphWidget-BRnwhfEQ.cjs.map} +1 -1
  179. package/dist/{LinegraphWidget-ekyQoR7x.js → LinegraphWidget-CXrKtxOo.js} +4 -4
  180. package/dist/{LinegraphWidget-ekyQoR7x.js.map → LinegraphWidget-CXrKtxOo.js.map} +1 -1
  181. package/dist/{MatrixbycolumnsWidget-bMjMlQYz.cjs → MatrixbycolumnsWidget-3jldaS14.cjs} +2 -2
  182. package/dist/{MatrixbycolumnsWidget-bMjMlQYz.cjs.map → MatrixbycolumnsWidget-3jldaS14.cjs.map} +1 -1
  183. package/dist/{MatrixbycolumnsWidget-IBUcGNF7.js → MatrixbycolumnsWidget-CsogVU9c.js} +3 -3
  184. package/dist/{MatrixbycolumnsWidget-IBUcGNF7.js.map → MatrixbycolumnsWidget-CsogVU9c.js.map} +1 -1
  185. package/dist/{MicroservicesTab-BXb4TPjR.cjs → MicroservicesTab-3pNZZ5I0.cjs} +2 -2
  186. package/dist/{MicroservicesTab-BXb4TPjR.cjs.map → MicroservicesTab-3pNZZ5I0.cjs.map} +1 -1
  187. package/dist/{MicroservicesTab-CUqp5uFH.js → MicroservicesTab-DzEvbxlM.js} +3 -3
  188. package/dist/{MicroservicesTab-CUqp5uFH.js.map → MicroservicesTab-DzEvbxlM.js.map} +1 -1
  189. package/dist/{Openc3Screen-ByRi15VK.cjs → Openc3Screen-CD3C_EUo.cjs} +2 -2
  190. package/dist/{Openc3Screen-ByRi15VK.cjs.map → Openc3Screen-CD3C_EUo.cjs.map} +1 -1
  191. package/dist/{Openc3Screen-B31-mKUZ.js → Openc3Screen-Cqm5Xtd-.js} +3 -3
  192. package/dist/{Openc3Screen-B31-mKUZ.js.map → Openc3Screen-Cqm5Xtd-.js.map} +1 -1
  193. package/dist/{OutputDialog-wBy-sg3k.js → OutputDialog-7M4L50tA.js} +2 -2
  194. package/dist/{OutputDialog-wBy-sg3k.js.map → OutputDialog-7M4L50tA.js.map} +1 -1
  195. package/dist/{OutputDialog-CXQ5-PgU.cjs → OutputDialog-CnDQxHTZ.cjs} +2 -2
  196. package/dist/{OutputDialog-CXQ5-PgU.cjs.map → OutputDialog-CnDQxHTZ.cjs.map} +1 -1
  197. package/dist/{PackagesTab-oOtpCEIX.cjs → PackagesTab-DPPXZvoV.cjs} +2 -2
  198. package/dist/{PackagesTab-oOtpCEIX.cjs.map → PackagesTab-DPPXZvoV.cjs.map} +1 -1
  199. package/dist/{PackagesTab-BSVPTVe7.js → PackagesTab-N4SD1Pxj.js} +3 -3
  200. package/dist/{PackagesTab-BSVPTVe7.js.map → PackagesTab-N4SD1Pxj.js.map} +1 -1
  201. package/dist/{PluginsTab-DShjzJVP.js → PluginsTab-C7PH2Wym.js} +4 -4
  202. package/dist/{PluginsTab-DShjzJVP.js.map → PluginsTab-C7PH2Wym.js.map} +1 -1
  203. package/dist/{PluginsTab-D2-nxcCZ.cjs → PluginsTab-xzPlEMYj.cjs} +2 -2
  204. package/dist/{PluginsTab-D2-nxcCZ.cjs.map → PluginsTab-xzPlEMYj.cjs.map} +1 -1
  205. package/dist/{ProgressbarWidget-CnveFZVh.js → ProgressbarWidget-CO6CEkxP.js} +2 -2
  206. package/dist/{ProgressbarWidget-CnveFZVh.js.map → ProgressbarWidget-CO6CEkxP.js.map} +1 -1
  207. package/dist/{ProgressbarWidget-KBhRifXc.cjs → ProgressbarWidget-CPeGR-Az.cjs} +2 -2
  208. package/dist/{ProgressbarWidget-KBhRifXc.cjs.map → ProgressbarWidget-CPeGR-Az.cjs.map} +1 -1
  209. package/dist/{RadiobuttonWidget-hWLrCb8W.js → RadiobuttonWidget-DrxUclws.js} +2 -2
  210. package/dist/{RadiobuttonWidget-hWLrCb8W.js.map → RadiobuttonWidget-DrxUclws.js.map} +1 -1
  211. package/dist/{RadiobuttonWidget-Dt1lTgs1.cjs → RadiobuttonWidget-DucgkAYD.cjs} +2 -2
  212. package/dist/{RadiobuttonWidget-Dt1lTgs1.cjs.map → RadiobuttonWidget-DucgkAYD.cjs.map} +1 -1
  213. package/dist/{RadiogroupWidget-CT4otlQS.cjs → RadiogroupWidget-C7oVFRf3.cjs} +2 -2
  214. package/dist/{RadiogroupWidget-CT4otlQS.cjs.map → RadiogroupWidget-C7oVFRf3.cjs.map} +1 -1
  215. package/dist/{RadiogroupWidget-DK1fphkh.js → RadiogroupWidget-DN9C38cg.js} +2 -2
  216. package/dist/{RadiogroupWidget-DK1fphkh.js.map → RadiogroupWidget-DN9C38cg.js.map} +1 -1
  217. package/dist/{RangebarWidget-vspY8CGV.js → RangebarWidget-5uQTfLMP.js} +2 -2
  218. package/dist/{RangebarWidget-vspY8CGV.js.map → RangebarWidget-5uQTfLMP.js.map} +1 -1
  219. package/dist/{RangebarWidget-DquzegM5.cjs → RangebarWidget-Da9S3KMB.cjs} +2 -2
  220. package/dist/{RangebarWidget-DquzegM5.cjs.map → RangebarWidget-Da9S3KMB.cjs.map} +1 -1
  221. package/dist/{RedisTab-DBbLlP9e.cjs → RedisTab-BFTaPNRc.cjs} +2 -2
  222. package/dist/{RedisTab-DBbLlP9e.cjs.map → RedisTab-BFTaPNRc.cjs.map} +1 -1
  223. package/dist/{RedisTab-B28s52_T.js → RedisTab-Cyrr_g9k.js} +2 -2
  224. package/dist/{RedisTab-B28s52_T.js.map → RedisTab-Cyrr_g9k.js.map} +1 -1
  225. package/dist/{RollupWidget-07pNcXQV.js → RollupWidget-B0DCULnu.js} +2 -2
  226. package/dist/{RollupWidget-07pNcXQV.js.map → RollupWidget-B0DCULnu.js.map} +1 -1
  227. package/dist/{RollupWidget-CoxNKLcv.cjs → RollupWidget-DK0eFASs.cjs} +2 -2
  228. package/dist/{RollupWidget-CoxNKLcv.cjs.map → RollupWidget-DK0eFASs.cjs.map} +1 -1
  229. package/dist/{RoutersTab-DEtxUph7.cjs → RoutersTab-B8JIxjdI.cjs} +2 -2
  230. package/dist/{RoutersTab-DEtxUph7.cjs.map → RoutersTab-B8JIxjdI.cjs.map} +1 -1
  231. package/dist/{RoutersTab-DX_r6FEQ.js → RoutersTab-BAfpG8k3.js} +3 -3
  232. package/dist/{RoutersTab-DX_r6FEQ.js.map → RoutersTab-BAfpG8k3.js.map} +1 -1
  233. package/dist/ScriptChooser-ahp4Tu3O.js +573 -0
  234. package/dist/ScriptChooser-ahp4Tu3O.js.map +1 -0
  235. package/dist/ScriptChooser-ma6P0WuM.cjs +2 -0
  236. package/dist/ScriptChooser-ma6P0WuM.cjs.map +1 -0
  237. package/dist/{ScrollwindowWidget-BcbyrYUo.js → ScrollwindowWidget-BOkZQgtf.js} +3 -3
  238. package/dist/{ScrollwindowWidget-BcbyrYUo.js.map → ScrollwindowWidget-BOkZQgtf.js.map} +1 -1
  239. package/dist/{ScrollwindowWidget-Djvcd1yX.cjs → ScrollwindowWidget-xM_R_Arq.cjs} +2 -2
  240. package/dist/{ScrollwindowWidget-Djvcd1yX.cjs.map → ScrollwindowWidget-xM_R_Arq.cjs.map} +1 -1
  241. package/dist/{SecretsTab-BNFEqrT1.js → SecretsTab-D5RxHYVp.js} +2 -2
  242. package/dist/{SecretsTab-BNFEqrT1.js.map → SecretsTab-D5RxHYVp.js.map} +1 -1
  243. package/dist/{SecretsTab-cG1U2SyL.cjs → SecretsTab-DoHYppoO.cjs} +2 -2
  244. package/dist/{SecretsTab-cG1U2SyL.cjs.map → SecretsTab-DoHYppoO.cjs.map} +1 -1
  245. package/dist/{SettingsTab-C4T8ecIZ.js → SettingsTab-CKGQEwd_.js} +137 -121
  246. package/dist/SettingsTab-CKGQEwd_.js.map +1 -0
  247. package/dist/{SettingsTab-DvUFxNoM.cjs → SettingsTab-Dvnzqzdp.cjs} +3 -3
  248. package/dist/SettingsTab-Dvnzqzdp.cjs.map +1 -0
  249. package/dist/{SignalWidget-9IqQEM4M.cjs → SignalWidget-BWKgNMdV.cjs} +2 -2
  250. package/dist/{SignalWidget-9IqQEM4M.cjs.map → SignalWidget-BWKgNMdV.cjs.map} +1 -1
  251. package/dist/{SignalWidget-BDp5sUHj.js → SignalWidget-Cis0Xkea.js} +2 -2
  252. package/dist/{SignalWidget-BDp5sUHj.js.map → SignalWidget-Cis0Xkea.js.map} +1 -1
  253. package/dist/{SimpleTextDialog-C1trfMSJ.cjs → SimpleTextDialog-BCNn5FZh.cjs} +2 -2
  254. package/dist/{SimpleTextDialog-C1trfMSJ.cjs.map → SimpleTextDialog-BCNn5FZh.cjs.map} +1 -1
  255. package/dist/{SimpleTextDialog-LQJdcAXX.js → SimpleTextDialog-D2mEDvGY.js} +2 -2
  256. package/dist/{SimpleTextDialog-LQJdcAXX.js.map → SimpleTextDialog-D2mEDvGY.js.map} +1 -1
  257. package/dist/{SpacerWidget-DcOnQ1yI.js → SpacerWidget-CLcqC2Qk.js} +2 -2
  258. package/dist/{SpacerWidget-DcOnQ1yI.js.map → SpacerWidget-CLcqC2Qk.js.map} +1 -1
  259. package/dist/{SpacerWidget-BS_oBLMC.cjs → SpacerWidget-_daU5QnM.cjs} +2 -2
  260. package/dist/{SpacerWidget-BS_oBLMC.cjs.map → SpacerWidget-_daU5QnM.cjs.map} +1 -1
  261. package/dist/{SparklineWidget-CVglnlAm.js → SparklineWidget-CTp83eZ-.js} +4 -4
  262. package/dist/{SparklineWidget-CVglnlAm.js.map → SparklineWidget-CTp83eZ-.js.map} +1 -1
  263. package/dist/{SparklineWidget-CciCNv5R.cjs → SparklineWidget-qRnlPzJ_.cjs} +2 -2
  264. package/dist/{SparklineWidget-CciCNv5R.cjs.map → SparklineWidget-qRnlPzJ_.cjs.map} +1 -1
  265. package/dist/{TabbookWidget-hCZ5AcLk.cjs → TabbookWidget-C0Fvv-o5.cjs} +2 -2
  266. package/dist/{TabbookWidget-hCZ5AcLk.cjs.map → TabbookWidget-C0Fvv-o5.cjs.map} +1 -1
  267. package/dist/{TabbookWidget-p51Oa7Ru.js → TabbookWidget-uucd-zsX.js} +2 -2
  268. package/dist/{TabbookWidget-p51Oa7Ru.js.map → TabbookWidget-uucd-zsX.js.map} +1 -1
  269. package/dist/TargetPacketItemChooser-CAl-fNql.cjs +2 -0
  270. package/dist/TargetPacketItemChooser-CAl-fNql.cjs.map +1 -0
  271. package/dist/TargetPacketItemChooser-CXpSx-eA.js +572 -0
  272. package/dist/TargetPacketItemChooser-CXpSx-eA.js.map +1 -0
  273. package/dist/{TargetsTab-CBagO3CX.js → TargetsTab-CM4ABe5y.js} +3 -3
  274. package/dist/{TargetsTab-CBagO3CX.js.map → TargetsTab-CM4ABe5y.js.map} +1 -1
  275. package/dist/{TargetsTab-CTzQTnuk.cjs → TargetsTab-Ixql3xzm.cjs} +2 -2
  276. package/dist/{TargetsTab-CTzQTnuk.cjs.map → TargetsTab-Ixql3xzm.cjs.map} +1 -1
  277. package/dist/{TextboxWidget-DM-XX97e.js → TextboxWidget-C2n38ti5.js} +4 -4
  278. package/dist/{TextboxWidget-DM-XX97e.js.map → TextboxWidget-C2n38ti5.js.map} +1 -1
  279. package/dist/{TextboxWidget-BhtvlFuj.cjs → TextboxWidget-DrdMC0EB.cjs} +2 -2
  280. package/dist/{TextboxWidget-BhtvlFuj.cjs.map → TextboxWidget-DrdMC0EB.cjs.map} +1 -1
  281. package/dist/{TextfieldWidget-7cYHAgH8.js → TextfieldWidget--HTv9ddk.js} +2 -2
  282. package/dist/{TextfieldWidget-7cYHAgH8.js.map → TextfieldWidget--HTv9ddk.js.map} +1 -1
  283. package/dist/{TextfieldWidget-ChH9glbY.cjs → TextfieldWidget-VeOem1w3.cjs} +2 -2
  284. package/dist/{TextfieldWidget-ChH9glbY.cjs.map → TextfieldWidget-VeOem1w3.cjs.map} +1 -1
  285. package/dist/{TimeWidget-CUm-LMyL.cjs → TimeWidget-C9ltUWFh.cjs} +2 -2
  286. package/dist/{TimeWidget-CUm-LMyL.cjs.map → TimeWidget-C9ltUWFh.cjs.map} +1 -1
  287. package/dist/{TimeWidget-EvQJyu6x.js → TimeWidget-CPNVZaUM.js} +2 -2
  288. package/dist/{TimeWidget-EvQJyu6x.js.map → TimeWidget-CPNVZaUM.js.map} +1 -1
  289. package/dist/{TitleWidget-6ddfJuqd.js → TitleWidget-Cp0cb6V8.js} +2 -2
  290. package/dist/{TitleWidget-6ddfJuqd.js.map → TitleWidget-Cp0cb6V8.js.map} +1 -1
  291. package/dist/{TitleWidget-Es1lfe61.cjs → TitleWidget-IuUVZkLh.cjs} +2 -2
  292. package/dist/{TitleWidget-Es1lfe61.cjs.map → TitleWidget-IuUVZkLh.cjs.map} +1 -1
  293. package/dist/ToolsTab-Bgrj0eGr.cjs +7 -0
  294. package/dist/ToolsTab-Bgrj0eGr.cjs.map +1 -0
  295. package/dist/{ToolsTab-ClJNvp8z.js → ToolsTab-DGjyBWkp.js} +5 -5
  296. package/dist/ToolsTab-DGjyBWkp.js.map +1 -0
  297. package/dist/{TopBar-CmP-ZyVe.js → TopBar-B48yYbtR.js} +79 -65
  298. package/dist/{TopBar-CmP-ZyVe.js.map → TopBar-B48yYbtR.js.map} +1 -1
  299. package/dist/TopBar-DLz-U85G.cjs +2 -0
  300. package/dist/{TopBar-xyBcJsNc.cjs.map → TopBar-DLz-U85G.cjs.map} +1 -1
  301. package/dist/{UpgradeToEnterpriseDialog-DpWUa84S.js → UpgradeToEnterpriseDialog-C2Ggr_Xd.js} +2 -2
  302. package/dist/{UpgradeToEnterpriseDialog-DpWUa84S.js.map → UpgradeToEnterpriseDialog-C2Ggr_Xd.js.map} +1 -1
  303. package/dist/{UpgradeToEnterpriseDialog-CViAJs_M.cjs → UpgradeToEnterpriseDialog-DtckZO3_.cjs} +2 -2
  304. package/dist/{UpgradeToEnterpriseDialog-CViAJs_M.cjs.map → UpgradeToEnterpriseDialog-DtckZO3_.cjs.map} +1 -1
  305. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NN0zFL7Z.cjs → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs} +39 -39
  306. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs.map +1 -0
  307. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BuwHe3dn.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-JEZNdnan.js} +2272 -2208
  308. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-JEZNdnan.js.map +1 -0
  309. package/dist/{VWidget-3jbGZ8Dh.cjs → VWidget-Cf9MXbCl.cjs} +2 -2
  310. package/dist/{VWidget-3jbGZ8Dh.cjs.map → VWidget-Cf9MXbCl.cjs.map} +1 -1
  311. package/dist/{VWidget-P-X9ffkl.js → VWidget-DQGJRgAk.js} +3 -3
  312. package/dist/{VWidget-P-X9ffkl.js.map → VWidget-DQGJRgAk.js.map} +1 -1
  313. package/dist/{ValueWidget-DAUGuQ9f.js → ValueWidget-Bk1RFjks.js} +4 -4
  314. package/dist/{ValueWidget-DAUGuQ9f.js.map → ValueWidget-Bk1RFjks.js.map} +1 -1
  315. package/dist/{ValueWidget-D3yaN8DJ.cjs → ValueWidget-BmXm9dYt.cjs} +2 -2
  316. package/dist/{ValueWidget-D3yaN8DJ.cjs.map → ValueWidget-BmXm9dYt.cjs.map} +1 -1
  317. package/dist/{ValuelimitsbarWidget-DmLUXw0I.js → ValuelimitsbarWidget-C0HIBYh2.js} +4 -4
  318. package/dist/{ValuelimitsbarWidget-DmLUXw0I.js.map → ValuelimitsbarWidget-C0HIBYh2.js.map} +1 -1
  319. package/dist/{ValuelimitsbarWidget-DGwtzXt6.cjs → ValuelimitsbarWidget-PjCpjhsr.cjs} +2 -2
  320. package/dist/{ValuelimitsbarWidget-DGwtzXt6.cjs.map → ValuelimitsbarWidget-PjCpjhsr.cjs.map} +1 -1
  321. package/dist/{ValuelimitscolumnWidget-BRYnKfQk.cjs → ValuelimitscolumnWidget-BGiDDUI_.cjs} +2 -2
  322. package/dist/{ValuelimitscolumnWidget-BRYnKfQk.cjs.map → ValuelimitscolumnWidget-BGiDDUI_.cjs.map} +1 -1
  323. package/dist/{ValuelimitscolumnWidget-DDmo8wHJ.js → ValuelimitscolumnWidget-BTT90uyX.js} +4 -4
  324. package/dist/{ValuelimitscolumnWidget-DDmo8wHJ.js.map → ValuelimitscolumnWidget-BTT90uyX.js.map} +1 -1
  325. package/dist/{ValuerangebarWidget-CbzWSWq3.js → ValuerangebarWidget-CcQw_XK9.js} +4 -4
  326. package/dist/{ValuerangebarWidget-CbzWSWq3.js.map → ValuerangebarWidget-CcQw_XK9.js.map} +1 -1
  327. package/dist/{ValuerangebarWidget-hi5jZvo8.cjs → ValuerangebarWidget-ClmX-qH_.cjs} +2 -2
  328. package/dist/{ValuerangebarWidget-hi5jZvo8.cjs.map → ValuerangebarWidget-ClmX-qH_.cjs.map} +1 -1
  329. package/dist/{VerticalWidget-CRFI8Dq6.cjs → VerticalWidget-BeDWsvP6.cjs} +2 -2
  330. package/dist/{VerticalWidget-CRFI8Dq6.cjs.map → VerticalWidget-BeDWsvP6.cjs.map} +1 -1
  331. package/dist/{VerticalWidget-BuKinn_c.js → VerticalWidget-CNtFQv3R.js} +2 -2
  332. package/dist/{VerticalWidget-BuKinn_c.js.map → VerticalWidget-CNtFQv3R.js.map} +1 -1
  333. package/dist/{VerticalboxWidget-1qp7u87Q.cjs → VerticalboxWidget-DlokKDBD.cjs} +2 -2
  334. package/dist/{VerticalboxWidget-1qp7u87Q.cjs.map → VerticalboxWidget-DlokKDBD.cjs.map} +1 -1
  335. package/dist/{VerticalboxWidget-C0zD5h0O.js → VerticalboxWidget-Yxmz1SnU.js} +5 -5
  336. package/dist/{VerticalboxWidget-C0zD5h0O.js.map → VerticalboxWidget-Yxmz1SnU.js.map} +1 -1
  337. package/dist/{Widget-wEcPyNXg.cjs → Widget-HC1_yuQg.cjs} +2 -2
  338. package/dist/{Widget-wEcPyNXg.cjs.map → Widget-HC1_yuQg.cjs.map} +1 -1
  339. package/dist/{Widget-BIXl-Pk5.js → Widget-LsyjS7ZS.js} +2 -2
  340. package/dist/{Widget-BIXl-Pk5.js.map → Widget-LsyjS7ZS.js.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 +3 -3
  344. package/dist/components.cjs.map +1 -1
  345. package/dist/components.js +229 -622
  346. package/dist/components.js.map +1 -1
  347. package/dist/format-B22VpiOS.cjs.map +1 -1
  348. package/dist/format-CVeawcIv.js.map +1 -1
  349. package/dist/getDefaultOptions-Batab9o8.cjs.map +1 -1
  350. package/dist/getDefaultOptions-BhSDk-Jo.js.map +1 -1
  351. package/dist/index-DS1ACWVr.js.map +1 -1
  352. package/dist/index-Nd4O4kac.cjs.map +1 -1
  353. package/dist/parse-DnkEsW-3.js.map +1 -1
  354. package/dist/parse-DwfgQboe.cjs.map +1 -1
  355. package/dist/plugins.cjs +2 -2
  356. package/dist/plugins.cjs.map +1 -1
  357. package/dist/plugins.js +87 -83
  358. package/dist/plugins.js.map +1 -1
  359. package/dist/purify.es-GHnZTJ9O.cjs +3 -0
  360. package/dist/purify.es-GHnZTJ9O.cjs.map +1 -0
  361. package/dist/purify.es-eYFoHPwR.js +529 -0
  362. package/dist/purify.es-eYFoHPwR.js.map +1 -0
  363. package/dist/{settings-DToCplG_.js → settings-DCxXjkio.js} +2 -2
  364. package/dist/{settings-DToCplG_.js.map → settings-DCxXjkio.js.map} +1 -1
  365. package/dist/{settings-CUg4_VNE.cjs → settings-zRw8EylV.cjs} +2 -2
  366. package/dist/{settings-CUg4_VNE.cjs.map → settings-zRw8EylV.cjs.map} +1 -1
  367. package/dist/timeFilters-BKnCM4rv.js.map +1 -1
  368. package/dist/timeFilters-CJFxfjqN.cjs.map +1 -1
  369. package/dist/tools/admin.cjs +1 -1
  370. package/dist/tools/admin.cjs.map +1 -1
  371. package/dist/tools/admin.js +12 -12
  372. package/dist/tools/admin.js.map +1 -1
  373. package/dist/tools/base.cjs +1 -1
  374. package/dist/tools/base.cjs.map +1 -1
  375. package/dist/tools/base.js +324 -320
  376. package/dist/tools/base.js.map +1 -1
  377. package/dist/tools/calendar.cjs +1 -1
  378. package/dist/tools/calendar.js +1 -1
  379. package/dist/tools/scriptrunner.cjs +8 -7
  380. package/dist/tools/scriptrunner.cjs.map +1 -1
  381. package/dist/tools/scriptrunner.js +1497 -1288
  382. package/dist/tools/scriptrunner.js.map +1 -1
  383. package/dist/vue-common.css +1 -1
  384. package/dist/widgets.cjs +1 -1
  385. package/dist/widgets.js +63 -63
  386. package/package.json +5 -2
  387. package/dist/EventListDialog-1NXp1MLg.js.map +0 -1
  388. package/dist/EventListDialog-BwSJXEhw.cjs +0 -2
  389. package/dist/EventListDialog-BwSJXEhw.cjs.map +0 -1
  390. package/dist/Graph-BuKXPKyK.cjs +0 -2
  391. package/dist/Graph-BuKXPKyK.cjs.map +0 -1
  392. package/dist/Graph-DZBpdSgR.js.map +0 -1
  393. package/dist/GraphWidget-CHm4bhMI.js.map +0 -1
  394. package/dist/GraphWidget-P-EUkwbI.cjs.map +0 -1
  395. package/dist/IframeWidget-DG7yUYb3.cjs.map +0 -1
  396. package/dist/IframeWidget-DcqRMhyW.js.map +0 -1
  397. package/dist/Layout-CXwcgFxa.cjs +0 -2
  398. package/dist/ScriptChooser-BZMnm4SX.cjs +0 -2
  399. package/dist/ScriptChooser-BZMnm4SX.cjs.map +0 -1
  400. package/dist/ScriptChooser-Ci_3uZDo.js +0 -176
  401. package/dist/ScriptChooser-Ci_3uZDo.js.map +0 -1
  402. package/dist/SettingsTab-C4T8ecIZ.js.map +0 -1
  403. package/dist/SettingsTab-DvUFxNoM.cjs.map +0 -1
  404. package/dist/ToolsTab-ClJNvp8z.js.map +0 -1
  405. package/dist/ToolsTab-PKUy_HaM.cjs +0 -7
  406. package/dist/ToolsTab-PKUy_HaM.cjs.map +0 -1
  407. package/dist/TopBar-xyBcJsNc.cjs +0 -2
  408. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BuwHe3dn.js.map +0 -1
  409. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NN0zFL7Z.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"Graph-BuKXPKyK.cjs","sources":["../src/components/TargetPacketItemChooser.vue","../src/components/GraphEditDialog.vue","../src/components/GraphEditItemDialog.vue","../src/components/Graph.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n\n# A portion of this file was funded by Blue Origin Enterprises, L.P.\n# See https://github.com/OpenC3/cosmos/pull/1957\n-->\n\n<template>\n <div class=\"pt-4 pb-4\">\n <v-row :no-gutters=\"!vertical\">\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"select-target\">\n <v-autocomplete\n v-model=\"selectedTargetName\"\n label=\"Select Target\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"autocompleteDisabled || lockTarget\"\n :items=\"targetNames\"\n item-title=\"label\"\n item-value=\"value\"\n @update:model-value=\"targetNameChanged\"\n />\n </v-col>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"select-packet\">\n <v-autocomplete\n v-model=\"selectedPacketName\"\n label=\"Select Packet\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"packetsDisabled || autocompleteDisabled || lockPacket\"\n :items=\"packetNames\"\n item-title=\"label\"\n item-value=\"value\"\n @update:model-value=\"packetNameChanged\"\n >\n <template v-if=\"includeLatestPacketInDropdown\" #prepend-item>\n <v-list-item title=\"LATEST\" @click=\"packetNameChanged('LATEST')\" />\n <v-divider />\n </template>\n </v-autocomplete>\n </v-col>\n <v-col\n v-if=\"chooseItem\"\n :cols=\"colSize\"\n class=\"tpic-select pr-4\"\n data-test=\"select-item\"\n >\n <v-autocomplete\n v-model=\"selectedItemName\"\n label=\"Select Item\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"itemsDisabled || autocompleteDisabled\"\n :items=\"itemNames\"\n item-title=\"label\"\n item-value=\"value\"\n @update:model-value=\"itemNameChanged($event)\"\n />\n </v-col>\n <!-- min-width: 105px is enough to display a 2 digit index -->\n <v-col\n v-if=\"chooseItem && itemIsArray\"\n cols=\"1\"\n class=\"tpic-select pr-4\"\n data-test=\"array-index\"\n style=\"min-width: 105px\"\n >\n <v-combobox\n v-model=\"selectedArrayIndex\"\n label=\"Index\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"itemsDisabled || autocompleteDisabled\"\n :items=\"arrayIndexes\"\n item-title=\"label\"\n item-value=\"value\"\n @update:model-value=\"indexChanged($event)\"\n />\n </v-col>\n <v-col v-if=\"buttonText\" :cols=\"colSize\" style=\"max-width: 140px\">\n <v-btn\n :disabled=\"buttonDisabled\"\n color=\"primary\"\n data-test=\"select-send\"\n @click=\"buttonPressed\"\n >\n {{ actualButtonText }}\n </v-btn>\n </v-col>\n </v-row>\n <v-row v-if=\"selectTypes\" class=\"pt-6\" no-gutters>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"data-type\">\n <v-autocomplete\n v-model=\"selectedValueType\"\n label=\"Value Type\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :items=\"valueTypes\"\n />\n </v-col>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"reduced\">\n <v-autocomplete\n v-model=\"selectedReduced\"\n label=\"Reduced\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :items=\"reductionModes\"\n />\n </v-col>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"reduced-type\">\n <v-autocomplete\n v-model=\"selectedReducedType\"\n label=\"Reduced Type\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"selectedReduced === 'DECOM'\"\n :items=\"reducedTypes\"\n />\n </v-col>\n <v-col :cols=\"colSize\" style=\"max-width: 140px\"> </v-col>\n </v-row>\n <v-row no-gutters class=\"pa-3\">\n <v-col :cols=\"colSize\" :class=\"{ 'openc3-yellow': hazardous }\">\n Description: {{ description }}\n <template v-if=\"hazardous\"> (HAZARDOUS) </template>\n </v-col>\n </v-row>\n </div>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n allowAll: {\n type: Boolean,\n default: false,\n },\n allowAllTargets: {\n type: Boolean,\n default: false,\n },\n allowAllArrayIndex: {\n type: Boolean,\n default: false,\n },\n buttonText: {\n type: String,\n default: null,\n },\n chooseItem: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n initialTargetName: {\n type: String,\n default: '',\n },\n initialPacketName: {\n type: String,\n default: '',\n },\n initialItemName: {\n type: String,\n default: '',\n },\n selectTypes: {\n type: Boolean,\n default: false,\n },\n showLatest: {\n type: Boolean,\n default: false,\n },\n mode: {\n type: String,\n default: 'tlm',\n // TODO: add validators throughout\n validator: (propValue) => {\n return ['cmd', 'tlm'].includes(propValue)\n },\n },\n unknown: {\n type: Boolean,\n default: false,\n },\n vertical: {\n type: Boolean,\n default: false,\n },\n hidden: {\n type: Boolean,\n default: false,\n },\n lockTarget: {\n type: Boolean,\n default: false,\n },\n lockPacket: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['on-set', 'addItem'],\n data() {\n return {\n targetNames: [],\n selectedTargetName: this.initialTargetName?.toUpperCase(),\n packetNames: [],\n selectedPacketName: this.initialPacketName?.toUpperCase(),\n itemNames: [],\n selectedItemName: this.initialItemName?.toUpperCase(),\n valueTypes: ['CONVERTED', 'RAW'],\n selectedValueType: 'CONVERTED',\n reductionModes: [\n // Map NONE to DECOM for clarity\n { title: 'NONE', value: 'DECOM' },\n { title: 'REDUCED_MINUTE', value: 'REDUCED_MINUTE' },\n { title: 'REDUCED_HOUR', value: 'REDUCED_HOUR' },\n { title: 'REDUCED_DAY', value: 'REDUCED_DAY' },\n ],\n selectedArrayIndex: null,\n selectedReduced: 'DECOM',\n reducedTypes: ['MIN', 'MAX', 'AVG', 'STDDEV'],\n selectedReducedType: 'AVG',\n description: '',\n hazardous: false,\n internalDisabled: false,\n packetsDisabled: false,\n itemsDisabled: false,\n api: null,\n ALL: {\n label: '[ ALL ]',\n value: 'ALL',\n description: 'ALL',\n }, // Constant to indicate all packets or items\n UNKNOWN: {\n label: '[ UNKNOWN ]',\n value: 'UNKNOWN',\n description: 'UNKNOWN',\n },\n }\n },\n computed: {\n actualButtonText: function () {\n if (this.selectedPacketName === 'ALL') {\n return 'Add Target'\n }\n if (this.selectedItemName === 'ALL') {\n return 'Add Packet'\n }\n return this.buttonText\n },\n autocompleteDisabled: function () {\n return this.disabled || this.internalDisabled\n },\n buttonDisabled: function () {\n return (\n this.disabled ||\n this.internalDisabled ||\n this.selectedTargetName === null ||\n this.selectedPacketName === null ||\n this.selectedItemNameWIndex === null\n )\n },\n colSize: function () {\n return this.vertical ? 12 : false\n },\n selectedItemNameWIndex: function () {\n if (\n this.itemIsArray &&\n this.selectedArrayIndex !== null &&\n this.selectedArrayIndex !== this.ALL.label\n ) {\n return `${this.selectedItemName}[${this.selectedArrayIndex}]`\n } else {\n return this.selectedItemName\n }\n },\n includeLatestPacketInDropdown: function () {\n return this.showLatest && this.mode === 'tlm' // because LATEST cmd doesn't have much use and thus isn't currently implemented\n },\n arrayIndexes: function () {\n let i = this.itemNames.findIndex(\n (item) => item.value === this.selectedItemName,\n )\n let indexes = [...Array(this.itemNames[i].array).keys()]\n if (this.allowAll || this.allowAllArrayIndex) {\n indexes.unshift(this.ALL.label)\n }\n return indexes\n },\n itemIsArray: function () {\n let i = this.itemNames.findIndex(\n (item) => item.value === this.selectedItemName,\n )\n if (i === -1 || isNaN(this.itemNames[i].array)) {\n return false\n } else {\n return true\n }\n },\n },\n watch: {\n initialTargetName: function (val) {\n // These three \"initial\" watchers are here in case the parent component doesn't figure out its initial values\n // until after this component has already been created. All this logic incl. the \"on-set\" events could be\n // simplified with a refactor to use named v-models, but that's probably a significant breaking change.\n if (val) {\n this.selectedTargetName = val.toUpperCase()\n }\n },\n initialPacketName: function (val) {\n if (val) {\n this.selectedPacketName = val.toUpperCase()\n }\n },\n initialItemName: function (val) {\n if (val) {\n this.selectedItemName = val.toUpperCase()\n }\n },\n mode: function (newVal, oldVal) {\n this.selectedPacketName = null\n this.selectedItemName = null\n // This also updates packets and items as needed\n this.targetNameChanged(this.selectedTargetName)\n },\n chooseItem: function (newVal, oldVal) {\n if (newVal) {\n this.updateItems()\n } else {\n this.itemNames = []\n }\n },\n itemIsArray: function (val) {\n if (val) {\n this.selectedArrayIndex ||= 0\n } else {\n this.selectedArrayIndex = null\n }\n },\n },\n created() {\n this.internalDisabled = true\n this.api = new OpenC3Api()\n this.api.get_target_names().then((result) => {\n this.targetNames = result.flatMap((target) => {\n // Ignore the UNKNOWN target as it doesn't make sense to select this\n if (target == 'UNKNOWN') {\n return []\n }\n return { label: target, value: target }\n })\n // TODO: This is a nice enhancement but results in logs of API calls for many targets\n // See if we can reduce this to a single API call\n // Filter out any targets without packets\n // for (let i = this.targetNames.length - 1; i >= 0; i--) {\n // const cmd =\n // this.mode === 'tlm' ? 'get_all_tlm_names' : 'get_all_cmd_names'\n // await this.api[cmd](this.targetNames[i].value).then((names) => {\n // if (names.length === 0) {\n // this.targetNames.splice(i, 1)\n // }\n // })\n // }\n if (this.allowAllTargets) {\n this.targetNames.unshift(this.ALL)\n }\n // If the initial target name is not set, default to the first target\n // which also updates packets and items as needed\n if (!this.selectedTargetName) {\n this.selectedTargetName = this.targetNames[0].value\n this.targetNameChanged(this.selectedTargetName)\n } else {\n // Selected target name was set but we still have to update packets\n this.updatePackets()\n }\n if (this.unknown) {\n this.targetNames.push(this.UNKNOWN)\n }\n })\n },\n methods: {\n updatePackets: function () {\n if (this.selectedTargetName === 'UNKNOWN') {\n this.packetNames = [this.UNKNOWN]\n this.selectedPacketName = this.packetNames[0].value\n this.updatePacketDetails(this.UNKNOWN.value)\n this.description = 'UNKNOWN'\n return\n }\n if (this.selectedTargetName === 'ALL') {\n this.packetNames = [this.ALL]\n this.selectedPacketName = this.packetNames[0].value\n this.updatePacketDetails(this.ALL.value)\n this.description = 'ALL'\n return\n }\n this.internalDisabled = true\n const cmd =\n this.mode === 'tlm' ? 'get_all_tlm_names' : 'get_all_cmd_names'\n this.api[cmd](this.selectedTargetName, this.hidden).then((names) => {\n this.packetNames = names.map((name) => {\n return {\n label: name,\n value: name,\n }\n })\n if (this.allowAll) {\n this.packetNames.unshift(this.ALL)\n }\n if (!this.selectedPacketName) {\n if (this.packetNames.length === 0) {\n this.selectedPacketName = null\n } else {\n this.selectedPacketName = this.packetNames[0].value\n }\n }\n this.updatePacketDetails(this.selectedPacketName)\n const item = this.packetNames.find((packet) => {\n return packet.value === this.selectedPacketName\n })\n if (item && this.chooseItem) {\n this.updateItems()\n }\n this.internalDisabled = false\n })\n },\n\n updateItems: function () {\n if (this.selectedPacketName === 'ALL') {\n return\n }\n this.internalDisabled = true\n\n if (this.selectedPacketName === 'LATEST') {\n this.api\n .get_all_tlm_item_names(this.selectedTargetName)\n .then((items) => {\n this.itemNames = items.map((item) => {\n return {\n label: item,\n value: item,\n description: `LATEST ${item}`,\n // Don't handle array for LATEST\n }\n })\n this.finishUpdateItems()\n })\n } else {\n const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.itemNames = packet.items.map((item) => {\n let label = item.name\n if (item.data_type == 'DERIVED') {\n label += ' *'\n }\n return {\n label: label,\n value: item.name,\n description: item.description,\n array: item.array_size / item.bit_size,\n }\n })\n this.itemNames.sort((a, b) => (a.label > b.label ? 1 : -1))\n this.finishUpdateItems()\n },\n )\n }\n },\n finishUpdateItems: function () {\n if (this.allowAll) {\n this.itemNames.unshift(this.ALL)\n }\n if (!this.selectedItemName) {\n this.selectedItemName = this.itemNames[0].value\n }\n this.description = this.itemNames[0].description\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n this.internalDisabled = false\n },\n\n targetNameChanged: function (value) {\n this.selectedTargetName = value\n this.selectedPacketName = ''\n this.selectedItemName = ''\n // When the target name is completed deleted in the v-autocomplete\n // the @change handler is fired but the value is null\n // In this case we don't want to update packets\n if (value !== null) {\n this.updatePackets()\n }\n },\n\n packetNameChanged: function (value) {\n this.selectedItemName = ''\n // When the packet name is completed deleted in the v-autocomplete\n // the @change handler is fired but the value is null\n // In this case we don't want to update packet details\n if (value !== null) {\n this.updatePacketDetails(value)\n }\n },\n\n updatePacketDetails: function (value) {\n if (value === 'ALL') {\n this.itemsDisabled = true\n this.internalDisabled = false\n } else if (value === 'LATEST') {\n this.itemsDisabled = false\n this.selectedPacketName = 'LATEST'\n } else {\n this.itemsDisabled = false\n const packet = this.packetNames.find((packet) => {\n return value === packet.value\n })\n if (packet) {\n this.selectedPacketName = packet.value\n const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.description = packet.description\n this.hazardous = packet.hazardous\n },\n )\n }\n }\n if (this.chooseItem) {\n this.updateItems()\n } else {\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n }\n },\n\n itemNameChanged: function (value) {\n const item = this.itemNames.find((item) => {\n return value === item.value\n })\n if (item) {\n this.selectedItemName = item.value\n this.description = item.description\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n }\n },\n\n indexChanged: function (value) {\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n },\n\n buttonPressed: function () {\n if (this.selectedPacketName === 'ALL') {\n this.allTargetPacketItems()\n } else if (this.selectedItemName === 'ALL') {\n this.allPacketItems()\n } else if (this.chooseItem) {\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n } else {\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n }\n },\n\n allTargetPacketItems: function () {\n this.packetNames.forEach((packetName) => {\n if (packetName === this.ALL) return\n const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'\n this.api[cmd](this.selectedTargetName, packetName.value).then(\n (packet) => {\n packet.items.forEach((item) => {\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: packetName.value,\n itemName: item['name'],\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n })\n },\n )\n })\n },\n\n allPacketItems: function () {\n this.itemNames.forEach((item) => {\n if (item === this.ALL) return\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: item.value,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n })\n },\n },\n}\n</script>\n<style scoped>\n.button {\n padding: 4px;\n}\n.tpic-select {\n max-width: 400px;\n}\n.v-autocomplete .v-select__selections {\n word-break: break-all;\n}\n</style>\n","<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" max-width=\"700\" @keydown.esc=\"$emit('cancel')\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Edit Graph </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-tabs v-model=\"tab\" class=\"ml-3\">\n <v-tab value=\"0\"> Settings </v-tab>\n <v-tab value=\"1\"> Scale / Lines </v-tab>\n <v-tab value=\"2\"> Items </v-tab>\n </v-tabs>\n <v-tabs-window v-model=\"tab\">\n <v-tabs-window-item value=\"0\" eager>\n <div class=\"edit-box\">\n <v-row>\n <v-col>\n <v-card-text class=\"pa-0\">\n <v-text-field\n v-model=\"graph.title\"\n class=\"pb-2\"\n label=\"Title\"\n hide-details\n />\n </v-card-text>\n </v-col>\n <v-col>\n <v-select\n v-model=\"graph.legendPosition\"\n label=\"Legend Position\"\n hide-details\n :items=\"legendPositions\"\n style=\"max-width: 280px\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Select a start date/time for the graph. Leave blank for start now.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"startDate\"\n label=\"Start Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"startTime\"\n label=\"Start Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n <v-card-text class=\"pa-0\">\n Select a end date/time for the graph. Leave blank for continuous\n real-time graphing.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"endDate\"\n label=\"End Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"endTime\"\n label=\"End Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"1\" eager>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Set a min or max Y value to override automatic scaling\n </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMinY\"\n hide-details\n label=\"Min Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMaxY\"\n hide-details\n label=\"Max Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-list density=\"compact\" class=\"horizontal-lines\">\n <v-list-item>\n <span style=\"padding-top: 5px\">\n Add horizontal lines to the graph\n </span>\n <v-spacer />\n <v-btn @click=\"addLine()\"> New Line </v-btn>\n </v-list-item>\n <v-list-item\n v-for=\"(item, i) in graph.lines\"\n :key=\"i\"\n :value=\"item\"\n color=\"primary\"\n >\n <v-row>\n <v-col>\n <v-text-field v-model=\"item.yValue\" label=\"Y Value\" />\n </v-col>\n <v-col>\n <v-select\n v-model=\"item.color\"\n label=\"Color\"\n hide-details\n :items=\"colors\"\n />\n </v-col>\n <v-col>\n <v-btn\n style=\"padding: 30px\"\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Line\"\n @click=\"removeLine(item)\"\n />\n </v-col>\n </v-row>\n </v-list-item>\n </v-list>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0 text-medium-emphasis\">\n Choose a different item to use for the graph's X axis. If\n unchecked, the graph will use the packet's PACKET_TIMESECONDS item\n if it exists, otherwise it will use RECEIVED_TIMESECONDS.\n <br />\n <span class=\"font-italic\">\n Note that the graph may not work correctly if you choose an item\n that does not strictly increase in value. It is recommended to\n use a counter or timestamp.\n </span>\n </v-card-text>\n <v-checkbox\n v-model=\"customXAxisEnabled\"\n :disabled=\"!xAxisItemPacket\"\n label=\"Custom X axis item\"\n density=\"compact\"\n hide-details\n @update:model-value=\"customXAxisToggled\"\n />\n <v-card-text\n v-if=\"!xAxisItemPacket\"\n class=\"pa-0 text-medium-emphasis\"\n >\n All items on the graph must be in the same packet to enable this\n feature.\n </v-card-text>\n <target-packet-item-chooser\n v-if=\"customXAxisEnabled && xAxisItemPacket\"\n :initial-target-name=\"xAxisItemPacket.targetName\"\n :initial-packet-name=\"xAxisItemPacket.packetName\"\n :initial-item-name=\"initialXAxisItem\"\n choose-item\n lock-target\n lock-packet\n button-text=\"Set\"\n @on-set=\"xAxisItemChanged\"\n @add-item=\"xAxisItemSelected\"\n />\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"2\" eager>\n <v-data-table\n item-key=\"itemId\"\n class=\"elevation-1 my-2\"\n data-test=\"edit-graph-items\"\n :headers=\"itemHeaders\"\n :items=\"editItems\"\n :items-per-page=\"5\"\n :footer-props=\"{\n 'items-per-page-options': [5],\n }\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Item\"\n @click=\"$emit('remove', item)\"\n />\n </template>\n <template #no-data>\n <span> Currently no items on this graph </span>\n </template>\n </v-data-table>\n </v-tabs-window-item>\n </v-tabs-window>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"closeOk\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { TimeFilters } from '@/util'\nimport TargetPacketItemChooser from './TargetPacketItemChooser.vue'\nimport { isValid, parse, toDate } from 'date-fns'\nexport default {\n components: {\n TargetPacketItemChooser,\n },\n mixins: [TimeFilters],\n props: {\n modelValue: Boolean, // modelValue is the default prop when using v-model\n title: {\n type: String,\n required: true,\n },\n legendPosition: {\n type: String,\n required: true,\n },\n items: {\n type: Array,\n required: true,\n },\n graphMinY: {\n type: Number,\n },\n graphMaxY: {\n type: Number,\n },\n lines: {\n type: Array,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n startDateTime: {\n type: Number,\n },\n endDateTime: {\n type: Number,\n },\n timeZone: {\n type: String,\n required: true,\n },\n xAxisItemPacket: {\n type: Object,\n default: undefined,\n },\n xAxisItem: {\n type: String,\n default: '__time',\n },\n },\n emits: ['cancel', 'ok', 'remove', 'update:modelValue', 'update:xAxisItem'],\n data: function () {\n return {\n tab: 0,\n graph: {},\n customXAxisEnabled: false,\n selectedXAxisItem: null,\n pendingXAxisSelection: null,\n legendPositions: ['top', 'bottom', 'left', 'right'],\n startDate: null,\n startTime: null,\n endDate: null,\n endTime: null,\n lineHeaders: [\n { title: 'Y Value', value: 'yValue' },\n { title: 'Color', value: 'color' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n itemHeaders: [\n { title: 'Target Name', value: 'targetName' },\n { title: 'Packet Name', value: 'packetName' },\n { title: 'Item Name', value: 'itemName' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n rules: {\n date: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'yyyy-MM-dd', new Date())) ||\n 'Invalid date (YYYY-MM-DD)'\n )\n } catch (e) {\n return 'Invalid date (YYYY-MM-DD)'\n }\n },\n time: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'HH:mm:ss', new Date())) ||\n 'Invalid time (HH:MM:SS)'\n )\n } catch (e) {\n return 'Invalid time (HH:MM:SS)'\n }\n },\n },\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n editItems: function () {\n if (!this.items) return []\n let itemId = 0\n return this.items.map((item) => {\n itemId += 1\n return { ...item, itemId }\n })\n },\n initialXAxisItem: function () {\n // Just for TargetPacketItemChooser\n if (this.xAxisItem === '__time') {\n return\n }\n return this.xAxisItem.split('__').at(4)\n },\n },\n created() {\n this.graph = {\n title: this.title,\n legendPosition: this.legendPosition,\n items: this.items,\n graphMinY: this.graphMinY,\n graphMaxY: this.graphMaxY,\n lines: [...this.lines],\n }\n this.customXAxisEnabled = this.xAxisItem && this.xAxisItem !== '__time'\n this.selectedXAxisItem = this.xAxisItem\n // Set the date and time if they pass a dateTime or set a default\n // Start needs a default because if the timeZone is UTC the time will still be local time\n if (this.startDateTime) {\n // Use the passed dateTime as is\n let date = toDate(this.startDateTime / 1000000)\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n } else {\n // Create a new date 1 hr in the past as a default\n let date = new Date() - 3600000\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n }\n // Only set end date / time if it is explicitly passed\n if (this.endDateTime) {\n let date = toDate(this.endDateTime / 1000000)\n this.endDate = this.formatDate(date, this.timeZone)\n this.endTime = this.formatTimeHMS(date, this.timeZone)\n }\n },\n methods: {\n closeOk() {\n if (!!this.startDate && !!this.startTime) {\n this.graph.startDateTime = this.startDate + ' ' + this.startTime\n } else {\n this.graph.startDateTime = null\n }\n if (!!this.endDate && !!this.endTime) {\n this.graph.endDateTime = this.endDate + ' ' + this.endTime\n } else {\n this.graph.endDateTime = null\n }\n this.$emit('ok', this.graph)\n },\n addLine() {\n this.graph.lines.push({ yValue: 0, color: 'white' })\n },\n removeLine(dline) {\n let i = this.graph.lines.indexOf(dline)\n this.graph.lines.splice(i, 1)\n },\n customXAxisToggled(enabled) {\n if (!enabled) {\n this.selectedXAxisItem = '__time'\n this.$emit('update:xAxisItem', '__time')\n }\n },\n xAxisItemChanged(selection) {\n this.pendingXAxisSelection = selection\n },\n xAxisItemSelected(selection) {\n if (selection.targetName && selection.packetName && selection.itemName) {\n const xAxisItemKey = `DECOM__TLM__${selection.targetName}__${selection.packetName}__${selection.itemName}__CONVERTED`\n this.selectedXAxisItem = xAxisItemKey\n this.$emit('update:xAxisItem', xAxisItemKey)\n }\n },\n },\n}\n</script>\n\n<style>\n.edit-box {\n color: hsla(0, 0%, 100%, 0.7);\n background-color: var(--color-background-surface-default);\n padding: 10px;\n margin-top: 10px;\n}\n\n/* For the Y Axis item editor within the Edit Dialog */\n.v-small-dialog__content {\n background-color: var(--color-background-surface-selected);\n padding: 5px 5px;\n}\n\n.horizontal-lines {\n background-color: var(--color-background-surface-default);\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2023, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" width=\"400\" @keydown.enter=\"success()\">\n <v-card>\n <v-card-title class=\"mb-2\">Edit Item</v-card-title>\n <v-card-text>\n <v-select\n v-model=\"editItem.valueType\"\n variant=\"outlined\"\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n class=\"mb-2\"\n />\n <v-select\n v-model=\"editItem.reduced\"\n variant=\"outlined\"\n hide-details\n label=\"Reduction\"\n :items=\"reduction\"\n class=\"mb-2\"\n />\n <v-select\n v-model=\"editItem.reducedType\"\n variant=\"outlined\"\n hide-details\n label=\"Reduced Type\"\n :items=\"reducedTypes\"\n :disabled=\"editItem.reduced === 'DECOM'\"\n class=\"mb-2\"\n />\n <v-select\n v-model=\"editItem.color\"\n variant=\"outlined\"\n hide-details\n label=\"Color\"\n :items=\"colors\"\n class=\"mb-2\"\n @update:model-value=\"$emit('changeColor', $event)\"\n />\n <div v-if=\"limitsNames.length > 1\">\n <v-select\n v-model=\"limitsName\"\n variant=\"outlined\"\n hide-details\n label=\"Display Limits\"\n :items=\"limitsNames\"\n @update:model-value=\"$emit('changeLimits', limits[limitsName])\"\n />\n <div class=\"pa-3\">{{ limitsName }}: {{ limits[limitsName] }}</div>\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"$emit('close', editItem)\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\nexport default {\n props: {\n modelValue: Boolean,\n item: {\n type: Object,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n },\n emits: [\n 'cancel',\n 'changeColor',\n 'changeLimits',\n 'close',\n 'update:modelValue',\n ],\n data: function () {\n return {\n editItem: null,\n limitsName: 'NONE',\n // NONE: [] matches the default limits assigned in Graph addItems\n limits: { NONE: [] },\n valueTypes: ['CONVERTED', 'RAW'],\n reduction: [\n // Map NONE to DECOM for clarity\n { title: 'NONE', value: 'DECOM' },\n { title: 'REDUCED_MINUTE', value: 'REDUCED_MINUTE' },\n { title: 'REDUCED_HOUR', value: 'REDUCED_HOUR' },\n { title: 'REDUCED_DAY', value: 'REDUCED_DAY' },\n ],\n reducedTypes: ['MIN', 'MAX', 'AVG', 'STDDEV'],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n limitsNames() {\n return Object.keys(this.limits)\n },\n },\n async created() {\n this.editItem = { ...this.item }\n new OpenC3Api()\n .get_item(this.item.targetName, this.item.packetName, this.item.itemName)\n .then((details) => {\n for (const [key, value] of Object.entries(details.limits)) {\n if (Object.keys(value).includes('red_low')) {\n this.limits[key] = Object.values(value)\n }\n }\n // Locate the key for the value array that we pass in\n this.limitsName = Object.keys(this.limits).find(\n // Little hack to compare arrays you convert them to strings\n (key) => this.limits[key] + '' === this.editItem.limits + '',\n )\n })\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n#\n# A portion of this file was funded by Blue Origin Enterprises, L.P.\n# See https://github.com/OpenC3/cosmos/pull/1957\n-->\n\n<template>\n <div @click.prevent=\"$emit('click')\">\n <v-card>\n <v-toolbar\n v-show=\"!hideToolbarData\"\n height=\"24\"\n class=\"pl-2 pr-2\"\n :class=\"selectedGraphId === id ? 'active' : ''\"\n >\n <v-btn\n v-show=\"errors.length !== 0\"\n class=\"mx-2\"\n icon=\"mdi-alert\"\n density=\"compact\"\n variant=\"text\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"edit-graph-icon\"\n aria-label=\"Edit Graph\"\n @click=\"\n () => {\n editGraph = true\n }\n \"\n />\n\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n\n <template v-if=\"expand\">\n <v-btn\n v-if=\"calcFullSize\"\n icon=\"mdi-arrow-collapse\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-all\"\n @click=\"collapseAll\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-all\"\n @click=\"expandAll\"\n />\n\n <v-btn\n v-if=\"fullWidth\"\n icon=\"mdi-arrow-collapse-horizontal\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-width\"\n @click=\"collapseWidth\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand-horizontal\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-width\"\n @click=\"expandWidth\"\n />\n\n <v-btn\n v-if=\"fullHeight\"\n icon=\"mdi-arrow-collapse-vertical\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-height\"\n @click=\"collapseHeight\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand-vertical\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-height\"\n @click=\"expandHeight\"\n />\n </template>\n\n <v-btn\n v-if=\"expand\"\n icon=\"mdi-window-minimize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-else\n icon=\"mdi-window-maximize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n />\n\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-graph-icon\"\n @click.stop=\"$emit('close-graph')\"\n />\n </v-toolbar>\n\n <v-expand-transition>\n <div v-show=\"expand\" id=\"chart\" ref=\"chart\" class=\"pa-1\">\n <div :id=\"`chart${id}`\"></div>\n <div id=\"betweenCharts\"></div>\n <div v-show=\"showOverview\" :id=\"`overview${id}`\"></div>\n </div>\n </v-expand-transition>\n </v-card>\n\n <!-- Edit graph dialog -->\n <graph-edit-dialog\n v-if=\"editGraph\"\n v-model=\"editGraph\"\n v-model:x-axis-item=\"xAxisItem\"\n :title=\"title\"\n :legend-position=\"legendPosition\"\n :items=\"items\"\n :graph-min-y=\"graphMinY\"\n :graph-max-y=\"graphMaxY\"\n :lines=\"lines\"\n :colors=\"colors\"\n :start-date-time=\"graphStartDateTime\"\n :end-date-time=\"graphEndDateTime\"\n :time-zone=\"timeZone\"\n :x-axis-item-packet=\"allowableXAxisItemPacket\"\n @remove=\"removeItems([$event])\"\n @ok=\"editGraphClose\"\n @cancel=\"editGraph = false\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" max-width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n v-model=\"title\"\n readonly\n hide-details\n class=\"pb-2\"\n label=\"Graph Title\"\n />\n </v-row>\n <v-row class=\"my-3\">\n <v-textarea readonly rows=\"8\" :value=\"error\" />\n </v-row>\n <v-row>\n <v-btn block @click=\"clearErrors\"> Clear </v-btn>\n </v-row>\n </v-card>\n </v-dialog>\n\n <!-- Edit right click context menu -->\n <v-menu\n v-if=\"editGraphMenu\"\n v-model=\"editGraphMenu\"\n :target=\"[editGraphMenuX, editGraphMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"editGraph = true\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ title }}\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <graph-edit-item-dialog\n v-if=\"editItem\"\n v-model=\"editItem\"\n :colors=\"colors\"\n :item=\"selectedItem\"\n @change-color=\"changeColor\"\n @change-limits=\"changeLimits\"\n @cancel=\"editItem = false\"\n @close=\"closeEditItem\"\n />\n\n <!-- Edit Item right click context menu -->\n <v-menu\n v-if=\"itemMenu\"\n v-model=\"itemMenu\"\n :target=\"[itemMenuX, itemMenuY]\"\n absolute\n offset-y\n >\n <v-list nav density=\"compact\">\n <v-list-subheader>\n {{ selectedItem.targetName }}\n {{ selectedItem.packetName }}\n {{ selectedItem.itemName }}\n </v-list-subheader>\n <v-list-item @click=\"editItem = true\">\n <template #prepend>\n <v-icon icon=\"mdi-pencil\" />\n </template>\n <v-list-item-title> Edit </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"clearData([selectedItem])\">\n <template #prepend>\n <v-icon icon=\"mdi-eraser\" />\n </template>\n <v-list-item-title> Clear </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"removeItems([selectedItem])\">\n <template #prepend>\n <v-icon icon=\"mdi-delete\" />\n </template>\n <v-list-item-title> Delete </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <!-- Edit Legend right click context menu -->\n <v-menu\n v-if=\"legendMenu\"\n v-model=\"legendMenu\"\n :target=\"[legendMenuX, legendMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"moveLegend('top')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Top\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('bottom')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Bottom\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('left')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Left\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('right')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend RIght\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <div v-if=\"!sparkline\" ref=\"info\" class=\"u-series\">\n <v-tooltip\n text=\"Click item to toggle, Right click to edit\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-icon v-bind=\"props\"> mdi-information-variant-circle </v-icon>\n </template>\n </v-tooltip>\n </div>\n </div>\n</template>\n\n<script>\nimport GraphEditDialog from './GraphEditDialog.vue'\nimport GraphEditItemDialog from './GraphEditItemDialog.vue'\nimport uPlot from 'uplot'\nimport bs from 'binary-search'\nimport { OpenC3Api, Cable } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\nimport 'uplot/dist/uPlot.min.css'\n\nconst DEFAULT_X_AXIS_ITEM = '__time'\n\nexport default {\n components: {\n GraphEditDialog,\n GraphEditItemDialog,\n },\n mixins: [TimeFilters],\n props: {\n id: {\n type: Number,\n required: true,\n },\n selectedGraphId: {\n type: Number,\n default: null,\n },\n state: {\n type: String,\n required: true,\n },\n // start time in nanoseconds to start the graph\n // this allows multiple graphs to be synchronized\n startTime: {\n type: Number,\n default: null,\n },\n secondsGraphed: {\n type: Number,\n required: true,\n },\n pointsSaved: {\n type: Number,\n required: true,\n },\n pointsGraphed: {\n type: Number,\n required: true,\n },\n refreshIntervalMs: {\n type: Number,\n default: 200,\n },\n hideToolbar: {\n type: Boolean,\n default: false,\n },\n hideOverview: {\n type: Boolean,\n default: false,\n },\n sparkline: {\n type: Boolean,\n default: false,\n },\n initialItems: {\n type: Array,\n default: () => [],\n },\n initialXAxisItem: {\n type: String,\n default: DEFAULT_X_AXIS_ITEM,\n },\n // These allow the parent to force a specific height and/or width\n height: {\n type: Number,\n default: null,\n },\n width: {\n type: Number,\n default: null,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n emits: [\n 'click',\n 'close-graph',\n 'edit',\n 'min-max-graph',\n 'pause',\n 'resize',\n 'start',\n 'started',\n ],\n data() {\n return {\n api: null,\n lines: [],\n active: true,\n expand: true,\n fullWidth: true,\n fullHeight: true,\n graph: null,\n editGraph: false,\n editGraphMenu: false,\n editGraphMenuX: 0,\n editGraphMenuY: 0,\n editItem: false,\n itemMenu: false,\n itemMenuX: 0,\n itemMenuY: 0,\n legendMenu: false,\n legendMenuX: 0,\n legendMenuY: 0,\n legendPosition: 'bottom',\n selectedItem: null,\n hideToolbarData: this.hideToolbar,\n showOverview: !this.hideOverview,\n hideOverviewData: this.hideOverview,\n title: '',\n overview: null,\n data: [[]],\n dataChanged: false,\n interval: null,\n graphMinY: null,\n graphMaxY: null,\n graphStartDateTime: null,\n graphEndDateTime: null,\n xAxisItem: this.initialXAxisItem, // '__time' or something like 'DECOM__TLM__INST__ADCS__RECEIVED_COUNT__CONVERTED'\n indexes: {},\n items: this.initialItems,\n graphItems: [],\n lastPlaybackDateTime: null,\n limitsValues: [],\n drawInterval: null,\n zoomChart: false,\n zoomOverview: false,\n cable: new Cable(),\n subscription: null,\n needToUpdate: false,\n errorDialog: false,\n errors: [],\n colorIndex: 0,\n colors: [\n // The first 3 are taken from the Astro css definitions for\n // --color-data-visualization-1 through 3\n '#00c7cb',\n '#938bdb',\n '#4dacff',\n 'lime',\n 'darkorange',\n 'red',\n 'gold',\n 'hotpink',\n 'tan',\n 'cyan',\n 'maroon',\n 'blue',\n 'teal',\n 'purple',\n 'green',\n 'brown',\n 'lightblue',\n 'white',\n 'black',\n ],\n }\n },\n computed: {\n calcFullSize: function () {\n return this.fullWidth || this.fullHeight\n },\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n return JSON.stringify(this.errors, null, 4)\n }\n return null\n },\n itemSubscriptionKeys: function () {\n return this.items.map(this.subscriptionKey)\n },\n allowableXAxisItemPacket: function () {\n if (!this.canUseCustomXAxisItem || this.items.length === 0) {\n return undefined\n }\n const { targetName, packetName } = this.items[0]\n return { targetName, packetName }\n },\n canUseCustomXAxisItem: function () {\n // Make sure we're not mixing packets, because items from different packets will be received at different times.\n // If it was mixed, e.g. `xAxisItem` is 'INST__ADCS__RECEIVED_COUNT' and you were graphing\n // 'INST__HEALTH_STATUS__TEMP1', then the `received` handler wouldn't know which x-axis values to apply to the\n // received TEMP1 data points.\n if (this.items.length === 0) {\n return true\n }\n const { targetName, packetName } = this.items[0]\n return this.items.every(\n (item) =>\n item.targetName === targetName && item.packetName === packetName,\n )\n },\n actualXAxisItem: function () {\n if (this.canUseCustomXAxisItem && this.xAxisItem) {\n return this.xAxisItem\n } else {\n return DEFAULT_X_AXIS_ITEM\n }\n },\n xAxisConverter: function () {\n if (this.xAxisIsDefault) {\n return (val) => val / 1_000_000_000.0 // nsec to sec\n }\n return (val) => val\n },\n xAxisFormatter: function () {\n return (val) => {\n if (val == null) {\n return '--'\n } else if (this.xAxisIsTime) {\n // Convert the unix timestamp into a formatted date / time\n return this.formatSeconds(val, this.timeZone)\n }\n return val\n }\n },\n xAxisLabel: function () {\n return this.xAxisIsTime ? 'Time' : this.actualXAxisItem.split('__').at(-2)\n },\n xAxisIsDefault: function () {\n return this.actualXAxisItem === DEFAULT_X_AXIS_ITEM\n },\n xAxisIsTime: function () {\n const timeItems = ['PACKET_TIMESECONDS', 'RECEIVED_TIMESECONDS']\n return (\n this.xAxisIsDefault ||\n timeItems.includes(this.actualXAxisItem.split('__').at(4))\n )\n },\n xAxisIsAlsoGraphedItem: function () {\n return this.itemSubscriptionKeys.includes(this.actualXAxisItem)\n },\n playbackMode: function () {\n return this.$store.state.playback.playbackMode\n },\n playbackDateTime: function () {\n return this.$store.state.playback.playbackDateTime\n },\n playbackStep: function () {\n return this.$store.state.playback.playbackStep\n },\n },\n watch: {\n state: function (newState, oldState) {\n switch (newState) {\n case 'start':\n // Only subscribe if we were previously stopped\n // If we were paused we do nothing ... see the data function\n if (oldState === 'stop') {\n this.startGraph()\n }\n break\n // case 'pause': Nothing to do ... see the data function\n case 'stop':\n this.stopGraph()\n break\n }\n },\n playbackMode: function (_newState, _oldState) {\n if (this.playbackMode === 'playback') {\n this.setupPlaybackMode()\n } else {\n // realtime\n this.lastPlaybackDateTime = null\n this.clearAllData()\n this.startGraph()\n }\n },\n playbackDateTime: function (_newState, _oldState) {\n if (this.playbackMode === 'playback') {\n if (\n this.lastPlaybackDateTime === null ||\n this.lastPlaybackDateTime > this.playbackDateTime\n ) {\n // If we are going backwards in time we need to clear the data\n this.clearAllData()\n } else {\n this.api\n .get_tlm_values(\n this.graphItems,\n 30, // stale timeout\n null, // no cache timeout\n this.lastPlaybackDateTime, // start time\n this.playbackDateTime, // end time\n )\n .then((data) => {\n if (data.length > 0) {\n if (Array.isArray(data[0]) && Array.isArray(data[0][0])) {\n // data is array of array of arrays\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].length; j++) {\n if (j === 0) {\n let dateStr = data[i][j][0]\n let dateObj = new Date(dateStr)\n this.data[0].push(dateObj.getTime() / 1000.0) // Convert to seconds\n } else {\n this.data[j].push(data[i][j][0])\n }\n }\n }\n } else if (Array.isArray(data) && data.length >= 2) {\n for (let i = 0; i < data.length; i++) {\n if (i === 0) {\n let dateStr = data[i][0]\n let dateObj = new Date(dateStr)\n this.data[0].push(dateObj.getTime() / 1000.0) // Convert to seconds\n } else {\n this.data[i].push(data[i][0])\n }\n }\n }\n }\n this.dataChanged = true\n this.updateGraphData()\n })\n }\n this.lastPlaybackDateTime = this.playbackDateTime\n }\n },\n data: function (newData, oldData) {\n this.dataChanged = true\n },\n graphMinY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMinY = val\n }\n this.setGraphRange()\n },\n graphMaxY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMaxY = val\n }\n this.setGraphRange()\n },\n graphStartDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphStartDateTime =\n this.parseDateTime(this.graphStartDateTime, this.timeZone) * 1000000\n if (this.graphStartDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the start date time we need to update\n this.graphStartDateTime = null\n this.needToUpdate = true\n }\n },\n graphEndDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphEndDateTime =\n this.parseDateTime(this.graphEndDateTime, this.timeZone) * 1000000\n if (this.graphEndDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the end date time we need to update\n this.graphEndDateTime = null\n this.needToUpdate = true\n }\n },\n actualXAxisItem: function (newVal, oldVal) {\n let clonedItems = JSON.parse(JSON.stringify(this.items))\n this.removeItems(clonedItems)\n this.graph.destroy()\n this.chartOpts.series[0].label = this.xAxisLabel\n this.chartOpts.scales.x.time = this.xAxisIsTime\n this.graph = new uPlot(\n this.chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n if (!this.hideOverview) {\n this.overview.destroy()\n this.overviewOpts.scales.x.time = this.xAxisIsTime\n this.overview = new uPlot(\n this.overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`),\n )\n }\n this.addItems(clonedItems)\n // Don't need to $emit('edit') because addItems() does that\n },\n refreshIntervalMs: function (val) {\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = setInterval(() => {\n this.updateGraphData()\n }, val)\n }\n },\n },\n created() {\n this.api = new OpenC3Api()\n this.title = `Graph ${this.id}`\n for (const [index, item] of this.items.entries()) {\n this.data.push([]) // initialize the empty data arrays\n this.indexes[this.subscriptionKey(item)] = index + 1\n if (item.color === undefined) {\n item.color = this.colors[this.colorIndex]\n }\n this.colorIndex++\n if (this.colorIndex === this.colors.length) {\n this.colorIndex = 0\n }\n }\n },\n mounted() {\n // This code allows for temporary pulling in a patched uPlot\n // Also note you need to add 'async' before the mounted method for await\n // const plugin = document.createElement('script')\n // plugin.setAttribute(\n // 'src',\n // 'https://leeoniya.github.io/uPlot/dist/uPlot.iife.min.js'\n // )\n // plugin.async = true\n // document.head.appendChild(plugin)\n // await new Promise(r => setTimeout(r, 500)) // Allow the js to load\n\n // TODO: This is demo / performance code of multiple items with many data points\n // 10 items at 500,000 each renders immediately and uses 180MB in Chrome\n // Refresh still works, chrome is sluggish but once you pause it is very performant\n // 500,000 pts at 1Hz is 138.9hrs .. almost 6 days\n //\n // 10 items at 100,000 each is very performant ... 1,000,000 pts is Qt TlmGrapher default\n // 100,000 pts at 1Hz is 27.8hrs\n //\n // 100,000 takes 40ms, Chrome uses 160MB\n // this.data = []\n // const dataPoints = 100000\n // const items = 10\n // let pts = new Array(dataPoints)\n // let times = new Array(dataPoints)\n // let time = 1589398007\n // let series = [{}]\n // for (let i = 0; i < dataPoints; i++) {\n // times[i] = time\n // pts[i] = i\n // time += 1\n // }\n // this.data.push(times)\n // for (let i = 0; i < items; i++) {\n // this.data.push(pts.map(x => x + i))\n // series.push({\n // label: 'Item' + i,\n // stroke: this.colors[i]\n // })\n // }\n\n // NOTE: These are just initial settings ... actual series are added by this.graph.addSeries\n const { chartSeries, overviewSeries } = this.items.reduce(\n (seriesObj, item) => {\n const commonProps = {\n spanGaps: true,\n }\n seriesObj.chartSeries.push({\n ...commonProps,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => {\n return this.items[seriesIdx - 1].color\n },\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else {\n return rawValue == null ? '--' : rawValue.toFixed(3)\n }\n },\n })\n seriesObj.overviewSeries.push({\n ...commonProps,\n })\n return seriesObj\n },\n { chartSeries: [], overviewSeries: [] },\n )\n\n this.chartOpts = {}\n if (this.sparkline) {\n this.hideToolbarData = true\n this.hideOverviewData = true\n this.showOverview = false\n this.chartOpts = {\n width: this.width,\n height: this.height,\n pxAlign: false,\n cursor: {\n show: false,\n },\n select: {\n show: false,\n },\n legend: {\n show: false,\n },\n scales: {\n x: {\n time: false,\n },\n },\n axes: [\n {\n show: false,\n },\n {\n show: false,\n },\n ],\n series: [\n {},\n {\n stroke: 'white', // TODO: Light / dark theme\n },\n ],\n }\n this.graph = new uPlot(\n this.chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n } else {\n // Uplot wants the real timezone name ('local' doesn't work)\n let timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone\n if (this.timeZone && this.timeZone !== 'local') {\n timeZoneName = this.timeZone\n }\n this.chartOpts = {\n ...this.getSize('chart'),\n ...this.getScales(),\n ...this.getAxes('chart'),\n // series: series, // TODO: Uncomment with the performance code\n plugins: [this.linesPlugin()],\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [\n {\n label: this.xAxisLabel,\n value: (u, v) => this.xAxisFormatter(v),\n },\n ...chartSeries,\n ],\n cursor: {\n drag: {\n x: true,\n y: false,\n },\n // Sync the cursor across graphs so mouseovers are synced\n sync: {\n key: 'openc3',\n // setSeries links graphs so clicking an item to hide it also hides the other graph item\n // setSeries: true,\n },\n bind: {\n mouseup: (self, targ, handler) => {\n return (e) => {\n // Single click while paused will resume the graph\n // This makes it possible to resume in TlmViewer widgets\n if (this.state === 'pause' && self.select.width === 0) {\n this.$emit('start')\n }\n handler(e)\n }\n },\n },\n },\n hooks: {\n setScale: [\n (chart, key) => {\n if (key === 'x' && !this.zoomOverview && this.overview) {\n this.zoomChart = true\n let left = Math.round(\n this.overview.valToPos(chart.scales.x.min, 'x'),\n )\n let right = Math.round(\n this.overview.valToPos(chart.scales.x.max, 'x'),\n )\n this.overview.setSelect({ left, width: right - left })\n this.zoomChart = false\n }\n },\n ],\n setSelect: [\n (chart) => {\n // Pause the graph while selecting a range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n },\n ],\n ready: [\n (u) => {\n let canvas = u.root.querySelector('.u-over')\n canvas.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.itemMenu = false\n this.legendMenu = false\n this.editGraphMenuX = e.clientX\n this.editGraphMenuY = e.clientY\n this.editGraphMenu = true\n })\n let legend = u.root.querySelector('.u-legend')\n legend.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.editGraphMenu = false\n this.legendMenu = false\n this.itemMenuX = e.clientX\n this.itemMenuY = e.clientY\n // Grab the closest series and then figure out which index it is\n let seriesEl = e.target.closest('.u-series')\n let seriesIdx = Array.prototype.slice\n .call(legend.childNodes[0].childNodes)\n .indexOf(seriesEl)\n let series = u.series[seriesIdx]\n if (series.item) {\n this.selectedItem = series.item\n this.itemMenu = true\n } else {\n this.itemMenu = false\n this.legendMenuX = e.clientX\n this.legendMenuY = e.clientY\n this.legendMenu = true\n }\n })\n // Append the info to the legend\n legend.querySelector('tbody').appendChild(this.$refs.info)\n },\n ],\n },\n }\n this.graph = new uPlot(\n this.chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n\n this.overviewOpts = {\n ...this.getSize('overview'),\n ...this.getScales(),\n ...this.getAxes('overview'),\n // series: series, // TODO: Uncomment with the performance code\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [...overviewSeries],\n cursor: {\n y: false,\n drag: {\n setScale: false,\n x: true,\n y: false,\n },\n },\n legend: {\n show: false,\n },\n hooks: {\n setSelect: [\n (chart) => {\n if (!this.zoomChart) {\n // Pause the graph while selecting an overview range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n this.zoomOverview = true\n let min = chart.posToVal(chart.select.left, 'x')\n let max = chart.posToVal(\n chart.select.left + chart.select.width,\n 'x',\n )\n this.graph.setScale('x', { min, max })\n this.zoomOverview = false\n }\n },\n ],\n },\n }\n if (!this.hideOverview) {\n this.overview = new uPlot(\n this.overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`),\n )\n }\n this.moveLegend(this.legendPosition)\n\n // Allow the charts to dynamically resize when the window resizes\n window.addEventListener('resize', this.resize)\n }\n\n if (this.playbackMode !== 'playback') {\n if (this.state !== 'stop') {\n this.startGraph()\n }\n } else {\n this.setupPlaybackMode()\n }\n },\n beforeUnmount: function () {\n this.stopGraph()\n this.cable.disconnect()\n window.removeEventListener('resize', this.resize)\n },\n methods: {\n setupPlaybackMode: function () {\n this.stopGraph()\n this.clearAllData()\n const screenItems = this.itemSubscriptionKeys.map((key) => {\n return key.split('__').slice(2).join('__')\n })\n if (this.actualXAxisItem === DEFAULT_X_AXIS_ITEM) {\n // When in playback we don't have the DEFAULT_X_AXIS_ITEM '__time' available from the stream\n // So parse the first item and add the PACKET_TIMESECONDS from that target / packet\n const tgtpkt = screenItems[0].split('__').slice(0, 2).join('__')\n screenItems.unshift(`${tgtpkt}__PACKET_TIMESECONDS__RAW`)\n } else if (!this.xAxisIsAlsoGraphedItem) {\n // We need to add the x-axis item if it isn't already being graphed\n screenItems.unshift(this.actualXAxisItem)\n }\n this.api.get_tlm_available(screenItems).then((data) => {\n this.graphItems = data\n // This must be the same or we're going to have problems\n // because the data comes back in an ordered array\n if (screenItems.length != data.length) {\n // eslint-disable-next-line no-console\n console.log(\n 'Error getting tlm available',\n screenItems,\n this.graphItems,\n )\n }\n })\n },\n startGraph: function () {\n this.subscribe()\n this.interval = setInterval(() => {\n this.updateGraphData()\n }, this.refreshIntervalMs)\n },\n stopGraph: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n this.subscription = null\n }\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = null\n }\n },\n updateGraphData: function () {\n // Ignore changes to the data while we're paused\n if (this.state === 'pause' || !this.dataChanged) {\n return\n }\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n\n const xAxisData = this.data[0]\n if (xAxisData && xAxisData.length) {\n let max = xAxisData.at(-1)\n const possibleMinValues = [xAxisData.at(0)]\n if (this.pointsGraphed <= xAxisData.length) {\n possibleMinValues.push(xAxisData.at(-this.pointsGraphed))\n }\n if (this.xAxisIsTime) {\n possibleMinValues.push(max - this.secondsGraphed)\n }\n const min = Math.max(...possibleMinValues)\n if (min === max) {\n max += 1\n }\n this.graph.setScale('x', { min, max })\n }\n\n this.dataChanged = false\n },\n formatLabel(item) {\n if (item.valueType === 'CONVERTED' && item.reduced === 'DECOM') {\n return item.itemName\n } else {\n let description = ''\n // Only display valueType if we're not CONVERTED\n if (item.valueType !== 'CONVERTED') {\n description += item.valueType\n }\n // Only display reduced if we're not DECOM\n if (item.reduced !== 'DECOM') {\n // If we already have the valueType add a space\n if (description !== '') {\n description += ' '\n }\n description += `${item.reduced.split('_')[1]} ${item.reducedType}`\n }\n return `${item.itemName} (${description})`\n }\n },\n moveLegend: function (desired) {\n switch (desired) {\n case 'bottom':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.remove('top-legend')\n break\n case 'top':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('top-legend')\n break\n case 'left':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.add('side-legend')\n this.graph.root.classList.add('left-legend')\n break\n case 'right':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('side-legend')\n break\n }\n this.legendPosition = desired\n this.resize()\n },\n clearErrors: function () {\n this.errors = []\n },\n editGraphClose: function (graph) {\n this.editGraph = false\n this.title = graph.title\n // Don't need to copy items because we don't modify them\n this.legendPosition = graph.legendPosition\n this.graphMinY = graph.graphMinY\n this.graphMaxY = graph.graphMaxY\n this.lines = [...graph.lines]\n this.graphStartDateTime = graph.startDateTime\n this.graphEndDateTime = graph.endDateTime\n // Allow the watch to update needToUpdate\n this.$nextTick(() => {\n if (this.needToUpdate) {\n if (this.subscription == null) {\n this.startGraph()\n } else {\n // NOTE: removing and adding back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n // Clone the items first because removeItems modifies this.items\n let clonedItems = JSON.parse(JSON.stringify(this.items))\n this.removeItems(clonedItems)\n setTimeout(() => {\n this.addItems(clonedItems)\n }, 0)\n }\n this.needToUpdate = false\n }\n })\n this.moveLegend(this.legendPosition)\n this.$emit('edit')\n },\n resize: function () {\n this.graph.setSize(this.getSize('chart'))\n if (this.overview) {\n this.overview.setSize(this.getSize('overview'))\n }\n this.$emit('resize', this.id)\n },\n expandAll: function () {\n this.fullWidth = true\n this.fullHeight = true\n this.resize()\n },\n collapseAll: function () {\n this.fullWidth = false\n this.fullHeight = false\n this.resize()\n },\n expandWidth: function () {\n this.fullWidth = true\n this.resize()\n },\n collapseWidth: function () {\n this.fullWidth = false\n this.resize()\n },\n expandHeight: function () {\n this.fullHeight = true\n this.resize()\n },\n collapseHeight: function () {\n this.fullHeight = false\n this.resize()\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-graph', this.id)\n },\n setGraphRange: function () {\n let pad = 0.1\n if (\n this.graphMinY ||\n this.graphMinY === 0 ||\n this.graphMaxY ||\n this.graphMaxY === 0\n ) {\n pad = 0\n }\n this.graph.scales.y.range = (u, dataMin, dataMax) => {\n let min = dataMin\n if (this.graphMinY || this.graphMinY === 0) {\n min = this.graphMinY\n }\n let max = dataMax\n if (this.graphMaxY || this.graphMaxY === 0) {\n max = this.graphMaxY\n }\n return uPlot.rangeNum(min, max, pad, true)\n }\n },\n subscribe: function () {\n this.cable\n .createSubscription('StreamingChannel', window.openc3Scope, {\n received: (data) => this.received(data),\n connected: () => {\n const itemsToAdd = [...this.items]\n if (!this.xAxisIsDefault && !this.xAxisIsAlsoGraphedItem) {\n itemsToAdd.push(this.actualXAxisItem)\n }\n this.addItemsToSubscription(itemsToAdd)\n },\n disconnected: (data) => {\n // If allowReconnect is true it means we got a disconnect due to connection lost or server disconnect\n // If allowReconnect is false this is a normal server close or client close\n if (data.allowReconnect) {\n this.errors.push({\n type: 'disconnected',\n message: 'OpenC3 backend connection disconnected',\n time: new Date().getTime(),\n })\n }\n },\n rejected: () => {\n this.errors.push({\n type: 'rejected',\n message: 'OpenC3 backend connection rejected',\n time: new Date().getTime(),\n })\n },\n })\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n // throttle(cb, limit) {\n // let wait = false\n // return () => {\n // if (!wait) {\n // requestAnimationFrame(cb)\n // wait = true\n // setTimeout(() => {\n // wait = false\n // }, limit)\n // }\n // }\n // },\n getSize: function (type) {\n let navDrawerWidth = 0\n const navDrawer = document.getElementById('openc3-nav-drawer')\n if (navDrawer) {\n navDrawerWidth = navDrawer.classList.contains(\n 'v-navigation-drawer--active',\n )\n ? navDrawer.clientWidth\n : 0\n }\n let legendWidth = 0\n if (this.legendPosition === 'right' || this.legendPosition === 'left') {\n const legend = document.getElementsByClassName('u-legend')[0]\n legendWidth = legend.clientWidth\n }\n const viewWidth =\n Math.max(document.documentElement.clientWidth, window.innerWidth || 0) -\n navDrawerWidth -\n legendWidth\n const viewHeight = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0,\n )\n\n const panel = document.getElementsByClassName('v-expansion-panel')[0]\n let height = 100\n if (type === 'overview') {\n // Show overview if we're full height and we're not explicitly hiding it\n if (this.fullHeight && !this.hideOverviewData) {\n this.showOverview = true\n } else {\n this.showOverview = false\n }\n } else {\n // Height of chart is viewportSize - expansion-panel - overview - fudge factor (primarily padding)\n height = viewHeight - panel.clientHeight - height - 250\n if (!this.fullHeight) {\n height = height / 2.0 + 10 // 5px padding top and bottom\n }\n }\n // subtract off some arbitrary padding left and right to make the layout work\n let width = viewWidth - 70\n if (!this.fullWidth) {\n // 6px padding left and right defined in TlmGrapher.vue .item-content\n width = width / 2.0 - 12\n }\n return {\n width: this.width || width,\n height: this.height || height,\n }\n },\n getScales: function () {\n return {\n scales: {\n x: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) {\n if (this.xAxisIsTime) {\n return [1566453600, 1566497660]\n }\n return [0, 1]\n }\n return [dataMin, dataMax]\n },\n time: this.xAxisIsTime,\n },\n y: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [-100, 100]\n return uPlot.rangeNum(dataMin, dataMax, 0.1, true)\n },\n },\n },\n }\n },\n getAxes: function (type) {\n let strokeColor = 'rgba(255, 255, 255, .1)'\n let axisColor = 'white'\n return {\n axes: [\n {\n stroke: axisColor,\n grid: {\n show: true,\n stroke: strokeColor,\n width: 2,\n },\n },\n {\n size: 80, // This size supports values up to 8 digits plus sign\n stroke: axisColor,\n grid: {\n show: type === 'overview' ? false : true,\n stroke: strokeColor,\n width: 2,\n },\n // Forces the axis values to be formatted correctly\n // especially with really small or large values\n values(u, splits) {\n if (\n splits.some((el) => el >= 10000000) ||\n splits.every((el) => el < 0.01)\n ) {\n splits = splits.map((split) => split.toExponential(3))\n }\n return splits\n },\n },\n ],\n }\n },\n closeEditItem: function (event) {\n this.editItem = false\n if (\n // If we have an end time and anything was changed we basically regraph\n (this.graphEndDateTime !== null && this.selectedItem !== event) ||\n // If we're live graphing we just regraph if the types change\n this.selectedItem.valueType !== event.valueType ||\n this.selectedItem.reduced !== event.reduced ||\n this.selectedItem.reducedType !== event.reducedType\n ) {\n this.changeItem(event)\n }\n },\n changeColor: function (event) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].color = event\n this.selectedItem.color = event\n this.graph.root.querySelectorAll('.u-marker')[index].style.borderColor =\n event\n },\n changeLimits: function (limits) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].limits = limits\n this.selectedItem.limits = limits\n this.limitsValues = limits\n },\n linesPlugin: function () {\n return {\n hooks: {\n draw: (u) => {\n const { ctx, bbox } = u\n // These are all in canvas units\n const yMin = u.valToPos(u.scales.y.min, 'y', true)\n const yMax = u.valToPos(u.scales.y.max, 'y', true)\n const redLow = u.valToPos(this.limitsValues[0], 'y', true)\n const yellowLow = u.valToPos(this.limitsValues[1], 'y', true)\n const yellowHigh = u.valToPos(this.limitsValues[2], 'y', true)\n const redHigh = u.valToPos(this.limitsValues[3], 'y', true)\n\n // NOTE: These comparisons are tricky because the canvas\n // starts in the upper left with 0,0. Thus it grows downward\n // and to the right with increasing values. The comparisons\n // of scale and limitsValues use graph coordinates but the\n // fillRect calculations use the canvas coordinates.\n\n // Draw Y axis lines\n this.lines.forEach((line) => {\n if (\n u.scales.y.min <= line.yValue &&\n line.yValue <= u.scales.y.max\n ) {\n ctx.save()\n ctx.beginPath()\n ctx.strokeStyle = line.color\n ctx.lineWidth = 2\n ctx.moveTo(bbox.left, u.valToPos(line.yValue, 'y', true))\n ctx.lineTo(\n bbox.left + bbox.width,\n u.valToPos(line.yValue, 'y', true),\n )\n ctx.stroke()\n ctx.restore()\n }\n })\n\n ctx.save()\n ctx.beginPath()\n\n // Draw red limits\n ctx.fillStyle = 'rgba(255,0,0,0.15)'\n if (u.scales.y.min < this.limitsValues[0]) {\n let start = redLow < yMax ? yMax : redLow\n ctx.fillRect(bbox.left, redLow, bbox.width, yMin - start)\n }\n if (u.scales.y.max > this.limitsValues[3]) {\n let end = yMin < redHigh ? yMin : redHigh\n ctx.fillRect(bbox.left, yMax, bbox.width, end - yMax)\n }\n\n // Draw yellow limits\n ctx.fillStyle = 'rgba(255,255,0,0.15)'\n if (\n u.scales.y.min < this.limitsValues[1] && // yellowLow\n u.scales.y.max > this.limitsValues[0] // redLow\n ) {\n let start = yellowLow < yMax ? yMax : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, redLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[2] && // yellowHigh\n u.scales.y.min < this.limitsValues[3] // redHigh\n ) {\n let start = yMin < redHigh ? yMin : redHigh\n let end = yMin < yellowHigh ? yMin : yellowHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n\n // Draw green limits & operational limits\n ctx.fillStyle = 'rgba(0,255,0,0.15)'\n // If there are no operational limits the interior is all green\n if (this.limitsValues.length === 4) {\n // Determine if we show any green\n if (\n u.scales.y.min < this.limitsValues[2] && // yellowHigh\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = yellowHigh < yMax ? yMax : yellowHigh\n let end = yMin < yellowLow ? yMin : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n } else {\n // Operational limits\n const greenLow = u.valToPos(this.limitsValues[4], 'y', true)\n const greenHigh = u.valToPos(this.limitsValues[5], 'y', true)\n if (\n u.scales.y.min < this.limitsValues[4] && // greenLow\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = greenLow < yMax ? yMax : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, yellowLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[5] && // greenHigh\n u.scales.y.min < this.limitsValues[2] // yellowHigh\n ) {\n let start = yMin < yellowHigh ? yMin : yellowHigh\n let end = yMin < greenHigh ? yMin : greenHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.fillStyle = 'rgba(0,0,255,0.15)'\n let start = greenHigh < yMax ? yMax : greenHigh\n let end = yMin < greenLow ? yMin : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.stroke()\n ctx.restore()\n },\n },\n }\n },\n changeItem: function (event) {\n // NOTE: removing and adding items back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n this.removeItems([this.selectedItem])\n this.selectedItem.valueType = event.valueType\n this.selectedItem.reduced = event.reduced\n this.selectedItem.reducedType = event.reducedType\n setTimeout(() => {\n this.addItems([this.selectedItem])\n }, 0)\n },\n addItems: function (itemArray, type = 'CONVERTED') {\n itemArray.forEach((item) => {\n item.valueType ||= type // set the default type\n item.color ||= this.colors[this.colorIndex]\n item.limits ||= []\n\n if (item.limits.length > 0) {\n this.limitsValues = item.limits\n }\n\n this.colorIndex = (this.colorIndex + 1) % this.colors.length\n this.items.push(item)\n\n const index = this.data.length\n this.graph.addSeries(this.createSeriesConfig(item), index)\n\n if (this.overview) {\n this.overview.addSeries(this.createOverviewSeriesConfig(), index)\n }\n\n this.data.splice(index, 0, Array(this.data[0].length))\n this.indexes[this.subscriptionKey(item)] = index\n })\n\n this.updateColorIndex(itemArray)\n if (!this.xAxisIsDefault) {\n itemArray.push(this.actualXAxisItem)\n }\n this.addItemsToSubscription(itemArray)\n this.$emit('resize')\n this.$emit('edit')\n },\n createSeriesConfig: function (item) {\n return {\n spanGaps: true,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else if (rawValue == null) {\n return '--'\n } else if (\n (Math.abs(rawValue) < 0.01 && rawValue !== 0) ||\n Math.abs(rawValue) >= 10000000\n ) {\n return rawValue.toExponential(6)\n } else {\n return rawValue.toFixed(6)\n }\n },\n }\n },\n createOverviewSeriesConfig: function () {\n return {\n spanGaps: true,\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n }\n },\n updateColorIndex: function (itemArray) {\n const lastItem = itemArray[itemArray.length - 1]\n if (lastItem) {\n const index = this.colors.indexOf(lastItem.color)\n if (index !== -1) {\n this.colorIndex = (index + 1) % this.colors.length\n }\n }\n },\n addItemsToSubscription: function (itemArray = this.items) {\n let theStartTime = this.startTime\n if (this.graphStartDateTime) {\n theStartTime = this.graphStartDateTime\n }\n const items = itemArray.map((item) => {\n if (typeof item === 'object') {\n return this.subscriptionKey(item)\n } else if (typeof item === 'string') {\n return item\n } else {\n throw new Error(\n `Invalid subscription item type for ${item}: ${typeof item}`,\n )\n }\n })\n if (this.subscription) {\n OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(\n (refreshed) => {\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n this.subscription.perform('add', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: items,\n start_time: theStartTime,\n end_time: this.graphEndDateTime,\n })\n },\n )\n }\n },\n clearAllData: function () {\n // Clear all data so delete the time data as well\n this.data[0] = []\n this.clearData(this.items)\n },\n clearData: function (itemArray) {\n for (const key of itemArray.map(this.subscriptionKey)) {\n let index = this.indexes[key]\n this.data[index] = Array(this.data[0].length).fill(null)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n // data.length of 2 means we only have 1 item\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 2) {\n this.data[0] = []\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n },\n removeItems: function (itemArray) {\n this.removeItemsFromSubscription(itemArray)\n\n for (const key of itemArray.map(this.subscriptionKey)) {\n const index = this.reorderIndexes(key)\n this.items.splice(index - 1, 1)\n this.data.splice(index, 1)\n this.graph.delSeries(index)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.delSeries(index)\n this.overview.setData(this.data)\n }\n }\n // data.length of 1 means we've deleted all our items\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 1) {\n this.data[0] = []\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n this.$emit('resize')\n this.$emit('edit')\n },\n removeItemsFromSubscription: function (itemArray = this.items) {\n if (this.subscription) {\n const items = itemArray.map((item) => {\n if (typeof item === 'object') {\n return this.subscriptionKey(item)\n } else if (typeof item === 'string') {\n return item\n } else {\n throw new Error(\n `Invalid subscription item type for ${item}: ${typeof item}`,\n )\n }\n })\n this.subscription.perform('remove', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: items,\n })\n }\n },\n reorderIndexes: function (key) {\n let index = this.indexes[key]\n delete this.indexes[key]\n for (let i in this.indexes) {\n if (this.indexes[i] > index) {\n this.indexes[i] -= 1\n }\n }\n return index\n },\n received: function (data) {\n this.cable.recordPing()\n // TODO: Shouldn't get errors but should we handle this every time?\n // if (json_data.error) {\n // console.log(json_data.error)\n // return\n // }\n for (let i = 0; i < data.length; i++) {\n if (!data[i].hasOwnProperty(this.actualXAxisItem)) {\n // This happens if the streaming thread was already sending something when we switched xAxisItems.\n // Nothing we can do but throw away the point. It'll come back when the graph is reset anyway.\n continue\n }\n let xAxisVal = this.xAxisConverter(data[i][this.actualXAxisItem])\n let length = this.data[0].length\n if (length === 0 || xAxisVal > this.data[0][length - 1]) {\n // Nominal case - append new data to end\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].push(null)\n }\n this.setDataAtIndex(this.data[0].length - 1, xAxisVal, data[i])\n } else {\n let index = bs(this.data[0], xAxisVal, this.bsComparator)\n if (index >= 0) {\n // Found a slot with the exact same time value\n // Handle duplicate time by subtracting a small amount until we find an open slot\n if (!Number.isFinite(xAxisVal)) {\n // Make sure this exists so that we don't create an infinite loop\n // (Infinity or NaN -= 1e-5 results in Infinity or NaN)\n throw new RangeError(`Invalid x-axis value: ${xAxisVal}`)\n }\n while (index >= 0) {\n xAxisVal -= 1e-5 // Subtract a small amount (10 microseconds if x-axis is time in seconds)\n index = bs(this.data[0], xAxisVal, this.bsComparator)\n }\n // Now that we have a unique time, insert at the ideal index\n const idealIndex = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(idealIndex, 0, null)\n }\n // Use the adjusted time but keep the original data\n this.setDataAtIndex(idealIndex, xAxisVal, data[i])\n } else {\n // Insert a new null slot at the ideal index\n const idealIndex = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(idealIndex, 0, null)\n }\n this.setDataAtIndex(idealIndex, xAxisVal, data[i])\n }\n }\n }\n // If we weren't passed a startTime notify grapher of our start\n if (this.startTime == null && this.data[0][0]) {\n let newStartTime = this.data[0][0] * 1_000_000_000\n this.$emit('started', newStartTime)\n }\n this.dataChanged = true\n },\n bsComparator: function (element, needle) {\n return element - needle\n },\n setDataAtIndex: function (index, xAxisVal, newData) {\n this.data[0][index] = xAxisVal\n for (const [key, value] of Object.entries(newData)) {\n if (key === this.actualXAxisItem && !this.xAxisIsAlsoGraphedItem) {\n continue\n }\n const keyIndex = this.indexes[key]\n if (keyIndex) {\n let array = this.data[keyIndex]\n // NaN and Infinite values are sent as objects with raw attribute set\n // to 'NaN', '-Infinity', or 'Infinity', just set data to null\n if (value?.raw) {\n array[index] = null\n } else if (typeof value === 'string') {\n // Can't graph strings so just set to null\n array[index] = null\n // If it's not already RAW, change the type to RAW\n // NOTE: Some items are RAW strings so they won't ever work\n if (!key.includes('__RAW')) {\n for (let item of this.items) {\n if (this.subscriptionKey(item) === key) {\n this.selectedItem = item\n break\n }\n }\n this.changeItem({\n valueType: 'RAW',\n reduced: this.selectedItem.reduced,\n reducedType: this.selectedItem.reducedType,\n })\n }\n } else {\n array[index] = value\n }\n }\n }\n },\n subscriptionKey: function (item) {\n let key = `${item.reduced}__TLM__${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`\n if (\n item.reduced === 'REDUCED_MINUTE' ||\n item.reduced === 'REDUCED_HOUR' ||\n item.reduced === 'REDUCED_DAY'\n ) {\n key += `__${item.reducedType}`\n }\n return key\n },\n },\n}\n</script>\n\n<style>\n.v-window-item {\n background-color: var(--color-background-surface-default);\n}\n\n/* left right stacked legend */\n.uplot.side-legend {\n display: flex;\n width: auto;\n}\n\n.uplot.side-legend .u-wrap {\n flex: none;\n}\n\n.uplot.side-legend .u-legend {\n text-align: left;\n margin-left: 0;\n width: 220px;\n}\n\n.uplot.side-legend .u-legend,\n.uplot.side-legend .u-legend tr,\n.uplot.side-legend .u-legend th,\n.uplot.side-legend .u-legend td {\n display: revert;\n}\n\n/* left side we need to order the legend before the plot */\n.uplot.left-legend .u-legend {\n order: -1;\n}\n\n/* top legend */\n.uplot.top-legend {\n display: flex;\n flex-direction: column;\n}\n\n.uplot.top-legend .u-legend {\n order: -1;\n}\n\n/* This value is large enough to support negative scientific notation\n that we use on the value with rawValue.toExponential(6) */\n.u-legend.u-inline .u-series .u-value {\n width: 105px;\n}\n\n/* This value is large enough to support our date format: YYYY-MM-DD HH:MM:SS.sss */\n.u-legend.u-inline .u-series:first-child .u-value {\n width: 185px;\n}\n\n.u-select {\n background-color: rgba(255, 255, 255, 0.07);\n}\n</style>\n<style scoped>\n.active {\n background-color: var(--color-background-surface-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","propValue","_a","_b","_c","item","indexes","val","newVal","oldVal","OpenC3Api","result","target","cmd","names","name","packet","items","label","a","b","value","packetName","_hoisted_1","_openBlock","_createElementBlock","_createVNode","_component_v_row","$props","_component_v_col","$options","_component_v_autocomplete","$data","$event","_component_v_list_item","_component_v_divider","_createBlock","_cache","_component_v_combobox","_component_v_btn","_toDisplayString","_Fragment","TargetPacketItemChooser","TimeFilters","isValid","parse","itemId","date","toDate","dline","i","enabled","selection","xAxisItemKey","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_component_v_dialog","_ctx","_component_v_toolbar","_component_v_spacer","_createElementVNode","_component_v_card","_component_v_tabs","_component_v_tab","_component_v_tabs_window","_component_v_tabs_window_item","_component_v_card_text","_component_v_text_field","_component_v_select","_component_v_list","_component_v_checkbox","_component_target_packet_item_chooser","_component_v_data_table","_withCtx","_component_v_card_actions","details","key","_component_v_card_title","DEFAULT_X_AXIS_ITEM","GraphEditDialog","GraphEditItemDialog","Cable","targetName","timeItems","newState","oldState","_newState","_oldState","data","j","dateStr","dateObj","newData","oldData","clonedItems","uPlot","index","chartSeries","overviewSeries","seriesObj","commonProps","u","seriesIdx","self","rawValue","timeZoneName","ts","v","targ","handler","e","chart","left","right","legend","seriesEl","series","min","max","screenItems","tgtpkt","xAxisData","possibleMinValues","description","desired","graph","pad","dataMin","dataMax","itemsToAdd","subscription","type","navDrawerWidth","navDrawer","legendWidth","viewWidth","viewHeight","panel","height","width","strokeColor","axisColor","splits","el","split","event","limits","ctx","bbox","yMin","yMax","redLow","yellowLow","yellowHigh","redHigh","line","start","end","greenLow","greenHigh","itemArray","lastItem","theStartTime","refreshed","xAxisVal","length","bs","idealIndex","newStartTime","element","needle","keyIndex","array","_normalizeClass","_vShow","_component_v_expand_transition","_withDirectives","_component_graph_edit_dialog","_component_v_textarea","_component_v_menu","_component_v_list_item_title","_createTextVNode","_component_graph_edit_item_dialog","_component_v_list_subheader","_component_v_icon","_component_v_tooltip","props"],"mappings":"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"}