@openc3/vue-common 7.0.0-rc3 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/dist/{ArrayWidget-B2-n1K3r.cjs → ArrayWidget-BHjh3qLF.cjs} +2 -2
  2. package/dist/{ArrayWidget-B2-n1K3r.cjs.map → ArrayWidget-BHjh3qLF.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-dQWDMMrn.js → ArrayWidget-Dh6zDiC7.js} +6 -6
  4. package/dist/{ArrayWidget-dQWDMMrn.js.map → ArrayWidget-Dh6zDiC7.js.map} +1 -1
  5. package/dist/{ArrayplotWidget-BmBcPGUR.cjs → ArrayplotWidget-BHD-TGQO.cjs} +2 -2
  6. package/dist/{ArrayplotWidget-BmBcPGUR.cjs.map → ArrayplotWidget-BHD-TGQO.cjs.map} +1 -1
  7. package/dist/{ArrayplotWidget-DCnbK37q.js → ArrayplotWidget-CSc_TqNm.js} +6 -6
  8. package/dist/{ArrayplotWidget-DCnbK37q.js.map → ArrayplotWidget-CSc_TqNm.js.map} +1 -1
  9. package/dist/{BarColumn-DmOxuCa9.js → BarColumn-DmjMnw5l.js} +3 -3
  10. package/dist/{BarColumn-DmOxuCa9.js.map → BarColumn-DmjMnw5l.js.map} +1 -1
  11. package/dist/{BarColumn-CkecDAzn.cjs → BarColumn-Ym4P8YHC.cjs} +2 -2
  12. package/dist/{BarColumn-CkecDAzn.cjs.map → BarColumn-Ym4P8YHC.cjs.map} +1 -1
  13. package/dist/{BlockWidget-UejKxAxY.js → BlockWidget-BdR_HCVc.js} +6 -6
  14. package/dist/{BlockWidget-UejKxAxY.js.map → BlockWidget-BdR_HCVc.js.map} +1 -1
  15. package/dist/{BlockWidget-BZXHLTJt.cjs → BlockWidget-Bi1PfS1k.cjs} +2 -2
  16. package/dist/{BlockWidget-BZXHLTJt.cjs.map → BlockWidget-Bi1PfS1k.cjs.map} +1 -1
  17. package/dist/{ButtonWidget-CzRyY1N5.cjs → ButtonWidget-70hNWuEy.cjs} +2 -2
  18. package/dist/{ButtonWidget-CzRyY1N5.cjs.map → ButtonWidget-70hNWuEy.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-DtAkhzCN.js → ButtonWidget-DZ4VCNWU.js} +6 -6
  20. package/dist/{ButtonWidget-DtAkhzCN.js.map → ButtonWidget-DZ4VCNWU.js.map} +1 -1
  21. package/dist/{CanvasWidget-cQqNxspP.cjs → CanvasWidget-DTEx-DpZ.cjs} +2 -2
  22. package/dist/{CanvasWidget-cQqNxspP.cjs.map → CanvasWidget-DTEx-DpZ.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-YXQ8TLqA.js → CanvasWidget-DuXOo3jG.js} +4 -4
  24. package/dist/{CanvasWidget-YXQ8TLqA.js.map → CanvasWidget-DuXOo3jG.js.map} +1 -1
  25. package/dist/{CanvasdotWidget-BbmhHQV_.js → CanvasdotWidget-WoLpxI1u.js} +5 -5
  26. package/dist/{CanvasdotWidget-BbmhHQV_.js.map → CanvasdotWidget-WoLpxI1u.js.map} +1 -1
  27. package/dist/{CanvasdotWidget-CMIw-ga4.cjs → CanvasdotWidget-bbOquK8B.cjs} +2 -2
  28. package/dist/{CanvasdotWidget-CMIw-ga4.cjs.map → CanvasdotWidget-bbOquK8B.cjs.map} +1 -1
  29. package/dist/{CanvasimageWidget-DXxtYjGG.cjs → CanvasimageWidget-D2EqsK7w.cjs} +2 -2
  30. package/dist/{CanvasimageWidget-DXxtYjGG.cjs.map → CanvasimageWidget-D2EqsK7w.cjs.map} +1 -1
  31. package/dist/{CanvasimageWidget-CJf5NYEj.js → CanvasimageWidget-tWpK5rsv.js} +8 -8
  32. package/dist/{CanvasimageWidget-CJf5NYEj.js.map → CanvasimageWidget-tWpK5rsv.js.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-D86eJXbs.js → CanvasimagevalueWidget-BVzJYz3l.js} +9 -9
  34. package/dist/{CanvasimagevalueWidget-D86eJXbs.js.map → CanvasimagevalueWidget-BVzJYz3l.js.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-VPKlJrxM.cjs → CanvasimagevalueWidget-By_DiQ75.cjs} +2 -2
  36. package/dist/{CanvasimagevalueWidget-VPKlJrxM.cjs.map → CanvasimagevalueWidget-By_DiQ75.cjs.map} +1 -1
  37. package/dist/{CanvaslabelWidget-TkrVd-Dg.js → CanvaslabelWidget-CDFf8Vll.js} +5 -5
  38. package/dist/{CanvaslabelWidget-TkrVd-Dg.js.map → CanvaslabelWidget-CDFf8Vll.js.map} +1 -1
  39. package/dist/{CanvaslabelWidget-BgGRS0NS.cjs → CanvaslabelWidget-DiPxyXoX.cjs} +2 -2
  40. package/dist/{CanvaslabelWidget-BgGRS0NS.cjs.map → CanvaslabelWidget-DiPxyXoX.cjs.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-W2QzOkQw.cjs → CanvaslabelvalueWidget-Cw5CCQTi.cjs} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-W2QzOkQw.cjs.map → CanvaslabelvalueWidget-Cw5CCQTi.cjs.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-BwsIN_MT.js → CanvaslabelvalueWidget-DzJKD6qs.js} +5 -5
  44. package/dist/{CanvaslabelvalueWidget-BwsIN_MT.js.map → CanvaslabelvalueWidget-DzJKD6qs.js.map} +1 -1
  45. package/dist/{CanvaslineWidget-yT7FUWs8.cjs → CanvaslineWidget-BECtKTPL.cjs} +2 -2
  46. package/dist/{CanvaslineWidget-yT7FUWs8.cjs.map → CanvaslineWidget-BECtKTPL.cjs.map} +1 -1
  47. package/dist/{CanvaslineWidget-BjBvF-vY.js → CanvaslineWidget-BttTXCZq.js} +5 -5
  48. package/dist/{CanvaslineWidget-BjBvF-vY.js.map → CanvaslineWidget-BttTXCZq.js.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-Dj4tsTBp.cjs → CanvaslinevalueWidget-5duJ98qu.cjs} +2 -2
  50. package/dist/{CanvaslinevalueWidget-Dj4tsTBp.cjs.map → CanvaslinevalueWidget-5duJ98qu.cjs.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-krBLp9yB.js → CanvaslinevalueWidget-i6G0JfnZ.js} +5 -5
  52. package/dist/{CanvaslinevalueWidget-krBLp9yB.js.map → CanvaslinevalueWidget-i6G0JfnZ.js.map} +1 -1
  53. package/dist/{CheckbuttonWidget-IMrIK9q4.js → CheckbuttonWidget-18jtf7sh.js} +5 -5
  54. package/dist/{CheckbuttonWidget-IMrIK9q4.js.map → CheckbuttonWidget-18jtf7sh.js.map} +1 -1
  55. package/dist/{CheckbuttonWidget-CT28NPNo.cjs → CheckbuttonWidget-CTMObPhX.cjs} +2 -2
  56. package/dist/{CheckbuttonWidget-CT28NPNo.cjs.map → CheckbuttonWidget-CTMObPhX.cjs.map} +1 -1
  57. package/dist/{ClassificationBanners-DiIkXqna.js → ClassificationBanners-BmnQODLn.js} +2 -2
  58. package/dist/{ClassificationBanners-DiIkXqna.js.map → ClassificationBanners-BmnQODLn.js.map} +1 -1
  59. package/dist/{ClassificationBanners-DC__VXBX.cjs → ClassificationBanners-DjGCuH-4.cjs} +2 -2
  60. package/dist/{ClassificationBanners-DC__VXBX.cjs.map → ClassificationBanners-DjGCuH-4.cjs.map} +1 -1
  61. package/dist/{ComboboxWidget-C9Zlc2Hy.js → ComboboxWidget-BjaVFbD4.js} +5 -5
  62. package/dist/{ComboboxWidget-C9Zlc2Hy.js.map → ComboboxWidget-BjaVFbD4.js.map} +1 -1
  63. package/dist/{ComboboxWidget-hFBSBFwy.cjs → ComboboxWidget-Cc0Acq9q.cjs} +2 -2
  64. package/dist/{ComboboxWidget-hFBSBFwy.cjs.map → ComboboxWidget-Cc0Acq9q.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-Cp-ykpQb.js → CriticalCmdDialog-CO-nvphS.js} +8 -8
  66. package/dist/{CriticalCmdDialog-Cp-ykpQb.js.map → CriticalCmdDialog-CO-nvphS.js.map} +1 -1
  67. package/dist/{CriticalCmdDialog-CCaStsM-.cjs → CriticalCmdDialog-eytxCQto.cjs} +2 -2
  68. package/dist/{CriticalCmdDialog-CCaStsM-.cjs.map → CriticalCmdDialog-eytxCQto.cjs.map} +1 -1
  69. package/dist/{CustomIcon-Cg3jCA_l.js → CustomIcon-DTR361si.js} +4 -4
  70. package/dist/{CustomIcon-Cg3jCA_l.js.map → CustomIcon-DTR361si.js.map} +1 -1
  71. package/dist/{DateWidget-C_QpCTxN.cjs → DateWidget-Cle8FY8Q.cjs} +2 -2
  72. package/dist/{DateWidget-C_QpCTxN.cjs.map → DateWidget-Cle8FY8Q.cjs.map} +1 -1
  73. package/dist/{DateWidget-Y6WAFGGt.js → DateWidget-DkFAFlc8.js} +5 -5
  74. package/dist/{DateWidget-Y6WAFGGt.js.map → DateWidget-DkFAFlc8.js.map} +1 -1
  75. package/dist/{DetailsDialog-Bq9BPuoe.cjs → DetailsDialog-BcMaTfuQ.cjs} +2 -2
  76. package/dist/{DetailsDialog-Bq9BPuoe.cjs.map → DetailsDialog-BcMaTfuQ.cjs.map} +1 -1
  77. package/dist/{DetailsDialog-DznGAE6i.js → DetailsDialog-sqja4Lzq.js} +5 -5
  78. package/dist/{DetailsDialog-DznGAE6i.js.map → DetailsDialog-sqja4Lzq.js.map} +1 -1
  79. package/dist/{DynamicWidget-Bym87woV.js → DynamicWidget-BuSbQVhf.js} +4 -4
  80. package/dist/{DynamicWidget-Bym87woV.js.map → DynamicWidget-BuSbQVhf.js.map} +1 -1
  81. package/dist/{EventListDialog-CktWO2jn.js → EventListDialog-DjCQAwGl.js} +17 -14
  82. package/dist/EventListDialog-DjCQAwGl.js.map +1 -0
  83. package/dist/EventListDialog-EmC7YW60.cjs +2 -0
  84. package/dist/EventListDialog-EmC7YW60.cjs.map +1 -0
  85. package/dist/{FilechecksumWidget-BZdmiTbb.cjs → FilechecksumWidget-2ta-UvLp.cjs} +2 -2
  86. package/dist/{FilechecksumWidget-BZdmiTbb.cjs.map → FilechecksumWidget-2ta-UvLp.cjs.map} +1 -1
  87. package/dist/{FilechecksumWidget-VbLODmHh.js → FilechecksumWidget-DqJ_hvN4.js} +8 -8
  88. package/dist/{FilechecksumWidget-VbLODmHh.js.map → FilechecksumWidget-DqJ_hvN4.js.map} +1 -1
  89. package/dist/{FiledisplayWidget-BI7GAQ4d.cjs → FiledisplayWidget-BUKXIQir.cjs} +2 -2
  90. package/dist/{FiledisplayWidget-BI7GAQ4d.cjs.map → FiledisplayWidget-BUKXIQir.cjs.map} +1 -1
  91. package/dist/{FiledisplayWidget-kixqcLtx.js → FiledisplayWidget-CYznG_tf.js} +6 -6
  92. package/dist/{FiledisplayWidget-kixqcLtx.js.map → FiledisplayWidget-CYznG_tf.js.map} +1 -1
  93. package/dist/{FormatvalueWidget--djAS0BE.js → FormatvalueWidget-BnVu4YGx.js} +6 -6
  94. package/dist/{FormatvalueWidget--djAS0BE.js.map → FormatvalueWidget-BnVu4YGx.js.map} +1 -1
  95. package/dist/{FormatvalueWidget-I1y_kf9t.cjs → FormatvalueWidget-BpFXnA_U.cjs} +2 -2
  96. package/dist/{FormatvalueWidget-I1y_kf9t.cjs.map → FormatvalueWidget-BpFXnA_U.cjs.map} +1 -1
  97. package/dist/{Graph-GhpiUBKI.js → Graph-CUFzx8Ti.js} +289 -281
  98. package/dist/Graph-CUFzx8Ti.js.map +1 -0
  99. package/dist/Graph-qxF4224c.cjs +2 -0
  100. package/dist/Graph-qxF4224c.cjs.map +1 -0
  101. package/dist/{GraphWidget-Bzo-klWV.cjs → GraphWidget-BvCQHVxQ.cjs} +2 -2
  102. package/dist/{GraphWidget-Bzo-klWV.cjs.map → GraphWidget-BvCQHVxQ.cjs.map} +1 -1
  103. package/dist/{GraphWidget-8T08osON.js → GraphWidget-DO5XbOGy.js} +2 -2
  104. package/dist/{GraphWidget-8T08osON.js.map → GraphWidget-DO5XbOGy.js.map} +1 -1
  105. package/dist/{HorizontalWidget-CusI1RiA.js → HorizontalWidget-BA9PiP3d.js} +4 -4
  106. package/dist/{HorizontalWidget-CusI1RiA.js.map → HorizontalWidget-BA9PiP3d.js.map} +1 -1
  107. package/dist/{HorizontalWidget-CAf9I0CU.cjs → HorizontalWidget-BBQE-dP-.cjs} +2 -2
  108. package/dist/{HorizontalWidget-CAf9I0CU.cjs.map → HorizontalWidget-BBQE-dP-.cjs.map} +1 -1
  109. package/dist/{HorizontalboxWidget-D5fIhINf.js → HorizontalboxWidget-B-7HOqgl.js} +7 -7
  110. package/dist/{HorizontalboxWidget-D5fIhINf.js.map → HorizontalboxWidget-B-7HOqgl.js.map} +1 -1
  111. package/dist/{HorizontalboxWidget-B7E5GEPu.cjs → HorizontalboxWidget-CX7J8RdA.cjs} +2 -2
  112. package/dist/{HorizontalboxWidget-B7E5GEPu.cjs.map → HorizontalboxWidget-CX7J8RdA.cjs.map} +1 -1
  113. package/dist/HorizontallineWidget-D-o9MGo0.js +16 -0
  114. package/dist/{HorizontallineWidget-CnRlq7hi.js.map → HorizontallineWidget-D-o9MGo0.js.map} +1 -1
  115. package/dist/{HorizontallineWidget-DqLKGhdz.cjs → HorizontallineWidget-odTFoB8u.cjs} +2 -2
  116. package/dist/{HorizontallineWidget-DqLKGhdz.cjs.map → HorizontallineWidget-odTFoB8u.cjs.map} +1 -1
  117. package/dist/{IframeWidget-DtF44NYM.js → IframeWidget-BzOka-fX.js} +5 -5
  118. package/dist/{IframeWidget-DtF44NYM.js.map → IframeWidget-BzOka-fX.js.map} +1 -1
  119. package/dist/{IframeWidget-BMtv8io0.cjs → IframeWidget-cTHu_Rmp.cjs} +2 -2
  120. package/dist/{IframeWidget-BMtv8io0.cjs.map → IframeWidget-cTHu_Rmp.cjs.map} +1 -1
  121. package/dist/{ImageLoader-jcIDHdUq.cjs → ImageLoader-BTEOukIw.cjs} +2 -2
  122. package/dist/{ImageLoader-jcIDHdUq.cjs.map → ImageLoader-BTEOukIw.cjs.map} +1 -1
  123. package/dist/{ImageLoader-B5rGuJ_H.js → ImageLoader-CstmWFM4.js} +2 -2
  124. package/dist/{ImageLoader-B5rGuJ_H.js.map → ImageLoader-CstmWFM4.js.map} +1 -1
  125. package/dist/{ImageviewerWidget-Ciu80vaC.js → ImageviewerWidget-BA9uOM1q.js} +5 -5
  126. package/dist/{ImageviewerWidget-Ciu80vaC.js.map → ImageviewerWidget-BA9uOM1q.js.map} +1 -1
  127. package/dist/{ImageviewerWidget-ox5FNYVP.cjs → ImageviewerWidget-CLAFwmaB.cjs} +2 -2
  128. package/dist/{ImageviewerWidget-ox5FNYVP.cjs.map → ImageviewerWidget-CLAFwmaB.cjs.map} +1 -1
  129. package/dist/{InterfacesTab-C14LErLZ.js → InterfacesTab-C3mDLkGC.js} +9 -9
  130. package/dist/{InterfacesTab-C14LErLZ.js.map → InterfacesTab-C3mDLkGC.js.map} +1 -1
  131. package/dist/{InterfacesTab-CUM5GGWs.cjs → InterfacesTab-CM0CGFVS.cjs} +2 -2
  132. package/dist/{InterfacesTab-CUM5GGWs.cjs.map → InterfacesTab-CM0CGFVS.cjs.map} +1 -1
  133. package/dist/{LabelWidget-B9J1Whh0.cjs → LabelWidget-CMmVq1mx.cjs} +2 -2
  134. package/dist/{LabelWidget-B9J1Whh0.cjs.map → LabelWidget-CMmVq1mx.cjs.map} +1 -1
  135. package/dist/{LabelWidget-78VnL1xc.js → LabelWidget-Da2howZF.js} +5 -5
  136. package/dist/{LabelWidget-78VnL1xc.js.map → LabelWidget-Da2howZF.js.map} +1 -1
  137. package/dist/{LabelledWidget-Cx2PI85E.js → LabelledWidget-BH8y3OXT.js} +7 -7
  138. package/dist/{LabelledWidget-Cx2PI85E.js.map → LabelledWidget-BH8y3OXT.js.map} +1 -1
  139. package/dist/{LabelledWidget-BMtqUP-E.cjs → LabelledWidget-CAqH0oWs.cjs} +2 -2
  140. package/dist/{LabelledWidget-BMtqUP-E.cjs.map → LabelledWidget-CAqH0oWs.cjs.map} +1 -1
  141. package/dist/{LabelprogressbarWidget-eC7VC7lY.js → LabelprogressbarWidget-Brl24F4c.js} +7 -7
  142. package/dist/{LabelprogressbarWidget-eC7VC7lY.js.map → LabelprogressbarWidget-Brl24F4c.js.map} +1 -1
  143. package/dist/{LabelprogressbarWidget-Ce3PRzaA.cjs → LabelprogressbarWidget-BxLGmW9T.cjs} +2 -2
  144. package/dist/{LabelprogressbarWidget-Ce3PRzaA.cjs.map → LabelprogressbarWidget-BxLGmW9T.cjs.map} +1 -1
  145. package/dist/{LabelsparklineWidget-DuCA67yl.cjs → LabelsparklineWidget-BUXOpBeB.cjs} +2 -2
  146. package/dist/{LabelsparklineWidget-DuCA67yl.cjs.map → LabelsparklineWidget-BUXOpBeB.cjs.map} +1 -1
  147. package/dist/{LabelsparklineWidget-CP5rD4ob.js → LabelsparklineWidget-D22MB7-4.js} +7 -7
  148. package/dist/{LabelsparklineWidget-CP5rD4ob.js.map → LabelsparklineWidget-D22MB7-4.js.map} +1 -1
  149. package/dist/{LabelvalueWidget-PM8DFnDm.js → LabelvalueWidget-_1JPbK-K.js} +7 -7
  150. package/dist/{LabelvalueWidget-PM8DFnDm.js.map → LabelvalueWidget-_1JPbK-K.js.map} +1 -1
  151. package/dist/{LabelvalueWidget-DxEvAoHT.cjs → LabelvalueWidget-bYqqgIGE.cjs} +2 -2
  152. package/dist/{LabelvalueWidget-DxEvAoHT.cjs.map → LabelvalueWidget-bYqqgIGE.cjs.map} +1 -1
  153. package/dist/{LabelvaluedescWidget-Dy3_fdkx.cjs → LabelvaluedescWidget-B2dFZoDE.cjs} +2 -2
  154. package/dist/{LabelvaluedescWidget-Dy3_fdkx.cjs.map → LabelvaluedescWidget-B2dFZoDE.cjs.map} +1 -1
  155. package/dist/{LabelvaluedescWidget-C8OmKnu-.js → LabelvaluedescWidget-BgduSJJb.js} +8 -8
  156. package/dist/{LabelvaluedescWidget-C8OmKnu-.js.map → LabelvaluedescWidget-BgduSJJb.js.map} +1 -1
  157. package/dist/{LabelvaluelimitsbarWidget-DWvSVvXl.cjs → LabelvaluelimitsbarWidget-BGag8V6k.cjs} +2 -2
  158. package/dist/{LabelvaluelimitsbarWidget-DWvSVvXl.cjs.map → LabelvaluelimitsbarWidget-BGag8V6k.cjs.map} +1 -1
  159. package/dist/{LabelvaluelimitsbarWidget-DIsTQqkO.js → LabelvaluelimitsbarWidget-C9PlEhWo.js} +7 -7
  160. package/dist/{LabelvaluelimitsbarWidget-DIsTQqkO.js.map → LabelvaluelimitsbarWidget-C9PlEhWo.js.map} +1 -1
  161. package/dist/{LabelvaluelimitscolumnWidget-ld556rRi.js → LabelvaluelimitscolumnWidget-Cay6AhoZ.js} +8 -8
  162. package/dist/{LabelvaluelimitscolumnWidget-ld556rRi.js.map → LabelvaluelimitscolumnWidget-Cay6AhoZ.js.map} +1 -1
  163. package/dist/{LabelvaluelimitscolumnWidget-CyPuEz7E.cjs → LabelvaluelimitscolumnWidget-SHVJIgGJ.cjs} +2 -2
  164. package/dist/{LabelvaluelimitscolumnWidget-CyPuEz7E.cjs.map → LabelvaluelimitscolumnWidget-SHVJIgGJ.cjs.map} +1 -1
  165. package/dist/{LabelvaluerangebarWidget-DdqgjjUc.cjs → LabelvaluerangebarWidget-Dbibpimv.cjs} +2 -2
  166. package/dist/{LabelvaluerangebarWidget-DdqgjjUc.cjs.map → LabelvaluerangebarWidget-Dbibpimv.cjs.map} +1 -1
  167. package/dist/{LabelvaluerangebarWidget-nCeoujui.js → LabelvaluerangebarWidget-s_8IgY-C.js} +7 -7
  168. package/dist/{LabelvaluerangebarWidget-nCeoujui.js.map → LabelvaluerangebarWidget-s_8IgY-C.js.map} +1 -1
  169. package/dist/{Layout-BcytiBn4.js → Layout-D7RGn0Fe.js} +2 -2
  170. package/dist/{Layout-BcytiBn4.js.map → Layout-D7RGn0Fe.js.map} +1 -1
  171. package/dist/{Layout-JCk8r88e.cjs → Layout-DwWEea79.cjs} +2 -2
  172. package/dist/{Layout-JCk8r88e.cjs.map → Layout-DwWEea79.cjs.map} +1 -1
  173. package/dist/{LedWidget-BEP-sFTh.cjs → LedWidget-BaiKDozd.cjs} +2 -2
  174. package/dist/{LedWidget-BEP-sFTh.cjs.map → LedWidget-BaiKDozd.cjs.map} +1 -1
  175. package/dist/{LedWidget-3pWKnZsD.js → LedWidget-DgMtvsiv.js} +6 -6
  176. package/dist/{LedWidget-3pWKnZsD.js.map → LedWidget-DgMtvsiv.js.map} +1 -1
  177. package/dist/{LimitsBar-BJ_cERjE.cjs → LimitsBar-BFM38vQL.cjs} +2 -2
  178. package/dist/{LimitsBar-BJ_cERjE.cjs.map → LimitsBar-BFM38vQL.cjs.map} +1 -1
  179. package/dist/{LimitsBar-DCco6Rwp.js → LimitsBar-CcOaAw0C.js} +7 -7
  180. package/dist/{LimitsBar-DCco6Rwp.js.map → LimitsBar-CcOaAw0C.js.map} +1 -1
  181. package/dist/{LimitsbarWidget-DiAnkXID.cjs → LimitsbarWidget-ConP3qI5.cjs} +2 -2
  182. package/dist/{LimitsbarWidget-DiAnkXID.cjs.map → LimitsbarWidget-ConP3qI5.cjs.map} +1 -1
  183. package/dist/{LimitsbarWidget-_BMzxWBm.js → LimitsbarWidget-DpmJn1Lo.js} +7 -7
  184. package/dist/{LimitsbarWidget-_BMzxWBm.js.map → LimitsbarWidget-DpmJn1Lo.js.map} +1 -1
  185. package/dist/{LimitscolorWidget-C2gZyqtI.js → LimitscolorWidget-BMXiEaDm.js} +20 -20
  186. package/dist/{LimitscolorWidget-C2gZyqtI.js.map → LimitscolorWidget-BMXiEaDm.js.map} +1 -1
  187. package/dist/{LimitscolorWidget-ByfzIE_O.cjs → LimitscolorWidget-veWQ4NXl.cjs} +2 -2
  188. package/dist/{LimitscolorWidget-ByfzIE_O.cjs.map → LimitscolorWidget-veWQ4NXl.cjs.map} +1 -1
  189. package/dist/{LimitscolumnWidget-CZwcXbLS.cjs → LimitscolumnWidget-CJABAor8.cjs} +2 -2
  190. package/dist/{LimitscolumnWidget-CZwcXbLS.cjs.map → LimitscolumnWidget-CJABAor8.cjs.map} +1 -1
  191. package/dist/{LimitscolumnWidget-Cv-6FXU3.js → LimitscolumnWidget-ufFMz6R-.js} +5 -5
  192. package/dist/{LimitscolumnWidget-Cv-6FXU3.js.map → LimitscolumnWidget-ufFMz6R-.js.map} +1 -1
  193. package/dist/{LinegraphWidget-so5ohfWF.cjs → LinegraphWidget-3E8L5CvM.cjs} +2 -2
  194. package/dist/{LinegraphWidget-so5ohfWF.cjs.map → LinegraphWidget-3E8L5CvM.cjs.map} +1 -1
  195. package/dist/{LinegraphWidget-BahyhwSt.js → LinegraphWidget-BC2wVOny.js} +7 -7
  196. package/dist/{LinegraphWidget-BahyhwSt.js.map → LinegraphWidget-BC2wVOny.js.map} +1 -1
  197. package/dist/{MatrixbycolumnsWidget-Dma8IsO-.cjs → MatrixbycolumnsWidget-DICgiNQo.cjs} +2 -2
  198. package/dist/{MatrixbycolumnsWidget-Dma8IsO-.cjs.map → MatrixbycolumnsWidget-DICgiNQo.cjs.map} +1 -1
  199. package/dist/{MatrixbycolumnsWidget-B1Hy9but.js → MatrixbycolumnsWidget-DfUAeBnO.js} +5 -5
  200. package/dist/{MatrixbycolumnsWidget-B1Hy9but.js.map → MatrixbycolumnsWidget-DfUAeBnO.js.map} +1 -1
  201. package/dist/{MicroservicesTab-BSXNA_Si.js → MicroservicesTab-B0SZVty3.js} +67 -62
  202. package/dist/MicroservicesTab-B0SZVty3.js.map +1 -0
  203. package/dist/MicroservicesTab-snXJDoYq.cjs +4 -0
  204. package/dist/MicroservicesTab-snXJDoYq.cjs.map +1 -0
  205. package/dist/{OpenC3TimePicker-LN9R7V31.js → OpenC3TimePicker-DpkbfbgC.js} +5 -5
  206. package/dist/{OpenC3TimePicker-LN9R7V31.js.map → OpenC3TimePicker-DpkbfbgC.js.map} +1 -1
  207. package/dist/{OpenC3TimePicker-BHX9fnlR.cjs → OpenC3TimePicker-Yl1jVi7p.cjs} +2 -2
  208. package/dist/{OpenC3TimePicker-BHX9fnlR.cjs.map → OpenC3TimePicker-Yl1jVi7p.cjs.map} +1 -1
  209. package/dist/{Openc3Screen-CJOTF-lu.cjs → Openc3Screen-D1RLlBgQ.cjs} +5 -5
  210. package/dist/Openc3Screen-D1RLlBgQ.cjs.map +1 -0
  211. package/dist/{Openc3Screen-BP7Ho9XC.js → Openc3Screen-DbUvz-3B.js} +254 -254
  212. package/dist/Openc3Screen-DbUvz-3B.js.map +1 -0
  213. package/dist/{OutputDialog-Dx5mkq19.cjs → OutputDialog-ChPCaQAE.cjs} +2 -2
  214. package/dist/{OutputDialog-Dx5mkq19.cjs.map → OutputDialog-ChPCaQAE.cjs.map} +1 -1
  215. package/dist/{OutputDialog-JdAxzpPD.js → OutputDialog-Ds-GdGyI.js} +5 -5
  216. package/dist/{OutputDialog-JdAxzpPD.js.map → OutputDialog-Ds-GdGyI.js.map} +1 -1
  217. package/dist/PackagesTab-BgQsbXRo.cjs +2 -0
  218. package/dist/PackagesTab-BgQsbXRo.cjs.map +1 -0
  219. package/dist/{PackagesTab-ByfVH001.js → PackagesTab-CWplBp_I.js} +70 -66
  220. package/dist/PackagesTab-CWplBp_I.js.map +1 -0
  221. package/dist/{PluginsTab-D7zpmf8s.js → PluginsTab-BiiL622n.js} +486 -448
  222. package/dist/PluginsTab-BiiL622n.js.map +1 -0
  223. package/dist/PluginsTab-RgIMk-F7.cjs +6 -0
  224. package/dist/PluginsTab-RgIMk-F7.cjs.map +1 -0
  225. package/dist/{ProgressbarWidget-mAVHKeok.js → ProgressbarWidget-D3ndYnq_.js} +5 -5
  226. package/dist/{ProgressbarWidget-mAVHKeok.js.map → ProgressbarWidget-D3ndYnq_.js.map} +1 -1
  227. package/dist/{ProgressbarWidget-BINuoD9p.cjs → ProgressbarWidget-DludJVUf.cjs} +2 -2
  228. package/dist/{ProgressbarWidget-BINuoD9p.cjs.map → ProgressbarWidget-DludJVUf.cjs.map} +1 -1
  229. package/dist/{RadiobuttonWidget-CL3QjTnZ.js → RadiobuttonWidget-CP0S9nWW.js} +5 -5
  230. package/dist/{RadiobuttonWidget-CL3QjTnZ.js.map → RadiobuttonWidget-CP0S9nWW.js.map} +1 -1
  231. package/dist/{RadiobuttonWidget-DDmgt0su.cjs → RadiobuttonWidget-DX4h94p1.cjs} +2 -2
  232. package/dist/{RadiobuttonWidget-DDmgt0su.cjs.map → RadiobuttonWidget-DX4h94p1.cjs.map} +1 -1
  233. package/dist/{RadiogroupWidget-RUwgtUTC.js → RadiogroupWidget-BXHfA21T.js} +4 -4
  234. package/dist/{RadiogroupWidget-RUwgtUTC.js.map → RadiogroupWidget-BXHfA21T.js.map} +1 -1
  235. package/dist/{RadiogroupWidget-q7h1v-ko.cjs → RadiogroupWidget-NqjBNUH6.cjs} +2 -2
  236. package/dist/{RadiogroupWidget-q7h1v-ko.cjs.map → RadiogroupWidget-NqjBNUH6.cjs.map} +1 -1
  237. package/dist/{RangebarWidget-CfDsKLZc.js → RangebarWidget-Bv2DqkPo.js} +5 -5
  238. package/dist/{RangebarWidget-CfDsKLZc.js.map → RangebarWidget-Bv2DqkPo.js.map} +1 -1
  239. package/dist/{RangebarWidget-BbPMpwMs.cjs → RangebarWidget-CRq2zpvw.cjs} +2 -2
  240. package/dist/{RangebarWidget-BbPMpwMs.cjs.map → RangebarWidget-CRq2zpvw.cjs.map} +1 -1
  241. package/dist/{RedisTab-YrX-5A3T.js → RedisTab-7TbOXFA_.js} +9 -9
  242. package/dist/{RedisTab-YrX-5A3T.js.map → RedisTab-7TbOXFA_.js.map} +1 -1
  243. package/dist/{RedisTab-dZE6KvLS.cjs → RedisTab-DpWPY1P0.cjs} +2 -2
  244. package/dist/{RedisTab-dZE6KvLS.cjs.map → RedisTab-DpWPY1P0.cjs.map} +1 -1
  245. package/dist/{RollupWidget-BmgRFIOo.cjs → RollupWidget-B7_Q_boi.cjs} +2 -2
  246. package/dist/{RollupWidget-BmgRFIOo.cjs.map → RollupWidget-B7_Q_boi.cjs.map} +1 -1
  247. package/dist/{RollupWidget-DCMoQUeJ.js → RollupWidget-o_huYU0x.js} +5 -5
  248. package/dist/{RollupWidget-DCMoQUeJ.js.map → RollupWidget-o_huYU0x.js.map} +1 -1
  249. package/dist/{RoutersTab-C6vejQrw.cjs → RoutersTab-CAbnSGHy.cjs} +2 -2
  250. package/dist/{RoutersTab-C6vejQrw.cjs.map → RoutersTab-CAbnSGHy.cjs.map} +1 -1
  251. package/dist/{RoutersTab-MA9KW_gu.js → RoutersTab-DN17iBBi.js} +9 -9
  252. package/dist/{RoutersTab-MA9KW_gu.js.map → RoutersTab-DN17iBBi.js.map} +1 -1
  253. package/dist/{ScriptChooser-Cm_HEyBf.cjs → ScriptChooser-CggwstfT.cjs} +2 -2
  254. package/dist/{ScriptChooser-Cm_HEyBf.cjs.map → ScriptChooser-CggwstfT.cjs.map} +1 -1
  255. package/dist/{ScriptChooser-DGbs03IW.js → ScriptChooser-CzzUJ1Zj.js} +6 -6
  256. package/dist/{ScriptChooser-DGbs03IW.js.map → ScriptChooser-CzzUJ1Zj.js.map} +1 -1
  257. package/dist/{ScrollwindowWidget-DarXe7-1.js → ScrollwindowWidget-DdjaML6D.js} +4 -4
  258. package/dist/{ScrollwindowWidget-DarXe7-1.js.map → ScrollwindowWidget-DdjaML6D.js.map} +1 -1
  259. package/dist/{ScrollwindowWidget-BbASNNcM.cjs → ScrollwindowWidget-kS5QjP-v.cjs} +2 -2
  260. package/dist/{ScrollwindowWidget-BbASNNcM.cjs.map → ScrollwindowWidget-kS5QjP-v.cjs.map} +1 -1
  261. package/dist/{SecretsTab-DwE3KJNI.cjs → SecretsTab-Cn6-o85L.cjs} +2 -2
  262. package/dist/{SecretsTab-DwE3KJNI.cjs.map → SecretsTab-Cn6-o85L.cjs.map} +1 -1
  263. package/dist/{SecretsTab-DTaPAHv3.js → SecretsTab-Cu3sx2OA.js} +4 -4
  264. package/dist/{SecretsTab-DTaPAHv3.js.map → SecretsTab-Cu3sx2OA.js.map} +1 -1
  265. package/dist/{SettingsTab-BhT5sui9.js → SettingsTab-B_vvSLvt.js} +6 -6
  266. package/dist/{SettingsTab-BhT5sui9.js.map → SettingsTab-B_vvSLvt.js.map} +1 -1
  267. package/dist/{SettingsTab-o9tfAuE4.cjs → SettingsTab-C6zIL2D6.cjs} +2 -2
  268. package/dist/{SettingsTab-o9tfAuE4.cjs.map → SettingsTab-C6zIL2D6.cjs.map} +1 -1
  269. package/dist/{SignalWidget-CO3UaFok.cjs → SignalWidget-BagcB92r.cjs} +2 -2
  270. package/dist/{SignalWidget-CO3UaFok.cjs.map → SignalWidget-BagcB92r.cjs.map} +1 -1
  271. package/dist/{SignalWidget-C-iEC5KL.js → SignalWidget-Dd54y28I.js} +5 -5
  272. package/dist/{SignalWidget-C-iEC5KL.js.map → SignalWidget-Dd54y28I.js.map} +1 -1
  273. package/dist/{SimpleTextDialog-B9ZurpdS.cjs → SimpleTextDialog-BJ50TbWh.cjs} +2 -2
  274. package/dist/{SimpleTextDialog-B9ZurpdS.cjs.map → SimpleTextDialog-BJ50TbWh.cjs.map} +1 -1
  275. package/dist/{SimpleTextDialog-Bqh3eT2B.js → SimpleTextDialog-DZv9n_kJ.js} +5 -5
  276. package/dist/{SimpleTextDialog-Bqh3eT2B.js.map → SimpleTextDialog-DZv9n_kJ.js.map} +1 -1
  277. package/dist/{SpacerWidget-CQh-LB4u.cjs → SpacerWidget-DWjBns9r.cjs} +2 -2
  278. package/dist/{SpacerWidget-CQh-LB4u.cjs.map → SpacerWidget-DWjBns9r.cjs.map} +1 -1
  279. package/dist/{SpacerWidget-FHxUhs1G.js → SpacerWidget-GPFYtIG1.js} +5 -5
  280. package/dist/{SpacerWidget-FHxUhs1G.js.map → SpacerWidget-GPFYtIG1.js.map} +1 -1
  281. package/dist/{SparklineWidget-ClT5Umm2.js → SparklineWidget-f11nrlLS.js} +7 -7
  282. package/dist/{SparklineWidget-ClT5Umm2.js.map → SparklineWidget-f11nrlLS.js.map} +1 -1
  283. package/dist/{SparklineWidget-BsMIozYC.cjs → SparklineWidget-xdPgolp3.cjs} +2 -2
  284. package/dist/{SparklineWidget-BsMIozYC.cjs.map → SparklineWidget-xdPgolp3.cjs.map} +1 -1
  285. package/dist/{TabbookWidget-So-oaWd4.cjs → TabbookWidget-CUIYWHRH.cjs} +2 -2
  286. package/dist/{TabbookWidget-So-oaWd4.cjs.map → TabbookWidget-CUIYWHRH.cjs.map} +1 -1
  287. package/dist/{TabbookWidget-D-b0v0oo.js → TabbookWidget-DeaC27yC.js} +4 -4
  288. package/dist/{TabbookWidget-D-b0v0oo.js.map → TabbookWidget-DeaC27yC.js.map} +1 -1
  289. package/dist/{TargetPacketItemChooser-DD7JgCD9.js → TargetPacketItemChooser-BoBqvs3T.js} +23 -23
  290. package/dist/TargetPacketItemChooser-BoBqvs3T.js.map +1 -0
  291. package/dist/TargetPacketItemChooser-C0Z90rss.cjs +2 -0
  292. package/dist/TargetPacketItemChooser-C0Z90rss.cjs.map +1 -0
  293. package/dist/{TargetsTab-BD0JGvAl.cjs → TargetsTab-BMcWjrZ_.cjs} +2 -2
  294. package/dist/{TargetsTab-BD0JGvAl.cjs.map → TargetsTab-BMcWjrZ_.cjs.map} +1 -1
  295. package/dist/{TargetsTab-hTLe_rba.js → TargetsTab-CjVaBN9O.js} +11 -11
  296. package/dist/{TargetsTab-hTLe_rba.js.map → TargetsTab-CjVaBN9O.js.map} +1 -1
  297. package/dist/{TextBoxDialog-BRwZOtzT.js → TextBoxDialog-R6GC8pMa.js} +4 -4
  298. package/dist/{TextBoxDialog-BRwZOtzT.js.map → TextBoxDialog-R6GC8pMa.js.map} +1 -1
  299. package/dist/{TextboxWidget-CF4iq315.cjs → TextboxWidget-CXA9rR02.cjs} +2 -2
  300. package/dist/{TextboxWidget-CF4iq315.cjs.map → TextboxWidget-CXA9rR02.cjs.map} +1 -1
  301. package/dist/{TextboxWidget-WM3eFUR_.js → TextboxWidget-tL41zWUX.js} +6 -6
  302. package/dist/{TextboxWidget-WM3eFUR_.js.map → TextboxWidget-tL41zWUX.js.map} +1 -1
  303. package/dist/{TextfieldWidget-D9BINKRU.cjs → TextfieldWidget-D-H2fOZG.cjs} +2 -2
  304. package/dist/{TextfieldWidget-D9BINKRU.cjs.map → TextfieldWidget-D-H2fOZG.cjs.map} +1 -1
  305. package/dist/{TextfieldWidget-lfc1Vg51.js → TextfieldWidget-D1qj14Qi.js} +5 -5
  306. package/dist/{TextfieldWidget-lfc1Vg51.js.map → TextfieldWidget-D1qj14Qi.js.map} +1 -1
  307. package/dist/{TimeWidget-CgtJbnnC.cjs → TimeWidget-CGk8Ze_I.cjs} +2 -2
  308. package/dist/{TimeWidget-CgtJbnnC.cjs.map → TimeWidget-CGk8Ze_I.cjs.map} +1 -1
  309. package/dist/{TimeWidget-B13aIVqG.js → TimeWidget-CSVGNong.js} +6 -6
  310. package/dist/{TimeWidget-B13aIVqG.js.map → TimeWidget-CSVGNong.js.map} +1 -1
  311. package/dist/{TitleWidget-CTAMgzU4.js → TitleWidget-CLx-tuYT.js} +5 -5
  312. package/dist/{TitleWidget-CTAMgzU4.js.map → TitleWidget-CLx-tuYT.js.map} +1 -1
  313. package/dist/{TitleWidget-BV2sDP_-.cjs → TitleWidget-ClhWhUf3.cjs} +2 -2
  314. package/dist/{TitleWidget-BV2sDP_-.cjs.map → TitleWidget-ClhWhUf3.cjs.map} +1 -1
  315. package/dist/{ToolsTab-DXK-L-kx.cjs → ToolsTab-DTHap-Nq.cjs} +2 -2
  316. package/dist/{ToolsTab-DXK-L-kx.cjs.map → ToolsTab-DTHap-Nq.cjs.map} +1 -1
  317. package/dist/{ToolsTab-CmhRtClS.js → ToolsTab-lBB_KhmA.js} +10 -10
  318. package/dist/{ToolsTab-CmhRtClS.js.map → ToolsTab-lBB_KhmA.js.map} +1 -1
  319. package/dist/{TopBar-D-lJHb6d.js → TopBar-C810rP_B.js} +4 -4
  320. package/dist/{TopBar-D-lJHb6d.js.map → TopBar-C810rP_B.js.map} +1 -1
  321. package/dist/{TopBar-BiE7GgIN.cjs → TopBar-Ctzx7o2k.cjs} +2 -2
  322. package/dist/{TopBar-BiE7GgIN.cjs.map → TopBar-Ctzx7o2k.cjs.map} +1 -1
  323. package/dist/TsdbTab-7F4mRKDo.js +125 -0
  324. package/dist/TsdbTab-7F4mRKDo.js.map +1 -0
  325. package/dist/TsdbTab-DVF6n9mq.cjs +2 -0
  326. package/dist/TsdbTab-DVF6n9mq.cjs.map +1 -0
  327. package/dist/{UpgradeToEnterpriseDialog-et3RrozN.js → UpgradeToEnterpriseDialog-D_S574Zb.js} +6 -6
  328. package/dist/{UpgradeToEnterpriseDialog-et3RrozN.js.map → UpgradeToEnterpriseDialog-D_S574Zb.js.map} +1 -1
  329. package/dist/{UpgradeToEnterpriseDialog-D1_viCAx.cjs → UpgradeToEnterpriseDialog-XJb6gVCY.cjs} +2 -2
  330. package/dist/{UpgradeToEnterpriseDialog-D1_viCAx.cjs.map → UpgradeToEnterpriseDialog-XJb6gVCY.cjs.map} +1 -1
  331. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-D0cYHPwr.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js} +11973 -11975
  332. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js.map +1 -0
  333. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs +1485 -0
  334. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs.map +1 -0
  335. package/dist/{VWidget-0kkhOxhV.js → VWidget-CxnaMF0w.js} +3 -3
  336. package/dist/{VWidget-0kkhOxhV.js.map → VWidget-CxnaMF0w.js.map} +1 -1
  337. package/dist/{VWidget-Dkji3VZ0.cjs → VWidget-dEHSEvZx.cjs} +2 -2
  338. package/dist/{VWidget-Dkji3VZ0.cjs.map → VWidget-dEHSEvZx.cjs.map} +1 -1
  339. package/dist/{ValueWidget-BoQfnx8U.js → ValueWidget-BYgpXfDo.js} +6 -6
  340. package/dist/{ValueWidget-BoQfnx8U.js.map → ValueWidget-BYgpXfDo.js.map} +1 -1
  341. package/dist/{ValueWidget-mkXMZvdK.cjs → ValueWidget-Bws1qOEI.cjs} +2 -2
  342. package/dist/{ValueWidget-mkXMZvdK.cjs.map → ValueWidget-Bws1qOEI.cjs.map} +1 -1
  343. package/dist/{ValuelimitsbarWidget-B8IUYgYx.cjs → ValuelimitsbarWidget-BoZSJvuq.cjs} +2 -2
  344. package/dist/{ValuelimitsbarWidget-B8IUYgYx.cjs.map → ValuelimitsbarWidget-BoZSJvuq.cjs.map} +1 -1
  345. package/dist/{ValuelimitsbarWidget-ZfgwDNqX.js → ValuelimitsbarWidget-Dc9-VNZ3.js} +7 -7
  346. package/dist/{ValuelimitsbarWidget-ZfgwDNqX.js.map → ValuelimitsbarWidget-Dc9-VNZ3.js.map} +1 -1
  347. package/dist/{ValuelimitscolumnWidget-B3x9DknL.js → ValuelimitscolumnWidget-b7W8K3mR.js} +7 -7
  348. package/dist/{ValuelimitscolumnWidget-B3x9DknL.js.map → ValuelimitscolumnWidget-b7W8K3mR.js.map} +1 -1
  349. package/dist/{ValuelimitscolumnWidget-B7DigaiC.cjs → ValuelimitscolumnWidget-ta9i_tiy.cjs} +2 -2
  350. package/dist/{ValuelimitscolumnWidget-B7DigaiC.cjs.map → ValuelimitscolumnWidget-ta9i_tiy.cjs.map} +1 -1
  351. package/dist/{ValuerangebarWidget-40InNHft.js → ValuerangebarWidget-DmhczZQb.js} +7 -7
  352. package/dist/{ValuerangebarWidget-40InNHft.js.map → ValuerangebarWidget-DmhczZQb.js.map} +1 -1
  353. package/dist/{ValuerangebarWidget-DA4X0MuO.cjs → ValuerangebarWidget-Ips-beG6.cjs} +2 -2
  354. package/dist/{ValuerangebarWidget-DA4X0MuO.cjs.map → ValuerangebarWidget-Ips-beG6.cjs.map} +1 -1
  355. package/dist/{VerticalWidget-BiFa3xbs.cjs → VerticalWidget-BVt7QPjO.cjs} +2 -2
  356. package/dist/{VerticalWidget-BiFa3xbs.cjs.map → VerticalWidget-BVt7QPjO.cjs.map} +1 -1
  357. package/dist/{VerticalWidget-abr1X6L7.js → VerticalWidget-BvsVh0Ob.js} +4 -4
  358. package/dist/{VerticalWidget-abr1X6L7.js.map → VerticalWidget-BvsVh0Ob.js.map} +1 -1
  359. package/dist/{VerticalboxWidget-Cx30rcqe.cjs → VerticalboxWidget-CNoXT3YW.cjs} +2 -2
  360. package/dist/{VerticalboxWidget-Cx30rcqe.cjs.map → VerticalboxWidget-CNoXT3YW.cjs.map} +1 -1
  361. package/dist/{VerticalboxWidget-DsbB17o-.js → VerticalboxWidget-ClTCDCQN.js} +7 -7
  362. package/dist/{VerticalboxWidget-DsbB17o-.js.map → VerticalboxWidget-ClTCDCQN.js.map} +1 -1
  363. package/dist/{Widget-VL9FlMQp.cjs → Widget-CB_BtOFw.cjs} +2 -2
  364. package/dist/{Widget-VL9FlMQp.cjs.map → Widget-CB_BtOFw.cjs.map} +1 -1
  365. package/dist/{Widget-DksaxMdD.js → Widget-DRhVdCLP.js} +2 -2
  366. package/dist/{Widget-DksaxMdD.js.map → Widget-DRhVdCLP.js.map} +1 -1
  367. package/dist/components.cjs +1 -1
  368. package/dist/components.js +19 -19
  369. package/dist/icons.js +2 -2
  370. package/dist/{index-Qy49-kGB.cjs → index-3sXOEKCU.cjs} +4 -4
  371. package/dist/index-3sXOEKCU.cjs.map +1 -0
  372. package/dist/{index-DqKiZufS.cjs → index-B34azWgs.cjs} +4 -4
  373. package/dist/index-B34azWgs.cjs.map +1 -0
  374. package/dist/{index-C7Uj4U87.js → index-CJcL4_a4.js} +6 -6
  375. package/dist/index-CJcL4_a4.js.map +1 -0
  376. package/dist/{index-BRc4sKEF.js → index-GYAZJDxn.js} +75 -69
  377. package/dist/index-GYAZJDxn.js.map +1 -0
  378. package/dist/plugins.cjs +1 -1
  379. package/dist/plugins.cjs.map +1 -1
  380. package/dist/plugins.js +3 -3
  381. package/dist/plugins.js.map +1 -1
  382. package/dist/purify.es-4pyphLiB.cjs +3 -0
  383. package/dist/purify.es-4pyphLiB.cjs.map +1 -0
  384. package/dist/{purify.es-DcWaZU6I.js → purify.es-BPDBzHtc.js} +115 -115
  385. package/dist/purify.es-BPDBzHtc.js.map +1 -0
  386. package/dist/{settings-D3MxiRHY.cjs → settings-B0AhztTk.cjs} +2 -2
  387. package/dist/{settings-D3MxiRHY.cjs.map → settings-B0AhztTk.cjs.map} +1 -1
  388. package/dist/{settings-BDlsBCNk.js → settings-C2auUQwX.js} +2 -2
  389. package/dist/{settings-BDlsBCNk.js.map → settings-C2auUQwX.js.map} +1 -1
  390. package/dist/tools/admin.cjs +1 -1
  391. package/dist/tools/admin.js +1 -1
  392. package/dist/tools/base.cjs +1 -1
  393. package/dist/tools/base.js +9 -9
  394. package/dist/tools/calendar.cjs +1 -1
  395. package/dist/tools/calendar.js +1 -1
  396. package/dist/tools/scriptrunner.cjs +8 -8
  397. package/dist/tools/scriptrunner.cjs.map +1 -1
  398. package/dist/tools/scriptrunner.js +3185 -2986
  399. package/dist/tools/scriptrunner.js.map +1 -1
  400. package/dist/vue-common.css +1 -1
  401. package/dist/widgets.cjs +1 -1
  402. package/dist/widgets.js +65 -65
  403. package/package.json +10 -10
  404. package/dist/EventListDialog-CktWO2jn.js.map +0 -1
  405. package/dist/EventListDialog-EAGLDaHc.cjs +0 -2
  406. package/dist/EventListDialog-EAGLDaHc.cjs.map +0 -1
  407. package/dist/Graph-9_EZ9aQx.cjs +0 -2
  408. package/dist/Graph-9_EZ9aQx.cjs.map +0 -1
  409. package/dist/Graph-GhpiUBKI.js.map +0 -1
  410. package/dist/HorizontallineWidget-CnRlq7hi.js +0 -16
  411. package/dist/MicroservicesTab-ARGtrfOb.cjs +0 -4
  412. package/dist/MicroservicesTab-ARGtrfOb.cjs.map +0 -1
  413. package/dist/MicroservicesTab-BSXNA_Si.js.map +0 -1
  414. package/dist/Openc3Screen-BP7Ho9XC.js.map +0 -1
  415. package/dist/Openc3Screen-CJOTF-lu.cjs.map +0 -1
  416. package/dist/PackagesTab-ByfVH001.js.map +0 -1
  417. package/dist/PackagesTab-HPNAXhzf.cjs +0 -2
  418. package/dist/PackagesTab-HPNAXhzf.cjs.map +0 -1
  419. package/dist/PluginsTab-D7zpmf8s.js.map +0 -1
  420. package/dist/PluginsTab-DfmpvAYa.cjs +0 -6
  421. package/dist/PluginsTab-DfmpvAYa.cjs.map +0 -1
  422. package/dist/TargetPacketItemChooser-DD7JgCD9.js.map +0 -1
  423. package/dist/TargetPacketItemChooser-PqyXKRlT.cjs +0 -2
  424. package/dist/TargetPacketItemChooser-PqyXKRlT.cjs.map +0 -1
  425. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-D0cYHPwr.js.map +0 -1
  426. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DtL207xP.cjs +0 -1485
  427. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DtL207xP.cjs.map +0 -1
  428. package/dist/index-BRc4sKEF.js.map +0 -1
  429. package/dist/index-C7Uj4U87.js.map +0 -1
  430. package/dist/index-DqKiZufS.cjs.map +0 -1
  431. package/dist/index-Qy49-kGB.cjs.map +0 -1
  432. package/dist/purify.es-B336bjAn.cjs +0 -3
  433. package/dist/purify.es-B336bjAn.cjs.map +0 -1
  434. package/dist/purify.es-DcWaZU6I.js.map +0 -1
@@ -1,16 +1,17 @@
1
- import { F as v } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-D0cYHPwr.js";
2
- import { resolveComponent as c, createElementBlock as _, openBlock as d, createVNode as a, createElementVNode as R, createBlock as g, createCommentVNode as b, withCtx as n, createTextVNode as m, toDisplayString as p, Fragment as S, renderList as j, withDirectives as N, vShow as I, mergeProps as y } from "vue";
3
- import { _ as P } from "./CustomIcon-Cg3jCA_l.js";
1
+ import { F as v, y as R } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js";
2
+ import { resolveComponent as c, openBlock as d, createElementBlock as _, createVNode as n, withCtx as a, createTextVNode as m, toDisplayString as p, createElementVNode as j, Fragment as S, createBlock as g, createCommentVNode as b, renderList as N, withDirectives as P, vShow as U, mergeProps as y } from "vue";
3
+ import { _ as I } from "./CustomIcon-DTR361si.js";
4
+ import { T as B } from "./timeFilters-DTOZtBlG.js";
4
5
  import "./store-CO68rDJT.js";
5
6
  import "single-spa";
6
- import { O as U } from "./OutputDialog-JdAxzpPD.js";
7
- import { T as B } from "./TextBoxDialog-BRwZOtzT.js";
8
- import { f as L, t as q } from "./format-CJYjW-xx.js";
7
+ import { O as L } from "./OutputDialog-Ds-GdGyI.js";
8
+ import { T as q } from "./TextBoxDialog-R6GC8pMa.js";
9
9
  const J = {
10
10
  components: {
11
- OutputDialog: U,
12
- TextBoxDialog: B
11
+ OutputDialog: L,
12
+ TextBoxDialog: q
13
13
  },
14
+ mixins: [B],
14
15
  data() {
15
16
  return {
16
17
  filteredMicroservices: [],
@@ -25,6 +26,7 @@ const J = {
25
26
  alertType: "success",
26
27
  showAlert: !1,
27
28
  updater: null,
29
+ timeZone: "local",
28
30
  // { service_name:
29
31
  // { operation: 'stopping' | 'restarting' | 'starting',
30
32
  // enabled_states: []
@@ -55,6 +57,12 @@ const J = {
55
57
  this.applyServiceFilter();
56
58
  }
57
59
  },
60
+ created() {
61
+ new R().get_setting("time_zone").then((e) => {
62
+ e && (this.timeZone = e);
63
+ }).catch(() => {
64
+ });
65
+ },
58
66
  mounted() {
59
67
  this.update(), this.updater = setInterval(() => {
60
68
  this.update();
@@ -228,12 +236,6 @@ ${t}`;
228
236
  const t = this.microservice_status[e].error;
229
237
  this.jsonContent = JSON.stringify(t, null, " "), this.showError = !0;
230
238
  },
231
- formatDate(e) {
232
- return L(
233
- q(Number.parseInt(e) / 1e6),
234
- "yyyy-MM-dd HH:mm:ss.SSS"
235
- );
236
- },
237
239
  // States are determined by the microservice and not from an explicitly defined set
238
240
  // However, we can provide useful colors for errors and common states
239
241
  getStateColor(e) {
@@ -258,22 +260,22 @@ ${t}`;
258
260
  }
259
261
  }
260
262
  }
261
- }, H = { class: "text-caption text-medium-emphasis mt-2 mb-2 ml-4" };
263
+ }, Z = { class: "text-caption text-medium-emphasis mt-2 mb-2 ml-4" };
262
264
  function z(e, t, l, r, s, i) {
263
- const h = c("v-alert"), u = c("v-btn"), w = c("v-col"), T = c("v-row"), x = c("v-list-item-title"), k = c("v-list-item-subtitle"), O = c("v-chip"), C = c("v-tooltip"), E = c("v-list-item"), A = c("v-divider"), D = c("v-list"), F = c("output-dialog"), V = c("text-box-dialog");
265
+ const h = c("v-alert"), u = c("v-btn"), w = c("v-col"), M = c("v-row"), x = c("v-list-item-title"), k = c("v-list-item-subtitle"), O = c("v-chip"), C = c("v-tooltip"), E = c("v-list-item"), A = c("v-divider"), F = c("v-list"), D = c("output-dialog"), V = c("text-box-dialog");
264
266
  return d(), _("div", null, [
265
- a(h, {
267
+ n(h, {
266
268
  modelValue: s.showAlert,
267
269
  "onUpdate:modelValue": t[0] || (t[0] = (o) => s.showAlert = o),
268
270
  closable: "",
269
271
  type: s.alertType
270
272
  }, {
271
- default: n(() => [
273
+ default: a(() => [
272
274
  m(p(s.alert), 1)
273
275
  ]),
274
276
  _: 1
275
277
  }, 8, ["modelValue", "type"]),
276
- R("div", H, [
278
+ j("div", Z, [
277
279
  i.hasServiceFilter && i.filteredServiceCount === 0 ? (d(), _(S, { key: 0 }, [
278
280
  m(" No microservices match filter (showing 0 / " + p(i.totalServiceCount) + ") ", 1)
279
281
  ], 64)) : i.hasServiceFilter ? (d(), _(S, { key: 1 }, [
@@ -282,20 +284,20 @@ function z(e, t, l, r, s, i) {
282
284
  m(p(i.totalServiceCount) + " microservices ", 1)
283
285
  ], 64))
284
286
  ]),
285
- i.hasServiceFilter ? (d(), g(T, {
287
+ i.hasServiceFilter ? (d(), g(M, {
286
288
  key: 0,
287
289
  class: "ml-1 mb-1"
288
290
  }, {
289
- default: n(() => [
290
- a(w, { cols: "auto" }, {
291
- default: n(() => [
292
- a(u, {
291
+ default: a(() => [
292
+ n(w, { cols: "auto" }, {
293
+ default: a(() => [
294
+ n(u, {
293
295
  color: "primary",
294
296
  "prepend-icon": "mdi-filter-off",
295
297
  "aria-label": "Filter applied. Click to clear filter and show all services.",
296
298
  onClick: i.clearServiceFilter
297
299
  }, {
298
- default: n(() => [...t[3] || (t[3] = [
300
+ default: a(() => [...t[3] || (t[3] = [
299
301
  m(" Show All ", -1)
300
302
  ])]),
301
303
  _: 1
@@ -303,15 +305,15 @@ function z(e, t, l, r, s, i) {
303
305
  ]),
304
306
  _: 1
305
307
  }),
306
- a(w, { cols: "auto" }, {
307
- default: n(() => [
308
- a(u, {
308
+ n(w, { cols: "auto" }, {
309
+ default: a(() => [
310
+ n(u, {
309
311
  color: "warning",
310
312
  "prepend-icon": "mdi-refresh",
311
313
  disabled: i.filteredServiceCount === 0,
312
314
  onClick: i.bulkRestartServices
313
315
  }, {
314
- default: n(() => [...t[4] || (t[4] = [
316
+ default: a(() => [...t[4] || (t[4] = [
315
317
  m(" Restart All ", -1)
316
318
  ])]),
317
319
  _: 1
@@ -319,15 +321,15 @@ function z(e, t, l, r, s, i) {
319
321
  ]),
320
322
  _: 1
321
323
  }),
322
- a(w, { cols: "auto" }, {
323
- default: n(() => [
324
- a(u, {
324
+ n(w, { cols: "auto" }, {
325
+ default: a(() => [
326
+ n(u, {
325
327
  color: "error",
326
328
  "prepend-icon": "mdi-stop",
327
329
  disabled: i.filteredServiceCount === 0,
328
330
  onClick: i.bulkStopServices
329
331
  }, {
330
- default: n(() => [...t[5] || (t[5] = [
332
+ default: a(() => [...t[5] || (t[5] = [
331
333
  m(" Stop All ", -1)
332
334
  ])]),
333
335
  _: 1
@@ -338,22 +340,22 @@ function z(e, t, l, r, s, i) {
338
340
  ]),
339
341
  _: 1
340
342
  })) : b("", !0),
341
- a(D, {
343
+ n(F, {
342
344
  class: "list",
343
345
  "data-test": "microserviceList"
344
346
  }, {
345
- default: n(() => [
346
- (d(!0), _(S, null, j(s.filteredMicroservices, (o) => (d(), _("div", {
347
+ default: a(() => [
348
+ (d(!0), _(S, null, N(s.filteredMicroservices, (o) => (d(), _("div", {
347
349
  key: o.name
348
350
  }, [
349
- a(E, null, {
350
- append: n(() => [
351
- N(a(u, {
351
+ n(E, null, {
352
+ append: a(() => [
353
+ P(n(u, {
352
354
  icon: "mdi-alert",
353
355
  variant: "text",
354
356
  onClick: (f) => i.showMicroserviceError(o.name)
355
357
  }, null, 8, ["onClick"]), [
356
- [I, s.microservice_status[o.name]?.error]
358
+ [U, s.microservice_status[o.name]?.error]
357
359
  ]),
358
360
  s.microservice_status[o.name] ? (d(), g(O, {
359
361
  key: 0,
@@ -361,17 +363,17 @@ function z(e, t, l, r, s, i) {
361
363
  size: "small",
362
364
  label: ""
363
365
  }, {
364
- default: n(() => [
366
+ default: a(() => [
365
367
  m(p(i.getStateText(o.name)), 1)
366
368
  ]),
367
369
  _: 2
368
370
  }, 1032, ["color"])) : b("", !0),
369
- a(C, {
371
+ n(C, {
370
372
  text: i.isEnabled(o.name) ? "Restart" : "Start",
371
373
  location: "top"
372
374
  }, {
373
- activator: n(({ props: f }) => [
374
- a(u, y({ ref_for: !0 }, f, {
375
+ activator: a(({ props: f }) => [
376
+ n(u, y({ ref_for: !0 }, f, {
375
377
  "aria-label": i.isEnabled(o.name) ? "Restart Microservice" : "Start Microservice",
376
378
  icon: i.isRestarting(o.name) || i.isStarting(o.name) ? "mdi-loading" : i.isEnabled(o.name) ? "mdi-refresh" : "mdi-play",
377
379
  class: {
@@ -379,64 +381,67 @@ function z(e, t, l, r, s, i) {
379
381
  },
380
382
  variant: "text",
381
383
  disabled: i.isOperationInProgress(o.name),
382
- onClick: (M) => i.restartMicroservice(o.name)
384
+ onClick: (T) => i.restartMicroservice(o.name)
383
385
  }), null, 16, ["aria-label", "icon", "class", "disabled", "onClick"])
384
386
  ]),
385
387
  _: 2
386
388
  }, 1032, ["text"]),
387
- a(C, {
389
+ n(C, {
388
390
  text: "Stop",
389
391
  location: "top"
390
392
  }, {
391
- activator: n(({ props: f }) => [
392
- a(u, y({ ref_for: !0 }, f, {
393
+ activator: a(({ props: f }) => [
394
+ n(u, y({ ref_for: !0 }, f, {
393
395
  "aria-label": "Stop Microservice",
394
396
  icon: i.isStopping(o.name) ? "mdi-loading" : "mdi-stop",
395
397
  class: { "rotating-icon": i.isStopping(o.name) },
396
398
  variant: "text",
397
399
  disabled: i.isOperationInProgress(o.name),
398
- onClick: (M) => i.stopMicroservice(o.name)
400
+ onClick: (T) => i.stopMicroservice(o.name)
399
401
  }), null, 16, ["icon", "class", "disabled", "onClick"])
400
402
  ]),
401
403
  _: 2
402
404
  }, 1024),
403
- a(C, {
405
+ n(C, {
404
406
  text: "Show Details",
405
407
  location: "top"
406
408
  }, {
407
- activator: n(({ props: f }) => [
408
- a(u, y({ ref_for: !0 }, f, {
409
+ activator: a(({ props: f }) => [
410
+ n(u, y({ ref_for: !0 }, f, {
409
411
  "aria-label": "Show Microservice Details",
410
412
  icon: "mdi-eye",
411
413
  variant: "text",
412
- onClick: (M) => i.showMicroservice(o.name)
414
+ onClick: (T) => i.showMicroservice(o.name)
413
415
  }), null, 16, ["onClick"])
414
416
  ]),
415
417
  _: 2
416
418
  }, 1024)
417
419
  ]),
418
- default: n(() => [
419
- a(x, null, {
420
- default: n(() => [
420
+ default: a(() => [
421
+ n(x, null, {
422
+ default: a(() => [
421
423
  m(p(o.name), 1)
422
424
  ]),
423
425
  _: 2
424
426
  }, 1024),
425
427
  s.microservice_status[o.name] ? (d(), g(k, { key: 0 }, {
426
- default: n(() => [
427
- m(" Updated: " + p(i.formatDate(s.microservice_status[o.name].updated_at)) + ", Enabled: " + p(i.isEnabled(o.name) ? "True" : "False") + ", Count: " + p(s.microservice_status[o.name].count), 1)
428
+ default: a(() => [
429
+ m(" Updated: " + p(e.formatNanoseconds(
430
+ s.microservice_status[o.name].updated_at,
431
+ s.timeZone
432
+ )) + ", Enabled: " + p(i.isEnabled(o.name) ? "True" : "False") + ", Count: " + p(s.microservice_status[o.name].count), 1)
428
433
  ]),
429
434
  _: 2
430
435
  }, 1024)) : b("", !0)
431
436
  ]),
432
437
  _: 2
433
438
  }, 1024),
434
- a(A)
439
+ n(A)
435
440
  ]))), 128))
436
441
  ]),
437
442
  _: 1
438
443
  }),
439
- s.showDialog ? (d(), g(F, {
444
+ s.showDialog ? (d(), g(D, {
440
445
  key: 1,
441
446
  modelValue: s.showDialog,
442
447
  "onUpdate:modelValue": t[1] || (t[1] = (o) => s.showDialog = o),
@@ -454,8 +459,8 @@ function z(e, t, l, r, s, i) {
454
459
  }, null, 8, ["modelValue", "text", "title"])) : b("", !0)
455
460
  ]);
456
461
  }
457
- const ee = /* @__PURE__ */ P(J, [["render", z], ["__scopeId", "data-v-172eefdb"]]);
462
+ const ee = /* @__PURE__ */ I(J, [["render", z], ["__scopeId", "data-v-6b152c7a"]]);
458
463
  export {
459
464
  ee as default
460
465
  };
461
- //# sourceMappingURL=MicroservicesTab-BSXNA_Si.js.map
466
+ //# sourceMappingURL=MicroservicesTab-B0SZVty3.js.map
@@ -0,0 +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;;;;"}
@@ -0,0 +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)?
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
@@ -0,0 +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,6 +1,6 @@
1
- import { y as _ } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-D0cYHPwr.js";
2
- import { resolveComponent as s, createBlock as N, openBlock 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-Cg3jCA_l.js";
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";
4
4
  const k = {
5
5
  inheritAttrs: !1,
6
6
  props: {
@@ -149,7 +149,7 @@ const k = {
149
149
  };
150
150
  function C(t, e, a, r, i, n) {
151
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 b(), N(S, {
152
+ return N(), b(S, {
153
153
  modelValue: i.inputValue,
154
154
  "onUpdate:modelValue": e[2] || (e[2] = (u) => i.inputValue = u),
155
155
  label: a.label,
@@ -230,4 +230,4 @@ const M = /* @__PURE__ */ I(k, [["render", C], ["__scopeId", "data-v-5606bec3"]]
230
230
  export {
231
231
  M as O
232
232
  };
233
- //# sourceMappingURL=OpenC3TimePicker-LN9R7V31.js.map
233
+ //# sourceMappingURL=OpenC3TimePicker-DpkbfbgC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenC3TimePicker-LN9R7V31.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 { OpenC3Api } from '@openc3/js-common/services'\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 timeFormat: 'ampm',\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 // Update input display when modelValue changes externally\n if (!this.menu) {\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 // Capture current display before async call\n const previousDisplay = this.inputValue\n await this.loadTimeFormat()\n // Only update display if it hasn't been changed externally during the await\n if (this.inputValue === previousDisplay) {\n this.inputValue = this.formatForDisplay(this.modelValue)\n }\n },\n methods: {\n async loadTimeFormat() {\n try {\n const api = new OpenC3Api()\n const response = await api.get_setting('time_format')\n if (response) {\n this.timeFormat = response\n }\n } catch (error) {\n // Default to 'ampm' if setting is not found\n this.timeFormat = 'ampm'\n }\n },\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","rule","newVal","previousDisplay","response","OpenC3Api","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":";;;AA8DA,MAAKA,IAAU;AAAA,EACb,cAAc;AAAA,EACd,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,MAAM,CAAA;AAAA;IAEjB,aAAa;AAAA,MACX,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA;IAEX,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA;IAEX,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;IAEX,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;;EAGb,OAAO,CAAC,mBAAmB;AAAA,EAC3B,OAAO;AACL,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,gBAAgB;AACd,aAAI,OAAO,KAAK,SAAU,WACjB,KAAK,QAEP,KAAK;AAAA,IACd;AAAA,IACA,gBAAgB;AAEd,aAAO,KAAK,MAAM,IAAI,CAACC,MACd,MACEA,EAAK,KAAK,UAAU,CAE9B;AAAA,IACH;AAAA;EAEF,OAAO;AAAA,IACL,YAAY;AAAA,MACV,WAAW;AAAA,MACX,QAAQC,GAAQ;AAEd,QAAK,KAAK,SACR,KAAK,aAAa,KAAK,iBAAiBA,CAAM;AAAA,MAElD;AAAA;IAEF,WAAWA,GAAQ;AAEjB,MAAIA,MAAW,MAAM,KAAK,eAAe,MACvC,KAAK,MAAM,qBAAqB,EAAE;AAAA,IAEtC;AAAA,IACA,KAAKA,GAAQ;AACX,MAAIA,MAGF,KAAK,WAAW,KAAK,cAAc,KAAK,UAAU,KAAK;AAAA,IAE3D;AAAA,IACA,SAASA,GAAQ;AAEf,MAAI,KAAK,QAAQA,MACf,KAAK,aAAa,KAAK,iBAAiBA,CAAM;AAAA,IAElD;AAAA;EAEF,MAAM,UAAU;AAEd,UAAMC,IAAkB,KAAK;AAC7B,UAAM,KAAK,eAAc,GAErB,KAAK,eAAeA,MACtB,KAAK,aAAa,KAAK,iBAAiB,KAAK,UAAU;AAAA,EAE3D;AAAA,EACA,SAAS;AAAA,IACP,MAAM,iBAAiB;AACrB,UAAI;AAEF,cAAMC,IAAW,MADL,IAAIC,EAAS,EACE,YAAY,aAAa;AACpD,QAAID,MACF,KAAK,aAAaA;AAAA,MAEtB,QAAgB;AAEd,aAAK,aAAa;AAAA,MACpB;AAAA,IACF;AAAA,IACA,iBAAiBE,GAAQ;AACvB,aAAKA,IACD,KAAK,eAAe,SACfA,IAEF,KAAK,gBAAgBA,CAAM,IAJd;AAAA,IAKtB;AAAA,IACA,aAAa;AAEX,YAAMC,IAAS,KAAK,eAAe,KAAK,UAAU;AAClD,MAAIA,KACF,KAAK,MAAM,qBAAqBA,CAAM,GACtC,KAAK,aAAa,KAAK,iBAAiBA,CAAM,KACrC,KAAK,eAAe,KAC7B,KAAK,MAAM,qBAAqB,EAAE,IAGlC,KAAK,aAAa,KAAK,iBAAiB,KAAK,UAAU;AAAA,IAE3D;AAAA,IACA,eAAeC,GAAO;AACpB,UAAI,CAACA,KAASA,EAAM,KAAI,MAAO,GAAI,QAAO;AAG1C,YAAMC,IAAcD,EAAM,MAAM,kCAAkC;AAClE,UAAIC,GAAa;AACf,cAAMC,IAAQ,OAAO,SAASD,EAAY,CAAC,GAAG,EAAE,GAC1CE,IAAU,OAAO,SAASF,EAAY,CAAC,GAAG,EAAE,GAC5CG,IAAUH,EAAY,CAAC,IAAI,OAAO,SAASA,EAAY,CAAC,GAAG,EAAE,IAAI;AACvE,YACEC,KAAS,KACTA,KAAS,MACTC,KAAW,KACXA,KAAW,MACXC,KAAW,KACXA,KAAW;AAEX,iBAAO,GAAGF,EAAM,WAAW,SAAS,GAAG,GAAG,CAAC,IAAIC,EAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC,IAAIC,EAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,MAE7H;AAGA,YAAMC,IAAcL,EAAM;AAAA,QACxB;AAAA,MACF;AACA,UAAIK,GAAa;AACf,YAAIH,IAAQ,OAAO,SAASG,EAAY,CAAC,GAAG,EAAE;AAC9C,cAAMF,IAAU,OAAO,SAASE,EAAY,CAAC,GAAG,EAAE,GAC5CD,IAAUC,EAAY,CAAC,IAAI,OAAO,SAASA,EAAY,CAAC,GAAG,EAAE,IAAI,GACjEC,IAASD,EAAY,CAAC,EAAE,YAAW;AAEzC,YACEH,KAAS,KACTA,KAAS,MACTC,KAAW,KACXA,KAAW,MACXC,KAAW,KACXA,KAAW;AAGX,iBAAIE,MAAW,OACTJ,MAAU,OAAIA,IAAQ,KAEtBA,MAAU,OAAIA,KAAS,KAEtB,GAAGA,EAAM,WAAW,SAAS,GAAG,GAAG,CAAC,IAAIC,EAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC,IAAIC,EAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,MAE7H;AAEA,aAAO;AAAA,IACT;AAAA,IACA,OAAO;AACL,WAAK,MAAM,qBAAqB,KAAK,QAAQ,GAC7C,KAAK,aAAa,KAAK,iBAAiB,KAAK,QAAQ,GACrD,KAAK,OAAO;AAAA,IACd;AAAA,IACA,SAAS;AACP,WAAK,WAAW,KAAK,cAAc,KAAK,UAAU,KAAK,YACvD,KAAK,OAAO;AAAA,IACd;AAAA;AAAA,IAEA,cAAcG,GAAM;AAClB,UAAI,CAACA,EAAM,QAAO;AAClB,YAAMC,IAAQD,EAAK,MAAM,GAAG;AAC5B,UAAIC,EAAM,SAAS,EAAG,QAAOD;AAC7B,YAAML,IAAQ,OAAO,SAASM,EAAM,CAAC,GAAG,EAAE,GACpCL,IAAU,OAAO,SAASK,EAAM,CAAC,GAAG,EAAE,GAEtCJ,IAAUI,EAAM,SAAS,IAAI,OAAO,SAASA,EAAM,CAAC,GAAG,EAAE,IAAI;AACnE,aACE,OAAO,MAAMN,CAAK,KAClB,OAAO,MAAMC,CAAO,KACpB,OAAO,MAAMC,CAAO,IAEb,KAEF,GAAGF,EAAM,WAAW,SAAS,GAAG,GAAG,CAAC,IAAIC,EAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC,IAAIC,EAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,IAC3H;AAAA,IACA,gBAAgBN,GAAQ;AACtB,UAAI,CAACA,EAAQ,QAAO;AACpB,YAAMU,IAAQV,EAAO,MAAM,GAAG;AAC9B,UAAIU,EAAM,SAAS,EAAG,QAAOV;AAC7B,UAAII,IAAQ,OAAO,SAASM,EAAM,CAAC,GAAG,EAAE;AACxC,YAAML,IAAU,OAAO,SAASK,EAAM,CAAC,GAAG,EAAE,GAEtCJ,IAAUI,EAAM,SAAS,IAAI,OAAO,SAASA,EAAM,CAAC,GAAG,EAAE,IAAI;AAEnE,UACE,OAAO,MAAMN,CAAK,KAClB,OAAO,MAAMC,CAAO,KACpB,OAAO,MAAMC,CAAO;AAEpB,eAAON;AAET,YAAMW,IAAOP,KAAS,KAAK,OAAO;AAClC,MAAAA,IAAQA,IAAQ,IAChBA,IAAQA,KAAgB;AACxB,YAAMQ,IAAcR,EAAM,SAAQ,EAAG,SAAS,GAAG,GAAG,GAC9CS,IAAgBR,EAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,GAClDS,IAAgBR,EAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG;AACxD,aAAO,GAAGM,CAAW,IAAIC,CAAa,IAAIC,CAAa,IAAIH,CAAI;AAAA,IACjE;AAAA;AAEJ;;;cApSEI,EA0CeC,GAAA;AAAA,gBAzCJC,EAAA;AAAA,kDAAAA,EAAA,aAAUC;AAAA,IAClB,OAAOC,EAAA;AAAA,IACP,OAAOC,EAAA;AAAA,IACP,gBAAcD,EAAA;AAAA,IACd,SAASA,EAAA;AAAA,IACT,SAASA,EAAA;AAAA,IACT,SAAOC,EAAA,aAAa;AAAA,IACpB,SAAOD,EAAA,cAAc;AAAA,IACrB,UAAUA,EAAA;AAAA,IACV,aAAWA,EAAA;AAAA,IACX,QAAMC,EAAA;AAAA,IACN,aAAeA,EAAA,YAAU,CAAA,OAAA,CAAA;AAAA;IAEf,mBACT,MAyBS;AAAA,MAzBTC,EAyBSC,GAAA;AAAA,oBAxBEL,EAAA;AAAA,sDAAAA,EAAA,OAAIC;AAAA,QACZ,0BAAwB;AAAA,QACzB,YAAW;AAAA,QACX,QAAO;AAAA;QAEI,WAASK,EAClB,CAES,EAAA,OAHoBC,EAAS,MAAA;AAAA,UACtCH,EAESI,GAFTC,EAAgBF,GAAS,EAAE,OAAM,iBAAgB,CAAA,GAAA;AAAA,uBAAC,MAElD,CAAA,GAAAG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,gBAFkD,uBAElD,EAAA;AAAA;;;;mBAEF,MAaS;AAAA,UAbTN,EAaSO,GAAA,EAbD,OAAM,mBAAkB,GAAA;AAAA,uBAC9B,MAME;AAAA,cANFP,EAMEQ,GAAA;AAAA,4BALSZ,EAAA;AAAA,8DAAAA,EAAA,WAAQC;AAAA,gBAChB,QAAQD,EAAA;AAAA,gBACT,YAAA;AAAA,gBACA,eAAA;AAAA,gBACA,eAAA;AAAA;cAEFI,EAIiBS,GAAA,MAAA;AAAA,2BAHf,MAAY;AAAA,kBAAZT,EAAYU,CAAA;AAAA,kBACZV,EAAoDW,GAAA;AAAA,oBAA7C,SAAQ;AAAA,oBAAQ,SAAOZ,EAAA;AAAA;+BAAQ,MAAM,CAAA,GAAAO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,wBAAN,UAAM,EAAA;AAAA;;;kBAC5CN,EAA8DW,GAAA;AAAA,oBAAvD,OAAM;AAAA,oBAAU,SAAQ;AAAA,oBAAQ,SAAOZ,EAAA;AAAA;+BAAM,MAAE,CAAA,GAAAO,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,wBAAF,MAAE,EAAA;AAAA;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"OpenC3TimePicker-DpkbfbgC.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 { OpenC3Api } from '@openc3/js-common/services'\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 timeFormat: 'ampm',\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 // Update input display when modelValue changes externally\n if (!this.menu) {\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 // Capture current display before async call\n const previousDisplay = this.inputValue\n await this.loadTimeFormat()\n // Only update display if it hasn't been changed externally during the await\n if (this.inputValue === previousDisplay) {\n this.inputValue = this.formatForDisplay(this.modelValue)\n }\n },\n methods: {\n async loadTimeFormat() {\n try {\n const api = new OpenC3Api()\n const response = await api.get_setting('time_format')\n if (response) {\n this.timeFormat = response\n }\n } catch (error) {\n // Default to 'ampm' if setting is not found\n this.timeFormat = 'ampm'\n }\n },\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","rule","newVal","previousDisplay","response","OpenC3Api","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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"}