@openc3/vue-common 7.1.1 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/dist/{ArrayWidget-CmKZQfWB.js → ArrayWidget-D1PArcGr.js} +5 -5
  2. package/dist/{ArrayWidget-CmKZQfWB.js.map → ArrayWidget-D1PArcGr.js.map} +1 -1
  3. package/dist/{ArrayWidget-D_zfyp9k.cjs → ArrayWidget-sQ40q9fv.cjs} +2 -2
  4. package/dist/{ArrayWidget-D_zfyp9k.cjs.map → ArrayWidget-sQ40q9fv.cjs.map} +1 -1
  5. package/dist/{ArrayplotWidget-CK5o4lO8.cjs → ArrayplotWidget-CEBmTpZH.cjs} +2 -2
  6. package/dist/{ArrayplotWidget-CK5o4lO8.cjs.map → ArrayplotWidget-CEBmTpZH.cjs.map} +1 -1
  7. package/dist/{ArrayplotWidget-D5McM1rY.js → ArrayplotWidget-DPUPy0qM.js} +5 -5
  8. package/dist/{ArrayplotWidget-D5McM1rY.js.map → ArrayplotWidget-DPUPy0qM.js.map} +1 -1
  9. package/dist/{BarColumn-BsS8Fdyl.cjs → BarColumn-BHCgIHhm.cjs} +2 -2
  10. package/dist/{BarColumn-BsS8Fdyl.cjs.map → BarColumn-BHCgIHhm.cjs.map} +1 -1
  11. package/dist/{BarColumn-BtP1cQcf.js → BarColumn-BpdscDQf.js} +3 -3
  12. package/dist/{BarColumn-BtP1cQcf.js.map → BarColumn-BpdscDQf.js.map} +1 -1
  13. package/dist/{BlockWidget-CtBgkMYu.cjs → BlockWidget-BzUgw2-i.cjs} +2 -2
  14. package/dist/{BlockWidget-CtBgkMYu.cjs.map → BlockWidget-BzUgw2-i.cjs.map} +1 -1
  15. package/dist/{BlockWidget-BKMse4hP.js → BlockWidget-_VUsK5T9.js} +5 -5
  16. package/dist/{BlockWidget-BKMse4hP.js.map → BlockWidget-_VUsK5T9.js.map} +1 -1
  17. package/dist/{ButtonWidget-hNa6zzSd.cjs → ButtonWidget-D8BhMKz_.cjs} +3 -3
  18. package/dist/{ButtonWidget-hNa6zzSd.cjs.map → ButtonWidget-D8BhMKz_.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-BLNVL46w.js → ButtonWidget-DE41o-cg.js} +7 -7
  20. package/dist/{ButtonWidget-BLNVL46w.js.map → ButtonWidget-DE41o-cg.js.map} +1 -1
  21. package/dist/{CanvasWidget-1jy1JskS.js → CanvasWidget-BEi8h3Mq.js} +2 -2
  22. package/dist/{CanvasWidget-1jy1JskS.js.map → CanvasWidget-BEi8h3Mq.js.map} +1 -1
  23. package/dist/{CanvasWidget-BldZDkOl.cjs → CanvasWidget-DplsGt-k.cjs} +2 -2
  24. package/dist/{CanvasWidget-BldZDkOl.cjs.map → CanvasWidget-DplsGt-k.cjs.map} +1 -1
  25. package/dist/{CanvasdotWidget-D1yQLRDN.cjs → CanvasdotWidget-CLzrz9dr.cjs} +2 -2
  26. package/dist/{CanvasdotWidget-D1yQLRDN.cjs.map → CanvasdotWidget-CLzrz9dr.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-DxuFGoWt.js → CanvasdotWidget-eZuMgkhL.js} +2 -2
  28. package/dist/{CanvasdotWidget-DxuFGoWt.js.map → CanvasdotWidget-eZuMgkhL.js.map} +1 -1
  29. package/dist/{CanvasimageWidget-D8DConb8.cjs → CanvasimageWidget-66HcpffG.cjs} +2 -2
  30. package/dist/{CanvasimageWidget-D8DConb8.cjs.map → CanvasimageWidget-66HcpffG.cjs.map} +1 -1
  31. package/dist/{CanvasimageWidget-B_JxCI_f.js → CanvasimageWidget-COv_Qnc8.js} +3 -3
  32. package/dist/{CanvasimageWidget-B_JxCI_f.js.map → CanvasimageWidget-COv_Qnc8.js.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-DwHIZzWo.js → CanvasimagevalueWidget-BhuUqLOo.js} +3 -3
  34. package/dist/{CanvasimagevalueWidget-DwHIZzWo.js.map → CanvasimagevalueWidget-BhuUqLOo.js.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-BL08pdLh.cjs → CanvasimagevalueWidget-DcoH1Rzz.cjs} +2 -2
  36. package/dist/{CanvasimagevalueWidget-BL08pdLh.cjs.map → CanvasimagevalueWidget-DcoH1Rzz.cjs.map} +1 -1
  37. package/dist/CanvaslabelWidget-DtvbgeYH.js +27 -0
  38. package/dist/CanvaslabelWidget-DtvbgeYH.js.map +1 -0
  39. package/dist/CanvaslabelWidget-wcraOzwr.cjs +2 -0
  40. package/dist/CanvaslabelWidget-wcraOzwr.cjs.map +1 -0
  41. package/dist/{CanvaslabelvalueWidget-D1-kZsi-.js → CanvaslabelvalueWidget-C_FRIeNb.js} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-D1-kZsi-.js.map → CanvaslabelvalueWidget-C_FRIeNb.js.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-BhL55tjO.cjs → CanvaslabelvalueWidget-CkkDoL8i.cjs} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-BhL55tjO.cjs.map → CanvaslabelvalueWidget-CkkDoL8i.cjs.map} +1 -1
  45. package/dist/{CanvaslineWidget-Din8LMyF.js → CanvaslineWidget-D1K_6mAY.js} +2 -2
  46. package/dist/{CanvaslineWidget-Din8LMyF.js.map → CanvaslineWidget-D1K_6mAY.js.map} +1 -1
  47. package/dist/{CanvaslineWidget-DtkdP3Bb.cjs → CanvaslineWidget-Da1Bf4Df.cjs} +2 -2
  48. package/dist/{CanvaslineWidget-DtkdP3Bb.cjs.map → CanvaslineWidget-Da1Bf4Df.cjs.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-ELgzjZeY.cjs → CanvaslinevalueWidget-ChY93jQz.cjs} +2 -2
  50. package/dist/{CanvaslinevalueWidget-ELgzjZeY.cjs.map → CanvaslinevalueWidget-ChY93jQz.cjs.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-DOrasE2j.js → CanvaslinevalueWidget-D4eaxWhR.js} +2 -2
  52. package/dist/{CanvaslinevalueWidget-DOrasE2j.js.map → CanvaslinevalueWidget-D4eaxWhR.js.map} +1 -1
  53. package/dist/{CheckbuttonWidget-A07FryqU.js → CheckbuttonWidget-ByxMDkiS.js} +2 -2
  54. package/dist/{CheckbuttonWidget-A07FryqU.js.map → CheckbuttonWidget-ByxMDkiS.js.map} +1 -1
  55. package/dist/{CheckbuttonWidget-BFjaAmt-.cjs → CheckbuttonWidget-C1iDNOXO.cjs} +2 -2
  56. package/dist/{CheckbuttonWidget-BFjaAmt-.cjs.map → CheckbuttonWidget-C1iDNOXO.cjs.map} +1 -1
  57. package/dist/{ClassificationBanners-ClraI2Ns.js → ClassificationBanners-By6aaadq.js} +2 -2
  58. package/dist/{ClassificationBanners-ClraI2Ns.js.map → ClassificationBanners-By6aaadq.js.map} +1 -1
  59. package/dist/{ClassificationBanners-DCL0KBCW.cjs → ClassificationBanners-D0wqqFTp.cjs} +2 -2
  60. package/dist/{ClassificationBanners-DCL0KBCW.cjs.map → ClassificationBanners-D0wqqFTp.cjs.map} +1 -1
  61. package/dist/{ComboboxWidget-CqZ79bCh.cjs → ComboboxWidget-B6kRwkHm.cjs} +2 -2
  62. package/dist/{ComboboxWidget-CqZ79bCh.cjs.map → ComboboxWidget-B6kRwkHm.cjs.map} +1 -1
  63. package/dist/{ComboboxWidget-xayce-aY.js → ComboboxWidget-CAGxGv2r.js} +2 -2
  64. package/dist/{ComboboxWidget-xayce-aY.js.map → ComboboxWidget-CAGxGv2r.js.map} +1 -1
  65. package/dist/{CriticalCmdDialog-ne9rOh2L.js → CriticalCmdDialog-BOA6-qrE.js} +4 -4
  66. package/dist/{CriticalCmdDialog-ne9rOh2L.js.map → CriticalCmdDialog-BOA6-qrE.js.map} +1 -1
  67. package/dist/{CriticalCmdDialog-DmhxVXdn.cjs → CriticalCmdDialog-DB9iMK3r.cjs} +2 -2
  68. package/dist/{CriticalCmdDialog-DmhxVXdn.cjs.map → CriticalCmdDialog-DB9iMK3r.cjs.map} +1 -1
  69. package/dist/{DateWidget-xU2zuIE3.cjs → DateWidget-C3iCuWog.cjs} +2 -2
  70. package/dist/{DateWidget-xU2zuIE3.cjs.map → DateWidget-C3iCuWog.cjs.map} +1 -1
  71. package/dist/{DateWidget-DrYZJta_.js → DateWidget-DkNWx28s.js} +4 -4
  72. package/dist/{DateWidget-DrYZJta_.js.map → DateWidget-DkNWx28s.js.map} +1 -1
  73. package/dist/{DetailsDialog-V6X078bY.cjs → DetailsDialog-C0q3d_JF.cjs} +2 -2
  74. package/dist/{DetailsDialog-V6X078bY.cjs.map → DetailsDialog-C0q3d_JF.cjs.map} +1 -1
  75. package/dist/{DetailsDialog-CFCaJZWz.js → DetailsDialog-F4KgYM6m.js} +10 -10
  76. package/dist/{DetailsDialog-CFCaJZWz.js.map → DetailsDialog-F4KgYM6m.js.map} +1 -1
  77. package/dist/EventListDialog-CDZFdKNU.cjs +2 -0
  78. package/dist/EventListDialog-CDZFdKNU.cjs.map +1 -0
  79. package/dist/{EventListDialog-CIc8RCyY.js → EventListDialog-g0Y3PS7i.js} +26 -23
  80. package/dist/EventListDialog-g0Y3PS7i.js.map +1 -0
  81. package/dist/{FilechecksumWidget-CTf0XGST.js → FilechecksumWidget-DSfNEnDJ.js} +6 -6
  82. package/dist/{FilechecksumWidget-CTf0XGST.js.map → FilechecksumWidget-DSfNEnDJ.js.map} +1 -1
  83. package/dist/{FilechecksumWidget-JeWqA6dh.cjs → FilechecksumWidget-DxpkQwol.cjs} +2 -2
  84. package/dist/{FilechecksumWidget-JeWqA6dh.cjs.map → FilechecksumWidget-DxpkQwol.cjs.map} +1 -1
  85. package/dist/{FiledisplayWidget-DLJuesmU.js → FiledisplayWidget-D2cxMmrP.js} +5 -5
  86. package/dist/{FiledisplayWidget-DLJuesmU.js.map → FiledisplayWidget-D2cxMmrP.js.map} +1 -1
  87. package/dist/{FiledisplayWidget-B6XFz4P6.cjs → FiledisplayWidget-DZ186686.cjs} +2 -2
  88. package/dist/{FiledisplayWidget-B6XFz4P6.cjs.map → FiledisplayWidget-DZ186686.cjs.map} +1 -1
  89. package/dist/{FormatvalueWidget-DODmUWPH.js → FormatvalueWidget-6-bj_PJO.js} +3 -3
  90. package/dist/{FormatvalueWidget-DODmUWPH.js.map → FormatvalueWidget-6-bj_PJO.js.map} +1 -1
  91. package/dist/{FormatvalueWidget-DHHKnH8A.cjs → FormatvalueWidget-DYvEvnXQ.cjs} +2 -2
  92. package/dist/{FormatvalueWidget-DHHKnH8A.cjs.map → FormatvalueWidget-DYvEvnXQ.cjs.map} +1 -1
  93. package/dist/{Graph-Cwghj5Pc.js → Graph-Cz0Ns1FD.js} +9 -9
  94. package/dist/{Graph-Cwghj5Pc.js.map → Graph-Cz0Ns1FD.js.map} +1 -1
  95. package/dist/{Graph-BtMRutcx.cjs → Graph-Dz9GecGm.cjs} +2 -2
  96. package/dist/{Graph-BtMRutcx.cjs.map → Graph-Dz9GecGm.cjs.map} +1 -1
  97. package/dist/{GraphWidget-Rc-fnHCt.js → GraphWidget-COXK3Dab.js} +5 -5
  98. package/dist/{GraphWidget-Rc-fnHCt.js.map → GraphWidget-COXK3Dab.js.map} +1 -1
  99. package/dist/{GraphWidget-CROq9BtI.cjs → GraphWidget-Duz0GLrA.cjs} +2 -2
  100. package/dist/{GraphWidget-CROq9BtI.cjs.map → GraphWidget-Duz0GLrA.cjs.map} +1 -1
  101. package/dist/{HorizontalWidget-CZqN6UYp.js → HorizontalWidget-C9UFBPsk.js} +2 -2
  102. package/dist/{HorizontalWidget-CZqN6UYp.js.map → HorizontalWidget-C9UFBPsk.js.map} +1 -1
  103. package/dist/{HorizontalWidget-TdOhYEM1.cjs → HorizontalWidget-DXqgBfii.cjs} +2 -2
  104. package/dist/{HorizontalWidget-TdOhYEM1.cjs.map → HorizontalWidget-DXqgBfii.cjs.map} +1 -1
  105. package/dist/{HorizontalboxWidget-JzKHl3o_.cjs → HorizontalboxWidget-B-7LJM-K.cjs} +2 -2
  106. package/dist/{HorizontalboxWidget-JzKHl3o_.cjs.map → HorizontalboxWidget-B-7LJM-K.cjs.map} +1 -1
  107. package/dist/{HorizontalboxWidget-BV7cyhwN.js → HorizontalboxWidget-CWLfmRtr.js} +5 -5
  108. package/dist/{HorizontalboxWidget-BV7cyhwN.js.map → HorizontalboxWidget-CWLfmRtr.js.map} +1 -1
  109. package/dist/{HorizontallineWidget-Bln3Q-pv.cjs → HorizontallineWidget-CQ_PbiXH.cjs} +2 -2
  110. package/dist/{HorizontallineWidget-Bln3Q-pv.cjs.map → HorizontallineWidget-CQ_PbiXH.cjs.map} +1 -1
  111. package/dist/{HorizontallineWidget-ChDLR_8D.js → HorizontallineWidget-DeFkOaYO.js} +2 -2
  112. package/dist/{HorizontallineWidget-ChDLR_8D.js.map → HorizontallineWidget-DeFkOaYO.js.map} +1 -1
  113. package/dist/{IframeWidget-DmCr3YW6.cjs → IframeWidget-BAIs-bzc.cjs} +2 -2
  114. package/dist/{IframeWidget-DmCr3YW6.cjs.map → IframeWidget-BAIs-bzc.cjs.map} +1 -1
  115. package/dist/{IframeWidget-BdOS5sm_.js → IframeWidget-Bn9eGzrq.js} +2 -2
  116. package/dist/{IframeWidget-BdOS5sm_.js.map → IframeWidget-Bn9eGzrq.js.map} +1 -1
  117. package/dist/{ImageLoader-D0-l7mY3.cjs → ImageLoader-C8ZJSOzF.cjs} +2 -2
  118. package/dist/{ImageLoader-D0-l7mY3.cjs.map → ImageLoader-C8ZJSOzF.cjs.map} +1 -1
  119. package/dist/{ImageLoader-CnlQ4xLd.js → ImageLoader-_gAudhVo.js} +2 -2
  120. package/dist/{ImageLoader-CnlQ4xLd.js.map → ImageLoader-_gAudhVo.js.map} +1 -1
  121. package/dist/{ImageviewerWidget-B-TRYlMs.cjs → ImageviewerWidget-BDxMpWzy.cjs} +2 -2
  122. package/dist/{ImageviewerWidget-B-TRYlMs.cjs.map → ImageviewerWidget-BDxMpWzy.cjs.map} +1 -1
  123. package/dist/{ImageviewerWidget-DoJBe5eZ.js → ImageviewerWidget-BUWhF32Z.js} +2 -2
  124. package/dist/{ImageviewerWidget-DoJBe5eZ.js.map → ImageviewerWidget-BUWhF32Z.js.map} +1 -1
  125. package/dist/{InterfacesTab-CITUnMac.js → InterfacesTab-CZsnR6xB.js} +4 -4
  126. package/dist/{InterfacesTab-CITUnMac.js.map → InterfacesTab-CZsnR6xB.js.map} +1 -1
  127. package/dist/{InterfacesTab-CIg-DS_I.cjs → InterfacesTab-oFTUZfti.cjs} +2 -2
  128. package/dist/{InterfacesTab-CIg-DS_I.cjs.map → InterfacesTab-oFTUZfti.cjs.map} +1 -1
  129. package/dist/{LabelWidget-DYwcB_S4.js → LabelWidget-BhzkN06D.js} +2 -2
  130. package/dist/{LabelWidget-DYwcB_S4.js.map → LabelWidget-BhzkN06D.js.map} +1 -1
  131. package/dist/{LabelWidget-B695rUxB.cjs → LabelWidget-agzCO9Rx.cjs} +2 -2
  132. package/dist/{LabelWidget-B695rUxB.cjs.map → LabelWidget-agzCO9Rx.cjs.map} +1 -1
  133. package/dist/{LabelledWidget-ubrlqe_n.cjs → LabelledWidget-CmlB3Yd-.cjs} +2 -2
  134. package/dist/{LabelledWidget-ubrlqe_n.cjs.map → LabelledWidget-CmlB3Yd-.cjs.map} +1 -1
  135. package/dist/{LabelledWidget-D4N2gPxJ.js → LabelledWidget-vx8NvW1b.js} +4 -4
  136. package/dist/{LabelledWidget-D4N2gPxJ.js.map → LabelledWidget-vx8NvW1b.js.map} +1 -1
  137. package/dist/{LabelprogressbarWidget-y__BgVQk.cjs → LabelprogressbarWidget-BB-420i0.cjs} +2 -2
  138. package/dist/{LabelprogressbarWidget-y__BgVQk.cjs.map → LabelprogressbarWidget-BB-420i0.cjs.map} +1 -1
  139. package/dist/{LabelprogressbarWidget-CRnteLAo.js → LabelprogressbarWidget-t5PvKuS4.js} +4 -4
  140. package/dist/{LabelprogressbarWidget-CRnteLAo.js.map → LabelprogressbarWidget-t5PvKuS4.js.map} +1 -1
  141. package/dist/{LabelsparklineWidget-B7h0ndrm.cjs → LabelsparklineWidget-CGg51THo.cjs} +2 -2
  142. package/dist/{LabelsparklineWidget-B7h0ndrm.cjs.map → LabelsparklineWidget-CGg51THo.cjs.map} +1 -1
  143. package/dist/{LabelsparklineWidget-Bbjjio1S.js → LabelsparklineWidget-CebbEH-j.js} +4 -4
  144. package/dist/{LabelsparklineWidget-Bbjjio1S.js.map → LabelsparklineWidget-CebbEH-j.js.map} +1 -1
  145. package/dist/{LabelvalueWidget-Bc6HtTMO.js → LabelvalueWidget-Cbs1DBK2.js} +4 -4
  146. package/dist/{LabelvalueWidget-Bc6HtTMO.js.map → LabelvalueWidget-Cbs1DBK2.js.map} +1 -1
  147. package/dist/{LabelvalueWidget-BE8r18n2.cjs → LabelvalueWidget-xIp1W4ZB.cjs} +2 -2
  148. package/dist/{LabelvalueWidget-BE8r18n2.cjs.map → LabelvalueWidget-xIp1W4ZB.cjs.map} +1 -1
  149. package/dist/{LabelvaluedescWidget-D5aDNr1o.js → LabelvaluedescWidget-B7OIOGc0.js} +5 -5
  150. package/dist/{LabelvaluedescWidget-D5aDNr1o.js.map → LabelvaluedescWidget-B7OIOGc0.js.map} +1 -1
  151. package/dist/{LabelvaluedescWidget-CEZeqLAB.cjs → LabelvaluedescWidget-DE5cZcfN.cjs} +2 -2
  152. package/dist/{LabelvaluedescWidget-CEZeqLAB.cjs.map → LabelvaluedescWidget-DE5cZcfN.cjs.map} +1 -1
  153. package/dist/{LabelvaluelimitsbarWidget-CMnJoNKz.js → LabelvaluelimitsbarWidget-C57kf-oQ.js} +4 -4
  154. package/dist/{LabelvaluelimitsbarWidget-CMnJoNKz.js.map → LabelvaluelimitsbarWidget-C57kf-oQ.js.map} +1 -1
  155. package/dist/{LabelvaluelimitsbarWidget-BhLZsBy5.cjs → LabelvaluelimitsbarWidget-RlJt1ReS.cjs} +2 -2
  156. package/dist/{LabelvaluelimitsbarWidget-BhLZsBy5.cjs.map → LabelvaluelimitsbarWidget-RlJt1ReS.cjs.map} +1 -1
  157. package/dist/{LabelvaluelimitscolumnWidget-7MEUPhe4.cjs → LabelvaluelimitscolumnWidget-B-TbUVpY.cjs} +2 -2
  158. package/dist/{LabelvaluelimitscolumnWidget-7MEUPhe4.cjs.map → LabelvaluelimitscolumnWidget-B-TbUVpY.cjs.map} +1 -1
  159. package/dist/{LabelvaluelimitscolumnWidget-R5ofG4q1.js → LabelvaluelimitscolumnWidget-BRlNDEqp.js} +5 -5
  160. package/dist/{LabelvaluelimitscolumnWidget-R5ofG4q1.js.map → LabelvaluelimitscolumnWidget-BRlNDEqp.js.map} +1 -1
  161. package/dist/{LabelvaluerangebarWidget-49fO9s25.cjs → LabelvaluerangebarWidget-BK08A6_N.cjs} +2 -2
  162. package/dist/{LabelvaluerangebarWidget-49fO9s25.cjs.map → LabelvaluerangebarWidget-BK08A6_N.cjs.map} +1 -1
  163. package/dist/{LabelvaluerangebarWidget-Qa3R2_4p.js → LabelvaluerangebarWidget-Pt_evm3v.js} +4 -4
  164. package/dist/{LabelvaluerangebarWidget-Qa3R2_4p.js.map → LabelvaluerangebarWidget-Pt_evm3v.js.map} +1 -1
  165. package/dist/{Layout-BBLYT0gE.js → Layout-CKmC50QZ.js} +2 -2
  166. package/dist/{Layout-BBLYT0gE.js.map → Layout-CKmC50QZ.js.map} +1 -1
  167. package/dist/{Layout-CilReWuB.cjs → Layout-CkSElGRo.cjs} +2 -2
  168. package/dist/{Layout-CilReWuB.cjs.map → Layout-CkSElGRo.cjs.map} +1 -1
  169. package/dist/{LedWidget-CL2dOxb7.js → LedWidget-D1lmNXpi.js} +5 -5
  170. package/dist/{LedWidget-CL2dOxb7.js.map → LedWidget-D1lmNXpi.js.map} +1 -1
  171. package/dist/{LedWidget-CioTReXJ.cjs → LedWidget-DaFZrKbt.cjs} +2 -2
  172. package/dist/{LedWidget-CioTReXJ.cjs.map → LedWidget-DaFZrKbt.cjs.map} +1 -1
  173. package/dist/{LimitsBar-Akh9OBX8.cjs → LimitsBar-Bkv0A0XE.cjs} +2 -2
  174. package/dist/{LimitsBar-Akh9OBX8.cjs.map → LimitsBar-Bkv0A0XE.cjs.map} +1 -1
  175. package/dist/{LimitsBar-59_qNqi8.js → LimitsBar-D5IZu7eX.js} +2 -2
  176. package/dist/{LimitsBar-59_qNqi8.js.map → LimitsBar-D5IZu7eX.js.map} +1 -1
  177. package/dist/{LimitsbarWidget-Bs2svA1K.cjs → LimitsbarWidget-B_cIeVXW.cjs} +2 -2
  178. package/dist/{LimitsbarWidget-Bs2svA1K.cjs.map → LimitsbarWidget-B_cIeVXW.cjs.map} +1 -1
  179. package/dist/{LimitsbarWidget-C0N2611W.js → LimitsbarWidget-VpxQXE-e.js} +3 -3
  180. package/dist/{LimitsbarWidget-C0N2611W.js.map → LimitsbarWidget-VpxQXE-e.js.map} +1 -1
  181. package/dist/{LimitscolorWidget-GfNCPo3i.js → LimitscolorWidget-79P41CX7.js} +5 -5
  182. package/dist/{LimitscolorWidget-GfNCPo3i.js.map → LimitscolorWidget-79P41CX7.js.map} +1 -1
  183. package/dist/{LimitscolorWidget-G_3Sc7Y3.cjs → LimitscolorWidget-z2tnAyFH.cjs} +2 -2
  184. package/dist/{LimitscolorWidget-G_3Sc7Y3.cjs.map → LimitscolorWidget-z2tnAyFH.cjs.map} +1 -1
  185. package/dist/{LimitscolumnWidget-ut6NX68S.js → LimitscolumnWidget-BFDXhJeZ.js} +2 -2
  186. package/dist/{LimitscolumnWidget-ut6NX68S.js.map → LimitscolumnWidget-BFDXhJeZ.js.map} +1 -1
  187. package/dist/{LimitscolumnWidget-B3OcZYau.cjs → LimitscolumnWidget-ClnN8sMJ.cjs} +2 -2
  188. package/dist/{LimitscolumnWidget-B3OcZYau.cjs.map → LimitscolumnWidget-ClnN8sMJ.cjs.map} +1 -1
  189. package/dist/{LinegraphWidget-BDda9hjY.cjs → LinegraphWidget-C-yffvsK.cjs} +2 -2
  190. package/dist/{LinegraphWidget-BDda9hjY.cjs.map → LinegraphWidget-C-yffvsK.cjs.map} +1 -1
  191. package/dist/{LinegraphWidget-DaCyvdnI.js → LinegraphWidget-VqkpOlws.js} +5 -5
  192. package/dist/{LinegraphWidget-DaCyvdnI.js.map → LinegraphWidget-VqkpOlws.js.map} +1 -1
  193. package/dist/{MatrixbycolumnsWidget-Cni63alW.js → MatrixbycolumnsWidget--ihvirDP.js} +3 -3
  194. package/dist/{MatrixbycolumnsWidget-Cni63alW.js.map → MatrixbycolumnsWidget--ihvirDP.js.map} +1 -1
  195. package/dist/{MatrixbycolumnsWidget-DibzZkF7.cjs → MatrixbycolumnsWidget-DGqVDsdg.cjs} +2 -2
  196. package/dist/{MatrixbycolumnsWidget-DibzZkF7.cjs.map → MatrixbycolumnsWidget-DGqVDsdg.cjs.map} +1 -1
  197. package/dist/{MicroservicesTab-CV_35ag8.cjs → MicroservicesTab-BEGNdUG3.cjs} +3 -3
  198. package/dist/{MicroservicesTab-CV_35ag8.cjs.map → MicroservicesTab-BEGNdUG3.cjs.map} +1 -1
  199. package/dist/{MicroservicesTab-gCXt9Jlh.js → MicroservicesTab-CQPpb7j1.js} +15 -15
  200. package/dist/{MicroservicesTab-gCXt9Jlh.js.map → MicroservicesTab-CQPpb7j1.js.map} +1 -1
  201. package/dist/{OpenC3TimePicker-WVlNQdKk.js → OpenC3TimePicker-B0lAIU91.js} +3 -3
  202. package/dist/{OpenC3TimePicker-WVlNQdKk.js.map → OpenC3TimePicker-B0lAIU91.js.map} +1 -1
  203. package/dist/{OpenC3TimePicker-BAzvaP-g.cjs → OpenC3TimePicker-DXhyDkOv.cjs} +2 -2
  204. package/dist/{OpenC3TimePicker-BAzvaP-g.cjs.map → OpenC3TimePicker-DXhyDkOv.cjs.map} +1 -1
  205. package/dist/{Openc3Screen-GLWnn7RG.cjs → Openc3Screen-051vwmN8.cjs} +5 -5
  206. package/dist/{Openc3Screen-GLWnn7RG.cjs.map → Openc3Screen-051vwmN8.cjs.map} +1 -1
  207. package/dist/{Openc3Screen-C4DL3LBY.js → Openc3Screen-Bew5BPgc.js} +8 -8
  208. package/dist/{Openc3Screen-C4DL3LBY.js.map → Openc3Screen-Bew5BPgc.js.map} +1 -1
  209. package/dist/{OutputDialog-DN4Qy6LH.cjs → OutputDialog-CgnRA-f-.cjs} +2 -2
  210. package/dist/{OutputDialog-DN4Qy6LH.cjs.map → OutputDialog-CgnRA-f-.cjs.map} +1 -1
  211. package/dist/{OutputDialog-wOewjnk2.js → OutputDialog-DtrpwjGL.js} +3 -3
  212. package/dist/{OutputDialog-wOewjnk2.js.map → OutputDialog-DtrpwjGL.js.map} +1 -1
  213. package/dist/{PackagesTab-D6UNkpw9.cjs → PackagesTab-BBFiRQN-.cjs} +2 -2
  214. package/dist/{PackagesTab-D6UNkpw9.cjs.map → PackagesTab-BBFiRQN-.cjs.map} +1 -1
  215. package/dist/{PackagesTab-DmsuQSmU.js → PackagesTab-DQ5s3nfh.js} +21 -21
  216. package/dist/{PackagesTab-DmsuQSmU.js.map → PackagesTab-DQ5s3nfh.js.map} +1 -1
  217. package/dist/{PluginsTab-CLQ0EbDl.js → PluginsTab-1tlTx4k1.js} +7 -7
  218. package/dist/{PluginsTab-CLQ0EbDl.js.map → PluginsTab-1tlTx4k1.js.map} +1 -1
  219. package/dist/{PluginsTab-D_cFEd7L.cjs → PluginsTab-DN_iK1D9.cjs} +4 -4
  220. package/dist/{PluginsTab-D_cFEd7L.cjs.map → PluginsTab-DN_iK1D9.cjs.map} +1 -1
  221. package/dist/{ProgressbarWidget-CYyOjBLI.cjs → ProgressbarWidget-B-ScYWwv.cjs} +2 -2
  222. package/dist/{ProgressbarWidget-CYyOjBLI.cjs.map → ProgressbarWidget-B-ScYWwv.cjs.map} +1 -1
  223. package/dist/{ProgressbarWidget-BWqCsk87.js → ProgressbarWidget-BIB3r9SL.js} +2 -2
  224. package/dist/{ProgressbarWidget-BWqCsk87.js.map → ProgressbarWidget-BIB3r9SL.js.map} +1 -1
  225. package/dist/{RadiobuttonWidget-Dza2r34f.js → RadiobuttonWidget-C5rxLM7K.js} +2 -2
  226. package/dist/{RadiobuttonWidget-Dza2r34f.js.map → RadiobuttonWidget-C5rxLM7K.js.map} +1 -1
  227. package/dist/{RadiobuttonWidget-zyCcviRt.cjs → RadiobuttonWidget-EBzI13by.cjs} +2 -2
  228. package/dist/{RadiobuttonWidget-zyCcviRt.cjs.map → RadiobuttonWidget-EBzI13by.cjs.map} +1 -1
  229. package/dist/{RadiogroupWidget-BK-b4dDV.cjs → RadiogroupWidget-BnT62bxt.cjs} +2 -2
  230. package/dist/{RadiogroupWidget-BK-b4dDV.cjs.map → RadiogroupWidget-BnT62bxt.cjs.map} +1 -1
  231. package/dist/{RadiogroupWidget-DWmZMNmr.js → RadiogroupWidget-CciTCv1U.js} +2 -2
  232. package/dist/{RadiogroupWidget-DWmZMNmr.js.map → RadiogroupWidget-CciTCv1U.js.map} +1 -1
  233. package/dist/{RangebarWidget-BKTLrzKd.cjs → RangebarWidget-Can_BQBL.cjs} +2 -2
  234. package/dist/{RangebarWidget-BKTLrzKd.cjs.map → RangebarWidget-Can_BQBL.cjs.map} +1 -1
  235. package/dist/{RangebarWidget-DsGCC1x7.js → RangebarWidget-MPQYi2Km.js} +2 -2
  236. package/dist/{RangebarWidget-DsGCC1x7.js.map → RangebarWidget-MPQYi2Km.js.map} +1 -1
  237. package/dist/{RedisTab-2wFbDYIY.cjs → RedisTab-Bkj57lOf.cjs} +2 -2
  238. package/dist/{RedisTab-2wFbDYIY.cjs.map → RedisTab-Bkj57lOf.cjs.map} +1 -1
  239. package/dist/{RedisTab-9hUKvLT7.js → RedisTab-DAeGow_e.js} +2 -2
  240. package/dist/{RedisTab-9hUKvLT7.js.map → RedisTab-DAeGow_e.js.map} +1 -1
  241. package/dist/{RollupWidget-DGElKXm3.js → RollupWidget-CfjGAhzg.js} +2 -2
  242. package/dist/{RollupWidget-DGElKXm3.js.map → RollupWidget-CfjGAhzg.js.map} +1 -1
  243. package/dist/{RollupWidget-B7x7pcGm.cjs → RollupWidget-IDDWGLom.cjs} +2 -2
  244. package/dist/{RollupWidget-B7x7pcGm.cjs.map → RollupWidget-IDDWGLom.cjs.map} +1 -1
  245. package/dist/{RoutersTab-PRDpocd3.cjs → RoutersTab-BtfVCL1C.cjs} +2 -2
  246. package/dist/{RoutersTab-PRDpocd3.cjs.map → RoutersTab-BtfVCL1C.cjs.map} +1 -1
  247. package/dist/{RoutersTab-Dpq_F5it.js → RoutersTab-G4WKtUOo.js} +4 -4
  248. package/dist/{RoutersTab-Dpq_F5it.js.map → RoutersTab-G4WKtUOo.js.map} +1 -1
  249. package/dist/{ScriptChooser-BIPvMV1Z.cjs → ScriptChooser-B6qtMbkx.cjs} +2 -2
  250. package/dist/{ScriptChooser-BIPvMV1Z.cjs.map → ScriptChooser-B6qtMbkx.cjs.map} +1 -1
  251. package/dist/{ScriptChooser-DSb-nUOY.js → ScriptChooser-BwYB6FOa.js} +16 -16
  252. package/dist/{ScriptChooser-DSb-nUOY.js.map → ScriptChooser-BwYB6FOa.js.map} +1 -1
  253. package/dist/{ScrollwindowWidget-CxCp6zl7.cjs → ScrollwindowWidget-BPTaWCGg.cjs} +2 -2
  254. package/dist/{ScrollwindowWidget-CxCp6zl7.cjs.map → ScrollwindowWidget-BPTaWCGg.cjs.map} +1 -1
  255. package/dist/{ScrollwindowWidget-BvKT59rV.js → ScrollwindowWidget-CupaygNN.js} +2 -2
  256. package/dist/{ScrollwindowWidget-BvKT59rV.js.map → ScrollwindowWidget-CupaygNN.js.map} +1 -1
  257. package/dist/{SecretsTab-DAZeb63H.js → SecretsTab-C9xAxuwO.js} +4 -4
  258. package/dist/{SecretsTab-DAZeb63H.js.map → SecretsTab-C9xAxuwO.js.map} +1 -1
  259. package/dist/{SecretsTab-CY-73DBl.cjs → SecretsTab-CRC8DUz8.cjs} +2 -2
  260. package/dist/{SecretsTab-CY-73DBl.cjs.map → SecretsTab-CRC8DUz8.cjs.map} +1 -1
  261. package/dist/{SettingsTab-CHcHYnay.js → SettingsTab-BUdeAh4o.js} +5 -5
  262. package/dist/{SettingsTab-CHcHYnay.js.map → SettingsTab-BUdeAh4o.js.map} +1 -1
  263. package/dist/{SettingsTab-BBi3rofi.cjs → SettingsTab-CXoTKykc.cjs} +2 -2
  264. package/dist/{SettingsTab-BBi3rofi.cjs.map → SettingsTab-CXoTKykc.cjs.map} +1 -1
  265. package/dist/{SignalWidget-NxN9VFAv.cjs → SignalWidget-BbXnGcy9.cjs} +2 -2
  266. package/dist/{SignalWidget-NxN9VFAv.cjs.map → SignalWidget-BbXnGcy9.cjs.map} +1 -1
  267. package/dist/{SignalWidget-DRAFunW0.js → SignalWidget-C-qecoTO.js} +2 -2
  268. package/dist/{SignalWidget-DRAFunW0.js.map → SignalWidget-C-qecoTO.js.map} +1 -1
  269. package/dist/{SimpleTextDialog-B9KuFMP5.cjs → SimpleTextDialog-5wMXYOXj.cjs} +2 -2
  270. package/dist/{SimpleTextDialog-B9KuFMP5.cjs.map → SimpleTextDialog-5wMXYOXj.cjs.map} +1 -1
  271. package/dist/{SimpleTextDialog-B7XASoZh.js → SimpleTextDialog-C-0ZC2bs.js} +2 -2
  272. package/dist/{SimpleTextDialog-B7XASoZh.js.map → SimpleTextDialog-C-0ZC2bs.js.map} +1 -1
  273. package/dist/{SpacerWidget-DnRV7NSQ.cjs → SpacerWidget-BSJsjARt.cjs} +2 -2
  274. package/dist/{SpacerWidget-DnRV7NSQ.cjs.map → SpacerWidget-BSJsjARt.cjs.map} +1 -1
  275. package/dist/{SpacerWidget-CUGpXBpA.js → SpacerWidget-VVkOCb6N.js} +2 -2
  276. package/dist/{SpacerWidget-CUGpXBpA.js.map → SpacerWidget-VVkOCb6N.js.map} +1 -1
  277. package/dist/{SparklineWidget-XWxWkTZw.cjs → SparklineWidget-COGPJfbo.cjs} +2 -2
  278. package/dist/{SparklineWidget-XWxWkTZw.cjs.map → SparklineWidget-COGPJfbo.cjs.map} +1 -1
  279. package/dist/{SparklineWidget-SBWjRrqq.js → SparklineWidget-Dsmn38z_.js} +5 -5
  280. package/dist/{SparklineWidget-SBWjRrqq.js.map → SparklineWidget-Dsmn38z_.js.map} +1 -1
  281. package/dist/{TabbookWidget-yfZK_n_2.cjs → TabbookWidget-B2geV2Qi.cjs} +2 -2
  282. package/dist/{TabbookWidget-yfZK_n_2.cjs.map → TabbookWidget-B2geV2Qi.cjs.map} +1 -1
  283. package/dist/{TabbookWidget-7l6fPoRA.js → TabbookWidget-CXklff-l.js} +2 -2
  284. package/dist/{TabbookWidget-7l6fPoRA.js.map → TabbookWidget-CXklff-l.js.map} +1 -1
  285. package/dist/{TargetPacketItemChooser-QPHy-p2u.js → TargetPacketItemChooser-DDHuygCl.js} +3 -3
  286. package/dist/{TargetPacketItemChooser-QPHy-p2u.js.map → TargetPacketItemChooser-DDHuygCl.js.map} +1 -1
  287. package/dist/{TargetPacketItemChooser-CvDABqt7.cjs → TargetPacketItemChooser-DgO3VgdY.cjs} +2 -2
  288. package/dist/{TargetPacketItemChooser-CvDABqt7.cjs.map → TargetPacketItemChooser-DgO3VgdY.cjs.map} +1 -1
  289. package/dist/{TargetsTab-DcHwCcSU.js → TargetsTab-Ci4cOsIa.js} +13 -13
  290. package/dist/{TargetsTab-DcHwCcSU.js.map → TargetsTab-Ci4cOsIa.js.map} +1 -1
  291. package/dist/{TargetsTab-GpduFeiA.cjs → TargetsTab-DSSFGLD_.cjs} +2 -2
  292. package/dist/{TargetsTab-GpduFeiA.cjs.map → TargetsTab-DSSFGLD_.cjs.map} +1 -1
  293. package/dist/{TextboxWidget-CcvPtdyE.cjs → TextboxWidget-B9vBiTFU.cjs} +2 -2
  294. package/dist/{TextboxWidget-CcvPtdyE.cjs.map → TextboxWidget-B9vBiTFU.cjs.map} +1 -1
  295. package/dist/{TextboxWidget-Qb0TNt4Y.js → TextboxWidget-CHs2VYIv.js} +5 -5
  296. package/dist/{TextboxWidget-Qb0TNt4Y.js.map → TextboxWidget-CHs2VYIv.js.map} +1 -1
  297. package/dist/{TextfieldWidget-D5v1Endh.cjs → TextfieldWidget-CHf6ER_G.cjs} +2 -2
  298. package/dist/{TextfieldWidget-D5v1Endh.cjs.map → TextfieldWidget-CHf6ER_G.cjs.map} +1 -1
  299. package/dist/{TextfieldWidget-DcSGRfnF.js → TextfieldWidget-CdANAW-6.js} +2 -2
  300. package/dist/{TextfieldWidget-DcSGRfnF.js.map → TextfieldWidget-CdANAW-6.js.map} +1 -1
  301. package/dist/{TimeWidget-j18gWgF-.cjs → TimeWidget-C8Za7zUx.cjs} +2 -2
  302. package/dist/{TimeWidget-j18gWgF-.cjs.map → TimeWidget-C8Za7zUx.cjs.map} +1 -1
  303. package/dist/{TimeWidget-aoMkDgRR.js → TimeWidget-D0xT1wXR.js} +5 -5
  304. package/dist/{TimeWidget-aoMkDgRR.js.map → TimeWidget-D0xT1wXR.js.map} +1 -1
  305. package/dist/{TitleWidget-C8b9Vp5r.js → TitleWidget-68NWCcXB.js} +2 -2
  306. package/dist/{TitleWidget-C8b9Vp5r.js.map → TitleWidget-68NWCcXB.js.map} +1 -1
  307. package/dist/{TitleWidget-CNZqa48C.cjs → TitleWidget-D0PYh7V7.cjs} +2 -2
  308. package/dist/{TitleWidget-CNZqa48C.cjs.map → TitleWidget-D0PYh7V7.cjs.map} +1 -1
  309. package/dist/{ToolsTab-MCjy5Bf6.js → ToolsTab-BCvmMDIZ.js} +4 -4
  310. package/dist/{ToolsTab-MCjy5Bf6.js.map → ToolsTab-BCvmMDIZ.js.map} +1 -1
  311. package/dist/{ToolsTab-C7ldaGOD.cjs → ToolsTab-UwVIeP-J.cjs} +2 -2
  312. package/dist/{ToolsTab-C7ldaGOD.cjs.map → ToolsTab-UwVIeP-J.cjs.map} +1 -1
  313. package/dist/{TopBar-Dv9AvR6L.cjs → TopBar-BhrJBXut.cjs} +2 -2
  314. package/dist/{TopBar-Dv9AvR6L.cjs.map → TopBar-BhrJBXut.cjs.map} +1 -1
  315. package/dist/{TopBar-S3ydRxjf.js → TopBar-Cg0kJvmG.js} +2 -2
  316. package/dist/{TopBar-S3ydRxjf.js.map → TopBar-Cg0kJvmG.js.map} +1 -1
  317. package/dist/{TsdbTab-4OaejSum.js → TsdbTab-BytqwnkN.js} +2 -2
  318. package/dist/{TsdbTab-4OaejSum.js.map → TsdbTab-BytqwnkN.js.map} +1 -1
  319. package/dist/{TsdbTab-d1l9Ak2R.cjs → TsdbTab-DatsFS_R.cjs} +2 -2
  320. package/dist/{TsdbTab-d1l9Ak2R.cjs.map → TsdbTab-DatsFS_R.cjs.map} +1 -1
  321. package/dist/{UpgradeToEnterpriseDialog-CkHl-BAB.js → UpgradeToEnterpriseDialog-B0lZup6_.js} +2 -2
  322. package/dist/{UpgradeToEnterpriseDialog-CkHl-BAB.js.map → UpgradeToEnterpriseDialog-B0lZup6_.js.map} +1 -1
  323. package/dist/{UpgradeToEnterpriseDialog-Cd1ulQkq.cjs → UpgradeToEnterpriseDialog-BFhTiNXm.cjs} +2 -2
  324. package/dist/{UpgradeToEnterpriseDialog-Cd1ulQkq.cjs.map → UpgradeToEnterpriseDialog-BFhTiNXm.cjs.map} +1 -1
  325. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-hv0QWZ6Z.cjs → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DOidODWT.cjs} +76 -76
  326. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-hv0QWZ6Z.cjs.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DOidODWT.cjs.map} +1 -1
  327. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-C6eLx1ow.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-JHbHqvBt.js} +1862 -1862
  328. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-C6eLx1ow.js.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-JHbHqvBt.js.map} +1 -1
  329. package/dist/{VWidget-CMHOOByt.cjs → VWidget-BZqlpdEk.cjs} +2 -2
  330. package/dist/{VWidget-CMHOOByt.cjs.map → VWidget-BZqlpdEk.cjs.map} +1 -1
  331. package/dist/{VWidget-BgNciXK1.js → VWidget-oMbywhLA.js} +5 -5
  332. package/dist/{VWidget-BgNciXK1.js.map → VWidget-oMbywhLA.js.map} +1 -1
  333. package/dist/{ValueWidget-B1OvCmXK.js → ValueWidget-B1aGUBP7.js} +5 -5
  334. package/dist/{ValueWidget-B1OvCmXK.js.map → ValueWidget-B1aGUBP7.js.map} +1 -1
  335. package/dist/{ValueWidget-C3T9tAUT.cjs → ValueWidget-CuMPXR-z.cjs} +2 -2
  336. package/dist/{ValueWidget-C3T9tAUT.cjs.map → ValueWidget-CuMPXR-z.cjs.map} +1 -1
  337. package/dist/{ValuelimitsbarWidget-CUd9P_Xg.js → ValuelimitsbarWidget-B7KcRjLS.js} +4 -4
  338. package/dist/{ValuelimitsbarWidget-CUd9P_Xg.js.map → ValuelimitsbarWidget-B7KcRjLS.js.map} +1 -1
  339. package/dist/{ValuelimitsbarWidget-DzJYkWOa.cjs → ValuelimitsbarWidget-elJnDGWA.cjs} +2 -2
  340. package/dist/{ValuelimitsbarWidget-DzJYkWOa.cjs.map → ValuelimitsbarWidget-elJnDGWA.cjs.map} +1 -1
  341. package/dist/{ValuelimitscolumnWidget-CbThSMma.js → ValuelimitscolumnWidget-BVt6nLXq.js} +4 -4
  342. package/dist/{ValuelimitscolumnWidget-CbThSMma.js.map → ValuelimitscolumnWidget-BVt6nLXq.js.map} +1 -1
  343. package/dist/{ValuelimitscolumnWidget-Dx_im9Qk.cjs → ValuelimitscolumnWidget-DyQjC-h-.cjs} +2 -2
  344. package/dist/{ValuelimitscolumnWidget-Dx_im9Qk.cjs.map → ValuelimitscolumnWidget-DyQjC-h-.cjs.map} +1 -1
  345. package/dist/{ValuerangebarWidget-C8n2hb3N.cjs → ValuerangebarWidget-E1xvTwhi.cjs} +2 -2
  346. package/dist/{ValuerangebarWidget-C8n2hb3N.cjs.map → ValuerangebarWidget-E1xvTwhi.cjs.map} +1 -1
  347. package/dist/{ValuerangebarWidget-DjL4ze3d.js → ValuerangebarWidget-uVZEI32U.js} +4 -4
  348. package/dist/{ValuerangebarWidget-DjL4ze3d.js.map → ValuerangebarWidget-uVZEI32U.js.map} +1 -1
  349. package/dist/{VerticalWidget-C81rZFvu.cjs → VerticalWidget-BxL_5yEC.cjs} +2 -2
  350. package/dist/{VerticalWidget-C81rZFvu.cjs.map → VerticalWidget-BxL_5yEC.cjs.map} +1 -1
  351. package/dist/{VerticalWidget-V5-vGq7l.js → VerticalWidget-DlftYBjH.js} +2 -2
  352. package/dist/{VerticalWidget-V5-vGq7l.js.map → VerticalWidget-DlftYBjH.js.map} +1 -1
  353. package/dist/{VerticalboxWidget-DQerkhfd.cjs → VerticalboxWidget-BHP0SPpV.cjs} +2 -2
  354. package/dist/{VerticalboxWidget-DQerkhfd.cjs.map → VerticalboxWidget-BHP0SPpV.cjs.map} +1 -1
  355. package/dist/{VerticalboxWidget-OigMLjH8.js → VerticalboxWidget-C7RrkfY0.js} +5 -5
  356. package/dist/{VerticalboxWidget-OigMLjH8.js.map → VerticalboxWidget-C7RrkfY0.js.map} +1 -1
  357. package/dist/{Widget-BiaunQ83.js → Widget-D_HaosJK.js} +3 -3
  358. package/dist/{Widget-BiaunQ83.js.map → Widget-D_HaosJK.js.map} +1 -1
  359. package/dist/{Widget-D23R5IBP.cjs → Widget-a5Y50rAX.cjs} +2 -2
  360. package/dist/{Widget-D23R5IBP.cjs.map → Widget-a5Y50rAX.cjs.map} +1 -1
  361. package/dist/{addMonths-DI1YMeKj.js → addMonths-8x2Zqxlu.js} +2 -2
  362. package/dist/{addMonths-DI1YMeKj.js.map → addMonths-8x2Zqxlu.js.map} +1 -1
  363. package/dist/{addMonths-SOmDn5_g.cjs → addMonths-BKZ-wlfT.cjs} +2 -2
  364. package/dist/{addMonths-SOmDn5_g.cjs.map → addMonths-BKZ-wlfT.cjs.map} +1 -1
  365. package/dist/components.cjs +1 -1
  366. package/dist/components.js +71 -71
  367. package/dist/{format-DMO5vfrX.cjs → format-MMgAFAGt.cjs} +10 -10
  368. package/dist/format-MMgAFAGt.cjs.map +1 -0
  369. package/dist/{format-BJTVXrSU.js → format-mcuVCYue.js} +921 -911
  370. package/dist/format-mcuVCYue.js.map +1 -0
  371. package/dist/getDefaultOptions-DFvSlHOQ.cjs +2 -0
  372. package/dist/{getDefaultOptions-DM-1w6JL.cjs.map → getDefaultOptions-DFvSlHOQ.cjs.map} +1 -1
  373. package/dist/getDefaultOptions-iOY0zDuv.js +8 -0
  374. package/dist/{getDefaultOptions-CK1Ea9CA.js.map → getDefaultOptions-iOY0zDuv.js.map} +1 -1
  375. package/dist/{index-0c3bHqHD.js → index-AU71Em-T.js} +683 -681
  376. package/dist/index-AU71Em-T.js.map +1 -0
  377. package/dist/{index-fyIAHTXk.js → index-CbFUkAzJ.js} +482 -471
  378. package/dist/index-CbFUkAzJ.js.map +1 -0
  379. package/dist/index-DpGzPeGX.cjs +10 -0
  380. package/dist/index-DpGzPeGX.cjs.map +1 -0
  381. package/dist/index-jFVMElAV.cjs +7 -0
  382. package/dist/index-jFVMElAV.cjs.map +1 -0
  383. package/dist/{parse-DVpJm282.cjs → parse-VYeg4sm9.cjs} +2 -2
  384. package/dist/parse-VYeg4sm9.cjs.map +1 -0
  385. package/dist/{parse-BDajhNCa.js → parse-tBX2kWMh.js} +3 -3
  386. package/dist/parse-tBX2kWMh.js.map +1 -0
  387. package/dist/plugins.cjs +2 -2
  388. package/dist/plugins.cjs.map +1 -1
  389. package/dist/plugins.js +362 -376
  390. package/dist/plugins.js.map +1 -1
  391. package/dist/purify.es-BgN5W7Gm.cjs +4 -0
  392. package/dist/purify.es-BgN5W7Gm.cjs.map +1 -0
  393. package/dist/purify.es-XBlcheTS.js +663 -0
  394. package/dist/purify.es-XBlcheTS.js.map +1 -0
  395. package/dist/{settings-TnQjO9IR.cjs → settings-CekhMYoq.cjs} +2 -2
  396. package/dist/{settings-TnQjO9IR.cjs.map → settings-CekhMYoq.cjs.map} +1 -1
  397. package/dist/{settings-08OS6cx2.js → settings-DZ910lLo.js} +2 -2
  398. package/dist/{settings-08OS6cx2.js.map → settings-DZ910lLo.js.map} +1 -1
  399. package/dist/settingsCache-BTZ8CWTD.js +28 -0
  400. package/dist/{settingsCache-CriaPeNM.js.map → settingsCache-BTZ8CWTD.js.map} +1 -1
  401. package/dist/{settingsCache-Bm4JOm9j.cjs → settingsCache-DmIdInSd.cjs} +2 -2
  402. package/dist/{settingsCache-Bm4JOm9j.cjs.map → settingsCache-DmIdInSd.cjs.map} +1 -1
  403. package/dist/{timeFilters-BacGikeM.cjs → timeFilters-DdEvgzim.cjs} +2 -2
  404. package/dist/{timeFilters-BacGikeM.cjs.map → timeFilters-DdEvgzim.cjs.map} +1 -1
  405. package/dist/{timeFilters-BjNif-pu.js → timeFilters-a8Cma3bj.js} +10 -10
  406. package/dist/{timeFilters-BjNif-pu.js.map → timeFilters-a8Cma3bj.js.map} +1 -1
  407. package/dist/tools/admin.cjs +1 -1
  408. package/dist/tools/admin.js +1 -1
  409. package/dist/tools/base.cjs +1 -1
  410. package/dist/tools/base.cjs.map +1 -1
  411. package/dist/tools/base.js +18 -18
  412. package/dist/tools/base.js.map +1 -1
  413. package/dist/tools/calendar.cjs +1 -1
  414. package/dist/tools/calendar.js +1 -1
  415. package/dist/tools/scriptrunner.cjs +8 -8
  416. package/dist/tools/scriptrunner.cjs.map +1 -1
  417. package/dist/tools/scriptrunner.js +1443 -1389
  418. package/dist/tools/scriptrunner.js.map +1 -1
  419. package/dist/util.cjs +1 -1
  420. package/dist/util.js +2 -2
  421. package/dist/vue-common.css +1 -1
  422. package/dist/widgets.cjs +1 -1
  423. package/dist/widgets.js +64 -64
  424. package/package.json +11 -11
  425. package/dist/CanvaslabelWidget-SuEi9yf4.cjs +0 -2
  426. package/dist/CanvaslabelWidget-SuEi9yf4.cjs.map +0 -1
  427. package/dist/CanvaslabelWidget-Tt4dmAOI.js +0 -23
  428. package/dist/CanvaslabelWidget-Tt4dmAOI.js.map +0 -1
  429. package/dist/EventListDialog-C57w2AlC.cjs +0 -2
  430. package/dist/EventListDialog-C57w2AlC.cjs.map +0 -1
  431. package/dist/EventListDialog-CIc8RCyY.js.map +0 -1
  432. package/dist/format-BJTVXrSU.js.map +0 -1
  433. package/dist/format-DMO5vfrX.cjs.map +0 -1
  434. package/dist/getDefaultOptions-CK1Ea9CA.js +0 -8
  435. package/dist/getDefaultOptions-DM-1w6JL.cjs +0 -2
  436. package/dist/index-0c3bHqHD.js.map +0 -1
  437. package/dist/index-BwjFEWGT.cjs +0 -10
  438. package/dist/index-BwjFEWGT.cjs.map +0 -1
  439. package/dist/index-D3OfXI7H.cjs +0 -7
  440. package/dist/index-D3OfXI7H.cjs.map +0 -1
  441. package/dist/index-fyIAHTXk.js.map +0 -1
  442. package/dist/parse-BDajhNCa.js.map +0 -1
  443. package/dist/parse-DVpJm282.cjs.map +0 -1
  444. package/dist/purify.es-C8CCt8xk.cjs +0 -3
  445. package/dist/purify.es-C8CCt8xk.cjs.map +0 -1
  446. package/dist/purify.es-cZjWcAUR.js +0 -595
  447. package/dist/purify.es-cZjWcAUR.js.map +0 -1
  448. package/dist/settingsCache-CriaPeNM.js +0 -28
@@ -1,9 +1,9 @@
1
- import { e as k } from "./format-BJTVXrSU.js";
2
- import { W as F } from "./Widget-BiaunQ83.js";
1
+ import { F as k } from "./format-mcuVCYue.js";
2
+ import { W as E } from "./Widget-D_HaosJK.js";
3
3
  import { resolveComponent as n, openBlock as h, createBlock as S, normalizeStyle as N, withCtx as l, createVNode as o, createElementVNode as d, toDisplayString as m, createElementBlock as u, Fragment as p, renderList as T, createTextVNode as y, normalizeClass as A, createCommentVNode as B } from "vue";
4
4
  import { _ as I } from "./CustomIcon-DTR361si.js";
5
5
  const U = {
6
- mixins: [F],
6
+ mixins: [E],
7
7
  data() {
8
8
  return {
9
9
  files: [],
@@ -81,8 +81,8 @@ const U = {
81
81
  }
82
82
  }, $ = { class: "text-caption text-medium-emphasis font-weight-regular" }, z = { class: "text-caption text-medium-emphasis mb-2" }, D = { class: "ml-1 text-high-emphasis" }, O = { class: "flex-grow-1 overflow-wrap-anywhere" };
83
83
  function V(e, t, s, c, i, r) {
84
- const C = n("v-spacer"), f = n("v-btn"), v = n("v-card-title"), _ = n("v-divider"), x = n("v-sheet"), w = n("v-chip"), b = n("v-card-text"), E = n("v-card");
85
- return h(), S(E, {
84
+ const C = n("v-spacer"), f = n("v-btn"), v = n("v-card-title"), _ = n("v-divider"), x = n("v-sheet"), w = n("v-chip"), b = n("v-card-text"), F = n("v-card");
85
+ return h(), S(F, {
86
86
  style: N(e.computedStyle),
87
87
  "min-width": "400"
88
88
  }, {
@@ -154,4 +154,4 @@ const K = /* @__PURE__ */ I(U, [["render", V], ["__scopeId", "data-v-5728d932"]]
154
154
  export {
155
155
  K as default
156
156
  };
157
- //# sourceMappingURL=FilechecksumWidget-CTf0XGST.js.map
157
+ //# sourceMappingURL=FilechecksumWidget-DSfNEnDJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilechecksumWidget-CTf0XGST.js","sources":["../src/widgets/FilechecksumWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 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-card :style=\"computedStyle\" min-width=\"400\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ files.length === 1 ? 'File Checksum' : 'File Checksum Comparison' }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchChecksums\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-3\">\n <template v-for=\"(file, index) in files\" :key=\"index\">\n <div class=\"text-caption text-medium-emphasis mb-2\">\n {{ files.length === 1 ? 'File:' : `File ${index + 1}:` }}\n <span class=\"ml-1 text-high-emphasis\">{{ file.path }}</span>\n </div>\n <v-sheet\n :class=\"file.error ? 'text-error' : ''\"\n class=\"d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption\"\n style=\"background-color: rgba(128, 128, 128, 0.2)\"\n >\n <span class=\"flex-grow-1 overflow-wrap-anywhere\">\n {{ getDisplayText(file) }}\n </span>\n <v-btn\n :icon=\"file.copied ? '$success' : 'mdi-content-copy'\"\n :color=\"file.copied ? 'success' : undefined\"\n :disabled=\"!file.checksum\"\n size=\"x-small\"\n variant=\"plain\"\n density=\"compact\"\n @click=\"copyChecksum(file)\"\n />\n </v-sheet>\n </template>\n\n <template v-if=\"files.length > 1\">\n <v-divider class=\"mb-3\" />\n <v-chip\n :color=\"matchStatus.color\"\n size=\"small\"\n variant=\"tonal\"\n label\n :prepend-icon=\"matchStatus.icon\"\n >\n {{ matchStatus.text }}\n </v-chip>\n </template>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n files: [],\n loading: false,\n }\n },\n computed: {\n match() {\n if (this.files.some((f) => f.error)) return false\n if (this.files.some((f) => !f.checksum)) return null\n const first = this.files[0].checksum\n return this.files.every((f) => f.checksum === first)\n },\n matchStatus() {\n const states = {\n null: { icon: '$info', color: 'grey', text: 'Comparing...' },\n true: { icon: '$success', color: 'success', text: 'Checksums Match' },\n false: {\n icon: '$error',\n color: 'error',\n text: this.files.some((f) => f.error)\n ? 'Error loading file(s)'\n : 'Checksums Do Not Match',\n },\n }\n return states[this.match]\n },\n },\n created() {\n this.files = this.parameters\n .filter((p) => p)\n .map((path) => ({ path, checksum: null, error: null, copied: false }))\n },\n mounted() {\n if (this.files.length) {\n this.fetchChecksums()\n }\n },\n methods: {\n getDisplayText(file) {\n if (file.error) return `Error: ${file.error}`\n if (file.checksum) return file.checksum\n if (this.loading) return 'Loading...'\n return 'Not loaded'\n },\n async computeChecksum(content) {\n const encoder = new TextEncoder()\n const data = encoder.encode(content)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n },\n async fetchFile(filePath) {\n const scope = window.openc3Scope || 'DEFAULT'\n let objectPath = `${scope}/targets_modified/${filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n return atob(response.data.contents)\n }\n throw new Error('File not found')\n },\n async copyChecksum(file) {\n if (!file.checksum) return\n try {\n await navigator.clipboard.writeText(file.checksum)\n file.copied = true\n setTimeout(() => (file.copied = false), 2000)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Failed to copy checksum:', err)\n }\n },\n async fetchChecksums() {\n this.loading = true\n this.files.forEach((f) => {\n f.checksum = null\n f.error = null\n })\n\n const results = await Promise.all(\n this.files.map((file) =>\n this.fetchFile(file.path)\n .then((content) => this.computeChecksum(content))\n .catch((err) => ({ error: err.message || 'File not found' })),\n ),\n )\n\n results.forEach((result, i) => {\n if (result?.error) {\n this.files[i].error = result.error\n } else {\n this.files[i].checksum = result\n }\n })\n\n this.loading = false\n },\n },\n}\n</script>\n\n<style scoped>\n.overflow-wrap-anywhere {\n overflow-wrap: anywhere;\n}\n</style>\n"],"names":["_sfc_main","Widget","f","first","p","path","file","content","data","hashBuffer","b","filePath","scope","objectPath","response","Api","err","result","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text","_openBlock","_createElementBlock","_Fragment","_renderList","index","_createTextVNode","_component_v_sheet","_normalizeClass","$event","_component_v_chip"],"mappings":"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"}
1
+ {"version":3,"file":"FilechecksumWidget-DSfNEnDJ.js","sources":["../src/widgets/FilechecksumWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 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-card :style=\"computedStyle\" min-width=\"400\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ files.length === 1 ? 'File Checksum' : 'File Checksum Comparison' }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchChecksums\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-3\">\n <template v-for=\"(file, index) in files\" :key=\"index\">\n <div class=\"text-caption text-medium-emphasis mb-2\">\n {{ files.length === 1 ? 'File:' : `File ${index + 1}:` }}\n <span class=\"ml-1 text-high-emphasis\">{{ file.path }}</span>\n </div>\n <v-sheet\n :class=\"file.error ? 'text-error' : ''\"\n class=\"d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption\"\n style=\"background-color: rgba(128, 128, 128, 0.2)\"\n >\n <span class=\"flex-grow-1 overflow-wrap-anywhere\">\n {{ getDisplayText(file) }}\n </span>\n <v-btn\n :icon=\"file.copied ? '$success' : 'mdi-content-copy'\"\n :color=\"file.copied ? 'success' : undefined\"\n :disabled=\"!file.checksum\"\n size=\"x-small\"\n variant=\"plain\"\n density=\"compact\"\n @click=\"copyChecksum(file)\"\n />\n </v-sheet>\n </template>\n\n <template v-if=\"files.length > 1\">\n <v-divider class=\"mb-3\" />\n <v-chip\n :color=\"matchStatus.color\"\n size=\"small\"\n variant=\"tonal\"\n label\n :prepend-icon=\"matchStatus.icon\"\n >\n {{ matchStatus.text }}\n </v-chip>\n </template>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n files: [],\n loading: false,\n }\n },\n computed: {\n match() {\n if (this.files.some((f) => f.error)) return false\n if (this.files.some((f) => !f.checksum)) return null\n const first = this.files[0].checksum\n return this.files.every((f) => f.checksum === first)\n },\n matchStatus() {\n const states = {\n null: { icon: '$info', color: 'grey', text: 'Comparing...' },\n true: { icon: '$success', color: 'success', text: 'Checksums Match' },\n false: {\n icon: '$error',\n color: 'error',\n text: this.files.some((f) => f.error)\n ? 'Error loading file(s)'\n : 'Checksums Do Not Match',\n },\n }\n return states[this.match]\n },\n },\n created() {\n this.files = this.parameters\n .filter((p) => p)\n .map((path) => ({ path, checksum: null, error: null, copied: false }))\n },\n mounted() {\n if (this.files.length) {\n this.fetchChecksums()\n }\n },\n methods: {\n getDisplayText(file) {\n if (file.error) return `Error: ${file.error}`\n if (file.checksum) return file.checksum\n if (this.loading) return 'Loading...'\n return 'Not loaded'\n },\n async computeChecksum(content) {\n const encoder = new TextEncoder()\n const data = encoder.encode(content)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n },\n async fetchFile(filePath) {\n const scope = window.openc3Scope || 'DEFAULT'\n let objectPath = `${scope}/targets_modified/${filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n return atob(response.data.contents)\n }\n throw new Error('File not found')\n },\n async copyChecksum(file) {\n if (!file.checksum) return\n try {\n await navigator.clipboard.writeText(file.checksum)\n file.copied = true\n setTimeout(() => (file.copied = false), 2000)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Failed to copy checksum:', err)\n }\n },\n async fetchChecksums() {\n this.loading = true\n this.files.forEach((f) => {\n f.checksum = null\n f.error = null\n })\n\n const results = await Promise.all(\n this.files.map((file) =>\n this.fetchFile(file.path)\n .then((content) => this.computeChecksum(content))\n .catch((err) => ({ error: err.message || 'File not found' })),\n ),\n )\n\n results.forEach((result, i) => {\n if (result?.error) {\n this.files[i].error = result.error\n } else {\n this.files[i].checksum = result\n }\n })\n\n this.loading = false\n },\n },\n}\n</script>\n\n<style scoped>\n.overflow-wrap-anywhere {\n overflow-wrap: anywhere;\n}\n</style>\n"],"names":["_sfc_main","Widget","f","first","p","path","file","content","data","hashBuffer","b","filePath","scope","objectPath","response","Api","err","result","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text","_openBlock","_createElementBlock","_Fragment","_renderList","index","_createTextVNode","_component_v_sheet","_normalizeClass","$event","_component_v_chip"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./format-DMO5vfrX.cjs"),k=require("./Widget-D23R5IBP.cjs"),e=require("vue"),C=require("./CustomIcon-8F08upeg.cjs"),v={mixins:[k.Widget],data(){return{files:[],loading:!1}},computed:{match(){if(this.files.some(o=>o.error))return!1;if(this.files.some(o=>!o.checksum))return null;const t=this.files[0].checksum;return this.files.every(o=>o.checksum===t)},matchStatus(){return{null:{icon:"$info",color:"grey",text:"Comparing..."},true:{icon:"$success",color:"success",text:"Checksums Match"},false:{icon:"$error",color:"error",text:this.files.some(o=>o.error)?"Error loading file(s)":"Checksums Do Not Match"}}[this.match]}},created(){this.files=this.parameters.filter(t=>t).map(t=>({path:t,checksum:null,error:null,copied:!1}))},mounted(){this.files.length&&this.fetchChecksums()},methods:{getDisplayText(t){return t.error?`Error: ${t.error}`:t.checksum?t.checksum:this.loading?"Loading...":"Not loaded"},async computeChecksum(t){const r=new TextEncoder().encode(t),s=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(s)).map(c=>c.toString(16).padStart(2,"0")).join("")},async fetchFile(t){const o=window.openc3Scope||"DEFAULT";let r=`${o}/targets_modified/${t}`,s=await m.es.get(`/openc3-api/storage/download_file/${encodeURIComponent(r)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"},headers:{"Ignore-Errors":"404,500"}}).catch(()=>null);if((!s||s.status===404)&&(r=`${o}/targets/${t}`,s=await m.es.get(`/openc3-api/storage/download_file/${encodeURIComponent(r)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"}})),s?.data?.contents)return atob(s.data.contents);throw new Error("File not found")},async copyChecksum(t){if(t.checksum)try{await navigator.clipboard.writeText(t.checksum),t.copied=!0,setTimeout(()=>t.copied=!1,2e3)}catch(o){console.error("Failed to copy checksum:",o)}},async fetchChecksums(){this.loading=!0,this.files.forEach(o=>{o.checksum=null,o.error=null}),(await Promise.all(this.files.map(o=>this.fetchFile(o.path).then(r=>this.computeChecksum(r)).catch(r=>({error:r.message||"File not found"}))))).forEach((o,r)=>{o?.error?this.files[r].error=o.error:this.files[r].checksum=o}),this.loading=!1}}},y={class:"text-caption text-medium-emphasis font-weight-regular"},x={class:"text-caption text-medium-emphasis mb-2"},w={class:"ml-1 text-high-emphasis"},N={class:"flex-grow-1 overflow-wrap-anywhere"};function E(t,o,r,s,a,c){const h=e.resolveComponent("v-spacer"),i=e.resolveComponent("v-btn"),u=e.resolveComponent("v-card-title"),l=e.resolveComponent("v-divider"),p=e.resolveComponent("v-sheet"),f=e.resolveComponent("v-chip"),_=e.resolveComponent("v-card-text"),g=e.resolveComponent("v-card");return e.openBlock(),e.createBlock(g,{style:e.normalizeStyle(t.computedStyle),"min-width":"400"},{default:e.withCtx(()=>[e.createVNode(u,{class:"d-flex align-center pa-2"},{default:e.withCtx(()=>[e.createElementVNode("span",y,e.toDisplayString(a.files.length===1?"File Checksum":"File Checksum Comparison"),1),e.createVNode(h),e.createVNode(i,{size:"x-small",icon:"mdi-refresh",variant:"text",loading:a.loading,onClick:c.fetchChecksums},null,8,["loading","onClick"])]),_:1}),e.createVNode(l),e.createVNode(_,{class:"pa-3"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.files,(n,d)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d},[e.createElementVNode("div",x,[e.createTextVNode(e.toDisplayString(a.files.length===1?"File:":`File ${d+1}:`)+" ",1),e.createElementVNode("span",w,e.toDisplayString(n.path),1)]),e.createVNode(p,{class:e.normalizeClass([n.error?"text-error":"","d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption"]),style:{"background-color":"rgba(128, 128, 128, 0.2)"}},{default:e.withCtx(()=>[e.createElementVNode("span",N,e.toDisplayString(c.getDisplayText(n)),1),e.createVNode(i,{icon:n.copied?"$success":"mdi-content-copy",color:n.copied?"success":void 0,disabled:!n.checksum,size:"x-small",variant:"plain",density:"compact",onClick:S=>c.copyChecksum(n)},null,8,["icon","color","disabled","onClick"])]),_:2},1032,["class"])],64))),128)),a.files.length>1?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(l,{class:"mb-3"}),e.createVNode(f,{color:c.matchStatus.color,size:"small",variant:"tonal",label:"","prepend-icon":c.matchStatus.icon},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.matchStatus.text),1)]),_:1},8,["color","prepend-icon"])],64)):e.createCommentVNode("",!0)]),_:1})]),_:1},8,["style"])}const b=C._export_sfc(v,[["render",E],["__scopeId","data-v-5728d932"]]);exports.default=b;
2
- //# sourceMappingURL=FilechecksumWidget-JeWqA6dh.cjs.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./format-MMgAFAGt.cjs"),k=require("./Widget-a5Y50rAX.cjs"),e=require("vue"),C=require("./CustomIcon-8F08upeg.cjs"),v={mixins:[k.Widget],data(){return{files:[],loading:!1}},computed:{match(){if(this.files.some(o=>o.error))return!1;if(this.files.some(o=>!o.checksum))return null;const t=this.files[0].checksum;return this.files.every(o=>o.checksum===t)},matchStatus(){return{null:{icon:"$info",color:"grey",text:"Comparing..."},true:{icon:"$success",color:"success",text:"Checksums Match"},false:{icon:"$error",color:"error",text:this.files.some(o=>o.error)?"Error loading file(s)":"Checksums Do Not Match"}}[this.match]}},created(){this.files=this.parameters.filter(t=>t).map(t=>({path:t,checksum:null,error:null,copied:!1}))},mounted(){this.files.length&&this.fetchChecksums()},methods:{getDisplayText(t){return t.error?`Error: ${t.error}`:t.checksum?t.checksum:this.loading?"Loading...":"Not loaded"},async computeChecksum(t){const r=new TextEncoder().encode(t),s=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(s)).map(c=>c.toString(16).padStart(2,"0")).join("")},async fetchFile(t){const o=window.openc3Scope||"DEFAULT";let r=`${o}/targets_modified/${t}`,s=await m.Fi.get(`/openc3-api/storage/download_file/${encodeURIComponent(r)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"},headers:{"Ignore-Errors":"404,500"}}).catch(()=>null);if((!s||s.status===404)&&(r=`${o}/targets/${t}`,s=await m.Fi.get(`/openc3-api/storage/download_file/${encodeURIComponent(r)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"}})),s?.data?.contents)return atob(s.data.contents);throw new Error("File not found")},async copyChecksum(t){if(t.checksum)try{await navigator.clipboard.writeText(t.checksum),t.copied=!0,setTimeout(()=>t.copied=!1,2e3)}catch(o){console.error("Failed to copy checksum:",o)}},async fetchChecksums(){this.loading=!0,this.files.forEach(o=>{o.checksum=null,o.error=null}),(await Promise.all(this.files.map(o=>this.fetchFile(o.path).then(r=>this.computeChecksum(r)).catch(r=>({error:r.message||"File not found"}))))).forEach((o,r)=>{o?.error?this.files[r].error=o.error:this.files[r].checksum=o}),this.loading=!1}}},y={class:"text-caption text-medium-emphasis font-weight-regular"},x={class:"text-caption text-medium-emphasis mb-2"},w={class:"ml-1 text-high-emphasis"},N={class:"flex-grow-1 overflow-wrap-anywhere"};function E(t,o,r,s,a,c){const h=e.resolveComponent("v-spacer"),i=e.resolveComponent("v-btn"),u=e.resolveComponent("v-card-title"),l=e.resolveComponent("v-divider"),p=e.resolveComponent("v-sheet"),f=e.resolveComponent("v-chip"),_=e.resolveComponent("v-card-text"),g=e.resolveComponent("v-card");return e.openBlock(),e.createBlock(g,{style:e.normalizeStyle(t.computedStyle),"min-width":"400"},{default:e.withCtx(()=>[e.createVNode(u,{class:"d-flex align-center pa-2"},{default:e.withCtx(()=>[e.createElementVNode("span",y,e.toDisplayString(a.files.length===1?"File Checksum":"File Checksum Comparison"),1),e.createVNode(h),e.createVNode(i,{size:"x-small",icon:"mdi-refresh",variant:"text",loading:a.loading,onClick:c.fetchChecksums},null,8,["loading","onClick"])]),_:1}),e.createVNode(l),e.createVNode(_,{class:"pa-3"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.files,(n,d)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d},[e.createElementVNode("div",x,[e.createTextVNode(e.toDisplayString(a.files.length===1?"File:":`File ${d+1}:`)+" ",1),e.createElementVNode("span",w,e.toDisplayString(n.path),1)]),e.createVNode(p,{class:e.normalizeClass([n.error?"text-error":"","d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption"]),style:{"background-color":"rgba(128, 128, 128, 0.2)"}},{default:e.withCtx(()=>[e.createElementVNode("span",N,e.toDisplayString(c.getDisplayText(n)),1),e.createVNode(i,{icon:n.copied?"$success":"mdi-content-copy",color:n.copied?"success":void 0,disabled:!n.checksum,size:"x-small",variant:"plain",density:"compact",onClick:F=>c.copyChecksum(n)},null,8,["icon","color","disabled","onClick"])]),_:2},1032,["class"])],64))),128)),a.files.length>1?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(l,{class:"mb-3"}),e.createVNode(f,{color:c.matchStatus.color,size:"small",variant:"tonal",label:"","prepend-icon":c.matchStatus.icon},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.matchStatus.text),1)]),_:1},8,["color","prepend-icon"])],64)):e.createCommentVNode("",!0)]),_:1})]),_:1},8,["style"])}const b=C._export_sfc(v,[["render",E],["__scopeId","data-v-5728d932"]]);exports.default=b;
2
+ //# sourceMappingURL=FilechecksumWidget-DxpkQwol.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilechecksumWidget-JeWqA6dh.cjs","sources":["../src/widgets/FilechecksumWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 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-card :style=\"computedStyle\" min-width=\"400\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ files.length === 1 ? 'File Checksum' : 'File Checksum Comparison' }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchChecksums\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-3\">\n <template v-for=\"(file, index) in files\" :key=\"index\">\n <div class=\"text-caption text-medium-emphasis mb-2\">\n {{ files.length === 1 ? 'File:' : `File ${index + 1}:` }}\n <span class=\"ml-1 text-high-emphasis\">{{ file.path }}</span>\n </div>\n <v-sheet\n :class=\"file.error ? 'text-error' : ''\"\n class=\"d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption\"\n style=\"background-color: rgba(128, 128, 128, 0.2)\"\n >\n <span class=\"flex-grow-1 overflow-wrap-anywhere\">\n {{ getDisplayText(file) }}\n </span>\n <v-btn\n :icon=\"file.copied ? '$success' : 'mdi-content-copy'\"\n :color=\"file.copied ? 'success' : undefined\"\n :disabled=\"!file.checksum\"\n size=\"x-small\"\n variant=\"plain\"\n density=\"compact\"\n @click=\"copyChecksum(file)\"\n />\n </v-sheet>\n </template>\n\n <template v-if=\"files.length > 1\">\n <v-divider class=\"mb-3\" />\n <v-chip\n :color=\"matchStatus.color\"\n size=\"small\"\n variant=\"tonal\"\n label\n :prepend-icon=\"matchStatus.icon\"\n >\n {{ matchStatus.text }}\n </v-chip>\n </template>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n files: [],\n loading: false,\n }\n },\n computed: {\n match() {\n if (this.files.some((f) => f.error)) return false\n if (this.files.some((f) => !f.checksum)) return null\n const first = this.files[0].checksum\n return this.files.every((f) => f.checksum === first)\n },\n matchStatus() {\n const states = {\n null: { icon: '$info', color: 'grey', text: 'Comparing...' },\n true: { icon: '$success', color: 'success', text: 'Checksums Match' },\n false: {\n icon: '$error',\n color: 'error',\n text: this.files.some((f) => f.error)\n ? 'Error loading file(s)'\n : 'Checksums Do Not Match',\n },\n }\n return states[this.match]\n },\n },\n created() {\n this.files = this.parameters\n .filter((p) => p)\n .map((path) => ({ path, checksum: null, error: null, copied: false }))\n },\n mounted() {\n if (this.files.length) {\n this.fetchChecksums()\n }\n },\n methods: {\n getDisplayText(file) {\n if (file.error) return `Error: ${file.error}`\n if (file.checksum) return file.checksum\n if (this.loading) return 'Loading...'\n return 'Not loaded'\n },\n async computeChecksum(content) {\n const encoder = new TextEncoder()\n const data = encoder.encode(content)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n },\n async fetchFile(filePath) {\n const scope = window.openc3Scope || 'DEFAULT'\n let objectPath = `${scope}/targets_modified/${filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n return atob(response.data.contents)\n }\n throw new Error('File not found')\n },\n async copyChecksum(file) {\n if (!file.checksum) return\n try {\n await navigator.clipboard.writeText(file.checksum)\n file.copied = true\n setTimeout(() => (file.copied = false), 2000)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Failed to copy checksum:', err)\n }\n },\n async fetchChecksums() {\n this.loading = true\n this.files.forEach((f) => {\n f.checksum = null\n f.error = null\n })\n\n const results = await Promise.all(\n this.files.map((file) =>\n this.fetchFile(file.path)\n .then((content) => this.computeChecksum(content))\n .catch((err) => ({ error: err.message || 'File not found' })),\n ),\n )\n\n results.forEach((result, i) => {\n if (result?.error) {\n this.files[i].error = result.error\n } else {\n this.files[i].checksum = result\n }\n })\n\n this.loading = false\n },\n },\n}\n</script>\n\n<style scoped>\n.overflow-wrap-anywhere {\n overflow-wrap: anywhere;\n}\n</style>\n"],"names":["_sfc_main","Widget","f","first","p","path","file","content","data","hashBuffer","b","filePath","scope","objectPath","response","Api","err","result","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text","_openBlock","_createElementBlock","_Fragment","_renderList","index","_createTextVNode","_component_v_sheet","_normalizeClass","$event","_component_v_chip"],"mappings":"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"}
1
+ {"version":3,"file":"FilechecksumWidget-DxpkQwol.cjs","sources":["../src/widgets/FilechecksumWidget.vue"],"sourcesContent":["<!--\n# Copyright 2025 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-card :style=\"computedStyle\" min-width=\"400\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ files.length === 1 ? 'File Checksum' : 'File Checksum Comparison' }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchChecksums\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-3\">\n <template v-for=\"(file, index) in files\" :key=\"index\">\n <div class=\"text-caption text-medium-emphasis mb-2\">\n {{ files.length === 1 ? 'File:' : `File ${index + 1}:` }}\n <span class=\"ml-1 text-high-emphasis\">{{ file.path }}</span>\n </div>\n <v-sheet\n :class=\"file.error ? 'text-error' : ''\"\n class=\"d-flex align-center ga-2 px-2 py-1 mb-3 rounded text-caption\"\n style=\"background-color: rgba(128, 128, 128, 0.2)\"\n >\n <span class=\"flex-grow-1 overflow-wrap-anywhere\">\n {{ getDisplayText(file) }}\n </span>\n <v-btn\n :icon=\"file.copied ? '$success' : 'mdi-content-copy'\"\n :color=\"file.copied ? 'success' : undefined\"\n :disabled=\"!file.checksum\"\n size=\"x-small\"\n variant=\"plain\"\n density=\"compact\"\n @click=\"copyChecksum(file)\"\n />\n </v-sheet>\n </template>\n\n <template v-if=\"files.length > 1\">\n <v-divider class=\"mb-3\" />\n <v-chip\n :color=\"matchStatus.color\"\n size=\"small\"\n variant=\"tonal\"\n label\n :prepend-icon=\"matchStatus.icon\"\n >\n {{ matchStatus.text }}\n </v-chip>\n </template>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n files: [],\n loading: false,\n }\n },\n computed: {\n match() {\n if (this.files.some((f) => f.error)) return false\n if (this.files.some((f) => !f.checksum)) return null\n const first = this.files[0].checksum\n return this.files.every((f) => f.checksum === first)\n },\n matchStatus() {\n const states = {\n null: { icon: '$info', color: 'grey', text: 'Comparing...' },\n true: { icon: '$success', color: 'success', text: 'Checksums Match' },\n false: {\n icon: '$error',\n color: 'error',\n text: this.files.some((f) => f.error)\n ? 'Error loading file(s)'\n : 'Checksums Do Not Match',\n },\n }\n return states[this.match]\n },\n },\n created() {\n this.files = this.parameters\n .filter((p) => p)\n .map((path) => ({ path, checksum: null, error: null, copied: false }))\n },\n mounted() {\n if (this.files.length) {\n this.fetchChecksums()\n }\n },\n methods: {\n getDisplayText(file) {\n if (file.error) return `Error: ${file.error}`\n if (file.checksum) return file.checksum\n if (this.loading) return 'Loading...'\n return 'Not loaded'\n },\n async computeChecksum(content) {\n const encoder = new TextEncoder()\n const data = encoder.encode(content)\n const hashBuffer = await crypto.subtle.digest('SHA-256', data)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('')\n },\n async fetchFile(filePath) {\n const scope = window.openc3Scope || 'DEFAULT'\n let objectPath = `${scope}/targets_modified/${filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n return atob(response.data.contents)\n }\n throw new Error('File not found')\n },\n async copyChecksum(file) {\n if (!file.checksum) return\n try {\n await navigator.clipboard.writeText(file.checksum)\n file.copied = true\n setTimeout(() => (file.copied = false), 2000)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('Failed to copy checksum:', err)\n }\n },\n async fetchChecksums() {\n this.loading = true\n this.files.forEach((f) => {\n f.checksum = null\n f.error = null\n })\n\n const results = await Promise.all(\n this.files.map((file) =>\n this.fetchFile(file.path)\n .then((content) => this.computeChecksum(content))\n .catch((err) => ({ error: err.message || 'File not found' })),\n ),\n )\n\n results.forEach((result, i) => {\n if (result?.error) {\n this.files[i].error = result.error\n } else {\n this.files[i].checksum = result\n }\n })\n\n this.loading = false\n },\n },\n}\n</script>\n\n<style scoped>\n.overflow-wrap-anywhere {\n overflow-wrap: anywhere;\n}\n</style>\n"],"names":["_sfc_main","Widget","f","first","p","path","file","content","data","hashBuffer","b","filePath","scope","objectPath","response","Api","err","result","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text","_openBlock","_createElementBlock","_Fragment","_renderList","index","_createTextVNode","_component_v_sheet","_normalizeClass","$event","_component_v_chip"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { a as g } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-C6eLx1ow.js";
2
- import { e as d } from "./format-BJTVXrSU.js";
3
- import { W as C } from "./Widget-BiaunQ83.js";
1
+ import { b as g } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-JHbHqvBt.js";
2
+ import { F as d } from "./format-mcuVCYue.js";
3
+ import { W as C } from "./Widget-D_HaosJK.js";
4
4
  import { resolveComponent as i, openBlock as v, createBlock as x, normalizeStyle as l, withCtx as r, createVNode as s, createElementVNode as h, toDisplayString as y } from "vue";
5
5
  import { _ as w } from "./CustomIcon-DTR361si.js";
6
6
  const E = {
@@ -72,7 +72,7 @@ const E = {
72
72
  }
73
73
  }
74
74
  }, P = { class: "text-caption text-medium-emphasis font-weight-regular" };
75
- function b(t, o, e, S, a, n) {
75
+ function b(t, o, e, F, a, n) {
76
76
  const c = i("v-spacer"), p = i("v-btn"), f = i("v-card-title"), m = i("v-divider"), _ = i("v-card-text"), u = i("v-card");
77
77
  return v(), x(u, {
78
78
  style: l(t.computedStyle)
@@ -110,4 +110,4 @@ const U = /* @__PURE__ */ w(E, [["render", b]]);
110
110
  export {
111
111
  U as default
112
112
  };
113
- //# sourceMappingURL=FiledisplayWidget-DLJuesmU.js.map
113
+ //# sourceMappingURL=FiledisplayWidget-D2cxMmrP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FiledisplayWidget-DLJuesmU.js","sources":["../src/widgets/FiledisplayWidget.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-card :style=\"computedStyle\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ filePath }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchFile\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-0\">\n <div ref=\"editor\" :style=\"contentStyle\"></div>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n filePath: '',\n fileContent: 'Loading...',\n loading: false,\n width: 600,\n height: 300,\n editor: null,\n }\n },\n computed: {\n contentStyle() {\n return {\n width: this.width + 'px',\n height: this.height + 'px',\n }\n },\n aceMode() {\n const ext = this.filePath.split('.').pop()?.toLowerCase()\n const modeMap = {\n json: 'ace/mode/json',\n rb: 'ace/mode/ruby',\n py: 'ace/mode/python',\n txt: 'ace/mode/text',\n }\n return modeMap[ext] || 'ace/mode/text'\n },\n },\n created() {\n // Parameter 0: File path (required) e.g. \"INST/procedures/test.txt\"\n // Parameter 1: Width (optional, default 600)\n // Parameter 2: Height (optional, default 300)\n if (this.parameters[0]) {\n this.filePath = this.parameters[0]\n }\n if (this.parameters[1]) {\n this.width = Number.parseInt(this.parameters[1])\n }\n if (this.parameters[2]) {\n this.height = Number.parseInt(this.parameters[2])\n }\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.setReadOnly(true)\n this.editor.setShowPrintMargin(false)\n this.editor.setHighlightActiveLine(false)\n this.editor.renderer.setShowGutter(false)\n this.editor.renderer.setScrollMargin(8, 8, 0, 0)\n this.editor.renderer.setPadding(8)\n this.editor.setValue(this.fileContent, -1)\n\n if (this.filePath) {\n this.fetchFile()\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n this.editor.container.remove()\n }\n },\n methods: {\n updateEditor() {\n if (this.editor) {\n this.editor.session.setMode(this.aceMode)\n this.editor.setValue(this.fileContent, -1)\n }\n },\n async fetchFile() {\n if (!this.filePath) {\n this.fileContent =\n 'Error: No file path specified. Usage: FILEDISPLAY \"TARGET/path/to/file.txt\"'\n this.updateEditor()\n return\n }\n this.loading = true\n try {\n const scope = window.openc3Scope || 'DEFAULT'\n // Try targets_modified first, then fall back to targets\n // Use Ignore-Errors header to suppress toast for expected 404/500\n let objectPath = `${scope}/targets_modified/${this.filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${this.filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n this.fileContent = atob(response.data.contents)\n } else {\n this.fileContent = 'Error: Could not load file'\n }\n } catch (error) {\n this.fileContent = `Error: ${error.message || error}`\n } finally {\n this.loading = false\n this.updateEditor()\n }\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ext","ace.edit","scope","objectPath","response","Api","error","_hoisted_1","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text"],"mappings":"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"}
1
+ {"version":3,"file":"FiledisplayWidget-D2cxMmrP.js","sources":["../src/widgets/FiledisplayWidget.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-card :style=\"computedStyle\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ filePath }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchFile\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-0\">\n <div ref=\"editor\" :style=\"contentStyle\"></div>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n filePath: '',\n fileContent: 'Loading...',\n loading: false,\n width: 600,\n height: 300,\n editor: null,\n }\n },\n computed: {\n contentStyle() {\n return {\n width: this.width + 'px',\n height: this.height + 'px',\n }\n },\n aceMode() {\n const ext = this.filePath.split('.').pop()?.toLowerCase()\n const modeMap = {\n json: 'ace/mode/json',\n rb: 'ace/mode/ruby',\n py: 'ace/mode/python',\n txt: 'ace/mode/text',\n }\n return modeMap[ext] || 'ace/mode/text'\n },\n },\n created() {\n // Parameter 0: File path (required) e.g. \"INST/procedures/test.txt\"\n // Parameter 1: Width (optional, default 600)\n // Parameter 2: Height (optional, default 300)\n if (this.parameters[0]) {\n this.filePath = this.parameters[0]\n }\n if (this.parameters[1]) {\n this.width = Number.parseInt(this.parameters[1])\n }\n if (this.parameters[2]) {\n this.height = Number.parseInt(this.parameters[2])\n }\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.setReadOnly(true)\n this.editor.setShowPrintMargin(false)\n this.editor.setHighlightActiveLine(false)\n this.editor.renderer.setShowGutter(false)\n this.editor.renderer.setScrollMargin(8, 8, 0, 0)\n this.editor.renderer.setPadding(8)\n this.editor.setValue(this.fileContent, -1)\n\n if (this.filePath) {\n this.fetchFile()\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n this.editor.container.remove()\n }\n },\n methods: {\n updateEditor() {\n if (this.editor) {\n this.editor.session.setMode(this.aceMode)\n this.editor.setValue(this.fileContent, -1)\n }\n },\n async fetchFile() {\n if (!this.filePath) {\n this.fileContent =\n 'Error: No file path specified. Usage: FILEDISPLAY \"TARGET/path/to/file.txt\"'\n this.updateEditor()\n return\n }\n this.loading = true\n try {\n const scope = window.openc3Scope || 'DEFAULT'\n // Try targets_modified first, then fall back to targets\n // Use Ignore-Errors header to suppress toast for expected 404/500\n let objectPath = `${scope}/targets_modified/${this.filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${this.filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n this.fileContent = atob(response.data.contents)\n } else {\n this.fileContent = 'Error: Could not load file'\n }\n } catch (error) {\n this.fileContent = `Error: ${error.message || error}`\n } finally {\n this.loading = false\n this.updateEditor()\n }\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ext","ace.edit","scope","objectPath","response","Api","error","_hoisted_1","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-hv0QWZ6Z.cjs"),n=require("./format-DMO5vfrX.cjs"),m=require("./Widget-D23R5IBP.cjs"),e=require("vue"),u=require("./CustomIcon-8F08upeg.cjs"),_={mixins:[m.Widget],data(){return{filePath:"",fileContent:"Loading...",loading:!1,width:600,height:300,editor:null}},computed:{contentStyle(){return{width:this.width+"px",height:this.height+"px"}},aceMode(){const t=this.filePath.split(".").pop()?.toLowerCase();return{json:"ace/mode/json",rb:"ace/mode/ruby",py:"ace/mode/python",txt:"ace/mode/text"}[t]||"ace/mode/text"}},created(){this.parameters[0]&&(this.filePath=this.parameters[0]),this.parameters[1]&&(this.width=Number.parseInt(this.parameters[1])),this.parameters[2]&&(this.height=Number.parseInt(this.parameters[2]))},mounted(){this.editor=f.aceExports.edit(this.$refs.editor),this.editor.setTheme("ace/theme/twilight"),this.editor.setReadOnly(!0),this.editor.setShowPrintMargin(!1),this.editor.setHighlightActiveLine(!1),this.editor.renderer.setShowGutter(!1),this.editor.renderer.setScrollMargin(8,8,0,0),this.editor.renderer.setPadding(8),this.editor.setValue(this.fileContent,-1),this.filePath&&this.fetchFile()},beforeUnmount(){this.editor&&(this.editor.destroy(),this.editor.container.remove())},methods:{updateEditor(){this.editor&&(this.editor.session.setMode(this.aceMode),this.editor.setValue(this.fileContent,-1))},async fetchFile(){if(!this.filePath){this.fileContent='Error: No file path specified. Usage: FILEDISPLAY "TARGET/path/to/file.txt"',this.updateEditor();return}this.loading=!0;try{const t=window.openc3Scope||"DEFAULT";let o=`${t}/targets_modified/${this.filePath}`,i=await n.es.get(`/openc3-api/storage/download_file/${encodeURIComponent(o)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"},headers:{"Ignore-Errors":"404,500"}}).catch(()=>null);(!i||i.status===404)&&(o=`${t}/targets/${this.filePath}`,i=await n.es.get(`/openc3-api/storage/download_file/${encodeURIComponent(o)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"}})),i?.data?.contents?this.fileContent=atob(i.data.contents):this.fileContent="Error: Could not load file"}catch(t){this.fileContent=`Error: ${t.message||t}`}finally{this.loading=!1,this.updateEditor()}}}},g={class:"text-caption text-medium-emphasis font-weight-regular"};function C(t,o,i,y,r,s){const a=e.resolveComponent("v-spacer"),d=e.resolveComponent("v-btn"),l=e.resolveComponent("v-card-title"),c=e.resolveComponent("v-divider"),h=e.resolveComponent("v-card-text"),p=e.resolveComponent("v-card");return e.openBlock(),e.createBlock(p,{style:e.normalizeStyle(t.computedStyle)},{default:e.withCtx(()=>[e.createVNode(l,{class:"d-flex align-center pa-2"},{default:e.withCtx(()=>[e.createElementVNode("span",g,e.toDisplayString(r.filePath),1),e.createVNode(a),e.createVNode(d,{size:"x-small",icon:"mdi-refresh",variant:"text",loading:r.loading,onClick:s.fetchFile},null,8,["loading","onClick"])]),_:1}),e.createVNode(c),e.createVNode(h,{class:"pa-0"},{default:e.withCtx(()=>[e.createElementVNode("div",{ref:"editor",style:e.normalizeStyle(s.contentStyle)},null,4)]),_:1})]),_:1},8,["style"])}const v=u._export_sfc(_,[["render",C]]);exports.default=v;
2
- //# sourceMappingURL=FiledisplayWidget-B6XFz4P6.cjs.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DOidODWT.cjs"),n=require("./format-MMgAFAGt.cjs"),m=require("./Widget-a5Y50rAX.cjs"),e=require("vue"),u=require("./CustomIcon-8F08upeg.cjs"),_={mixins:[m.Widget],data(){return{filePath:"",fileContent:"Loading...",loading:!1,width:600,height:300,editor:null}},computed:{contentStyle(){return{width:this.width+"px",height:this.height+"px"}},aceMode(){const t=this.filePath.split(".").pop()?.toLowerCase();return{json:"ace/mode/json",rb:"ace/mode/ruby",py:"ace/mode/python",txt:"ace/mode/text"}[t]||"ace/mode/text"}},created(){this.parameters[0]&&(this.filePath=this.parameters[0]),this.parameters[1]&&(this.width=Number.parseInt(this.parameters[1])),this.parameters[2]&&(this.height=Number.parseInt(this.parameters[2]))},mounted(){this.editor=f.aceExports.edit(this.$refs.editor),this.editor.setTheme("ace/theme/twilight"),this.editor.setReadOnly(!0),this.editor.setShowPrintMargin(!1),this.editor.setHighlightActiveLine(!1),this.editor.renderer.setShowGutter(!1),this.editor.renderer.setScrollMargin(8,8,0,0),this.editor.renderer.setPadding(8),this.editor.setValue(this.fileContent,-1),this.filePath&&this.fetchFile()},beforeUnmount(){this.editor&&(this.editor.destroy(),this.editor.container.remove())},methods:{updateEditor(){this.editor&&(this.editor.session.setMode(this.aceMode),this.editor.setValue(this.fileContent,-1))},async fetchFile(){if(!this.filePath){this.fileContent='Error: No file path specified. Usage: FILEDISPLAY "TARGET/path/to/file.txt"',this.updateEditor();return}this.loading=!0;try{const t=window.openc3Scope||"DEFAULT";let o=`${t}/targets_modified/${this.filePath}`,i=await n.Fi.get(`/openc3-api/storage/download_file/${encodeURIComponent(o)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"},headers:{"Ignore-Errors":"404,500"}}).catch(()=>null);(!i||i.status===404)&&(o=`${t}/targets/${this.filePath}`,i=await n.Fi.get(`/openc3-api/storage/download_file/${encodeURIComponent(o)}`,{params:{bucket:"OPENC3_CONFIG_BUCKET"}})),i?.data?.contents?this.fileContent=atob(i.data.contents):this.fileContent="Error: Could not load file"}catch(t){this.fileContent=`Error: ${t.message||t}`}finally{this.loading=!1,this.updateEditor()}}}},g={class:"text-caption text-medium-emphasis font-weight-regular"};function C(t,o,i,y,r,s){const a=e.resolveComponent("v-spacer"),d=e.resolveComponent("v-btn"),l=e.resolveComponent("v-card-title"),c=e.resolveComponent("v-divider"),h=e.resolveComponent("v-card-text"),p=e.resolveComponent("v-card");return e.openBlock(),e.createBlock(p,{style:e.normalizeStyle(t.computedStyle)},{default:e.withCtx(()=>[e.createVNode(l,{class:"d-flex align-center pa-2"},{default:e.withCtx(()=>[e.createElementVNode("span",g,e.toDisplayString(r.filePath),1),e.createVNode(a),e.createVNode(d,{size:"x-small",icon:"mdi-refresh",variant:"text",loading:r.loading,onClick:s.fetchFile},null,8,["loading","onClick"])]),_:1}),e.createVNode(c),e.createVNode(h,{class:"pa-0"},{default:e.withCtx(()=>[e.createElementVNode("div",{ref:"editor",style:e.normalizeStyle(s.contentStyle)},null,4)]),_:1})]),_:1},8,["style"])}const v=u._export_sfc(_,[["render",C]]);exports.default=v;
2
+ //# sourceMappingURL=FiledisplayWidget-DZ186686.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FiledisplayWidget-B6XFz4P6.cjs","sources":["../src/widgets/FiledisplayWidget.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-card :style=\"computedStyle\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ filePath }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchFile\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-0\">\n <div ref=\"editor\" :style=\"contentStyle\"></div>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n filePath: '',\n fileContent: 'Loading...',\n loading: false,\n width: 600,\n height: 300,\n editor: null,\n }\n },\n computed: {\n contentStyle() {\n return {\n width: this.width + 'px',\n height: this.height + 'px',\n }\n },\n aceMode() {\n const ext = this.filePath.split('.').pop()?.toLowerCase()\n const modeMap = {\n json: 'ace/mode/json',\n rb: 'ace/mode/ruby',\n py: 'ace/mode/python',\n txt: 'ace/mode/text',\n }\n return modeMap[ext] || 'ace/mode/text'\n },\n },\n created() {\n // Parameter 0: File path (required) e.g. \"INST/procedures/test.txt\"\n // Parameter 1: Width (optional, default 600)\n // Parameter 2: Height (optional, default 300)\n if (this.parameters[0]) {\n this.filePath = this.parameters[0]\n }\n if (this.parameters[1]) {\n this.width = Number.parseInt(this.parameters[1])\n }\n if (this.parameters[2]) {\n this.height = Number.parseInt(this.parameters[2])\n }\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.setReadOnly(true)\n this.editor.setShowPrintMargin(false)\n this.editor.setHighlightActiveLine(false)\n this.editor.renderer.setShowGutter(false)\n this.editor.renderer.setScrollMargin(8, 8, 0, 0)\n this.editor.renderer.setPadding(8)\n this.editor.setValue(this.fileContent, -1)\n\n if (this.filePath) {\n this.fetchFile()\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n this.editor.container.remove()\n }\n },\n methods: {\n updateEditor() {\n if (this.editor) {\n this.editor.session.setMode(this.aceMode)\n this.editor.setValue(this.fileContent, -1)\n }\n },\n async fetchFile() {\n if (!this.filePath) {\n this.fileContent =\n 'Error: No file path specified. Usage: FILEDISPLAY \"TARGET/path/to/file.txt\"'\n this.updateEditor()\n return\n }\n this.loading = true\n try {\n const scope = window.openc3Scope || 'DEFAULT'\n // Try targets_modified first, then fall back to targets\n // Use Ignore-Errors header to suppress toast for expected 404/500\n let objectPath = `${scope}/targets_modified/${this.filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${this.filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n this.fileContent = atob(response.data.contents)\n } else {\n this.fileContent = 'Error: Could not load file'\n }\n } catch (error) {\n this.fileContent = `Error: ${error.message || error}`\n } finally {\n this.loading = false\n this.updateEditor()\n }\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ext","ace.edit","scope","objectPath","response","Api","error","_hoisted_1","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text"],"mappings":"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"}
1
+ {"version":3,"file":"FiledisplayWidget-DZ186686.cjs","sources":["../src/widgets/FiledisplayWidget.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-card :style=\"computedStyle\">\n <v-card-title class=\"d-flex align-center pa-2\">\n <span class=\"text-caption text-medium-emphasis font-weight-regular\">\n {{ filePath }}\n </span>\n <v-spacer />\n <v-btn\n size=\"x-small\"\n icon=\"mdi-refresh\"\n variant=\"text\"\n :loading=\"loading\"\n @click=\"fetchFile\"\n />\n </v-card-title>\n <v-divider />\n <v-card-text class=\"pa-0\">\n <div ref=\"editor\" :style=\"contentStyle\"></div>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport { Api } from '@openc3/js-common/services'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n filePath: '',\n fileContent: 'Loading...',\n loading: false,\n width: 600,\n height: 300,\n editor: null,\n }\n },\n computed: {\n contentStyle() {\n return {\n width: this.width + 'px',\n height: this.height + 'px',\n }\n },\n aceMode() {\n const ext = this.filePath.split('.').pop()?.toLowerCase()\n const modeMap = {\n json: 'ace/mode/json',\n rb: 'ace/mode/ruby',\n py: 'ace/mode/python',\n txt: 'ace/mode/text',\n }\n return modeMap[ext] || 'ace/mode/text'\n },\n },\n created() {\n // Parameter 0: File path (required) e.g. \"INST/procedures/test.txt\"\n // Parameter 1: Width (optional, default 600)\n // Parameter 2: Height (optional, default 300)\n if (this.parameters[0]) {\n this.filePath = this.parameters[0]\n }\n if (this.parameters[1]) {\n this.width = Number.parseInt(this.parameters[1])\n }\n if (this.parameters[2]) {\n this.height = Number.parseInt(this.parameters[2])\n }\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.setReadOnly(true)\n this.editor.setShowPrintMargin(false)\n this.editor.setHighlightActiveLine(false)\n this.editor.renderer.setShowGutter(false)\n this.editor.renderer.setScrollMargin(8, 8, 0, 0)\n this.editor.renderer.setPadding(8)\n this.editor.setValue(this.fileContent, -1)\n\n if (this.filePath) {\n this.fetchFile()\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n this.editor.container.remove()\n }\n },\n methods: {\n updateEditor() {\n if (this.editor) {\n this.editor.session.setMode(this.aceMode)\n this.editor.setValue(this.fileContent, -1)\n }\n },\n async fetchFile() {\n if (!this.filePath) {\n this.fileContent =\n 'Error: No file path specified. Usage: FILEDISPLAY \"TARGET/path/to/file.txt\"'\n this.updateEditor()\n return\n }\n this.loading = true\n try {\n const scope = window.openc3Scope || 'DEFAULT'\n // Try targets_modified first, then fall back to targets\n // Use Ignore-Errors header to suppress toast for expected 404/500\n let objectPath = `${scope}/targets_modified/${this.filePath}`\n let response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n {\n params: { bucket: 'OPENC3_CONFIG_BUCKET' },\n headers: { 'Ignore-Errors': '404,500' },\n },\n ).catch(() => null)\n\n if (!response || response.status === 404) {\n objectPath = `${scope}/targets/${this.filePath}`\n response = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(objectPath)}`,\n { params: { bucket: 'OPENC3_CONFIG_BUCKET' } },\n )\n }\n\n if (response?.data?.contents) {\n this.fileContent = atob(response.data.contents)\n } else {\n this.fileContent = 'Error: Could not load file'\n }\n } catch (error) {\n this.fileContent = `Error: ${error.message || error}`\n } finally {\n this.loading = false\n this.updateEditor()\n }\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ext","ace.edit","scope","objectPath","response","Api","error","_hoisted_1","_createBlock","_component_v_card","_ctx","_createVNode","_component_v_card_title","_createElementVNode","_toDisplayString","$data","_component_v_spacer","_component_v_btn","$options","_component_v_divider","_component_v_card_text"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { W as a } from "./Widget-BiaunQ83.js";
2
- import o from "./ValueWidget-B1OvCmXK.js";
1
+ import { W as a } from "./Widget-D_HaosJK.js";
2
+ import o from "./ValueWidget-B1aGUBP7.js";
3
3
  import { resolveComponent as n, openBlock as i, createElementBlock as m, normalizeStyle as p, createVNode as c, mergeProps as l } from "vue";
4
4
  import { _ as d } from "./CustomIcon-DTR361si.js";
5
5
  const t = 4, f = {
@@ -47,4 +47,4 @@ const N = /* @__PURE__ */ d(f, [["render", u]]);
47
47
  export {
48
48
  N as default
49
49
  };
50
- //# sourceMappingURL=FormatvalueWidget-DODmUWPH.js.map
50
+ //# sourceMappingURL=FormatvalueWidget-6-bj_PJO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormatvalueWidget-DODmUWPH.js","sources":["../src/widgets/FormatvalueWidget.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 ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"getParameters\"\n :settings=\"appliedSettings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :format-string=\"parameters[3]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\nimport Widget from './Widget'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n components: {\n ValueWidget,\n },\n mixins: [Widget],\n computed: {\n getParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[4],\n ]\n },\n },\n created() {\n this.setWidth(\n Number.parseInt(this.parameters[5]) + INPUT_PADDING,\n 'ch',\n 12 + INPUT_PADDING,\n )\n // Apply monospace font for hex/octal format strings so digits align\n const formatString = this.parameters[3]\n if (formatString && /%-?#?\\d*[xXo]/.test(formatString)) {\n this.appliedSettings.push(['RAW', 'font-family', 'monospace'])\n }\n },\n}\n</script>\n"],"names":["INPUT_PADDING","_sfc_main","ValueWidget","Widget","formatString","_createElementBlock","_ctx","_createVNode","_component_value_widget","_mergeProps","$options"],"mappings":";;;;AAiCA,MAAMA,IAAgB,GAIjBC,IAAU;AAAA,EACb,YAAY;AAAA,IACV,aAAAC;AAAA;EAEF,QAAQ,CAACC,CAAM;AAAA,EACf,UAAU;AAAA,IACR,gBAAgB;AACd,aAAO;AAAA,QACL,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,MACnB;AAAA,IACF;AAAA;EAEF,UAAU;AACR,SAAK;AAAA,MACH,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,IAAIH;AAAA,MACtC;AAAA,MACA,KAAKA;AAAA,IACP;AAEA,UAAMI,IAAe,KAAK,WAAW,CAAC;AACtC,IAAIA,KAAgB,gBAAgB,KAAKA,CAAY,KACnD,KAAK,gBAAgB,KAAK,CAAC,OAAO,eAAe,WAAW,CAAC;AAAA,EAEjE;AACF;;;cA9CEC,EASM,OAAA;AAAA,IATD,KAAI;AAAA,IAAY,OAAM;AAAA,IAAmB,SAAOC,EAAA,aAAa;AAAA;IAChEC,EAOEC,GAPFC,EACUH,EAAA,QAAM;AAAA,MACb,YAAYI,EAAA;AAAA,MACZ,UAAUJ,EAAA;AAAA,MACV,iBAAeA,EAAA;AAAA,MACf,oBAAkBA,EAAA;AAAA,MAClB,iBAAeA,EAAA,WAAU,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"FormatvalueWidget-6-bj_PJO.js","sources":["../src/widgets/FormatvalueWidget.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 ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"getParameters\"\n :settings=\"appliedSettings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :format-string=\"parameters[3]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\nimport Widget from './Widget'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n components: {\n ValueWidget,\n },\n mixins: [Widget],\n computed: {\n getParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[4],\n ]\n },\n },\n created() {\n this.setWidth(\n Number.parseInt(this.parameters[5]) + INPUT_PADDING,\n 'ch',\n 12 + INPUT_PADDING,\n )\n // Apply monospace font for hex/octal format strings so digits align\n const formatString = this.parameters[3]\n if (formatString && /%-?#?\\d*[xXo]/.test(formatString)) {\n this.appliedSettings.push(['RAW', 'font-family', 'monospace'])\n }\n },\n}\n</script>\n"],"names":["INPUT_PADDING","_sfc_main","ValueWidget","Widget","formatString","_createElementBlock","_ctx","_createVNode","_component_value_widget","_mergeProps","$options"],"mappings":";;;;AAiCA,MAAMA,IAAgB,GAIjBC,IAAU;AAAA,EACb,YAAY;AAAA,IACV,aAAAC;AAAA;EAEF,QAAQ,CAACC,CAAM;AAAA,EACf,UAAU;AAAA,IACR,gBAAgB;AACd,aAAO;AAAA,QACL,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,MACnB;AAAA,IACF;AAAA;EAEF,UAAU;AACR,SAAK;AAAA,MACH,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,IAAIH;AAAA,MACtC;AAAA,MACA,KAAKA;AAAA,IACP;AAEA,UAAMI,IAAe,KAAK,WAAW,CAAC;AACtC,IAAIA,KAAgB,gBAAgB,KAAKA,CAAY,KACnD,KAAK,gBAAgB,KAAK,CAAC,OAAO,eAAe,WAAW,CAAC;AAAA,EAEjE;AACF;;;cA9CEC,EASM,OAAA;AAAA,IATD,KAAI;AAAA,IAAY,OAAM;AAAA,IAAmB,SAAOC,EAAA,aAAa;AAAA;IAChEC,EAOEC,GAPFC,EACUH,EAAA,QAAM;AAAA,MACb,YAAYI,EAAA;AAAA,MACZ,UAAUJ,EAAA;AAAA,MACV,iBAAeA,EAAA;AAAA,MACf,oBAAkBA,EAAA;AAAA,MAClB,iBAAeA,EAAA,WAAU,CAAA;AAAA;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./Widget-D23R5IBP.cjs"),o=require("./ValueWidget-C3T9tAUT.cjs"),t=require("vue"),i=require("./CustomIcon-8F08upeg.cjs"),r=4,m={components:{ValueWidget:o.default},mixins:[n.Widget],computed:{getParameters(){return[this.parameters[0],this.parameters[1],this.parameters[2],this.parameters[4]]}},created(){this.setWidth(Number.parseInt(this.parameters[5])+r,"ch",12+r);const e=this.parameters[3];e&&/%-?#?\d*[xXo]/.test(e)&&this.appliedSettings.push(["RAW","font-family","monospace"])}};function c(e,p,u,d,g,s){const a=t.resolveComponent("value-widget");return t.openBlock(),t.createElementBlock("div",{ref:"container",class:"d-flex flex-row",style:t.normalizeStyle(e.computedStyle)},[t.createVNode(a,t.mergeProps(e.$attrs,{parameters:s.getParameters,settings:e.appliedSettings,"screen-values":e.screenValues,"screen-time-zone":e.screenTimeZone,"format-string":e.parameters[3]}),null,16,["parameters","settings","screen-values","screen-time-zone","format-string"])],4)}const l=i._export_sfc(m,[["render",c]]);exports.default=l;
2
- //# sourceMappingURL=FormatvalueWidget-DHHKnH8A.cjs.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./Widget-a5Y50rAX.cjs"),o=require("./ValueWidget-CuMPXR-z.cjs"),t=require("vue"),i=require("./CustomIcon-8F08upeg.cjs"),r=4,m={components:{ValueWidget:o.default},mixins:[n.Widget],computed:{getParameters(){return[this.parameters[0],this.parameters[1],this.parameters[2],this.parameters[4]]}},created(){this.setWidth(Number.parseInt(this.parameters[5])+r,"ch",12+r);const e=this.parameters[3];e&&/%-?#?\d*[xXo]/.test(e)&&this.appliedSettings.push(["RAW","font-family","monospace"])}};function c(e,p,u,d,g,s){const a=t.resolveComponent("value-widget");return t.openBlock(),t.createElementBlock("div",{ref:"container",class:"d-flex flex-row",style:t.normalizeStyle(e.computedStyle)},[t.createVNode(a,t.mergeProps(e.$attrs,{parameters:s.getParameters,settings:e.appliedSettings,"screen-values":e.screenValues,"screen-time-zone":e.screenTimeZone,"format-string":e.parameters[3]}),null,16,["parameters","settings","screen-values","screen-time-zone","format-string"])],4)}const l=i._export_sfc(m,[["render",c]]);exports.default=l;
2
+ //# sourceMappingURL=FormatvalueWidget-DYvEvnXQ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"FormatvalueWidget-DHHKnH8A.cjs","sources":["../src/widgets/FormatvalueWidget.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 ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"getParameters\"\n :settings=\"appliedSettings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :format-string=\"parameters[3]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\nimport Widget from './Widget'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n components: {\n ValueWidget,\n },\n mixins: [Widget],\n computed: {\n getParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[4],\n ]\n },\n },\n created() {\n this.setWidth(\n Number.parseInt(this.parameters[5]) + INPUT_PADDING,\n 'ch',\n 12 + INPUT_PADDING,\n )\n // Apply monospace font for hex/octal format strings so digits align\n const formatString = this.parameters[3]\n if (formatString && /%-?#?\\d*[xXo]/.test(formatString)) {\n this.appliedSettings.push(['RAW', 'font-family', 'monospace'])\n }\n },\n}\n</script>\n"],"names":["INPUT_PADDING","_sfc_main","ValueWidget","Widget","formatString","_createElementBlock","_ctx","_createVNode","_component_value_widget","_mergeProps","$options"],"mappings":"yNAiCMA,EAAgB,EAIjBC,EAAU,CACb,WAAY,aACVC,EAAAA,SAEF,OAAQ,CAACC,EAAAA,MAAM,EACf,SAAU,CACR,eAAgB,CACd,MAAO,CACL,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,CACnB,CACF,GAEF,SAAU,CACR,KAAK,SACH,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,EAAIH,EACtC,KACA,GAAKA,CACP,EAEA,MAAMI,EAAe,KAAK,WAAW,CAAC,EAClCA,GAAgB,gBAAgB,KAAKA,CAAY,GACnD,KAAK,gBAAgB,KAAK,CAAC,MAAO,cAAe,WAAW,CAAC,CAEjE,CACF,0FA9CEC,EAAAA,mBASM,MAAA,CATD,IAAI,YAAY,MAAM,kBAAmB,uBAAOC,EAAA,aAAa,IAChEC,EAAAA,YAOEC,EAPFC,aACUH,EAAA,OAAM,CACb,WAAYI,EAAA,cACZ,SAAUJ,EAAA,gBACV,gBAAeA,EAAA,aACf,mBAAkBA,EAAA,eAClB,gBAAeA,EAAA,WAAU,CAAA"}
1
+ {"version":3,"file":"FormatvalueWidget-DYvEvnXQ.cjs","sources":["../src/widgets/FormatvalueWidget.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 ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"getParameters\"\n :settings=\"appliedSettings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :format-string=\"parameters[3]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\nimport Widget from './Widget'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n components: {\n ValueWidget,\n },\n mixins: [Widget],\n computed: {\n getParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[4],\n ]\n },\n },\n created() {\n this.setWidth(\n Number.parseInt(this.parameters[5]) + INPUT_PADDING,\n 'ch',\n 12 + INPUT_PADDING,\n )\n // Apply monospace font for hex/octal format strings so digits align\n const formatString = this.parameters[3]\n if (formatString && /%-?#?\\d*[xXo]/.test(formatString)) {\n this.appliedSettings.push(['RAW', 'font-family', 'monospace'])\n }\n },\n}\n</script>\n"],"names":["INPUT_PADDING","_sfc_main","ValueWidget","Widget","formatString","_createElementBlock","_ctx","_createVNode","_component_value_widget","_mergeProps","$options"],"mappings":"yNAiCMA,EAAgB,EAIjBC,EAAU,CACb,WAAY,aACVC,EAAAA,SAEF,OAAQ,CAACC,EAAAA,MAAM,EACf,SAAU,CACR,eAAgB,CACd,MAAO,CACL,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,CACnB,CACF,GAEF,SAAU,CACR,KAAK,SACH,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,EAAIH,EACtC,KACA,GAAKA,CACP,EAEA,MAAMI,EAAe,KAAK,WAAW,CAAC,EAClCA,GAAgB,gBAAgB,KAAKA,CAAY,GACnD,KAAK,gBAAgB,KAAK,CAAC,MAAO,cAAe,WAAW,CAAC,CAEjE,CACF,0FA9CEC,EAAAA,mBASM,MAAA,CATD,IAAI,YAAY,MAAM,kBAAmB,uBAAOC,EAAA,aAAa,IAChEC,EAAAA,YAOEC,EAPFC,aACUH,EAAA,OAAM,CACb,WAAYI,EAAA,cACZ,SAAUJ,EAAA,gBACV,gBAAeA,EAAA,aACf,mBAAkBA,EAAA,eAClB,gBAAeA,EAAA,WAAU,CAAA"}
@@ -1,11 +1,11 @@
1
- import { T as j } from "./timeFilters-BjNif-pu.js";
2
- import { t as q, i as W, j as Z, v as $ } from "./format-BJTVXrSU.js";
3
- import { O as ee } from "./OpenC3TimePicker-WVlNQdKk.js";
4
- import { T as te } from "./TargetPacketItemChooser-QPHy-p2u.js";
1
+ import { T as j } from "./timeFilters-a8Cma3bj.js";
2
+ import { v as q, k as W, s as Z, $ } from "./format-mcuVCYue.js";
3
+ import { O as ee } from "./OpenC3TimePicker-B0lAIU91.js";
4
+ import { T as te } from "./TargetPacketItemChooser-DDHuygCl.js";
5
5
  import { resolveComponent as d, openBlock as g, createBlock as x, withKeys as X, withCtx as l, createVNode as s, createElementVNode as b, createTextVNode as f, createElementBlock as N, Fragment as J, renderList as ie, createCommentVNode as A, toDisplayString as S, withModifiers as K, withDirectives as P, normalizeClass as se, vShow as G, mergeProps as ae, normalizeProps as le, guardReactiveProps as ne } from "vue";
6
- import { b as re, u as C } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-C6eLx1ow.js";
6
+ import { c as re, u as C } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-JHbHqvBt.js";
7
7
  import { _ as H } from "./CustomIcon-DTR361si.js";
8
- import { p as B } from "./parse-BDajhNCa.js";
8
+ import { p as B } from "./parse-tBX2kWMh.js";
9
9
  import { u as oe } from "./store-CO68rDJT.js";
10
10
  const de = {
11
11
  components: {
@@ -1671,7 +1671,7 @@ const De = /* @__PURE__ */ H(ve, [["render", be]]), R = "__time", Ie = 10, Te =
1671
1671
  });
1672
1672
  this.subscription && (this.subscribeTime = performance.now(), this.emptyDataNotified = !1, OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(
1673
1673
  (r) => {
1674
- r && OpenC3Auth.setTokens(), this.subscription.perform("add", {
1674
+ r && OpenC3Auth.setTokens(), this.subscription?.perform("add", {
1675
1675
  scope: window.openc3Scope,
1676
1676
  token: localStorage.openc3Token,
1677
1677
  items: i,
@@ -2266,10 +2266,10 @@ function Ce(t, e, i, r, a, n) {
2266
2266
  ], 512))
2267
2267
  ]);
2268
2268
  }
2269
- const Re = /* @__PURE__ */ H(Te, [["render", Ce], ["__scopeId", "data-v-f68caa94"]]);
2269
+ const Re = /* @__PURE__ */ H(Te, [["render", Ce], ["__scopeId", "data-v-893a7598"]]);
2270
2270
  export {
2271
2271
  Re as G,
2272
2272
  ge as a,
2273
2273
  De as b
2274
2274
  };
2275
- //# sourceMappingURL=Graph-Cwghj5Pc.js.map
2275
+ //# sourceMappingURL=Graph-Cz0Ns1FD.js.map