@openc3/vue-common 7.0.1 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/dist/{ArrayWidget-BHjh3qLF.cjs → ArrayWidget-CQCphADm.cjs} +3 -3
  2. package/dist/{ArrayWidget-BHjh3qLF.cjs.map → ArrayWidget-CQCphADm.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-Dh6zDiC7.js → ArrayWidget-CcQFJGCA.js} +7 -6
  4. package/dist/{ArrayWidget-Dh6zDiC7.js.map → ArrayWidget-CcQFJGCA.js.map} +1 -1
  5. package/dist/{ArrayplotWidget-CSc_TqNm.js → ArrayplotWidget-DGJEXAY0.js} +6 -5
  6. package/dist/{ArrayplotWidget-CSc_TqNm.js.map → ArrayplotWidget-DGJEXAY0.js.map} +1 -1
  7. package/dist/ArrayplotWidget-J0xWFYsb.cjs +2 -0
  8. package/dist/{ArrayplotWidget-BHD-TGQO.cjs.map → ArrayplotWidget-J0xWFYsb.cjs.map} +1 -1
  9. package/dist/BarColumn-DrvHLEts.cjs +2 -0
  10. package/dist/BarColumn-DrvHLEts.cjs.map +1 -0
  11. package/dist/{BarColumn-DmjMnw5l.js → BarColumn-DwZmAe8g.js} +11 -9
  12. package/dist/BarColumn-DwZmAe8g.js.map +1 -0
  13. package/dist/{BlockWidget-BdR_HCVc.js → BlockWidget-BHtugveV.js} +14 -13
  14. package/dist/{BlockWidget-BdR_HCVc.js.map → BlockWidget-BHtugveV.js.map} +1 -1
  15. package/dist/{BlockWidget-Bi1PfS1k.cjs → BlockWidget-_HTXwzGu.cjs} +2 -2
  16. package/dist/{BlockWidget-Bi1PfS1k.cjs.map → BlockWidget-_HTXwzGu.cjs.map} +1 -1
  17. package/dist/ButtonWidget-C_4jUjbD.cjs +3 -0
  18. package/dist/ButtonWidget-C_4jUjbD.cjs.map +1 -0
  19. package/dist/{ButtonWidget-DZ4VCNWU.js → ButtonWidget-Cc9cYsg8.js} +7 -6
  20. package/dist/ButtonWidget-Cc9cYsg8.js.map +1 -0
  21. package/dist/{CanvasWidget-DTEx-DpZ.cjs → CanvasWidget-98hvMkWl.cjs} +2 -2
  22. package/dist/{CanvasWidget-DTEx-DpZ.cjs.map → CanvasWidget-98hvMkWl.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-DuXOo3jG.js → CanvasWidget-Bn70gBcc.js} +2 -2
  24. package/dist/{CanvasWidget-DuXOo3jG.js.map → CanvasWidget-Bn70gBcc.js.map} +1 -1
  25. package/dist/{CanvasdotWidget-bbOquK8B.cjs → CanvasdotWidget-6s1Kzzoj.cjs} +2 -2
  26. package/dist/{CanvasdotWidget-bbOquK8B.cjs.map → CanvasdotWidget-6s1Kzzoj.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-WoLpxI1u.js → CanvasdotWidget-CMROfW3O.js} +2 -2
  28. package/dist/{CanvasdotWidget-WoLpxI1u.js.map → CanvasdotWidget-CMROfW3O.js.map} +1 -1
  29. package/dist/{CanvasimageWidget-tWpK5rsv.js → CanvasimageWidget-BpM05v_m.js} +3 -3
  30. package/dist/{CanvasimageWidget-tWpK5rsv.js.map → CanvasimageWidget-BpM05v_m.js.map} +1 -1
  31. package/dist/{CanvasimageWidget-D2EqsK7w.cjs → CanvasimageWidget-Du_TULyr.cjs} +2 -2
  32. package/dist/{CanvasimageWidget-D2EqsK7w.cjs.map → CanvasimageWidget-Du_TULyr.cjs.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-By_DiQ75.cjs → CanvasimagevalueWidget-DUiZEzwq.cjs} +2 -2
  34. package/dist/{CanvasimagevalueWidget-By_DiQ75.cjs.map → CanvasimagevalueWidget-DUiZEzwq.cjs.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-BVzJYz3l.js → CanvasimagevalueWidget-E6G93iGc.js} +3 -3
  36. package/dist/{CanvasimagevalueWidget-BVzJYz3l.js.map → CanvasimagevalueWidget-E6G93iGc.js.map} +1 -1
  37. package/dist/{CanvaslabelWidget-CDFf8Vll.js → CanvaslabelWidget-C074R2Fy.js} +2 -2
  38. package/dist/{CanvaslabelWidget-CDFf8Vll.js.map → CanvaslabelWidget-C074R2Fy.js.map} +1 -1
  39. package/dist/{CanvaslabelWidget-DiPxyXoX.cjs → CanvaslabelWidget-C7K2dtNN.cjs} +2 -2
  40. package/dist/{CanvaslabelWidget-DiPxyXoX.cjs.map → CanvaslabelWidget-C7K2dtNN.cjs.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-DzJKD6qs.js → CanvaslabelvalueWidget-B0nJeS4X.js} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-DzJKD6qs.js.map → CanvaslabelvalueWidget-B0nJeS4X.js.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-Cw5CCQTi.cjs → CanvaslabelvalueWidget-BuayHPZu.cjs} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-Cw5CCQTi.cjs.map → CanvaslabelvalueWidget-BuayHPZu.cjs.map} +1 -1
  45. package/dist/{CanvaslineWidget-BttTXCZq.js → CanvaslineWidget-CxnNAqOX.js} +2 -2
  46. package/dist/{CanvaslineWidget-BttTXCZq.js.map → CanvaslineWidget-CxnNAqOX.js.map} +1 -1
  47. package/dist/{CanvaslineWidget-BECtKTPL.cjs → CanvaslineWidget-DaBwCmSV.cjs} +2 -2
  48. package/dist/{CanvaslineWidget-BECtKTPL.cjs.map → CanvaslineWidget-DaBwCmSV.cjs.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-i6G0JfnZ.js → CanvaslinevalueWidget-BwfFyCwH.js} +2 -2
  50. package/dist/{CanvaslinevalueWidget-i6G0JfnZ.js.map → CanvaslinevalueWidget-BwfFyCwH.js.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-5duJ98qu.cjs → CanvaslinevalueWidget-xSHdgNCO.cjs} +2 -2
  52. package/dist/{CanvaslinevalueWidget-5duJ98qu.cjs.map → CanvaslinevalueWidget-xSHdgNCO.cjs.map} +1 -1
  53. package/dist/{CheckbuttonWidget-CTMObPhX.cjs → CheckbuttonWidget-Bey7tHx-.cjs} +2 -2
  54. package/dist/{CheckbuttonWidget-CTMObPhX.cjs.map → CheckbuttonWidget-Bey7tHx-.cjs.map} +1 -1
  55. package/dist/{CheckbuttonWidget-18jtf7sh.js → CheckbuttonWidget-yAm10oX0.js} +2 -2
  56. package/dist/{CheckbuttonWidget-18jtf7sh.js.map → CheckbuttonWidget-yAm10oX0.js.map} +1 -1
  57. package/dist/{ClassificationBanners-BmnQODLn.js → ClassificationBanners-DxpE_iPX.js} +2 -2
  58. package/dist/{ClassificationBanners-BmnQODLn.js.map → ClassificationBanners-DxpE_iPX.js.map} +1 -1
  59. package/dist/ClassificationBanners-xG4DOlqJ.cjs +2 -0
  60. package/dist/{ClassificationBanners-DjGCuH-4.cjs.map → ClassificationBanners-xG4DOlqJ.cjs.map} +1 -1
  61. package/dist/{ComboboxWidget-BjaVFbD4.js → ComboboxWidget-BnWksnnp.js} +2 -2
  62. package/dist/{ComboboxWidget-BjaVFbD4.js.map → ComboboxWidget-BnWksnnp.js.map} +1 -1
  63. package/dist/{ComboboxWidget-Cc0Acq9q.cjs → ComboboxWidget-Mh6axKMv.cjs} +2 -2
  64. package/dist/{ComboboxWidget-Cc0Acq9q.cjs.map → ComboboxWidget-Mh6axKMv.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-CO-nvphS.js → CriticalCmdDialog-D0fIp8Tq.js} +24 -23
  66. package/dist/{CriticalCmdDialog-CO-nvphS.js.map → CriticalCmdDialog-D0fIp8Tq.js.map} +1 -1
  67. package/dist/CriticalCmdDialog-DJ3FWL0_.cjs +2 -0
  68. package/dist/{CriticalCmdDialog-eytxCQto.cjs.map → CriticalCmdDialog-DJ3FWL0_.cjs.map} +1 -1
  69. package/dist/{DateWidget-DkFAFlc8.js → DateWidget-CAiG2FIl.js} +9 -8
  70. package/dist/{DateWidget-DkFAFlc8.js.map → DateWidget-CAiG2FIl.js.map} +1 -1
  71. package/dist/DateWidget-DUYYp-Yx.cjs +2 -0
  72. package/dist/{DateWidget-Cle8FY8Q.cjs.map → DateWidget-DUYYp-Yx.cjs.map} +1 -1
  73. package/dist/DetailsDialog-D3iPUi8b.cjs +2 -0
  74. package/dist/{DetailsDialog-BcMaTfuQ.cjs.map → DetailsDialog-D3iPUi8b.cjs.map} +1 -1
  75. package/dist/{DetailsDialog-sqja4Lzq.js → DetailsDialog-q5SDzw3R.js} +72 -71
  76. package/dist/{DetailsDialog-sqja4Lzq.js.map → DetailsDialog-q5SDzw3R.js.map} +1 -1
  77. package/dist/EventListDialog-1RsuuLHZ.cjs +2 -0
  78. package/dist/EventListDialog-1RsuuLHZ.cjs.map +1 -0
  79. package/dist/{EventListDialog-DjCQAwGl.js → EventListDialog-HuEtOu3k.js} +61 -58
  80. package/dist/EventListDialog-HuEtOu3k.js.map +1 -0
  81. package/dist/FilechecksumWidget-ByVrYgzI.cjs +2 -0
  82. package/dist/{FilechecksumWidget-2ta-UvLp.cjs.map → FilechecksumWidget-ByVrYgzI.cjs.map} +1 -1
  83. package/dist/{FilechecksumWidget-DqJ_hvN4.js → FilechecksumWidget-DeW9wy5d.js} +9 -9
  84. package/dist/{FilechecksumWidget-DqJ_hvN4.js.map → FilechecksumWidget-DeW9wy5d.js.map} +1 -1
  85. package/dist/{FiledisplayWidget-CYznG_tf.js → FiledisplayWidget-C_zPFu2E.js} +7 -6
  86. package/dist/{FiledisplayWidget-CYznG_tf.js.map → FiledisplayWidget-C_zPFu2E.js.map} +1 -1
  87. package/dist/FiledisplayWidget-hYmg981k.cjs +2 -0
  88. package/dist/{FiledisplayWidget-BUKXIQir.cjs.map → FiledisplayWidget-hYmg981k.cjs.map} +1 -1
  89. package/dist/{FormatvalueWidget-BpFXnA_U.cjs → FormatvalueWidget-7VD_kwxB.cjs} +2 -2
  90. package/dist/{FormatvalueWidget-BpFXnA_U.cjs.map → FormatvalueWidget-7VD_kwxB.cjs.map} +1 -1
  91. package/dist/{FormatvalueWidget-BnVu4YGx.js → FormatvalueWidget-BrvPWwfN.js} +3 -3
  92. package/dist/{FormatvalueWidget-BnVu4YGx.js.map → FormatvalueWidget-BrvPWwfN.js.map} +1 -1
  93. package/dist/{Graph-CUFzx8Ti.js → Graph-BCvaO4yI.js} +45 -38
  94. package/dist/Graph-BCvaO4yI.js.map +1 -0
  95. package/dist/Graph-BUqdz6gu.cjs +2 -0
  96. package/dist/Graph-BUqdz6gu.cjs.map +1 -0
  97. package/dist/GraphWidget-BdP0xM_P.cjs +2 -0
  98. package/dist/{GraphWidget-BvCQHVxQ.cjs.map → GraphWidget-BdP0xM_P.cjs.map} +1 -1
  99. package/dist/{GraphWidget-DO5XbOGy.js → GraphWidget-QS-VJoes.js} +26 -31
  100. package/dist/{GraphWidget-DO5XbOGy.js.map → GraphWidget-QS-VJoes.js.map} +1 -1
  101. package/dist/{HorizontalWidget-BBQE-dP-.cjs → HorizontalWidget-B9j7DG2Q.cjs} +2 -2
  102. package/dist/{HorizontalWidget-BBQE-dP-.cjs.map → HorizontalWidget-B9j7DG2Q.cjs.map} +1 -1
  103. package/dist/{HorizontalWidget-BA9PiP3d.js → HorizontalWidget-cFSsdChw.js} +2 -2
  104. package/dist/{HorizontalWidget-BA9PiP3d.js.map → HorizontalWidget-cFSsdChw.js.map} +1 -1
  105. package/dist/{HorizontalboxWidget-CX7J8RdA.cjs → HorizontalboxWidget-C3zHRO9h.cjs} +2 -2
  106. package/dist/{HorizontalboxWidget-CX7J8RdA.cjs.map → HorizontalboxWidget-C3zHRO9h.cjs.map} +1 -1
  107. package/dist/{HorizontalboxWidget-B-7HOqgl.js → HorizontalboxWidget-CKA7rLGd.js} +5 -5
  108. package/dist/{HorizontalboxWidget-B-7HOqgl.js.map → HorizontalboxWidget-CKA7rLGd.js.map} +1 -1
  109. package/dist/{HorizontallineWidget-D-o9MGo0.js → HorizontallineWidget-BqbLK0zc.js} +2 -2
  110. package/dist/{HorizontallineWidget-D-o9MGo0.js.map → HorizontallineWidget-BqbLK0zc.js.map} +1 -1
  111. package/dist/{HorizontallineWidget-odTFoB8u.cjs → HorizontallineWidget-GGNFIo1N.cjs} +2 -2
  112. package/dist/{HorizontallineWidget-odTFoB8u.cjs.map → HorizontallineWidget-GGNFIo1N.cjs.map} +1 -1
  113. package/dist/{IframeWidget-BzOka-fX.js → IframeWidget-CITX8Es1.js} +2 -2
  114. package/dist/{IframeWidget-BzOka-fX.js.map → IframeWidget-CITX8Es1.js.map} +1 -1
  115. package/dist/{IframeWidget-cTHu_Rmp.cjs → IframeWidget-lK6Cw1Pp.cjs} +2 -2
  116. package/dist/{IframeWidget-cTHu_Rmp.cjs.map → IframeWidget-lK6Cw1Pp.cjs.map} +1 -1
  117. package/dist/ImageLoader-CkTaGfCC.cjs +2 -0
  118. package/dist/{ImageLoader-BTEOukIw.cjs.map → ImageLoader-CkTaGfCC.cjs.map} +1 -1
  119. package/dist/{ImageLoader-CstmWFM4.js → ImageLoader-DQV_11Vd.js} +2 -2
  120. package/dist/{ImageLoader-CstmWFM4.js.map → ImageLoader-DQV_11Vd.js.map} +1 -1
  121. package/dist/{ImageviewerWidget-BA9uOM1q.js → ImageviewerWidget-BIsSA7KD.js} +2 -2
  122. package/dist/{ImageviewerWidget-BA9uOM1q.js.map → ImageviewerWidget-BIsSA7KD.js.map} +1 -1
  123. package/dist/{ImageviewerWidget-CLAFwmaB.cjs → ImageviewerWidget-CvbsaXCd.cjs} +2 -2
  124. package/dist/{ImageviewerWidget-CLAFwmaB.cjs.map → ImageviewerWidget-CvbsaXCd.cjs.map} +1 -1
  125. package/dist/InterfacesTab-Cfvks-ms.cjs +2 -0
  126. package/dist/{InterfacesTab-CM0CGFVS.cjs.map → InterfacesTab-Cfvks-ms.cjs.map} +1 -1
  127. package/dist/{InterfacesTab-C3mDLkGC.js → InterfacesTab-twne_Qp4.js} +11 -10
  128. package/dist/{InterfacesTab-C3mDLkGC.js.map → InterfacesTab-twne_Qp4.js.map} +1 -1
  129. package/dist/{LabelWidget-CMmVq1mx.cjs → LabelWidget-BFWd6Vgh.cjs} +2 -2
  130. package/dist/{LabelWidget-CMmVq1mx.cjs.map → LabelWidget-BFWd6Vgh.cjs.map} +1 -1
  131. package/dist/{LabelWidget-Da2howZF.js → LabelWidget-FQI-cH_A.js} +2 -2
  132. package/dist/{LabelWidget-Da2howZF.js.map → LabelWidget-FQI-cH_A.js.map} +1 -1
  133. package/dist/{LabelledWidget-CAqH0oWs.cjs → LabelledWidget-AZifUp-f.cjs} +2 -2
  134. package/dist/{LabelledWidget-CAqH0oWs.cjs.map → LabelledWidget-AZifUp-f.cjs.map} +1 -1
  135. package/dist/{LabelledWidget-BH8y3OXT.js → LabelledWidget-KGXtQ4Zb.js} +4 -4
  136. package/dist/{LabelledWidget-BH8y3OXT.js.map → LabelledWidget-KGXtQ4Zb.js.map} +1 -1
  137. package/dist/{LabelprogressbarWidget-Brl24F4c.js → LabelprogressbarWidget-72WyzD_Q.js} +4 -4
  138. package/dist/{LabelprogressbarWidget-Brl24F4c.js.map → LabelprogressbarWidget-72WyzD_Q.js.map} +1 -1
  139. package/dist/{LabelprogressbarWidget-BxLGmW9T.cjs → LabelprogressbarWidget-Bd2E9G7V.cjs} +2 -2
  140. package/dist/{LabelprogressbarWidget-BxLGmW9T.cjs.map → LabelprogressbarWidget-Bd2E9G7V.cjs.map} +1 -1
  141. package/dist/{LabelsparklineWidget-D22MB7-4.js → LabelsparklineWidget-DtWNf4mK.js} +4 -4
  142. package/dist/{LabelsparklineWidget-D22MB7-4.js.map → LabelsparklineWidget-DtWNf4mK.js.map} +1 -1
  143. package/dist/{LabelsparklineWidget-BUXOpBeB.cjs → LabelsparklineWidget-__3CB0T-.cjs} +2 -2
  144. package/dist/{LabelsparklineWidget-BUXOpBeB.cjs.map → LabelsparklineWidget-__3CB0T-.cjs.map} +1 -1
  145. package/dist/LabelvalueWidget-B681T0uR.cjs +2 -0
  146. package/dist/LabelvalueWidget-B681T0uR.cjs.map +1 -0
  147. package/dist/{LabelvalueWidget-_1JPbK-K.js → LabelvalueWidget-D_JLdY7r.js} +11 -12
  148. package/dist/LabelvalueWidget-D_JLdY7r.js.map +1 -0
  149. package/dist/LabelvaluedescWidget-BppM5vGp.js +64 -0
  150. package/dist/LabelvaluedescWidget-BppM5vGp.js.map +1 -0
  151. package/dist/LabelvaluedescWidget-CiGIPdMG.cjs +2 -0
  152. package/dist/LabelvaluedescWidget-CiGIPdMG.cjs.map +1 -0
  153. package/dist/{LabelvaluelimitsbarWidget-C9PlEhWo.js → LabelvaluelimitsbarWidget-B69ogLif.js} +4 -4
  154. package/dist/{LabelvaluelimitsbarWidget-C9PlEhWo.js.map → LabelvaluelimitsbarWidget-B69ogLif.js.map} +1 -1
  155. package/dist/{LabelvaluelimitsbarWidget-BGag8V6k.cjs → LabelvaluelimitsbarWidget-Cmb4kGcv.cjs} +2 -2
  156. package/dist/{LabelvaluelimitsbarWidget-BGag8V6k.cjs.map → LabelvaluelimitsbarWidget-Cmb4kGcv.cjs.map} +1 -1
  157. package/dist/{LabelvaluelimitscolumnWidget-SHVJIgGJ.cjs → LabelvaluelimitscolumnWidget-BXdmh9So.cjs} +2 -2
  158. package/dist/{LabelvaluelimitscolumnWidget-SHVJIgGJ.cjs.map → LabelvaluelimitscolumnWidget-BXdmh9So.cjs.map} +1 -1
  159. package/dist/{LabelvaluelimitscolumnWidget-Cay6AhoZ.js → LabelvaluelimitscolumnWidget-DPYwFdgq.js} +5 -5
  160. package/dist/{LabelvaluelimitscolumnWidget-Cay6AhoZ.js.map → LabelvaluelimitscolumnWidget-DPYwFdgq.js.map} +1 -1
  161. package/dist/{LabelvaluerangebarWidget-s_8IgY-C.js → LabelvaluerangebarWidget-BT0BcOoK.js} +4 -4
  162. package/dist/{LabelvaluerangebarWidget-s_8IgY-C.js.map → LabelvaluerangebarWidget-BT0BcOoK.js.map} +1 -1
  163. package/dist/{LabelvaluerangebarWidget-Dbibpimv.cjs → LabelvaluerangebarWidget-cavgscEk.cjs} +2 -2
  164. package/dist/{LabelvaluerangebarWidget-Dbibpimv.cjs.map → LabelvaluerangebarWidget-cavgscEk.cjs.map} +1 -1
  165. package/dist/{Layout-DwWEea79.cjs → Layout-D1ukrMwN.cjs} +2 -2
  166. package/dist/{Layout-DwWEea79.cjs.map → Layout-D1ukrMwN.cjs.map} +1 -1
  167. package/dist/{Layout-D7RGn0Fe.js → Layout-d-vb0okO.js} +2 -2
  168. package/dist/{Layout-D7RGn0Fe.js.map → Layout-d-vb0okO.js.map} +1 -1
  169. package/dist/{LedWidget-DgMtvsiv.js → LedWidget-Cmr6eVG2.js} +7 -6
  170. package/dist/{LedWidget-DgMtvsiv.js.map → LedWidget-Cmr6eVG2.js.map} +1 -1
  171. package/dist/LedWidget-Dwrm6hTX.cjs +2 -0
  172. package/dist/{LedWidget-BaiKDozd.cjs.map → LedWidget-Dwrm6hTX.cjs.map} +1 -1
  173. package/dist/{LimitsBar-BFM38vQL.cjs → LimitsBar-Dz1lZ_81.cjs} +2 -2
  174. package/dist/{LimitsBar-BFM38vQL.cjs.map → LimitsBar-Dz1lZ_81.cjs.map} +1 -1
  175. package/dist/{LimitsBar-CcOaAw0C.js → LimitsBar-qMynDHYT.js} +2 -2
  176. package/dist/{LimitsBar-CcOaAw0C.js.map → LimitsBar-qMynDHYT.js.map} +1 -1
  177. package/dist/{LimitsbarWidget-DpmJn1Lo.js → LimitsbarWidget-CMvcwa-m.js} +3 -3
  178. package/dist/{LimitsbarWidget-DpmJn1Lo.js.map → LimitsbarWidget-CMvcwa-m.js.map} +1 -1
  179. package/dist/{LimitsbarWidget-ConP3qI5.cjs → LimitsbarWidget-vIP9AUk4.cjs} +2 -2
  180. package/dist/{LimitsbarWidget-ConP3qI5.cjs.map → LimitsbarWidget-vIP9AUk4.cjs.map} +1 -1
  181. package/dist/LimitscolorWidget-CPuknJPk.cjs +2 -0
  182. package/dist/{LimitscolorWidget-veWQ4NXl.cjs.map → LimitscolorWidget-CPuknJPk.cjs.map} +1 -1
  183. package/dist/{LimitscolorWidget-BMXiEaDm.js → LimitscolorWidget-CZ9wMtcI.js} +7 -6
  184. package/dist/{LimitscolorWidget-BMXiEaDm.js.map → LimitscolorWidget-CZ9wMtcI.js.map} +1 -1
  185. package/dist/{LimitscolumnWidget-CJABAor8.cjs → LimitscolumnWidget-r-nOETY5.cjs} +2 -2
  186. package/dist/{LimitscolumnWidget-CJABAor8.cjs.map → LimitscolumnWidget-r-nOETY5.cjs.map} +1 -1
  187. package/dist/{LimitscolumnWidget-ufFMz6R-.js → LimitscolumnWidget-r84KJGU-.js} +2 -2
  188. package/dist/{LimitscolumnWidget-ufFMz6R-.js.map → LimitscolumnWidget-r84KJGU-.js.map} +1 -1
  189. package/dist/LinegraphWidget-BMUI8q6Q.cjs +2 -0
  190. package/dist/{LinegraphWidget-3E8L5CvM.cjs.map → LinegraphWidget-BMUI8q6Q.cjs.map} +1 -1
  191. package/dist/{LinegraphWidget-BC2wVOny.js → LinegraphWidget-COGBGOjF.js} +10 -9
  192. package/dist/{LinegraphWidget-BC2wVOny.js.map → LinegraphWidget-COGBGOjF.js.map} +1 -1
  193. package/dist/{MatrixbycolumnsWidget-DICgiNQo.cjs → MatrixbycolumnsWidget-BoNbbrEi.cjs} +2 -2
  194. package/dist/{MatrixbycolumnsWidget-DICgiNQo.cjs.map → MatrixbycolumnsWidget-BoNbbrEi.cjs.map} +1 -1
  195. package/dist/{MatrixbycolumnsWidget-DfUAeBnO.js → MatrixbycolumnsWidget-Dx2iz0YF.js} +3 -3
  196. package/dist/{MatrixbycolumnsWidget-DfUAeBnO.js.map → MatrixbycolumnsWidget-Dx2iz0YF.js.map} +1 -1
  197. package/dist/{MicroservicesTab-B0SZVty3.js → MicroservicesTab-Bhsf1soi.js} +12 -11
  198. package/dist/{MicroservicesTab-B0SZVty3.js.map → MicroservicesTab-Bhsf1soi.js.map} +1 -1
  199. package/dist/{MicroservicesTab-snXJDoYq.cjs → MicroservicesTab-Cuj56g8-.cjs} +3 -3
  200. package/dist/{MicroservicesTab-snXJDoYq.cjs.map → MicroservicesTab-Cuj56g8-.cjs.map} +1 -1
  201. package/dist/{OpenC3TimePicker-DpkbfbgC.js → OpenC3TimePicker-C3vCnk72.js} +20 -24
  202. package/dist/OpenC3TimePicker-C3vCnk72.js.map +1 -0
  203. package/dist/OpenC3TimePicker-CVUV2cK4.cjs +2 -0
  204. package/dist/OpenC3TimePicker-CVUV2cK4.cjs.map +1 -0
  205. package/dist/Openc3Screen-Bi6NOEQM.cjs +6 -0
  206. package/dist/{Openc3Screen-D1RLlBgQ.cjs.map → Openc3Screen-Bi6NOEQM.cjs.map} +1 -1
  207. package/dist/{Openc3Screen-DbUvz-3B.js → Openc3Screen-DkhDra2o.js} +67 -66
  208. package/dist/{Openc3Screen-DbUvz-3B.js.map → Openc3Screen-DkhDra2o.js.map} +1 -1
  209. package/dist/{OutputDialog-Ds-GdGyI.js → OutputDialog-D0ifesTw.js} +11 -10
  210. package/dist/{OutputDialog-Ds-GdGyI.js.map → OutputDialog-D0ifesTw.js.map} +1 -1
  211. package/dist/OutputDialog-DR9cJem2.cjs +2 -0
  212. package/dist/{OutputDialog-ChPCaQAE.cjs.map → OutputDialog-DR9cJem2.cjs.map} +1 -1
  213. package/dist/PackagesTab-B4sG5tHo.cjs +2 -0
  214. package/dist/{PackagesTab-BgQsbXRo.cjs.map → PackagesTab-B4sG5tHo.cjs.map} +1 -1
  215. package/dist/{PackagesTab-CWplBp_I.js → PackagesTab-Bb221-aM.js} +19 -18
  216. package/dist/{PackagesTab-CWplBp_I.js.map → PackagesTab-Bb221-aM.js.map} +1 -1
  217. package/dist/PluginsTab-Cbi_R9jL.cjs +6 -0
  218. package/dist/PluginsTab-Cbi_R9jL.cjs.map +1 -0
  219. package/dist/{PluginsTab-BiiL622n.js → PluginsTab-nWngR5kY.js} +275 -234
  220. package/dist/PluginsTab-nWngR5kY.js.map +1 -0
  221. package/dist/{ProgressbarWidget-D3ndYnq_.js → ProgressbarWidget-DPbAVjdC.js} +2 -2
  222. package/dist/{ProgressbarWidget-D3ndYnq_.js.map → ProgressbarWidget-DPbAVjdC.js.map} +1 -1
  223. package/dist/{ProgressbarWidget-DludJVUf.cjs → ProgressbarWidget-cPr3o6Nv.cjs} +2 -2
  224. package/dist/{ProgressbarWidget-DludJVUf.cjs.map → ProgressbarWidget-cPr3o6Nv.cjs.map} +1 -1
  225. package/dist/{RadiobuttonWidget-DX4h94p1.cjs → RadiobuttonWidget-BQZkRFa-.cjs} +2 -2
  226. package/dist/{RadiobuttonWidget-DX4h94p1.cjs.map → RadiobuttonWidget-BQZkRFa-.cjs.map} +1 -1
  227. package/dist/{RadiobuttonWidget-CP0S9nWW.js → RadiobuttonWidget-iXI9yCDk.js} +2 -2
  228. package/dist/{RadiobuttonWidget-CP0S9nWW.js.map → RadiobuttonWidget-iXI9yCDk.js.map} +1 -1
  229. package/dist/{RadiogroupWidget-BXHfA21T.js → RadiogroupWidget-CMM_p1eA.js} +2 -2
  230. package/dist/{RadiogroupWidget-BXHfA21T.js.map → RadiogroupWidget-CMM_p1eA.js.map} +1 -1
  231. package/dist/{RadiogroupWidget-NqjBNUH6.cjs → RadiogroupWidget-D2iIQ5RU.cjs} +2 -2
  232. package/dist/{RadiogroupWidget-NqjBNUH6.cjs.map → RadiogroupWidget-D2iIQ5RU.cjs.map} +1 -1
  233. package/dist/{RangebarWidget-Bv2DqkPo.js → RangebarWidget-DJXGUHAc.js} +2 -2
  234. package/dist/{RangebarWidget-Bv2DqkPo.js.map → RangebarWidget-DJXGUHAc.js.map} +1 -1
  235. package/dist/{RangebarWidget-CRq2zpvw.cjs → RangebarWidget-DsphX-jB.cjs} +2 -2
  236. package/dist/{RangebarWidget-CRq2zpvw.cjs.map → RangebarWidget-DsphX-jB.cjs.map} +1 -1
  237. package/dist/RedisTab-BZtfqEcP.js +186 -0
  238. package/dist/RedisTab-BZtfqEcP.js.map +1 -0
  239. package/dist/RedisTab-KhsG2CCO.cjs +2 -0
  240. package/dist/RedisTab-KhsG2CCO.cjs.map +1 -0
  241. package/dist/{RollupWidget-o_huYU0x.js → RollupWidget-BbWLSsTT.js} +2 -2
  242. package/dist/{RollupWidget-o_huYU0x.js.map → RollupWidget-BbWLSsTT.js.map} +1 -1
  243. package/dist/{RollupWidget-B7_Q_boi.cjs → RollupWidget-w-SF3f-X.cjs} +2 -2
  244. package/dist/{RollupWidget-B7_Q_boi.cjs.map → RollupWidget-w-SF3f-X.cjs.map} +1 -1
  245. package/dist/{RoutersTab-DN17iBBi.js → RoutersTab-CLKIJ5cm.js} +13 -12
  246. package/dist/{RoutersTab-DN17iBBi.js.map → RoutersTab-CLKIJ5cm.js.map} +1 -1
  247. package/dist/RoutersTab-DUvOfNhU.cjs +2 -0
  248. package/dist/{RoutersTab-CAbnSGHy.cjs.map → RoutersTab-DUvOfNhU.cjs.map} +1 -1
  249. package/dist/{ScriptChooser-CzzUJ1Zj.js → ScriptChooser-BxTJKTVu.js} +20 -19
  250. package/dist/{ScriptChooser-CzzUJ1Zj.js.map → ScriptChooser-BxTJKTVu.js.map} +1 -1
  251. package/dist/ScriptChooser-YC_FfCLd.cjs +2 -0
  252. package/dist/{ScriptChooser-CggwstfT.cjs.map → ScriptChooser-YC_FfCLd.cjs.map} +1 -1
  253. package/dist/{ScrollwindowWidget-kS5QjP-v.cjs → ScrollwindowWidget-D1mtHFMa.cjs} +2 -2
  254. package/dist/{ScrollwindowWidget-kS5QjP-v.cjs.map → ScrollwindowWidget-D1mtHFMa.cjs.map} +1 -1
  255. package/dist/{ScrollwindowWidget-DdjaML6D.js → ScrollwindowWidget-Dxhp7yKn.js} +2 -2
  256. package/dist/{ScrollwindowWidget-DdjaML6D.js.map → ScrollwindowWidget-Dxhp7yKn.js.map} +1 -1
  257. package/dist/SecretsTab-B7oZb354.cjs +2 -0
  258. package/dist/{SecretsTab-Cn6-o85L.cjs.map → SecretsTab-B7oZb354.cjs.map} +1 -1
  259. package/dist/{SecretsTab-Cu3sx2OA.js → SecretsTab-BoBmTh63.js} +5 -5
  260. package/dist/{SecretsTab-Cu3sx2OA.js.map → SecretsTab-BoBmTh63.js.map} +1 -1
  261. package/dist/SettingsTab-2EMyS-3_.cjs +3 -0
  262. package/dist/{SettingsTab-C6zIL2D6.cjs.map → SettingsTab-2EMyS-3_.cjs.map} +1 -1
  263. package/dist/{SettingsTab-B_vvSLvt.js → SettingsTab-BL7gkaO9.js} +7 -6
  264. package/dist/{SettingsTab-B_vvSLvt.js.map → SettingsTab-BL7gkaO9.js.map} +1 -1
  265. package/dist/{SignalWidget-Dd54y28I.js → SignalWidget-65q0tiuo.js} +2 -2
  266. package/dist/{SignalWidget-Dd54y28I.js.map → SignalWidget-65q0tiuo.js.map} +1 -1
  267. package/dist/{SignalWidget-BagcB92r.cjs → SignalWidget-Cld2lVyc.cjs} +2 -2
  268. package/dist/{SignalWidget-BagcB92r.cjs.map → SignalWidget-Cld2lVyc.cjs.map} +1 -1
  269. package/dist/{SimpleTextDialog-DZv9n_kJ.js → SimpleTextDialog-ChmFtdVw.js} +2 -2
  270. package/dist/{SimpleTextDialog-DZv9n_kJ.js.map → SimpleTextDialog-ChmFtdVw.js.map} +1 -1
  271. package/dist/{SimpleTextDialog-BJ50TbWh.cjs → SimpleTextDialog-DVlqwD8O.cjs} +2 -2
  272. package/dist/{SimpleTextDialog-BJ50TbWh.cjs.map → SimpleTextDialog-DVlqwD8O.cjs.map} +1 -1
  273. package/dist/{SpacerWidget-GPFYtIG1.js → SpacerWidget-DFzbojmX.js} +2 -2
  274. package/dist/{SpacerWidget-GPFYtIG1.js.map → SpacerWidget-DFzbojmX.js.map} +1 -1
  275. package/dist/{SpacerWidget-DWjBns9r.cjs → SpacerWidget-DV0-ZfEm.cjs} +2 -2
  276. package/dist/{SpacerWidget-DWjBns9r.cjs.map → SpacerWidget-DV0-ZfEm.cjs.map} +1 -1
  277. package/dist/SparklineWidget-B1RfTxEp.cjs +2 -0
  278. package/dist/{SparklineWidget-xdPgolp3.cjs.map → SparklineWidget-B1RfTxEp.cjs.map} +1 -1
  279. package/dist/{SparklineWidget-f11nrlLS.js → SparklineWidget-Bu4I8zY0.js} +10 -9
  280. package/dist/{SparklineWidget-f11nrlLS.js.map → SparklineWidget-Bu4I8zY0.js.map} +1 -1
  281. package/dist/{TabbookWidget-DeaC27yC.js → TabbookWidget-CELMWyx7.js} +2 -2
  282. package/dist/{TabbookWidget-DeaC27yC.js.map → TabbookWidget-CELMWyx7.js.map} +1 -1
  283. package/dist/{TabbookWidget-CUIYWHRH.cjs → TabbookWidget-CLpx5e5Q.cjs} +2 -2
  284. package/dist/{TabbookWidget-CUIYWHRH.cjs.map → TabbookWidget-CLpx5e5Q.cjs.map} +1 -1
  285. package/dist/{TargetPacketItemChooser-BoBqvs3T.js → TargetPacketItemChooser-BOdVLVbe.js} +177 -153
  286. package/dist/TargetPacketItemChooser-BOdVLVbe.js.map +1 -0
  287. package/dist/TargetPacketItemChooser-xoRA3b9K.cjs +2 -0
  288. package/dist/TargetPacketItemChooser-xoRA3b9K.cjs.map +1 -0
  289. package/dist/{TargetsTab-CjVaBN9O.js → TargetsTab-BJZEtKY4.js} +11 -10
  290. package/dist/{TargetsTab-CjVaBN9O.js.map → TargetsTab-BJZEtKY4.js.map} +1 -1
  291. package/dist/TargetsTab-Dkp4VoK6.cjs +2 -0
  292. package/dist/{TargetsTab-BMcWjrZ_.cjs.map → TargetsTab-Dkp4VoK6.cjs.map} +1 -1
  293. package/dist/{TextboxWidget-tL41zWUX.js → TextboxWidget-DYsqXntS.js} +7 -6
  294. package/dist/{TextboxWidget-tL41zWUX.js.map → TextboxWidget-DYsqXntS.js.map} +1 -1
  295. package/dist/TextboxWidget-DuNmhz89.cjs +2 -0
  296. package/dist/{TextboxWidget-CXA9rR02.cjs.map → TextboxWidget-DuNmhz89.cjs.map} +1 -1
  297. package/dist/{TextfieldWidget-D1qj14Qi.js → TextfieldWidget-BIUgV9Q4.js} +2 -2
  298. package/dist/{TextfieldWidget-D1qj14Qi.js.map → TextfieldWidget-BIUgV9Q4.js.map} +1 -1
  299. package/dist/{TextfieldWidget-D-H2fOZG.cjs → TextfieldWidget-BlW-rSVv.cjs} +2 -2
  300. package/dist/{TextfieldWidget-D-H2fOZG.cjs.map → TextfieldWidget-BlW-rSVv.cjs.map} +1 -1
  301. package/dist/{TimeWidget-CSVGNong.js → TimeWidget-BPXcY1Wy.js} +7 -6
  302. package/dist/{TimeWidget-CSVGNong.js.map → TimeWidget-BPXcY1Wy.js.map} +1 -1
  303. package/dist/TimeWidget-BddmbQgt.cjs +2 -0
  304. package/dist/{TimeWidget-CGk8Ze_I.cjs.map → TimeWidget-BddmbQgt.cjs.map} +1 -1
  305. package/dist/{TitleWidget-ClhWhUf3.cjs → TitleWidget-CPqwZKUx.cjs} +2 -2
  306. package/dist/{TitleWidget-ClhWhUf3.cjs.map → TitleWidget-CPqwZKUx.cjs.map} +1 -1
  307. package/dist/{TitleWidget-CLx-tuYT.js → TitleWidget-DJ9mHRLE.js} +2 -2
  308. package/dist/{TitleWidget-CLx-tuYT.js.map → TitleWidget-DJ9mHRLE.js.map} +1 -1
  309. package/dist/ToolsTab-B4CURni4.cjs +2 -0
  310. package/dist/{ToolsTab-DTHap-Nq.cjs.map → ToolsTab-B4CURni4.cjs.map} +1 -1
  311. package/dist/{ToolsTab-lBB_KhmA.js → ToolsTab-VSCWDywf.js} +62 -61
  312. package/dist/{ToolsTab-lBB_KhmA.js.map → ToolsTab-VSCWDywf.js.map} +1 -1
  313. package/dist/{TopBar-C810rP_B.js → TopBar-B4oz2FsN.js} +2 -2
  314. package/dist/{TopBar-C810rP_B.js.map → TopBar-B4oz2FsN.js.map} +1 -1
  315. package/dist/{TopBar-Ctzx7o2k.cjs → TopBar-lcB6jpd_.cjs} +2 -2
  316. package/dist/{TopBar-Ctzx7o2k.cjs.map → TopBar-lcB6jpd_.cjs.map} +1 -1
  317. package/dist/TsdbTab-Cv8GjpoJ.js +1164 -0
  318. package/dist/TsdbTab-Cv8GjpoJ.js.map +1 -0
  319. package/dist/TsdbTab-OOO451j0.cjs +5 -0
  320. package/dist/TsdbTab-OOO451j0.cjs.map +1 -0
  321. package/dist/{UpgradeToEnterpriseDialog-D_S574Zb.js → UpgradeToEnterpriseDialog-BUuXsGPY.js} +2 -2
  322. package/dist/{UpgradeToEnterpriseDialog-D_S574Zb.js.map → UpgradeToEnterpriseDialog-BUuXsGPY.js.map} +1 -1
  323. package/dist/{UpgradeToEnterpriseDialog-XJb6gVCY.cjs → UpgradeToEnterpriseDialog-DHLK6v6f.cjs} +2 -2
  324. package/dist/{UpgradeToEnterpriseDialog-XJb6gVCY.cjs.map → UpgradeToEnterpriseDialog-DHLK6v6f.cjs.map} +1 -1
  325. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs +1477 -0
  326. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs.map +1 -0
  327. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DskbVSHX.js +26306 -0
  328. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DskbVSHX.js.map +1 -0
  329. package/dist/VWidget-B6WHN0_z.cjs +2 -0
  330. package/dist/VWidget-B6WHN0_z.cjs.map +1 -0
  331. package/dist/{VWidget-CxnaMF0w.js → VWidget-BDy0211S.js} +17 -20
  332. package/dist/VWidget-BDy0211S.js.map +1 -0
  333. package/dist/{ValueWidget-BYgpXfDo.js → ValueWidget-DzOSy7lp.js} +7 -6
  334. package/dist/{ValueWidget-BYgpXfDo.js.map → ValueWidget-DzOSy7lp.js.map} +1 -1
  335. package/dist/ValueWidget-QWzoEFXc.cjs +2 -0
  336. package/dist/{ValueWidget-Bws1qOEI.cjs.map → ValueWidget-QWzoEFXc.cjs.map} +1 -1
  337. package/dist/{ValuelimitsbarWidget-BoZSJvuq.cjs → ValuelimitsbarWidget-5AkAljK-.cjs} +2 -2
  338. package/dist/{ValuelimitsbarWidget-BoZSJvuq.cjs.map → ValuelimitsbarWidget-5AkAljK-.cjs.map} +1 -1
  339. package/dist/{ValuelimitsbarWidget-Dc9-VNZ3.js → ValuelimitsbarWidget-D5dSlW6D.js} +4 -4
  340. package/dist/{ValuelimitsbarWidget-Dc9-VNZ3.js.map → ValuelimitsbarWidget-D5dSlW6D.js.map} +1 -1
  341. package/dist/{ValuelimitscolumnWidget-b7W8K3mR.js → ValuelimitscolumnWidget-7DXCsVW_.js} +4 -4
  342. package/dist/{ValuelimitscolumnWidget-b7W8K3mR.js.map → ValuelimitscolumnWidget-7DXCsVW_.js.map} +1 -1
  343. package/dist/{ValuelimitscolumnWidget-ta9i_tiy.cjs → ValuelimitscolumnWidget-zNx9i1v7.cjs} +2 -2
  344. package/dist/{ValuelimitscolumnWidget-ta9i_tiy.cjs.map → ValuelimitscolumnWidget-zNx9i1v7.cjs.map} +1 -1
  345. package/dist/{ValuerangebarWidget-DmhczZQb.js → ValuerangebarWidget-BWjnpmyy.js} +4 -4
  346. package/dist/{ValuerangebarWidget-DmhczZQb.js.map → ValuerangebarWidget-BWjnpmyy.js.map} +1 -1
  347. package/dist/{ValuerangebarWidget-Ips-beG6.cjs → ValuerangebarWidget-EsdIz4oP.cjs} +2 -2
  348. package/dist/{ValuerangebarWidget-Ips-beG6.cjs.map → ValuerangebarWidget-EsdIz4oP.cjs.map} +1 -1
  349. package/dist/{VerticalWidget-BvsVh0Ob.js → VerticalWidget-BOtXAhxt.js} +2 -2
  350. package/dist/{VerticalWidget-BvsVh0Ob.js.map → VerticalWidget-BOtXAhxt.js.map} +1 -1
  351. package/dist/{VerticalWidget-BVt7QPjO.cjs → VerticalWidget-DVskS6fx.cjs} +2 -2
  352. package/dist/{VerticalWidget-BVt7QPjO.cjs.map → VerticalWidget-DVskS6fx.cjs.map} +1 -1
  353. package/dist/{VerticalboxWidget-CNoXT3YW.cjs → VerticalboxWidget-Bu4oHN2K.cjs} +2 -2
  354. package/dist/{VerticalboxWidget-CNoXT3YW.cjs.map → VerticalboxWidget-Bu4oHN2K.cjs.map} +1 -1
  355. package/dist/{VerticalboxWidget-ClTCDCQN.js → VerticalboxWidget-RAsXfGdI.js} +5 -5
  356. package/dist/{VerticalboxWidget-ClTCDCQN.js.map → VerticalboxWidget-RAsXfGdI.js.map} +1 -1
  357. package/dist/{Widget-DRhVdCLP.js → Widget-BDsgRxuV.js} +37 -14
  358. package/dist/{Widget-DRhVdCLP.js.map → Widget-BDsgRxuV.js.map} +1 -1
  359. package/dist/Widget-Ddu_kuTL.cjs +2 -0
  360. package/dist/{Widget-CB_BtOFw.cjs.map → Widget-Ddu_kuTL.cjs.map} +1 -1
  361. package/dist/{addMonths-Zggd7y6j.js → addMonths-BiRF9eDT.js} +2 -2
  362. package/dist/{addMonths-Zggd7y6j.js.map → addMonths-BiRF9eDT.js.map} +1 -1
  363. package/dist/{addMonths-BhOW2mOW.cjs → addMonths-Ds2ObZwt.cjs} +2 -2
  364. package/dist/{addMonths-BhOW2mOW.cjs.map → addMonths-Ds2ObZwt.cjs.map} +1 -1
  365. package/dist/components.cjs +2 -2
  366. package/dist/components.js +28 -28
  367. package/dist/format-D2pYLAIF.js +5896 -0
  368. package/dist/format-D2pYLAIF.js.map +1 -0
  369. package/dist/format-qjtPogBb.cjs +13 -0
  370. package/dist/format-qjtPogBb.cjs.map +1 -0
  371. package/dist/getDefaultOptions-DSMQojSA.cjs +2 -0
  372. package/dist/{getDefaultOptions-Cek5kGzE.cjs.map → getDefaultOptions-DSMQojSA.cjs.map} +1 -1
  373. package/dist/getDefaultOptions-v3X-F5jM.js +8 -0
  374. package/dist/{getDefaultOptions-xjgn1r-_.js.map → getDefaultOptions-v3X-F5jM.js.map} +1 -1
  375. package/dist/{index-GYAZJDxn.js → index-BJCQaZ7q.js} +63 -62
  376. package/dist/{index-GYAZJDxn.js.map → index-BJCQaZ7q.js.map} +1 -1
  377. package/dist/{index-CJcL4_a4.js → index-BjcgyMLV.js} +691 -633
  378. package/dist/index-BjcgyMLV.js.map +1 -0
  379. package/dist/{index-3sXOEKCU.cjs → index-CctPeecq.cjs} +5 -5
  380. package/dist/{index-3sXOEKCU.cjs.map → index-CctPeecq.cjs.map} +1 -1
  381. package/dist/index-_a-NnvKv.cjs +10 -0
  382. package/dist/index-_a-NnvKv.cjs.map +1 -0
  383. package/dist/{parse-BKTTGw2p.js → parse-Br4M7sX4.js} +3 -3
  384. package/dist/{parse-BKTTGw2p.js.map → parse-Br4M7sX4.js.map} +1 -1
  385. package/dist/{parse-DgZTYocC.cjs → parse-D8syXcjd.cjs} +2 -2
  386. package/dist/{parse-DgZTYocC.cjs.map → parse-D8syXcjd.cjs.map} +1 -1
  387. package/dist/plugins.cjs +1 -1
  388. package/dist/plugins.cjs.map +1 -1
  389. package/dist/plugins.js +1 -1
  390. package/dist/plugins.js.map +1 -1
  391. package/dist/purify.es-CehoGjrR.cjs +3 -0
  392. package/dist/purify.es-CehoGjrR.cjs.map +1 -0
  393. package/dist/purify.es-exIQuqhb.js +596 -0
  394. package/dist/purify.es-exIQuqhb.js.map +1 -0
  395. package/dist/settings-CWvCIKI4.cjs +2 -0
  396. package/dist/{settings-B0AhztTk.cjs.map → settings-CWvCIKI4.cjs.map} +1 -1
  397. package/dist/{settings-C2auUQwX.js → settings-Dvmurty6.js} +2 -2
  398. package/dist/{settings-C2auUQwX.js.map → settings-Dvmurty6.js.map} +1 -1
  399. package/dist/settingsCache-CGgEjlw3.js +28 -0
  400. package/dist/settingsCache-CGgEjlw3.js.map +1 -0
  401. package/dist/settingsCache-Dg7OMDJK.cjs +2 -0
  402. package/dist/settingsCache-Dg7OMDJK.cjs.map +1 -0
  403. package/dist/{timeFilters-CRNRsUsb.cjs → timeFilters-BtN2a5-O.cjs} +2 -2
  404. package/dist/{timeFilters-CRNRsUsb.cjs.map → timeFilters-BtN2a5-O.cjs.map} +1 -1
  405. package/dist/{timeFilters-DTOZtBlG.js → timeFilters-C1beMtAQ.js} +3 -3
  406. package/dist/{timeFilters-DTOZtBlG.js.map → timeFilters-C1beMtAQ.js.map} +1 -1
  407. package/dist/tools/admin.cjs +1 -1
  408. package/dist/tools/admin.js +1 -1
  409. package/dist/tools/base.cjs +1 -1
  410. package/dist/tools/base.cjs.map +1 -1
  411. package/dist/tools/base.js +51 -51
  412. package/dist/tools/calendar.cjs +1 -1
  413. package/dist/tools/calendar.js +1 -1
  414. package/dist/tools/scriptrunner.cjs +8 -8
  415. package/dist/tools/scriptrunner.cjs.map +1 -1
  416. package/dist/tools/scriptrunner.js +17 -17
  417. package/dist/tools/scriptrunner.js.map +1 -1
  418. package/dist/util.cjs +1 -1
  419. package/dist/util.js +11 -7
  420. package/dist/util.js.map +1 -1
  421. package/dist/vue-common.css +1 -1
  422. package/dist/widgets.cjs +1 -1
  423. package/dist/widgets.js +64 -64
  424. package/package.json +7 -7
  425. package/dist/ArrayplotWidget-BHD-TGQO.cjs +0 -2
  426. package/dist/BarColumn-DmjMnw5l.js.map +0 -1
  427. package/dist/BarColumn-Ym4P8YHC.cjs +0 -2
  428. package/dist/BarColumn-Ym4P8YHC.cjs.map +0 -1
  429. package/dist/ButtonWidget-70hNWuEy.cjs +0 -3
  430. package/dist/ButtonWidget-70hNWuEy.cjs.map +0 -1
  431. package/dist/ButtonWidget-DZ4VCNWU.js.map +0 -1
  432. package/dist/ClassificationBanners-DjGCuH-4.cjs +0 -2
  433. package/dist/CriticalCmdDialog-eytxCQto.cjs +0 -2
  434. package/dist/DateWidget-Cle8FY8Q.cjs +0 -2
  435. package/dist/DetailsDialog-BcMaTfuQ.cjs +0 -2
  436. package/dist/EventListDialog-DjCQAwGl.js.map +0 -1
  437. package/dist/EventListDialog-EmC7YW60.cjs +0 -2
  438. package/dist/EventListDialog-EmC7YW60.cjs.map +0 -1
  439. package/dist/FilechecksumWidget-2ta-UvLp.cjs +0 -2
  440. package/dist/FiledisplayWidget-BUKXIQir.cjs +0 -2
  441. package/dist/Graph-CUFzx8Ti.js.map +0 -1
  442. package/dist/Graph-qxF4224c.cjs +0 -2
  443. package/dist/Graph-qxF4224c.cjs.map +0 -1
  444. package/dist/GraphWidget-BvCQHVxQ.cjs +0 -2
  445. package/dist/ImageLoader-BTEOukIw.cjs +0 -2
  446. package/dist/InterfacesTab-CM0CGFVS.cjs +0 -2
  447. package/dist/LabelvalueWidget-_1JPbK-K.js.map +0 -1
  448. package/dist/LabelvalueWidget-bYqqgIGE.cjs +0 -2
  449. package/dist/LabelvalueWidget-bYqqgIGE.cjs.map +0 -1
  450. package/dist/LabelvaluedescWidget-B2dFZoDE.cjs +0 -2
  451. package/dist/LabelvaluedescWidget-B2dFZoDE.cjs.map +0 -1
  452. package/dist/LabelvaluedescWidget-BgduSJJb.js +0 -59
  453. package/dist/LabelvaluedescWidget-BgduSJJb.js.map +0 -1
  454. package/dist/LedWidget-BaiKDozd.cjs +0 -2
  455. package/dist/LimitscolorWidget-veWQ4NXl.cjs +0 -2
  456. package/dist/LinegraphWidget-3E8L5CvM.cjs +0 -2
  457. package/dist/OpenC3TimePicker-DpkbfbgC.js.map +0 -1
  458. package/dist/OpenC3TimePicker-Yl1jVi7p.cjs +0 -2
  459. package/dist/OpenC3TimePicker-Yl1jVi7p.cjs.map +0 -1
  460. package/dist/Openc3Screen-D1RLlBgQ.cjs +0 -6
  461. package/dist/OutputDialog-ChPCaQAE.cjs +0 -2
  462. package/dist/PackagesTab-BgQsbXRo.cjs +0 -2
  463. package/dist/PluginsTab-BiiL622n.js.map +0 -1
  464. package/dist/PluginsTab-RgIMk-F7.cjs +0 -6
  465. package/dist/PluginsTab-RgIMk-F7.cjs.map +0 -1
  466. package/dist/RedisTab-7TbOXFA_.js +0 -171
  467. package/dist/RedisTab-7TbOXFA_.js.map +0 -1
  468. package/dist/RedisTab-DpWPY1P0.cjs +0 -2
  469. package/dist/RedisTab-DpWPY1P0.cjs.map +0 -1
  470. package/dist/RoutersTab-CAbnSGHy.cjs +0 -2
  471. package/dist/ScriptChooser-CggwstfT.cjs +0 -2
  472. package/dist/SecretsTab-Cn6-o85L.cjs +0 -2
  473. package/dist/SettingsTab-C6zIL2D6.cjs +0 -3
  474. package/dist/SparklineWidget-xdPgolp3.cjs +0 -2
  475. package/dist/TargetPacketItemChooser-BoBqvs3T.js.map +0 -1
  476. package/dist/TargetPacketItemChooser-C0Z90rss.cjs +0 -2
  477. package/dist/TargetPacketItemChooser-C0Z90rss.cjs.map +0 -1
  478. package/dist/TargetsTab-BMcWjrZ_.cjs +0 -2
  479. package/dist/TextboxWidget-CXA9rR02.cjs +0 -2
  480. package/dist/TimeWidget-CGk8Ze_I.cjs +0 -2
  481. package/dist/ToolsTab-DTHap-Nq.cjs +0 -2
  482. package/dist/TsdbTab-7F4mRKDo.js +0 -125
  483. package/dist/TsdbTab-7F4mRKDo.js.map +0 -1
  484. package/dist/TsdbTab-DVF6n9mq.cjs +0 -2
  485. package/dist/TsdbTab-DVF6n9mq.cjs.map +0 -1
  486. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js +0 -30891
  487. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js.map +0 -1
  488. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs +0 -1485
  489. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs.map +0 -1
  490. package/dist/VWidget-CxnaMF0w.js.map +0 -1
  491. package/dist/VWidget-dEHSEvZx.cjs +0 -2
  492. package/dist/VWidget-dEHSEvZx.cjs.map +0 -1
  493. package/dist/ValueWidget-Bws1qOEI.cjs +0 -2
  494. package/dist/Widget-CB_BtOFw.cjs +0 -2
  495. package/dist/format-CJYjW-xx.js +0 -1252
  496. package/dist/format-CJYjW-xx.js.map +0 -1
  497. package/dist/format-DOZQNf-X.cjs +0 -2
  498. package/dist/format-DOZQNf-X.cjs.map +0 -1
  499. package/dist/getDefaultOptions-Cek5kGzE.cjs +0 -2
  500. package/dist/getDefaultOptions-xjgn1r-_.js +0 -8
  501. package/dist/index-B34azWgs.cjs +0 -7
  502. package/dist/index-B34azWgs.cjs.map +0 -1
  503. package/dist/index-CJcL4_a4.js.map +0 -1
  504. package/dist/purify.es-4pyphLiB.cjs +0 -3
  505. package/dist/purify.es-4pyphLiB.cjs.map +0 -1
  506. package/dist/purify.es-BPDBzHtc.js +0 -553
  507. package/dist/purify.es-BPDBzHtc.js.map +0 -1
  508. package/dist/settings-B0AhztTk.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"MicroservicesTab-B0SZVty3.js","sources":["../src/tools/admin/tabs/MicroservicesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\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.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-alert v-model=\"showAlert\" closable :type=\"alertType\">{{\n alert\n }}</v-alert>\n <div class=\"text-caption text-medium-emphasis mt-2 mb-2 ml-4\">\n <template v-if=\"hasServiceFilter && filteredServiceCount === 0\">\n No microservices match filter (showing 0 / {{ totalServiceCount }})\n </template>\n <template v-else-if=\"hasServiceFilter\">\n Showing {{ filteredServiceCount }} /\n {{ totalServiceCount }} microservices\n </template>\n <template v-else> {{ totalServiceCount }} microservices </template>\n </div>\n <v-row v-if=\"hasServiceFilter\" class=\"ml-1 mb-1\">\n <v-col cols=\"auto\">\n <v-btn\n color=\"primary\"\n prepend-icon=\"mdi-filter-off\"\n aria-label=\"Filter applied. Click to clear filter and show all services.\"\n @click=\"clearServiceFilter\"\n >\n Show All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"warning\"\n prepend-icon=\"mdi-refresh\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkRestartServices\"\n >\n Restart All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"error\"\n prepend-icon=\"mdi-stop\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkStopServices\"\n >\n Stop All\n </v-btn>\n </v-col>\n </v-row>\n <v-list class=\"list\" data-test=\"microserviceList\">\n <div\n v-for=\"microservice in filteredMicroservices\"\n :key=\"microservice.name\"\n >\n <v-list-item>\n <v-list-item-title>{{ microservice.name }}</v-list-item-title>\n <v-list-item-subtitle v-if=\"microservice_status[microservice.name]\">\n Updated:\n {{\n formatNanoseconds(\n microservice_status[microservice.name].updated_at,\n timeZone,\n )\n }}, Enabled: {{ isEnabled(microservice.name) ? 'True' : 'False' }},\n Count:\n {{ microservice_status[microservice.name].count }}\n </v-list-item-subtitle>\n <template #append>\n <v-btn\n v-show=\"microservice_status[microservice.name]?.error\"\n icon=\"mdi-alert\"\n variant=\"text\"\n @click=\"showMicroserviceError(microservice.name)\"\n />\n <v-chip\n v-if=\"microservice_status[microservice.name]\"\n :color=\"getStateColor(microservice.name)\"\n size=\"small\"\n label\n >\n {{ getStateText(microservice.name) }}\n </v-chip>\n <v-tooltip\n :text=\"isEnabled(microservice.name) ? 'Restart' : 'Start'\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n :aria-label=\"\n isEnabled(microservice.name)\n ? 'Restart Microservice'\n : 'Start Microservice'\n \"\n :icon=\"\n isRestarting(microservice.name) ||\n isStarting(microservice.name)\n ? 'mdi-loading'\n : isEnabled(microservice.name)\n ? 'mdi-refresh'\n : 'mdi-play'\n \"\n :class=\"{\n 'rotating-icon':\n isRestarting(microservice.name) ||\n isStarting(microservice.name),\n }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"restartMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Stop\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Stop Microservice\"\n :icon=\"\n isStopping(microservice.name) ? 'mdi-loading' : 'mdi-stop'\n \"\n :class=\"{ 'rotating-icon': isStopping(microservice.name) }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"stopMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Show Details\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Show Microservice Details\"\n icon=\"mdi-eye\"\n variant=\"text\"\n @click=\"showMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <output-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n :content=\"jsonContent\"\n type=\"Microservice\"\n :name=\"dialogTitle\"\n @submit=\"dialogCallback\"\n />\n <text-box-dialog\n v-if=\"showError\"\n v-model=\"showError\"\n :text=\"jsonContent\"\n :title=\"dialogTitle\"\n />\n </div>\n</template>\n\n<script>\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { OutputDialog, TextBoxDialog } from '@/components'\nimport { TimeFilters } from '@/util'\n\nexport default {\n components: {\n OutputDialog,\n TextBoxDialog,\n },\n mixins: [TimeFilters],\n data() {\n return {\n filteredMicroservices: [],\n allMicroservices: [],\n microservice_status: {},\n microservice_id: null,\n jsonContent: '',\n dialogTitle: '',\n showDialog: false,\n showError: false,\n alert: '',\n alertType: 'success',\n showAlert: false,\n updater: null,\n timeZone: 'local',\n // { service_name:\n // { operation: 'stopping' | 'restarting' | 'starting',\n // enabled_states: []\n // initial_updated_at: timestamp\n // time_started: timestamp\n // }\n // }\n microserviceOperations: {},\n }\n },\n computed: {\n serviceFilter() {\n const services = this.$route.query.services\n if (!services) return null\n return services\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s)\n },\n hasServiceFilter() {\n return this.serviceFilter && this.serviceFilter.length > 0\n },\n totalServiceCount() {\n return this.allMicroservices.length\n },\n filteredServiceCount() {\n return this.filteredMicroservices.length\n },\n },\n watch: {\n '$route.query.services': function () {\n this.applyServiceFilter()\n },\n },\n created() {\n new OpenC3Api()\n .get_setting('time_zone')\n .then((response) => {\n if (response) {\n this.timeZone = response\n }\n })\n .catch(() => {\n // Do nothing\n })\n },\n mounted() {\n this.update()\n this.updater = setInterval(() => {\n this.update()\n }, 2000)\n },\n beforeUnmount() {\n clearInterval(this.updater)\n this.updater = null\n },\n methods: {\n isOperationInProgress: function (name) {\n return !!this.microserviceOperations[name]\n },\n isEnabled: function (name) {\n const microservice = this.allMicroservices.find((ms) => ms.name === name)\n return microservice?.enabled !== false\n },\n isRestarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'restarting'\n },\n isStarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'starting'\n },\n isStopping: function (name) {\n return this.microserviceOperations[name]?.operation === 'stopping'\n },\n update: function () {\n Api.get('/openc3-api/microservice_status/all').then((response) => {\n this.microservice_status = response.data\n this.checkOperationCompletion()\n })\n Api.get('/openc3-api/microservices/all').then((response) => {\n // Convert hash of microservices to array of microservices\n let microservices = []\n for (const [_microservice_name, microservice] of Object.entries(\n response.data,\n )) {\n microservices.push(microservice)\n }\n microservices.sort((a, b) => a.name.localeCompare(b.name))\n this.allMicroservices = microservices\n this.applyServiceFilter()\n })\n },\n checkOperationCompletion: function () {\n for (const [name, tracking] of Object.entries(\n this.microserviceOperations,\n )) {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n if (!microservice) continue\n\n const currentEnabled = microservice.enabled !== false\n const lastEnabled =\n tracking.enabled_states[tracking.enabled_states.length - 1]\n\n // Only add state if it changed\n if (currentEnabled !== lastEnabled) {\n tracking.enabled_states.push(currentEnabled)\n }\n\n const isComplete = this.isOperationComplete(name, tracking)\n if (isComplete) {\n delete this.microserviceOperations[name]\n }\n }\n },\n isOperationComplete: function (serviceName, tracking) {\n // Check for timeout (30 seconds)\n const elapsed = Date.now() - tracking.time_started\n if (elapsed > 30000) {\n this.alert = `${serviceName} timed out when ${tracking.operation}.`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[serviceName]\n return true\n }\n\n if (tracking.operation === 'stopping') {\n // Track true -> false\n return tracking.enabled_states.includes(false)\n }\n if (tracking.operation === 'starting') {\n // Track false -> true\n return tracking.enabled_states.includes(true)\n }\n if (tracking.operation === 'restarting') {\n // Check if updated_at has changed\n const currentUpdatedAt =\n this.microservice_status[serviceName]?.updated_at\n if (currentUpdatedAt && tracking.initial_updated_at) {\n return currentUpdatedAt !== tracking.initial_updated_at\n }\n return false\n }\n return false\n },\n applyServiceFilter: function () {\n if (this.hasServiceFilter) {\n this.filteredMicroservices = this.allMicroservices.filter((ms) =>\n this.serviceFilter.includes(ms.name),\n )\n } else {\n this.filteredMicroservices = this.allMicroservices\n }\n },\n clearServiceFilter: function () {\n this.$router.push({ query: {} })\n },\n bulkRestartServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to restart ${microserviceNames.length} microservice(s)? ${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n const initialUpdatedAt = this.microservice_status[name]?.updated_at\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: initialUpdatedAt,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch(\n (error) => {\n this.alert = `Start command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n bulkStopServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to stop ${microserviceNames.length} microservice(s)?\\n\\n${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch(\n (error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n stopMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to stop microservice: ${name}?`, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch((error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n restartMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to restart microservice: ${name}?`, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: this.microservice_status[name]?.updated_at,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch((error) => {\n this.alert = `Restart command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n showMicroservice: function (name) {\n Api.get(`/openc3-api/microservices/${name}`).then((response) => {\n this.microservice_id = name\n this.dialogTitle = name\n this.jsonContent = JSON.stringify(response.data, null, '\\t')\n this.showDialog = true\n })\n },\n showMicroserviceError: function (name) {\n this.dialogTitle = name\n const e = this.microservice_status[name].error\n this.jsonContent = JSON.stringify(e, null, '\\t')\n this.showError = true\n },\n // States are determined by the microservice and not from an explicitly defined set\n // However, we can provide useful colors for errors and common states\n getStateColor(microserviceName) {\n const status = this.microservice_status[microserviceName]\n if (!status) return 'grey'\n if (status.error) return 'red'\n // If not enabled, show as stopped even if state is \"running\"\n if (!this.isEnabled(microserviceName) || status.state === 'STOPPED')\n return 'yellow'\n if (status.state === 'RUNNING') return 'green'\n return 'grey'\n },\n getStateText(microserviceName) {\n if (!this.isEnabled(microserviceName)) {\n return 'STOPPED'\n }\n return this.microservice_status[microserviceName].state\n },\n dialogCallback: function (content) {\n this.showDialog = false\n if (content !== null) {\n let parsed = JSON.parse(content)\n let method = 'put'\n let url = `/openc3-api/microservices/${this.microservice_id}`\n if (parsed['name'] !== this.microservice_id) {\n method = 'post'\n url = '/openc3-api/microservices'\n }\n\n Api[method](url, {\n data: {\n json: content,\n },\n }).then((response) => {\n this.alert = 'Modified Microservice'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n })\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.rotating-icon {\n animation: spin 1s linear infinite;\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n"],"names":["_sfc_main","OutputDialog","TextBoxDialog","TimeFilters","services","s","OpenC3Api","response","name","ms","Api","microservices","_microservice_name","microservice","a","b","tracking","currentEnabled","lastEnabled","serviceName","currentUpdatedAt","microserviceNames","m","microserviceList","confirmMessage","initialUpdatedAt","error","_dialog","e","microserviceName","status","content","parsed","method","url","_hoisted_1","_createElementBlock","_createVNode","_component_v_alert","$data","$event","_createElementVNode","$options","_Fragment","_toDisplayString","_createTextVNode","_createBlock","_component_v_row","_component_v_col","_component_v_btn","_cache","_component_v_list","_renderList","_component_v_list_item","_vShow","_component_v_chip","_component_v_tooltip","_withCtx","props","_mergeProps","_component_v_list_item_title","_component_v_list_item_subtitle","_ctx","_component_v_divider","_component_output_dialog","_component_text_box_dialog"],"mappings":";;;;;;;;AAqLA,MAAKA,IAAU;AAAA,EACb,YAAY;AAAA,IACV,cAAAC;AAAA,IACA,eAAAC;AAAA;EAEF,QAAQ,CAACC,CAAW;AAAA,EACpB,OAAO;AACL,WAAO;AAAA,MACL,uBAAuB,CAAA;AAAA,MACvB,kBAAkB,CAAA;AAAA,MAClB,qBAAqB,CAAA;AAAA,MACrB,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,OAAO;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQV,wBAAwB,CAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,gBAAgB;AACd,YAAMC,IAAW,KAAK,OAAO,MAAM;AACnC,aAAKA,IACEA,EACJ,MAAM,GAAG,EACT,IAAI,CAACC,MAAMA,EAAE,KAAI,CAAE,EACnB,OAAO,CAACA,MAAMA,CAAC,IAJI;AAAA,IAKxB;AAAA,IACA,mBAAmB;AACjB,aAAO,KAAK,iBAAiB,KAAK,cAAc,SAAS;AAAA,IAC3D;AAAA,IACA,oBAAoB;AAClB,aAAO,KAAK,iBAAiB;AAAA,IAC/B;AAAA,IACA,uBAAuB;AACrB,aAAO,KAAK,sBAAsB;AAAA,IACpC;AAAA;EAEF,OAAO;AAAA,IACL,yBAAyB,WAAY;AACnC,WAAK,mBAAkB;AAAA,IACzB;AAAA;EAEF,UAAU;AACR,QAAIC,EAAS,EACV,YAAY,WAAW,EACvB,KAAK,CAACC,MAAa;AAClB,MAAIA,MACF,KAAK,WAAWA;AAAA,IAEpB,CAAC,EACA,MAAM,MAAM;AAAA,IAEb,CAAC;AAAA,EACL;AAAA,EACA,UAAU;AACR,SAAK,OAAM,GACX,KAAK,UAAU,YAAY,MAAM;AAC/B,WAAK,OAAM;AAAA,IACb,GAAG,GAAI;AAAA,EACT;AAAA,EACA,gBAAgB;AACd,kBAAc,KAAK,OAAO,GAC1B,KAAK,UAAU;AAAA,EACjB;AAAA,EACA,SAAS;AAAA,IACP,uBAAuB,SAAUC,GAAM;AACrC,aAAO,CAAC,CAAC,KAAK,uBAAuBA,CAAI;AAAA,IAC3C;AAAA,IACA,WAAW,SAAUA,GAAM;AAEzB,aADqB,KAAK,iBAAiB,KAAK,CAACC,MAAOA,EAAG,SAASD,CAAI,GACnD,YAAY;AAAA,IACnC;AAAA,IACA,cAAc,SAAUA,GAAM;AAC5B,aAAO,KAAK,uBAAuBA,CAAI,GAAG,cAAc;AAAA,IAC1D;AAAA,IACA,YAAY,SAAUA,GAAM;AAC1B,aAAO,KAAK,uBAAuBA,CAAI,GAAG,cAAc;AAAA,IAC1D;AAAA,IACA,YAAY,SAAUA,GAAM;AAC1B,aAAO,KAAK,uBAAuBA,CAAI,GAAG,cAAc;AAAA,IAC1D;AAAA,IACA,QAAQ,WAAY;AAClBE,MAAAA,EAAI,IAAI,qCAAqC,EAAE,KAAK,CAACH,MAAa;AAChE,aAAK,sBAAsBA,EAAS,MACpC,KAAK,yBAAwB;AAAA,MAC/B,CAAC,GACDG,EAAI,IAAI,+BAA+B,EAAE,KAAK,CAACH,MAAa;AAE1D,YAAII,IAAgB,CAAA;AACpB,mBAAW,CAACC,GAAoBC,CAAY,KAAK,OAAO;AAAA,UACtDN,EAAS;AAAA,QACX;AACE,UAAAI,EAAc,KAAKE,CAAY;AAEjC,QAAAF,EAAc,KAAK,CAACG,GAAGC,MAAMD,EAAE,KAAK,cAAcC,EAAE,IAAI,CAAC,GACzD,KAAK,mBAAmBJ,GACxB,KAAK,mBAAkB;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,IACA,0BAA0B,WAAY;AACpC,iBAAW,CAACH,GAAMQ,CAAQ,KAAK,OAAO;AAAA,QACpC,KAAK;AAAA,MACP,GAAG;AACD,cAAMH,IAAe,KAAK,iBAAiB;AAAA,UACzC,CAACJ,MAAOA,EAAG,SAASD;AAAA,QACtB;AACA,YAAI,CAACK,EAAc;AAEnB,cAAMI,IAAiBJ,EAAa,YAAY,IAC1CK,IACJF,EAAS,eAAeA,EAAS,eAAe,SAAS,CAAC;AAG5D,QAAIC,MAAmBC,KACrBF,EAAS,eAAe,KAAKC,CAAc,GAG1B,KAAK,oBAAoBT,GAAMQ,CAAQ,KAExD,OAAO,KAAK,uBAAuBR,CAAI;AAAA,MAE3C;AAAA,IACF;AAAA,IACA,qBAAqB,SAAUW,GAAaH,GAAU;AAGpD,UADgB,KAAK,IAAG,IAAKA,EAAS,eACxB;AACZ,oBAAK,QAAQ,GAAGG,CAAW,mBAAmBH,EAAS,SAAS,KAChE,KAAK,YAAY,SACjB,KAAK,YAAY,IACjB,WAAW,MAAM;AACf,eAAK,YAAY;AAAA,QACnB,GAAG,GAAI,GACP,OAAO,KAAK,uBAAuBG,CAAW,GACvC;AAGT,UAAIH,EAAS,cAAc;AAEzB,eAAOA,EAAS,eAAe,SAAS,EAAK;AAE/C,UAAIA,EAAS,cAAc;AAEzB,eAAOA,EAAS,eAAe,SAAS,EAAI;AAE9C,UAAIA,EAAS,cAAc,cAAc;AAEvC,cAAMI,IACJ,KAAK,oBAAoBD,CAAW,GAAG;AACzC,eAAIC,KAAoBJ,EAAS,qBACxBI,MAAqBJ,EAAS,qBAEhC;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACA,oBAAoB,WAAY;AAC9B,MAAI,KAAK,mBACP,KAAK,wBAAwB,KAAK,iBAAiB;AAAA,QAAO,CAACP,MACzD,KAAK,cAAc,SAASA,EAAG,IAAI;AAAA,MACrC,IAEA,KAAK,wBAAwB,KAAK;AAAA,IAEtC;AAAA,IACA,oBAAoB,WAAY;AAC9B,WAAK,QAAQ,KAAK,EAAE,OAAO,CAAA,EAAC,CAAG;AAAA,IACjC;AAAA,IACA,qBAAqB,WAAY;AAC/B,YAAMY,IAAoB,KAAK,sBAAsB,IAAI,CAACC,MAAMA,EAAE,IAAI,GAChEC,IAAmBF,EAAkB,KAAK,IAAI,GAC9CG,IAAiB,oCAAoCH,EAAkB,MAAM,qBAAqBE,CAAgB;AAExH,WAAK,QACF,QAAQC,GAAgB;AAAA,QACvB,QAAQ;AAAA,QACR,YAAY;AAAA,OACb,EACA,KAAK,MAAM;AACV,QAAAH,EAAkB,QAAQ,CAACb,MAAS;AAIlC,gBAAMS,IAHe,KAAK,iBAAiB;AAAA,YACzC,CAACR,MAAOA,EAAG,SAASD;AAAA,UACtB,GACqC,YAAY,IAC3CiB,IAAmB,KAAK,oBAAoBjB,CAAI,GAAG;AACzD,eAAK,uBAAuBA,CAAI,IAAI;AAAA,YAClC,WAAW;AAAA,YACX,gBAAgB,CAACS,CAAc;AAAA,YAC/B,oBAAoBQ;AAAA,YACpB,cAAc,KAAK,IAAG;AAAA,UACxB,GACAf,EAAI,KAAK,6BAA6BF,CAAI,QAAQ,EAAE;AAAA,YAClD,CAACkB,MAAU;AACT,mBAAK,QAAQ,4BAA4BlB,CAAI,KAAKkB,CAAK,IACvD,KAAK,YAAY,SACjB,KAAK,YAAY,IACjB,WAAW,MAAM;AACf,qBAAK,YAAY;AAAA,cACnB,GAAG,GAAI,GACP,OAAO,KAAK,uBAAuBlB,CAAI;AAAA,YACzC;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH,CAAC,EACA,MAAM,MAAM;AAAA,MAEb,CAAC;AAAA,IACL;AAAA,IACA,kBAAkB,WAAY;AAC5B,YAAMa,IAAoB,KAAK,sBAAsB,IAAI,CAACC,MAAMA,EAAE,IAAI,GAChEC,IAAmBF,EAAkB,KAAK,IAAI,GAC9CG,IAAiB,iCAAiCH,EAAkB,MAAM;AAAA;AAAA,EAAwBE,CAAgB;AAExH,WAAK,QACF,QAAQC,GAAgB;AAAA,QACvB,QAAQ;AAAA,QACR,YAAY;AAAA,OACb,EACA,KAAK,MAAM;AACV,QAAAH,EAAkB,QAAQ,CAACb,MAAS;AAIlC,gBAAMS,IAHe,KAAK,iBAAiB;AAAA,YACzC,CAACR,MAAOA,EAAG,SAASD;AAAA,UACtB,GACqC,YAAY;AACjD,eAAK,uBAAuBA,CAAI,IAAI;AAAA,YAClC,WAAW;AAAA,YACX,gBAAgB,CAACS,CAAc;AAAA,YAC/B,cAAc,KAAK,IAAG;AAAA,UACxB,GACAP,EAAI,KAAK,6BAA6BF,CAAI,OAAO,EAAE;AAAA,YACjD,CAACkB,MAAU;AACT,mBAAK,QAAQ,2BAA2BlB,CAAI,KAAKkB,CAAK,IACtD,KAAK,YAAY,SACjB,KAAK,YAAY,IACjB,WAAW,MAAM;AACf,qBAAK,YAAY;AAAA,cACnB,GAAG,GAAI,GACP,OAAO,KAAK,uBAAuBlB,CAAI;AAAA,YACzC;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH,CAAC,EACA,MAAM,MAAM;AAAA,MAEb,CAAC;AAAA,IACL;AAAA,IACA,kBAAkB,SAAUA,GAAM;AAChC,WAAK,QACF,QAAQ,+CAA+CA,CAAI,KAAK;AAAA,QAC/D,QAAQ;AAAA,QACR,YAAY;AAAA,OACb,EACA,KAAK,CAACmB,MAAY;AAIjB,cAAMV,IAHe,KAAK,iBAAiB;AAAA,UACzC,CAACR,MAAOA,EAAG,SAASD;AAAA,QACtB,GACqC,YAAY;AACjD,aAAK,uBAAuBA,CAAI,IAAI;AAAA,UAClC,WAAW;AAAA,UACX,gBAAgB,CAACS,CAAc;AAAA,UAC/B,cAAc,KAAK,IAAG;AAAA,QACxB,GACAP,EAAI,KAAK,6BAA6BF,CAAI,OAAO,EAAE,MAAM,CAACkB,MAAU;AAClE,eAAK,QAAQ,2BAA2BlB,CAAI,KAAKkB,CAAK,IACtD,KAAK,YAAY,SACjB,KAAK,YAAY,IACjB,WAAW,MAAM;AACf,iBAAK,YAAY;AAAA,UACnB,GAAG,GAAI,GACP,OAAO,KAAK,uBAAuBlB,CAAI;AAAA,QACzC,CAAC;AAAA,MACH,CAAC;AAAA,IACL;AAAA,IACA,qBAAqB,SAAUA,GAAM;AACnC,WAAK,QACF,QAAQ,kDAAkDA,CAAI,KAAK;AAAA,QAClE,QAAQ;AAAA,QACR,YAAY;AAAA,OACb,EACA,KAAK,CAACmB,MAAY;AAIjB,cAAMV,IAHe,KAAK,iBAAiB;AAAA,UACzC,CAACR,MAAOA,EAAG,SAASD;AAAA,QACtB,GACqC,YAAY;AACjD,aAAK,uBAAuBA,CAAI,IAAI;AAAA,UAClC,WAAW;AAAA,UACX,gBAAgB,CAACS,CAAc;AAAA,UAC/B,oBAAoB,KAAK,oBAAoBT,CAAI,GAAG;AAAA,UACpD,cAAc,KAAK,IAAG;AAAA,QACxB,GACAE,EAAI,KAAK,6BAA6BF,CAAI,QAAQ,EAAE,MAAM,CAACkB,MAAU;AACnE,eAAK,QAAQ,8BAA8BlB,CAAI,KAAKkB,CAAK,IACzD,KAAK,YAAY,SACjB,KAAK,YAAY,IACjB,WAAW,MAAM;AACf,iBAAK,YAAY;AAAA,UACnB,GAAG,GAAI,GACP,OAAO,KAAK,uBAAuBlB,CAAI;AAAA,QACzC,CAAC;AAAA,MACH,CAAC;AAAA,IACL;AAAA,IACA,kBAAkB,SAAUA,GAAM;AAChCE,MAAAA,EAAI,IAAI,6BAA6BF,CAAI,EAAE,EAAE,KAAK,CAACD,MAAa;AAC9D,aAAK,kBAAkBC,GACvB,KAAK,cAAcA,GACnB,KAAK,cAAc,KAAK,UAAUD,EAAS,MAAM,MAAM,GAAI,GAC3D,KAAK,aAAa;AAAA,MACpB,CAAC;AAAA,IACH;AAAA,IACA,uBAAuB,SAAUC,GAAM;AACrC,WAAK,cAAcA;AACnB,YAAMoB,IAAI,KAAK,oBAAoBpB,CAAI,EAAE;AACzC,WAAK,cAAc,KAAK,UAAUoB,GAAG,MAAM,GAAI,GAC/C,KAAK,YAAY;AAAA,IACnB;AAAA;AAAA;AAAA,IAGA,cAAcC,GAAkB;AAC9B,YAAMC,IAAS,KAAK,oBAAoBD,CAAgB;AACxD,aAAKC,IACDA,EAAO,QAAc,QAErB,CAAC,KAAK,UAAUD,CAAgB,KAAKC,EAAO,UAAU,YACjD,WACLA,EAAO,UAAU,YAAkB,UAChC,SANa;AAAA,IAOtB;AAAA,IACA,aAAaD,GAAkB;AAC7B,aAAK,KAAK,UAAUA,CAAgB,IAG7B,KAAK,oBAAoBA,CAAgB,EAAE,QAFzC;AAAA,IAGX;AAAA,IACA,gBAAgB,SAAUE,GAAS;AAEjC,UADA,KAAK,aAAa,IACdA,MAAY,MAAM;AACpB,YAAIC,IAAS,KAAK,MAAMD,CAAO,GAC3BE,IAAS,OACTC,IAAM,6BAA6B,KAAK,eAAe;AAC3D,QAAIF,EAAO,SAAY,KAAK,oBAC1BC,IAAS,QACTC,IAAM,8BAGRxB,EAAIuB,CAAM,EAAEC,GAAK;AAAA,UACf,MAAM;AAAA,YACJ,MAAMH;AAAA;QAEV,CAAC,EAAE,KAAK,CAACxB,MAAa;AACpB,eAAK,QAAQ,yBACb,KAAK,YAAY,WACjB,KAAK,YAAY,IACjB,WAAW,MAAM;AACf,iBAAK,YAAY;AAAA,UACnB,GAAG,GAAI,GACP,KAAK,OAAM;AAAA,QACb,CAAC;AAAA,MACH;AAAA,IACF;AAAA;AAEJ,GAphBS4B,IAAA,EAAA,OAAM,mDAAkD;;;cAJ/DC,EA2JM,OAAA,MAAA;AAAA,IA1JJC,EAEYC,GAAA;AAAA,kBAFMC,EAAA;AAAA,oDAAAA,EAAA,YAASC;AAAA,MAAE,UAAA;AAAA,MAAU,MAAMD,EAAA;AAAA;iBAAW,MAEtD;AAAA,YADAA,EAAA,KAAK,GAAA,CAAA;AAAA;;;IAEPE,EASM,OATNN,GASM;AAAA,MARYO,EAAA,oBAAoBA,EAAA,yBAAoB,UAAxDN,EAEWO,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,UAFqD,iDACnBC,EAAGF,EAAA,iBAAiB,IAAG,MACpE,CAAA;AAAA,gBACqBA,EAAA,yBAArBN,EAGWO,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,QAH4BE,EAAA,gBAC1BH,EAAA,oBAAoB,IAAG,QAClCE,EAAGF,EAAA,iBAAiB,IAAG,mBACzB,CAAA;AAAA,sBACAN,EAAmEO,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,QAA9CE,EAAAD,EAAAF,EAAA,iBAAiB,IAAG,mBAAe,CAAA;AAAA;;IAE7CA,EAAA,yBAAbI,EA+BQC,GAAA;AAAA;MA/BuB,OAAM;AAAA;iBACnC,MASQ;AAAA,QATRV,EASQW,GAAA,EATD,MAAK,OAAM,GAAA;AAAA,qBAChB,MAOQ;AAAA,YAPRX,EAOQY,GAAA;AAAA,cANN,OAAM;AAAA,cACN,gBAAa;AAAA,cACb,cAAW;AAAA,cACV,SAAOP,EAAA;AAAA;yBACT,MAED,CAAA,GAAAQ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,kBAFC,cAED,EAAA;AAAA;;;;;;QAEFb,EASQW,GAAA,EATD,MAAK,OAAM,GAAA;AAAA,qBAChB,MAOQ;AAAA,YAPRX,EAOQY,GAAA;AAAA,cANN,OAAM;AAAA,cACN,gBAAa;AAAA,cACZ,UAAUP,EAAA,yBAAoB;AAAA,cAC9B,SAAOA,EAAA;AAAA;yBACT,MAED,CAAA,GAAAQ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,kBAFC,iBAED,EAAA;AAAA;;;;;;QAEFb,EASQW,GAAA,EATD,MAAK,OAAM,GAAA;AAAA,qBAChB,MAOQ;AAAA,YAPRX,EAOQY,GAAA;AAAA,cANN,OAAM;AAAA,cACN,gBAAa;AAAA,cACZ,UAAUP,EAAA,yBAAoB;AAAA,cAC9B,SAAOA,EAAA;AAAA;yBACT,MAED,CAAA,GAAAQ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,kBAFC,cAED,EAAA;AAAA;;;;;;;;;IAGJb,EA8FSc,GAAA;AAAA,MA9FD,OAAM;AAAA,MAAO,aAAU;AAAA;iBAE3B,MAA6C;AAAA,gBAD/Cf,EA4FMO,GAAA,MAAAS,EA3FmBb,EAAA,uBAAqB,CAArC1B,YADTuB,EA4FM,OAAA;AAAA,UA1FH,KAAKvB,EAAa;AAAA;UAEnBwB,EAsFcgB,GAAA,MAAA;AAAA,YAzED,UACT,MAKE;AAAA,gBALFhB,EAKEY,GAAA;AAAA,gBAHA,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACP,SAAK,CAAAT,MAAEE,EAAA,sBAAsB7B,EAAa,IAAI;AAAA;gBAHvC,CAAAyC,GAAAf,EAAA,oBAAoB1B,EAAa,IAAI,GAAG,KAAK;AAAA;cAM/C0B,EAAA,oBAAoB1B,EAAa,IAAI,UAD7CiC,EAOSS,GAAA;AAAA;gBALN,OAAOb,EAAA,cAAc7B,EAAa,IAAI;AAAA,gBACvC,MAAK;AAAA,gBACL,OAAA;AAAA;2BAEA,MAAqC;AAAA,sBAAlC6B,EAAA,aAAa7B,EAAa,IAAI,CAAA,GAAA,CAAA;AAAA;;;cAEnCwB,EA8BYmB,GAAA;AAAA,gBA7BT,MAAMd,EAAA,UAAU7B,EAAa,IAAI,IAAA,YAAA;AAAA,gBAClC,UAAS;AAAA;gBAEE,WAAS4C,EAClB,CAuBE,EAxBoB,OAAAC,QAAK;AAAA,kBAC3BrB,EAuBEY,GAvBFU,EAuBE,EAAA,SAAA,GAAA,GAtBQD,GAAK;AAAA,oBACZ,cAAiChB,EAAA,UAAU7B,EAAa,IAAI;oBAK5D,MAA2B6B,EAAA,aAAa7B,EAAa,IAAI,KAAyB6B,EAAA,WAAW7B,EAAa,IAAI,oBAAgE6B,EAAA,UAAU7B,EAAa,IAAI;oBAQzM,OAAK;AAAA,uCAA+D6B,EAAA,aAAa7B,EAAa,IAAI,KAA2B6B,EAAA,WAAW7B,EAAa,IAAI;AAAA;oBAK1J,SAAQ;AAAA,oBACP,UAAU6B,EAAA,sBAAsB7B,EAAa,IAAI;AAAA,oBACjD,SAAK,CAAA2B,MAAEE,EAAA,oBAAoB7B,EAAa,IAAI;AAAA;;;;cAInDwB,EAcYmB,GAAA;AAAA,gBAdD,MAAK;AAAA,gBAAO,UAAS;AAAA;gBACnB,WAASC,EAClB,CAUE,EAXoB,OAAAC,QAAK;AAAA,kBAC3BrB,EAUEY,GAVFU,EAUE,EAAA,SAAA,GAAA,GATQD,GAAK;AAAA,oBACb,cAAW;AAAA,oBACV,MAA2BhB,EAAA,WAAW7B,EAAa,IAAI,IAAA,gBAAA;AAAA,oBAGvD,OAAK,EAAA,iBAAqB6B,EAAA,WAAW7B,EAAa,IAAI,EAAA;AAAA,oBACvD,SAAQ;AAAA,oBACP,UAAU6B,EAAA,sBAAsB7B,EAAa,IAAI;AAAA,oBACjD,SAAK,CAAA2B,MAAEE,EAAA,iBAAiB7B,EAAa,IAAI;AAAA;;;;cAIhDwB,EAUYmB,GAAA;AAAA,gBAVD,MAAK;AAAA,gBAAe,UAAS;AAAA;gBAC3B,WAASC,EAClB,CAME,EAPoB,OAAAC,QAAK;AAAA,kBAC3BrB,EAMEY,GANFU,EAME,EAAA,SAAA,GAAA,GALQD,GAAK;AAAA,oBACb,cAAW;AAAA,oBACX,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACP,SAAK,CAAAlB,MAAEE,EAAA,iBAAiB7B,EAAa,IAAI;AAAA;;;;;uBAhFlD,MAA8D;AAAA,cAA9DwB,EAA8DuB,GAAA,MAAA;AAAA,2BAA3C,MAAuB;AAAA,kBAApBf,EAAAD,EAAA/B,EAAa,IAAI,GAAA,CAAA;AAAA;;;cACX0B,EAAA,oBAAoB1B,EAAa,IAAI,UAAjEiC,EAUuBe,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,2BAV6C,MAElE;AAAA,kBAFkEhB,EAAA,iBAGhEiB,EAAA;AAAA,oBAAmCvB,EAAA,oBAAoB1B,EAAa,IAAI,EAAE;AAAA,oBAA4B0B,EAAA;AAAA,kBAItG,CAAA,IAAA,gBAAWK,EAAGF,EAAA,UAAU7B,EAAa,IAAI,IAAA,SAAA,OAAA,IAAuB,cAElE+B,EAAGL,sBAAoB1B,EAAa,IAAI,EAAE,KAAK,GAAA,CAAA;AAAA;;;;;;UA4EnDwB,EAAa0B,CAAA;AAAA;;;;IAITxB,EAAA,mBADRO,EAOEkB,GAAA;AAAA;kBALSzB,EAAA;AAAA,oDAAAA,EAAA,aAAUC;AAAA,MAClB,SAASD,EAAA;AAAA,MACV,MAAK;AAAA,MACJ,MAAMA,EAAA;AAAA,MACN,UAAQG,EAAA;AAAA;IAGHH,EAAA,kBADRO,EAKEmB,GAAA;AAAA;kBAHS1B,EAAA;AAAA,oDAAAA,EAAA,YAASC;AAAA,MACjB,MAAMD,EAAA;AAAA,MACN,OAAOA,EAAA;AAAA;;;;"}
1
+ {"version":3,"file":"MicroservicesTab-Bhsf1soi.js","sources":["../src/tools/admin/tabs/MicroservicesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\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.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-alert v-model=\"showAlert\" closable :type=\"alertType\">{{\n alert\n }}</v-alert>\n <div class=\"text-caption text-medium-emphasis mt-2 mb-2 ml-4\">\n <template v-if=\"hasServiceFilter && filteredServiceCount === 0\">\n No microservices match filter (showing 0 / {{ totalServiceCount }})\n </template>\n <template v-else-if=\"hasServiceFilter\">\n Showing {{ filteredServiceCount }} /\n {{ totalServiceCount }} microservices\n </template>\n <template v-else> {{ totalServiceCount }} microservices </template>\n </div>\n <v-row v-if=\"hasServiceFilter\" class=\"ml-1 mb-1\">\n <v-col cols=\"auto\">\n <v-btn\n color=\"primary\"\n prepend-icon=\"mdi-filter-off\"\n aria-label=\"Filter applied. Click to clear filter and show all services.\"\n @click=\"clearServiceFilter\"\n >\n Show All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"warning\"\n prepend-icon=\"mdi-refresh\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkRestartServices\"\n >\n Restart All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"error\"\n prepend-icon=\"mdi-stop\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkStopServices\"\n >\n Stop All\n </v-btn>\n </v-col>\n </v-row>\n <v-list class=\"list\" data-test=\"microserviceList\">\n <div\n v-for=\"microservice in filteredMicroservices\"\n :key=\"microservice.name\"\n >\n <v-list-item>\n <v-list-item-title>{{ microservice.name }}</v-list-item-title>\n <v-list-item-subtitle v-if=\"microservice_status[microservice.name]\">\n Updated:\n {{\n formatNanoseconds(\n microservice_status[microservice.name].updated_at,\n timeZone,\n )\n }}, Enabled: {{ isEnabled(microservice.name) ? 'True' : 'False' }},\n Count:\n {{ microservice_status[microservice.name].count }}\n </v-list-item-subtitle>\n <template #append>\n <v-btn\n v-show=\"microservice_status[microservice.name]?.error\"\n icon=\"mdi-alert\"\n variant=\"text\"\n @click=\"showMicroserviceError(microservice.name)\"\n />\n <v-chip\n v-if=\"microservice_status[microservice.name]\"\n :color=\"getStateColor(microservice.name)\"\n size=\"small\"\n label\n >\n {{ getStateText(microservice.name) }}\n </v-chip>\n <v-tooltip\n :text=\"isEnabled(microservice.name) ? 'Restart' : 'Start'\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n :aria-label=\"\n isEnabled(microservice.name)\n ? 'Restart Microservice'\n : 'Start Microservice'\n \"\n :icon=\"\n isRestarting(microservice.name) ||\n isStarting(microservice.name)\n ? 'mdi-loading'\n : isEnabled(microservice.name)\n ? 'mdi-refresh'\n : 'mdi-play'\n \"\n :class=\"{\n 'rotating-icon':\n isRestarting(microservice.name) ||\n isStarting(microservice.name),\n }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"restartMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Stop\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Stop Microservice\"\n :icon=\"\n isStopping(microservice.name) ? 'mdi-loading' : 'mdi-stop'\n \"\n :class=\"{ 'rotating-icon': isStopping(microservice.name) }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"stopMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Show Details\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Show Microservice Details\"\n icon=\"mdi-eye\"\n variant=\"text\"\n @click=\"showMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <output-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n :content=\"jsonContent\"\n type=\"Microservice\"\n :name=\"dialogTitle\"\n @submit=\"dialogCallback\"\n />\n <text-box-dialog\n v-if=\"showError\"\n v-model=\"showError\"\n :text=\"jsonContent\"\n :title=\"dialogTitle\"\n />\n </div>\n</template>\n\n<script>\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { OutputDialog, TextBoxDialog } from '@/components'\nimport { TimeFilters } from '@/util'\n\nexport default {\n components: {\n OutputDialog,\n TextBoxDialog,\n },\n mixins: [TimeFilters],\n data() {\n return {\n filteredMicroservices: [],\n allMicroservices: [],\n microservice_status: {},\n microservice_id: null,\n jsonContent: '',\n dialogTitle: '',\n showDialog: false,\n showError: false,\n alert: '',\n alertType: 'success',\n showAlert: false,\n updater: null,\n timeZone: 'local',\n // { service_name:\n // { operation: 'stopping' | 'restarting' | 'starting',\n // enabled_states: []\n // initial_updated_at: timestamp\n // time_started: timestamp\n // }\n // }\n microserviceOperations: {},\n }\n },\n computed: {\n serviceFilter() {\n const services = this.$route.query.services\n if (!services) return null\n return services\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s)\n },\n hasServiceFilter() {\n return this.serviceFilter && this.serviceFilter.length > 0\n },\n totalServiceCount() {\n return this.allMicroservices.length\n },\n filteredServiceCount() {\n return this.filteredMicroservices.length\n },\n },\n watch: {\n '$route.query.services': function () {\n this.applyServiceFilter()\n },\n },\n created() {\n new OpenC3Api()\n .get_setting('time_zone')\n .then((response) => {\n if (response) {\n this.timeZone = response\n }\n })\n .catch(() => {\n // Do nothing\n })\n },\n mounted() {\n this.update()\n this.updater = setInterval(() => {\n this.update()\n }, 2000)\n },\n beforeUnmount() {\n clearInterval(this.updater)\n this.updater = null\n },\n methods: {\n isOperationInProgress: function (name) {\n return !!this.microserviceOperations[name]\n },\n isEnabled: function (name) {\n const microservice = this.allMicroservices.find((ms) => ms.name === name)\n return microservice?.enabled !== false\n },\n isRestarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'restarting'\n },\n isStarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'starting'\n },\n isStopping: function (name) {\n return this.microserviceOperations[name]?.operation === 'stopping'\n },\n update: function () {\n Api.get('/openc3-api/microservice_status/all').then((response) => {\n this.microservice_status = response.data\n this.checkOperationCompletion()\n })\n Api.get('/openc3-api/microservices/all').then((response) => {\n // Convert hash of microservices to array of microservices\n let microservices = []\n for (const [_microservice_name, microservice] of Object.entries(\n response.data,\n )) {\n microservices.push(microservice)\n }\n microservices.sort((a, b) => a.name.localeCompare(b.name))\n this.allMicroservices = microservices\n this.applyServiceFilter()\n })\n },\n checkOperationCompletion: function () {\n for (const [name, tracking] of Object.entries(\n this.microserviceOperations,\n )) {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n if (!microservice) continue\n\n const currentEnabled = microservice.enabled !== false\n const lastEnabled =\n tracking.enabled_states[tracking.enabled_states.length - 1]\n\n // Only add state if it changed\n if (currentEnabled !== lastEnabled) {\n tracking.enabled_states.push(currentEnabled)\n }\n\n const isComplete = this.isOperationComplete(name, tracking)\n if (isComplete) {\n delete this.microserviceOperations[name]\n }\n }\n },\n isOperationComplete: function (serviceName, tracking) {\n // Check for timeout (30 seconds)\n const elapsed = Date.now() - tracking.time_started\n if (elapsed > 30000) {\n this.alert = `${serviceName} timed out when ${tracking.operation}.`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[serviceName]\n return true\n }\n\n if (tracking.operation === 'stopping') {\n // Track true -> false\n return tracking.enabled_states.includes(false)\n }\n if (tracking.operation === 'starting') {\n // Track false -> true\n return tracking.enabled_states.includes(true)\n }\n if (tracking.operation === 'restarting') {\n // Check if updated_at has changed\n const currentUpdatedAt =\n this.microservice_status[serviceName]?.updated_at\n if (currentUpdatedAt && tracking.initial_updated_at) {\n return currentUpdatedAt !== tracking.initial_updated_at\n }\n return false\n }\n return false\n },\n applyServiceFilter: function () {\n if (this.hasServiceFilter) {\n this.filteredMicroservices = this.allMicroservices.filter((ms) =>\n this.serviceFilter.includes(ms.name),\n )\n } else {\n this.filteredMicroservices = this.allMicroservices\n }\n },\n clearServiceFilter: function () {\n this.$router.push({ query: {} })\n },\n bulkRestartServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to restart ${microserviceNames.length} microservice(s)? ${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n const initialUpdatedAt = this.microservice_status[name]?.updated_at\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: initialUpdatedAt,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch(\n (error) => {\n this.alert = `Start command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n bulkStopServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to stop ${microserviceNames.length} microservice(s)?\\n\\n${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch(\n (error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n stopMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to stop microservice: ${name}?`, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch((error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n restartMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to restart microservice: ${name}?`, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: this.microservice_status[name]?.updated_at,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch((error) => {\n this.alert = `Restart command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n showMicroservice: function (name) {\n Api.get(`/openc3-api/microservices/${name}`).then((response) => {\n this.microservice_id = name\n this.dialogTitle = name\n this.jsonContent = JSON.stringify(response.data, null, '\\t')\n this.showDialog = true\n })\n },\n showMicroserviceError: function (name) {\n this.dialogTitle = name\n const e = this.microservice_status[name].error\n this.jsonContent = JSON.stringify(e, null, '\\t')\n this.showError = true\n },\n // States are determined by the microservice and not from an explicitly defined set\n // However, we can provide useful colors for errors and common states\n getStateColor(microserviceName) {\n const status = this.microservice_status[microserviceName]\n if (!status) return 'grey'\n if (status.error) return 'red'\n // If not enabled, show as stopped even if state is \"running\"\n if (!this.isEnabled(microserviceName) || status.state === 'STOPPED')\n return 'yellow'\n if (status.state === 'RUNNING') return 'green'\n return 'grey'\n },\n getStateText(microserviceName) {\n if (!this.isEnabled(microserviceName)) {\n return 'STOPPED'\n }\n return this.microservice_status[microserviceName].state\n },\n dialogCallback: function (content) {\n this.showDialog = false\n if (content !== null) {\n let parsed = JSON.parse(content)\n let method = 'put'\n let url = `/openc3-api/microservices/${this.microservice_id}`\n if (parsed['name'] !== this.microservice_id) {\n method = 'post'\n url = '/openc3-api/microservices'\n }\n\n Api[method](url, {\n data: {\n json: content,\n },\n }).then((response) => {\n this.alert = 'Modified Microservice'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n })\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.rotating-icon {\n animation: spin 1s linear infinite;\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n"],"names":["_sfc_main","OutputDialog","TextBoxDialog","TimeFilters","services","s","OpenC3Api","response","name","ms","Api","microservices","_microservice_name","microservice","a","b","tracking","currentEnabled","lastEnabled","serviceName","currentUpdatedAt","microserviceNames","m","microserviceList","confirmMessage","initialUpdatedAt","error","_dialog","e","microserviceName","status","content","parsed","method","url","_hoisted_1","_createElementBlock","_createVNode","_component_v_alert","$data","$event","_createElementVNode","$options","_Fragment","_toDisplayString","_createTextVNode","_createBlock","_component_v_row","_component_v_col","_component_v_btn","_cache","_component_v_list","_renderList","_component_v_list_item","_vShow","_component_v_chip","_component_v_tooltip","_withCtx","props","_mergeProps","_component_v_list_item_title","_component_v_list_item_subtitle","_ctx","_component_v_divider","_component_output_dialog","_component_text_box_dialog"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs"),e=require("vue"),y=require("./CustomIcon-8F08upeg.cjs"),k=require("./timeFilters-CRNRsUsb.cjs");require("./store-CiS35N-w.cjs");require("single-spa");const T=require("./OutputDialog-ChPCaQAE.cjs"),V=require("./TextBoxDialog-CppyxSFu.cjs"),N={components:{OutputDialog:T.OutputDialog,TextBoxDialog:V.TextBoxDialog},mixins:[k.TimeFilters],data(){return{filteredMicroservices:[],allMicroservices:[],microservice_status:{},microservice_id:null,jsonContent:"",dialogTitle:"",showDialog:!1,showError:!1,alert:"",alertType:"success",showAlert:!1,updater:null,timeZone:"local",microserviceOperations:{}}},computed:{serviceFilter(){const t=this.$route.query.services;return t?t.split(",").map(r=>r.trim()).filter(r=>r):null},hasServiceFilter(){return this.serviceFilter&&this.serviceFilter.length>0},totalServiceCount(){return this.allMicroservices.length},filteredServiceCount(){return this.filteredMicroservices.length}},watch:{"$route.query.services":function(){this.applyServiceFilter()}},created(){new d.yi().get_setting("time_zone").then(t=>{t&&(this.timeZone=t)}).catch(()=>{})},mounted(){this.update(),this.updater=setInterval(()=>{this.update()},2e3)},beforeUnmount(){clearInterval(this.updater),this.updater=null},methods:{isOperationInProgress:function(t){return!!this.microserviceOperations[t]},isEnabled:function(t){return this.allMicroservices.find(l=>l.name===t)?.enabled!==!1},isRestarting:function(t){return this.microserviceOperations[t]?.operation==="restarting"},isStarting:function(t){return this.microserviceOperations[t]?.operation==="starting"},isStopping:function(t){return this.microserviceOperations[t]?.operation==="stopping"},update:function(){d.Fr.get("/openc3-api/microservice_status/all").then(t=>{this.microservice_status=t.data,this.checkOperationCompletion()}),d.Fr.get("/openc3-api/microservices/all").then(t=>{let r=[];for(const[l,o]of Object.entries(t.data))r.push(o);r.sort((l,o)=>l.name.localeCompare(o.name)),this.allMicroservices=r,this.applyServiceFilter()})},checkOperationCompletion:function(){for(const[t,r]of Object.entries(this.microserviceOperations)){const l=this.allMicroservices.find(c=>c.name===t);if(!l)continue;const o=l.enabled!==!1,s=r.enabled_states[r.enabled_states.length-1];o!==s&&r.enabled_states.push(o),this.isOperationComplete(t,r)&&delete this.microserviceOperations[t]}},isOperationComplete:function(t,r){if(Date.now()-r.time_started>3e4)return this.alert=`${t} timed out when ${r.operation}.`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[t],!0;if(r.operation==="stopping")return r.enabled_states.includes(!1);if(r.operation==="starting")return r.enabled_states.includes(!0);if(r.operation==="restarting"){const o=this.microservice_status[t]?.updated_at;return o&&r.initial_updated_at?o!==r.initial_updated_at:!1}return!1},applyServiceFilter:function(){this.hasServiceFilter?this.filteredMicroservices=this.allMicroservices.filter(t=>this.serviceFilter.includes(t.name)):this.filteredMicroservices=this.allMicroservices},clearServiceFilter:function(){this.$router.push({query:{}})},bulkRestartServices:function(){const t=this.filteredMicroservices.map(o=>o.name),r=t.join(", "),l=`Are you sure you want to restart ${t.length} microservice(s)? ${r}`;this.$dialog.confirm(l,{okText:"Restart",cancelText:"Cancel"}).then(()=>{t.forEach(o=>{const i=this.allMicroservices.find(a=>a.name===o)?.enabled!==!1,c=this.microservice_status[o]?.updated_at;this.microserviceOperations[o]={operation:"restarting",enabled_states:[i],initial_updated_at:c,time_started:Date.now()},d.Fr.post(`/openc3-api/microservices/${o}/start`).catch(a=>{this.alert=`Start command failed for ${o}: ${a}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[o]})})}).catch(()=>{})},bulkStopServices:function(){const t=this.filteredMicroservices.map(o=>o.name),r=t.join(", "),l=`Are you sure you want to stop ${t.length} microservice(s)?
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("./format-qjtPogBb.cjs");require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs");const e=require("vue"),y=require("./CustomIcon-8F08upeg.cjs"),k=require("./timeFilters-BtN2a5-O.cjs");require("./store-CiS35N-w.cjs");require("single-spa");const T=require("./OutputDialog-DR9cJem2.cjs"),V=require("./TextBoxDialog-CppyxSFu.cjs"),N={components:{OutputDialog:T.OutputDialog,TextBoxDialog:V.TextBoxDialog},mixins:[k.TimeFilters],data(){return{filteredMicroservices:[],allMicroservices:[],microservice_status:{},microservice_id:null,jsonContent:"",dialogTitle:"",showDialog:!1,showError:!1,alert:"",alertType:"success",showAlert:!1,updater:null,timeZone:"local",microserviceOperations:{}}},computed:{serviceFilter(){const t=this.$route.query.services;return t?t.split(",").map(r=>r.trim()).filter(r=>r):null},hasServiceFilter(){return this.serviceFilter&&this.serviceFilter.length>0},totalServiceCount(){return this.allMicroservices.length},filteredServiceCount(){return this.filteredMicroservices.length}},watch:{"$route.query.services":function(){this.applyServiceFilter()}},created(){new d.Ri().get_setting("time_zone").then(t=>{t&&(this.timeZone=t)}).catch(()=>{})},mounted(){this.update(),this.updater=setInterval(()=>{this.update()},2e3)},beforeUnmount(){clearInterval(this.updater),this.updater=null},methods:{isOperationInProgress:function(t){return!!this.microserviceOperations[t]},isEnabled:function(t){return this.allMicroservices.find(l=>l.name===t)?.enabled!==!1},isRestarting:function(t){return this.microserviceOperations[t]?.operation==="restarting"},isStarting:function(t){return this.microserviceOperations[t]?.operation==="starting"},isStopping:function(t){return this.microserviceOperations[t]?.operation==="stopping"},update:function(){d.Br.get("/openc3-api/microservice_status/all").then(t=>{this.microservice_status=t.data,this.checkOperationCompletion()}),d.Br.get("/openc3-api/microservices/all").then(t=>{let r=[];for(const[l,o]of Object.entries(t.data))r.push(o);r.sort((l,o)=>l.name.localeCompare(o.name)),this.allMicroservices=r,this.applyServiceFilter()})},checkOperationCompletion:function(){for(const[t,r]of Object.entries(this.microserviceOperations)){const l=this.allMicroservices.find(c=>c.name===t);if(!l)continue;const o=l.enabled!==!1,s=r.enabled_states[r.enabled_states.length-1];o!==s&&r.enabled_states.push(o),this.isOperationComplete(t,r)&&delete this.microserviceOperations[t]}},isOperationComplete:function(t,r){if(Date.now()-r.time_started>3e4)return this.alert=`${t} timed out when ${r.operation}.`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[t],!0;if(r.operation==="stopping")return r.enabled_states.includes(!1);if(r.operation==="starting")return r.enabled_states.includes(!0);if(r.operation==="restarting"){const o=this.microservice_status[t]?.updated_at;return o&&r.initial_updated_at?o!==r.initial_updated_at:!1}return!1},applyServiceFilter:function(){this.hasServiceFilter?this.filteredMicroservices=this.allMicroservices.filter(t=>this.serviceFilter.includes(t.name)):this.filteredMicroservices=this.allMicroservices},clearServiceFilter:function(){this.$router.push({query:{}})},bulkRestartServices:function(){const t=this.filteredMicroservices.map(o=>o.name),r=t.join(", "),l=`Are you sure you want to restart ${t.length} microservice(s)? ${r}`;this.$dialog.confirm(l,{okText:"Restart",cancelText:"Cancel"}).then(()=>{t.forEach(o=>{const i=this.allMicroservices.find(a=>a.name===o)?.enabled!==!1,c=this.microservice_status[o]?.updated_at;this.microserviceOperations[o]={operation:"restarting",enabled_states:[i],initial_updated_at:c,time_started:Date.now()},d.Br.post(`/openc3-api/microservices/${o}/start`).catch(a=>{this.alert=`Start command failed for ${o}: ${a}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[o]})})}).catch(()=>{})},bulkStopServices:function(){const t=this.filteredMicroservices.map(o=>o.name),r=t.join(", "),l=`Are you sure you want to stop ${t.length} microservice(s)?
2
2
 
3
- ${r}`;this.$dialog.confirm(l,{okText:"Stop",cancelText:"Cancel"}).then(()=>{t.forEach(o=>{const i=this.allMicroservices.find(c=>c.name===o)?.enabled!==!1;this.microserviceOperations[o]={operation:"stopping",enabled_states:[i],time_started:Date.now()},d.Fr.post(`/openc3-api/microservices/${o}/stop`).catch(c=>{this.alert=`Stop command failed for ${o}: ${c}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[o]})})}).catch(()=>{})},stopMicroservice:function(t){this.$dialog.confirm(`Are you sure you want to stop microservice: ${t}?`,{okText:"Stop",cancelText:"Cancel"}).then(r=>{const o=this.allMicroservices.find(s=>s.name===t)?.enabled!==!1;this.microserviceOperations[t]={operation:"stopping",enabled_states:[o],time_started:Date.now()},d.Fr.post(`/openc3-api/microservices/${t}/stop`).catch(s=>{this.alert=`Stop command failed for ${t}: ${s}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[t]})})},restartMicroservice:function(t){this.$dialog.confirm(`Are you sure you want to restart microservice: ${t}?`,{okText:"Restart",cancelText:"Cancel"}).then(r=>{const o=this.allMicroservices.find(s=>s.name===t)?.enabled!==!1;this.microserviceOperations[t]={operation:"restarting",enabled_states:[o],initial_updated_at:this.microservice_status[t]?.updated_at,time_started:Date.now()},d.Fr.post(`/openc3-api/microservices/${t}/start`).catch(s=>{this.alert=`Restart command failed for ${t}: ${s}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[t]})})},showMicroservice:function(t){d.Fr.get(`/openc3-api/microservices/${t}`).then(r=>{this.microservice_id=t,this.dialogTitle=t,this.jsonContent=JSON.stringify(r.data,null," "),this.showDialog=!0})},showMicroserviceError:function(t){this.dialogTitle=t;const r=this.microservice_status[t].error;this.jsonContent=JSON.stringify(r,null," "),this.showError=!0},getStateColor(t){const r=this.microservice_status[t];return r?r.error?"red":!this.isEnabled(t)||r.state==="STOPPED"?"yellow":r.state==="RUNNING"?"green":"grey":"grey"},getStateText(t){return this.isEnabled(t)?this.microservice_status[t].state:"STOPPED"},dialogCallback:function(t){if(this.showDialog=!1,t!==null){let r=JSON.parse(t),l="put",o=`/openc3-api/microservices/${this.microservice_id}`;r.name!==this.microservice_id&&(l="post",o="/openc3-api/microservices"),d.Fr[l](o,{data:{json:t}}).then(s=>{this.alert="Modified Microservice",this.alertType="success",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),this.update()})}}}},M={class:"text-caption text-medium-emphasis mt-2 mb-2 ml-4"};function O(t,r,l,o,s,i){const c=e.resolveComponent("v-alert"),a=e.resolveComponent("v-btn"),p=e.resolveComponent("v-col"),v=e.resolveComponent("v-row"),f=e.resolveComponent("v-list-item-title"),_=e.resolveComponent("v-list-item-subtitle"),g=e.resolveComponent("v-chip"),m=e.resolveComponent("v-tooltip"),C=e.resolveComponent("v-list-item"),w=e.resolveComponent("v-divider"),S=e.resolveComponent("v-list"),b=e.resolveComponent("output-dialog"),x=e.resolveComponent("text-box-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(c,{modelValue:s.showAlert,"onUpdate:modelValue":r[0]||(r[0]=n=>s.showAlert=n),closable:"",type:s.alertType},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.alert),1)]),_:1},8,["modelValue","type"]),e.createElementVNode("div",M,[i.hasServiceFilter&&i.filteredServiceCount===0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" No microservices match filter (showing 0 / "+e.toDisplayString(i.totalServiceCount)+") ",1)],64)):i.hasServiceFilter?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Showing "+e.toDisplayString(i.filteredServiceCount)+" / "+e.toDisplayString(i.totalServiceCount)+" microservices ",1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(i.totalServiceCount)+" microservices ",1)],64))]),i.hasServiceFilter?(e.openBlock(),e.createBlock(v,{key:0,class:"ml-1 mb-1"},{default:e.withCtx(()=>[e.createVNode(p,{cols:"auto"},{default:e.withCtx(()=>[e.createVNode(a,{color:"primary","prepend-icon":"mdi-filter-off","aria-label":"Filter applied. Click to clear filter and show all services.",onClick:i.clearServiceFilter},{default:e.withCtx(()=>[...r[3]||(r[3]=[e.createTextVNode(" Show All ",-1)])]),_:1},8,["onClick"])]),_:1}),e.createVNode(p,{cols:"auto"},{default:e.withCtx(()=>[e.createVNode(a,{color:"warning","prepend-icon":"mdi-refresh",disabled:i.filteredServiceCount===0,onClick:i.bulkRestartServices},{default:e.withCtx(()=>[...r[4]||(r[4]=[e.createTextVNode(" Restart All ",-1)])]),_:1},8,["disabled","onClick"])]),_:1}),e.createVNode(p,{cols:"auto"},{default:e.withCtx(()=>[e.createVNode(a,{color:"error","prepend-icon":"mdi-stop",disabled:i.filteredServiceCount===0,onClick:i.bulkStopServices},{default:e.withCtx(()=>[...r[5]||(r[5]=[e.createTextVNode(" Stop All ",-1)])]),_:1},8,["disabled","onClick"])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(S,{class:"list","data-test":"microserviceList"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.filteredMicroservices,n=>(e.openBlock(),e.createElementBlock("div",{key:n.name},[e.createVNode(C,null,{append:e.withCtx(()=>[e.withDirectives(e.createVNode(a,{icon:"mdi-alert",variant:"text",onClick:u=>i.showMicroserviceError(n.name)},null,8,["onClick"]),[[e.vShow,s.microservice_status[n.name]?.error]]),s.microservice_status[n.name]?(e.openBlock(),e.createBlock(g,{key:0,color:i.getStateColor(n.name),size:"small",label:""},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.getStateText(n.name)),1)]),_:2},1032,["color"])):e.createCommentVNode("",!0),e.createVNode(m,{text:i.isEnabled(n.name)?"Restart":"Start",location:"top"},{activator:e.withCtx(({props:u})=>[e.createVNode(a,e.mergeProps({ref_for:!0},u,{"aria-label":i.isEnabled(n.name)?"Restart Microservice":"Start Microservice",icon:i.isRestarting(n.name)||i.isStarting(n.name)?"mdi-loading":i.isEnabled(n.name)?"mdi-refresh":"mdi-play",class:{"rotating-icon":i.isRestarting(n.name)||i.isStarting(n.name)},variant:"text",disabled:i.isOperationInProgress(n.name),onClick:h=>i.restartMicroservice(n.name)}),null,16,["aria-label","icon","class","disabled","onClick"])]),_:2},1032,["text"]),e.createVNode(m,{text:"Stop",location:"top"},{activator:e.withCtx(({props:u})=>[e.createVNode(a,e.mergeProps({ref_for:!0},u,{"aria-label":"Stop Microservice",icon:i.isStopping(n.name)?"mdi-loading":"mdi-stop",class:{"rotating-icon":i.isStopping(n.name)},variant:"text",disabled:i.isOperationInProgress(n.name),onClick:h=>i.stopMicroservice(n.name)}),null,16,["icon","class","disabled","onClick"])]),_:2},1024),e.createVNode(m,{text:"Show Details",location:"top"},{activator:e.withCtx(({props:u})=>[e.createVNode(a,e.mergeProps({ref_for:!0},u,{"aria-label":"Show Microservice Details",icon:"mdi-eye",variant:"text",onClick:h=>i.showMicroservice(n.name)}),null,16,["onClick"])]),_:2},1024)]),default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.name),1)]),_:2},1024),s.microservice_status[n.name]?(e.openBlock(),e.createBlock(_,{key:0},{default:e.withCtx(()=>[e.createTextVNode(" Updated: "+e.toDisplayString(t.formatNanoseconds(s.microservice_status[n.name].updated_at,s.timeZone))+", Enabled: "+e.toDisplayString(i.isEnabled(n.name)?"True":"False")+", Count: "+e.toDisplayString(s.microservice_status[n.name].count),1)]),_:2},1024)):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(w)]))),128))]),_:1}),s.showDialog?(e.openBlock(),e.createBlock(b,{key:1,modelValue:s.showDialog,"onUpdate:modelValue":r[1]||(r[1]=n=>s.showDialog=n),content:s.jsonContent,type:"Microservice",name:s.dialogTitle,onSubmit:i.dialogCallback},null,8,["modelValue","content","name","onSubmit"])):e.createCommentVNode("",!0),s.showError?(e.openBlock(),e.createBlock(x,{key:2,modelValue:s.showError,"onUpdate:modelValue":r[2]||(r[2]=n=>s.showError=n),text:s.jsonContent,title:s.dialogTitle},null,8,["modelValue","text","title"])):e.createCommentVNode("",!0)])}const D=y._export_sfc(N,[["render",O],["__scopeId","data-v-6b152c7a"]]);exports.default=D;
4
- //# sourceMappingURL=MicroservicesTab-snXJDoYq.cjs.map
3
+ ${r}`;this.$dialog.confirm(l,{okText:"Stop",cancelText:"Cancel"}).then(()=>{t.forEach(o=>{const i=this.allMicroservices.find(c=>c.name===o)?.enabled!==!1;this.microserviceOperations[o]={operation:"stopping",enabled_states:[i],time_started:Date.now()},d.Br.post(`/openc3-api/microservices/${o}/stop`).catch(c=>{this.alert=`Stop command failed for ${o}: ${c}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[o]})})}).catch(()=>{})},stopMicroservice:function(t){this.$dialog.confirm(`Are you sure you want to stop microservice: ${t}?`,{okText:"Stop",cancelText:"Cancel"}).then(r=>{const o=this.allMicroservices.find(s=>s.name===t)?.enabled!==!1;this.microserviceOperations[t]={operation:"stopping",enabled_states:[o],time_started:Date.now()},d.Br.post(`/openc3-api/microservices/${t}/stop`).catch(s=>{this.alert=`Stop command failed for ${t}: ${s}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[t]})})},restartMicroservice:function(t){this.$dialog.confirm(`Are you sure you want to restart microservice: ${t}?`,{okText:"Restart",cancelText:"Cancel"}).then(r=>{const o=this.allMicroservices.find(s=>s.name===t)?.enabled!==!1;this.microserviceOperations[t]={operation:"restarting",enabled_states:[o],initial_updated_at:this.microservice_status[t]?.updated_at,time_started:Date.now()},d.Br.post(`/openc3-api/microservices/${t}/start`).catch(s=>{this.alert=`Restart command failed for ${t}: ${s}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[t]})})},showMicroservice:function(t){d.Br.get(`/openc3-api/microservices/${t}`).then(r=>{this.microservice_id=t,this.dialogTitle=t,this.jsonContent=JSON.stringify(r.data,null," "),this.showDialog=!0})},showMicroserviceError:function(t){this.dialogTitle=t;const r=this.microservice_status[t].error;this.jsonContent=JSON.stringify(r,null," "),this.showError=!0},getStateColor(t){const r=this.microservice_status[t];return r?r.error?"red":!this.isEnabled(t)||r.state==="STOPPED"?"yellow":r.state==="RUNNING"?"green":"grey":"grey"},getStateText(t){return this.isEnabled(t)?this.microservice_status[t].state:"STOPPED"},dialogCallback:function(t){if(this.showDialog=!1,t!==null){let r=JSON.parse(t),l="put",o=`/openc3-api/microservices/${this.microservice_id}`;r.name!==this.microservice_id&&(l="post",o="/openc3-api/microservices"),d.Br[l](o,{data:{json:t}}).then(s=>{this.alert="Modified Microservice",this.alertType="success",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),this.update()})}}}},M={class:"text-caption text-medium-emphasis mt-2 mb-2 ml-4"};function O(t,r,l,o,s,i){const c=e.resolveComponent("v-alert"),a=e.resolveComponent("v-btn"),m=e.resolveComponent("v-col"),v=e.resolveComponent("v-row"),f=e.resolveComponent("v-list-item-title"),_=e.resolveComponent("v-list-item-subtitle"),g=e.resolveComponent("v-chip"),p=e.resolveComponent("v-tooltip"),C=e.resolveComponent("v-list-item"),w=e.resolveComponent("v-divider"),S=e.resolveComponent("v-list"),b=e.resolveComponent("output-dialog"),x=e.resolveComponent("text-box-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(c,{modelValue:s.showAlert,"onUpdate:modelValue":r[0]||(r[0]=n=>s.showAlert=n),closable:"",type:s.alertType},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.alert),1)]),_:1},8,["modelValue","type"]),e.createElementVNode("div",M,[i.hasServiceFilter&&i.filteredServiceCount===0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" No microservices match filter (showing 0 / "+e.toDisplayString(i.totalServiceCount)+") ",1)],64)):i.hasServiceFilter?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Showing "+e.toDisplayString(i.filteredServiceCount)+" / "+e.toDisplayString(i.totalServiceCount)+" microservices ",1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(i.totalServiceCount)+" microservices ",1)],64))]),i.hasServiceFilter?(e.openBlock(),e.createBlock(v,{key:0,class:"ml-1 mb-1"},{default:e.withCtx(()=>[e.createVNode(m,{cols:"auto"},{default:e.withCtx(()=>[e.createVNode(a,{color:"primary","prepend-icon":"mdi-filter-off","aria-label":"Filter applied. Click to clear filter and show all services.",onClick:i.clearServiceFilter},{default:e.withCtx(()=>[...r[3]||(r[3]=[e.createTextVNode(" Show All ",-1)])]),_:1},8,["onClick"])]),_:1}),e.createVNode(m,{cols:"auto"},{default:e.withCtx(()=>[e.createVNode(a,{color:"warning","prepend-icon":"mdi-refresh",disabled:i.filteredServiceCount===0,onClick:i.bulkRestartServices},{default:e.withCtx(()=>[...r[4]||(r[4]=[e.createTextVNode(" Restart All ",-1)])]),_:1},8,["disabled","onClick"])]),_:1}),e.createVNode(m,{cols:"auto"},{default:e.withCtx(()=>[e.createVNode(a,{color:"error","prepend-icon":"mdi-stop",disabled:i.filteredServiceCount===0,onClick:i.bulkStopServices},{default:e.withCtx(()=>[...r[5]||(r[5]=[e.createTextVNode(" Stop All ",-1)])]),_:1},8,["disabled","onClick"])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(S,{class:"list","data-test":"microserviceList"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.filteredMicroservices,n=>(e.openBlock(),e.createElementBlock("div",{key:n.name},[e.createVNode(C,null,{append:e.withCtx(()=>[e.withDirectives(e.createVNode(a,{icon:"mdi-alert",variant:"text",onClick:u=>i.showMicroserviceError(n.name)},null,8,["onClick"]),[[e.vShow,s.microservice_status[n.name]?.error]]),s.microservice_status[n.name]?(e.openBlock(),e.createBlock(g,{key:0,color:i.getStateColor(n.name),size:"small",label:""},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.getStateText(n.name)),1)]),_:2},1032,["color"])):e.createCommentVNode("",!0),e.createVNode(p,{text:i.isEnabled(n.name)?"Restart":"Start",location:"top"},{activator:e.withCtx(({props:u})=>[e.createVNode(a,e.mergeProps({ref_for:!0},u,{"aria-label":i.isEnabled(n.name)?"Restart Microservice":"Start Microservice",icon:i.isRestarting(n.name)||i.isStarting(n.name)?"mdi-loading":i.isEnabled(n.name)?"mdi-refresh":"mdi-play",class:{"rotating-icon":i.isRestarting(n.name)||i.isStarting(n.name)},variant:"text",disabled:i.isOperationInProgress(n.name),onClick:h=>i.restartMicroservice(n.name)}),null,16,["aria-label","icon","class","disabled","onClick"])]),_:2},1032,["text"]),e.createVNode(p,{text:"Stop",location:"top"},{activator:e.withCtx(({props:u})=>[e.createVNode(a,e.mergeProps({ref_for:!0},u,{"aria-label":"Stop Microservice",icon:i.isStopping(n.name)?"mdi-loading":"mdi-stop",class:{"rotating-icon":i.isStopping(n.name)},variant:"text",disabled:i.isOperationInProgress(n.name),onClick:h=>i.stopMicroservice(n.name)}),null,16,["icon","class","disabled","onClick"])]),_:2},1024),e.createVNode(p,{text:"Show Details",location:"top"},{activator:e.withCtx(({props:u})=>[e.createVNode(a,e.mergeProps({ref_for:!0},u,{"aria-label":"Show Microservice Details",icon:"mdi-eye",variant:"text",onClick:h=>i.showMicroservice(n.name)}),null,16,["onClick"])]),_:2},1024)]),default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.name),1)]),_:2},1024),s.microservice_status[n.name]?(e.openBlock(),e.createBlock(_,{key:0},{default:e.withCtx(()=>[e.createTextVNode(" Updated: "+e.toDisplayString(t.formatNanoseconds(s.microservice_status[n.name].updated_at,s.timeZone))+", Enabled: "+e.toDisplayString(i.isEnabled(n.name)?"True":"False")+", Count: "+e.toDisplayString(s.microservice_status[n.name].count),1)]),_:2},1024)):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(w)]))),128))]),_:1}),s.showDialog?(e.openBlock(),e.createBlock(b,{key:1,modelValue:s.showDialog,"onUpdate:modelValue":r[1]||(r[1]=n=>s.showDialog=n),content:s.jsonContent,type:"Microservice",name:s.dialogTitle,onSubmit:i.dialogCallback},null,8,["modelValue","content","name","onSubmit"])):e.createCommentVNode("",!0),s.showError?(e.openBlock(),e.createBlock(x,{key:2,modelValue:s.showError,"onUpdate:modelValue":r[2]||(r[2]=n=>s.showError=n),text:s.jsonContent,title:s.dialogTitle},null,8,["modelValue","text","title"])):e.createCommentVNode("",!0)])}const B=y._export_sfc(N,[["render",O],["__scopeId","data-v-6b152c7a"]]);exports.default=B;
4
+ //# sourceMappingURL=MicroservicesTab-Cuj56g8-.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MicroservicesTab-snXJDoYq.cjs","sources":["../src/tools/admin/tabs/MicroservicesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\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.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-alert v-model=\"showAlert\" closable :type=\"alertType\">{{\n alert\n }}</v-alert>\n <div class=\"text-caption text-medium-emphasis mt-2 mb-2 ml-4\">\n <template v-if=\"hasServiceFilter && filteredServiceCount === 0\">\n No microservices match filter (showing 0 / {{ totalServiceCount }})\n </template>\n <template v-else-if=\"hasServiceFilter\">\n Showing {{ filteredServiceCount }} /\n {{ totalServiceCount }} microservices\n </template>\n <template v-else> {{ totalServiceCount }} microservices </template>\n </div>\n <v-row v-if=\"hasServiceFilter\" class=\"ml-1 mb-1\">\n <v-col cols=\"auto\">\n <v-btn\n color=\"primary\"\n prepend-icon=\"mdi-filter-off\"\n aria-label=\"Filter applied. Click to clear filter and show all services.\"\n @click=\"clearServiceFilter\"\n >\n Show All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"warning\"\n prepend-icon=\"mdi-refresh\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkRestartServices\"\n >\n Restart All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"error\"\n prepend-icon=\"mdi-stop\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkStopServices\"\n >\n Stop All\n </v-btn>\n </v-col>\n </v-row>\n <v-list class=\"list\" data-test=\"microserviceList\">\n <div\n v-for=\"microservice in filteredMicroservices\"\n :key=\"microservice.name\"\n >\n <v-list-item>\n <v-list-item-title>{{ microservice.name }}</v-list-item-title>\n <v-list-item-subtitle v-if=\"microservice_status[microservice.name]\">\n Updated:\n {{\n formatNanoseconds(\n microservice_status[microservice.name].updated_at,\n timeZone,\n )\n }}, Enabled: {{ isEnabled(microservice.name) ? 'True' : 'False' }},\n Count:\n {{ microservice_status[microservice.name].count }}\n </v-list-item-subtitle>\n <template #append>\n <v-btn\n v-show=\"microservice_status[microservice.name]?.error\"\n icon=\"mdi-alert\"\n variant=\"text\"\n @click=\"showMicroserviceError(microservice.name)\"\n />\n <v-chip\n v-if=\"microservice_status[microservice.name]\"\n :color=\"getStateColor(microservice.name)\"\n size=\"small\"\n label\n >\n {{ getStateText(microservice.name) }}\n </v-chip>\n <v-tooltip\n :text=\"isEnabled(microservice.name) ? 'Restart' : 'Start'\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n :aria-label=\"\n isEnabled(microservice.name)\n ? 'Restart Microservice'\n : 'Start Microservice'\n \"\n :icon=\"\n isRestarting(microservice.name) ||\n isStarting(microservice.name)\n ? 'mdi-loading'\n : isEnabled(microservice.name)\n ? 'mdi-refresh'\n : 'mdi-play'\n \"\n :class=\"{\n 'rotating-icon':\n isRestarting(microservice.name) ||\n isStarting(microservice.name),\n }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"restartMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Stop\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Stop Microservice\"\n :icon=\"\n isStopping(microservice.name) ? 'mdi-loading' : 'mdi-stop'\n \"\n :class=\"{ 'rotating-icon': isStopping(microservice.name) }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"stopMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Show Details\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Show Microservice Details\"\n icon=\"mdi-eye\"\n variant=\"text\"\n @click=\"showMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <output-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n :content=\"jsonContent\"\n type=\"Microservice\"\n :name=\"dialogTitle\"\n @submit=\"dialogCallback\"\n />\n <text-box-dialog\n v-if=\"showError\"\n v-model=\"showError\"\n :text=\"jsonContent\"\n :title=\"dialogTitle\"\n />\n </div>\n</template>\n\n<script>\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { OutputDialog, TextBoxDialog } from '@/components'\nimport { TimeFilters } from '@/util'\n\nexport default {\n components: {\n OutputDialog,\n TextBoxDialog,\n },\n mixins: [TimeFilters],\n data() {\n return {\n filteredMicroservices: [],\n allMicroservices: [],\n microservice_status: {},\n microservice_id: null,\n jsonContent: '',\n dialogTitle: '',\n showDialog: false,\n showError: false,\n alert: '',\n alertType: 'success',\n showAlert: false,\n updater: null,\n timeZone: 'local',\n // { service_name:\n // { operation: 'stopping' | 'restarting' | 'starting',\n // enabled_states: []\n // initial_updated_at: timestamp\n // time_started: timestamp\n // }\n // }\n microserviceOperations: {},\n }\n },\n computed: {\n serviceFilter() {\n const services = this.$route.query.services\n if (!services) return null\n return services\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s)\n },\n hasServiceFilter() {\n return this.serviceFilter && this.serviceFilter.length > 0\n },\n totalServiceCount() {\n return this.allMicroservices.length\n },\n filteredServiceCount() {\n return this.filteredMicroservices.length\n },\n },\n watch: {\n '$route.query.services': function () {\n this.applyServiceFilter()\n },\n },\n created() {\n new OpenC3Api()\n .get_setting('time_zone')\n .then((response) => {\n if (response) {\n this.timeZone = response\n }\n })\n .catch(() => {\n // Do nothing\n })\n },\n mounted() {\n this.update()\n this.updater = setInterval(() => {\n this.update()\n }, 2000)\n },\n beforeUnmount() {\n clearInterval(this.updater)\n this.updater = null\n },\n methods: {\n isOperationInProgress: function (name) {\n return !!this.microserviceOperations[name]\n },\n isEnabled: function (name) {\n const microservice = this.allMicroservices.find((ms) => ms.name === name)\n return microservice?.enabled !== false\n },\n isRestarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'restarting'\n },\n isStarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'starting'\n },\n isStopping: function (name) {\n return this.microserviceOperations[name]?.operation === 'stopping'\n },\n update: function () {\n Api.get('/openc3-api/microservice_status/all').then((response) => {\n this.microservice_status = response.data\n this.checkOperationCompletion()\n })\n Api.get('/openc3-api/microservices/all').then((response) => {\n // Convert hash of microservices to array of microservices\n let microservices = []\n for (const [_microservice_name, microservice] of Object.entries(\n response.data,\n )) {\n microservices.push(microservice)\n }\n microservices.sort((a, b) => a.name.localeCompare(b.name))\n this.allMicroservices = microservices\n this.applyServiceFilter()\n })\n },\n checkOperationCompletion: function () {\n for (const [name, tracking] of Object.entries(\n this.microserviceOperations,\n )) {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n if (!microservice) continue\n\n const currentEnabled = microservice.enabled !== false\n const lastEnabled =\n tracking.enabled_states[tracking.enabled_states.length - 1]\n\n // Only add state if it changed\n if (currentEnabled !== lastEnabled) {\n tracking.enabled_states.push(currentEnabled)\n }\n\n const isComplete = this.isOperationComplete(name, tracking)\n if (isComplete) {\n delete this.microserviceOperations[name]\n }\n }\n },\n isOperationComplete: function (serviceName, tracking) {\n // Check for timeout (30 seconds)\n const elapsed = Date.now() - tracking.time_started\n if (elapsed > 30000) {\n this.alert = `${serviceName} timed out when ${tracking.operation}.`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[serviceName]\n return true\n }\n\n if (tracking.operation === 'stopping') {\n // Track true -> false\n return tracking.enabled_states.includes(false)\n }\n if (tracking.operation === 'starting') {\n // Track false -> true\n return tracking.enabled_states.includes(true)\n }\n if (tracking.operation === 'restarting') {\n // Check if updated_at has changed\n const currentUpdatedAt =\n this.microservice_status[serviceName]?.updated_at\n if (currentUpdatedAt && tracking.initial_updated_at) {\n return currentUpdatedAt !== tracking.initial_updated_at\n }\n return false\n }\n return false\n },\n applyServiceFilter: function () {\n if (this.hasServiceFilter) {\n this.filteredMicroservices = this.allMicroservices.filter((ms) =>\n this.serviceFilter.includes(ms.name),\n )\n } else {\n this.filteredMicroservices = this.allMicroservices\n }\n },\n clearServiceFilter: function () {\n this.$router.push({ query: {} })\n },\n bulkRestartServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to restart ${microserviceNames.length} microservice(s)? ${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n const initialUpdatedAt = this.microservice_status[name]?.updated_at\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: initialUpdatedAt,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch(\n (error) => {\n this.alert = `Start command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n bulkStopServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to stop ${microserviceNames.length} microservice(s)?\\n\\n${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch(\n (error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n stopMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to stop microservice: ${name}?`, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch((error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n restartMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to restart microservice: ${name}?`, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: this.microservice_status[name]?.updated_at,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch((error) => {\n this.alert = `Restart command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n showMicroservice: function (name) {\n Api.get(`/openc3-api/microservices/${name}`).then((response) => {\n this.microservice_id = name\n this.dialogTitle = name\n this.jsonContent = JSON.stringify(response.data, null, '\\t')\n this.showDialog = true\n })\n },\n showMicroserviceError: function (name) {\n this.dialogTitle = name\n const e = this.microservice_status[name].error\n this.jsonContent = JSON.stringify(e, null, '\\t')\n this.showError = true\n },\n // States are determined by the microservice and not from an explicitly defined set\n // However, we can provide useful colors for errors and common states\n getStateColor(microserviceName) {\n const status = this.microservice_status[microserviceName]\n if (!status) return 'grey'\n if (status.error) return 'red'\n // If not enabled, show as stopped even if state is \"running\"\n if (!this.isEnabled(microserviceName) || status.state === 'STOPPED')\n return 'yellow'\n if (status.state === 'RUNNING') return 'green'\n return 'grey'\n },\n getStateText(microserviceName) {\n if (!this.isEnabled(microserviceName)) {\n return 'STOPPED'\n }\n return this.microservice_status[microserviceName].state\n },\n dialogCallback: function (content) {\n this.showDialog = false\n if (content !== null) {\n let parsed = JSON.parse(content)\n let method = 'put'\n let url = `/openc3-api/microservices/${this.microservice_id}`\n if (parsed['name'] !== this.microservice_id) {\n method = 'post'\n url = '/openc3-api/microservices'\n }\n\n Api[method](url, {\n data: {\n json: content,\n },\n }).then((response) => {\n this.alert = 'Modified Microservice'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n })\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.rotating-icon {\n animation: spin 1s linear infinite;\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n"],"names":["_sfc_main","OutputDialog","TextBoxDialog","TimeFilters","services","s","OpenC3Api","response","name","ms","Api","microservices","_microservice_name","microservice","a","b","tracking","currentEnabled","lastEnabled","serviceName","currentUpdatedAt","microserviceNames","m","microserviceList","confirmMessage","initialUpdatedAt","error","_dialog","e","microserviceName","status","content","parsed","method","url","_hoisted_1","_createElementBlock","_createVNode","_component_v_alert","$data","$event","_createElementVNode","$options","_Fragment","_toDisplayString","_createTextVNode","_createBlock","_component_v_row","_component_v_col","_component_v_btn","_cache","_component_v_list","_renderList","_component_v_list_item","_vShow","_component_v_chip","_component_v_tooltip","_withCtx","props","_mergeProps","_component_v_list_item_title","_component_v_list_item_subtitle","_ctx","_component_v_divider","_component_output_dialog","_component_text_box_dialog"],"mappings":"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"}
1
+ {"version":3,"file":"MicroservicesTab-Cuj56g8-.cjs","sources":["../src/tools/admin/tabs/MicroservicesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\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.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-alert v-model=\"showAlert\" closable :type=\"alertType\">{{\n alert\n }}</v-alert>\n <div class=\"text-caption text-medium-emphasis mt-2 mb-2 ml-4\">\n <template v-if=\"hasServiceFilter && filteredServiceCount === 0\">\n No microservices match filter (showing 0 / {{ totalServiceCount }})\n </template>\n <template v-else-if=\"hasServiceFilter\">\n Showing {{ filteredServiceCount }} /\n {{ totalServiceCount }} microservices\n </template>\n <template v-else> {{ totalServiceCount }} microservices </template>\n </div>\n <v-row v-if=\"hasServiceFilter\" class=\"ml-1 mb-1\">\n <v-col cols=\"auto\">\n <v-btn\n color=\"primary\"\n prepend-icon=\"mdi-filter-off\"\n aria-label=\"Filter applied. Click to clear filter and show all services.\"\n @click=\"clearServiceFilter\"\n >\n Show All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"warning\"\n prepend-icon=\"mdi-refresh\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkRestartServices\"\n >\n Restart All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"error\"\n prepend-icon=\"mdi-stop\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkStopServices\"\n >\n Stop All\n </v-btn>\n </v-col>\n </v-row>\n <v-list class=\"list\" data-test=\"microserviceList\">\n <div\n v-for=\"microservice in filteredMicroservices\"\n :key=\"microservice.name\"\n >\n <v-list-item>\n <v-list-item-title>{{ microservice.name }}</v-list-item-title>\n <v-list-item-subtitle v-if=\"microservice_status[microservice.name]\">\n Updated:\n {{\n formatNanoseconds(\n microservice_status[microservice.name].updated_at,\n timeZone,\n )\n }}, Enabled: {{ isEnabled(microservice.name) ? 'True' : 'False' }},\n Count:\n {{ microservice_status[microservice.name].count }}\n </v-list-item-subtitle>\n <template #append>\n <v-btn\n v-show=\"microservice_status[microservice.name]?.error\"\n icon=\"mdi-alert\"\n variant=\"text\"\n @click=\"showMicroserviceError(microservice.name)\"\n />\n <v-chip\n v-if=\"microservice_status[microservice.name]\"\n :color=\"getStateColor(microservice.name)\"\n size=\"small\"\n label\n >\n {{ getStateText(microservice.name) }}\n </v-chip>\n <v-tooltip\n :text=\"isEnabled(microservice.name) ? 'Restart' : 'Start'\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n :aria-label=\"\n isEnabled(microservice.name)\n ? 'Restart Microservice'\n : 'Start Microservice'\n \"\n :icon=\"\n isRestarting(microservice.name) ||\n isStarting(microservice.name)\n ? 'mdi-loading'\n : isEnabled(microservice.name)\n ? 'mdi-refresh'\n : 'mdi-play'\n \"\n :class=\"{\n 'rotating-icon':\n isRestarting(microservice.name) ||\n isStarting(microservice.name),\n }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"restartMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Stop\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Stop Microservice\"\n :icon=\"\n isStopping(microservice.name) ? 'mdi-loading' : 'mdi-stop'\n \"\n :class=\"{ 'rotating-icon': isStopping(microservice.name) }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"stopMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Show Details\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Show Microservice Details\"\n icon=\"mdi-eye\"\n variant=\"text\"\n @click=\"showMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <output-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n :content=\"jsonContent\"\n type=\"Microservice\"\n :name=\"dialogTitle\"\n @submit=\"dialogCallback\"\n />\n <text-box-dialog\n v-if=\"showError\"\n v-model=\"showError\"\n :text=\"jsonContent\"\n :title=\"dialogTitle\"\n />\n </div>\n</template>\n\n<script>\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { OutputDialog, TextBoxDialog } from '@/components'\nimport { TimeFilters } from '@/util'\n\nexport default {\n components: {\n OutputDialog,\n TextBoxDialog,\n },\n mixins: [TimeFilters],\n data() {\n return {\n filteredMicroservices: [],\n allMicroservices: [],\n microservice_status: {},\n microservice_id: null,\n jsonContent: '',\n dialogTitle: '',\n showDialog: false,\n showError: false,\n alert: '',\n alertType: 'success',\n showAlert: false,\n updater: null,\n timeZone: 'local',\n // { service_name:\n // { operation: 'stopping' | 'restarting' | 'starting',\n // enabled_states: []\n // initial_updated_at: timestamp\n // time_started: timestamp\n // }\n // }\n microserviceOperations: {},\n }\n },\n computed: {\n serviceFilter() {\n const services = this.$route.query.services\n if (!services) return null\n return services\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s)\n },\n hasServiceFilter() {\n return this.serviceFilter && this.serviceFilter.length > 0\n },\n totalServiceCount() {\n return this.allMicroservices.length\n },\n filteredServiceCount() {\n return this.filteredMicroservices.length\n },\n },\n watch: {\n '$route.query.services': function () {\n this.applyServiceFilter()\n },\n },\n created() {\n new OpenC3Api()\n .get_setting('time_zone')\n .then((response) => {\n if (response) {\n this.timeZone = response\n }\n })\n .catch(() => {\n // Do nothing\n })\n },\n mounted() {\n this.update()\n this.updater = setInterval(() => {\n this.update()\n }, 2000)\n },\n beforeUnmount() {\n clearInterval(this.updater)\n this.updater = null\n },\n methods: {\n isOperationInProgress: function (name) {\n return !!this.microserviceOperations[name]\n },\n isEnabled: function (name) {\n const microservice = this.allMicroservices.find((ms) => ms.name === name)\n return microservice?.enabled !== false\n },\n isRestarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'restarting'\n },\n isStarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'starting'\n },\n isStopping: function (name) {\n return this.microserviceOperations[name]?.operation === 'stopping'\n },\n update: function () {\n Api.get('/openc3-api/microservice_status/all').then((response) => {\n this.microservice_status = response.data\n this.checkOperationCompletion()\n })\n Api.get('/openc3-api/microservices/all').then((response) => {\n // Convert hash of microservices to array of microservices\n let microservices = []\n for (const [_microservice_name, microservice] of Object.entries(\n response.data,\n )) {\n microservices.push(microservice)\n }\n microservices.sort((a, b) => a.name.localeCompare(b.name))\n this.allMicroservices = microservices\n this.applyServiceFilter()\n })\n },\n checkOperationCompletion: function () {\n for (const [name, tracking] of Object.entries(\n this.microserviceOperations,\n )) {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n if (!microservice) continue\n\n const currentEnabled = microservice.enabled !== false\n const lastEnabled =\n tracking.enabled_states[tracking.enabled_states.length - 1]\n\n // Only add state if it changed\n if (currentEnabled !== lastEnabled) {\n tracking.enabled_states.push(currentEnabled)\n }\n\n const isComplete = this.isOperationComplete(name, tracking)\n if (isComplete) {\n delete this.microserviceOperations[name]\n }\n }\n },\n isOperationComplete: function (serviceName, tracking) {\n // Check for timeout (30 seconds)\n const elapsed = Date.now() - tracking.time_started\n if (elapsed > 30000) {\n this.alert = `${serviceName} timed out when ${tracking.operation}.`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[serviceName]\n return true\n }\n\n if (tracking.operation === 'stopping') {\n // Track true -> false\n return tracking.enabled_states.includes(false)\n }\n if (tracking.operation === 'starting') {\n // Track false -> true\n return tracking.enabled_states.includes(true)\n }\n if (tracking.operation === 'restarting') {\n // Check if updated_at has changed\n const currentUpdatedAt =\n this.microservice_status[serviceName]?.updated_at\n if (currentUpdatedAt && tracking.initial_updated_at) {\n return currentUpdatedAt !== tracking.initial_updated_at\n }\n return false\n }\n return false\n },\n applyServiceFilter: function () {\n if (this.hasServiceFilter) {\n this.filteredMicroservices = this.allMicroservices.filter((ms) =>\n this.serviceFilter.includes(ms.name),\n )\n } else {\n this.filteredMicroservices = this.allMicroservices\n }\n },\n clearServiceFilter: function () {\n this.$router.push({ query: {} })\n },\n bulkRestartServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to restart ${microserviceNames.length} microservice(s)? ${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n const initialUpdatedAt = this.microservice_status[name]?.updated_at\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: initialUpdatedAt,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch(\n (error) => {\n this.alert = `Start command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n bulkStopServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to stop ${microserviceNames.length} microservice(s)?\\n\\n${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch(\n (error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n stopMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to stop microservice: ${name}?`, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch((error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n restartMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to restart microservice: ${name}?`, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: this.microservice_status[name]?.updated_at,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch((error) => {\n this.alert = `Restart command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n showMicroservice: function (name) {\n Api.get(`/openc3-api/microservices/${name}`).then((response) => {\n this.microservice_id = name\n this.dialogTitle = name\n this.jsonContent = JSON.stringify(response.data, null, '\\t')\n this.showDialog = true\n })\n },\n showMicroserviceError: function (name) {\n this.dialogTitle = name\n const e = this.microservice_status[name].error\n this.jsonContent = JSON.stringify(e, null, '\\t')\n this.showError = true\n },\n // States are determined by the microservice and not from an explicitly defined set\n // However, we can provide useful colors for errors and common states\n getStateColor(microserviceName) {\n const status = this.microservice_status[microserviceName]\n if (!status) return 'grey'\n if (status.error) return 'red'\n // If not enabled, show as stopped even if state is \"running\"\n if (!this.isEnabled(microserviceName) || status.state === 'STOPPED')\n return 'yellow'\n if (status.state === 'RUNNING') return 'green'\n return 'grey'\n },\n getStateText(microserviceName) {\n if (!this.isEnabled(microserviceName)) {\n return 'STOPPED'\n }\n return this.microservice_status[microserviceName].state\n },\n dialogCallback: function (content) {\n this.showDialog = false\n if (content !== null) {\n let parsed = JSON.parse(content)\n let method = 'put'\n let url = `/openc3-api/microservices/${this.microservice_id}`\n if (parsed['name'] !== this.microservice_id) {\n method = 'post'\n url = '/openc3-api/microservices'\n }\n\n Api[method](url, {\n data: {\n json: content,\n },\n }).then((response) => {\n this.alert = 'Modified Microservice'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n })\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.rotating-icon {\n animation: spin 1s linear infinite;\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n"],"names":["_sfc_main","OutputDialog","TextBoxDialog","TimeFilters","services","s","OpenC3Api","response","name","ms","Api","microservices","_microservice_name","microservice","a","b","tracking","currentEnabled","lastEnabled","serviceName","currentUpdatedAt","microserviceNames","m","microserviceList","confirmMessage","initialUpdatedAt","error","_dialog","e","microserviceName","status","content","parsed","method","url","_hoisted_1","_createElementBlock","_createVNode","_component_v_alert","$data","$event","_createElementVNode","$options","_Fragment","_toDisplayString","_createTextVNode","_createBlock","_component_v_row","_component_v_col","_component_v_btn","_cache","_component_v_list","_renderList","_component_v_list_item","_vShow","_component_v_chip","_component_v_tooltip","_withCtx","props","_mergeProps","_component_v_list_item_title","_component_v_list_item_subtitle","_ctx","_component_v_divider","_component_output_dialog","_component_text_box_dialog"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { y as _ } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js";
2
- import { resolveComponent as s, openBlock as N, createBlock as b, withKeys as v, normalizeClass as g, normalizeStyle as T, withCtx as l, createVNode as o, createTextVNode as c, mergeProps as F } from "vue";
3
- import { _ as I } from "./CustomIcon-DTR361si.js";
1
+ import { g as _, p as N } from "./settingsCache-CGgEjlw3.js";
2
+ import { resolveComponent as s, openBlock as b, createBlock as g, withKeys as v, normalizeClass as T, normalizeStyle as F, withCtx as l, createVNode as o, createTextVNode as c, mergeProps as I } from "vue";
3
+ import "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DskbVSHX.js";
4
+ import { _ as C } from "./CustomIcon-DTR361si.js";
4
5
  const k = {
5
6
  inheritAttrs: !1,
6
7
  props: {
@@ -49,7 +50,9 @@ const k = {
49
50
  data() {
50
51
  return {
51
52
  menu: !1,
52
- timeFormat: "ampm",
53
+ // peek returns undefined until the first instance resolves the setting;
54
+ // null then marks "still loading" so the watcher defers formatting.
55
+ timeFormat: N("time_format") ?? null,
53
56
  tempTime: null,
54
57
  inputValue: ""
55
58
  };
@@ -66,7 +69,7 @@ const k = {
66
69
  modelValue: {
67
70
  immediate: !0,
68
71
  handler(t) {
69
- this.menu || (this.inputValue = this.formatForDisplay(t));
72
+ !this.menu && this.timeFormat !== null && (this.inputValue = this.formatForDisplay(t));
70
73
  }
71
74
  },
72
75
  inputValue(t) {
@@ -80,18 +83,11 @@ const k = {
80
83
  }
81
84
  },
82
85
  async created() {
86
+ if (this.timeFormat !== null) return;
83
87
  const t = this.inputValue;
84
- await this.loadTimeFormat(), this.inputValue === t && (this.inputValue = this.formatForDisplay(this.modelValue));
88
+ this.timeFormat = await _("time_format", "ampm"), !this.menu && this.inputValue === t && (this.inputValue = this.formatForDisplay(this.modelValue));
85
89
  },
86
90
  methods: {
87
- async loadTimeFormat() {
88
- try {
89
- const e = await new _().get_setting("time_format");
90
- e && (this.timeFormat = e);
91
- } catch {
92
- this.timeFormat = "ampm";
93
- }
94
- },
95
91
  formatForDisplay(t) {
96
92
  return t ? this.timeFormat === "24hr" ? t : this.convertTo12Hour(t) : "";
97
93
  },
@@ -147,9 +143,9 @@ const k = {
147
143
  }
148
144
  }
149
145
  };
150
- function C(t, e, a, r, i, n) {
151
- const m = s("v-icon"), d = s("v-time-picker"), p = s("v-spacer"), f = s("v-btn"), h = s("v-card-actions"), y = s("v-card"), V = s("v-menu"), S = s("v-text-field");
152
- return N(), b(S, {
146
+ function x(t, e, a, r, i, n) {
147
+ const m = s("v-icon"), d = s("v-time-picker"), p = s("v-spacer"), f = s("v-btn"), h = s("v-card-actions"), y = s("v-card"), S = s("v-menu"), V = s("v-text-field");
148
+ return b(), g(V, {
153
149
  modelValue: i.inputValue,
154
150
  "onUpdate:modelValue": e[2] || (e[2] = (u) => i.inputValue = u),
155
151
  label: a.label,
@@ -157,15 +153,15 @@ function C(t, e, a, r, i, n) {
157
153
  "hide-details": a.hideDetails,
158
154
  variant: a.variant,
159
155
  density: a.density,
160
- style: T(n.computedStyle),
161
- class: g(a.textFieldClass),
156
+ style: F(n.computedStyle),
157
+ class: T(a.textFieldClass),
162
158
  disabled: a.disabled,
163
159
  "data-test": a.dataTest,
164
160
  onBlur: n.handleBlur,
165
161
  onKeydown: v(n.handleBlur, ["enter"])
166
162
  }, {
167
163
  "prepend-inner": l(() => [
168
- o(V, {
164
+ o(S, {
169
165
  modelValue: i.menu,
170
166
  "onUpdate:modelValue": e[1] || (e[1] = (u) => i.menu = u),
171
167
  "close-on-content-click": !1,
@@ -173,7 +169,7 @@ function C(t, e, a, r, i, n) {
173
169
  offset: "16"
174
170
  }, {
175
171
  activator: l(({ props: u }) => [
176
- o(m, F(u, { class: "cursor-pointer" }), {
172
+ o(m, I(u, { class: "cursor-pointer" }), {
177
173
  default: l(() => [...e[3] || (e[3] = [
178
174
  c(" mdi-clock-outline ", -1)
179
175
  ])]),
@@ -226,8 +222,8 @@ function C(t, e, a, r, i, n) {
226
222
  _: 1
227
223
  }, 8, ["modelValue", "label", "rules", "hide-details", "variant", "density", "style", "class", "disabled", "data-test", "onBlur", "onKeydown"]);
228
224
  }
229
- const M = /* @__PURE__ */ I(k, [["render", C], ["__scopeId", "data-v-5606bec3"]]);
225
+ const z = /* @__PURE__ */ C(k, [["render", x], ["__scopeId", "data-v-b3333e6d"]]);
230
226
  export {
231
- M as O
227
+ z as O
232
228
  };
233
- //# sourceMappingURL=OpenC3TimePicker-DpkbfbgC.js.map
229
+ //# sourceMappingURL=OpenC3TimePicker-C3vCnk72.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenC3TimePicker-C3vCnk72.js","sources":["../src/components/OpenC3TimePicker.vue"],"sourcesContent":["<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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-text-field\n v-model=\"inputValue\"\n :label=\"label\"\n :rules=\"computedRules\"\n :hide-details=\"hideDetails\"\n :variant=\"variant\"\n :density=\"density\"\n :style=\"computedStyle\"\n :class=\"textFieldClass\"\n :disabled=\"disabled\"\n :data-test=\"dataTest\"\n @blur=\"handleBlur\"\n @keydown.enter=\"handleBlur\"\n >\n <template #prepend-inner>\n <v-menu\n v-model=\"menu\"\n :close-on-content-click=\"false\"\n transition=\"scale-transition\"\n offset=\"16\"\n >\n <template #activator=\"{ props: menuProps }\">\n <v-icon v-bind=\"menuProps\" class=\"cursor-pointer\">\n mdi-clock-outline\n </v-icon>\n </template>\n <v-card class=\"time-picker-card\">\n <v-time-picker\n v-model=\"tempTime\"\n :format=\"timeFormat\"\n scrollable\n use-seconds\n hide-header\n />\n <v-card-actions>\n <v-spacer />\n <v-btn variant=\"text\" @click=\"cancel\">Cancel</v-btn>\n <v-btn color=\"primary\" variant=\"text\" @click=\"save\">OK</v-btn>\n </v-card-actions>\n </v-card>\n </v-menu>\n </template>\n </v-text-field>\n</template>\n\n<script>\nimport { getCachedSetting, peekCachedSetting } from '../util'\n\nexport default {\n inheritAttrs: false,\n props: {\n modelValue: {\n type: String,\n default: '',\n },\n label: {\n type: String,\n default: 'Time',\n },\n rules: {\n type: Array,\n default: () => [],\n },\n hideDetails: {\n type: [Boolean, String],\n default: false,\n },\n variant: {\n type: String,\n default: 'filled',\n },\n density: {\n type: String,\n default: 'default',\n },\n style: {\n type: [String, Object],\n default: '',\n },\n textFieldClass: {\n type: String,\n default: '',\n },\n dataTest: {\n type: String,\n default: '',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n menu: false,\n // peek returns undefined until the first instance resolves the setting;\n // null then marks \"still loading\" so the watcher defers formatting.\n timeFormat: peekCachedSetting('time_format') ?? null,\n tempTime: null,\n inputValue: '',\n }\n },\n computed: {\n computedStyle() {\n if (typeof this.style === 'string') {\n return this.style\n }\n return this.style\n },\n computedRules() {\n // Wrap the passed rules to validate against the 24-hour modelValue\n return this.rules.map((rule) => {\n return () => {\n return rule(this.modelValue)\n }\n })\n },\n },\n watch: {\n modelValue: {\n immediate: true,\n handler(newVal) {\n // Skip until timeFormat has loaded — created() will do the initial\n // format. Otherwise we'd flash the default ('ampm') style first.\n if (!this.menu && this.timeFormat !== null) {\n this.inputValue = this.formatForDisplay(newVal)\n }\n },\n },\n inputValue(newVal) {\n // Immediately emit empty value when input is cleared for instant validation\n if (newVal === '' && this.modelValue !== '') {\n this.$emit('update:modelValue', '')\n }\n },\n menu(newVal) {\n if (newVal) {\n // When menu opens, initialize tempTime with current value\n // Normalize to HH:mm:ss format (v-time-picker doesn't handle milliseconds)\n this.tempTime = this.normalizeTime(this.modelValue) || '00:00:00'\n }\n },\n tempTime(newVal) {\n // Update input display in real-time when using the time picker\n if (this.menu && newVal) {\n this.inputValue = this.formatForDisplay(newVal)\n }\n },\n },\n async created() {\n // If the cache was already populated, the immediate modelValue watcher has\n // already done the initial format — nothing to do.\n if (this.timeFormat !== null) return\n const previousDisplay = this.inputValue\n this.timeFormat = await getCachedSetting('time_format', 'ampm')\n // Only overwrite if the user hasn't typed during the await.\n if (!this.menu && this.inputValue === previousDisplay) {\n this.inputValue = this.formatForDisplay(this.modelValue)\n }\n },\n methods: {\n formatForDisplay(time24) {\n if (!time24) return ''\n if (this.timeFormat === '24hr') {\n return time24\n }\n return this.convertTo12Hour(time24)\n },\n handleBlur() {\n // Parse input and update modelValue\n const parsed = this.parseTimeInput(this.inputValue)\n if (parsed) {\n this.$emit('update:modelValue', parsed)\n this.inputValue = this.formatForDisplay(parsed)\n } else if (this.inputValue === '') {\n this.$emit('update:modelValue', '')\n } else {\n // Invalid input, revert to current modelValue display\n this.inputValue = this.formatForDisplay(this.modelValue)\n }\n },\n parseTimeInput(input) {\n if (!input || input.trim() === '') return ''\n\n // Try to parse 24-hour format: HH:mm:ss or HH:mm\n const time24Match = input.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/)\n if (time24Match) {\n const hours = Number.parseInt(time24Match[1], 10)\n const minutes = Number.parseInt(time24Match[2], 10)\n const seconds = time24Match[3] ? Number.parseInt(time24Match[3], 10) : 0\n if (\n hours >= 0 &&\n hours <= 23 &&\n minutes >= 0 &&\n minutes <= 59 &&\n seconds >= 0 &&\n seconds <= 59\n ) {\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`\n }\n }\n\n // Try to parse 12-hour format: HH:mm:ss AM/PM or HH:mm AM/PM\n const time12Match = input.match(\n /^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s*(AM|PM|am|pm)$/i,\n )\n if (time12Match) {\n let hours = Number.parseInt(time12Match[1], 10)\n const minutes = Number.parseInt(time12Match[2], 10)\n const seconds = time12Match[3] ? Number.parseInt(time12Match[3], 10) : 0\n const period = time12Match[4].toUpperCase()\n\n if (\n hours >= 1 &&\n hours <= 12 &&\n minutes >= 0 &&\n minutes <= 59 &&\n seconds >= 0 &&\n seconds <= 59\n ) {\n // Convert to 24-hour format\n if (period === 'AM') {\n if (hours === 12) hours = 0\n } else {\n if (hours !== 12) hours += 12\n }\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`\n }\n }\n\n return null // Invalid format\n },\n save() {\n this.$emit('update:modelValue', this.tempTime)\n this.inputValue = this.formatForDisplay(this.tempTime)\n this.menu = false\n },\n cancel() {\n this.tempTime = this.normalizeTime(this.modelValue) || '00:00:00'\n this.menu = false\n },\n // Normalize time to HH:mm:ss format (strips milliseconds if present)\n normalizeTime(time) {\n if (!time) return ''\n const parts = time.split(':')\n if (parts.length < 2) return time\n const hours = Number.parseInt(parts[0], 10)\n const minutes = Number.parseInt(parts[1], 10)\n // Strip milliseconds from seconds (e.g., \"45.123\" -> 45)\n const seconds = parts.length > 2 ? Number.parseInt(parts[2], 10) : 0\n if (\n Number.isNaN(hours) ||\n Number.isNaN(minutes) ||\n Number.isNaN(seconds)\n ) {\n return ''\n }\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`\n },\n convertTo12Hour(time24) {\n if (!time24) return ''\n const parts = time24.split(':')\n if (parts.length < 2) return time24\n let hours = Number.parseInt(parts[0], 10)\n const minutes = Number.parseInt(parts[1], 10)\n // Strip milliseconds from seconds (e.g., \"45.123\" -> 45)\n const seconds = parts.length > 2 ? Number.parseInt(parts[2], 10) : 0\n // Validate all parts are valid numbers\n if (\n Number.isNaN(hours) ||\n Number.isNaN(minutes) ||\n Number.isNaN(seconds)\n ) {\n return time24 // Return original if parsing fails\n }\n const ampm = hours >= 12 ? 'PM' : 'AM'\n hours = hours % 12\n hours = hours ? hours : 12 // 0 should be 12\n const paddedHours = hours.toString().padStart(2, '0')\n const paddedMinutes = minutes.toString().padStart(2, '0')\n const paddedSeconds = seconds.toString().padStart(2, '0')\n return `${paddedHours}:${paddedMinutes}:${paddedSeconds} ${ampm}`\n },\n },\n}\n</script>\n\n<style scoped>\n.time-picker-card {\n background-color: var(--color-background-surface-default);\n}\n.time-picker-card :deep(.v-time-picker) {\n background-color: var(--color-background-surface-default);\n}\n.time-picker-card :deep(.v-time-picker-clock__container) {\n background-color: var(--color-background-surface-default);\n}\n.time-picker-card :deep(.v-time-picker-clock) {\n background-color: var(--color-background-base-default);\n}\n.time-picker-card :deep(.v-picker__header) {\n background-color: var(--color-background-surface-header);\n}\n.time-picker-card :deep(.v-picker-title) {\n background-color: var(--color-background-surface-header);\n}\n.cursor-pointer {\n cursor: pointer;\n}\n</style>\n"],"names":["_sfc_main","peekCachedSetting","rule","newVal","previousDisplay","getCachedSetting","time24","parsed","input","time24Match","hours","minutes","seconds","time12Match","period","time","parts","ampm","paddedHours","paddedMinutes","paddedSeconds","_createBlock","_component_v_text_field","$data","$event","$props","$options","_createVNode","_component_v_menu","_withCtx","menuProps","_component_v_icon","_mergeProps","_cache","_component_v_card","_component_v_time_picker","_component_v_card_actions","_component_v_spacer","_component_v_btn"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const p=require("./settingsCache-Dg7OMDJK.cjs"),t=require("vue");require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs");const N=require("./CustomIcon-8F08upeg.cjs"),v={inheritAttrs:!1,props:{modelValue:{type:String,default:""},label:{type:String,default:"Time"},rules:{type:Array,default:()=>[]},hideDetails:{type:[Boolean,String],default:!1},variant:{type:String,default:"filled"},density:{type:String,default:"default"},style:{type:[String,Object],default:""},textFieldClass:{type:String,default:""},dataTest:{type:String,default:""},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],data(){return{menu:!1,timeFormat:p.peekCachedSetting("time_format")??null,tempTime:null,inputValue:""}},computed:{computedStyle(){return typeof this.style=="string"?this.style:this.style},computedRules(){return this.rules.map(e=>()=>e(this.modelValue))}},watch:{modelValue:{immediate:!0,handler(e){!this.menu&&this.timeFormat!==null&&(this.inputValue=this.formatForDisplay(e))}},inputValue(e){e===""&&this.modelValue!==""&&this.$emit("update:modelValue","")},menu(e){e&&(this.tempTime=this.normalizeTime(this.modelValue)||"00:00:00")},tempTime(e){this.menu&&e&&(this.inputValue=this.formatForDisplay(e))}},async created(){if(this.timeFormat!==null)return;const e=this.inputValue;this.timeFormat=await p.getCachedSetting("time_format","ampm"),!this.menu&&this.inputValue===e&&(this.inputValue=this.formatForDisplay(this.modelValue))},methods:{formatForDisplay(e){return e?this.timeFormat==="24hr"?e:this.convertTo12Hour(e):""},handleBlur(){const e=this.parseTimeInput(this.inputValue);e?(this.$emit("update:modelValue",e),this.inputValue=this.formatForDisplay(e)):this.inputValue===""?this.$emit("update:modelValue",""):this.inputValue=this.formatForDisplay(this.modelValue)},parseTimeInput(e){if(!e||e.trim()==="")return"";const r=e.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/);if(r){const a=Number.parseInt(r[1],10),i=Number.parseInt(r[2],10),s=r[3]?Number.parseInt(r[3],10):0;if(a>=0&&a<=23&&i>=0&&i<=59&&s>=0&&s<=59)return`${a.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}:${s.toString().padStart(2,"0")}`}const n=e.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?\s*(AM|PM|am|pm)$/i);if(n){let a=Number.parseInt(n[1],10);const i=Number.parseInt(n[2],10),s=n[3]?Number.parseInt(n[3],10):0,l=n[4].toUpperCase();if(a>=1&&a<=12&&i>=0&&i<=59&&s>=0&&s<=59)return l==="AM"?a===12&&(a=0):a!==12&&(a+=12),`${a.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}:${s.toString().padStart(2,"0")}`}return null},save(){this.$emit("update:modelValue",this.tempTime),this.inputValue=this.formatForDisplay(this.tempTime),this.menu=!1},cancel(){this.tempTime=this.normalizeTime(this.modelValue)||"00:00:00",this.menu=!1},normalizeTime(e){if(!e)return"";const r=e.split(":");if(r.length<2)return e;const n=Number.parseInt(r[0],10),a=Number.parseInt(r[1],10),i=r.length>2?Number.parseInt(r[2],10):0;return Number.isNaN(n)||Number.isNaN(a)||Number.isNaN(i)?"":`${n.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}`},convertTo12Hour(e){if(!e)return"";const r=e.split(":");if(r.length<2)return e;let n=Number.parseInt(r[0],10);const a=Number.parseInt(r[1],10),i=r.length>2?Number.parseInt(r[2],10):0;if(Number.isNaN(n)||Number.isNaN(a)||Number.isNaN(i))return e;const s=n>=12?"PM":"AM";n=n%12,n=n||12;const l=n.toString().padStart(2,"0"),u=a.toString().padStart(2,"0"),m=i.toString().padStart(2,"0");return`${l}:${u}:${m} ${s}`}}};function y(e,r,n,a,i,s){const l=t.resolveComponent("v-icon"),u=t.resolveComponent("v-time-picker"),m=t.resolveComponent("v-spacer"),d=t.resolveComponent("v-btn"),c=t.resolveComponent("v-card-actions"),h=t.resolveComponent("v-card"),f=t.resolveComponent("v-menu"),V=t.resolveComponent("v-text-field");return t.openBlock(),t.createBlock(V,{modelValue:i.inputValue,"onUpdate:modelValue":r[2]||(r[2]=o=>i.inputValue=o),label:n.label,rules:s.computedRules,"hide-details":n.hideDetails,variant:n.variant,density:n.density,style:t.normalizeStyle(s.computedStyle),class:t.normalizeClass(n.textFieldClass),disabled:n.disabled,"data-test":n.dataTest,onBlur:s.handleBlur,onKeydown:t.withKeys(s.handleBlur,["enter"])},{"prepend-inner":t.withCtx(()=>[t.createVNode(f,{modelValue:i.menu,"onUpdate:modelValue":r[1]||(r[1]=o=>i.menu=o),"close-on-content-click":!1,transition:"scale-transition",offset:"16"},{activator:t.withCtx(({props:o})=>[t.createVNode(l,t.mergeProps(o,{class:"cursor-pointer"}),{default:t.withCtx(()=>[...r[3]||(r[3]=[t.createTextVNode(" mdi-clock-outline ",-1)])]),_:1},16)]),default:t.withCtx(()=>[t.createVNode(h,{class:"time-picker-card"},{default:t.withCtx(()=>[t.createVNode(u,{modelValue:i.tempTime,"onUpdate:modelValue":r[0]||(r[0]=o=>i.tempTime=o),format:i.timeFormat,scrollable:"","use-seconds":"","hide-header":""},null,8,["modelValue","format"]),t.createVNode(c,null,{default:t.withCtx(()=>[t.createVNode(m),t.createVNode(d,{variant:"text",onClick:s.cancel},{default:t.withCtx(()=>[...r[4]||(r[4]=[t.createTextVNode("Cancel",-1)])]),_:1},8,["onClick"]),t.createVNode(d,{color:"primary",variant:"text",onClick:s.save},{default:t.withCtx(()=>[...r[5]||(r[5]=[t.createTextVNode("OK",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["modelValue","label","rules","hide-details","variant","density","style","class","disabled","data-test","onBlur","onKeydown"])}const S=N._export_sfc(v,[["render",y],["__scopeId","data-v-b3333e6d"]]);exports.OpenC3TimePicker=S;
2
+ //# sourceMappingURL=OpenC3TimePicker-CVUV2cK4.cjs.map