@openc3/vue-common 6.10.3 → 6.10.5

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 (433) hide show
  1. package/dist/{ArrayWidget-Bc-Awsbn.js → ArrayWidget-CB1594s3.js} +4 -4
  2. package/dist/{ArrayWidget-Bc-Awsbn.js.map → ArrayWidget-CB1594s3.js.map} +1 -1
  3. package/dist/{ArrayWidget-B35vCzAo.cjs → ArrayWidget-CKVa2jS0.cjs} +2 -2
  4. package/dist/{ArrayWidget-B35vCzAo.cjs.map → ArrayWidget-CKVa2jS0.cjs.map} +1 -1
  5. package/dist/{ArrayplotWidget-B67ip6aR.cjs → ArrayplotWidget-BTIkHdc1.cjs} +2 -2
  6. package/dist/{ArrayplotWidget-B67ip6aR.cjs.map → ArrayplotWidget-BTIkHdc1.cjs.map} +1 -1
  7. package/dist/{ArrayplotWidget-B9UGCr4-.js → ArrayplotWidget-BfauFgCc.js} +3 -3
  8. package/dist/{ArrayplotWidget-B9UGCr4-.js.map → ArrayplotWidget-BfauFgCc.js.map} +1 -1
  9. package/dist/{BarColumn-3fKM-em2.cjs → BarColumn-3M4oLg_y.cjs} +2 -2
  10. package/dist/{BarColumn-3fKM-em2.cjs.map → BarColumn-3M4oLg_y.cjs.map} +1 -1
  11. package/dist/{BarColumn-ClLBRGll.js → BarColumn-BN5j9sPr.js} +3 -3
  12. package/dist/{BarColumn-ClLBRGll.js.map → BarColumn-BN5j9sPr.js.map} +1 -1
  13. package/dist/{BlockWidget-CoQp-LZM.js → BlockWidget-C9__-7CU.js} +4 -4
  14. package/dist/{BlockWidget-CoQp-LZM.js.map → BlockWidget-C9__-7CU.js.map} +1 -1
  15. package/dist/{BlockWidget-DWexy9Dx.cjs → BlockWidget-Ur9wX3Gb.cjs} +2 -2
  16. package/dist/{BlockWidget-DWexy9Dx.cjs.map → BlockWidget-Ur9wX3Gb.cjs.map} +1 -1
  17. package/dist/{ButtonWidget-BBpVoIzj.cjs → ButtonWidget-Cn74AwrM.cjs} +3 -3
  18. package/dist/{ButtonWidget-BBpVoIzj.cjs.map → ButtonWidget-Cn74AwrM.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-CTTwpFec.js → ButtonWidget-CyixmRMa.js} +6 -6
  20. package/dist/{ButtonWidget-CTTwpFec.js.map → ButtonWidget-CyixmRMa.js.map} +1 -1
  21. package/dist/{CanvasWidget-Qlx-Mo8v.cjs → CanvasWidget-B8iqIUJ_.cjs} +2 -2
  22. package/dist/{CanvasWidget-Qlx-Mo8v.cjs.map → CanvasWidget-B8iqIUJ_.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-jFarbJ3t.js → CanvasWidget-BlM9VhEb.js} +2 -2
  24. package/dist/{CanvasWidget-jFarbJ3t.js.map → CanvasWidget-BlM9VhEb.js.map} +1 -1
  25. package/dist/{CanvasdotWidget-BROyk4FH.cjs → CanvasdotWidget-CAXR5Ugc.cjs} +2 -2
  26. package/dist/{CanvasdotWidget-BROyk4FH.cjs.map → CanvasdotWidget-CAXR5Ugc.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-BoyUcwiB.js → CanvasdotWidget-DcoLJfNd.js} +2 -2
  28. package/dist/{CanvasdotWidget-BoyUcwiB.js.map → CanvasdotWidget-DcoLJfNd.js.map} +1 -1
  29. package/dist/{CanvasimageWidget-DmyCSnuQ.js → CanvasimageWidget-BOa0--hu.js} +3 -3
  30. package/dist/{CanvasimageWidget-DmyCSnuQ.js.map → CanvasimageWidget-BOa0--hu.js.map} +1 -1
  31. package/dist/{CanvasimageWidget-BvTJnGXu.cjs → CanvasimageWidget-DQW5IGWY.cjs} +2 -2
  32. package/dist/{CanvasimageWidget-BvTJnGXu.cjs.map → CanvasimageWidget-DQW5IGWY.cjs.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-CzVrDo-Z.cjs → CanvasimagevalueWidget-C8PAOXth.cjs} +2 -2
  34. package/dist/{CanvasimagevalueWidget-CzVrDo-Z.cjs.map → CanvasimagevalueWidget-C8PAOXth.cjs.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-CmbngMqv.js → CanvasimagevalueWidget-CAnfTNIH.js} +3 -3
  36. package/dist/{CanvasimagevalueWidget-CmbngMqv.js.map → CanvasimagevalueWidget-CAnfTNIH.js.map} +1 -1
  37. package/dist/{CanvaslabelWidget-BnvwV9MA.cjs → CanvaslabelWidget-B_qS8Spc.cjs} +2 -2
  38. package/dist/{CanvaslabelWidget-BnvwV9MA.cjs.map → CanvaslabelWidget-B_qS8Spc.cjs.map} +1 -1
  39. package/dist/{CanvaslabelWidget-D8NzLKqi.js → CanvaslabelWidget-VhSU0ghh.js} +2 -2
  40. package/dist/{CanvaslabelWidget-D8NzLKqi.js.map → CanvaslabelWidget-VhSU0ghh.js.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-DVnkclHD.cjs → CanvaslabelvalueWidget-BSEbDdBo.cjs} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-DVnkclHD.cjs.map → CanvaslabelvalueWidget-BSEbDdBo.cjs.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-DOybGI9D.js → CanvaslabelvalueWidget-DLoJuMEa.js} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-DOybGI9D.js.map → CanvaslabelvalueWidget-DLoJuMEa.js.map} +1 -1
  45. package/dist/{CanvaslineWidget-D2NEei7j.js → CanvaslineWidget-COWhdPmg.js} +2 -2
  46. package/dist/{CanvaslineWidget-D2NEei7j.js.map → CanvaslineWidget-COWhdPmg.js.map} +1 -1
  47. package/dist/{CanvaslineWidget-DgbXSH1K.cjs → CanvaslineWidget-evoYrcu3.cjs} +2 -2
  48. package/dist/{CanvaslineWidget-DgbXSH1K.cjs.map → CanvaslineWidget-evoYrcu3.cjs.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-Ctvv9owf.js → CanvaslinevalueWidget-B2RUoEiO.js} +2 -2
  50. package/dist/{CanvaslinevalueWidget-Ctvv9owf.js.map → CanvaslinevalueWidget-B2RUoEiO.js.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-E3NDHyPl.cjs → CanvaslinevalueWidget-RhSLERSp.cjs} +2 -2
  52. package/dist/{CanvaslinevalueWidget-E3NDHyPl.cjs.map → CanvaslinevalueWidget-RhSLERSp.cjs.map} +1 -1
  53. package/dist/{CheckbuttonWidget-BdvWAgg_.cjs → CheckbuttonWidget-D2KHchsA.cjs} +2 -2
  54. package/dist/{CheckbuttonWidget-BdvWAgg_.cjs.map → CheckbuttonWidget-D2KHchsA.cjs.map} +1 -1
  55. package/dist/{CheckbuttonWidget-CQeR0BMF.js → CheckbuttonWidget-mMOQENwY.js} +2 -2
  56. package/dist/{CheckbuttonWidget-CQeR0BMF.js.map → CheckbuttonWidget-mMOQENwY.js.map} +1 -1
  57. package/dist/{ClassificationBanners-0BNhyyMS.cjs → ClassificationBanners-CKzacoSH.cjs} +2 -2
  58. package/dist/{ClassificationBanners-0BNhyyMS.cjs.map → ClassificationBanners-CKzacoSH.cjs.map} +1 -1
  59. package/dist/{ClassificationBanners-STI2n2yD.js → ClassificationBanners-CnKda5CL.js} +2 -2
  60. package/dist/{ClassificationBanners-STI2n2yD.js.map → ClassificationBanners-CnKda5CL.js.map} +1 -1
  61. package/dist/{ComboboxWidget-4N-MagvN.js → ComboboxWidget-BGuSLu81.js} +2 -2
  62. package/dist/{ComboboxWidget-4N-MagvN.js.map → ComboboxWidget-BGuSLu81.js.map} +1 -1
  63. package/dist/{ComboboxWidget-Dh0q9xpJ.cjs → ComboboxWidget-CuO75LNL.cjs} +2 -2
  64. package/dist/{ComboboxWidget-Dh0q9xpJ.cjs.map → ComboboxWidget-CuO75LNL.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-Dy1cQZxQ.cjs → CriticalCmdDialog-CW49WCHL.cjs} +2 -2
  66. package/dist/{CriticalCmdDialog-Dy1cQZxQ.cjs.map → CriticalCmdDialog-CW49WCHL.cjs.map} +1 -1
  67. package/dist/{CriticalCmdDialog-trVtKZft.js → CriticalCmdDialog-DqmsE7es.js} +6 -6
  68. package/dist/{CriticalCmdDialog-trVtKZft.js.map → CriticalCmdDialog-DqmsE7es.js.map} +1 -1
  69. package/dist/{DateWidget-DXN7u3vL.cjs → DateWidget-CC63S2BH.cjs} +2 -2
  70. package/dist/{DateWidget-DXN7u3vL.cjs.map → DateWidget-CC63S2BH.cjs.map} +1 -1
  71. package/dist/{DateWidget-rYTjwUdb.js → DateWidget-DYTNL9Nt.js} +2 -2
  72. package/dist/{DateWidget-rYTjwUdb.js.map → DateWidget-DYTNL9Nt.js.map} +1 -1
  73. package/dist/{DetailsDialog-p_vutijL.js → DetailsDialog-Bnj0flUv.js} +9 -9
  74. package/dist/{DetailsDialog-p_vutijL.js.map → DetailsDialog-Bnj0flUv.js.map} +1 -1
  75. package/dist/{DetailsDialog-CLCCuoHV.cjs → DetailsDialog-DW8hRSS6.cjs} +2 -2
  76. package/dist/{DetailsDialog-CLCCuoHV.cjs.map → DetailsDialog-DW8hRSS6.cjs.map} +1 -1
  77. package/dist/{EventListDialog-BshKrOuQ.js → EventListDialog-BV9m-oEq.js} +221 -229
  78. package/dist/EventListDialog-BV9m-oEq.js.map +1 -0
  79. package/dist/EventListDialog-CXiEoYXY.cjs +2 -0
  80. package/dist/EventListDialog-CXiEoYXY.cjs.map +1 -0
  81. package/dist/{FilechecksumWidget-Ddlm1UED.cjs → FilechecksumWidget-CCD4OHUJ.cjs} +2 -2
  82. package/dist/{FilechecksumWidget-Ddlm1UED.cjs.map → FilechecksumWidget-CCD4OHUJ.cjs.map} +1 -1
  83. package/dist/{FilechecksumWidget-gcmXxJHl.js → FilechecksumWidget-Cxu-88vM.js} +3 -3
  84. package/dist/{FilechecksumWidget-gcmXxJHl.js.map → FilechecksumWidget-Cxu-88vM.js.map} +1 -1
  85. package/dist/{FiledisplayWidget-CYX4HChi.cjs → FiledisplayWidget-BNCoMpUN.cjs} +2 -2
  86. package/dist/{FiledisplayWidget-CYX4HChi.cjs.map → FiledisplayWidget-BNCoMpUN.cjs.map} +1 -1
  87. package/dist/{FiledisplayWidget-CqM549A4.js → FiledisplayWidget-UimFPng3.js} +8 -8
  88. package/dist/{FiledisplayWidget-CqM549A4.js.map → FiledisplayWidget-UimFPng3.js.map} +1 -1
  89. package/dist/{FormatvalueWidget-BEwH0C7S.js → FormatvalueWidget-Ct3waryv.js} +13 -11
  90. package/dist/{FormatvalueWidget-BEwH0C7S.js.map → FormatvalueWidget-Ct3waryv.js.map} +1 -1
  91. package/dist/FormatvalueWidget-kOhazTdt.cjs +2 -0
  92. package/dist/{FormatvalueWidget-CpsyYKXD.cjs.map → FormatvalueWidget-kOhazTdt.cjs.map} +1 -1
  93. package/dist/Graph-BT7YHaLU.cjs +2 -0
  94. package/dist/{Graph-kmTrth08.cjs.map → Graph-BT7YHaLU.cjs.map} +1 -1
  95. package/dist/{Graph-CbjlChwf.js → Graph-Dy2y26su.js} +139 -143
  96. package/dist/{Graph-CbjlChwf.js.map → Graph-Dy2y26su.js.map} +1 -1
  97. package/dist/{GraphWidget-SamHg2AA.cjs → GraphWidget-BuLKrARk.cjs} +2 -2
  98. package/dist/{GraphWidget-SamHg2AA.cjs.map → GraphWidget-BuLKrARk.cjs.map} +1 -1
  99. package/dist/{GraphWidget-CjxnC0Dc.js → GraphWidget-CuG4jeoM.js} +2 -2
  100. package/dist/{GraphWidget-CjxnC0Dc.js.map → GraphWidget-CuG4jeoM.js.map} +1 -1
  101. package/dist/{HorizontalWidget-Dt8bkM3k.js → HorizontalWidget-C1K91iwc.js} +2 -2
  102. package/dist/{HorizontalWidget-Dt8bkM3k.js.map → HorizontalWidget-C1K91iwc.js.map} +1 -1
  103. package/dist/{HorizontalWidget-ByZjU21C.cjs → HorizontalWidget-Cg736bCD.cjs} +2 -2
  104. package/dist/{HorizontalWidget-ByZjU21C.cjs.map → HorizontalWidget-Cg736bCD.cjs.map} +1 -1
  105. package/dist/{HorizontalboxWidget-DzYz5SXs.cjs → HorizontalboxWidget-Bx1ISrig.cjs} +2 -2
  106. package/dist/{HorizontalboxWidget-DzYz5SXs.cjs.map → HorizontalboxWidget-Bx1ISrig.cjs.map} +1 -1
  107. package/dist/{HorizontalboxWidget-CdAZ5Sa6.js → HorizontalboxWidget-Db8knddI.js} +5 -5
  108. package/dist/{HorizontalboxWidget-CdAZ5Sa6.js.map → HorizontalboxWidget-Db8knddI.js.map} +1 -1
  109. package/dist/{HorizontallineWidget-C8Zhqxik.cjs → HorizontallineWidget-BRrshiSM.cjs} +2 -2
  110. package/dist/{HorizontallineWidget-C8Zhqxik.cjs.map → HorizontallineWidget-BRrshiSM.cjs.map} +1 -1
  111. package/dist/{HorizontallineWidget-CXZJTeU2.js → HorizontallineWidget-JtdiNy0r.js} +2 -2
  112. package/dist/{HorizontallineWidget-CXZJTeU2.js.map → HorizontallineWidget-JtdiNy0r.js.map} +1 -1
  113. package/dist/{IframeWidget-CrcWiAVE.js → IframeWidget-BIlFhl5W.js} +16 -16
  114. package/dist/IframeWidget-BIlFhl5W.js.map +1 -0
  115. package/dist/IframeWidget-CTwNNY_Y.cjs +2 -0
  116. package/dist/IframeWidget-CTwNNY_Y.cjs.map +1 -0
  117. package/dist/{ImageLoader-DPqax8yu.js → ImageLoader-Wgn0HO-B.js} +2 -2
  118. package/dist/{ImageLoader-DPqax8yu.js.map → ImageLoader-Wgn0HO-B.js.map} +1 -1
  119. package/dist/{ImageLoader-130w4tXJ.cjs → ImageLoader-maE53iG0.cjs} +2 -2
  120. package/dist/{ImageLoader-130w4tXJ.cjs.map → ImageLoader-maE53iG0.cjs.map} +1 -1
  121. package/dist/{ImageviewerWidget-CafLbLp2.cjs → ImageviewerWidget-CNYu5y1M.cjs} +2 -2
  122. package/dist/{ImageviewerWidget-CafLbLp2.cjs.map → ImageviewerWidget-CNYu5y1M.cjs.map} +1 -1
  123. package/dist/{ImageviewerWidget-CTEl6iPg.js → ImageviewerWidget-CsoNQsVN.js} +2 -2
  124. package/dist/{ImageviewerWidget-CTEl6iPg.js.map → ImageviewerWidget-CsoNQsVN.js.map} +1 -1
  125. package/dist/{InterfacesTab-B9ApLB5q.js → InterfacesTab-D1d6fYPx.js} +5 -5
  126. package/dist/{InterfacesTab-B9ApLB5q.js.map → InterfacesTab-D1d6fYPx.js.map} +1 -1
  127. package/dist/{InterfacesTab-wPQSLcSj.cjs → InterfacesTab-DN4Bx0jX.cjs} +2 -2
  128. package/dist/{InterfacesTab-wPQSLcSj.cjs.map → InterfacesTab-DN4Bx0jX.cjs.map} +1 -1
  129. package/dist/{LabelWidget-CPqKGMx0.js → LabelWidget-Ba4f7v6-.js} +2 -2
  130. package/dist/{LabelWidget-CPqKGMx0.js.map → LabelWidget-Ba4f7v6-.js.map} +1 -1
  131. package/dist/{LabelWidget-BfBP3Xme.cjs → LabelWidget-Mot3JRMt.cjs} +2 -2
  132. package/dist/{LabelWidget-BfBP3Xme.cjs.map → LabelWidget-Mot3JRMt.cjs.map} +1 -1
  133. package/dist/{LabelledWidget-CZvKfFNW.cjs → LabelledWidget-BUM4VRKk.cjs} +2 -2
  134. package/dist/{LabelledWidget-CZvKfFNW.cjs.map → LabelledWidget-BUM4VRKk.cjs.map} +1 -1
  135. package/dist/{LabelledWidget-BHYzRMFd.js → LabelledWidget-Cy_kY9Dr.js} +4 -4
  136. package/dist/{LabelledWidget-BHYzRMFd.js.map → LabelledWidget-Cy_kY9Dr.js.map} +1 -1
  137. package/dist/{LabelprogressbarWidget-D9deeUo7.js → LabelprogressbarWidget-B7m4u1_T.js} +4 -4
  138. package/dist/{LabelprogressbarWidget-D9deeUo7.js.map → LabelprogressbarWidget-B7m4u1_T.js.map} +1 -1
  139. package/dist/{LabelprogressbarWidget-Bv0G5oT3.cjs → LabelprogressbarWidget-Ddv8wOiy.cjs} +2 -2
  140. package/dist/{LabelprogressbarWidget-Bv0G5oT3.cjs.map → LabelprogressbarWidget-Ddv8wOiy.cjs.map} +1 -1
  141. package/dist/{LabelsparklineWidget-dyqEroDN.cjs → LabelsparklineWidget-BdPL_Qy6.cjs} +2 -2
  142. package/dist/{LabelsparklineWidget-dyqEroDN.cjs.map → LabelsparklineWidget-BdPL_Qy6.cjs.map} +1 -1
  143. package/dist/{LabelsparklineWidget-7mYre3CP.js → LabelsparklineWidget-CAwxzcl1.js} +4 -4
  144. package/dist/{LabelsparklineWidget-7mYre3CP.js.map → LabelsparklineWidget-CAwxzcl1.js.map} +1 -1
  145. package/dist/{LabelvalueWidget-NLsD60n4.js → LabelvalueWidget-DfkCk32l.js} +4 -4
  146. package/dist/{LabelvalueWidget-NLsD60n4.js.map → LabelvalueWidget-DfkCk32l.js.map} +1 -1
  147. package/dist/{LabelvalueWidget-Bsl7Z3wM.cjs → LabelvalueWidget-dJ_MMnTe.cjs} +2 -2
  148. package/dist/{LabelvalueWidget-Bsl7Z3wM.cjs.map → LabelvalueWidget-dJ_MMnTe.cjs.map} +1 -1
  149. package/dist/{LabelvaluedescWidget-B_Xih-c5.cjs → LabelvaluedescWidget-B1uUJbqG.cjs} +2 -2
  150. package/dist/{LabelvaluedescWidget-B_Xih-c5.cjs.map → LabelvaluedescWidget-B1uUJbqG.cjs.map} +1 -1
  151. package/dist/{LabelvaluedescWidget-DXROG4Gs.js → LabelvaluedescWidget-Dmff-Qnm.js} +5 -5
  152. package/dist/{LabelvaluedescWidget-DXROG4Gs.js.map → LabelvaluedescWidget-Dmff-Qnm.js.map} +1 -1
  153. package/dist/{LabelvaluelimitsbarWidget-DDd0RIs5.cjs → LabelvaluelimitsbarWidget-CBORsu08.cjs} +2 -2
  154. package/dist/{LabelvaluelimitsbarWidget-DDd0RIs5.cjs.map → LabelvaluelimitsbarWidget-CBORsu08.cjs.map} +1 -1
  155. package/dist/{LabelvaluelimitsbarWidget-DqVqHF4W.js → LabelvaluelimitsbarWidget-QEB4zfXJ.js} +4 -4
  156. package/dist/{LabelvaluelimitsbarWidget-DqVqHF4W.js.map → LabelvaluelimitsbarWidget-QEB4zfXJ.js.map} +1 -1
  157. package/dist/{LabelvaluelimitscolumnWidget-BK6_31pC.js → LabelvaluelimitscolumnWidget-DxEW7ft1.js} +5 -5
  158. package/dist/{LabelvaluelimitscolumnWidget-BK6_31pC.js.map → LabelvaluelimitscolumnWidget-DxEW7ft1.js.map} +1 -1
  159. package/dist/{LabelvaluelimitscolumnWidget-C1aqkXh5.cjs → LabelvaluelimitscolumnWidget-xsju-uwF.cjs} +2 -2
  160. package/dist/{LabelvaluelimitscolumnWidget-C1aqkXh5.cjs.map → LabelvaluelimitscolumnWidget-xsju-uwF.cjs.map} +1 -1
  161. package/dist/{LabelvaluerangebarWidget-a8u5LXBD.cjs → LabelvaluerangebarWidget-BxKS0aXY.cjs} +2 -2
  162. package/dist/{LabelvaluerangebarWidget-a8u5LXBD.cjs.map → LabelvaluerangebarWidget-BxKS0aXY.cjs.map} +1 -1
  163. package/dist/{LabelvaluerangebarWidget-DR7C8gqw.js → LabelvaluerangebarWidget-Dc_4Eh2P.js} +4 -4
  164. package/dist/{LabelvaluerangebarWidget-DR7C8gqw.js.map → LabelvaluerangebarWidget-Dc_4Eh2P.js.map} +1 -1
  165. package/dist/{Layout-CVGghwYm.cjs → Layout-CevW0J6c.cjs} +2 -2
  166. package/dist/{Layout-CVGghwYm.cjs.map → Layout-CevW0J6c.cjs.map} +1 -1
  167. package/dist/{Layout-B_Hgw3gd.js → Layout-VFnL3qx_.js} +2 -2
  168. package/dist/{Layout-B_Hgw3gd.js.map → Layout-VFnL3qx_.js.map} +1 -1
  169. package/dist/{LedWidget-CiAVs2tj.js → LedWidget-BbBMEqh6.js} +4 -4
  170. package/dist/{LedWidget-CiAVs2tj.js.map → LedWidget-BbBMEqh6.js.map} +1 -1
  171. package/dist/{LedWidget-Cmy47xfg.cjs → LedWidget-D_mYilLS.cjs} +2 -2
  172. package/dist/{LedWidget-Cmy47xfg.cjs.map → LedWidget-D_mYilLS.cjs.map} +1 -1
  173. package/dist/{LimitsBar-_UQG-M6e.js → LimitsBar-CRNf8kCM.js} +2 -2
  174. package/dist/{LimitsBar-_UQG-M6e.js.map → LimitsBar-CRNf8kCM.js.map} +1 -1
  175. package/dist/{LimitsBar-DTtMywOw.cjs → LimitsBar-Cfi6zz4T.cjs} +2 -2
  176. package/dist/{LimitsBar-DTtMywOw.cjs.map → LimitsBar-Cfi6zz4T.cjs.map} +1 -1
  177. package/dist/{LimitsbarWidget-CIwcOhC8.js → LimitsbarWidget-BID8h8Fz.js} +3 -3
  178. package/dist/{LimitsbarWidget-CIwcOhC8.js.map → LimitsbarWidget-BID8h8Fz.js.map} +1 -1
  179. package/dist/{LimitsbarWidget-CYm_f1FN.cjs → LimitsbarWidget-Bw_M1QY6.cjs} +2 -2
  180. package/dist/{LimitsbarWidget-CYm_f1FN.cjs.map → LimitsbarWidget-Bw_M1QY6.cjs.map} +1 -1
  181. package/dist/{LimitscolorWidget-CGPfJwvT.js → LimitscolorWidget-Bm660cL9.js} +2 -2
  182. package/dist/{LimitscolorWidget-CGPfJwvT.js.map → LimitscolorWidget-Bm660cL9.js.map} +1 -1
  183. package/dist/{LimitscolorWidget-oH6NGl1C.cjs → LimitscolorWidget-CuiubDPH.cjs} +2 -2
  184. package/dist/{LimitscolorWidget-oH6NGl1C.cjs.map → LimitscolorWidget-CuiubDPH.cjs.map} +1 -1
  185. package/dist/{LimitscolumnWidget-CnGOCckG.cjs → LimitscolumnWidget-BuwnurP3.cjs} +2 -2
  186. package/dist/{LimitscolumnWidget-CnGOCckG.cjs.map → LimitscolumnWidget-BuwnurP3.cjs.map} +1 -1
  187. package/dist/{LimitscolumnWidget-Bj_UPEC8.js → LimitscolumnWidget-C_jzHXdC.js} +2 -2
  188. package/dist/{LimitscolumnWidget-Bj_UPEC8.js.map → LimitscolumnWidget-C_jzHXdC.js.map} +1 -1
  189. package/dist/{LinegraphWidget-zHs3NG-6.cjs → LinegraphWidget-Cgd3gSk8.cjs} +2 -2
  190. package/dist/{LinegraphWidget-zHs3NG-6.cjs.map → LinegraphWidget-Cgd3gSk8.cjs.map} +1 -1
  191. package/dist/{LinegraphWidget-DccnHbWa.js → LinegraphWidget-Pte5LxmO.js} +4 -4
  192. package/dist/{LinegraphWidget-DccnHbWa.js.map → LinegraphWidget-Pte5LxmO.js.map} +1 -1
  193. package/dist/{MatrixbycolumnsWidget-U_NZ6aW-.js → MatrixbycolumnsWidget-j-3LkoxS.js} +3 -3
  194. package/dist/{MatrixbycolumnsWidget-U_NZ6aW-.js.map → MatrixbycolumnsWidget-j-3LkoxS.js.map} +1 -1
  195. package/dist/{MatrixbycolumnsWidget-Dd-udu5V.cjs → MatrixbycolumnsWidget-tRuEujha.cjs} +2 -2
  196. package/dist/{MatrixbycolumnsWidget-Dd-udu5V.cjs.map → MatrixbycolumnsWidget-tRuEujha.cjs.map} +1 -1
  197. package/dist/{MicroservicesTab-DG3rdksb.js → MicroservicesTab-BFNyiTuf.js} +3 -3
  198. package/dist/{MicroservicesTab-DG3rdksb.js.map → MicroservicesTab-BFNyiTuf.js.map} +1 -1
  199. package/dist/{MicroservicesTab-DXgSxZ0K.cjs → MicroservicesTab-BhbOC0nm.cjs} +2 -2
  200. package/dist/{MicroservicesTab-DXgSxZ0K.cjs.map → MicroservicesTab-BhbOC0nm.cjs.map} +1 -1
  201. package/dist/OpenC3TimePicker-4kqB_Chf.cjs +2 -0
  202. package/dist/OpenC3TimePicker-4kqB_Chf.cjs.map +1 -0
  203. package/dist/OpenC3TimePicker-C9CBFp3d.js +219 -0
  204. package/dist/OpenC3TimePicker-C9CBFp3d.js.map +1 -0
  205. package/dist/{Openc3Screen-CDwAWaTl.js → Openc3Screen-BxuqrFPG.js} +714 -516
  206. package/dist/Openc3Screen-BxuqrFPG.js.map +1 -0
  207. package/dist/Openc3Screen-DuzCiS5h.cjs +6 -0
  208. package/dist/Openc3Screen-DuzCiS5h.cjs.map +1 -0
  209. package/dist/{OutputDialog-D2YCbR20.cjs → OutputDialog-C__OuTUo.cjs} +2 -2
  210. package/dist/{OutputDialog-D2YCbR20.cjs.map → OutputDialog-C__OuTUo.cjs.map} +1 -1
  211. package/dist/{OutputDialog-Di-pSmJE.js → OutputDialog-Dk3S2--J.js} +9 -9
  212. package/dist/{OutputDialog-Di-pSmJE.js.map → OutputDialog-Dk3S2--J.js.map} +1 -1
  213. package/dist/{PackagesTab-Bui5q3rX.js → PackagesTab-2UMA9TLY.js} +14 -14
  214. package/dist/{PackagesTab-Bui5q3rX.js.map → PackagesTab-2UMA9TLY.js.map} +1 -1
  215. package/dist/{PackagesTab-C-fV9yxw.cjs → PackagesTab-Ba4vRiFU.cjs} +2 -2
  216. package/dist/{PackagesTab-C-fV9yxw.cjs.map → PackagesTab-Ba4vRiFU.cjs.map} +1 -1
  217. package/dist/{PluginsTab-DxxlKeVx.cjs → PluginsTab-BSm5NCBn.cjs} +4 -4
  218. package/dist/{PluginsTab-DxxlKeVx.cjs.map → PluginsTab-BSm5NCBn.cjs.map} +1 -1
  219. package/dist/{PluginsTab-zR9eZuvc.js → PluginsTab-CS8RLv56.js} +4 -4
  220. package/dist/{PluginsTab-zR9eZuvc.js.map → PluginsTab-CS8RLv56.js.map} +1 -1
  221. package/dist/{ProgressbarWidget-Cxvwcfgn.cjs → ProgressbarWidget-D3jeqQZi.cjs} +2 -2
  222. package/dist/{ProgressbarWidget-Cxvwcfgn.cjs.map → ProgressbarWidget-D3jeqQZi.cjs.map} +1 -1
  223. package/dist/{ProgressbarWidget-D4JtVzyk.js → ProgressbarWidget-DB4g3d3i.js} +2 -2
  224. package/dist/{ProgressbarWidget-D4JtVzyk.js.map → ProgressbarWidget-DB4g3d3i.js.map} +1 -1
  225. package/dist/{RadiobuttonWidget-BUaW7pRx.js → RadiobuttonWidget-CbLLNEeT.js} +2 -2
  226. package/dist/{RadiobuttonWidget-BUaW7pRx.js.map → RadiobuttonWidget-CbLLNEeT.js.map} +1 -1
  227. package/dist/{RadiobuttonWidget-Ccgftl13.cjs → RadiobuttonWidget-DpzokVRc.cjs} +2 -2
  228. package/dist/{RadiobuttonWidget-Ccgftl13.cjs.map → RadiobuttonWidget-DpzokVRc.cjs.map} +1 -1
  229. package/dist/{RadiogroupWidget-CSxjpxCr.cjs → RadiogroupWidget-C8M7BvLR.cjs} +2 -2
  230. package/dist/{RadiogroupWidget-CSxjpxCr.cjs.map → RadiogroupWidget-C8M7BvLR.cjs.map} +1 -1
  231. package/dist/{RadiogroupWidget-NIv4CaUQ.js → RadiogroupWidget-DdTKUKGT.js} +2 -2
  232. package/dist/{RadiogroupWidget-NIv4CaUQ.js.map → RadiogroupWidget-DdTKUKGT.js.map} +1 -1
  233. package/dist/{RangebarWidget-1-CsFpcl.js → RangebarWidget-DvegNZg3.js} +2 -2
  234. package/dist/{RangebarWidget-1-CsFpcl.js.map → RangebarWidget-DvegNZg3.js.map} +1 -1
  235. package/dist/{RangebarWidget-BtxfPo-U.cjs → RangebarWidget-YWSjQavR.cjs} +2 -2
  236. package/dist/{RangebarWidget-BtxfPo-U.cjs.map → RangebarWidget-YWSjQavR.cjs.map} +1 -1
  237. package/dist/{RedisTab-DOozcC9a.cjs → RedisTab-Bs8368J6.cjs} +2 -2
  238. package/dist/{RedisTab-DOozcC9a.cjs.map → RedisTab-Bs8368J6.cjs.map} +1 -1
  239. package/dist/{RedisTab-DuO-zUV3.js → RedisTab-C2dYwa7Q.js} +5 -5
  240. package/dist/{RedisTab-DuO-zUV3.js.map → RedisTab-C2dYwa7Q.js.map} +1 -1
  241. package/dist/{RollupWidget-ChasTJYP.js → RollupWidget-BfDjRI_8.js} +2 -2
  242. package/dist/{RollupWidget-ChasTJYP.js.map → RollupWidget-BfDjRI_8.js.map} +1 -1
  243. package/dist/{RollupWidget-CQxl1mlr.cjs → RollupWidget-jZjZhJpb.cjs} +2 -2
  244. package/dist/{RollupWidget-CQxl1mlr.cjs.map → RollupWidget-jZjZhJpb.cjs.map} +1 -1
  245. package/dist/{RoutersTab-C0UHSj-S.js → RoutersTab-BDKIQfPD.js} +3 -3
  246. package/dist/{RoutersTab-C0UHSj-S.js.map → RoutersTab-BDKIQfPD.js.map} +1 -1
  247. package/dist/{RoutersTab-DgWAXGUv.cjs → RoutersTab-DtHCBbXB.cjs} +2 -2
  248. package/dist/{RoutersTab-DgWAXGUv.cjs.map → RoutersTab-DtHCBbXB.cjs.map} +1 -1
  249. package/dist/{ScriptChooser-C5HHbbcP.js → ScriptChooser-D12U4b0f.js} +13 -13
  250. package/dist/ScriptChooser-D12U4b0f.js.map +1 -0
  251. package/dist/ScriptChooser-QTzU0krS.cjs +2 -0
  252. package/dist/ScriptChooser-QTzU0krS.cjs.map +1 -0
  253. package/dist/{ScrollwindowWidget-Bkyjw0Qt.cjs → ScrollwindowWidget-BQU2wUnY.cjs} +2 -2
  254. package/dist/{ScrollwindowWidget-Bkyjw0Qt.cjs.map → ScrollwindowWidget-BQU2wUnY.cjs.map} +1 -1
  255. package/dist/{ScrollwindowWidget-Y2J758y6.js → ScrollwindowWidget-BdRjQVVF.js} +2 -2
  256. package/dist/{ScrollwindowWidget-Y2J758y6.js.map → ScrollwindowWidget-BdRjQVVF.js.map} +1 -1
  257. package/dist/{SecretsTab-c5g8Zk4g.js → SecretsTab-9350W-Wd.js} +4 -4
  258. package/dist/{SecretsTab-c5g8Zk4g.js.map → SecretsTab-9350W-Wd.js.map} +1 -1
  259. package/dist/{SecretsTab-Ds3kGOmd.cjs → SecretsTab-CoEChNXs.cjs} +2 -2
  260. package/dist/{SecretsTab-Ds3kGOmd.cjs.map → SecretsTab-CoEChNXs.cjs.map} +1 -1
  261. package/dist/{SettingsTab-CTd3_Ipy.js → SettingsTab-CPk_hNJp.js} +249 -136
  262. package/dist/SettingsTab-CPk_hNJp.js.map +1 -0
  263. package/dist/SettingsTab-CqYcXYBb.cjs +3 -0
  264. package/dist/SettingsTab-CqYcXYBb.cjs.map +1 -0
  265. package/dist/{SignalWidget-DFhHDicI.js → SignalWidget-BPiNqq8R.js} +2 -2
  266. package/dist/{SignalWidget-DFhHDicI.js.map → SignalWidget-BPiNqq8R.js.map} +1 -1
  267. package/dist/{SignalWidget-BkTXZpGV.cjs → SignalWidget-w0jzLGVV.cjs} +2 -2
  268. package/dist/{SignalWidget-BkTXZpGV.cjs.map → SignalWidget-w0jzLGVV.cjs.map} +1 -1
  269. package/dist/{SimpleTextDialog-CXIEKlX0.js → SimpleTextDialog-3uasUaXN.js} +2 -2
  270. package/dist/{SimpleTextDialog-CXIEKlX0.js.map → SimpleTextDialog-3uasUaXN.js.map} +1 -1
  271. package/dist/{SimpleTextDialog-Dv5ypyUQ.cjs → SimpleTextDialog-BpyUPxqT.cjs} +2 -2
  272. package/dist/{SimpleTextDialog-Dv5ypyUQ.cjs.map → SimpleTextDialog-BpyUPxqT.cjs.map} +1 -1
  273. package/dist/{SpacerWidget-D4KojaGb.js → SpacerWidget-CZGtLi7D.js} +2 -2
  274. package/dist/{SpacerWidget-D4KojaGb.js.map → SpacerWidget-CZGtLi7D.js.map} +1 -1
  275. package/dist/{SpacerWidget-HsSCc07C.cjs → SpacerWidget-D9BpT5w5.cjs} +2 -2
  276. package/dist/{SpacerWidget-HsSCc07C.cjs.map → SpacerWidget-D9BpT5w5.cjs.map} +1 -1
  277. package/dist/{SparklineWidget-DMHFzw8L.js → SparklineWidget-CjjqaZtm.js} +4 -4
  278. package/dist/{SparklineWidget-DMHFzw8L.js.map → SparklineWidget-CjjqaZtm.js.map} +1 -1
  279. package/dist/{SparklineWidget-BdRM-ymk.cjs → SparklineWidget-DXYD2dKC.cjs} +2 -2
  280. package/dist/{SparklineWidget-BdRM-ymk.cjs.map → SparklineWidget-DXYD2dKC.cjs.map} +1 -1
  281. package/dist/{TabbookWidget-NmIK-Lgf.cjs → TabbookWidget-DnCX6_eY.cjs} +2 -2
  282. package/dist/{TabbookWidget-NmIK-Lgf.cjs.map → TabbookWidget-DnCX6_eY.cjs.map} +1 -1
  283. package/dist/{TabbookWidget-NVLYMdFG.js → TabbookWidget-Dy8N2hq1.js} +2 -2
  284. package/dist/{TabbookWidget-NVLYMdFG.js.map → TabbookWidget-Dy8N2hq1.js.map} +1 -1
  285. package/dist/{TargetPacketItemChooser-D5h9Octy.js → TargetPacketItemChooser--rzU8ThE.js} +179 -146
  286. package/dist/TargetPacketItemChooser--rzU8ThE.js.map +1 -0
  287. package/dist/TargetPacketItemChooser-B3riNx-5.cjs +2 -0
  288. package/dist/TargetPacketItemChooser-B3riNx-5.cjs.map +1 -0
  289. package/dist/{TargetsTab-b35HgnRl.js → TargetsTab-DJBCaflz.js} +12 -12
  290. package/dist/{TargetsTab-b35HgnRl.js.map → TargetsTab-DJBCaflz.js.map} +1 -1
  291. package/dist/{TargetsTab-JLjpJ1wn.cjs → TargetsTab-Dqvu7l_c.cjs} +2 -2
  292. package/dist/{TargetsTab-JLjpJ1wn.cjs.map → TargetsTab-Dqvu7l_c.cjs.map} +1 -1
  293. package/dist/{TextboxWidget-CrMYPQIF.js → TextboxWidget-BSQPOr-R.js} +4 -4
  294. package/dist/{TextboxWidget-CrMYPQIF.js.map → TextboxWidget-BSQPOr-R.js.map} +1 -1
  295. package/dist/{TextboxWidget-xk3OFSUZ.cjs → TextboxWidget-DHHcXTpa.cjs} +2 -2
  296. package/dist/{TextboxWidget-xk3OFSUZ.cjs.map → TextboxWidget-DHHcXTpa.cjs.map} +1 -1
  297. package/dist/{TextfieldWidget-DnnKM6vS.cjs → TextfieldWidget-BbNHrjZB.cjs} +2 -2
  298. package/dist/{TextfieldWidget-DnnKM6vS.cjs.map → TextfieldWidget-BbNHrjZB.cjs.map} +1 -1
  299. package/dist/{TextfieldWidget-DMBQwtnb.js → TextfieldWidget-CTGnjpuY.js} +2 -2
  300. package/dist/{TextfieldWidget-DMBQwtnb.js.map → TextfieldWidget-CTGnjpuY.js.map} +1 -1
  301. package/dist/TimeWidget-B4qqIUWu.js +43 -0
  302. package/dist/TimeWidget-B4qqIUWu.js.map +1 -0
  303. package/dist/TimeWidget-BhyYijAr.cjs +2 -0
  304. package/dist/TimeWidget-BhyYijAr.cjs.map +1 -0
  305. package/dist/{TitleWidget-CfFyUkSu.cjs → TitleWidget-Dagdh8DQ.cjs} +2 -2
  306. package/dist/{TitleWidget-CfFyUkSu.cjs.map → TitleWidget-Dagdh8DQ.cjs.map} +1 -1
  307. package/dist/{TitleWidget-V1FGI8l3.js → TitleWidget-OwWpy1Jl.js} +2 -2
  308. package/dist/{TitleWidget-V1FGI8l3.js.map → TitleWidget-OwWpy1Jl.js.map} +1 -1
  309. package/dist/{ToolsTab-7qOQPnN3.js → ToolsTab-BddBK1tK.js} +248 -232
  310. package/dist/ToolsTab-BddBK1tK.js.map +1 -0
  311. package/dist/ToolsTab-BxrYmpF4.cjs +7 -0
  312. package/dist/ToolsTab-BxrYmpF4.cjs.map +1 -0
  313. package/dist/{TopBar-DdOFDiCo.cjs → TopBar-D6zYf4Ed.cjs} +2 -2
  314. package/dist/{TopBar-DdOFDiCo.cjs.map → TopBar-D6zYf4Ed.cjs.map} +1 -1
  315. package/dist/{TopBar-BkwvK0oj.js → TopBar-DcfK2Z2G.js} +2 -2
  316. package/dist/{TopBar-BkwvK0oj.js.map → TopBar-DcfK2Z2G.js.map} +1 -1
  317. package/dist/{UpgradeToEnterpriseDialog-CEUcvlkx.js → UpgradeToEnterpriseDialog-Cj0L60bW.js} +2 -2
  318. package/dist/{UpgradeToEnterpriseDialog-CEUcvlkx.js.map → UpgradeToEnterpriseDialog-Cj0L60bW.js.map} +1 -1
  319. package/dist/{UpgradeToEnterpriseDialog-CP-jJxU4.cjs → UpgradeToEnterpriseDialog-DHOqnrRc.cjs} +2 -2
  320. package/dist/{UpgradeToEnterpriseDialog-CP-jJxU4.cjs.map → UpgradeToEnterpriseDialog-DHOqnrRc.cjs.map} +1 -1
  321. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-D9LFRi0t.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-8uBNo_8r.js} +10122 -9919
  322. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-8uBNo_8r.js.map +1 -0
  323. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-COA1HwFc.cjs +1501 -0
  324. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-COA1HwFc.cjs.map +1 -0
  325. package/dist/{VWidget-rAFU-0vj.js → VWidget-B8DTwMbX.js} +44 -11
  326. package/dist/VWidget-B8DTwMbX.js.map +1 -0
  327. package/dist/VWidget-od6gU6UT.cjs +2 -0
  328. package/dist/VWidget-od6gU6UT.cjs.map +1 -0
  329. package/dist/{ValueWidget-CwuH7beM.cjs → ValueWidget-9DW9QZ_F.cjs} +2 -2
  330. package/dist/{ValueWidget-CwuH7beM.cjs.map → ValueWidget-9DW9QZ_F.cjs.map} +1 -1
  331. package/dist/{ValueWidget-BI3uXmda.js → ValueWidget-CD-gsoJa.js} +4 -4
  332. package/dist/{ValueWidget-BI3uXmda.js.map → ValueWidget-CD-gsoJa.js.map} +1 -1
  333. package/dist/{ValuelimitsbarWidget-BGSJLpw4.js → ValuelimitsbarWidget-CKqMqplL.js} +4 -4
  334. package/dist/{ValuelimitsbarWidget-BGSJLpw4.js.map → ValuelimitsbarWidget-CKqMqplL.js.map} +1 -1
  335. package/dist/{ValuelimitsbarWidget-BSkGhA_y.cjs → ValuelimitsbarWidget-DgP-FRnw.cjs} +2 -2
  336. package/dist/{ValuelimitsbarWidget-BSkGhA_y.cjs.map → ValuelimitsbarWidget-DgP-FRnw.cjs.map} +1 -1
  337. package/dist/{ValuelimitscolumnWidget-BXdPahDO.cjs → ValuelimitscolumnWidget-DWik9H7C.cjs} +2 -2
  338. package/dist/{ValuelimitscolumnWidget-BXdPahDO.cjs.map → ValuelimitscolumnWidget-DWik9H7C.cjs.map} +1 -1
  339. package/dist/{ValuelimitscolumnWidget-CaNjHy4v.js → ValuelimitscolumnWidget-TbIlfRm8.js} +4 -4
  340. package/dist/{ValuelimitscolumnWidget-CaNjHy4v.js.map → ValuelimitscolumnWidget-TbIlfRm8.js.map} +1 -1
  341. package/dist/{ValuerangebarWidget-Do40-aaL.js → ValuerangebarWidget-CIR3qshL.js} +4 -4
  342. package/dist/{ValuerangebarWidget-Do40-aaL.js.map → ValuerangebarWidget-CIR3qshL.js.map} +1 -1
  343. package/dist/{ValuerangebarWidget-DvWGqBNM.cjs → ValuerangebarWidget-DMPQMn23.cjs} +2 -2
  344. package/dist/{ValuerangebarWidget-DvWGqBNM.cjs.map → ValuerangebarWidget-DMPQMn23.cjs.map} +1 -1
  345. package/dist/{VerticalWidget-y238HI2A.cjs → VerticalWidget-BjDRWx1I.cjs} +2 -2
  346. package/dist/{VerticalWidget-y238HI2A.cjs.map → VerticalWidget-BjDRWx1I.cjs.map} +1 -1
  347. package/dist/{VerticalWidget-DZqghqIm.js → VerticalWidget-DpMgiz2m.js} +2 -2
  348. package/dist/{VerticalWidget-DZqghqIm.js.map → VerticalWidget-DpMgiz2m.js.map} +1 -1
  349. package/dist/{VerticalboxWidget-CQ__4FcS.js → VerticalboxWidget-BznaAPyj.js} +5 -5
  350. package/dist/{VerticalboxWidget-CQ__4FcS.js.map → VerticalboxWidget-BznaAPyj.js.map} +1 -1
  351. package/dist/{VerticalboxWidget--dgKnG5Z.cjs → VerticalboxWidget-DcQvJ13j.cjs} +2 -2
  352. package/dist/{VerticalboxWidget--dgKnG5Z.cjs.map → VerticalboxWidget-DcQvJ13j.cjs.map} +1 -1
  353. package/dist/{Widget-DdxHKVWn.cjs → Widget-BUhqs-wN.cjs} +2 -2
  354. package/dist/{Widget-DdxHKVWn.cjs.map → Widget-BUhqs-wN.cjs.map} +1 -1
  355. package/dist/{Widget-6-Nvewdp.js → Widget-E_9ky7hf.js} +2 -2
  356. package/dist/{Widget-6-Nvewdp.js.map → Widget-E_9ky7hf.js.map} +1 -1
  357. package/dist/components.cjs +3 -3
  358. package/dist/components.cjs.map +1 -1
  359. package/dist/components.js +380 -215
  360. package/dist/components.js.map +1 -1
  361. package/dist/index-D-zO4ghE.cjs +10 -0
  362. package/dist/index-D-zO4ghE.cjs.map +1 -0
  363. package/dist/{index-3k1IXN1T.js → index-DCtILi4r.js} +765 -622
  364. package/dist/index-DCtILi4r.js.map +1 -0
  365. package/dist/plugins.cjs +1 -1
  366. package/dist/plugins.cjs.map +1 -1
  367. package/dist/plugins.js +1 -1
  368. package/dist/plugins.js.map +1 -1
  369. package/dist/purify.es-B9BW70-4.cjs +3 -0
  370. package/dist/purify.es-B9BW70-4.cjs.map +1 -0
  371. package/dist/{purify.es-BGaRrCfO.js → purify.es-BIuh5IAZ.js} +116 -116
  372. package/dist/purify.es-BIuh5IAZ.js.map +1 -0
  373. package/dist/{settings-CHPWZcnU.js → settings-CjEQxY67.js} +2 -2
  374. package/dist/{settings-CHPWZcnU.js.map → settings-CjEQxY67.js.map} +1 -1
  375. package/dist/{settings-BCE3SW-9.cjs → settings-J9UGWG6O.cjs} +2 -2
  376. package/dist/{settings-BCE3SW-9.cjs.map → settings-J9UGWG6O.cjs.map} +1 -1
  377. package/dist/tools/admin.cjs +4 -5
  378. package/dist/tools/admin.cjs.map +1 -1
  379. package/dist/tools/admin.js +936 -823
  380. package/dist/tools/admin.js.map +1 -1
  381. package/dist/tools/base.cjs +1 -1
  382. package/dist/tools/base.cjs.map +1 -1
  383. package/dist/tools/base.js +5 -5
  384. package/dist/tools/base.js.map +1 -1
  385. package/dist/tools/calendar.cjs +1 -1
  386. package/dist/tools/calendar.js +1 -1
  387. package/dist/tools/scriptrunner.cjs +8 -8
  388. package/dist/tools/scriptrunner.cjs.map +1 -1
  389. package/dist/tools/scriptrunner.js +1105 -1162
  390. package/dist/tools/scriptrunner.js.map +1 -1
  391. package/dist/vue-common.css +1 -1
  392. package/dist/widgets.cjs +1 -1
  393. package/dist/widgets.js +64 -64
  394. package/package.json +14 -14
  395. package/dist/EventListDialog-BshKrOuQ.js.map +0 -1
  396. package/dist/EventListDialog-D0iBpLSR.cjs +0 -2
  397. package/dist/EventListDialog-D0iBpLSR.cjs.map +0 -1
  398. package/dist/FormatvalueWidget-CpsyYKXD.cjs +0 -2
  399. package/dist/Graph-kmTrth08.cjs +0 -2
  400. package/dist/IframeWidget-BuNXXziR.cjs +0 -2
  401. package/dist/IframeWidget-BuNXXziR.cjs.map +0 -1
  402. package/dist/IframeWidget-CrcWiAVE.js.map +0 -1
  403. package/dist/Openc3Screen-CDwAWaTl.js.map +0 -1
  404. package/dist/Openc3Screen-CKs-49JN.cjs +0 -6
  405. package/dist/Openc3Screen-CKs-49JN.cjs.map +0 -1
  406. package/dist/ScriptChooser-C5HHbbcP.js.map +0 -1
  407. package/dist/ScriptChooser-D1dddugi.cjs +0 -2
  408. package/dist/ScriptChooser-D1dddugi.cjs.map +0 -1
  409. package/dist/SettingsTab-CTd3_Ipy.js.map +0 -1
  410. package/dist/SettingsTab-DMPRJELP.cjs +0 -3
  411. package/dist/SettingsTab-DMPRJELP.cjs.map +0 -1
  412. package/dist/TargetPacketItemChooser-B0IVMSib.cjs +0 -2
  413. package/dist/TargetPacketItemChooser-B0IVMSib.cjs.map +0 -1
  414. package/dist/TargetPacketItemChooser-D5h9Octy.js.map +0 -1
  415. package/dist/TimeWidget-CWLJZ2bt.js +0 -40
  416. package/dist/TimeWidget-CWLJZ2bt.js.map +0 -1
  417. package/dist/TimeWidget-W-flXfLb.cjs +0 -2
  418. package/dist/TimeWidget-W-flXfLb.cjs.map +0 -1
  419. package/dist/ToolsTab-7qOQPnN3.js.map +0 -1
  420. package/dist/ToolsTab-jUNdj09m.cjs +0 -7
  421. package/dist/ToolsTab-jUNdj09m.cjs.map +0 -1
  422. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-CX-SWpru.cjs +0 -1498
  423. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-CX-SWpru.cjs.map +0 -1
  424. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-D9LFRi0t.js.map +0 -1
  425. package/dist/VWidget-BJArPtqI.cjs +0 -2
  426. package/dist/VWidget-BJArPtqI.cjs.map +0 -1
  427. package/dist/VWidget-rAFU-0vj.js.map +0 -1
  428. package/dist/index-3k1IXN1T.js.map +0 -1
  429. package/dist/index-DlWUR7vt.cjs +0 -7
  430. package/dist/index-DlWUR7vt.cjs.map +0 -1
  431. package/dist/purify.es-B608WQkR.cjs +0 -3
  432. package/dist/purify.es-B608WQkR.cjs.map +0 -1
  433. package/dist/purify.es-BGaRrCfO.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-CX-SWpru.cjs"),k=require("./Widget-DdxHKVWn.cjs"),e=require("vue"),C=require("./CustomIcon-CEc927h0.cjs"),v={mixins:[k.Widget],data(){return{files:[],loading:!1}},computed:{match(){if(this.files.some(t=>t.error))return!1;if(this.files.some(t=>!t.checksum))return null;const o=this.files[0].checksum;return this.files.every(t=>t.checksum===o)},matchStatus(){return{null:{icon:"$info",color:"grey",text:"Comparing..."},true:{icon:"$success",color:"success",text:"Checksums Match"},false:{icon:"$error",color:"error",text:this.files.some(t=>t.error)?"Error loading file(s)":"Checksums Do Not Match"}}[this.match]}},created(){this.files=this.parameters.filter(o=>o).map(o=>({path:o,checksum:null,error:null,copied:!1}))},mounted(){this.files.length&&this.fetchChecksums()},methods:{getDisplayText(o){return o.error?`Error: ${o.error}`:o.checksum?o.checksum:this.loading?"Loading...":"Not loaded"},async computeChecksum(o){const c=new TextEncoder().encode(o),r=await crypto.subtle.digest("SHA-256",c);return Array.from(new Uint8Array(r)).map(n=>n.toString(16).padStart(2,"0")).join("")},async fetchFile(o){var s;const t=window.openc3Scope||"DEFAULT";let c=`${t}/targets_modified/${o}`,r=await m.fi.get(`/openc3-api/storage/download_file/${encodeURIComponent(c)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"},headers:{"Ignore-Errors":"404,500"}}).catch(()=>null);if((!r||r.status===404)&&(c=`${t}/targets/${o}`,r=await m.fi.get(`/openc3-api/storage/download_file/${encodeURIComponent(c)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"}})),(s=r==null?void 0:r.data)!=null&&s.contents)return atob(r.data.contents);throw new Error("File not found")},async copyChecksum(o){if(o.checksum)try{await navigator.clipboard.writeText(o.checksum),o.copied=!0,setTimeout(()=>o.copied=!1,2e3)}catch(t){console.error("Failed to copy checksum:",t)}},async fetchChecksums(){this.loading=!0,this.files.forEach(t=>{t.checksum=null,t.error=null}),(await Promise.all(this.files.map(t=>this.fetchFile(t.path).then(c=>this.computeChecksum(c)).catch(c=>({error:c.message||"File not found"}))))).forEach((t,c)=>{t!=null&&t.error?this.files[c].error=t.error:this.files[c].checksum=t}),this.loading=!1}}},y={class:"text-caption text-medium-emphasis font-weight-regular"},x={class:"text-caption text-medium-emphasis mb-2"},w={class:"ml-1 text-high-emphasis"},N={class:"flex-grow-1 overflow-wrap-anywhere"};function E(o,t,c,r,s,n){const h=e.resolveComponent("v-spacer"),i=e.resolveComponent("v-btn"),u=e.resolveComponent("v-card-title"),l=e.resolveComponent("v-divider"),p=e.resolveComponent("v-sheet"),_=e.resolveComponent("v-chip"),f=e.resolveComponent("v-card-text"),g=e.resolveComponent("v-card");return e.openBlock(),e.createBlock(g,{style:e.normalizeStyle(o.computedStyle),"min-width":"400"},{default:e.withCtx(()=>[e.createVNode(u,{class:"d-flex align-center pa-2"},{default:e.withCtx(()=>[e.createElementVNode("span",y,e.toDisplayString(s.files.length===1?"File Checksum":"File Checksum Comparison"),1),e.createVNode(h),e.createVNode(i,{size:"x-small",icon:"mdi-refresh",variant:"text",loading:s.loading,onClick:n.fetchChecksums},null,8,["loading","onClick"])]),_:1}),e.createVNode(l),e.createVNode(f,{class:"pa-3"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.files,(a,d)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d},[e.createElementVNode("div",x,[e.createTextVNode(e.toDisplayString(s.files.length===1?"File:":`File ${d+1}:`)+" ",1),e.createElementVNode("span",w,e.toDisplayString(a.path),1)]),e.createVNode(p,{class:e.normalizeClass([a.error?"text-error":"","d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption"]),style:{"background-color":"rgba(128, 128, 128, 0.2)"}},{default:e.withCtx(()=>[e.createElementVNode("span",N,e.toDisplayString(n.getDisplayText(a)),1),e.createVNode(i,{icon:a.copied?"$success":"mdi-content-copy",color:a.copied?"success":void 0,disabled:!a.checksum,size:"x-small",variant:"plain",density:"compact",onClick:S=>n.copyChecksum(a)},null,8,["icon","color","disabled","onClick"])]),_:2},1032,["class"])],64))),128)),s.files.length>1?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(l,{class:"mb-3"}),e.createVNode(_,{color:n.matchStatus.color,size:"small",variant:"tonal",label:"","prepend-icon":n.matchStatus.icon},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.matchStatus.text),1)]),_:1},8,["color","prepend-icon"])],64)):e.createCommentVNode("",!0)]),_:1})]),_:1},8,["style"])}const b=C._export_sfc(v,[["render",E],["__scopeId","data-v-7cb83af3"]]);exports.default=b;
2
- //# sourceMappingURL=FilechecksumWidget-Ddlm1UED.cjs.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-COA1HwFc.cjs"),k=require("./Widget-BUhqs-wN.cjs"),e=require("vue"),C=require("./CustomIcon-CEc927h0.cjs"),v={mixins:[k.Widget],data(){return{files:[],loading:!1}},computed:{match(){if(this.files.some(t=>t.error))return!1;if(this.files.some(t=>!t.checksum))return null;const o=this.files[0].checksum;return this.files.every(t=>t.checksum===o)},matchStatus(){return{null:{icon:"$info",color:"grey",text:"Comparing..."},true:{icon:"$success",color:"success",text:"Checksums Match"},false:{icon:"$error",color:"error",text:this.files.some(t=>t.error)?"Error loading file(s)":"Checksums Do Not Match"}}[this.match]}},created(){this.files=this.parameters.filter(o=>o).map(o=>({path:o,checksum:null,error:null,copied:!1}))},mounted(){this.files.length&&this.fetchChecksums()},methods:{getDisplayText(o){return o.error?`Error: ${o.error}`:o.checksum?o.checksum:this.loading?"Loading...":"Not loaded"},async computeChecksum(o){const c=new TextEncoder().encode(o),r=await crypto.subtle.digest("SHA-256",c);return Array.from(new Uint8Array(r)).map(n=>n.toString(16).padStart(2,"0")).join("")},async fetchFile(o){var s;const t=window.openc3Scope||"DEFAULT";let c=`${t}/targets_modified/${o}`,r=await m.Ei.get(`/openc3-api/storage/download_file/${encodeURIComponent(c)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"},headers:{"Ignore-Errors":"404,500"}}).catch(()=>null);if((!r||r.status===404)&&(c=`${t}/targets/${o}`,r=await m.Ei.get(`/openc3-api/storage/download_file/${encodeURIComponent(c)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"}})),(s=r==null?void 0:r.data)!=null&&s.contents)return atob(r.data.contents);throw new Error("File not found")},async copyChecksum(o){if(o.checksum)try{await navigator.clipboard.writeText(o.checksum),o.copied=!0,setTimeout(()=>o.copied=!1,2e3)}catch(t){console.error("Failed to copy checksum:",t)}},async fetchChecksums(){this.loading=!0,this.files.forEach(t=>{t.checksum=null,t.error=null}),(await Promise.all(this.files.map(t=>this.fetchFile(t.path).then(c=>this.computeChecksum(c)).catch(c=>({error:c.message||"File not found"}))))).forEach((t,c)=>{t!=null&&t.error?this.files[c].error=t.error:this.files[c].checksum=t}),this.loading=!1}}},y={class:"text-caption text-medium-emphasis font-weight-regular"},x={class:"text-caption text-medium-emphasis mb-2"},w={class:"ml-1 text-high-emphasis"},E={class:"flex-grow-1 overflow-wrap-anywhere"};function N(o,t,c,r,s,n){const h=e.resolveComponent("v-spacer"),i=e.resolveComponent("v-btn"),u=e.resolveComponent("v-card-title"),l=e.resolveComponent("v-divider"),p=e.resolveComponent("v-sheet"),_=e.resolveComponent("v-chip"),f=e.resolveComponent("v-card-text"),g=e.resolveComponent("v-card");return e.openBlock(),e.createBlock(g,{style:e.normalizeStyle(o.computedStyle),"min-width":"400"},{default:e.withCtx(()=>[e.createVNode(u,{class:"d-flex align-center pa-2"},{default:e.withCtx(()=>[e.createElementVNode("span",y,e.toDisplayString(s.files.length===1?"File Checksum":"File Checksum Comparison"),1),e.createVNode(h),e.createVNode(i,{size:"x-small",icon:"mdi-refresh",variant:"text",loading:s.loading,onClick:n.fetchChecksums},null,8,["loading","onClick"])]),_:1}),e.createVNode(l),e.createVNode(f,{class:"pa-3"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.files,(a,d)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d},[e.createElementVNode("div",x,[e.createTextVNode(e.toDisplayString(s.files.length===1?"File:":`File ${d+1}:`)+" ",1),e.createElementVNode("span",w,e.toDisplayString(a.path),1)]),e.createVNode(p,{class:e.normalizeClass([a.error?"text-error":"","d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption"]),style:{"background-color":"rgba(128, 128, 128, 0.2)"}},{default:e.withCtx(()=>[e.createElementVNode("span",E,e.toDisplayString(n.getDisplayText(a)),1),e.createVNode(i,{icon:a.copied?"$success":"mdi-content-copy",color:a.copied?"success":void 0,disabled:!a.checksum,size:"x-small",variant:"plain",density:"compact",onClick:S=>n.copyChecksum(a)},null,8,["icon","color","disabled","onClick"])]),_:2},1032,["class"])],64))),128)),s.files.length>1?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(l,{class:"mb-3"}),e.createVNode(_,{color:n.matchStatus.color,size:"small",variant:"tonal",label:"","prepend-icon":n.matchStatus.icon},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.matchStatus.text),1)]),_:1},8,["color","prepend-icon"])],64)):e.createCommentVNode("",!0)]),_:1})]),_:1},8,["style"])}const b=C._export_sfc(v,[["render",N],["__scopeId","data-v-7cb83af3"]]);exports.default=b;
2
+ //# sourceMappingURL=FilechecksumWidget-CCD4OHUJ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilechecksumWidget-Ddlm1UED.cjs","sources":["../src/widgets/FilechecksumWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card :style=\"computedStyle\" min-width=\"400\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ files.length === 1 ? 'File Checksum' : 'File Checksum Comparison' }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchChecksums\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-3\">\n <template v-for=\"(file, index) in files\" :key=\"index\">\n <div class=\"text-caption text-medium-emphasis mb-2\">\n {{ files.length === 1 ? 'File:' : `File ${index + 1}:` }}\n <span class=\"ml-1 text-high-emphasis\">{{ file.path }}</span>\n </div>\n <v-sheet\n :class=\"file.error ? 'text-error' : ''\"\n class=\"d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption\"\n style=\"background-color: rgba(128, 128, 128, 0.2)\"\n >\n <span class=\"flex-grow-1 overflow-wrap-anywhere\">\n {{ getDisplayText(file) }}\n </span>\n <v-btn\n :icon=\"file.copied ? '$success' : 'mdi-content-copy'\"\n :color=\"file.copied ? 'success' : undefined\"\n :disabled=\"!file.checksum\"\n size=\"x-small\"\n variant=\"plain\"\n density=\"compact\"\n @click=\"copyChecksum(file)\"\n />\n </v-sheet>\n </template>\n\n <template v-if=\"files.length > 1\">\n <v-divider class=\"mb-3\" />\n <v-chip\n :color=\"matchStatus.color\"\n size=\"small\"\n variant=\"tonal\"\n label\n :prepend-icon=\"matchStatus.icon\"\n >\n {{ matchStatus.text }}\n </v-chip>\n </template>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n files: [],\n loading: false,\n }\n },\n computed: {\n match() {\n if (this.files.some((f) => f.error)) return false\n if (this.files.some((f) => !f.checksum)) return null\n const first = this.files[0].checksum\n return this.files.every((f) => f.checksum === first)\n },\n matchStatus() {\n const states = {\n null: { icon: '$info', color: 'grey', text: 'Comparing...' },\n true: { icon: '$success', color: 'success', text: 'Checksums Match' },\n false: {\n icon: '$error',\n color: 'error',\n text: this.files.some((f) => f.error)\n ? 'Error loading file(s)'\n : 'Checksums Do Not Match',\n },\n }\n return states[this.match]\n },\n },\n created() {\n this.files = this.parameters\n .filter((p) => p)\n .map((path) => ({ path, checksum: null, error: null, copied: false }))\n },\n mounted() {\n if (this.files.length) {\n this.fetchChecksums()\n }\n },\n methods: {\n getDisplayText(file) {\n if (file.error) return `Error: ${file.error}`\n if (file.checksum) return file.checksum\n if (this.loading) return 'Loading...'\n return 'Not loaded'\n },\n async computeChecksum(content) {\n const encoder = new TextEncoder()\n const data = encoder.encode(content)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n },\n async fetchFile(filePath) {\n const scope = window.openc3Scope || 'DEFAULT'\n let objectPath = `${scope}/targets_modified/${filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n return atob(response.data.contents)\n }\n throw new Error('File not found')\n },\n async copyChecksum(file) {\n if (!file.checksum) return\n try {\n await navigator.clipboard.writeText(file.checksum)\n file.copied = true\n setTimeout(() => (file.copied = false), 2000)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Failed to copy checksum:', err)\n }\n },\n async fetchChecksums() {\n this.loading = true\n this.files.forEach((f) => {\n f.checksum = null\n f.error = null\n })\n\n const results = await Promise.all(\n this.files.map((file) =>\n this.fetchFile(file.path)\n .then((content) => this.computeChecksum(content))\n .catch((err) => ({ error: err.message || 'File not found' })),\n ),\n )\n\n results.forEach((result, i) => {\n if (result?.error) {\n this.files[i].error = result.error\n } else {\n this.files[i].checksum = result\n }\n })\n\n this.loading = false\n },\n },\n}\n</script>\n\n<style scoped>\n.overflow-wrap-anywhere {\n overflow-wrap: anywhere;\n}\n</style>\n"],"names":["_sfc_main","Widget","f","first","p","path","file","content","data","hashBuffer","b","filePath","scope","objectPath","response","Api","_a","err","result","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text","_openBlock","_createElementBlock","_Fragment","_renderList","index","_createTextVNode","_component_v_sheet","_normalizeClass","$event","_component_v_chip"],"mappings":"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"}
1
+ {"version":3,"file":"FilechecksumWidget-CCD4OHUJ.cjs","sources":["../src/widgets/FilechecksumWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card :style=\"computedStyle\" min-width=\"400\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ files.length === 1 ? 'File Checksum' : 'File Checksum Comparison' }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchChecksums\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-3\">\n <template v-for=\"(file, index) in files\" :key=\"index\">\n <div class=\"text-caption text-medium-emphasis mb-2\">\n {{ files.length === 1 ? 'File:' : `File ${index + 1}:` }}\n <span class=\"ml-1 text-high-emphasis\">{{ file.path }}</span>\n </div>\n <v-sheet\n :class=\"file.error ? 'text-error' : ''\"\n class=\"d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption\"\n style=\"background-color: rgba(128, 128, 128, 0.2)\"\n >\n <span class=\"flex-grow-1 overflow-wrap-anywhere\">\n {{ getDisplayText(file) }}\n </span>\n <v-btn\n :icon=\"file.copied ? '$success' : 'mdi-content-copy'\"\n :color=\"file.copied ? 'success' : undefined\"\n :disabled=\"!file.checksum\"\n size=\"x-small\"\n variant=\"plain\"\n density=\"compact\"\n @click=\"copyChecksum(file)\"\n />\n </v-sheet>\n </template>\n\n <template v-if=\"files.length > 1\">\n <v-divider class=\"mb-3\" />\n <v-chip\n :color=\"matchStatus.color\"\n size=\"small\"\n variant=\"tonal\"\n label\n :prepend-icon=\"matchStatus.icon\"\n >\n {{ matchStatus.text }}\n </v-chip>\n </template>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n files: [],\n loading: false,\n }\n },\n computed: {\n match() {\n if (this.files.some((f) => f.error)) return false\n if (this.files.some((f) => !f.checksum)) return null\n const first = this.files[0].checksum\n return this.files.every((f) => f.checksum === first)\n },\n matchStatus() {\n const states = {\n null: { icon: '$info', color: 'grey', text: 'Comparing...' },\n true: { icon: '$success', color: 'success', text: 'Checksums Match' },\n false: {\n icon: '$error',\n color: 'error',\n text: this.files.some((f) => f.error)\n ? 'Error loading file(s)'\n : 'Checksums Do Not Match',\n },\n }\n return states[this.match]\n },\n },\n created() {\n this.files = this.parameters\n .filter((p) => p)\n .map((path) => ({ path, checksum: null, error: null, copied: false }))\n },\n mounted() {\n if (this.files.length) {\n this.fetchChecksums()\n }\n },\n methods: {\n getDisplayText(file) {\n if (file.error) return `Error: ${file.error}`\n if (file.checksum) return file.checksum\n if (this.loading) return 'Loading...'\n return 'Not loaded'\n },\n async computeChecksum(content) {\n const encoder = new TextEncoder()\n const data = encoder.encode(content)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n },\n async fetchFile(filePath) {\n const scope = window.openc3Scope || 'DEFAULT'\n let objectPath = `${scope}/targets_modified/${filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n return atob(response.data.contents)\n }\n throw new Error('File not found')\n },\n async copyChecksum(file) {\n if (!file.checksum) return\n try {\n await navigator.clipboard.writeText(file.checksum)\n file.copied = true\n setTimeout(() => (file.copied = false), 2000)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Failed to copy checksum:', err)\n }\n },\n async fetchChecksums() {\n this.loading = true\n this.files.forEach((f) => {\n f.checksum = null\n f.error = null\n })\n\n const results = await Promise.all(\n this.files.map((file) =>\n this.fetchFile(file.path)\n .then((content) => this.computeChecksum(content))\n .catch((err) => ({ error: err.message || 'File not found' })),\n ),\n )\n\n results.forEach((result, i) => {\n if (result?.error) {\n this.files[i].error = result.error\n } else {\n this.files[i].checksum = result\n }\n })\n\n this.loading = false\n },\n },\n}\n</script>\n\n<style scoped>\n.overflow-wrap-anywhere {\n overflow-wrap: anywhere;\n}\n</style>\n"],"names":["_sfc_main","Widget","f","first","p","path","file","content","data","hashBuffer","b","filePath","scope","objectPath","response","Api","_a","err","result","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text","_openBlock","_createElementBlock","_Fragment","_renderList","index","_createTextVNode","_component_v_sheet","_normalizeClass","$event","_component_v_chip"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { f as k } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-D9LFRi0t.js";
2
- import { W as F } from "./Widget-6-Nvewdp.js";
1
+ import { E as k } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-8uBNo_8r.js";
2
+ import { W as F } from "./Widget-E_9ky7hf.js";
3
3
  import { resolveComponent as a, createBlock as S, openBlock as h, normalizeStyle as N, withCtx as l, createVNode as r, createElementVNode as d, toDisplayString as m, createElementBlock as u, createCommentVNode as T, Fragment as p, renderList as A, createTextVNode as y, normalizeClass as B } from "vue";
4
4
  import { _ as I } from "./CustomIcon-B9m73Gqm.js";
5
5
  const U = {
@@ -155,4 +155,4 @@ const K = /* @__PURE__ */ I(U, [["render", V], ["__scopeId", "data-v-7cb83af3"]]
155
155
  export {
156
156
  K as default
157
157
  };
158
- //# sourceMappingURL=FilechecksumWidget-gcmXxJHl.js.map
158
+ //# sourceMappingURL=FilechecksumWidget-Cxu-88vM.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilechecksumWidget-gcmXxJHl.js","sources":["../src/widgets/FilechecksumWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card :style=\"computedStyle\" min-width=\"400\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ files.length === 1 ? 'File Checksum' : 'File Checksum Comparison' }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchChecksums\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-3\">\n <template v-for=\"(file, index) in files\" :key=\"index\">\n <div class=\"text-caption text-medium-emphasis mb-2\">\n {{ files.length === 1 ? 'File:' : `File ${index + 1}:` }}\n <span class=\"ml-1 text-high-emphasis\">{{ file.path }}</span>\n </div>\n <v-sheet\n :class=\"file.error ? 'text-error' : ''\"\n class=\"d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption\"\n style=\"background-color: rgba(128, 128, 128, 0.2)\"\n >\n <span class=\"flex-grow-1 overflow-wrap-anywhere\">\n {{ getDisplayText(file) }}\n </span>\n <v-btn\n :icon=\"file.copied ? '$success' : 'mdi-content-copy'\"\n :color=\"file.copied ? 'success' : undefined\"\n :disabled=\"!file.checksum\"\n size=\"x-small\"\n variant=\"plain\"\n density=\"compact\"\n @click=\"copyChecksum(file)\"\n />\n </v-sheet>\n </template>\n\n <template v-if=\"files.length > 1\">\n <v-divider class=\"mb-3\" />\n <v-chip\n :color=\"matchStatus.color\"\n size=\"small\"\n variant=\"tonal\"\n label\n :prepend-icon=\"matchStatus.icon\"\n >\n {{ matchStatus.text }}\n </v-chip>\n </template>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n files: [],\n loading: false,\n }\n },\n computed: {\n match() {\n if (this.files.some((f) => f.error)) return false\n if (this.files.some((f) => !f.checksum)) return null\n const first = this.files[0].checksum\n return this.files.every((f) => f.checksum === first)\n },\n matchStatus() {\n const states = {\n null: { icon: '$info', color: 'grey', text: 'Comparing...' },\n true: { icon: '$success', color: 'success', text: 'Checksums Match' },\n false: {\n icon: '$error',\n color: 'error',\n text: this.files.some((f) => f.error)\n ? 'Error loading file(s)'\n : 'Checksums Do Not Match',\n },\n }\n return states[this.match]\n },\n },\n created() {\n this.files = this.parameters\n .filter((p) => p)\n .map((path) => ({ path, checksum: null, error: null, copied: false }))\n },\n mounted() {\n if (this.files.length) {\n this.fetchChecksums()\n }\n },\n methods: {\n getDisplayText(file) {\n if (file.error) return `Error: ${file.error}`\n if (file.checksum) return file.checksum\n if (this.loading) return 'Loading...'\n return 'Not loaded'\n },\n async computeChecksum(content) {\n const encoder = new TextEncoder()\n const data = encoder.encode(content)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n },\n async fetchFile(filePath) {\n const scope = window.openc3Scope || 'DEFAULT'\n let objectPath = `${scope}/targets_modified/${filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n return atob(response.data.contents)\n }\n throw new Error('File not found')\n },\n async copyChecksum(file) {\n if (!file.checksum) return\n try {\n await navigator.clipboard.writeText(file.checksum)\n file.copied = true\n setTimeout(() => (file.copied = false), 2000)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Failed to copy checksum:', err)\n }\n },\n async fetchChecksums() {\n this.loading = true\n this.files.forEach((f) => {\n f.checksum = null\n f.error = null\n })\n\n const results = await Promise.all(\n this.files.map((file) =>\n this.fetchFile(file.path)\n .then((content) => this.computeChecksum(content))\n .catch((err) => ({ error: err.message || 'File not found' })),\n ),\n )\n\n results.forEach((result, i) => {\n if (result?.error) {\n this.files[i].error = result.error\n } else {\n this.files[i].checksum = result\n }\n })\n\n this.loading = false\n },\n },\n}\n</script>\n\n<style scoped>\n.overflow-wrap-anywhere {\n overflow-wrap: anywhere;\n}\n</style>\n"],"names":["_sfc_main","Widget","f","first","p","path","file","content","data","hashBuffer","b","filePath","scope","objectPath","response","Api","_a","err","result","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text","_openBlock","_createElementBlock","_Fragment","_renderList","index","_createTextVNode","_component_v_sheet","_normalizeClass","$event","_component_v_chip"],"mappings":";;;;AAgFA,MAAKA,IAAU;AAAA,EACb,QAAQ,CAACC,CAAM;AAAA,EACf,OAAO;AACL,WAAO;AAAA,MACL,OAAO,CAAA;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AACN,UAAI,KAAK,MAAM,KAAK,CAACC,MAAMA,EAAE,KAAK,EAAG,QAAO;AAC5C,UAAI,KAAK,MAAM,KAAK,CAACA,MAAM,CAACA,EAAE,QAAQ,EAAG,QAAO;AAChD,YAAMC,IAAQ,KAAK,MAAM,CAAC,EAAE;AAC5B,aAAO,KAAK,MAAM,MAAM,CAACD,MAAMA,EAAE,aAAaC,CAAK;AAAA,IACrD;AAAA,IACA,cAAc;AAYZ,aAXe;AAAA,QACb,MAAM,EAAE,MAAM,SAAS,OAAO,QAAQ,MAAM,eAAa;AAAA,QACzD,MAAM,EAAE,MAAM,YAAY,OAAO,WAAW,MAAM,kBAAgB;AAAA,QAClE,OAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,UACP,MAAM,KAAK,MAAM,KAAK,CAACD,MAAMA,EAAE,KAAK,IAChC,0BACA;AAAA;MAER,EACc,KAAK,KAAK;AAAA,IAC1B;AAAA;EAEF,UAAU;AACR,SAAK,QAAQ,KAAK,WACf,OAAO,CAACE,MAAMA,CAAC,EACf,IAAI,CAACC,OAAU,EAAE,MAAAA,GAAM,UAAU,MAAM,OAAO,MAAM,QAAQ,KAAQ;AAAA,EACzE;AAAA,EACA,UAAU;AACR,IAAI,KAAK,MAAM,UACb,KAAK,eAAc;AAAA,EAEvB;AAAA,EACA,SAAS;AAAA,IACP,eAAeC,GAAM;AACnB,aAAIA,EAAK,QAAc,UAAUA,EAAK,KAAK,KACvCA,EAAK,WAAiBA,EAAK,WAC3B,KAAK,UAAgB,eAClB;AAAA,IACT;AAAA,IACA,MAAM,gBAAgBC,GAAS;AAE7B,YAAMC,IADU,IAAI,YAAW,EACV,OAAOD,CAAO,GAC7BE,IAAa,MAAM,OAAO,OAAO,OAAO,WAAWD,CAAI;AAE7D,aADkB,MAAM,KAAK,IAAI,WAAWC,CAAU,CAAC,EACtC,IAAI,CAACC,MAAMA,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA,IACtE;AAAA,IACA,MAAM,UAAUC,GAAU;;AACxB,YAAMC,IAAQ,OAAO,eAAe;AACpC,UAAIC,IAAa,GAAGD,CAAK,qBAAqBD,CAAQ,IAClDG,IAAW,MAAMC,EAAI;AAAA,QACvB,qCAAqC,mBAAmBF,CAAU,CAAC;AAAA,QACnE;AAAA,UACE,QAAQ,EAAE,QAAQ;UAClB,SAAS,EAAE,iBAAiB;;MAEhC,EAAE,MAAM,MAAM,IAAI;AAUlB,WARI,CAACC,KAAYA,EAAS,WAAW,SACnCD,IAAa,GAAGD,CAAK,YAAYD,CAAQ,IACzCG,IAAW,MAAMC,EAAI;AAAA,QACnB,qCAAqC,mBAAmBF,CAAU,CAAC;AAAA,QACnE,EAAE,QAAQ,EAAE,QAAQ;MACtB,KAGEG,IAAAF,KAAA,gBAAAA,EAAU,SAAV,QAAAE,EAAgB;AAClB,eAAO,KAAKF,EAAS,KAAK,QAAQ;AAEpC,YAAM,IAAI,MAAM,gBAAgB;AAAA,IAClC;AAAA,IACA,MAAM,aAAaR,GAAM;AACvB,UAAKA,EAAK;AACV,YAAI;AACF,gBAAM,UAAU,UAAU,UAAUA,EAAK,QAAQ,GACjDA,EAAK,SAAS,IACd,WAAW,MAAOA,EAAK,SAAS,IAAQ,GAAI;AAAA,QAC9C,SAASW,GAAK;AAEZ,kBAAQ,MAAM,4BAA4BA,CAAG;AAAA,QAC/C;AAAA,IACF;AAAA,IACA,MAAM,iBAAiB;AACrB,WAAK,UAAU,IACf,KAAK,MAAM,QAAQ,CAACf,MAAM;AACxB,QAAAA,EAAE,WAAW,MACbA,EAAE,QAAQ;AAAA,MACZ,CAAC,IAEe,MAAM,QAAQ;AAAA,QAC5B,KAAK,MAAM;AAAA,UAAI,CAACI,MACd,KAAK,UAAUA,EAAK,IAAI,EACrB,KAAK,CAACC,MAAY,KAAK,gBAAgBA,CAAO,CAAC,EAC/C,MAAM,CAACU,OAAS,EAAE,OAAOA,EAAI,WAAW,iBAAe,EAAI;AAAA;MAElE,GAEQ,QAAQ,CAACC,GAAQC,MAAM;AAC7B,QAAID,KAAA,QAAAA,EAAQ,QACV,KAAK,MAAMC,CAAC,EAAE,QAAQD,EAAO,QAE7B,KAAK,MAAMC,CAAC,EAAE,WAAWD;AAAA,MAE7B,CAAC,GAED,KAAK,UAAU;AAAA,IACjB;AAAA;AAEJ,GA9KYE,IAAA,EAAA,OAAM,wDAAuD,GAe5DC,IAAA,EAAA,OAAM,yCAAwC,GAE3CC,IAAA,EAAA,OAAM,0BAAyB,GAO/BC,IAAA,EAAA,OAAM,qCAAoC;;;cA1BxDC,EAsDSC,GAAA;AAAA,IAtDA,SAAOC,EAAA,aAAa;AAAA,IAAE,aAAU;AAAA;eACvC,MAYe;AAAA,MAZfC,EAYeC,GAAA,EAZD,OAAM,2BAA0B,GAAA;AAAA,mBAC5C,MAEO;AAAA,UAFPC,EAEO,QAFPT,GAEOU,EADFC,EAAA,MAAM,WAAM,IAAA,kBAAA,0BAAA,GAAA,CAAA;AAAA,UAEjBJ,EAAYK,CAAA;AAAA,UACZL,EAMEM,GAAA;AAAA,YALA,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAQ;AAAA,YACP,SAASF,EAAA;AAAA,YACT,SAAOG,EAAA;AAAA;;;;MAGZP,EAAaQ,CAAA;AAAA,MACbR,EAsCcS,GAAA,EAtCD,OAAM,OAAM,GAAA;AAAA,mBACb,MAA8B;AAAA,WAAxCC,EAAA,EAAA,GAAAC,EAuBWC,GAAA,MAAAC,EAvBuBT,EAAA,OAAK,CAArBzB,GAAMmC,wBAAuBA,KAAK;AAAA,YAClDZ,EAGM,OAHNR,GAGM;AAAA,cAFDqB,EAAAZ,EAAAC,EAAA,MAAM,WAAM,IAAA,UAAA,QAA2BU,YAAe,KACzD,CAAA;AAAA,cAAAZ,EAA4D,QAA5DP,GAA4DQ,EAAnBxB,EAAK,IAAI,GAAA,CAAA;AAAA;YAEpDqB,EAiBUgB,GAAA;AAAA,cAhBP,OAAKC,EAAA,CAAEtC,EAAK,2BACP,8DAA8D,CAAA;AAAA,cACpE,OAAA,EAAA,oBAAA,2BAAA;AAAA;yBAEA,MAEO;AAAA,gBAFPuB,EAEO,QAFPN,GAEOO,EADFI,EAAA,eAAe5B,CAAI,CAAA,GAAA,CAAA;AAAA,gBAExBqB,EAQEM,GAAA;AAAA,kBAPC,MAAM3B,EAAK,SAAM,aAAA;AAAA,kBACjB,OAAOA,EAAK,qBAAqB;AAAA,kBACjC,UAAQ,CAAGA,EAAK;AAAA,kBACjB,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAQ;AAAA,kBACP,SAAK,CAAAuC,MAAEX,EAAA,aAAa5B,CAAI;AAAA;;;;;UAKfyB,EAAA,MAAM,SAAM,UAA5BO,EAWWC,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,YAVTZ,EAA0BQ,GAAA,EAAf,OAAM,OAAM,CAAA;AAAA,YACvBR,EAQSmB,GAAA;AAAA,cAPN,OAAOZ,EAAA,YAAY;AAAA,cACpB,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,OAAA;AAAA,cACC,gBAAcA,EAAA,YAAY;AAAA;yBAE3B,MAAsB;AAAA,gBAAnBQ,EAAAZ,EAAAI,EAAA,YAAY,IAAI,GAAA,CAAA;AAAA;;;;;;;;;;;;"}
1
+ {"version":3,"file":"FilechecksumWidget-Cxu-88vM.js","sources":["../src/widgets/FilechecksumWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card :style=\"computedStyle\" min-width=\"400\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ files.length === 1 ? 'File Checksum' : 'File Checksum Comparison' }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchChecksums\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-3\">\n <template v-for=\"(file, index) in files\" :key=\"index\">\n <div class=\"text-caption text-medium-emphasis mb-2\">\n {{ files.length === 1 ? 'File:' : `File ${index + 1}:` }}\n <span class=\"ml-1 text-high-emphasis\">{{ file.path }}</span>\n </div>\n <v-sheet\n :class=\"file.error ? 'text-error' : ''\"\n class=\"d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption\"\n style=\"background-color: rgba(128, 128, 128, 0.2)\"\n >\n <span class=\"flex-grow-1 overflow-wrap-anywhere\">\n {{ getDisplayText(file) }}\n </span>\n <v-btn\n :icon=\"file.copied ? '$success' : 'mdi-content-copy'\"\n :color=\"file.copied ? 'success' : undefined\"\n :disabled=\"!file.checksum\"\n size=\"x-small\"\n variant=\"plain\"\n density=\"compact\"\n @click=\"copyChecksum(file)\"\n />\n </v-sheet>\n </template>\n\n <template v-if=\"files.length > 1\">\n <v-divider class=\"mb-3\" />\n <v-chip\n :color=\"matchStatus.color\"\n size=\"small\"\n variant=\"tonal\"\n label\n :prepend-icon=\"matchStatus.icon\"\n >\n {{ matchStatus.text }}\n </v-chip>\n </template>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n files: [],\n loading: false,\n }\n },\n computed: {\n match() {\n if (this.files.some((f) => f.error)) return false\n if (this.files.some((f) => !f.checksum)) return null\n const first = this.files[0].checksum\n return this.files.every((f) => f.checksum === first)\n },\n matchStatus() {\n const states = {\n null: { icon: '$info', color: 'grey', text: 'Comparing...' },\n true: { icon: '$success', color: 'success', text: 'Checksums Match' },\n false: {\n icon: '$error',\n color: 'error',\n text: this.files.some((f) => f.error)\n ? 'Error loading file(s)'\n : 'Checksums Do Not Match',\n },\n }\n return states[this.match]\n },\n },\n created() {\n this.files = this.parameters\n .filter((p) => p)\n .map((path) => ({ path, checksum: null, error: null, copied: false }))\n },\n mounted() {\n if (this.files.length) {\n this.fetchChecksums()\n }\n },\n methods: {\n getDisplayText(file) {\n if (file.error) return `Error: ${file.error}`\n if (file.checksum) return file.checksum\n if (this.loading) return 'Loading...'\n return 'Not loaded'\n },\n async computeChecksum(content) {\n const encoder = new TextEncoder()\n const data = encoder.encode(content)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n },\n async fetchFile(filePath) {\n const scope = window.openc3Scope || 'DEFAULT'\n let objectPath = `${scope}/targets_modified/${filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n return atob(response.data.contents)\n }\n throw new Error('File not found')\n },\n async copyChecksum(file) {\n if (!file.checksum) return\n try {\n await navigator.clipboard.writeText(file.checksum)\n file.copied = true\n setTimeout(() => (file.copied = false), 2000)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Failed to copy checksum:', err)\n }\n },\n async fetchChecksums() {\n this.loading = true\n this.files.forEach((f) => {\n f.checksum = null\n f.error = null\n })\n\n const results = await Promise.all(\n this.files.map((file) =>\n this.fetchFile(file.path)\n .then((content) => this.computeChecksum(content))\n .catch((err) => ({ error: err.message || 'File not found' })),\n ),\n )\n\n results.forEach((result, i) => {\n if (result?.error) {\n this.files[i].error = result.error\n } else {\n this.files[i].checksum = result\n }\n })\n\n this.loading = false\n },\n },\n}\n</script>\n\n<style scoped>\n.overflow-wrap-anywhere {\n overflow-wrap: anywhere;\n}\n</style>\n"],"names":["_sfc_main","Widget","f","first","p","path","file","content","data","hashBuffer","b","filePath","scope","objectPath","response","Api","_a","err","result","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text","_openBlock","_createElementBlock","_Fragment","_renderList","index","_createTextVNode","_component_v_sheet","_normalizeClass","$event","_component_v_chip"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-CX-SWpru.cjs"),m=require("./Widget-DdxHKVWn.cjs"),e=require("vue"),_=require("./CustomIcon-CEc927h0.cjs"),u={mixins:[m.Widget],data(){return{filePath:"",fileContent:"Loading...",loading:!1,width:600,height:300,editor:null}},computed:{contentStyle(){return{width:this.width+"px",height:this.height+"px"}},aceMode(){var o;const r=(o=this.filePath.split(".").pop())==null?void 0:o.toLowerCase();return{json:"ace/mode/json",rb:"ace/mode/ruby",py:"ace/mode/python",txt:"ace/mode/text"}[r]||"ace/mode/text"}},created(){this.parameters[0]&&(this.filePath=this.parameters[0]),this.parameters[1]&&(this.width=parseInt(this.parameters[1])),this.parameters[2]&&(this.height=parseInt(this.parameters[2]))},mounted(){this.editor=s.aceExports.edit(this.$refs.editor),this.editor.setTheme("ace/theme/twilight"),this.editor.setReadOnly(!0),this.editor.setShowPrintMargin(!1),this.editor.setHighlightActiveLine(!1),this.editor.renderer.setShowGutter(!1),this.editor.renderer.setScrollMargin(8,8,0,0),this.editor.renderer.setPadding(8),this.editor.setValue(this.fileContent,-1),this.filePath&&this.fetchFile()},beforeUnmount(){this.editor&&(this.editor.destroy(),this.editor.container.remove())},methods:{updateEditor(){this.editor&&(this.editor.session.setMode(this.aceMode),this.editor.setValue(this.fileContent,-1))},async fetchFile(){var r;if(!this.filePath){this.fileContent='Error: No file path specified. Usage: FILEDISPLAY "TARGET/path/to/file.txt"',this.updateEditor();return}this.loading=!0;try{const i=window.openc3Scope||"DEFAULT";let o=`${i}/targets_modified/${this.filePath}`,t=await s.fi.get(`/openc3-api/storage/download_file/${encodeURIComponent(o)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"},headers:{"Ignore-Errors":"404,500"}}).catch(()=>null);(!t||t.status===404)&&(o=`${i}/targets/${this.filePath}`,t=await s.fi.get(`/openc3-api/storage/download_file/${encodeURIComponent(o)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"}})),(r=t==null?void 0:t.data)!=null&&r.contents?this.fileContent=atob(t.data.contents):this.fileContent="Error: Could not load file"}catch(i){this.fileContent=`Error: ${i.message||i}`}finally{this.loading=!1,this.updateEditor()}}}},g={class:"text-caption text-medium-emphasis font-weight-regular"};function C(r,i,o,t,n,a){const d=e.resolveComponent("v-spacer"),l=e.resolveComponent("v-btn"),c=e.resolveComponent("v-card-title"),h=e.resolveComponent("v-divider"),p=e.resolveComponent("v-card-text"),f=e.resolveComponent("v-card");return e.openBlock(),e.createBlock(f,{style:e.normalizeStyle(r.computedStyle)},{default:e.withCtx(()=>[e.createVNode(c,{class:"d-flex align-center pa-2"},{default:e.withCtx(()=>[e.createElementVNode("span",g,e.toDisplayString(n.filePath),1),e.createVNode(d),e.createVNode(l,{size:"x-small",icon:"mdi-refresh",variant:"text",loading:n.loading,onClick:a.fetchFile},null,8,["loading","onClick"])]),_:1}),e.createVNode(h),e.createVNode(p,{class:"pa-0"},{default:e.withCtx(()=>[e.createElementVNode("div",{ref:"editor",style:e.normalizeStyle(a.contentStyle)},null,4)]),_:1})]),_:1},8,["style"])}const v=_._export_sfc(u,[["render",C]]);exports.default=v;
2
- //# sourceMappingURL=FiledisplayWidget-CYX4HChi.cjs.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-COA1HwFc.cjs"),m=require("./Widget-BUhqs-wN.cjs"),e=require("vue"),_=require("./CustomIcon-CEc927h0.cjs"),u={mixins:[m.Widget],data(){return{filePath:"",fileContent:"Loading...",loading:!1,width:600,height:300,editor:null}},computed:{contentStyle(){return{width:this.width+"px",height:this.height+"px"}},aceMode(){var o;const r=(o=this.filePath.split(".").pop())==null?void 0:o.toLowerCase();return{json:"ace/mode/json",rb:"ace/mode/ruby",py:"ace/mode/python",txt:"ace/mode/text"}[r]||"ace/mode/text"}},created(){this.parameters[0]&&(this.filePath=this.parameters[0]),this.parameters[1]&&(this.width=parseInt(this.parameters[1])),this.parameters[2]&&(this.height=parseInt(this.parameters[2]))},mounted(){this.editor=s.aceExports.edit(this.$refs.editor),this.editor.setTheme("ace/theme/twilight"),this.editor.setReadOnly(!0),this.editor.setShowPrintMargin(!1),this.editor.setHighlightActiveLine(!1),this.editor.renderer.setShowGutter(!1),this.editor.renderer.setScrollMargin(8,8,0,0),this.editor.renderer.setPadding(8),this.editor.setValue(this.fileContent,-1),this.filePath&&this.fetchFile()},beforeUnmount(){this.editor&&(this.editor.destroy(),this.editor.container.remove())},methods:{updateEditor(){this.editor&&(this.editor.session.setMode(this.aceMode),this.editor.setValue(this.fileContent,-1))},async fetchFile(){var r;if(!this.filePath){this.fileContent='Error: No file path specified. Usage: FILEDISPLAY "TARGET/path/to/file.txt"',this.updateEditor();return}this.loading=!0;try{const i=window.openc3Scope||"DEFAULT";let o=`${i}/targets_modified/${this.filePath}`,t=await s.Ei.get(`/openc3-api/storage/download_file/${encodeURIComponent(o)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"},headers:{"Ignore-Errors":"404,500"}}).catch(()=>null);(!t||t.status===404)&&(o=`${i}/targets/${this.filePath}`,t=await s.Ei.get(`/openc3-api/storage/download_file/${encodeURIComponent(o)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"}})),(r=t==null?void 0:t.data)!=null&&r.contents?this.fileContent=atob(t.data.contents):this.fileContent="Error: Could not load file"}catch(i){this.fileContent=`Error: ${i.message||i}`}finally{this.loading=!1,this.updateEditor()}}}},g={class:"text-caption text-medium-emphasis font-weight-regular"};function C(r,i,o,t,n,a){const d=e.resolveComponent("v-spacer"),l=e.resolveComponent("v-btn"),c=e.resolveComponent("v-card-title"),h=e.resolveComponent("v-divider"),p=e.resolveComponent("v-card-text"),f=e.resolveComponent("v-card");return e.openBlock(),e.createBlock(f,{style:e.normalizeStyle(r.computedStyle)},{default:e.withCtx(()=>[e.createVNode(c,{class:"d-flex align-center pa-2"},{default:e.withCtx(()=>[e.createElementVNode("span",g,e.toDisplayString(n.filePath),1),e.createVNode(d),e.createVNode(l,{size:"x-small",icon:"mdi-refresh",variant:"text",loading:n.loading,onClick:a.fetchFile},null,8,["loading","onClick"])]),_:1}),e.createVNode(h),e.createVNode(p,{class:"pa-0"},{default:e.withCtx(()=>[e.createElementVNode("div",{ref:"editor",style:e.normalizeStyle(a.contentStyle)},null,4)]),_:1})]),_:1},8,["style"])}const v=_._export_sfc(u,[["render",C]]);exports.default=v;
2
+ //# sourceMappingURL=FiledisplayWidget-BNCoMpUN.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FiledisplayWidget-CYX4HChi.cjs","sources":["../src/widgets/FiledisplayWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card :style=\"computedStyle\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ filePath }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchFile\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-0\">\n <div ref=\"editor\" :style=\"contentStyle\"></div>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n filePath: '',\n fileContent: 'Loading...',\n loading: false,\n width: 600,\n height: 300,\n editor: null,\n }\n },\n computed: {\n contentStyle() {\n return {\n width: this.width + 'px',\n height: this.height + 'px',\n }\n },\n aceMode() {\n const ext = this.filePath.split('.').pop()?.toLowerCase()\n const modeMap = {\n json: 'ace/mode/json',\n rb: 'ace/mode/ruby',\n py: 'ace/mode/python',\n txt: 'ace/mode/text',\n }\n return modeMap[ext] || 'ace/mode/text'\n },\n },\n created() {\n // Parameter 0: File path (required) e.g. \"INST/procedures/test.txt\"\n // Parameter 1: Width (optional, default 600)\n // Parameter 2: Height (optional, default 300)\n if (this.parameters[0]) {\n this.filePath = this.parameters[0]\n }\n if (this.parameters[1]) {\n this.width = parseInt(this.parameters[1])\n }\n if (this.parameters[2]) {\n this.height = parseInt(this.parameters[2])\n }\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.setReadOnly(true)\n this.editor.setShowPrintMargin(false)\n this.editor.setHighlightActiveLine(false)\n this.editor.renderer.setShowGutter(false)\n this.editor.renderer.setScrollMargin(8, 8, 0, 0)\n this.editor.renderer.setPadding(8)\n this.editor.setValue(this.fileContent, -1)\n\n if (this.filePath) {\n this.fetchFile()\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n this.editor.container.remove()\n }\n },\n methods: {\n updateEditor() {\n if (this.editor) {\n this.editor.session.setMode(this.aceMode)\n this.editor.setValue(this.fileContent, -1)\n }\n },\n async fetchFile() {\n if (!this.filePath) {\n this.fileContent =\n 'Error: No file path specified. Usage: FILEDISPLAY \"TARGET/path/to/file.txt\"'\n this.updateEditor()\n return\n }\n this.loading = true\n try {\n const scope = window.openc3Scope || 'DEFAULT'\n // Try targets_modified first, then fall back to targets\n // Use Ignore-Errors header to suppress toast for expected 404/500\n let objectPath = `${scope}/targets_modified/${this.filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${this.filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n this.fileContent = atob(response.data.contents)\n } else {\n this.fileContent = 'Error: Could not load file'\n }\n } catch (error) {\n this.fileContent = `Error: ${error.message || error}`\n } finally {\n this.loading = false\n this.updateEditor()\n }\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ext","_a","ace.edit","scope","objectPath","response","Api","error","_hoisted_1","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text"],"mappings":"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"}
1
+ {"version":3,"file":"FiledisplayWidget-BNCoMpUN.cjs","sources":["../src/widgets/FiledisplayWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card :style=\"computedStyle\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ filePath }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchFile\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-0\">\n <div ref=\"editor\" :style=\"contentStyle\"></div>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n filePath: '',\n fileContent: 'Loading...',\n loading: false,\n width: 600,\n height: 300,\n editor: null,\n }\n },\n computed: {\n contentStyle() {\n return {\n width: this.width + 'px',\n height: this.height + 'px',\n }\n },\n aceMode() {\n const ext = this.filePath.split('.').pop()?.toLowerCase()\n const modeMap = {\n json: 'ace/mode/json',\n rb: 'ace/mode/ruby',\n py: 'ace/mode/python',\n txt: 'ace/mode/text',\n }\n return modeMap[ext] || 'ace/mode/text'\n },\n },\n created() {\n // Parameter 0: File path (required) e.g. \"INST/procedures/test.txt\"\n // Parameter 1: Width (optional, default 600)\n // Parameter 2: Height (optional, default 300)\n if (this.parameters[0]) {\n this.filePath = this.parameters[0]\n }\n if (this.parameters[1]) {\n this.width = parseInt(this.parameters[1])\n }\n if (this.parameters[2]) {\n this.height = parseInt(this.parameters[2])\n }\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.setReadOnly(true)\n this.editor.setShowPrintMargin(false)\n this.editor.setHighlightActiveLine(false)\n this.editor.renderer.setShowGutter(false)\n this.editor.renderer.setScrollMargin(8, 8, 0, 0)\n this.editor.renderer.setPadding(8)\n this.editor.setValue(this.fileContent, -1)\n\n if (this.filePath) {\n this.fetchFile()\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n this.editor.container.remove()\n }\n },\n methods: {\n updateEditor() {\n if (this.editor) {\n this.editor.session.setMode(this.aceMode)\n this.editor.setValue(this.fileContent, -1)\n }\n },\n async fetchFile() {\n if (!this.filePath) {\n this.fileContent =\n 'Error: No file path specified. Usage: FILEDISPLAY \"TARGET/path/to/file.txt\"'\n this.updateEditor()\n return\n }\n this.loading = true\n try {\n const scope = window.openc3Scope || 'DEFAULT'\n // Try targets_modified first, then fall back to targets\n // Use Ignore-Errors header to suppress toast for expected 404/500\n let objectPath = `${scope}/targets_modified/${this.filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${this.filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n this.fileContent = atob(response.data.contents)\n } else {\n this.fileContent = 'Error: Could not load file'\n }\n } catch (error) {\n this.fileContent = `Error: ${error.message || error}`\n } finally {\n this.loading = false\n this.updateEditor()\n }\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ext","_a","ace.edit","scope","objectPath","response","Api","error","_hoisted_1","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { f as l, a as C } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-D9LFRi0t.js";
2
- import { W as v } from "./Widget-6-Nvewdp.js";
3
- import { resolveComponent as s, createBlock as x, openBlock as y, normalizeStyle as h, withCtx as a, createVNode as r, createElementVNode as c, toDisplayString as w } from "vue";
4
- import { _ as E } from "./CustomIcon-B9m73Gqm.js";
1
+ import { E as l, a as C } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-8uBNo_8r.js";
2
+ import { W as v } from "./Widget-E_9ky7hf.js";
3
+ import { resolveComponent as s, createBlock as x, openBlock as E, normalizeStyle as h, withCtx as a, createVNode as r, createElementVNode as c, toDisplayString as y } from "vue";
4
+ import { _ as w } from "./CustomIcon-B9m73Gqm.js";
5
5
  const P = {
6
6
  mixins: [v],
7
7
  data() {
@@ -75,13 +75,13 @@ const P = {
75
75
  }, S = { class: "text-caption text-medium-emphasis font-weight-regular" };
76
76
  function b(o, e, i, t, n, d) {
77
77
  const p = s("v-spacer"), f = s("v-btn"), m = s("v-card-title"), _ = s("v-divider"), u = s("v-card-text"), g = s("v-card");
78
- return y(), x(g, {
78
+ return E(), x(g, {
79
79
  style: h(o.computedStyle)
80
80
  }, {
81
81
  default: a(() => [
82
82
  r(m, { class: "d-flex align-center pa-2" }, {
83
83
  default: a(() => [
84
- c("span", S, w(n.filePath), 1),
84
+ c("span", S, y(n.filePath), 1),
85
85
  r(p),
86
86
  r(f, {
87
87
  size: "x-small",
@@ -107,8 +107,8 @@ function b(o, e, i, t, n, d) {
107
107
  _: 1
108
108
  }, 8, ["style"]);
109
109
  }
110
- const N = /* @__PURE__ */ E(P, [["render", b]]);
110
+ const N = /* @__PURE__ */ w(P, [["render", b]]);
111
111
  export {
112
112
  N as default
113
113
  };
114
- //# sourceMappingURL=FiledisplayWidget-CqM549A4.js.map
114
+ //# sourceMappingURL=FiledisplayWidget-UimFPng3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FiledisplayWidget-CqM549A4.js","sources":["../src/widgets/FiledisplayWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card :style=\"computedStyle\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ filePath }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchFile\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-0\">\n <div ref=\"editor\" :style=\"contentStyle\"></div>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n filePath: '',\n fileContent: 'Loading...',\n loading: false,\n width: 600,\n height: 300,\n editor: null,\n }\n },\n computed: {\n contentStyle() {\n return {\n width: this.width + 'px',\n height: this.height + 'px',\n }\n },\n aceMode() {\n const ext = this.filePath.split('.').pop()?.toLowerCase()\n const modeMap = {\n json: 'ace/mode/json',\n rb: 'ace/mode/ruby',\n py: 'ace/mode/python',\n txt: 'ace/mode/text',\n }\n return modeMap[ext] || 'ace/mode/text'\n },\n },\n created() {\n // Parameter 0: File path (required) e.g. \"INST/procedures/test.txt\"\n // Parameter 1: Width (optional, default 600)\n // Parameter 2: Height (optional, default 300)\n if (this.parameters[0]) {\n this.filePath = this.parameters[0]\n }\n if (this.parameters[1]) {\n this.width = parseInt(this.parameters[1])\n }\n if (this.parameters[2]) {\n this.height = parseInt(this.parameters[2])\n }\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.setReadOnly(true)\n this.editor.setShowPrintMargin(false)\n this.editor.setHighlightActiveLine(false)\n this.editor.renderer.setShowGutter(false)\n this.editor.renderer.setScrollMargin(8, 8, 0, 0)\n this.editor.renderer.setPadding(8)\n this.editor.setValue(this.fileContent, -1)\n\n if (this.filePath) {\n this.fetchFile()\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n this.editor.container.remove()\n }\n },\n methods: {\n updateEditor() {\n if (this.editor) {\n this.editor.session.setMode(this.aceMode)\n this.editor.setValue(this.fileContent, -1)\n }\n },\n async fetchFile() {\n if (!this.filePath) {\n this.fileContent =\n 'Error: No file path specified. Usage: FILEDISPLAY \"TARGET/path/to/file.txt\"'\n this.updateEditor()\n return\n }\n this.loading = true\n try {\n const scope = window.openc3Scope || 'DEFAULT'\n // Try targets_modified first, then fall back to targets\n // Use Ignore-Errors header to suppress toast for expected 404/500\n let objectPath = `${scope}/targets_modified/${this.filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${this.filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n this.fileContent = atob(response.data.contents)\n } else {\n this.fileContent = 'Error: Could not load file'\n }\n } catch (error) {\n this.fileContent = `Error: ${error.message || error}`\n } finally {\n this.loading = false\n this.updateEditor()\n }\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ext","_a","ace.edit","scope","objectPath","response","Api","error","_hoisted_1","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text"],"mappings":"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"}
1
+ {"version":3,"file":"FiledisplayWidget-UimFPng3.js","sources":["../src/widgets/FiledisplayWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card :style=\"computedStyle\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ filePath }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchFile\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-0\">\n <div ref=\"editor\" :style=\"contentStyle\"></div>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n filePath: '',\n fileContent: 'Loading...',\n loading: false,\n width: 600,\n height: 300,\n editor: null,\n }\n },\n computed: {\n contentStyle() {\n return {\n width: this.width + 'px',\n height: this.height + 'px',\n }\n },\n aceMode() {\n const ext = this.filePath.split('.').pop()?.toLowerCase()\n const modeMap = {\n json: 'ace/mode/json',\n rb: 'ace/mode/ruby',\n py: 'ace/mode/python',\n txt: 'ace/mode/text',\n }\n return modeMap[ext] || 'ace/mode/text'\n },\n },\n created() {\n // Parameter 0: File path (required) e.g. \"INST/procedures/test.txt\"\n // Parameter 1: Width (optional, default 600)\n // Parameter 2: Height (optional, default 300)\n if (this.parameters[0]) {\n this.filePath = this.parameters[0]\n }\n if (this.parameters[1]) {\n this.width = parseInt(this.parameters[1])\n }\n if (this.parameters[2]) {\n this.height = parseInt(this.parameters[2])\n }\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.setReadOnly(true)\n this.editor.setShowPrintMargin(false)\n this.editor.setHighlightActiveLine(false)\n this.editor.renderer.setShowGutter(false)\n this.editor.renderer.setScrollMargin(8, 8, 0, 0)\n this.editor.renderer.setPadding(8)\n this.editor.setValue(this.fileContent, -1)\n\n if (this.filePath) {\n this.fetchFile()\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n this.editor.container.remove()\n }\n },\n methods: {\n updateEditor() {\n if (this.editor) {\n this.editor.session.setMode(this.aceMode)\n this.editor.setValue(this.fileContent, -1)\n }\n },\n async fetchFile() {\n if (!this.filePath) {\n this.fileContent =\n 'Error: No file path specified. Usage: FILEDISPLAY \"TARGET/path/to/file.txt\"'\n this.updateEditor()\n return\n }\n this.loading = true\n try {\n const scope = window.openc3Scope || 'DEFAULT'\n // Try targets_modified first, then fall back to targets\n // Use Ignore-Errors header to suppress toast for expected 404/500\n let objectPath = `${scope}/targets_modified/${this.filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${this.filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n this.fileContent = atob(response.data.contents)\n } else {\n this.fileContent = 'Error: Could not load file'\n }\n } catch (error) {\n this.fileContent = `Error: ${error.message || error}`\n } finally {\n this.loading = false\n this.updateEditor()\n }\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ext","_a","ace.edit","scope","objectPath","response","Api","error","_hoisted_1","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { W as a } from "./Widget-6-Nvewdp.js";
2
- import n from "./ValueWidget-BI3uXmda.js";
3
- import { resolveComponent as o, createElementBlock as m, openBlock as i, normalizeStyle as p, createVNode as c, mergeProps as l } from "vue";
1
+ import { W as a } from "./Widget-E_9ky7hf.js";
2
+ import o from "./ValueWidget-CD-gsoJa.js";
3
+ import { resolveComponent as n, createElementBlock as i, openBlock as m, normalizeStyle as p, createVNode as c, mergeProps as l } from "vue";
4
4
  import { _ as d } from "./CustomIcon-B9m73Gqm.js";
5
- const t = 4, u = {
5
+ const t = 4, f = {
6
6
  components: {
7
- ValueWidget: n
7
+ ValueWidget: o
8
8
  },
9
9
  mixins: [a],
10
10
  computed: {
@@ -23,11 +23,13 @@ const t = 4, u = {
23
23
  "ch",
24
24
  12 + t
25
25
  );
26
+ const e = this.parameters[3];
27
+ e && /%-?#?\d*[xXo]/.test(e) && this.appliedSettings.push(["RAW", "font-family", "monospace"]);
26
28
  }
27
29
  };
28
- function f(e, g, h, v, _, r) {
29
- const s = o("value-widget");
30
- return i(), m("div", {
30
+ function u(e, g, h, v, _, r) {
31
+ const s = n("value-widget");
32
+ return m(), i("div", {
31
33
  ref: "container",
32
34
  class: "d-flex flex-row",
33
35
  style: p(e.computedStyle)
@@ -41,8 +43,8 @@ function f(e, g, h, v, _, r) {
41
43
  }), null, 16, ["parameters", "settings", "screen-values", "screen-time-zone", "format-string"])
42
44
  ], 4);
43
45
  }
44
- const y = /* @__PURE__ */ d(u, [["render", f]]);
46
+ const $ = /* @__PURE__ */ d(f, [["render", u]]);
45
47
  export {
46
- y as default
48
+ $ as default
47
49
  };
48
- //# sourceMappingURL=FormatvalueWidget-BEwH0C7S.js.map
50
+ //# sourceMappingURL=FormatvalueWidget-Ct3waryv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormatvalueWidget-BEwH0C7S.js","sources":["../src/widgets/FormatvalueWidget.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\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"getParameters\"\n :settings=\"appliedSettings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :format-string=\"parameters[3]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\nimport Widget from './Widget'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n components: {\n ValueWidget,\n },\n mixins: [Widget],\n computed: {\n getParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[4],\n ]\n },\n },\n created() {\n this.setWidth(\n parseInt(this.parameters[5]) + INPUT_PADDING,\n 'ch',\n 12 + INPUT_PADDING,\n )\n },\n}\n</script>\n"],"names":["INPUT_PADDING","_sfc_main","ValueWidget","Widget","_createElementBlock","_ctx","_createVNode","_component_value_widget","_mergeProps","$options"],"mappings":";;;;AAsCA,MAAMA,IAAgB,GAIjBC,IAAU;AAAA,EACb,YAAY;AAAA,IACV,aAAAC;AAAA;EAEF,QAAQ,CAACC,CAAM;AAAA,EACf,UAAU;AAAA,IACR,gBAAgB;AACd,aAAO;AAAA,QACL,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,MACnB;AAAA,IACF;AAAA;EAEF,UAAU;AACR,SAAK;AAAA,MACH,SAAS,KAAK,WAAW,CAAC,CAAC,IAAIH;AAAA,MAC/B;AAAA,MACA,KAAKA;AAAA,IACP;AAAA,EACF;AACF;;;cAzCEI,EASM,OAAA;AAAA,IATD,KAAI;AAAA,IAAY,OAAM;AAAA,IAAmB,SAAOC,EAAA,aAAa;AAAA;IAChEC,EAOEC,GAPFC,EACUH,EAAA,QAAM;AAAA,MACb,YAAYI,EAAA;AAAA,MACZ,UAAUJ,EAAA;AAAA,MACV,iBAAeA,EAAA;AAAA,MACf,oBAAkBA,EAAA;AAAA,MAClB,iBAAeA,EAAA,WAAU,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"FormatvalueWidget-Ct3waryv.js","sources":["../src/widgets/FormatvalueWidget.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\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"getParameters\"\n :settings=\"appliedSettings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :format-string=\"parameters[3]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\nimport Widget from './Widget'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n components: {\n ValueWidget,\n },\n mixins: [Widget],\n computed: {\n getParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[4],\n ]\n },\n },\n created() {\n this.setWidth(\n parseInt(this.parameters[5]) + INPUT_PADDING,\n 'ch',\n 12 + INPUT_PADDING,\n )\n // Apply monospace font for hex/octal format strings so digits align\n const formatString = this.parameters[3]\n if (formatString && /%-?#?\\d*[xXo]/.test(formatString)) {\n this.appliedSettings.push(['RAW', 'font-family', 'monospace'])\n }\n },\n}\n</script>\n"],"names":["INPUT_PADDING","_sfc_main","ValueWidget","Widget","formatString","_createElementBlock","_ctx","_createVNode","_component_value_widget","_mergeProps","$options"],"mappings":";;;;AAsCA,MAAMA,IAAgB,GAIjBC,IAAU;AAAA,EACb,YAAY;AAAA,IACV,aAAAC;AAAA;EAEF,QAAQ,CAACC,CAAM;AAAA,EACf,UAAU;AAAA,IACR,gBAAgB;AACd,aAAO;AAAA,QACL,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,MACnB;AAAA,IACF;AAAA;EAEF,UAAU;AACR,SAAK;AAAA,MACH,SAAS,KAAK,WAAW,CAAC,CAAC,IAAIH;AAAA,MAC/B;AAAA,MACA,KAAKA;AAAA,IACP;AAEA,UAAMI,IAAe,KAAK,WAAW,CAAC;AACtC,IAAIA,KAAgB,gBAAgB,KAAKA,CAAY,KACnD,KAAK,gBAAgB,KAAK,CAAC,OAAO,eAAe,WAAW,CAAC;AAAA,EAEjE;AACF;;;cA9CEC,EASM,OAAA;AAAA,IATD,KAAI;AAAA,IAAY,OAAM;AAAA,IAAmB,SAAOC,EAAA,aAAa;AAAA;IAChEC,EAOEC,GAPFC,EACUH,EAAA,QAAM;AAAA,MACb,YAAYI,EAAA;AAAA,MACZ,UAAUJ,EAAA;AAAA,MACV,iBAAeA,EAAA;AAAA,MACf,oBAAkBA,EAAA;AAAA,MAClB,iBAAeA,EAAA,WAAU,CAAA;AAAA;;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./Widget-BUhqs-wN.cjs"),o=require("./ValueWidget-9DW9QZ_F.cjs"),t=require("vue"),i=require("./CustomIcon-CEc927h0.cjs"),r=4,c={components:{ValueWidget:o.default},mixins:[n.Widget],computed:{getParameters(){return[this.parameters[0],this.parameters[1],this.parameters[2],this.parameters[4]]}},created(){this.setWidth(parseInt(this.parameters[5])+r,"ch",12+r);const e=this.parameters[3];e&&/%-?#?\d*[xXo]/.test(e)&&this.appliedSettings.push(["RAW","font-family","monospace"])}};function m(e,p,u,d,g,s){const a=t.resolveComponent("value-widget");return t.openBlock(),t.createElementBlock("div",{ref:"container",class:"d-flex flex-row",style:t.normalizeStyle(e.computedStyle)},[t.createVNode(a,t.mergeProps(e.$attrs,{parameters:s.getParameters,settings:e.appliedSettings,"screen-values":e.screenValues,"screen-time-zone":e.screenTimeZone,"format-string":e.parameters[3]}),null,16,["parameters","settings","screen-values","screen-time-zone","format-string"])],4)}const l=i._export_sfc(c,[["render",m]]);exports.default=l;
2
+ //# sourceMappingURL=FormatvalueWidget-kOhazTdt.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormatvalueWidget-CpsyYKXD.cjs","sources":["../src/widgets/FormatvalueWidget.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\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"getParameters\"\n :settings=\"appliedSettings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :format-string=\"parameters[3]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\nimport Widget from './Widget'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n components: {\n ValueWidget,\n },\n mixins: [Widget],\n computed: {\n getParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[4],\n ]\n },\n },\n created() {\n this.setWidth(\n parseInt(this.parameters[5]) + INPUT_PADDING,\n 'ch',\n 12 + INPUT_PADDING,\n )\n },\n}\n</script>\n"],"names":["INPUT_PADDING","_sfc_main","ValueWidget","Widget","_createElementBlock","_ctx","_createVNode","_component_value_widget","_mergeProps","$options"],"mappings":"yNAsCMA,EAAgB,EAIjBC,EAAU,CACb,WAAY,aACVC,EAAAA,SAEF,OAAQ,CAACC,EAAAA,MAAM,EACf,SAAU,CACR,eAAgB,CACd,MAAO,CACL,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,CACnB,CACF,GAEF,SAAU,CACR,KAAK,SACH,SAAS,KAAK,WAAW,CAAC,CAAC,EAAIH,EAC/B,KACA,GAAKA,CACP,CACF,CACF,0FAzCEI,EAAAA,mBASM,MAAA,CATD,IAAI,YAAY,MAAM,kBAAmB,uBAAOC,EAAA,aAAa,IAChEC,EAAAA,YAOEC,EAPFC,aACUH,EAAA,OAAM,CACb,WAAYI,EAAA,cACZ,SAAUJ,EAAA,gBACV,gBAAeA,EAAA,aACf,mBAAkBA,EAAA,eAClB,gBAAeA,EAAA,WAAU,CAAA"}
1
+ {"version":3,"file":"FormatvalueWidget-kOhazTdt.cjs","sources":["../src/widgets/FormatvalueWidget.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\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"getParameters\"\n :settings=\"appliedSettings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :format-string=\"parameters[3]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\nimport Widget from './Widget'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n components: {\n ValueWidget,\n },\n mixins: [Widget],\n computed: {\n getParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[4],\n ]\n },\n },\n created() {\n this.setWidth(\n parseInt(this.parameters[5]) + INPUT_PADDING,\n 'ch',\n 12 + INPUT_PADDING,\n )\n // Apply monospace font for hex/octal format strings so digits align\n const formatString = this.parameters[3]\n if (formatString && /%-?#?\\d*[xXo]/.test(formatString)) {\n this.appliedSettings.push(['RAW', 'font-family', 'monospace'])\n }\n },\n}\n</script>\n"],"names":["INPUT_PADDING","_sfc_main","ValueWidget","Widget","formatString","_createElementBlock","_ctx","_createVNode","_component_value_widget","_mergeProps","$options"],"mappings":"yNAsCMA,EAAgB,EAIjBC,EAAU,CACb,WAAY,aACVC,EAAAA,SAEF,OAAQ,CAACC,EAAAA,MAAM,EACf,SAAU,CACR,eAAgB,CACd,MAAO,CACL,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,CACnB,CACF,GAEF,SAAU,CACR,KAAK,SACH,SAAS,KAAK,WAAW,CAAC,CAAC,EAAIH,EAC/B,KACA,GAAKA,CACP,EAEA,MAAMI,EAAe,KAAK,WAAW,CAAC,EAClCA,GAAgB,gBAAgB,KAAKA,CAAY,GACnD,KAAK,gBAAgB,KAAK,CAAC,MAAO,cAAe,WAAW,CAAC,CAEjE,CACF,0FA9CEC,EAAAA,mBASM,MAAA,CATD,IAAI,YAAY,MAAM,kBAAmB,uBAAOC,EAAA,aAAa,IAChEC,EAAAA,YAOEC,EAPFC,aACUH,EAAA,OAAM,CACb,WAAYI,EAAA,cACZ,SAAUJ,EAAA,gBACV,gBAAeA,EAAA,aACf,mBAAkBA,EAAA,eAClB,gBAAeA,EAAA,WAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ "use strict";const O=require("./timeFilters-CJFxfjqN.cjs"),Y=require("./OpenC3TimePicker-4kqB_Chf.cjs"),U=require("./TargetPacketItemChooser-B3riNx-5.cjs"),e=require("vue"),x=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-COA1HwFc.cjs"),E=require("./CustomIcon-CEc927h0.cjs"),I=require("./format-B22VpiOS.cjs"),M=require("./parse-DwfgQboe.cjs"),X={components:{OpenC3TimePicker:Y.OpenC3TimePicker,TargetPacketItemChooser:U.TargetPacketItemChooser},mixins:[O.TimeFilters],props:{modelValue:Boolean,title:{type:String,required:!0},legendPosition:{type:String,required:!0},items:{type:Array,required:!0},graphMinY:{type:Number,required:!0},graphMaxY:{type:Number,required:!0},lines:{type:Array,required:!0},colors:{type:Array,required:!0},startDateTime:{type:Number,default:null},endDateTime:{type:Number,default:null},timeZone:{type:String,required:!0},xAxisItemPacket:{type:Object,default:void 0},xAxisItem:{type:String,default:"__time"}},emits:["cancel","ok","remove","update:modelValue","update:xAxisItem"],data:function(){return{tab:0,graph:{},customXAxisEnabled:!1,selectedXAxisItem:null,pendingXAxisSelection:null,legendPositions:["top","bottom","left","right"],startDate:null,startTime:null,endDate:null,endTime:null,lineHeaders:[{title:"Y Value",value:"yValue"},{title:"Color",value:"color"},{title:"Actions",value:"actions",sortable:!1}],itemHeaders:[{title:"Target Name",value:"targetName"},{title:"Packet Name",value:"packetName"},{title:"Item Name",value:"itemName"},{title:"Actions",value:"actions",sortable:!1}],rules:{date:i=>{if(!i)return!0;try{return I.isValid(M.parse(i,"yyyy-MM-dd",new Date))||"Invalid date (YYYY-MM-DD)"}catch{return"Invalid date (YYYY-MM-DD)"}},time:i=>{if(!i)return!0;try{return I.isValid(M.parse(i,"HH:mm:ss",new Date))||"Invalid time (HH:MM:SS)"}catch{return"Invalid time (HH:MM:SS)"}}}}},computed:{show:{get(){return this.modelValue},set(i){this.$emit("update:modelValue",i)}},editItems:function(){if(!this.items)return[];let i=0;return this.items.map(t=>(i+=1,{...t,itemId:i}))},initialXAxisItem:function(){if(this.xAxisItem!=="__time")return this.xAxisItem.split("__").at(4)}},created(){if(this.graph={title:this.title,legendPosition:this.legendPosition,items:this.items,graphMinY:this.graphMinY,graphMaxY:this.graphMaxY,lines:[...this.lines]},this.customXAxisEnabled=this.xAxisItem&&this.xAxisItem!=="__time",this.selectedXAxisItem=this.xAxisItem,this.startDateTime){let i=I.toDate(this.startDateTime/1e6);this.startDate=this.formatDate(i,this.timeZone),this.startTime=this.formatTimeHMS(i,this.timeZone)}else{let i=new Date-36e5;this.startDate=this.formatDate(i,this.timeZone),this.startTime=this.formatTimeHMS(i,this.timeZone)}if(this.endDateTime){let i=I.toDate(this.endDateTime/1e6);this.endDate=this.formatDate(i,this.timeZone),this.endTime=this.formatTimeHMS(i,this.timeZone)}},methods:{closeOk(){this.startDate&&this.startTime?this.graph.startDateTime=this.startDate+" "+this.startTime:this.graph.startDateTime=null,this.endDate&&this.endTime?this.graph.endDateTime=this.endDate+" "+this.endTime:this.graph.endDateTime=null,this.$emit("ok",this.graph)},addLine(){this.graph.lines.push({yValue:0,color:"white"})},removeLine(i){let t=this.graph.lines.indexOf(i);this.graph.lines.splice(t,1)},customXAxisToggled(i){i||(this.selectedXAxisItem="__time",this.$emit("update:xAxisItem","__time"))},xAxisItemChanged(i){this.pendingXAxisSelection=i},xAxisItemSelected(i){if(i.targetName&&i.packetName&&i.itemName){const t=`DECOM__TLM__${i.targetName}__${i.packetName}__${i.itemName}__CONVERTED`;this.selectedXAxisItem=t,this.$emit("update:xAxisItem",t)}}}},z={class:"edit-box"},R={class:"edit-box"},H={class:"edit-box"},q={class:"edit-box"},W={class:"edit-box"};function K(i,t,s,a,l,o){const n=e.resolveComponent("v-spacer"),m=e.resolveComponent("v-toolbar"),p=e.resolveComponent("v-tab"),d=e.resolveComponent("v-tabs"),c=e.resolveComponent("v-text-field"),y=e.resolveComponent("v-card-text"),f=e.resolveComponent("v-col"),v=e.resolveComponent("v-select"),u=e.resolveComponent("v-row"),b=e.resolveComponent("OpenC3TimePicker"),w=e.resolveComponent("v-tabs-window-item"),g=e.resolveComponent("v-btn"),V=e.resolveComponent("v-list-item"),N=e.resolveComponent("v-list"),D=e.resolveComponent("v-checkbox"),_=e.resolveComponent("target-packet-item-chooser"),C=e.resolveComponent("v-data-table"),A=e.resolveComponent("v-tabs-window"),h=e.resolveComponent("v-card-actions"),L=e.resolveComponent("v-card"),B=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(B,{modelValue:o.show,"onUpdate:modelValue":t[13]||(t[13]=r=>o.show=r),persistent:"","max-width":"700",onKeydown:t[14]||(t[14]=e.withKeys(r=>i.$emit("cancel"),["esc"]))},{default:e.withCtx(()=>[e.createVNode(m,{height:"24"},{default:e.withCtx(()=>[e.createVNode(n),t[15]||(t[15]=e.createElementVNode("span",null," Edit Graph ",-1)),e.createVNode(n)]),_:1}),e.createVNode(L,{class:"pa-3"},{default:e.withCtx(()=>[e.createVNode(d,{modelValue:i.tab,"onUpdate:modelValue":t[0]||(t[0]=r=>i.tab=r),class:"ml-3"},{default:e.withCtx(()=>[e.createVNode(p,{value:"0"},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode(" Settings ",-1)])]),_:1}),e.createVNode(p,{value:"1"},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode(" Scale / Lines ",-1)])]),_:1}),e.createVNode(p,{value:"2"},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode(" Items ",-1)])]),_:1})]),_:1},8,["modelValue"]),e.createVNode(A,{modelValue:i.tab,"onUpdate:modelValue":t[11]||(t[11]=r=>i.tab=r)},{default:e.withCtx(()=>[e.createVNode(w,{value:"0",eager:""},{default:e.withCtx(()=>[e.createElementVNode("div",z,[e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(y,{class:"pa-0"},{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.graph.title,"onUpdate:modelValue":t[1]||(t[1]=r=>i.graph.title=r),class:"pb-2",label:"Title","hide-details":""},null,8,["modelValue"])]),_:1})]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(v,{modelValue:i.graph.legendPosition,"onUpdate:modelValue":t[2]||(t[2]=r=>i.graph.legendPosition=r),label:"Legend Position","hide-details":"",items:i.legendPositions,style:{"max-width":"280px"}},null,8,["modelValue","items"])]),_:1})]),_:1})]),e.createElementVNode("div",R,[e.createVNode(y,{class:"pa-0"},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode(" Select a start date/time for the graph. Leave blank for start now. ",-1)])]),_:1}),e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.startDate,"onUpdate:modelValue":t[3]||(t[3]=r=>i.startDate=r),label:"Start Date",name:`date${Date.now()}`,rules:[i.rules.date],type:"date"},null,8,["modelValue","name","rules"])]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(b,{modelValue:i.startTime,"onUpdate:modelValue":t[4]||(t[4]=r=>i.startTime=r),label:"Start Time",rules:[i.rules.time]},null,8,["modelValue","rules"])]),_:1})]),_:1}),e.createVNode(y,{class:"pa-0"},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode(" Select a end date/time for the graph. Leave blank for continuous real-time graphing. ",-1)])]),_:1}),e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.endDate,"onUpdate:modelValue":t[5]||(t[5]=r=>i.endDate=r),label:"End Date",name:`date${Date.now()}`,rules:[i.rules.date],type:"date"},null,8,["modelValue","name","rules"])]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(b,{modelValue:i.endTime,"onUpdate:modelValue":t[6]||(t[6]=r=>i.endTime=r),label:"End Time",rules:[i.rules.time]},null,8,["modelValue","rules"])]),_:1})]),_:1})])]),_:1}),e.createVNode(w,{value:"1",eager:""},{default:e.withCtx(()=>[e.createElementVNode("div",H,[e.createVNode(y,{class:"pa-0"},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode(" Set a min or max Y value to override automatic scaling ",-1)])]),_:1}),e.createVNode(u,{dense:""},{default:e.withCtx(()=>[e.createVNode(f,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.graph.graphMinY,"onUpdate:modelValue":t[7]||(t[7]=r=>i.graph.graphMinY=r),"hide-details":"",label:"Min Y Axis (Optional)",type:"number"},null,8,["modelValue"])]),_:1}),e.createVNode(f,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.graph.graphMaxY,"onUpdate:modelValue":t[8]||(t[8]=r=>i.graph.graphMaxY=r),"hide-details":"",label:"Max Y Axis (Optional)",type:"number"},null,8,["modelValue"])]),_:1})]),_:1})]),e.createElementVNode("div",q,[e.createVNode(N,{density:"compact",class:"horizontal-lines"},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>[t[23]||(t[23]=e.createElementVNode("span",{style:{"padding-top":"5px"}}," Add horizontal lines to the graph ",-1)),e.createVNode(n),e.createVNode(g,{onClick:t[9]||(t[9]=r=>o.addLine())},{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createTextVNode(" New Line ",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.graph.lines,(r,S)=>(e.openBlock(),e.createBlock(V,{key:S,value:r,color:"primary"},{default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(c,{modelValue:r.yValue,"onUpdate:modelValue":k=>r.yValue=k,label:"Y Value"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(v,{modelValue:r.color,"onUpdate:modelValue":k=>r.color=k,label:"Color","hide-details":"",items:s.colors},null,8,["modelValue","onUpdate:modelValue","items"])]),_:2},1024),e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(g,{style:{padding:"30px"},icon:"mdi-delete",variant:"text","aria-label":"Remove Line",onClick:k=>o.removeLine(r)},null,8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1032,["value"]))),128))]),_:1})]),e.createElementVNode("div",W,[e.createVNode(y,{class:"pa-0 text-medium-emphasis"},{default:e.withCtx(()=>[...t[24]||(t[24]=[e.createTextVNode(" Choose a different item to use for the graph's X axis. If unchecked, the graph will use the packet's PACKET_TIMESECONDS item if it exists, otherwise it will use RECEIVED_TIMESECONDS. ",-1),e.createElementVNode("br",null,null,-1),e.createElementVNode("span",{class:"font-italic"}," Note that the graph may not work correctly if you choose an item that does not strictly increase in value. It is recommended to use a counter or timestamp. ",-1)])]),_:1}),e.createVNode(D,{modelValue:i.customXAxisEnabled,"onUpdate:modelValue":[t[10]||(t[10]=r=>i.customXAxisEnabled=r),o.customXAxisToggled],disabled:!s.xAxisItemPacket,label:"Custom X axis item",density:"compact","hide-details":""},null,8,["modelValue","disabled","onUpdate:modelValue"]),s.xAxisItemPacket?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(y,{key:0,class:"pa-0 text-medium-emphasis"},{default:e.withCtx(()=>[...t[25]||(t[25]=[e.createTextVNode(" All items on the graph must be in the same packet to enable this feature. ",-1)])]),_:1})),i.customXAxisEnabled&&s.xAxisItemPacket?(e.openBlock(),e.createBlock(_,{key:1,"initial-target-name":s.xAxisItemPacket.targetName,"initial-packet-name":s.xAxisItemPacket.packetName,"initial-item-name":o.initialXAxisItem,"choose-item":"","lock-target":"","lock-packet":"","button-text":"Set",onOnSet:o.xAxisItemChanged,onAddItem:o.xAxisItemSelected},null,8,["initial-target-name","initial-packet-name","initial-item-name","onOnSet","onAddItem"])):e.createCommentVNode("",!0)])]),_:1}),e.createVNode(w,{value:"2",eager:""},{default:e.withCtx(()=>[e.createVNode(C,{"item-key":"itemId",class:"elevation-1 my-2","data-test":"edit-graph-items",headers:i.itemHeaders,items:o.editItems,"items-per-page":5,"footer-props":{"items-per-page-options":[5]}},{"item.actions":e.withCtx(({item:r})=>[e.createVNode(g,{icon:"mdi-delete",variant:"text","aria-label":"Remove Item",onClick:S=>i.$emit("remove",r)},null,8,["onClick"])]),"no-data":e.withCtx(()=>[...t[26]||(t[26]=[e.createElementVNode("span",null," Currently no items on this graph ",-1)])]),_:1},8,["headers","items"])]),_:1})]),_:1},8,["modelValue"]),e.createVNode(h,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(n),e.createVNode(g,{variant:"outlined",onClick:t[12]||(t[12]=r=>i.$emit("cancel"))},{default:e.withCtx(()=>[...t[27]||(t[27]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(g,{variant:"flat",onClick:o.closeOk},{default:e.withCtx(()=>[...t[28]||(t[28]=[e.createTextVNode(" Ok ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])}const P=E._export_sfc(X,[["render",K]]),j={props:{modelValue:Boolean,item:{type:Object,required:!0},colors:{type:Array,required:!0}},emits:["cancel","changeColor","changeLimits","close","update:modelValue"],data:function(){return{editItem:null,limitsName:"NONE",limits:{NONE:[]},valueTypes:["CONVERTED","RAW"],reduction:[{title:"NONE",value:"DECOM"},{title:"REDUCED_MINUTE",value:"REDUCED_MINUTE"},{title:"REDUCED_HOUR",value:"REDUCED_HOUR"},{title:"REDUCED_DAY",value:"REDUCED_DAY"}],reducedTypes:["MIN","MAX","AVG","STDDEV"]}},computed:{show:{get(){return this.modelValue},set(i){this.$emit("update:modelValue",i)}},limitsNames(){return Object.keys(this.limits)}},async created(){this.editItem={...this.item},new x.Oi().get_item(this.item.targetName,this.item.packetName,this.item.itemName).then(i=>{for(const[t,s]of Object.entries(i.limits))Object.keys(s).includes("red_low")&&(this.limits[t]=Object.values(s));this.limitsName=Object.keys(this.limits).find(t=>this.limits[t]+""==this.editItem.limits+"")})}},F={key:0},Z={class:"pa-3"};function J(i,t,s,a,l,o){const n=e.resolveComponent("v-card-title"),m=e.resolveComponent("v-select"),p=e.resolveComponent("v-card-text"),d=e.resolveComponent("v-spacer"),c=e.resolveComponent("v-btn"),y=e.resolveComponent("v-card-actions"),f=e.resolveComponent("v-card"),v=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(v,{modelValue:o.show,"onUpdate:modelValue":t[9]||(t[9]=u=>o.show=u),persistent:"",width:"400",onKeydown:[t[10]||(t[10]=e.withKeys(u=>i.success(),["enter"])),t[11]||(t[11]=e.withKeys(u=>i.$emit("cancel"),["esc"]))]},{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(n,{class:"mb-2"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Edit Item",-1)])]),_:1}),e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(m,{modelValue:i.editItem.valueType,"onUpdate:modelValue":t[0]||(t[0]=u=>i.editItem.valueType=u),variant:"outlined","hide-details":"",label:"Value Type",items:i.valueTypes,class:"mb-2"},null,8,["modelValue","items"]),e.createVNode(m,{modelValue:i.editItem.reduced,"onUpdate:modelValue":t[1]||(t[1]=u=>i.editItem.reduced=u),variant:"outlined","hide-details":"",label:"Reduction",items:i.reduction,class:"mb-2"},null,8,["modelValue","items"]),e.createVNode(m,{modelValue:i.editItem.reducedType,"onUpdate:modelValue":t[2]||(t[2]=u=>i.editItem.reducedType=u),variant:"outlined","hide-details":"",label:"Reduced Type",items:i.reducedTypes,disabled:i.editItem.reduced==="DECOM",class:"mb-2"},null,8,["modelValue","items","disabled"]),e.createVNode(m,{modelValue:i.editItem.color,"onUpdate:modelValue":[t[3]||(t[3]=u=>i.editItem.color=u),t[4]||(t[4]=u=>i.$emit("changeColor",u))],variant:"outlined","hide-details":"",label:"Color",items:s.colors,class:"mb-2"},null,8,["modelValue","items"]),o.limitsNames.length>1?(e.openBlock(),e.createElementBlock("div",F,[e.createVNode(m,{modelValue:i.limitsName,"onUpdate:modelValue":[t[5]||(t[5]=u=>i.limitsName=u),t[6]||(t[6]=u=>i.$emit("changeLimits",i.limits[i.limitsName]))],variant:"outlined","hide-details":"",label:"Display Limits",items:o.limitsNames},null,8,["modelValue","items"]),e.createElementVNode("div",Z,e.toDisplayString(i.limitsName)+": "+e.toDisplayString(i.limits[i.limitsName]),1)])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(y,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(d),e.createVNode(c,{variant:"outlined",onClick:t[7]||(t[7]=u=>i.$emit("cancel"))},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(c,{variant:"flat",onClick:t[8]||(t[8]=u=>i.$emit("close",i.editItem))},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode(" Ok ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])}const G=E._export_sfc(j,[["render",J]]),T="__time",Q={components:{GraphEditDialog:P,GraphEditItemDialog:G},mixins:[O.TimeFilters],props:{id:{type:Number,required:!0},selectedGraphId:{type:Number,default:null},state:{type:String,required:!0},startTime:{type:Number,default:null},secondsGraphed:{type:Number,required:!0},pointsSaved:{type:Number,required:!0},pointsGraphed:{type:Number,required:!0},refreshIntervalMs:{type:Number,default:200},hideToolbar:{type:Boolean,default:!1},hideOverview:{type:Boolean,default:!1},sparkline:{type:Boolean,default:!1},initialItems:{type:Array,default:()=>[]},initialXAxisItem:{type:String,default:T},height:{type:Number,default:null},width:{type:Number,default:null},timeZone:{type:String,default:"local"}},emits:["click","close-graph","edit","min-max-graph","pause","resize","start","started"],data(){return{api:null,lines:[],active:!0,expand:!0,fullWidth:!0,fullHeight:!0,graph:null,editGraph:!1,editGraphMenu:!1,editGraphMenuX:0,editGraphMenuY:0,editItem:!1,itemMenu:!1,itemMenuX:0,itemMenuY:0,legendMenu:!1,legendMenuX:0,legendMenuY:0,legendPosition:"bottom",selectedItem:null,hideToolbarData:this.hideToolbar,showOverview:!this.hideOverview,hideOverviewData:this.hideOverview,title:"",overview:null,data:[[]],dataChanged:!1,interval:null,graphMinY:null,graphMaxY:null,graphStartDateTime:null,graphEndDateTime:null,xAxisItem:this.initialXAxisItem,indexes:{},items:this.initialItems,graphItems:[],lastPlaybackDateTime:null,limitsValues:[],drawInterval:null,zoomChart:!1,zoomOverview:!1,cable:new x.xi,subscription:null,needToUpdate:!1,errorDialog:!1,errors:[],colorIndex:0,colors:["#00c7cb","#938bdb","#4dacff","lime","darkorange","red","gold","hotpink","tan","cyan","maroon","blue","teal","purple","green","brown","lightblue","white","black"]}},computed:{calcFullSize:function(){return this.fullWidth||this.fullHeight},error:function(){return this.errorDialog&&this.errors.length>0?JSON.stringify(this.errors,null,4):null},itemSubscriptionKeys:function(){return this.items.map(this.subscriptionKey)},allowableXAxisItemPacket:function(){if(!this.canUseCustomXAxisItem||this.items.length===0)return;const{targetName:i,packetName:t}=this.items[0];return{targetName:i,packetName:t}},canUseCustomXAxisItem:function(){if(this.items.length===0)return!0;const{targetName:i,packetName:t}=this.items[0];return this.items.every(s=>s.targetName===i&&s.packetName===t)},actualXAxisItem:function(){return this.canUseCustomXAxisItem&&this.xAxisItem?this.xAxisItem:T},xAxisConverter:function(){return this.xAxisIsDefault?i=>i/1e9:i=>i},xAxisFormatter:function(){return i=>i==null?"--":this.xAxisIsTime?this.formatSeconds(i,this.timeZone):i},xAxisLabel:function(){return this.xAxisIsTime?"Time":this.actualXAxisItem.split("__").at(-2)},xAxisIsDefault:function(){return this.actualXAxisItem===T},xAxisIsTime:function(){const i=["PACKET_TIMESECONDS","RECEIVED_TIMESECONDS"];return this.xAxisIsDefault||i.includes(this.actualXAxisItem.split("__").at(4))},xAxisIsAlsoGraphedItem:function(){return this.itemSubscriptionKeys.includes(this.actualXAxisItem)},playbackMode:function(){return this.$store.state.playback.playbackMode},playbackDateTime:function(){return this.$store.state.playback.playbackDateTime},playbackStep:function(){return this.$store.state.playback.playbackStep}},watch:{state:function(i,t){switch(i){case"start":t==="stop"&&this.startGraph();break;case"stop":this.stopGraph();break}},playbackMode:function(i,t){this.playbackMode==="playback"?this.setupPlaybackMode():(this.lastPlaybackDateTime=null,this.clearAllData(),this.startGraph())},playbackDateTime:function(i,t){this.playbackMode==="playback"&&(this.lastPlaybackDateTime===null||this.lastPlaybackDateTime>this.playbackDateTime?this.clearAllData():(this.$store.commit("playback",{playbackLoading:this.$store.state.playback.playbackLoading+1}),this.api.get_tlm_values(this.graphItems,30,null,this.lastPlaybackDateTime,this.playbackDateTime).then(s=>{if(s.length>0){if(Array.isArray(s[0])&&Array.isArray(s[0][0]))for(let a=0;a<s.length;a++)for(let l=0;l<s[a].length;l++)if(l===0){let o=s[a][l][0],n=new Date(o);this.data[0].push(n.getTime()/1e3)}else this.data[l].push(s[a][l][0]);else if(Array.isArray(s)&&s.length>=2)for(let a=0;a<s.length;a++)if(a===0){let l=s[a][0],o=new Date(l);this.data[0].push(o.getTime()/1e3)}else this.data[a].push(s[a][0])}this.$store.commit("playback",{playbackLoading:Math.max(0,this.$store.state.playback.playbackLoading-1)}),this.dataChanged=!0,this.updateGraphData()})),this.lastPlaybackDateTime=this.playbackDateTime)},data:function(i,t){this.dataChanged=!0},graphMinY:function(i,t){let s=parseFloat(i);isNaN(s)||(this.graphMinY=s),this.setGraphRange()},graphMaxY:function(i,t){let s=parseFloat(i);isNaN(s)||(this.graphMaxY=s),this.setGraphRange()},graphStartDateTime:function(i,t){i&&typeof i=="string"?(this.graphStartDateTime=this.parseDateTime(this.graphStartDateTime,this.timeZone)*1e6,this.graphStartDateTime!==t&&(this.needToUpdate=!0)):i===null&&t&&(this.graphStartDateTime=null,this.needToUpdate=!0)},graphEndDateTime:function(i,t){i&&typeof i=="string"?(this.graphEndDateTime=this.parseDateTime(this.graphEndDateTime,this.timeZone)*1e6,this.graphEndDateTime!==t&&(this.needToUpdate=!0)):i===null&&t&&(this.graphEndDateTime=null,this.needToUpdate=!0)},actualXAxisItem:function(i,t){let s=JSON.parse(JSON.stringify(this.items));this.removeItems(s),this.graph.destroy(),this.chartOpts.series[0].label=this.xAxisLabel,this.chartOpts.scales.x.time=this.xAxisIsTime,this.graph=new x.uPlot(this.chartOpts,this.data,document.getElementById(`chart${this.id}`)),this.hideOverview||(this.overview.destroy(),this.overviewOpts.scales.x.time=this.xAxisIsTime,this.overview=new x.uPlot(this.overviewOpts,this.data,document.getElementById(`overview${this.id}`))),this.addItems(s)},refreshIntervalMs:function(i){this.interval&&(clearInterval(this.interval),this.interval=setInterval(()=>{this.updateGraphData()},i))}},created(){this.api=new x.Oi,this.title=`Graph ${this.id}`;for(const[i,t]of this.items.entries())this.data.push([]),this.indexes[this.subscriptionKey(t)]=i+1,t.color===void 0&&(t.color=this.colors[this.colorIndex]),this.colorIndex++,this.colorIndex===this.colors.length&&(this.colorIndex=0)},mounted(){const{chartSeries:i,overviewSeries:t}=this.items.reduce((s,a)=>{const l={spanGaps:!0};return s.chartSeries.push({...l,item:a,label:this.formatLabel(a),stroke:(o,n)=>this.items[n-1].color,width:2,value:(o,n)=>typeof n=="string"||isNaN(n)?"NaN":n==null?"--":n.toFixed(3)}),s.overviewSeries.push({...l}),s},{chartSeries:[],overviewSeries:[]});if(this.chartOpts={},this.sparkline)this.hideToolbarData=!0,this.hideOverviewData=!0,this.showOverview=!1,this.chartOpts={width:this.width,height:this.height,pxAlign:!1,cursor:{show:!1},select:{show:!1},legend:{show:!1},scales:{x:{time:!1}},axes:[{show:!1},{show:!1}],series:[{},{stroke:"white"}]},this.graph=new x.uPlot(this.chartOpts,this.data,document.getElementById(`chart${this.id}`));else{let s=Intl.DateTimeFormat().resolvedOptions().timeZone;this.timeZone&&this.timeZone!=="local"&&(s=this.timeZone),this.chartOpts={...this.getSize("chart"),...this.getScales(),...this.getAxes("chart"),plugins:[this.linesPlugin()],tzDate:a=>x.uPlot.tzDate(new Date(a*1e3),s),series:[{label:this.xAxisLabel,value:(a,l)=>this.xAxisFormatter(l)},...i],cursor:{drag:{x:!0,y:!1},sync:{key:"openc3"},bind:{mouseup:(a,l,o)=>n=>{this.state==="pause"&&a.select.width===0&&this.$emit("start"),o(n)}}},hooks:{setScale:[(a,l)=>{if(l==="x"&&!this.zoomOverview&&this.overview){this.zoomChart=!0;let o=Math.round(this.overview.valToPos(a.scales.x.min,"x")),n=Math.round(this.overview.valToPos(a.scales.x.max,"x"));this.overview.setSelect({left:o,width:n-o}),this.zoomChart=!1}}],setSelect:[a=>{this.state==="start"&&a.select.width>0&&this.$emit("pause")}],ready:[a=>{a.root.querySelector(".u-over").addEventListener("contextmenu",n=>{n.preventDefault(),this.itemMenu=!1,this.legendMenu=!1,this.editGraphMenuX=n.clientX,this.editGraphMenuY=n.clientY,this.editGraphMenu=!0});let o=a.root.querySelector(".u-legend");o.addEventListener("contextmenu",n=>{n.preventDefault(),this.editGraphMenu=!1,this.legendMenu=!1,this.itemMenuX=n.clientX,this.itemMenuY=n.clientY;let m=n.target.closest(".u-series"),p=Array.prototype.slice.call(o.childNodes[0].childNodes).indexOf(m),d=a.series[p];d.item?(this.selectedItem=d.item,this.itemMenu=!0):(this.itemMenu=!1,this.legendMenuX=n.clientX,this.legendMenuY=n.clientY,this.legendMenu=!0)}),o.querySelector("tbody").appendChild(this.$refs.info)}]}},this.graph=new x.uPlot(this.chartOpts,this.data,document.getElementById(`chart${this.id}`)),this.overviewOpts={...this.getSize("overview"),...this.getScales(),...this.getAxes("overview"),tzDate:a=>x.uPlot.tzDate(new Date(a*1e3),s),series:[...t],cursor:{y:!1,drag:{setScale:!1,x:!0,y:!1}},legend:{show:!1},hooks:{setSelect:[a=>{if(!this.zoomChart){this.state==="start"&&a.select.width>0&&this.$emit("pause"),this.zoomOverview=!0;let l=a.posToVal(a.select.left,"x"),o=a.posToVal(a.select.left+a.select.width,"x");this.graph.setScale("x",{min:l,max:o}),this.zoomOverview=!1}}]}},this.hideOverview||(this.overview=new x.uPlot(this.overviewOpts,this.data,document.getElementById(`overview${this.id}`))),this.moveLegend(this.legendPosition),window.addEventListener("resize",this.resize)}this.playbackMode!=="playback"?this.state!=="stop"&&this.startGraph():this.setupPlaybackMode()},beforeUnmount:function(){this.stopGraph(),this.cable.disconnect(),window.removeEventListener("resize",this.resize)},methods:{setupPlaybackMode:function(){this.stopGraph(),this.clearAllData();const i=this.itemSubscriptionKeys.map(t=>t.split("__").slice(2).join("__"));if(this.actualXAxisItem===T){const t=i[0].split("__").slice(0,2).join("__");i.unshift(`${t}__PACKET_TIMESECONDS__RAW`)}else this.xAxisIsAlsoGraphedItem||i.unshift(this.actualXAxisItem);this.api.get_tlm_available(i).then(t=>{this.graphItems=t,i.length!=t.length&&console.log("Error getting tlm available",i,this.graphItems)})},startGraph:function(){this.subscribe(),this.interval=setInterval(()=>{this.updateGraphData()},this.refreshIntervalMs)},stopGraph:function(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=null),this.interval&&(clearInterval(this.interval),this.interval=null)},updateGraphData:function(){if(this.state==="pause"||!this.dataChanged)return;this.graph.setData(this.data),this.overview&&this.overview.setData(this.data);const i=this.data[0];if(i&&i.length){let t=i.at(-1);const s=[i.at(0)];this.pointsGraphed<=i.length&&s.push(i.at(-this.pointsGraphed)),this.xAxisIsTime&&s.push(t-this.secondsGraphed);const a=Math.max(...s);a===t&&(t+=1),this.graph.setScale("x",{min:a,max:t})}this.dataChanged=!1},formatLabel(i){if(i.valueType==="CONVERTED"&&i.reduced==="DECOM")return i.itemName;{let t="";return i.valueType!=="CONVERTED"&&(t+=i.valueType),i.reduced!=="DECOM"&&(t!==""&&(t+=" "),t+=`${i.reduced.split("_")[1]} ${i.reducedType}`),`${i.itemName} (${t})`}},moveLegend:function(i){switch(i){case"bottom":this.graph.root.classList.remove("side-legend"),this.graph.root.classList.remove("left-legend"),this.graph.root.classList.remove("top-legend");break;case"top":this.graph.root.classList.remove("side-legend"),this.graph.root.classList.remove("left-legend"),this.graph.root.classList.add("top-legend");break;case"left":this.graph.root.classList.remove("top-legend"),this.graph.root.classList.add("side-legend"),this.graph.root.classList.add("left-legend");break;case"right":this.graph.root.classList.remove("top-legend"),this.graph.root.classList.remove("left-legend"),this.graph.root.classList.add("side-legend");break}this.legendPosition=i,this.resize()},clearErrors:function(){this.errors=[]},editGraphClose:function(i){this.editGraph=!1,this.title=i.title,this.legendPosition=i.legendPosition,this.graphMinY=i.graphMinY,this.graphMaxY=i.graphMaxY,this.lines=[...i.lines],this.graphStartDateTime=i.startDateTime,this.graphEndDateTime=i.endDateTime,this.$nextTick(()=>{if(this.needToUpdate){if(this.subscription==null)this.startGraph();else{let t=JSON.parse(JSON.stringify(this.items));this.removeItems(t),setTimeout(()=>{this.addItems(t)},0)}this.needToUpdate=!1}}),this.moveLegend(this.legendPosition),this.$emit("edit")},resize:function(){this.graph.setSize(this.getSize("chart")),this.overview&&this.overview.setSize(this.getSize("overview")),this.$emit("resize",this.id)},expandAll:function(){this.fullWidth=!0,this.fullHeight=!0,this.resize()},collapseAll:function(){this.fullWidth=!1,this.fullHeight=!1,this.resize()},expandWidth:function(){this.fullWidth=!0,this.resize()},collapseWidth:function(){this.fullWidth=!1,this.resize()},expandHeight:function(){this.fullHeight=!0,this.resize()},collapseHeight:function(){this.fullHeight=!1,this.resize()},minMaxTransition:function(){this.expand=!this.expand,this.$emit("min-max-graph",this.id)},setGraphRange:function(){let i=.1;(this.graphMinY||this.graphMinY===0||this.graphMaxY||this.graphMaxY===0)&&(i=0),this.graph.scales.y.range=(t,s,a)=>{let l=s;(this.graphMinY||this.graphMinY===0)&&(l=this.graphMinY);let o=a;return(this.graphMaxY||this.graphMaxY===0)&&(o=this.graphMaxY),x.uPlot.rangeNum(l,o,i,!0)}},subscribe:function(){this.cable.createSubscription("StreamingChannel",window.openc3Scope,{received:i=>this.received(i),connected:()=>{const i=[...this.items];!this.xAxisIsDefault&&!this.xAxisIsAlsoGraphedItem&&i.push(this.actualXAxisItem),this.addItemsToSubscription(i)},disconnected:i=>{i.allowReconnect&&this.errors.push({type:"disconnected",message:"OpenC3 backend connection disconnected",time:new Date().getTime()})},rejected:()=>{this.errors.push({type:"rejected",message:"OpenC3 backend connection rejected",time:new Date().getTime()})}}).then(i=>{this.subscription=i})},getSize:function(i){let t=0;const s=document.getElementById("openc3-nav-drawer");s&&(t=s.classList.contains("v-navigation-drawer--active")?s.clientWidth:0);let a=0;(this.legendPosition==="right"||this.legendPosition==="left")&&(a=document.getElementsByClassName("u-legend")[0].clientWidth);const l=Math.max(document.documentElement.clientWidth,window.innerWidth||0)-t-a,o=Math.max(document.documentElement.clientHeight,window.innerHeight||0),n=document.getElementsByClassName("v-expansion-panel")[0];let m=100;i==="overview"?this.fullHeight&&!this.hideOverviewData?this.showOverview=!0:this.showOverview=!1:(m=o-n.clientHeight-m-250,this.fullHeight||(m=m/2+10));let p=l-70;return this.fullWidth||(p=p/2-12),{width:this.width||p,height:this.height||m}},getScales:function(){return{scales:{x:{range(i,t,s){return t==null?this.xAxisIsTime?[1566453600,1566497660]:[0,1]:[t,s]},time:this.xAxisIsTime},y:{range(i,t,s){return t==null?[-100,100]:x.uPlot.rangeNum(t,s,.1,!0)}}}}},getAxes:function(i){let t="rgba(255, 255, 255, .1)",s="white";return{axes:[{stroke:s,grid:{show:!0,stroke:t,width:2}},{size:80,stroke:s,grid:{show:i!=="overview",stroke:t,width:2},values(a,l){return(l.some(o=>o>=1e7)||l.every(o=>o<.01))&&(l=l.map(o=>o.toExponential(3))),l}}]}},closeEditItem:function(i){this.editItem=!1,(this.graphEndDateTime!==null&&this.selectedItem!==i||this.selectedItem.valueType!==i.valueType||this.selectedItem.reduced!==i.reduced||this.selectedItem.reducedType!==i.reducedType)&&this.changeItem(i)},changeColor:function(i){let t=this.subscriptionKey(this.selectedItem),s=this.indexes[t];this.items[s-1].color=i,this.selectedItem.color=i,this.graph.root.querySelectorAll(".u-marker")[s].style.borderColor=i},changeLimits:function(i){let t=this.subscriptionKey(this.selectedItem),s=this.indexes[t];this.items[s-1].limits=i,this.selectedItem.limits=i,this.limitsValues=i},linesPlugin:function(){return{hooks:{draw:i=>{const{ctx:t,bbox:s}=i,a=i.valToPos(i.scales.y.min,"y",!0),l=i.valToPos(i.scales.y.max,"y",!0),o=i.valToPos(this.limitsValues[0],"y",!0),n=i.valToPos(this.limitsValues[1],"y",!0),m=i.valToPos(this.limitsValues[2],"y",!0),p=i.valToPos(this.limitsValues[3],"y",!0);if(this.lines.forEach(d=>{i.scales.y.min<=d.yValue&&d.yValue<=i.scales.y.max&&(t.save(),t.beginPath(),t.strokeStyle=d.color,t.lineWidth=2,t.moveTo(s.left,i.valToPos(d.yValue,"y",!0)),t.lineTo(s.left+s.width,i.valToPos(d.yValue,"y",!0)),t.stroke(),t.restore())}),t.save(),t.beginPath(),t.fillStyle="rgba(255,0,0,0.15)",i.scales.y.min<this.limitsValues[0]){let d=o<l?l:o;t.fillRect(s.left,o,s.width,a-d)}if(i.scales.y.max>this.limitsValues[3]){let d=a<p?a:p;t.fillRect(s.left,l,s.width,d-l)}if(t.fillStyle="rgba(255,255,0,0.15)",i.scales.y.min<this.limitsValues[1]&&i.scales.y.max>this.limitsValues[0]){let d=n<l?l:n;t.fillRect(s.left,d,s.width,o-d)}if(i.scales.y.max>this.limitsValues[2]&&i.scales.y.min<this.limitsValues[3]){let d=a<p?a:p,c=a<m?a:m;t.fillRect(s.left,d,s.width,c-d)}if(t.fillStyle="rgba(0,255,0,0.15)",this.limitsValues.length===4){if(i.scales.y.min<this.limitsValues[2]&&i.scales.y.max>this.limitsValues[1]){let d=m<l?l:m,c=a<n?a:n;t.fillRect(s.left,d,s.width,c-d)}}else{const d=i.valToPos(this.limitsValues[4],"y",!0),c=i.valToPos(this.limitsValues[5],"y",!0);if(i.scales.y.min<this.limitsValues[4]&&i.scales.y.max>this.limitsValues[1]){let v=d<l?l:d;t.fillRect(s.left,v,s.width,n-v)}if(i.scales.y.max>this.limitsValues[5]&&i.scales.y.min<this.limitsValues[2]){let v=a<m?a:m,u=a<c?a:c;t.fillRect(s.left,v,s.width,u-v)}t.fillStyle="rgba(0,0,255,0.15)";let y=c<l?l:c,f=a<d?a:d;t.fillRect(s.left,y,s.width,f-y)}t.stroke(),t.restore()}}}},changeItem:function(i){this.removeItems([this.selectedItem]),this.selectedItem.valueType=i.valueType,this.selectedItem.reduced=i.reduced,this.selectedItem.reducedType=i.reducedType,setTimeout(()=>{this.addItems([this.selectedItem])},0)},addItems:function(i,t="CONVERTED"){i.forEach(s=>{s.valueType||(s.valueType=t),s.color||(s.color=this.colors[this.colorIndex]),s.limits||(s.limits=[]),s.limits.length>0&&(this.limitsValues=s.limits),this.colorIndex=(this.colorIndex+1)%this.colors.length,this.items.push(s);const a=this.data.length;this.graph.addSeries(this.createSeriesConfig(s),a),this.overview&&this.overview.addSeries(this.createOverviewSeriesConfig(),a),this.data.splice(a,0,Array(this.data[0].length)),this.indexes[this.subscriptionKey(s)]=a}),this.updateColorIndex(i),this.xAxisIsDefault||i.push(this.actualXAxisItem),this.addItemsToSubscription(i),this.$emit("resize"),this.$emit("edit")},createSeriesConfig:function(i){return{spanGaps:!0,item:i,label:this.formatLabel(i),stroke:(t,s)=>this.items[s-1].color,width:2,value:(t,s)=>typeof s=="string"||isNaN(s)?"NaN":s==null?"--":Math.abs(s)<.01&&s!==0||Math.abs(s)>=1e7?s.toExponential(6):s.toFixed(6)}},createOverviewSeriesConfig:function(){return{spanGaps:!0,stroke:(i,t)=>this.items[t-1].color}},updateColorIndex:function(i){const t=i[i.length-1];if(t){const s=this.colors.indexOf(t.color);s!==-1&&(this.colorIndex=(s+1)%this.colors.length)}},addItemsToSubscription:function(i=this.items){let t=this.startTime;this.graphStartDateTime&&(t=this.graphStartDateTime);const s=i.map(a=>{if(typeof a=="object")return this.subscriptionKey(a);if(typeof a=="string")return a;throw new Error(`Invalid subscription item type for ${a}: ${typeof a}`)});this.subscription&&OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(a=>{a&&OpenC3Auth.setTokens(),this.subscription.perform("add",{scope:window.openc3Scope,token:localStorage.openc3Token,items:s,start_time:t,end_time:this.graphEndDateTime})})},clearAllData:function(){this.data[0]=[],this.clearData(this.items)},clearData:function(i){for(const t of i.map(this.subscriptionKey)){let s=this.indexes[t];this.data[s]=Array(this.data[0].length).fill(null),this.graph.setData(this.data),this.overview&&this.overview.setData(this.data)}this.data.length===2&&(this.data[0]=[],this.graph.setData(this.data),this.overview&&this.overview.setData(this.data))},removeItems:function(i){this.removeItemsFromSubscription(i);for(const t of i.map(this.subscriptionKey)){const s=this.reorderIndexes(t);this.items.splice(s-1,1),this.data.splice(s,1),this.graph.delSeries(s),this.graph.setData(this.data),this.overview&&(this.overview.delSeries(s),this.overview.setData(this.data))}this.data.length===1&&(this.data[0]=[],this.graph.setData(this.data),this.overview&&this.overview.setData(this.data)),this.$emit("resize"),this.$emit("edit")},removeItemsFromSubscription:function(i=this.items){if(this.subscription){const t=i.map(s=>{if(typeof s=="object")return this.subscriptionKey(s);if(typeof s=="string")return s;throw new Error(`Invalid subscription item type for ${s}: ${typeof s}`)});this.subscription.perform("remove",{scope:window.openc3Scope,token:localStorage.openc3Token,items:t})}},reorderIndexes:function(i){let t=this.indexes[i];delete this.indexes[i];for(let s in this.indexes)this.indexes[s]>t&&(this.indexes[s]-=1);return t},received:function(i){this.cable.recordPing();for(let t=0;t<i.length;t++){if(!i[t].hasOwnProperty(this.actualXAxisItem))continue;let s=this.xAxisConverter(i[t][this.actualXAxisItem]),a=this.data[0].length;if(a===0||s>this.data[0][a-1]){for(let l=0;l<this.data.length;l++)this.data[l].push(null);this.setDataAtIndex(this.data[0].length-1,s,i[t])}else{let l=x.bs(this.data[0],s,this.bsComparator);if(l>=0){if(!Number.isFinite(s))throw new RangeError(`Invalid x-axis value: ${s}`);for(;l>=0;)s-=1e-5,l=x.bs(this.data[0],s,this.bsComparator);const o=-l-1;for(let n=0;n<this.data.length;n++)this.data[n].splice(o,0,null);this.setDataAtIndex(o,s,i[t])}else{const o=-l-1;for(let n=0;n<this.data.length;n++)this.data[n].splice(o,0,null);this.setDataAtIndex(o,s,i[t])}}}if(this.pointsSaved>0&&this.data[0].length>this.pointsSaved+300){const t=this.data[0].length-this.pointsSaved;for(let s=0;s<this.data.length;s++)this.data[s].splice(0,t)}if(this.startTime==null&&this.data[0][0]){let t=this.data[0][0]*1e9;this.$emit("started",t)}this.dataChanged=!0},bsComparator:function(i,t){return i-t},setDataAtIndex:function(i,t,s){this.data[0][i]=t;for(const[a,l]of Object.entries(s)){if(a===this.actualXAxisItem&&!this.xAxisIsAlsoGraphedItem)continue;const o=this.indexes[a];if(o){let n=this.data[o];if(l!=null&&l.raw)n[i]=null;else if(typeof l=="string"){if(n[i]=null,!a.includes("__RAW")){for(let m of this.items)if(this.subscriptionKey(m)===a){this.selectedItem=m;break}this.changeItem({valueType:"RAW",reduced:this.selectedItem.reduced,reducedType:this.selectedItem.reducedType})}}else n[i]=l}}},subscriptionKey:function(i){let t=`${i.reduced}__TLM__${i.targetName}__${i.packetName}__${i.itemName}__${i.valueType}`;return(i.reduced==="REDUCED_MINUTE"||i.reduced==="REDUCED_HOUR"||i.reduced==="REDUCED_DAY")&&(t+=`__${i.reducedType}`),t}}},$={id:"chart",ref:"chart",class:"pa-1"},ee=["id"],te=["id"],ie={key:5,ref:"info",class:"u-series"};function se(i,t,s,a,l,o){const n=e.resolveComponent("v-btn"),m=e.resolveComponent("v-spacer"),p=e.resolveComponent("v-toolbar"),d=e.resolveComponent("v-expand-transition"),c=e.resolveComponent("v-card"),y=e.resolveComponent("graph-edit-dialog"),f=e.resolveComponent("v-text-field"),v=e.resolveComponent("v-row"),u=e.resolveComponent("v-textarea"),b=e.resolveComponent("v-dialog"),w=e.resolveComponent("v-list-item-title"),g=e.resolveComponent("v-list-item"),V=e.resolveComponent("v-list"),N=e.resolveComponent("v-menu"),D=e.resolveComponent("graph-edit-item-dialog"),_=e.resolveComponent("v-list-subheader"),C=e.resolveComponent("v-icon"),A=e.resolveComponent("v-tooltip");return e.openBlock(),e.createElementBlock("div",{onClick:t[22]||(t[22]=e.withModifiers(h=>i.$emit("click"),["prevent"]))},[e.createVNode(c,null,{default:e.withCtx(()=>[e.withDirectives(e.createVNode(p,{height:"24",class:e.normalizeClass(["pl-2 pr-2",s.selectedGraphId===s.id?"active":""])},{default:e.withCtx(()=>[e.withDirectives(e.createVNode(n,{class:"mx-2",icon:"mdi-alert",density:"compact",variant:"text","aria-label":"Show Errors",onClick:t[0]||(t[0]=()=>{l.errorDialog=!0})},null,512),[[e.vShow,l.errors.length!==0]]),e.createVNode(n,{icon:"mdi-pencil",variant:"text",density:"compact","data-test":"edit-graph-icon","aria-label":"Edit Graph",onClick:t[1]||(t[1]=()=>{l.editGraph=!0})}),e.createVNode(m),e.createElementVNode("span",null,e.toDisplayString(l.title),1),e.createVNode(m),l.expand?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[o.calcFullSize?(e.openBlock(),e.createBlock(n,{key:0,icon:"mdi-arrow-collapse",variant:"text",density:"compact","data-test":"collapse-all",onClick:o.collapseAll},null,8,["onClick"])):(e.openBlock(),e.createBlock(n,{key:1,icon:"mdi-arrow-expand",variant:"text",density:"compact","data-test":"expand-all",onClick:o.expandAll},null,8,["onClick"])),l.fullWidth?(e.openBlock(),e.createBlock(n,{key:2,icon:"mdi-arrow-collapse-horizontal",variant:"text",density:"compact","data-test":"collapse-width",onClick:o.collapseWidth},null,8,["onClick"])):(e.openBlock(),e.createBlock(n,{key:3,icon:"mdi-arrow-expand-horizontal",variant:"text",density:"compact","data-test":"expand-width",onClick:o.expandWidth},null,8,["onClick"])),l.fullHeight?(e.openBlock(),e.createBlock(n,{key:4,icon:"mdi-arrow-collapse-vertical",variant:"text",density:"compact","data-test":"collapse-height",onClick:o.collapseHeight},null,8,["onClick"])):(e.openBlock(),e.createBlock(n,{key:5,icon:"mdi-arrow-expand-vertical",variant:"text",density:"compact","data-test":"expand-height",onClick:o.expandHeight},null,8,["onClick"]))],64)):e.createCommentVNode("",!0),l.expand?(e.openBlock(),e.createBlock(n,{key:1,icon:"mdi-window-minimize",variant:"text",density:"compact","data-test":"minimize-screen-icon",onClick:o.minMaxTransition},null,8,["onClick"])):(e.openBlock(),e.createBlock(n,{key:2,icon:"mdi-window-maximize",variant:"text",density:"compact","data-test":"maximize-screen-icon",onClick:o.minMaxTransition},null,8,["onClick"])),e.createVNode(n,{icon:"mdi-close-box",variant:"text",density:"compact","data-test":"close-graph-icon",onClick:t[2]||(t[2]=e.withModifiers(h=>i.$emit("close-graph"),["stop"]))})]),_:1},8,["class"]),[[e.vShow,!l.hideToolbarData]]),e.createVNode(d,null,{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",$,[e.createElementVNode("div",{id:`chart${s.id}`},null,8,ee),t[23]||(t[23]=e.createElementVNode("div",{id:"betweenCharts"},null,-1)),e.withDirectives(e.createElementVNode("div",{id:`overview${s.id}`},null,8,te),[[e.vShow,l.showOverview]])],512),[[e.vShow,l.expand]])]),_:1})]),_:1}),l.editGraph?(e.openBlock(),e.createBlock(y,{key:0,modelValue:l.editGraph,"onUpdate:modelValue":t[3]||(t[3]=h=>l.editGraph=h),"x-axis-item":l.xAxisItem,"onUpdate:xAxisItem":t[4]||(t[4]=h=>l.xAxisItem=h),title:l.title,"legend-position":l.legendPosition,items:l.items,"graph-min-y":l.graphMinY,"graph-max-y":l.graphMaxY,lines:l.lines,colors:l.colors,"start-date-time":l.graphStartDateTime,"end-date-time":l.graphEndDateTime,"time-zone":s.timeZone,"x-axis-item-packet":o.allowableXAxisItemPacket,onRemove:t[5]||(t[5]=h=>o.removeItems([h])),onOk:o.editGraphClose,onCancel:t[6]||(t[6]=h=>l.editGraph=!1)},null,8,["modelValue","x-axis-item","title","legend-position","items","graph-min-y","graph-max-y","lines","colors","start-date-time","end-date-time","time-zone","x-axis-item-packet","onOk"])):e.createCommentVNode("",!0),e.createVNode(b,{modelValue:l.errorDialog,"onUpdate:modelValue":t[8]||(t[8]=h=>l.errorDialog=h),"max-width":"600"},{default:e.withCtx(()=>[e.createVNode(p,{height:"24"},{default:e.withCtx(()=>[e.createVNode(m),t[24]||(t[24]=e.createElementVNode("span",null," Errors ",-1)),e.createVNode(m)]),_:1}),e.createVNode(c,{class:"pa-3"},{default:e.withCtx(()=>[e.createVNode(v,{dense:""},{default:e.withCtx(()=>[e.createVNode(f,{modelValue:l.title,"onUpdate:modelValue":t[7]||(t[7]=h=>l.title=h),readonly:"","hide-details":"",class:"pb-2",label:"Graph Title"},null,8,["modelValue"])]),_:1}),e.createVNode(v,{class:"my-3"},{default:e.withCtx(()=>[e.createVNode(u,{readonly:"",rows:"8","model-value":o.error},null,8,["model-value"])]),_:1}),e.createVNode(v,null,{default:e.withCtx(()=>[e.createVNode(n,{block:"",onClick:o.clearErrors},{default:e.withCtx(()=>[...t[25]||(t[25]=[e.createTextVNode(" Clear ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),l.editGraphMenu?(e.openBlock(),e.createBlock(N,{key:1,modelValue:l.editGraphMenu,"onUpdate:modelValue":t[10]||(t[10]=h=>l.editGraphMenu=h),target:[l.editGraphMenuX,l.editGraphMenuY],absolute:""},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(g,{onClick:t[9]||(t[9]=h=>l.editGraph=!0)},{default:e.withCtx(()=>[e.createVNode(w,{style:{cursor:"pointer"}},{default:e.withCtx(()=>[e.createTextVNode(" Edit "+e.toDisplayString(l.title),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue","target"])):e.createCommentVNode("",!0),l.editItem?(e.openBlock(),e.createBlock(D,{key:2,modelValue:l.editItem,"onUpdate:modelValue":t[11]||(t[11]=h=>l.editItem=h),colors:l.colors,item:l.selectedItem,onChangeColor:o.changeColor,onChangeLimits:o.changeLimits,onCancel:t[12]||(t[12]=h=>l.editItem=!1),onClose:o.closeEditItem},null,8,["modelValue","colors","item","onChangeColor","onChangeLimits","onClose"])):e.createCommentVNode("",!0),l.itemMenu?(e.openBlock(),e.createBlock(N,{key:3,modelValue:l.itemMenu,"onUpdate:modelValue":t[16]||(t[16]=h=>l.itemMenu=h),target:[l.itemMenuX,l.itemMenuY],absolute:""},{default:e.withCtx(()=>[e.createVNode(V,{nav:"",density:"compact"},{default:e.withCtx(()=>[e.createVNode(_,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.selectedItem.targetName)+" "+e.toDisplayString(l.selectedItem.packetName)+" "+e.toDisplayString(l.selectedItem.itemName),1)]),_:1}),e.createVNode(g,{onClick:t[13]||(t[13]=h=>l.editItem=!0)},{prepend:e.withCtx(()=>[e.createVNode(C,{icon:"mdi-pencil"})]),default:e.withCtx(()=>[e.createVNode(w,null,{default:e.withCtx(()=>[...t[26]||(t[26]=[e.createTextVNode(" Edit ",-1)])]),_:1})]),_:1}),e.createVNode(g,{onClick:t[14]||(t[14]=h=>o.clearData([l.selectedItem]))},{prepend:e.withCtx(()=>[e.createVNode(C,{icon:"mdi-eraser"})]),default:e.withCtx(()=>[e.createVNode(w,null,{default:e.withCtx(()=>[...t[27]||(t[27]=[e.createTextVNode(" Clear ",-1)])]),_:1})]),_:1}),e.createVNode(g,{onClick:t[15]||(t[15]=h=>o.removeItems([l.selectedItem]))},{prepend:e.withCtx(()=>[e.createVNode(C,{icon:"mdi-delete"})]),default:e.withCtx(()=>[e.createVNode(w,null,{default:e.withCtx(()=>[...t[28]||(t[28]=[e.createTextVNode(" Delete ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue","target"])):e.createCommentVNode("",!0),l.legendMenu?(e.openBlock(),e.createBlock(N,{key:4,modelValue:l.legendMenu,"onUpdate:modelValue":t[21]||(t[21]=h=>l.legendMenu=h),target:[l.legendMenuX,l.legendMenuY],absolute:""},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(g,{onClick:t[17]||(t[17]=h=>o.moveLegend("top"))},{default:e.withCtx(()=>[e.createVNode(w,{style:{cursor:"pointer"}},{default:e.withCtx(()=>[...t[29]||(t[29]=[e.createTextVNode(" Legend Top ",-1)])]),_:1})]),_:1}),e.createVNode(g,{onClick:t[18]||(t[18]=h=>o.moveLegend("bottom"))},{default:e.withCtx(()=>[e.createVNode(w,{style:{cursor:"pointer"}},{default:e.withCtx(()=>[...t[30]||(t[30]=[e.createTextVNode(" Legend Bottom ",-1)])]),_:1})]),_:1}),e.createVNode(g,{onClick:t[19]||(t[19]=h=>o.moveLegend("left"))},{default:e.withCtx(()=>[e.createVNode(w,{style:{cursor:"pointer"}},{default:e.withCtx(()=>[...t[31]||(t[31]=[e.createTextVNode(" Legend Left ",-1)])]),_:1})]),_:1}),e.createVNode(g,{onClick:t[20]||(t[20]=h=>o.moveLegend("right"))},{default:e.withCtx(()=>[e.createVNode(w,{style:{cursor:"pointer"}},{default:e.withCtx(()=>[...t[32]||(t[32]=[e.createTextVNode(" Legend RIght ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue","target"])):e.createCommentVNode("",!0),s.sparkline?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",ie,[e.createVNode(A,{text:"Click item to toggle, Right click to edit",location:"top"},{activator:e.withCtx(({props:h})=>[e.createVNode(C,e.normalizeProps(e.guardReactiveProps(h)),{default:e.withCtx(()=>[...t[33]||(t[33]=[e.createTextVNode(" mdi-information-variant-circle ",-1)])]),_:1},16)]),_:1})],512))])}const le=E._export_sfc(Q,[["render",se],["__scopeId","data-v-13468ccc"]]);exports.Graph=le;exports.GraphEditDialog=P;exports.GraphEditItemDialog=G;
2
+ //# sourceMappingURL=Graph-BT7YHaLU.cjs.map