@openc3/vue-common 6.10.2 → 6.10.4

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 (545) hide show
  1. package/dist/{ArrayWidget-ByKRAWXn.cjs → ArrayWidget-CIMbQsGW.cjs} +3 -3
  2. package/dist/{ArrayWidget-ByKRAWXn.cjs.map → ArrayWidget-CIMbQsGW.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-CR7Wpw3N.js → ArrayWidget-DfiusKpM.js} +11 -11
  4. package/dist/{ArrayWidget-CR7Wpw3N.js.map → ArrayWidget-DfiusKpM.js.map} +1 -1
  5. package/dist/{ArrayplotWidget-Cty7KQ_h.cjs → ArrayplotWidget-DrrqqJEu.cjs} +2 -2
  6. package/dist/{ArrayplotWidget-Cty7KQ_h.cjs.map → ArrayplotWidget-DrrqqJEu.cjs.map} +1 -1
  7. package/dist/{ArrayplotWidget-DDEd-jRJ.js → ArrayplotWidget-DsvOovu9.js} +4 -4
  8. package/dist/{ArrayplotWidget-DDEd-jRJ.js.map → ArrayplotWidget-DsvOovu9.js.map} +1 -1
  9. package/dist/BarColumn-CWgcL5w1.cjs +2 -0
  10. package/dist/BarColumn-CWgcL5w1.cjs.map +1 -0
  11. package/dist/{BarColumn-XWs-3Cwb.js → BarColumn-DHHJBR3V.js} +11 -11
  12. package/dist/BarColumn-DHHJBR3V.js.map +1 -0
  13. package/dist/{BlockWidget-BDzoqpxO.cjs → BlockWidget-7Ecn_42c.cjs} +3 -3
  14. package/dist/{BlockWidget-BDzoqpxO.cjs.map → BlockWidget-7Ecn_42c.cjs.map} +1 -1
  15. package/dist/{BlockWidget-CfFgdNSv.js → BlockWidget-BdYXWS_0.js} +14 -14
  16. package/dist/{BlockWidget-CfFgdNSv.js.map → BlockWidget-BdYXWS_0.js.map} +1 -1
  17. package/dist/{ButtonWidget-BBMDS_YF.cjs → ButtonWidget-DFxBj0MG.cjs} +3 -3
  18. package/dist/ButtonWidget-DFxBj0MG.cjs.map +1 -0
  19. package/dist/{ButtonWidget-BaSvtElA.js → ButtonWidget-zpSJmiQT.js} +15 -15
  20. package/dist/ButtonWidget-zpSJmiQT.js.map +1 -0
  21. package/dist/{CanvasWidget-CFNpgqfW.cjs → CanvasWidget-C5-iZ-YT.cjs} +2 -2
  22. package/dist/{CanvasWidget-CFNpgqfW.cjs.map → CanvasWidget-C5-iZ-YT.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-DcwDi5Zk.js → CanvasWidget-DaUB1G9X.js} +4 -4
  24. package/dist/{CanvasWidget-DcwDi5Zk.js.map → CanvasWidget-DaUB1G9X.js.map} +1 -1
  25. package/dist/{CanvasdotWidget--awMOWyz.js → CanvasdotWidget-C255aTVc.js} +3 -3
  26. package/dist/{CanvasdotWidget--awMOWyz.js.map → CanvasdotWidget-C255aTVc.js.map} +1 -1
  27. package/dist/{CanvasdotWidget-BZ9TrTvw.cjs → CanvasdotWidget-CCrgS1yO.cjs} +2 -2
  28. package/dist/{CanvasdotWidget-BZ9TrTvw.cjs.map → CanvasdotWidget-CCrgS1yO.cjs.map} +1 -1
  29. package/dist/CanvasimageWidget-B2Mm0dYq.cjs +2 -0
  30. package/dist/CanvasimageWidget-B2Mm0dYq.cjs.map +1 -0
  31. package/dist/{CanvasimageWidget-YP1pCtvb.js → CanvasimageWidget-CFlUUFqr.js} +8 -7
  32. package/dist/CanvasimageWidget-CFlUUFqr.js.map +1 -0
  33. package/dist/CanvasimagevalueWidget-B1xVa3FB.cjs +2 -0
  34. package/dist/CanvasimagevalueWidget-B1xVa3FB.cjs.map +1 -0
  35. package/dist/{CanvasimagevalueWidget-CjVHb2uj.js → CanvasimagevalueWidget-s4gR3fo5.js} +5 -4
  36. package/dist/CanvasimagevalueWidget-s4gR3fo5.js.map +1 -0
  37. package/dist/{CanvaslabelWidget-Dw1YmiY0.cjs → CanvaslabelWidget-CAtE3qq_.cjs} +2 -2
  38. package/dist/{CanvaslabelWidget-Dw1YmiY0.cjs.map → CanvaslabelWidget-CAtE3qq_.cjs.map} +1 -1
  39. package/dist/{CanvaslabelWidget-DoMplTTO.js → CanvaslabelWidget-CaOc-lTQ.js} +3 -3
  40. package/dist/{CanvaslabelWidget-DoMplTTO.js.map → CanvaslabelWidget-CaOc-lTQ.js.map} +1 -1
  41. package/dist/CanvaslabelvalueWidget-CvVMrZsu.cjs +2 -0
  42. package/dist/CanvaslabelvalueWidget-CvVMrZsu.cjs.map +1 -0
  43. package/dist/{CanvaslabelvalueWidget-Dyo_ogHn.js → CanvaslabelvalueWidget-hqJoPekq.js} +4 -3
  44. package/dist/CanvaslabelvalueWidget-hqJoPekq.js.map +1 -0
  45. package/dist/{CanvaslineWidget-tm194dw1.cjs → CanvaslineWidget-CjPnyDod.cjs} +2 -2
  46. package/dist/{CanvaslineWidget-tm194dw1.cjs.map → CanvaslineWidget-CjPnyDod.cjs.map} +1 -1
  47. package/dist/{CanvaslineWidget-D7W1TIxm.js → CanvaslineWidget-DebP2L43.js} +3 -3
  48. package/dist/{CanvaslineWidget-D7W1TIxm.js.map → CanvaslineWidget-DebP2L43.js.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-BOZyJuLE.js → CanvaslinevalueWidget-BkPG5Vtx.js} +11 -10
  50. package/dist/CanvaslinevalueWidget-BkPG5Vtx.js.map +1 -0
  51. package/dist/CanvaslinevalueWidget-Caadjtan.cjs +2 -0
  52. package/dist/CanvaslinevalueWidget-Caadjtan.cjs.map +1 -0
  53. package/dist/CheckbuttonWidget-CEOWZkt6.cjs +2 -0
  54. package/dist/{CheckbuttonWidget-BSvTWD3x.cjs.map → CheckbuttonWidget-CEOWZkt6.cjs.map} +1 -1
  55. package/dist/{CheckbuttonWidget-B1E4BC6v.js → CheckbuttonWidget-eQIcPATf.js} +6 -6
  56. package/dist/{CheckbuttonWidget-B1E4BC6v.js.map → CheckbuttonWidget-eQIcPATf.js.map} +1 -1
  57. package/dist/{ClassificationBanners-CzZoKcRy.cjs → ClassificationBanners--l3qMxLo.cjs} +2 -2
  58. package/dist/{ClassificationBanners-CzZoKcRy.cjs.map → ClassificationBanners--l3qMxLo.cjs.map} +1 -1
  59. package/dist/{ClassificationBanners-DQeVwmYp.js → ClassificationBanners-CFLQaZJ2.js} +2 -2
  60. package/dist/{ClassificationBanners-DQeVwmYp.js.map → ClassificationBanners-CFLQaZJ2.js.map} +1 -1
  61. package/dist/{ComboboxWidget-BExUBH57.js → ComboboxWidget-B5kzYxFk.js} +6 -6
  62. package/dist/{ComboboxWidget-BExUBH57.js.map → ComboboxWidget-B5kzYxFk.js.map} +1 -1
  63. package/dist/ComboboxWidget-BSs59QzI.cjs +2 -0
  64. package/dist/{ComboboxWidget-B_KAnIVB.cjs.map → ComboboxWidget-BSs59QzI.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-BtzhxuZi.js → CriticalCmdDialog-BYHZbX2w.js} +62 -52
  66. package/dist/CriticalCmdDialog-BYHZbX2w.js.map +1 -0
  67. package/dist/CriticalCmdDialog-BhjiJIo5.cjs +2 -0
  68. package/dist/CriticalCmdDialog-BhjiJIo5.cjs.map +1 -0
  69. package/dist/{CustomIcon-DTfsnDJn.js → CustomIcon-B9m73Gqm.js} +5 -4
  70. package/dist/{CustomIcon-DTfsnDJn.js.map → CustomIcon-B9m73Gqm.js.map} +1 -1
  71. package/dist/CustomIcon-CEc927h0.cjs +2 -0
  72. package/dist/{CustomIcon-eie3rPKh.cjs.map → CustomIcon-CEc927h0.cjs.map} +1 -1
  73. package/dist/{DateWidget-_ZmPsi2l.js → DateWidget-1IZOe50K.js} +3 -3
  74. package/dist/{DateWidget-_ZmPsi2l.js.map → DateWidget-1IZOe50K.js.map} +1 -1
  75. package/dist/{DateWidget-kTJBAHVp.cjs → DateWidget-DkVxE7Xj.cjs} +2 -2
  76. package/dist/{DateWidget-kTJBAHVp.cjs.map → DateWidget-DkVxE7Xj.cjs.map} +1 -1
  77. package/dist/{DetailsDialog-Bq7SS7bc.js → DetailsDialog-D-rjL4oc.js} +130 -100
  78. package/dist/DetailsDialog-D-rjL4oc.js.map +1 -0
  79. package/dist/DetailsDialog-lJG8eclU.cjs +2 -0
  80. package/dist/DetailsDialog-lJG8eclU.cjs.map +1 -0
  81. package/dist/DynamicWidget-C4V2H2VJ.cjs +2 -0
  82. package/dist/DynamicWidget-C4V2H2VJ.cjs.map +1 -0
  83. package/dist/{DynamicWidget-DHL7pbgW.js → DynamicWidget-DEHWYr8i.js} +7 -7
  84. package/dist/DynamicWidget-DEHWYr8i.js.map +1 -0
  85. package/dist/EventListDialog-5UXvnmNE.cjs +2 -0
  86. package/dist/EventListDialog-5UXvnmNE.cjs.map +1 -0
  87. package/dist/{EventListDialog-jdNF3szO.js → EventListDialog-Id3rEQKY.js} +242 -242
  88. package/dist/EventListDialog-Id3rEQKY.js.map +1 -0
  89. package/dist/FilechecksumWidget-D-5GSjyV.cjs +2 -0
  90. package/dist/FilechecksumWidget-D-5GSjyV.cjs.map +1 -0
  91. package/dist/FilechecksumWidget-F_FX1Kjx.js +158 -0
  92. package/dist/FilechecksumWidget-F_FX1Kjx.js.map +1 -0
  93. package/dist/FiledisplayWidget-BF3G22jF.js +114 -0
  94. package/dist/FiledisplayWidget-BF3G22jF.js.map +1 -0
  95. package/dist/FiledisplayWidget-BHLOY_cM.cjs +2 -0
  96. package/dist/FiledisplayWidget-BHLOY_cM.cjs.map +1 -0
  97. package/dist/{FormatvalueWidget-4C0vrL2i.js → FormatvalueWidget-BkF9iiHs.js} +4 -4
  98. package/dist/{FormatvalueWidget-4C0vrL2i.js.map → FormatvalueWidget-BkF9iiHs.js.map} +1 -1
  99. package/dist/{FormatvalueWidget-CVoJgFJA.cjs → FormatvalueWidget-DTsP7isW.cjs} +2 -2
  100. package/dist/{FormatvalueWidget-CVoJgFJA.cjs.map → FormatvalueWidget-DTsP7isW.cjs.map} +1 -1
  101. package/dist/{Graph-B7KPo9Ul.js → Graph-C-7C2Jq5.js} +194 -187
  102. package/dist/Graph-C-7C2Jq5.js.map +1 -0
  103. package/dist/Graph-YYieRGo0.cjs +2 -0
  104. package/dist/Graph-YYieRGo0.cjs.map +1 -0
  105. package/dist/{GraphWidget-D3HueIZi.cjs → GraphWidget-C7hqdqL-.cjs} +2 -2
  106. package/dist/{GraphWidget-D3HueIZi.cjs.map → GraphWidget-C7hqdqL-.cjs.map} +1 -1
  107. package/dist/{GraphWidget-BpkPpAbd.js → GraphWidget-DRkDn8za.js} +2 -2
  108. package/dist/{GraphWidget-BpkPpAbd.js.map → GraphWidget-DRkDn8za.js.map} +1 -1
  109. package/dist/HorizontalWidget-DB64wzZB.js +69 -0
  110. package/dist/HorizontalWidget-DB64wzZB.js.map +1 -0
  111. package/dist/HorizontalWidget-h-U8i3G-.cjs +2 -0
  112. package/dist/HorizontalWidget-h-U8i3G-.cjs.map +1 -0
  113. package/dist/{HorizontalboxWidget-CTomf_Iy.js → HorizontalboxWidget-BsHsGlvK.js} +6 -6
  114. package/dist/{HorizontalboxWidget-CTomf_Iy.js.map → HorizontalboxWidget-BsHsGlvK.js.map} +1 -1
  115. package/dist/{HorizontalboxWidget-ysq7slso.cjs → HorizontalboxWidget-E4LUf2eN.cjs} +2 -2
  116. package/dist/{HorizontalboxWidget-ysq7slso.cjs.map → HorizontalboxWidget-E4LUf2eN.cjs.map} +1 -1
  117. package/dist/{HorizontallineWidget-B7xx7ofY.js → HorizontallineWidget-CyiexzIu.js} +3 -3
  118. package/dist/{HorizontallineWidget-B7xx7ofY.js.map → HorizontallineWidget-CyiexzIu.js.map} +1 -1
  119. package/dist/{HorizontallineWidget-BgXZZymr.cjs → HorizontallineWidget-LibmHnAf.cjs} +2 -2
  120. package/dist/{HorizontallineWidget-BgXZZymr.cjs.map → HorizontallineWidget-LibmHnAf.cjs.map} +1 -1
  121. package/dist/{IframeWidget-DK7rbULe.js → IframeWidget-D9Vh0w2c.js} +3 -3
  122. package/dist/{IframeWidget-DK7rbULe.js.map → IframeWidget-D9Vh0w2c.js.map} +1 -1
  123. package/dist/{IframeWidget-fV9e-Nm1.cjs → IframeWidget-xeXTxP_G.cjs} +2 -2
  124. package/dist/{IframeWidget-fV9e-Nm1.cjs.map → IframeWidget-xeXTxP_G.cjs.map} +1 -1
  125. package/dist/{ImageLoader-C9rN_pSY.js → ImageLoader-B4iBPFyi.js} +2 -2
  126. package/dist/{ImageLoader-C9rN_pSY.js.map → ImageLoader-B4iBPFyi.js.map} +1 -1
  127. package/dist/{ImageLoader-CJxiBXAL.cjs → ImageLoader-Cc4-BNJv.cjs} +2 -2
  128. package/dist/{ImageLoader-CJxiBXAL.cjs.map → ImageLoader-Cc4-BNJv.cjs.map} +1 -1
  129. package/dist/{ImageviewerWidget-6d6Kl3W_.js → ImageviewerWidget-DqV4SClv.js} +10 -9
  130. package/dist/ImageviewerWidget-DqV4SClv.js.map +1 -0
  131. package/dist/ImageviewerWidget-KVt487SJ.cjs +2 -0
  132. package/dist/ImageviewerWidget-KVt487SJ.cjs.map +1 -0
  133. package/dist/{InterfacesTab-BCqTanhV.js → InterfacesTab-C310FRIP.js} +4 -4
  134. package/dist/{InterfacesTab-BCqTanhV.js.map → InterfacesTab-C310FRIP.js.map} +1 -1
  135. package/dist/{InterfacesTab-0pmK3KNu.cjs → InterfacesTab-nZwg-ByS.cjs} +2 -2
  136. package/dist/{InterfacesTab-0pmK3KNu.cjs.map → InterfacesTab-nZwg-ByS.cjs.map} +1 -1
  137. package/dist/{LabelWidget-D71FfOSw.js → LabelWidget-BDukcPet.js} +3 -3
  138. package/dist/{LabelWidget-D71FfOSw.js.map → LabelWidget-BDukcPet.js.map} +1 -1
  139. package/dist/{LabelWidget-DdZz2NWv.cjs → LabelWidget-DYfv4K8h.cjs} +2 -2
  140. package/dist/{LabelWidget-DdZz2NWv.cjs.map → LabelWidget-DYfv4K8h.cjs.map} +1 -1
  141. package/dist/{LabelledWidget-BZ319slb.cjs → LabelledWidget-Dl1x6b3p.cjs} +2 -2
  142. package/dist/{LabelledWidget-BZ319slb.cjs.map → LabelledWidget-Dl1x6b3p.cjs.map} +1 -1
  143. package/dist/{LabelledWidget-D2ir5kVU.js → LabelledWidget-tVHE426s.js} +6 -6
  144. package/dist/{LabelledWidget-D2ir5kVU.js.map → LabelledWidget-tVHE426s.js.map} +1 -1
  145. package/dist/{LabelprogressbarWidget-C4_YbROz.js → LabelprogressbarWidget-CjMDFUUv.js} +6 -6
  146. package/dist/{LabelprogressbarWidget-C4_YbROz.js.map → LabelprogressbarWidget-CjMDFUUv.js.map} +1 -1
  147. package/dist/{LabelprogressbarWidget-LyevJNuz.cjs → LabelprogressbarWidget-DcO0gRM4.cjs} +2 -2
  148. package/dist/{LabelprogressbarWidget-LyevJNuz.cjs.map → LabelprogressbarWidget-DcO0gRM4.cjs.map} +1 -1
  149. package/dist/LabelsparklineWidget-Cp2a-qlI.cjs +2 -0
  150. package/dist/LabelsparklineWidget-Cp2a-qlI.cjs.map +1 -0
  151. package/dist/{LabelsparklineWidget-CdZ_pM2B.js → LabelsparklineWidget-dZl3cGu0.js} +13 -13
  152. package/dist/LabelsparklineWidget-dZl3cGu0.js.map +1 -0
  153. package/dist/{LabelvalueWidget-DSHwAKma.cjs → LabelvalueWidget-CgP4mzP_.cjs} +2 -2
  154. package/dist/{LabelvalueWidget-DSHwAKma.cjs.map → LabelvalueWidget-CgP4mzP_.cjs.map} +1 -1
  155. package/dist/{LabelvalueWidget-BS0EPY5h.js → LabelvalueWidget-UcAc_2Ry.js} +6 -6
  156. package/dist/{LabelvalueWidget-BS0EPY5h.js.map → LabelvalueWidget-UcAc_2Ry.js.map} +1 -1
  157. package/dist/{LabelvaluedescWidget-3lwQxkKj.cjs → LabelvaluedescWidget-CXJ037Qs.cjs} +2 -2
  158. package/dist/{LabelvaluedescWidget-3lwQxkKj.cjs.map → LabelvaluedescWidget-CXJ037Qs.cjs.map} +1 -1
  159. package/dist/{LabelvaluedescWidget-Cpr8_Voq.js → LabelvaluedescWidget-Crb8udVe.js} +6 -6
  160. package/dist/{LabelvaluedescWidget-Cpr8_Voq.js.map → LabelvaluedescWidget-Crb8udVe.js.map} +1 -1
  161. package/dist/{LabelvaluelimitsbarWidget-DbO_Q5ex.cjs → LabelvaluelimitsbarWidget-B3cn7i50.cjs} +2 -2
  162. package/dist/LabelvaluelimitsbarWidget-B3cn7i50.cjs.map +1 -0
  163. package/dist/{LabelvaluelimitsbarWidget-DTcYbEQS.js → LabelvaluelimitsbarWidget-BZGUQrRt.js} +10 -10
  164. package/dist/LabelvaluelimitsbarWidget-BZGUQrRt.js.map +1 -0
  165. package/dist/LabelvaluelimitscolumnWidget-DbBOkQ8R.cjs +2 -0
  166. package/dist/LabelvaluelimitscolumnWidget-DbBOkQ8R.cjs.map +1 -0
  167. package/dist/{LabelvaluelimitscolumnWidget-D0ltQ9Ta.js → LabelvaluelimitscolumnWidget-NNYW2aMO.js} +12 -12
  168. package/dist/LabelvaluelimitscolumnWidget-NNYW2aMO.js.map +1 -0
  169. package/dist/{LabelvaluerangebarWidget-B6_alHq4.cjs → LabelvaluerangebarWidget-B81fLpK0.cjs} +2 -2
  170. package/dist/{LabelvaluerangebarWidget-B6_alHq4.cjs.map → LabelvaluerangebarWidget-B81fLpK0.cjs.map} +1 -1
  171. package/dist/{LabelvaluerangebarWidget-O8IHjvHs.js → LabelvaluerangebarWidget-CjkVDlVJ.js} +6 -6
  172. package/dist/{LabelvaluerangebarWidget-O8IHjvHs.js.map → LabelvaluerangebarWidget-CjkVDlVJ.js.map} +1 -1
  173. package/dist/Layout-FpBx3iic.js +36 -0
  174. package/dist/Layout-FpBx3iic.js.map +1 -0
  175. package/dist/Layout-K7_I6jMV.cjs +2 -0
  176. package/dist/Layout-K7_I6jMV.cjs.map +1 -0
  177. package/dist/{LedWidget-DUvJ2v8k.js → LedWidget-Bsp1aja-.js} +46 -39
  178. package/dist/LedWidget-Bsp1aja-.js.map +1 -0
  179. package/dist/LedWidget-C19KREVz.cjs +2 -0
  180. package/dist/LedWidget-C19KREVz.cjs.map +1 -0
  181. package/dist/LimitsBar-IVv8t4FE.js +134 -0
  182. package/dist/LimitsBar-IVv8t4FE.js.map +1 -0
  183. package/dist/LimitsBar-LRiUSWd7.cjs +2 -0
  184. package/dist/LimitsBar-LRiUSWd7.cjs.map +1 -0
  185. package/dist/LimitsbarWidget-BFjMhTbA.cjs +2 -0
  186. package/dist/LimitsbarWidget-BFjMhTbA.cjs.map +1 -0
  187. package/dist/LimitsbarWidget-Bo1JAoQp.js +65 -0
  188. package/dist/LimitsbarWidget-Bo1JAoQp.js.map +1 -0
  189. package/dist/LimitscolorWidget-D214kS86.cjs +2 -0
  190. package/dist/LimitscolorWidget-D214kS86.cjs.map +1 -0
  191. package/dist/{LimitscolorWidget-FXT0ZPPH.js → LimitscolorWidget-Doq8h_g1.js} +14 -13
  192. package/dist/LimitscolorWidget-Doq8h_g1.js.map +1 -0
  193. package/dist/{LimitscolumnWidget-C5yozwf0.cjs → LimitscolumnWidget-BREF_CBr.cjs} +2 -2
  194. package/dist/{LimitscolumnWidget-C5yozwf0.cjs.map → LimitscolumnWidget-BREF_CBr.cjs.map} +1 -1
  195. package/dist/{LimitscolumnWidget-CjBy-CCI.js → LimitscolumnWidget-qasXHN7m.js} +3 -3
  196. package/dist/{LimitscolumnWidget-CjBy-CCI.js.map → LimitscolumnWidget-qasXHN7m.js.map} +1 -1
  197. package/dist/{LinegraphWidget-lmu_tFKd.js → LinegraphWidget-BNMqcr_r.js} +5 -5
  198. package/dist/{LinegraphWidget-lmu_tFKd.js.map → LinegraphWidget-BNMqcr_r.js.map} +1 -1
  199. package/dist/{LinegraphWidget-dO_B0T3E.cjs → LinegraphWidget-BhpYKxnT.cjs} +2 -2
  200. package/dist/{LinegraphWidget-dO_B0T3E.cjs.map → LinegraphWidget-BhpYKxnT.cjs.map} +1 -1
  201. package/dist/MatrixbycolumnsWidget-BKXkhATe.cjs +2 -0
  202. package/dist/MatrixbycolumnsWidget-BKXkhATe.cjs.map +1 -0
  203. package/dist/MatrixbycolumnsWidget-BlF1CyIT.js +83 -0
  204. package/dist/MatrixbycolumnsWidget-BlF1CyIT.js.map +1 -0
  205. package/dist/MicroservicesTab-BWFwBSuf.cjs +2 -0
  206. package/dist/MicroservicesTab-BWFwBSuf.cjs.map +1 -0
  207. package/dist/MicroservicesTab-xpDXKoa-.js +203 -0
  208. package/dist/MicroservicesTab-xpDXKoa-.js.map +1 -0
  209. package/dist/OpenC3TimePicker-6pE8gGCO.cjs +2 -0
  210. package/dist/OpenC3TimePicker-6pE8gGCO.cjs.map +1 -0
  211. package/dist/OpenC3TimePicker-D-_qqySI.js +219 -0
  212. package/dist/OpenC3TimePicker-D-_qqySI.js.map +1 -0
  213. package/dist/{Openc3Screen-DcIIUO63.js → Openc3Screen-DYJHNotN.js} +730 -510
  214. package/dist/Openc3Screen-DYJHNotN.js.map +1 -0
  215. package/dist/Openc3Screen-Pu1ktpS8.cjs +6 -0
  216. package/dist/Openc3Screen-Pu1ktpS8.cjs.map +1 -0
  217. package/dist/OutputDialog-BwEWPQW9.cjs +2 -0
  218. package/dist/OutputDialog-BwEWPQW9.cjs.map +1 -0
  219. package/dist/{OutputDialog-CNH74LpJ.js → OutputDialog-x4QZFAWe.js} +24 -17
  220. package/dist/OutputDialog-x4QZFAWe.js.map +1 -0
  221. package/dist/{PackagesTab-PEPT4CQu.cjs → PackagesTab-CHwfaqdP.cjs} +2 -2
  222. package/dist/{PackagesTab-PEPT4CQu.cjs.map → PackagesTab-CHwfaqdP.cjs.map} +1 -1
  223. package/dist/{PackagesTab-BE6W7Aru.js → PackagesTab-rzc4hqOb.js} +4 -4
  224. package/dist/{PackagesTab-BE6W7Aru.js.map → PackagesTab-rzc4hqOb.js.map} +1 -1
  225. package/dist/{PluginsTab-DXf9zX0h.cjs → PluginsTab-C7gLbRQn.cjs} +2 -2
  226. package/dist/PluginsTab-C7gLbRQn.cjs.map +1 -0
  227. package/dist/{PluginsTab-B_Pf2A9c.js → PluginsTab-Dff_0j26.js} +8 -8
  228. package/dist/PluginsTab-Dff_0j26.js.map +1 -0
  229. package/dist/{ProgressbarWidget-B5WN658S.js → ProgressbarWidget-DQ80NANH.js} +7 -5
  230. package/dist/ProgressbarWidget-DQ80NANH.js.map +1 -0
  231. package/dist/ProgressbarWidget-cQAtX_Q7.cjs +2 -0
  232. package/dist/ProgressbarWidget-cQAtX_Q7.cjs.map +1 -0
  233. package/dist/RadiobuttonWidget-DFrUZRaV.cjs +2 -0
  234. package/dist/{RadiobuttonWidget-DkG9GtAy.cjs.map → RadiobuttonWidget-DFrUZRaV.cjs.map} +1 -1
  235. package/dist/{RadiobuttonWidget-B_3nys46.js → RadiobuttonWidget-LD18M4IQ.js} +11 -10
  236. package/dist/{RadiobuttonWidget-B_3nys46.js.map → RadiobuttonWidget-LD18M4IQ.js.map} +1 -1
  237. package/dist/{RadiogroupWidget-BiMIL9li.js → RadiogroupWidget-D_pt2MPz.js} +6 -6
  238. package/dist/{RadiogroupWidget-BiMIL9li.js.map → RadiogroupWidget-D_pt2MPz.js.map} +1 -1
  239. package/dist/{RadiogroupWidget-BnUjXU28.cjs → RadiogroupWidget-ljP05k3g.cjs} +2 -2
  240. package/dist/{RadiogroupWidget-BnUjXU28.cjs.map → RadiogroupWidget-ljP05k3g.cjs.map} +1 -1
  241. package/dist/RangebarWidget-BsLWXvTo.cjs +2 -0
  242. package/dist/RangebarWidget-BsLWXvTo.cjs.map +1 -0
  243. package/dist/{RangebarWidget-Dn0GASdi.js → RangebarWidget-DhaWpHjB.js} +12 -11
  244. package/dist/RangebarWidget-DhaWpHjB.js.map +1 -0
  245. package/dist/{RedisTab-BsKrL4fD.js → RedisTab-C3yjh0JX.js} +3 -3
  246. package/dist/{RedisTab-BsKrL4fD.js.map → RedisTab-C3yjh0JX.js.map} +1 -1
  247. package/dist/{RedisTab-C1yaDRSt.cjs → RedisTab-DEKMLop2.cjs} +2 -2
  248. package/dist/{RedisTab-C1yaDRSt.cjs.map → RedisTab-DEKMLop2.cjs.map} +1 -1
  249. package/dist/{RollupWidget-b62qcG5K.js → RollupWidget-CMU1-HwL.js} +15 -13
  250. package/dist/RollupWidget-CMU1-HwL.js.map +1 -0
  251. package/dist/RollupWidget-sXTyo7zH.cjs +2 -0
  252. package/dist/RollupWidget-sXTyo7zH.cjs.map +1 -0
  253. package/dist/{RoutersTab-EHz4wDCn.js → RoutersTab-DaWde6np.js} +4 -4
  254. package/dist/{RoutersTab-EHz4wDCn.js.map → RoutersTab-DaWde6np.js.map} +1 -1
  255. package/dist/{RoutersTab-8wGbiPCk.cjs → RoutersTab-IKuEHQeO.cjs} +2 -2
  256. package/dist/{RoutersTab-8wGbiPCk.cjs.map → RoutersTab-IKuEHQeO.cjs.map} +1 -1
  257. package/dist/ScriptChooser-BmyV6QQD.cjs +2 -0
  258. package/dist/ScriptChooser-BmyV6QQD.cjs.map +1 -0
  259. package/dist/{ScriptChooser-DMPY3m8a.js → ScriptChooser-DCjI5aeZ.js} +118 -93
  260. package/dist/ScriptChooser-DCjI5aeZ.js.map +1 -0
  261. package/dist/ScrollwindowWidget-BcLF_bhy.cjs +2 -0
  262. package/dist/ScrollwindowWidget-BcLF_bhy.cjs.map +1 -0
  263. package/dist/ScrollwindowWidget-D7Ln-QMq.js +69 -0
  264. package/dist/ScrollwindowWidget-D7Ln-QMq.js.map +1 -0
  265. package/dist/{SecretsTab-DSMFodJM.cjs → SecretsTab-BM9HIjT_.cjs} +2 -2
  266. package/dist/{SecretsTab-DSMFodJM.cjs.map → SecretsTab-BM9HIjT_.cjs.map} +1 -1
  267. package/dist/{SecretsTab-Cbt_r-1I.js → SecretsTab-Dhal1RCq.js} +3 -3
  268. package/dist/{SecretsTab-Cbt_r-1I.js.map → SecretsTab-Dhal1RCq.js.map} +1 -1
  269. package/dist/SettingsTab-BrSkK_Fs.cjs +3 -0
  270. package/dist/SettingsTab-BrSkK_Fs.cjs.map +1 -0
  271. package/dist/{SettingsTab-L5xbCAW_.js → SettingsTab-Dtj_AlEW.js} +319 -202
  272. package/dist/SettingsTab-Dtj_AlEW.js.map +1 -0
  273. package/dist/SignalWidget-DHwveppA.cjs +2 -0
  274. package/dist/SignalWidget-DHwveppA.cjs.map +1 -0
  275. package/dist/{SignalWidget-CLi6qask.js → SignalWidget-PreTg4Mt.js} +5 -3
  276. package/dist/SignalWidget-PreTg4Mt.js.map +1 -0
  277. package/dist/SimpleTextDialog-Bdw3jul4.cjs +2 -0
  278. package/dist/SimpleTextDialog-Bdw3jul4.cjs.map +1 -0
  279. package/dist/{SimpleTextDialog-8vDPDt6X.js → SimpleTextDialog-DDIm5Znf.js} +26 -19
  280. package/dist/SimpleTextDialog-DDIm5Znf.js.map +1 -0
  281. package/dist/{SpacerWidget-BCA3gdap.js → SpacerWidget-Chy1NO28.js} +3 -3
  282. package/dist/{SpacerWidget-BCA3gdap.js.map → SpacerWidget-Chy1NO28.js.map} +1 -1
  283. package/dist/{SpacerWidget-BJpqoaeP.cjs → SpacerWidget-Cj-j_MsG.cjs} +2 -2
  284. package/dist/{SpacerWidget-BJpqoaeP.cjs.map → SpacerWidget-Cj-j_MsG.cjs.map} +1 -1
  285. package/dist/SparklineWidget-BE1LieLF.cjs +2 -0
  286. package/dist/SparklineWidget-BE1LieLF.cjs.map +1 -0
  287. package/dist/{SparklineWidget-D8mb4zLt.js → SparklineWidget-Bb-gCNNt.js} +11 -11
  288. package/dist/SparklineWidget-Bb-gCNNt.js.map +1 -0
  289. package/dist/TabbookWidget-FNbiZpjn.cjs +2 -0
  290. package/dist/TabbookWidget-FNbiZpjn.cjs.map +1 -0
  291. package/dist/TabbookWidget-a-LsBhBE.js +96 -0
  292. package/dist/TabbookWidget-a-LsBhBE.js.map +1 -0
  293. package/dist/TargetPacketItemChooser-BPRByyfB.cjs +2 -0
  294. package/dist/TargetPacketItemChooser-BPRByyfB.cjs.map +1 -0
  295. package/dist/{TargetPacketItemChooser-DGcXvdTX.js → TargetPacketItemChooser-DDqBQTWC.js} +232 -183
  296. package/dist/TargetPacketItemChooser-DDqBQTWC.js.map +1 -0
  297. package/dist/{TargetsTab-c-qMsGHh.js → TargetsTab-C7Pn5-19.js} +4 -4
  298. package/dist/{TargetsTab-c-qMsGHh.js.map → TargetsTab-C7Pn5-19.js.map} +1 -1
  299. package/dist/{TargetsTab-C4tQ1auc.cjs → TargetsTab-dndajwC_.cjs} +2 -2
  300. package/dist/{TargetsTab-C4tQ1auc.cjs.map → TargetsTab-dndajwC_.cjs.map} +1 -1
  301. package/dist/{TextBoxDialog-Xs-gitZd.js → TextBoxDialog-CJHrE2Sh.js} +29 -22
  302. package/dist/TextBoxDialog-CJHrE2Sh.js.map +1 -0
  303. package/dist/TextBoxDialog-DzCvdsJj.cjs +2 -0
  304. package/dist/TextBoxDialog-DzCvdsJj.cjs.map +1 -0
  305. package/dist/{TextboxWidget-CR05wO-t.js → TextboxWidget-DIHEOldN.js} +19 -19
  306. package/dist/{TextboxWidget-CR05wO-t.js.map → TextboxWidget-DIHEOldN.js.map} +1 -1
  307. package/dist/{TextboxWidget-BcRfHcF6.cjs → TextboxWidget-DYTNipbi.cjs} +2 -2
  308. package/dist/{TextboxWidget-BcRfHcF6.cjs.map → TextboxWidget-DYTNipbi.cjs.map} +1 -1
  309. package/dist/{TextfieldWidget-Ct1hZr2M.cjs → TextfieldWidget-BE-HpIKs.cjs} +2 -2
  310. package/dist/{TextfieldWidget-Ct1hZr2M.cjs.map → TextfieldWidget-BE-HpIKs.cjs.map} +1 -1
  311. package/dist/{TextfieldWidget-Be_Pz2bF.js → TextfieldWidget-CIBo7Dau.js} +5 -5
  312. package/dist/{TextfieldWidget-Be_Pz2bF.js.map → TextfieldWidget-CIBo7Dau.js.map} +1 -1
  313. package/dist/TimeWidget-CLuOYfPP.js +43 -0
  314. package/dist/TimeWidget-CLuOYfPP.js.map +1 -0
  315. package/dist/TimeWidget-RYL7zDoC.cjs +2 -0
  316. package/dist/TimeWidget-RYL7zDoC.cjs.map +1 -0
  317. package/dist/{TitleWidget-BcmxUDzM.js → TitleWidget-BTHKLAsb.js} +3 -3
  318. package/dist/{TitleWidget-BcmxUDzM.js.map → TitleWidget-BTHKLAsb.js.map} +1 -1
  319. package/dist/{TitleWidget-C1qzja9l.cjs → TitleWidget-DVWOhZqJ.cjs} +2 -2
  320. package/dist/{TitleWidget-C1qzja9l.cjs.map → TitleWidget-DVWOhZqJ.cjs.map} +1 -1
  321. package/dist/{ToolsTab-CbY2K86w.cjs → ToolsTab-D4LFT4tV.cjs} +2 -2
  322. package/dist/{ToolsTab-CbY2K86w.cjs.map → ToolsTab-D4LFT4tV.cjs.map} +1 -1
  323. package/dist/{ToolsTab-Buklih4C.js → ToolsTab-D5yhjVM0.js} +4 -4
  324. package/dist/{ToolsTab-Buklih4C.js.map → ToolsTab-D5yhjVM0.js.map} +1 -1
  325. package/dist/{TopBar-HxaiWynT.cjs → TopBar-DUdrFsMv.cjs} +2 -2
  326. package/dist/{TopBar-HxaiWynT.cjs.map → TopBar-DUdrFsMv.cjs.map} +1 -1
  327. package/dist/{TopBar-D4C9DJcu.js → TopBar-DzxJ69Tt.js} +3 -3
  328. package/dist/{TopBar-D4C9DJcu.js.map → TopBar-DzxJ69Tt.js.map} +1 -1
  329. package/dist/{UpgradeToEnterpriseDialog-D0AGxldj.js → UpgradeToEnterpriseDialog-Bf6rEOgp.js} +16 -13
  330. package/dist/UpgradeToEnterpriseDialog-Bf6rEOgp.js.map +1 -0
  331. package/dist/UpgradeToEnterpriseDialog-CujyHt2o.cjs +2 -0
  332. package/dist/UpgradeToEnterpriseDialog-CujyHt2o.cjs.map +1 -0
  333. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-CP8T5W6m.cjs → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-Bjn8x8eE.cjs} +108 -108
  334. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-CP8T5W6m.cjs.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-Bjn8x8eE.cjs.map} +1 -1
  335. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B8ikVCn7.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-NXWdTcR2.js} +5473 -5451
  336. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B8ikVCn7.js.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-NXWdTcR2.js.map} +1 -1
  337. package/dist/{VWidget-CBmUpKSV.js → VWidget-BcwkHuIT.js} +3 -3
  338. package/dist/{VWidget-CBmUpKSV.js.map → VWidget-BcwkHuIT.js.map} +1 -1
  339. package/dist/{VWidget-DhGLFGS2.cjs → VWidget-CbdjSkP3.cjs} +2 -2
  340. package/dist/{VWidget-DhGLFGS2.cjs.map → VWidget-CbdjSkP3.cjs.map} +1 -1
  341. package/dist/ValueWidget-BubIamVx.js +138 -0
  342. package/dist/ValueWidget-BubIamVx.js.map +1 -0
  343. package/dist/ValueWidget-CgAl2Av2.cjs +2 -0
  344. package/dist/ValueWidget-CgAl2Av2.cjs.map +1 -0
  345. package/dist/{ValuelimitsbarWidget-BdY02gqc.js → ValuelimitsbarWidget-DKTrV1RT.js} +11 -11
  346. package/dist/{ValuelimitsbarWidget-BdY02gqc.js.map → ValuelimitsbarWidget-DKTrV1RT.js.map} +1 -1
  347. package/dist/{ValuelimitsbarWidget-KsFz7ipK.cjs → ValuelimitsbarWidget-Dn_sS0zt.cjs} +2 -2
  348. package/dist/{ValuelimitsbarWidget-KsFz7ipK.cjs.map → ValuelimitsbarWidget-Dn_sS0zt.cjs.map} +1 -1
  349. package/dist/ValuelimitscolumnWidget-CGhifOZI.cjs +2 -0
  350. package/dist/ValuelimitscolumnWidget-CGhifOZI.cjs.map +1 -0
  351. package/dist/{ValuelimitscolumnWidget-CuJ6rqtC.js → ValuelimitscolumnWidget-D8JIK4Zi.js} +11 -11
  352. package/dist/ValuelimitscolumnWidget-D8JIK4Zi.js.map +1 -0
  353. package/dist/{ValuerangebarWidget-C5rolGDi.js → ValuerangebarWidget-D8hVKp0l.js} +6 -6
  354. package/dist/{ValuerangebarWidget-C5rolGDi.js.map → ValuerangebarWidget-D8hVKp0l.js.map} +1 -1
  355. package/dist/{ValuerangebarWidget-CDJeamPr.cjs → ValuerangebarWidget-DPtR-Dla.cjs} +2 -2
  356. package/dist/{ValuerangebarWidget-CDJeamPr.cjs.map → ValuerangebarWidget-DPtR-Dla.cjs.map} +1 -1
  357. package/dist/VerticalWidget-DMp3DXGa.js +68 -0
  358. package/dist/VerticalWidget-DMp3DXGa.js.map +1 -0
  359. package/dist/VerticalWidget-DScGTfwX.cjs +2 -0
  360. package/dist/VerticalWidget-DScGTfwX.cjs.map +1 -0
  361. package/dist/{VerticalboxWidget-D-3H1PYU.cjs → VerticalboxWidget-CIJ1c7WU.cjs} +2 -2
  362. package/dist/{VerticalboxWidget-D-3H1PYU.cjs.map → VerticalboxWidget-CIJ1c7WU.cjs.map} +1 -1
  363. package/dist/{VerticalboxWidget-CzDgveBl.js → VerticalboxWidget-CVf1d_3_.js} +6 -6
  364. package/dist/{VerticalboxWidget-CzDgveBl.js.map → VerticalboxWidget-CVf1d_3_.js.map} +1 -1
  365. package/dist/Widget-Btu2EoLT.cjs +2 -0
  366. package/dist/Widget-Btu2EoLT.cjs.map +1 -0
  367. package/dist/{Widget-VCl8Ts8s.js → Widget-D4rzBHnr.js} +27 -19
  368. package/dist/Widget-D4rzBHnr.js.map +1 -0
  369. package/dist/components.cjs +3 -3
  370. package/dist/components.cjs.map +1 -1
  371. package/dist/components.js +421 -248
  372. package/dist/components.js.map +1 -1
  373. package/dist/icons.cjs +1 -1
  374. package/dist/icons.cjs.map +1 -1
  375. package/dist/icons.js +6 -4
  376. package/dist/icons.js.map +1 -1
  377. package/dist/plugins.cjs +2 -2
  378. package/dist/plugins.cjs.map +1 -1
  379. package/dist/plugins.js +23 -17
  380. package/dist/plugins.js.map +1 -1
  381. package/dist/{settings-sg_XHXQ-.cjs → settings-B9vbjzwV.cjs} +2 -2
  382. package/dist/{settings-sg_XHXQ-.cjs.map → settings-B9vbjzwV.cjs.map} +1 -1
  383. package/dist/{settings-DlX9yvJJ.js → settings-Ctcx_wMT.js} +2 -2
  384. package/dist/{settings-DlX9yvJJ.js.map → settings-Ctcx_wMT.js.map} +1 -1
  385. package/dist/tools/admin.cjs +4 -5
  386. package/dist/tools/admin.cjs.map +1 -1
  387. package/dist/tools/admin.js +954 -833
  388. package/dist/tools/admin.js.map +1 -1
  389. package/dist/tools/base.cjs +1 -1
  390. package/dist/tools/base.cjs.map +1 -1
  391. package/dist/tools/base.js +38 -37
  392. package/dist/tools/base.js.map +1 -1
  393. package/dist/tools/calendar.cjs +1 -1
  394. package/dist/tools/calendar.js +1 -1
  395. package/dist/tools/scriptrunner.cjs +8 -8
  396. package/dist/tools/scriptrunner.cjs.map +1 -1
  397. package/dist/tools/scriptrunner.js +1121 -1134
  398. package/dist/tools/scriptrunner.js.map +1 -1
  399. package/dist/useContainerHeight-BAw05dIa.js.map +1 -1
  400. package/dist/useContainerHeight-BEd4f2Lr.cjs.map +1 -1
  401. package/dist/vue-common.css +1 -1
  402. package/dist/widgets.cjs +1 -1
  403. package/dist/widgets.js +118 -116
  404. package/dist/widgets.js.map +1 -1
  405. package/package.json +6 -6
  406. package/dist/BarColumn-BZSUr33b.cjs +0 -2
  407. package/dist/BarColumn-BZSUr33b.cjs.map +0 -1
  408. package/dist/BarColumn-XWs-3Cwb.js.map +0 -1
  409. package/dist/ButtonWidget-BBMDS_YF.cjs.map +0 -1
  410. package/dist/ButtonWidget-BaSvtElA.js.map +0 -1
  411. package/dist/CanvasimageWidget-Dk15uRRu.cjs +0 -2
  412. package/dist/CanvasimageWidget-Dk15uRRu.cjs.map +0 -1
  413. package/dist/CanvasimageWidget-YP1pCtvb.js.map +0 -1
  414. package/dist/CanvasimagevalueWidget-BQHjJCuq.cjs +0 -2
  415. package/dist/CanvasimagevalueWidget-BQHjJCuq.cjs.map +0 -1
  416. package/dist/CanvasimagevalueWidget-CjVHb2uj.js.map +0 -1
  417. package/dist/CanvaslabelvalueWidget-BYmsu9r_.cjs +0 -2
  418. package/dist/CanvaslabelvalueWidget-BYmsu9r_.cjs.map +0 -1
  419. package/dist/CanvaslabelvalueWidget-Dyo_ogHn.js.map +0 -1
  420. package/dist/CanvaslinevalueWidget-BOZyJuLE.js.map +0 -1
  421. package/dist/CanvaslinevalueWidget-DM5c-ciY.cjs +0 -2
  422. package/dist/CanvaslinevalueWidget-DM5c-ciY.cjs.map +0 -1
  423. package/dist/CheckbuttonWidget-BSvTWD3x.cjs +0 -2
  424. package/dist/ComboboxWidget-B_KAnIVB.cjs +0 -2
  425. package/dist/CriticalCmdDialog-BtzhxuZi.js.map +0 -1
  426. package/dist/CriticalCmdDialog-CeohXoAG.cjs +0 -2
  427. package/dist/CriticalCmdDialog-CeohXoAG.cjs.map +0 -1
  428. package/dist/CustomIcon-eie3rPKh.cjs +0 -2
  429. package/dist/DetailsDialog-Bc_VEG95.cjs +0 -2
  430. package/dist/DetailsDialog-Bc_VEG95.cjs.map +0 -1
  431. package/dist/DetailsDialog-Bq7SS7bc.js.map +0 -1
  432. package/dist/DynamicWidget-BNfJRfR5.cjs +0 -2
  433. package/dist/DynamicWidget-BNfJRfR5.cjs.map +0 -1
  434. package/dist/DynamicWidget-DHL7pbgW.js.map +0 -1
  435. package/dist/EventListDialog-Dycx70tY.cjs +0 -2
  436. package/dist/EventListDialog-Dycx70tY.cjs.map +0 -1
  437. package/dist/EventListDialog-jdNF3szO.js.map +0 -1
  438. package/dist/Graph-B7KPo9Ul.js.map +0 -1
  439. package/dist/Graph-C9FS6KR3.cjs +0 -2
  440. package/dist/Graph-C9FS6KR3.cjs.map +0 -1
  441. package/dist/HorizontalWidget-CN6goWHY.cjs +0 -2
  442. package/dist/HorizontalWidget-CN6goWHY.cjs.map +0 -1
  443. package/dist/HorizontalWidget-DbEQYjFC.js +0 -41
  444. package/dist/HorizontalWidget-DbEQYjFC.js.map +0 -1
  445. package/dist/ImageviewerWidget-6d6Kl3W_.js.map +0 -1
  446. package/dist/ImageviewerWidget-CULuNsiD.cjs +0 -2
  447. package/dist/ImageviewerWidget-CULuNsiD.cjs.map +0 -1
  448. package/dist/LabelsparklineWidget-Cbug97Ne.cjs +0 -2
  449. package/dist/LabelsparklineWidget-Cbug97Ne.cjs.map +0 -1
  450. package/dist/LabelsparklineWidget-CdZ_pM2B.js.map +0 -1
  451. package/dist/LabelvaluelimitsbarWidget-DTcYbEQS.js.map +0 -1
  452. package/dist/LabelvaluelimitsbarWidget-DbO_Q5ex.cjs.map +0 -1
  453. package/dist/LabelvaluelimitscolumnWidget-BMSwK1Ys.cjs +0 -2
  454. package/dist/LabelvaluelimitscolumnWidget-BMSwK1Ys.cjs.map +0 -1
  455. package/dist/LabelvaluelimitscolumnWidget-D0ltQ9Ta.js.map +0 -1
  456. package/dist/Layout-DDewLzbI.cjs +0 -2
  457. package/dist/Layout-DDewLzbI.cjs.map +0 -1
  458. package/dist/Layout-DW5yNlp7.js +0 -14
  459. package/dist/Layout-DW5yNlp7.js.map +0 -1
  460. package/dist/LedWidget-Cif7vC7q.cjs +0 -2
  461. package/dist/LedWidget-Cif7vC7q.cjs.map +0 -1
  462. package/dist/LedWidget-DUvJ2v8k.js.map +0 -1
  463. package/dist/LimitsbarWidget-BehZv0-k.js +0 -72
  464. package/dist/LimitsbarWidget-BehZv0-k.js.map +0 -1
  465. package/dist/LimitsbarWidget-BodNPbuH.cjs +0 -2
  466. package/dist/LimitsbarWidget-BodNPbuH.cjs.map +0 -1
  467. package/dist/LimitscolorWidget-DPhymKgB.cjs +0 -2
  468. package/dist/LimitscolorWidget-DPhymKgB.cjs.map +0 -1
  469. package/dist/LimitscolorWidget-FXT0ZPPH.js.map +0 -1
  470. package/dist/MatrixbycolumnsWidget-BLkwvpMk.cjs +0 -2
  471. package/dist/MatrixbycolumnsWidget-BLkwvpMk.cjs.map +0 -1
  472. package/dist/MatrixbycolumnsWidget-CCF7rCkV.js +0 -56
  473. package/dist/MatrixbycolumnsWidget-CCF7rCkV.js.map +0 -1
  474. package/dist/MicroservicesTab-rxOATXLO.js +0 -219
  475. package/dist/MicroservicesTab-rxOATXLO.js.map +0 -1
  476. package/dist/MicroservicesTab-uesXuuM4.cjs +0 -2
  477. package/dist/MicroservicesTab-uesXuuM4.cjs.map +0 -1
  478. package/dist/Openc3Screen-CzD9BB0M.cjs +0 -6
  479. package/dist/Openc3Screen-CzD9BB0M.cjs.map +0 -1
  480. package/dist/Openc3Screen-DcIIUO63.js.map +0 -1
  481. package/dist/OutputDialog-CNH74LpJ.js.map +0 -1
  482. package/dist/OutputDialog-QIabyvK1.cjs +0 -2
  483. package/dist/OutputDialog-QIabyvK1.cjs.map +0 -1
  484. package/dist/PluginsTab-B_Pf2A9c.js.map +0 -1
  485. package/dist/PluginsTab-DXf9zX0h.cjs.map +0 -1
  486. package/dist/ProgressbarWidget-B5WN658S.js.map +0 -1
  487. package/dist/ProgressbarWidget-D2NHSJny.cjs +0 -2
  488. package/dist/ProgressbarWidget-D2NHSJny.cjs.map +0 -1
  489. package/dist/RadiobuttonWidget-DkG9GtAy.cjs +0 -2
  490. package/dist/RangebarWidget-CJgtAk5z.cjs +0 -2
  491. package/dist/RangebarWidget-CJgtAk5z.cjs.map +0 -1
  492. package/dist/RangebarWidget-Dn0GASdi.js.map +0 -1
  493. package/dist/RollupWidget-B2pGGoET.cjs +0 -2
  494. package/dist/RollupWidget-B2pGGoET.cjs.map +0 -1
  495. package/dist/RollupWidget-b62qcG5K.js.map +0 -1
  496. package/dist/ScriptChooser-CtV7dDJS.cjs +0 -2
  497. package/dist/ScriptChooser-CtV7dDJS.cjs.map +0 -1
  498. package/dist/ScriptChooser-DMPY3m8a.js.map +0 -1
  499. package/dist/ScrollwindowWidget-ByJRy528.cjs +0 -2
  500. package/dist/ScrollwindowWidget-ByJRy528.cjs.map +0 -1
  501. package/dist/ScrollwindowWidget-Dn29gs-U.js +0 -45
  502. package/dist/ScrollwindowWidget-Dn29gs-U.js.map +0 -1
  503. package/dist/SettingsTab-8Zeg3G0C.cjs +0 -3
  504. package/dist/SettingsTab-8Zeg3G0C.cjs.map +0 -1
  505. package/dist/SettingsTab-L5xbCAW_.js.map +0 -1
  506. package/dist/SignalWidget-CEmQymzQ.cjs +0 -2
  507. package/dist/SignalWidget-CEmQymzQ.cjs.map +0 -1
  508. package/dist/SignalWidget-CLi6qask.js.map +0 -1
  509. package/dist/SimpleTextDialog-8vDPDt6X.js.map +0 -1
  510. package/dist/SimpleTextDialog-CJ8pLBGz.cjs +0 -2
  511. package/dist/SimpleTextDialog-CJ8pLBGz.cjs.map +0 -1
  512. package/dist/SparklineWidget-CIkMm4O-.cjs +0 -2
  513. package/dist/SparklineWidget-CIkMm4O-.cjs.map +0 -1
  514. package/dist/SparklineWidget-D8mb4zLt.js.map +0 -1
  515. package/dist/TabbookWidget-Bkt4g02d.js +0 -66
  516. package/dist/TabbookWidget-Bkt4g02d.js.map +0 -1
  517. package/dist/TabbookWidget-DqcScWwW.cjs +0 -2
  518. package/dist/TabbookWidget-DqcScWwW.cjs.map +0 -1
  519. package/dist/TargetPacketItemChooser-Cm6mQvhI.cjs +0 -2
  520. package/dist/TargetPacketItemChooser-Cm6mQvhI.cjs.map +0 -1
  521. package/dist/TargetPacketItemChooser-DGcXvdTX.js.map +0 -1
  522. package/dist/TextBoxDialog-DXG7H7kQ.cjs +0 -2
  523. package/dist/TextBoxDialog-DXG7H7kQ.cjs.map +0 -1
  524. package/dist/TextBoxDialog-Xs-gitZd.js.map +0 -1
  525. package/dist/TimeWidget-3M7CQ893.cjs +0 -2
  526. package/dist/TimeWidget-3M7CQ893.cjs.map +0 -1
  527. package/dist/TimeWidget-Dy8zpkC6.js +0 -40
  528. package/dist/TimeWidget-Dy8zpkC6.js.map +0 -1
  529. package/dist/UpgradeToEnterpriseDialog-D0AGxldj.js.map +0 -1
  530. package/dist/UpgradeToEnterpriseDialog-D8BkzmVD.cjs +0 -2
  531. package/dist/UpgradeToEnterpriseDialog-D8BkzmVD.cjs.map +0 -1
  532. package/dist/ValueWidget-BxWrHkYY.js +0 -118
  533. package/dist/ValueWidget-BxWrHkYY.js.map +0 -1
  534. package/dist/ValueWidget-yuZ8tPzG.cjs +0 -2
  535. package/dist/ValueWidget-yuZ8tPzG.cjs.map +0 -1
  536. package/dist/ValuelimitscolumnWidget-B0HGnyS5.cjs +0 -2
  537. package/dist/ValuelimitscolumnWidget-B0HGnyS5.cjs.map +0 -1
  538. package/dist/ValuelimitscolumnWidget-CuJ6rqtC.js.map +0 -1
  539. package/dist/VerticalWidget-DsnEzKZ2.js +0 -40
  540. package/dist/VerticalWidget-DsnEzKZ2.js.map +0 -1
  541. package/dist/VerticalWidget-wuRCrd7Q.cjs +0 -2
  542. package/dist/VerticalWidget-wuRCrd7Q.cjs.map +0 -1
  543. package/dist/Widget-CKianvfR.cjs +0 -2
  544. package/dist/Widget-CKianvfR.cjs.map +0 -1
  545. package/dist/Widget-VCl8Ts8s.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Openc3Screen-Pu1ktpS8.cjs","sources":["../src/components/autocomplete/screenCompleter.js","../src/components/ScreenEditor.vue","../src/components/EditScreenDialog.vue","../src/tools/scriptrunner/autocomplete/utilities.js","../src/tools/scriptrunner/autocomplete/packetCompleter.js","../src/tools/scriptrunner/autocomplete/cmdCompleter.js","../src/tools/scriptrunner/autocomplete/tlmCompleter.js","../src/components/EnvironmentDialog.vue","../src/components/TreeNode.vue","../src/components/FileOpenSaveDialog.vue","../src/components/Openc3Screen.vue"],"sourcesContent":["/*\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\n\n// Test data useful for testing ScreenCompleter\n// let autocompleteData = [\n// {\n// caption: 'HORIZONTAL',\n// meta: 'Places the widgets it encapsulates horizontally',\n// snippet: 'HORIZONTAL ${1:<Margin>}',\n// },\n// {\n// caption: 'LABELVALUE',\n// meta: 'Displays a LABEL with the item name followed by a VALUE',\n// value: 'LABELVALUE ',\n// command: 'startAutocomplete',\n// params: [\n// { 'Target name': 1 },\n// { 'Packet name': 1 },\n// { 'Item name': 1 },\n// { RAW: 'raw description', CONVERTED: 1, FORMATTED: 1, WITH_UNITS: 1 },\n// { '<Number of characters>': 'characters description' },\n// ],\n// },\n// ]\n\nexport default class ScreenCompleter {\n constructor() {\n // See openc3-cosmos-cmd-tlm-api/app/controllers/script_autocomplete_controller.rb\n // for how the autocompleteData is built\n\n Api.get(`/openc3-api/autocomplete/data/screen`).then((response) => {\n this.autocompleteData = response.data\n })\n this.api = new OpenC3Api()\n }\n\n async getCompletions(editor, session, pos, prefix, callback) {\n let line = session.getLine(pos.row)\n let lineBefore = line.slice(0, pos.column)\n let parsedLine = lineBefore.trimStart().split(/ (?![^<]*>)/)\n let suggestions = this.autocompleteData\n // If we have more than 1 we've selected a keyword\n if (parsedLine.length > 1) {\n suggestions = suggestions.find((x) => x.caption === parsedLine[0])\n }\n let result = {}\n let more = true\n // If we found suggestions and the suggestions have params\n // then we do logic to substitute suggestions using the actual\n // target, packet, item data\n if (suggestions && suggestions['params']) {\n // Check if this is the last autocomplete parameter\n if (suggestions['params'].length == parsedLine.length - 1) {\n more = false\n }\n // parsedLine.length - 2 because the last element is blank\n // e.g. ['LABELVALUE', 'INST', '']\n let current = suggestions['params'][parsedLine.length - 2]\n // Check for Target name, Packet name, and Item name and use\n // api calls to substitute actual values for suggestions\n if (current['Target name']) {\n let target_names = await this.api.get_target_names()\n suggestions = target_names.reduce(\n (acc, curr) => ((acc[curr] = 1), acc),\n {},\n )\n } else if (current['Packet name']) {\n let target_name = parsedLine[parsedLine.length - 2]\n let packets = await this.api.get_all_tlm(target_name)\n suggestions = packets.reduce(\n (acc, pkt) => ((acc[pkt.packet_name] = pkt.description), acc),\n {},\n )\n suggestions['LATEST'] = 'LATEST values from all packets'\n } else if (current['Item name']) {\n let target_name = parsedLine[parsedLine.length - 3]\n let packet_name = parsedLine[parsedLine.length - 2]\n if (packet_name === 'LATEST') {\n let items = await this.api.get_all_tlm_item_names(target_name)\n suggestions = {}\n items.forEach((item) => {\n suggestions[item] = `LATEST ${item}`\n })\n } else {\n let packet = await this.api.get_tlm(target_name, packet_name)\n suggestions = packet.items.reduce(\n (acc, item) => ((acc[item.name] = item.description), acc),\n {},\n )\n }\n } else {\n // Not a special case so just use the param as is\n suggestions = current\n }\n\n result = Object.keys(suggestions || {}).map((x) => {\n let completions = {\n value: x + (more ? ' ' : ''),\n // We want the autoComplete to continue right up\n // to the last parameter\n command: more && 'startAutocomplete',\n }\n // Only add the meta (description) if we have a string\n // This prevents adding (Object) descriptions\n if (typeof suggestions[x] === 'string') {\n completions['meta'] = suggestions[x]\n }\n return completions\n })\n } else {\n // The snippet case where we just inject the snippet\n result = suggestions\n }\n callback(null, result)\n }\n}\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div class=\"screen-editor-container\">\n <v-row no-gutters align=\"center\" class=\"mb-2\">\n <v-btn\n :disabled=\"!file\"\n color=\"primary\"\n size=\"small\"\n class=\"mr-3\"\n data-test=\"screen-editor-load\"\n @click=\"loadFile\"\n >\n Load\n </v-btn>\n <v-file-input\n v-model=\"file\"\n truncate-length=\"15\"\n accept=\".txt\"\n label=\"Click to select .txt screen file.\"\n density=\"compact\"\n hide-details\n style=\"max-width: 300px\"\n />\n <v-spacer />\n <v-btn\n icon=\"mdi-download\"\n variant=\"text\"\n density=\"compact\"\n title=\"Download\"\n data-test=\"download-screen-icon\"\n @click=\"downloadContent\"\n />\n </v-row>\n <v-row no-gutters class=\"mb-2\">\n <pre\n ref=\"editor\"\n class=\"screen-editor\"\n :style=\"{ height: height, width: '100%' }\"\n @contextmenu.prevent=\"showContextMenu\"\n ></pre>\n <v-menu v-model=\"contextMenu\" :target=\"[menuX, menuY]\">\n <v-list>\n <v-list-item link @click=\"openDocumentation\">\n <v-list-item-title>\n {{ docsKeyword }} documentation\n </v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item\n title=\"Toggle Vim mode\"\n prepend-icon=\"extras:vim\"\n @click=\"toggleVimMode\"\n />\n </v-list>\n </v-menu>\n </v-row>\n <v-row no-gutters>\n <span class=\"text-caption text-grey\">\n Ctrl-space brings up autocomplete. Right click keywords for\n documentation.\n </span>\n </v-row>\n </div>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport { ScreenCompleter } from './autocomplete'\nimport { AceEditorUtils } from './ace'\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n modelValue: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n height: {\n type: String,\n default: '45vh',\n },\n filename: {\n type: String,\n default: 'screen.txt',\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n editor: null,\n file: null,\n loadedKeywords: [],\n docsKeyword: '',\n contextMenu: false,\n menuX: 0,\n menuY: 0,\n }\n },\n computed: {\n effectiveKeywords() {\n // Use prop keywords if provided, otherwise use loaded keywords\n return this.keywords.length > 0 ? this.keywords : this.loadedKeywords\n },\n },\n watch: {\n modelValue(newValue) {\n if (this.editor && this.editor.getValue() !== newValue) {\n this.editor.setValue(newValue)\n this.editor.clearSelection()\n }\n },\n effectiveKeywords() {\n if (this.editor) {\n const screenMode = this.buildScreenMode()\n this.editor.session.setMode(new screenMode())\n }\n },\n },\n created() {\n // Load keywords from API if not provided via prop\n if (this.keywords.length === 0) {\n this.loadKeywords()\n }\n },\n mounted() {\n this.initEditor()\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n this.editor.container.remove()\n }\n },\n methods: {\n async loadKeywords() {\n try {\n const response = await Api.get(\n '/openc3-api/autocomplete/keywords/screen',\n )\n this.loadedKeywords = response.data\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error loading screen keywords:', error)\n }\n },\n initEditor() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n const screenMode = this.buildScreenMode()\n this.editor.session.setMode(new screenMode())\n this.editor.session.setTabSize(2)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setOption('enableBasicAutocompletion', true)\n this.editor.setOption('enableLiveAutocompletion', true)\n this.editor.completers = [new ScreenCompleter()]\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.modelValue)\n this.editor.clearSelection()\n AceEditorUtils.applyVimModeIfEnabled(this.editor)\n this.editor.focus()\n\n this.editor.session.on('change', () => {\n this.$emit('update:modelValue', this.editor.getValue())\n })\n },\n getValue() {\n return this.editor ? this.editor.getValue() : this.modelValue\n },\n buildScreenMode() {\n let oop = ace.require('ace/lib/oop')\n let TextHighlightRules = ace.require(\n 'ace/mode/text_highlight_rules',\n ).TextHighlightRules\n\n let list = this.effectiveKeywords.join('|')\n let OpenC3HighlightRules = function () {\n this.$rules = {\n start: [\n {\n token: 'comment',\n regex: '#.*$',\n },\n {\n token: 'string',\n regex: '\".*?\"',\n },\n {\n token: 'string',\n regex: \"'.*?'\",\n },\n {\n token: 'constant.numeric',\n regex: '\\\\b\\\\d+(?:\\\\.\\\\d+)?\\\\b',\n },\n {\n token: 'keyword',\n regex: list ? new RegExp(`^\\\\s*(${list})\\\\b`) : /(?!)/,\n },\n ],\n }\n this.normalizeRules()\n }\n oop.inherits(OpenC3HighlightRules, TextHighlightRules)\n let Mode = function () {\n this.HighlightRules = OpenC3HighlightRules\n }\n let TextMode = ace.require('ace/mode/text').Mode\n oop.inherits(Mode, TextMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n toggleVimMode() {\n AceEditorUtils.toggleVimMode(this.editor)\n },\n showContextMenu(event) {\n this.menuX = event.pageX\n this.menuY = event.pageY\n\n let position = this.editor.getCursorPosition()\n let token = this.editor.session.getTokenAt(position.row, position.column)\n if (token) {\n let value = token.value.trim()\n if (value.includes(' ')) {\n this.docsKeyword = value.split(' ')[0]\n } else {\n this.docsKeyword = value\n }\n this.contextMenu = true\n }\n },\n openDocumentation() {\n window.open(\n `${\n window.location.origin\n }/tools/staticdocs/docs/configuration/telemetry-screens#${this.docsKeyword.toLowerCase()}`,\n '_blank',\n )\n },\n downloadContent() {\n const blob = new Blob([this.editor.getValue()], {\n type: 'text/plain',\n })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', this.filename)\n link.click()\n },\n loadFile() {\n const fileReader = new FileReader()\n fileReader.readAsText(this.file)\n const that = this\n fileReader.onload = function () {\n that.editor.setValue(fileReader.result)\n that.editor.clearSelection()\n that.file = null\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.screen-editor-container {\n width: 100%;\n}\n\n.screen-editor {\n width: 100%;\n position: relative;\n font-size: 16px;\n}\n</style>\n\n<style>\n.ace_autocomplete {\n width: 60vw !important;\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit dialog -->\n <v-dialog\n v-model=\"show\"\n persistent\n width=\"75vw\"\n @keydown.esc=\"$emit('cancel')\"\n >\n <v-card>\n <v-toolbar height=\"24\">\n <v-btn\n class=\"mx-2\"\n icon=\"mdi-delete\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"delete-screen-icon\"\n @click=\"deleteScreen\"\n />\n <v-spacer />\n <span> Edit Screen: {{ target }} {{ screen }} </span>\n <v-spacer />\n </v-toolbar>\n <v-card-text style=\"max-height: 90vh\">\n <screen-editor\n ref=\"screenEditor\"\n v-model=\"editorContent\"\n :keywords=\"keywords\"\n :filename=\"`${screen.toLowerCase()}.txt`\"\n height=\"45vh\"\n />\n <!-- Make the error messages a max height and scrollable -->\n <v-row style=\"max-height: 120px; overflow-y: auto\">\n <div v-for=\"(error, index) in editErrors\" :key=\"index\">\n <span class=\"text-red\" v-text=\"error\" />\n </div>\n </v-row>\n <v-row class=\"mt-3\">\n <v-spacer />\n <v-btn\n class=\"mx-2\"\n variant=\"outlined\"\n data-test=\"edit-screen-cancel\"\n @click=\"$emit('cancel')\"\n >\n Cancel\n </v-btn>\n <v-btn\n class=\"mx-2\"\n color=\"primary\"\n data-test=\"edit-screen-save\"\n @click=\"$emit('save', editorContent)\"\n >\n Save\n </v-btn>\n </v-row>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport ScreenEditor from './ScreenEditor.vue'\n\nexport default {\n components: {\n ScreenEditor,\n },\n props: {\n modelValue: Boolean,\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n errors: {\n type: Array,\n default: () => [],\n },\n },\n emits: ['cancel', 'delete', 'save', 'update:modelValue'],\n data() {\n return {\n editorContent: this.definition,\n }\n },\n computed: {\n editErrors: function () {\n if (this.editorContent === '') {\n return ['Input can not be blank.']\n }\n if (this.errors.length !== 0) {\n let messages = new Set()\n let result = []\n const sortedErrors = this.errors.toSorted(\n (a, b) => a.lineNumber - b.lineNumber,\n )\n for (const error of sortedErrors) {\n let msg = `At ${error.lineNumber}: (${error.line}) ${error.message}.`\n if (error.usage) {\n msg += ` Usage: ${error.usage}`\n }\n result.push(msg)\n messages.add(error.message)\n }\n return result\n }\n return []\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n watch: {\n definition(newValue) {\n this.editorContent = newValue\n },\n },\n methods: {\n deleteScreen: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete this screen?!`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('delete')\n })\n },\n },\n}\n</script>\n","/*\n# Copyright 2021 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, 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\nimport { Api } from '@openc3/js-common/services'\n\nconst getKeywords = (type) => {\n return Api.get(`/openc3-api/autocomplete/keywords/${type}`)\n}\n\nconst getAutocompleteData = (type) => {\n return Api.get(`/openc3-api/autocomplete/data/${type}`)\n}\n\n// This should probably go in some higher up util library thing place\nconst groupBy = (array, lambda) => {\n return array.reduce((groups, item) => {\n const key = lambda(item)\n if (groups[key]) {\n groups[key].push(item)\n } else {\n groups[key] = [item]\n }\n return groups\n }, {})\n}\n\nexport { getKeywords, getAutocompleteData, groupBy }\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, 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\nimport { getKeywords, getAutocompleteData } from './utilities'\n\nconst toMethodCallSyntaxRegex = (word) => {\n // create regex to find the opening of a ruby method call\n const prefix = '(^|[{\\\\(\\\\s])' // Allowable characters before the method name: start of line or { or ( or a space\n const opening = '[\\\\s\\\\(]f?[\\'\"]' // Opening sequence for a method call and a string argument: ( or a space, then ' or \"\n const params = '(\\\\S+\\\\s?){0,3}' // Only allow up to a few tokens after the keyword to avoid autocompleteception\n return new RegExp(`${prefix}${word}${opening}${params}$`) // ensure end of line because it's sliced to the current cursor position\n}\n\nexport default class PacketCompleter {\n constructor(\n type,\n dataReadyCallback = () => {},\n expressionsReadyCallback = () => {},\n ) {\n this.keywordExpressions = [] // Keywords that trigger the autocomplete feature\n this.autocompleteData = [] // Data to populate the autocomplete list\n\n getKeywords(type).then((response) => {\n this.keywordExpressions = response.data.map(toMethodCallSyntaxRegex)\n expressionsReadyCallback()\n })\n getAutocompleteData(type).then((response) => {\n this.autocompleteData = response.data\n dataReadyCallback()\n })\n }\n\n getCompletions(_editor, session, position, _prefix, callback) {\n let matches = []\n const lineBeforeCursor = session.doc.$lines[position.row].slice(\n 0,\n position.column,\n )\n if (\n this.keywordExpressions.some((regex) => lineBeforeCursor.match(regex))\n ) {\n matches = this.autocompleteData\n }\n\n callback(null, [\n ...matches,\n\n // Uncomment to also return the built-in autocomplete words (but I found they're not very good and just get in the way when using live autocomplete)\n // ...session.$mode.$highlightRules.$keywordList.map((word) => ({\n // caption: word,\n // value: word,\n // meta: 'keyword',\n // })),\n ])\n }\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, 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\nimport PacketCompleter from './packetCompleter.js'\n\nexport default class CmdCompleter extends PacketCompleter {\n constructor() {\n super('cmd')\n }\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, 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\nimport PacketCompleter from './packetCompleter.js'\n\nexport default class TlmCompleter extends PacketCompleter {\n constructor() {\n super('tlm', () => {\n // The data returned by the API is usable as-is, but grouping it this way makes it easier\n // to search through all the packets first, and then for an item within that packet.\n this.groupedPacketData = this.autocompleteData.reduce((groups, item) => {\n const packetName = item.caption.match(/\\S+\\s\\S+/)[0] // First two tokens, e.g. \"INST ADCS\" OF \"INST ADCS POSX\"\n const itemName = item.snippet.replace(`${packetName} `, '')\n const amendedItem = {\n caption: itemName,\n snippet: itemName,\n meta: 'item',\n }\n\n if (groups[packetName]) {\n groups[packetName].push(amendedItem)\n } else {\n groups[packetName] = [amendedItem]\n }\n return groups\n }, {})\n this.packets = Object.keys(this.groupedPacketData).map((packetName) => {\n return {\n caption: packetName,\n snippet: packetName,\n meta: 'packet',\n }\n })\n })\n }\n\n // Override the parent's getCompletions to take advantage of the grouping by packet done in the constructor\n getCompletions(_editor, session, position, _prefix, callback) {\n let matches = []\n const lineBeforeCursor = session.doc.$lines[position.row].slice(\n 0,\n position.column,\n )\n if (\n this.keywordExpressions.some((regex) => lineBeforeCursor.match(regex))\n ) {\n const foundPacket = Object.keys(this.groupedPacketData).find(\n (packetName) => lineBeforeCursor.includes(packetName),\n )\n if (foundPacket) {\n matches = this.groupedPacketData[foundPacket]\n } else {\n matches = this.packets\n }\n }\n\n callback(null, matches)\n }\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, 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 <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <form @submit.prevent=\"addEnvironment\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Global Environment Variables</span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense class=\"mb-2\">\n <v-text-field\n v-model=\"search\"\n label=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n clear-icon=\"mdi-close-circle-outline\"\n autofocus\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n item-key=\"name\"\n hide-default-header\n data-test=\"env-table\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"environment\"\n :items-per-page=\"5\"\n :items-per-page-options=\"[5]\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n class=\"mt-1\"\n data-test=\"item-delete\"\n aria-label=\"Delete Environment Variable\"\n @click=\"deleteEnvironment(item)\"\n />\n </template>\n </v-data-table>\n <v-row dense>\n <v-col>\n <v-text-field v-model=\"key\" label=\"Key\" data-test=\"env-key\" />\n </v-col>\n <v-col>\n <v-text-field\n v-model=\"keyValue\"\n label=\"Value\"\n data-test=\"env-value\"\n />\n </v-col>\n </v-row>\n <v-row dense>\n <v-btn\n block\n type=\"submit\"\n color=\"primary\"\n data-test=\"add-env\"\n :disabled=\"!key || !keyValue\"\n @click.prevent=\"addEnvironment\"\n >\n Add\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n modelValue: Boolean,\n },\n emits: ['update:modelValue'],\n data() {\n return {\n alert: '',\n alertType: 'success',\n showAlert: false,\n search: '',\n key: '',\n keyValue: '',\n environment: [],\n headers: [\n {\n text: 'Key',\n value: 'key',\n },\n {\n text: 'Value',\n value: 'value',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted() {\n this.update()\n },\n methods: {\n alertHandler: function (event) {\n this.alert = event.text\n this.alertType = event.type\n this.showAlert = true\n },\n update: function () {\n Api.get('/openc3-api/environment')\n .then((response) => {\n this.environment = response.data\n })\n .catch((error) => {\n // TODO: $error.something\n })\n },\n addEnvironment: function () {\n Api.post('/openc3-api/environment', {\n data: {\n key: this.key.toUpperCase(),\n value: this.keyValue,\n },\n })\n .then((response) => {\n const alertEvent = {\n text: `New environment variable: ${response.data.name}`,\n type: 'success',\n }\n this.update()\n })\n .catch((error) => {\n const alertEvent = {\n text: `Failed to add environment variable: ${error}`,\n type: 'error',\n }\n this.alertHandler(alertEvent)\n })\n this.key = ''\n this.keyValue = ''\n },\n deleteEnvironment: function (env) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${env.key}=${env.value}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/openc3-api/environment/${env.name}`)\n })\n .then((response) => {\n const alertEvent = {\n text: `Removed environment variable: ${env.name}`,\n type: 'success',\n }\n this.alertHandler(alertEvent)\n this.update()\n })\n .catch((error) => {\n const alertEvent = {\n text: `Failed to delete environment: ${error}`,\n type: 'error',\n }\n this.alertHandler(alertEvent)\n })\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<!--\n# Due to performance issues in TreeView we implement TreeNode\n# based on code example provided in https://github.com/vuetifyjs/vuetify/issues/19919\n-->\n<template>\n <v-tooltip\n v-model=\"globalTooltip.show\"\n :text=\"globalTooltip.text\"\n location=\"top\"\n :style=\"`position: fixed; left: ${globalTooltip.x}px; top: ${globalTooltip.y}px; pointer-events: none;`\"\n />\n\n <div class=\"tree-node\">\n <div v-if=\"showNode\" class=\"node-content\" @click=\"handleClick(node)\">\n <div class=\"content-wrapper\">\n <v-icon\n v-if=\"node.children\"\n class=\"toggle-icon\"\n style=\"padding-right: 10px\"\n >\n {{ node.isOpen ? 'mdi-menu-down' : 'mdi-menu-right' }}\n </v-icon>\n <v-icon v-if=\"node.children\" size=\"small\" style=\"padding-right: 10px\">\n {{ 'mdi-folder' }}\n </v-icon>\n <v-icon\n v-else-if=\"node.title.includes('.rb')\"\n size=\"small\"\n style=\"padding-right: 10px\"\n >\n {{ 'mdi-language-ruby' }}\n </v-icon>\n <v-icon\n v-else-if=\"node.title.includes('.py')\"\n size=\"small\"\n style=\"padding-right: 10px\"\n >\n {{ 'mdi-language-python' }}\n </v-icon>\n <v-icon v-else size=\"small\" style=\"padding-right: 10px\">\n {{ 'mdi-file-document' }}\n </v-icon>\n <span\n class=\"text-h6\"\n :tabindex=\"node.children ? -1 : 0\"\n @keyup.enter=\"handleClick(node)\"\n @mouseenter=\"showGlobalTooltip($event, node.title)\"\n @mouseleave=\"hideGlobalTooltip\"\n >\n {{ node.title }}\n </span>\n\n <v-btn\n v-if=\"node.title === '__TEMP__'\"\n icon=\"mdi-delete\"\n variant=\"text\"\n style=\"margin-left: auto\"\n aria-label=\"Delete\"\n @click=\"emit('delete')\"\n />\n </div>\n </div>\n <div v-else></div>\n <div v-if=\"node.children && node.isOpen\" class=\"children\">\n <tree-node\n v-for=\"child in node.children\"\n :key=\"child.id\"\n :node=\"child\"\n :search=\"search\"\n :type=\"type\"\n @node-toggled=\"bubbleNodeToggled\"\n @request=\"bubbleNodeRequest\"\n ></tree-node>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, watch } from 'vue'\n\nconst props = defineProps({\n node: {\n type: Object,\n required: true,\n },\n search: {\n type: String,\n default: '',\n },\n type: {\n type: String,\n default: 'open',\n },\n})\n\nconst isOpen = ref(props.node.isOpen || false)\n\nconst showNode = computed(() => {\n const _nodeOrChildMatchesSearch = (node) => {\n if (!props.search) {\n return true\n }\n if (node.path.toLowerCase().includes(props.search.toLowerCase())) {\n return true\n }\n return !!node.children?.some(_nodeOrChildMatchesSearch)\n }\n\n return _nodeOrChildMatchesSearch(props.node)\n})\n\nwatch(\n () => props.node.isOpen,\n (newpath) => {\n isOpen.value = newpath\n },\n)\n\nwatch(\n () => props.search,\n (newSearch) => {\n if (newSearch) {\n if (!props.node.isOpen) toggle()\n } else {\n if (props.node.isOpen) toggle()\n }\n },\n)\n\nconst emit = defineEmits(['nodeToggled', 'request', 'delete'])\n\nconst globalTooltip = ref({\n show: false,\n text: '',\n x: 0,\n y: 0,\n})\n\nconst showGlobalTooltip = (event, text) => {\n // Only show tooltip if text is long enough to potentially overflow\n if (!text || text.length <= 50) return\n\n const rect = event.target.getBoundingClientRect()\n const centerX = rect.left\n const centerY = rect.top\n\n globalTooltip.value.text = text\n globalTooltip.value.x = centerX\n globalTooltip.value.y = centerY - 40\n globalTooltip.value.show = true\n}\n\nconst hideGlobalTooltip = () => {\n globalTooltip.value.show = false\n}\n\nconst handleClick = (node) => {\n if (node.children) {\n toggle()\n // Only emit request on folder for save dialog\n if (props.type === 'save') {\n emit('request', node)\n }\n } else {\n emit('request', node)\n }\n}\nconst toggle = () => {\n if (props.node.children) {\n isOpen.value = !isOpen.value\n // Note: Intentionally updating node.isOpen for tree state persistence\n // eslint-disable-next-line vue/no-mutating-props\n props.node.isOpen = isOpen.value\n emit('nodeToggled', props.node.id, isOpen.value)\n }\n}\n// Bubble up the event for the nested tree-nodes\nconst bubbleNodeToggled = (nodeName, isOpen) => {\n emit('nodeToggled', nodeName, isOpen)\n}\nconst bubbleNodeRequest = (node) => {\n emit('request', node)\n}\n</script>\n\n<style scoped>\n.children {\n padding-left: 25px;\n}\n.content-wrapper {\n align-items: center;\n display: flex;\n max-height: 38px;\n}\n.node-content {\n cursor: pointer;\n overflow: hidden;\n user-select: none;\n white-space: nowrap;\n}\n.node-content:hover {\n background-color: rgba(211, 211, 211, 0.2);\n transition: background-color 0.3s ease;\n}\n.title {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.toggle-icon {\n width: 20px;\n}\n.tree-node {\n line-height: 1.8;\n position: relative;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, 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 <v-dialog\n v-model=\"show\"\n persistent\n width=\"800\"\n @keydown.enter=\"success()\"\n @keydown.esc=\"disableButtons ? null : (show = false)\"\n >\n <v-card>\n <v-overlay :model-value=\"loading\">\n <v-progress-circular\n indeterminate\n absolute\n size=\"64\"\n ></v-progress-circular>\n </v-overlay>\n <form @submit.prevent=\"success\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row>{{ helpText }} </v-row>\n <v-row dense class=\"mt-5\">\n <v-text-field\n v-model=\"search\"\n flat\n autofocus\n hide-details\n clearable\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n density=\"compact\"\n data-test=\"file-open-save-search\"\n />\n </v-row>\n <div class=\"overflow-y-auto tree-container\">\n <tree-node\n v-for=\"node in items\"\n :key=\"`${node.id}`\"\n :node=\"node\"\n :search=\"search\"\n :type=\"type\"\n @request=\"activeFile\"\n @delete=\"deleteTemp\"\n ></tree-node>\n </div>\n <v-row class=\"my-2\">\n <v-text-field\n v-model=\"selectedFile\"\n hide-details\n label=\"Filename\"\n data-test=\"file-open-save-filename\"\n :disabled=\"type === 'open'\"\n />\n </v-row>\n <v-row dense>\n <div\n v-show=\"error\"\n class=\"my-2 text-red\"\n style=\"white-space: pre-line\"\n >\n {{ error }}\n </div>\n </v-row>\n <v-row class=\"mt-2\">\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n class=\"mx-2\"\n data-test=\"file-open-save-cancel-btn\"\n :disabled=\"disableButtons\"\n @click=\"show = false\"\n >\n Cancel\n </v-btn>\n <v-btn\n ref=\"submitBtn\"\n type=\"submit\"\n color=\"primary\"\n class=\"mx-2\"\n data-test=\"file-open-save-submit-btn\"\n :disabled=\"disableButtons || !!error\"\n @click.prevent=\"success\"\n >\n {{ submit }}\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { fileIcon } from '@/util/fileIcon'\nimport TreeNode from './TreeNode.vue'\n\nexport default {\n components: {\n TreeNode,\n },\n props: {\n type: {\n type: String,\n required: true,\n validator: function (value) {\n // The value must match one of these strings\n return ['open', 'save'].indexOf(value) !== -1\n },\n },\n apiUrl: {\n type: String,\n default: null,\n }, // Base API URL for use with scripts or cmd-tlm\n requireTargetParentDir: Boolean, // Require that the save filename be nested in a directory with the name of a target\n inputFilename: {\n type: String,\n default: null,\n }, // passed if this is a 'save' dialog\n modelValue: Boolean,\n customHelpText: {\n type: String,\n default: null,\n }, // Optional custom help text to display\n },\n emits: ['update:modelValue', 'error', 'clear-temp', 'file', 'filename'],\n data() {\n return {\n tree: [],\n items: [],\n search: null,\n selectedFile: null,\n disableButtons: false,\n targets: [],\n targetsRetrieved: [],\n loading: true,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n title: function () {\n if (this.type === 'open') {\n return 'File Open'\n } else {\n return 'File Save As...'\n }\n },\n submit: function () {\n if (this.type === 'open') {\n return 'OPEN'\n } else {\n return 'SAVE'\n }\n },\n helpText: function () {\n if (this.customHelpText) {\n return this.customHelpText\n }\n if (this.type === 'open') {\n return 'Click on folders to open them and then click a file to select it before clicking Open. Use the search box to filter the results. You can also Tab to the files and Enter to select.'\n } else {\n return 'Click on the folder to save into. Then complete the filename path with the desired name. Use the search box to filter the results.'\n }\n },\n error: function () {\n if (this.selectedFile === '' || this.selectedFile === null) {\n return 'No file selected must select a file'\n }\n if (\n !this.selectedFile.match(this.validFilenameRegex) ||\n this.selectedFile.match(/\\.\\.|\\/\\/|\\.\\/|\\/\\./) // Block .'s and /'s next to each other (block path traversal)\n ) {\n let message = `${this.selectedFile} is not a valid filename. Must `\n if (this.requireTargetParentDir) {\n message += 'be in a target directory and '\n }\n message +=\n 'only contain alphanumeric characters (including !-_.*) and a valid extension.\\n\\n' +\n 'For example: TGT1/procedures/test.py or TGT2/lib/inst.rb'\n return message\n }\n if (this.type === 'save' && this.selectedFile.match(/\\*$/)) {\n let message = `${this.selectedFile} is not a valid filename. Must not end in '*'.`\n return message\n }\n return null\n },\n validFilenameRegex: function () {\n const alphanumeric = '0-9a-zA-Z'\n const charset = `${alphanumeric}\\\\/\\\\!\\\\-\\\\_\\\\.\\\\*\\\\'\\\\(\\\\)` // From https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html a-z A-Z 0-9 / ! - _ . * ' ( )\n let expression = `[${charset}]+\\\\.[${alphanumeric}]+`\n if (this.requireTargetParentDir) {\n const targets = `(${this.targets.join('|')})`\n expression = `\\\\/?${targets}\\\\/${expression}`\n }\n return new RegExp(expression)\n },\n },\n created() {\n Api.get('/openc3-api/targets').then((response) => {\n this.targets = response.data\n this.targets.push('__TEMP__') // Also support __TEMP__\n this.targets.forEach((target) => {\n // Name not found so push the item and add a children array\n this.items.push({\n id: target,\n disabled: true,\n title: target,\n children: [],\n path: target,\n })\n // Load the targets 1 by 1 in the background\n this.loadFiles(target)\n })\n this.loading = false\n })\n },\n methods: {\n calcIcon: function (filename) {\n return fileIcon(filename)\n },\n loadFiles: function (target) {\n Api.get(this.apiUrl, { params: { target } })\n .then((response) => {\n if (response.data.length === 0) {\n // Delete from items since there is no data\n this.items = this.items.filter((item) => item.id !== target)\n return\n }\n for (let file of response.data.sort()) {\n // Make a copy of the entire file path before calling insertFile\n // because insertFile does recursion and needs the original path\n this.filepath = file\n this.insertFile(this.items, 2, file)\n }\n if (this.inputFilename) {\n this.selectedFile = this.inputFilename\n }\n // Enable the target we just populated\n const index = this.items.findIndex((item) => item.id === target)\n if (index !== -1) {\n this.items[index].disabled = false\n }\n })\n .catch((error) => {\n this.$emit('error', `Failed to connect to OpenC3. ${error}`)\n })\n },\n clear: function () {\n this.show = false\n this.overwrite = false\n this.disableButtons = false\n },\n activeFile: function (file) {\n if (file.length === 0) {\n this.selectedFile = null\n } else {\n // Search through items to find the item with id\n this.selectedFile = this.findItem(this.items, file.id)\n // Select the Submit button so return opens the file\n setTimeout(() => {\n this.$refs.submitBtn.$el.focus()\n }, 100)\n }\n },\n findItem: function (items, id) {\n for (let item of items) {\n if (item.id === id) {\n return item.path\n }\n if (item.children) {\n const found = this.findItem(item.children, id)\n if (found) {\n return found\n }\n }\n }\n return null\n },\n exists: function (root, name) {\n let found = false\n for (let item of root) {\n if (item.path === name) {\n return true\n }\n if (item.path.length > 1) {\n if (item.path[item.path.length - 1] === '*') {\n // Try without the star too\n if (item.path.slice(0, item.path.length - 1) === name) {\n return true\n }\n }\n }\n if (item.children) {\n found = found || this.exists(item.children, name)\n }\n }\n return found\n },\n success: function () {\n // Only process the success call if a file is selected and no error\n if (this.selectedFile !== null && this.error === null) {\n if (this.type === 'open') {\n this.openSuccess()\n } else {\n this.saveSuccess()\n }\n }\n },\n deleteTemp: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete all the temporary files?`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete('/script-api/scripts/temp_files')\n })\n .then((response) => {\n this.$emit('clear-temp')\n this.loadFiles('__TEMP__')\n })\n .catch((error) => {\n this.$notify.serious({\n title: 'Error',\n body: `Failed to remove script temporary files due to ${error}`,\n })\n })\n },\n openSuccess: function () {\n // Disable the buttons because the API call can take a bit\n this.disableButtons = true\n Api.get(`${this.apiUrl}/${this.selectedFile}`)\n .then((response) => {\n const file = {\n name: this.selectedFile,\n contents: response.data.contents,\n }\n if (response.data.suites) {\n file['suites'] = JSON.parse(response.data.suites)\n }\n if (response.data.error) {\n file['error'] = response.data.error\n }\n if (response.data.success) {\n file['success'] = response.data.success\n }\n const locked = response.data.locked\n const breakpoints = response.data.breakpoints\n this.$emit('file', { file, locked, breakpoints })\n this.clear()\n })\n .catch((error) => {\n this.$emit('error', `Failed to open ${this.selectedFile}. ${error}`)\n this.clear()\n })\n },\n saveSuccess: function () {\n const found = this.exists(this.items, this.selectedFile)\n if (found) {\n this.$dialog\n .confirm(`Are you sure you want to overwrite: ${this.selectedFile}`, {\n okText: 'Overwrite',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('filename', this.selectedFile)\n this.clear()\n })\n .catch((error) => {}) // Cancel, do nothing\n } else {\n this.$emit('filename', this.selectedFile)\n this.clear()\n }\n },\n insertFile: function (root, level, path) {\n let parts = path.split('/')\n // When there is only 1 part we're at the root so push the filename\n if (parts.length === 1) {\n root.push({\n id: this.filepath,\n title: parts[0],\n file: 'ruby',\n path: this.filepath,\n })\n return\n }\n // Look for the first part of the path\n const index = root.findIndex((item) => item.title === parts[0])\n if (index === -1) {\n // Name not found so push the item and add a children array\n root.push({\n id: this.filepath\n .split('/')\n .slice(0, level - 1)\n .join('/'),\n title: parts[0],\n children: [],\n path: this.filepath\n .split('/')\n .slice(0, level - 1)\n .join('/'),\n })\n this.insertFile(\n root[root.length - 1].children, // Start from the node we just added\n level + 1,\n parts.slice(1).join('/'), // Strip the first part of the path\n )\n } else {\n // We already have something at this level so recursively\n // call the insertPart using the node we found and adjust the path\n this.insertFile(\n root[index].children,\n level + 1,\n parts.slice(1).join('/'),\n )\n }\n },\n },\n}\n</script>\n\n<style>\n.tree-container {\n background-color: var(--color-background-base-default);\n padding: 10px;\n margin-top: 5px;\n max-height: 60vh;\n font-size: large;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n#\n# This screen expects to be inside of two parent elements.\n# An overall item, and then a container for all screens\n-->\n\n<template>\n <div ref=\"bar\" :style=\"computedStyle\">\n <v-card\n v-if=\"!inline\"\n :min-height=\"height\"\n :min-width=\"width\"\n style=\"cursor: default\"\n >\n <v-toolbar height=\"24\">\n <v-btn\n v-show=\"errors.length !== 0\"\n icon=\"mdi-alert\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"error-graph-icon\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"edit-screen-icon\"\n aria-label=\"Edit Screen\"\n @click=\"openEdit\"\n />\n <v-tooltip v-if=\"!fixFloated\" :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :icon=\"floated ? 'mdi-balloon' : 'mdi-view-grid-outline'\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"float-screen-icon\"\n :aria-label=\"floated ? 'Unfloat Screen' : 'Float Screen'\"\n @click=\"floatScreen\"\n />\n </div>\n </template>\n <span> {{ floated ? 'Unfloat Screen' : 'Float Screen' }} </span>\n </v-tooltip>\n <v-tooltip v-if=\"floated\" :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n icon=\"mdi-arrow-up\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"up-screen-icon\"\n aria-label=\"Move Screen Up\"\n @click=\"upScreen\"\n />\n </div>\n </template>\n <span> Move Screen Up </span>\n </v-tooltip>\n <v-tooltip\n v-if=\"floated && zIndex > minZ\"\n :open-delay=\"600\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n icon=\"mdi-arrow-down\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"down-screen-icon\"\n aria-label=\"Move Screen Down\"\n @click=\"downScreen\"\n />\n </div>\n </template>\n <span> Move Screen Down </span>\n </v-tooltip>\n <v-spacer />\n <span> {{ target }} {{ screen }} </span>\n <v-spacer />\n <v-btn\n v-if=\"expand\"\n icon=\"mdi-window-minimize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"minimize-screen-icon\"\n aria-label=\"Minimize Screen\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-else\n icon=\"mdi-window-maximize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"maximize-screen-icon\"\n aria-label=\"Maximize Screen\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-if=\"showClose\"\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-screen-icon\"\n aria-label=\"Close Screen\"\n @click=\"$emit('close-screen')\"\n />\n </v-toolbar>\n <v-expand-transition v-if=\"!editDialog\">\n <div\n v-show=\"expand\"\n ref=\"screen\"\n class=\"pa-1\"\n style=\"position: relative\"\n >\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n scroll-strategy=\"none\"\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n @add-item=\"addItem\"\n @delete-item=\"deleteItem\"\n @open=\"open\"\n @close=\"close\"\n @close-all=\"closeAll\"\n />\n </div>\n </v-expand-transition>\n </v-card>\n\n <div v-if=\"inline\" class=\"pa-1\" style=\"position: relative\">\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n scroll-strategy=\"none\"\n />\n <v-btn\n v-show=\"errors.length !== 0\"\n icon=\"mdi-alert\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"error-graph-icon\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n @add-item=\"addItem\"\n @delete-item=\"deleteItem\"\n @open=\"open\"\n @close=\"close\"\n @close-all=\"closeAll\"\n />\n </div>\n\n <edit-screen-dialog\n v-if=\"editDialog\"\n v-model=\"editDialog\"\n :target=\"target\"\n :screen=\"screen\"\n :definition=\"currentDefinition\"\n :keywords=\"keywords\"\n :errors=\"errors\"\n @save=\"saveEdit\"\n @cancel=\"cancelEdit\"\n @delete=\"deleteScreen\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" width=\"60vw\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Screen: {{ target }} {{ screen }} Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card>\n <v-textarea class=\"errors\" readonly rows=\"13\" :model-value=\"error\" />\n <v-card-actions class=\"pb-5\">\n <v-spacer />\n <v-btn variant=\"outlined\" class=\"mr-2\" @click=\"clearErrors\">\n Clear Errors\n </v-btn>\n <v-btn variant=\"flat\" class=\"mr-2\" @click=\"errorDialog = false\">\n Close\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { uniqueId } from 'lodash'\nimport { Api, ConfigParserService, OpenC3Api } from '@openc3/js-common/services'\nimport WidgetComponents from '@/widgets/WidgetComponents'\nimport EditScreenDialog from './EditScreenDialog.vue'\n\nconst MAX_ERRORS = 20\n\nexport default {\n components: {\n EditScreenDialog,\n },\n mixins: [WidgetComponents],\n props: {\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n initialFloated: {\n type: Boolean,\n default: false,\n },\n initialTop: {\n type: Number,\n default: 0,\n },\n initialLeft: {\n type: Number,\n default: 0,\n },\n initialZ: {\n type: Number,\n default: 0,\n },\n minZ: {\n type: Number,\n default: 0,\n },\n fixFloated: {\n type: Boolean,\n default: false,\n },\n count: {\n type: Number,\n default: 0,\n },\n showClose: {\n type: Boolean,\n default: true,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n inline: {\n type: Boolean,\n default: false,\n },\n playbackMode: {\n type: String,\n default: 'realtime',\n },\n playbackDateTime: {\n type: Date,\n default: null,\n },\n frozen: {\n type: Boolean,\n default: false,\n },\n frozenValues: {\n type: Object,\n default: null,\n },\n },\n emits: [\n 'close-screen',\n 'delete-screen',\n 'drag-screen',\n 'edit-screen',\n 'float-screen',\n 'min-max-screen',\n 'unfloat-screen',\n ],\n data() {\n return {\n api: null,\n backup: '',\n currentDefinition: this.definition,\n editDialog: false,\n expand: true,\n configParser: null,\n currentLayout: null,\n layoutStack: [],\n namedWidgets: {},\n dynamicWidgets: [],\n width: null,\n height: null,\n staleTime: 30,\n cacheTimeout: 0.1,\n globalSettings: [],\n substitute: false,\n original_target_name: null,\n force_substitute: false,\n pollingPeriod: 1,\n errors: [],\n errorDialog: false,\n screenKey: null,\n dragX: 0,\n dragY: 0,\n floated: this.initialFloated,\n top: this.initialTop,\n left: this.initialLeft,\n zIndex: this.initialZ,\n changeCounter: 0,\n screenItems: [],\n actualScreenItems: [],\n screenValues: {},\n updateCounter: 0,\n updater: null,\n screenId: uniqueId('openc3-screen_'),\n tlmAvailableTimeout: null,\n }\n },\n computed: {\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n let messages = new Set()\n let result = ''\n for (const error of this.errors) {\n if (messages.has(error.message)) {\n continue\n }\n let msg = `${error.time}: (${error.type}) ${error.message}\\n`\n result += msg\n messages.add(error.message)\n }\n return result\n }\n return null\n },\n computedStyle() {\n let style = {}\n // note down what the width was in case it was set to AUTO, because absolute positioning will lose that\n const origWidth = this.width || this.$refs.bar?.clientWidth\n if (this.floated) {\n style['position'] = 'absolute'\n style['top'] = this.top + 'px'\n style['left'] = this.left + 'px'\n style['width'] = origWidth + 'px'\n }\n return style\n },\n },\n watch: {\n count: {\n handler(newValue, oldValue) {\n this.currentDefinition = this.definition\n this.rerender()\n },\n },\n playbackDateTime: {\n handler(newValue, oldValue) {\n if (this.playbackMode === 'playback' && newValue) {\n this.update()\n }\n },\n },\n playbackMode: {\n handler(newValue, oldValue) {\n if (newValue === 'realtime') {\n this.updateRefreshInterval()\n } else {\n // Initially playback just clears all updates\n // The play button restarts the updater\n clearInterval(this.updater)\n this.updater = null\n }\n },\n },\n frozen: {\n handler(newValue) {\n if (newValue) {\n // Stop updates when frozen\n if (this.updater) {\n clearInterval(this.updater)\n this.updater = null\n }\n } else {\n // Resume updates when unfrozen\n if (this.playbackMode === 'realtime') {\n this.updateRefreshInterval()\n }\n }\n },\n },\n frozenValues: {\n immediate: true,\n handler(newValue) {\n if (newValue && this.frozen) {\n // Apply frozen values to screenValues\n Object.assign(this.screenValues, newValue)\n }\n },\n },\n },\n // Called when an error from any descendent component is captured\n // We need this because an error can occur from any of the children\n // in the widget stack and are typically thrown on create()\n errorCaptured(err, vm, info) {\n if (this.errors.length < MAX_ERRORS) {\n if (err.usage) {\n this.errors.push({\n type: 'usage',\n message: err.message,\n usage: err.usage,\n line: err.line,\n lineNumber: err.lineNumber,\n time: new Date().getTime(),\n })\n } else {\n this.errors.push({\n type: 'error',\n message: err,\n time: new Date().getTime(),\n })\n }\n }\n return false\n },\n created() {\n this.api = new OpenC3Api()\n this.configParser = new ConfigParserService()\n this.parseDefinition()\n this.screenKey = Math.floor(Math.random() * 1000000)\n },\n mounted() {\n if (this.playbackMode === 'realtime' && !this.frozen) {\n this.updateRefreshInterval()\n }\n // If frozen with frozenValues, apply them after parsing\n if (this.frozen && this.frozenValues) {\n this.$nextTick(() => {\n Object.assign(this.screenValues, this.frozenValues)\n })\n }\n if (this.floated) {\n this.$refs.bar.onmousedown = this.dragMouseDown\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n }\n },\n unmounted() {\n if (this.updater != null) {\n clearInterval(this.updater)\n this.updater = null\n }\n if (this.tlmAvailableTimeout != null) {\n clearTimeout(this.tlmAvailableTimeout)\n this.tlmAvailableTimeout = null\n }\n },\n methods: {\n // These are API methods that ButtonWidget uses to open and close screens\n open(target, screen) {\n this.$parent.showScreen(target, screen)\n },\n close(target, screen) {\n this.$parent.closeScreenByName(target, screen)\n },\n closeAll() {\n this.$parent.closeAll()\n },\n clearErrors: function () {\n this.errors = []\n },\n updateRefreshInterval: function () {\n let refreshInterval = this.pollingPeriod * 1000\n if (this.updater) {\n clearInterval(this.updater)\n }\n this.updater = setInterval(() => {\n this.update()\n }, refreshInterval)\n },\n parseDefinition: function () {\n // Each time we start over and parse the screen definition\n this.clearErrors()\n this.screenItems = []\n this.namedWidgets = {}\n this.layoutStack = []\n this.dynamicWidgets = []\n // Every screen starts with a VerticalWidget\n this.layoutStack.push({\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n })\n this.currentLayout = this.layoutStack[this.layoutStack.length - 1]\n\n this.configParser.parse_string(\n this.currentDefinition,\n '',\n false,\n true,\n (keyword, parameters, line, lineNumber) => {\n if (keyword) {\n switch (keyword) {\n case 'SCREEN':\n this.configParser.verify_num_parameters(\n 3,\n 4,\n `${keyword} <Width or AUTO> <Height or AUTO> <Polling Period>`,\n )\n this.width = parseInt(parameters[0])\n this.height = parseInt(parameters[1])\n this.pollingPeriod = parseFloat(parameters[2])\n break\n case 'END':\n this.configParser.verify_num_parameters(0, 0, `${keyword}`)\n this.layoutStack.pop()\n this.currentLayout =\n this.layoutStack[this.layoutStack.length - 1]\n break\n case 'STALE_TIME':\n this.configParser.verify_num_parameters(\n 1,\n 1,\n `${keyword} <Time (s)>`,\n )\n this.staleTime = parseInt(parameters[0])\n break\n case 'SUBSETTING':\n this.configParser.verify_num_parameters(\n 3,\n null,\n `${keyword} <Index> <Widget Type> <Widget Settings...>`,\n )\n if (parameters[1] === 'RAW') {\n parameters[1] = 'RAW__' + parameters[2].toLowerCase()\n }\n case 'SETTING':\n this.configParser.verify_num_parameters(\n 2,\n null,\n `${keyword} <Widget Type> <Widget Settings...>`,\n )\n if (parameters[0] === 'RAW') {\n parameters[0] = 'RAW__' + parameters[1].toLowerCase()\n }\n const widget =\n this.currentLayout.widgets[\n this.currentLayout.widgets.length - 1\n ] ?? this.currentLayout\n widget.settings.push(parameters)\n break\n case 'TOOLTIP':\n this.configParser.verify_num_parameters(\n 1,\n 2,\n `${keyword} <Tooltip Text> <Delay (ms)>`,\n )\n // Add TOOLTIP to the previous widget's settings (like SETTING does)\n const tooltipWidget =\n this.currentLayout.widgets[\n this.currentLayout.widgets.length - 1\n ] ?? this.currentLayout\n tooltipWidget.settings.push([\n 'TOOLTIP',\n parameters[0],\n parameters[1],\n ])\n break\n case 'GLOBAL_SUBSETTING':\n this.configParser.verify_num_parameters(\n 3,\n null,\n `${keyword} <Index> <Widget Type> <Widget Settings...>`,\n )\n if (parameters[2] === 'RAW') {\n parameters[2] = 'RAW__' + parameters[3].toLowerCase()\n }\n case 'GLOBAL_SETTING':\n this.configParser.verify_num_parameters(\n 2,\n null,\n `${keyword} <Widget Type> <Widget Settings...>`,\n )\n if (parameters[1] === 'RAW') {\n parameters[1] = 'RAW__' + parameters[2].toLowerCase()\n }\n this.globalSettings.push(parameters)\n break\n default:\n this.processWidget(keyword, parameters, line, lineNumber)\n break\n } // switch keyword\n } // if keyword\n },\n )\n // This can happen if there is a typo in a layout widget with a corresponding END\n if (typeof this.layoutStack[0] === 'undefined') {\n let names = []\n let lines = []\n for (const widget of this.dynamicWidgets) {\n names.push(widget.name)\n lines.push(widget.lineNumber)\n }\n // Warn about any of the Dynamic widgets we found .. they could be typos\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push({\n type: 'usage',\n message: `Unknown widget! Are these widgets: ${names.join(',')}?`,\n lineNumber: lines.join(','),\n time: new Date().getTime(),\n })\n }\n // Create a simple VerticalWidget to replace the bad widget so\n // the layout stack can successfully unwind\n this.layoutStack[0] = {\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n }\n } else {\n this.applyGlobalSettings(this.layoutStack[0].widgets)\n }\n },\n openEdit: function () {\n // Make a copy in case they edit and cancel\n this.backup = this.currentDefinition.repeat(1)\n this.editDialog = true\n },\n upScreen: function () {\n this.zIndex += 1\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n },\n downScreen: function () {\n if (this.zIndex > this.minZ) {\n this.zIndex -= 1\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n }\n },\n floatScreen: function () {\n if (this.floated) {\n this.$refs.bar.onmousedown = null\n this.$refs.bar.parentElement.parentElement.style = 'z-index: 0'\n this.floated = false\n this.$emit('unfloat-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n } else {\n let bodyRect =\n this.$refs.bar.parentElement.parentElement.parentElement.getBoundingClientRect()\n let elemRect = this.$refs.bar.getBoundingClientRect()\n this.top = elemRect.top - bodyRect.top - 5\n this.left = elemRect.left - bodyRect.left - 5\n this.$refs.bar.onmousedown = this.dragMouseDown\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.floated = true\n this.$emit('float-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n }\n },\n dragMouseDown: function (e) {\n e = e || window.event\n e.preventDefault()\n // get the mouse cursor position at startup:\n this.dragX = e.clientX\n this.dragY = e.clientY\n document.onmouseup = this.closeDragElement\n // call a function whenever the cursor moves:\n document.onmousemove = this.elementDrag\n },\n elementDrag: function (e) {\n e = e || window.event\n e.preventDefault()\n // calculate the new cursor position:\n let xOffset = this.dragX - e.clientX\n let yOffset = this.dragY - e.clientY\n this.dragX = e.clientX\n this.dragY = e.clientY\n // set the element's new position:\n this.top = this.$refs.bar.offsetTop - yOffset\n this.left = this.$refs.bar.offsetLeft - xOffset\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n },\n closeDragElement: function () {\n // stop moving when mouse button is released:\n document.onmouseup = null\n document.onmousemove = null\n },\n rerender: function () {\n this.parseDefinition()\n this.updateRefreshInterval()\n // Force re-render\n this.screenKey = Math.floor(Math.random() * 1000000)\n // After re-render clear any errors\n this.$nextTick(function () {\n this.clearErrors()\n this.$emit('edit-screen')\n })\n },\n cancelEdit: function () {\n this.file = null\n this.editDialog = false\n // Restore the backup since we cancelled\n this.currentDefinition = this.backup\n this.rerender()\n },\n saveEdit: function (definition) {\n this.editDialog = false\n this.currentDefinition = definition\n this.rerender()\n this.$nextTick(function () {\n Api.post(\n '/openc3-api/screen/',\n {\n data: {\n scope: window.openc3Scope,\n target: this.target,\n screen: this.screen,\n text: this.currentDefinition,\n },\n },\n 0,\n )\n })\n },\n deleteScreen: function () {\n this.editDialog = false\n Api.delete(`/openc3-api/screen/${this.target}/${this.screen}`).then(\n (response) => {\n this.$emit('delete-screen')\n },\n )\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-screen')\n },\n processWidget: function (keyword, parameters, line, lineNumber) {\n let widgetName = null\n if (keyword === 'NAMED_WIDGET') {\n this.configParser.verify_num_parameters(\n 2,\n null,\n `${keyword} <Widget Name> <Widget Type> <Widget Settings... (optional)>`,\n )\n widgetName = parameters[0].toUpperCase()\n keyword = parameters[1].toUpperCase()\n parameters = parameters.slice(2, parameters.length)\n }\n const componentName =\n keyword.charAt(0).toUpperCase() +\n keyword.slice(1).toLowerCase() +\n 'Widget'\n let settings = []\n // Give all the widgets a reference to this screen\n // Use settings so we don't break existing custom widgets\n settings.push(['__SCREEN_ID__', this.screenId])\n if (widgetName !== null) {\n // Push a reference to the screen so the layout can register when it is created\n // We do this because the widget isn't actually created until\n // the layout happens with <component :is='type'>\n settings.push(['NAMED_WIDGET', widgetName])\n }\n // If this is a layout widget we add it to the layoutStack and reset the currentLayout\n if (\n keyword === 'VERTICAL' ||\n keyword === 'VERTICALBOX' ||\n keyword === 'HORIZONTAL' ||\n keyword === 'HORIZONTALBOX' ||\n keyword === 'MATRIXBYCOLUMNS' ||\n keyword === 'TABBOOK' ||\n keyword === 'TABITEM' ||\n keyword === 'CANVAS' ||\n keyword === 'RADIOGROUP' ||\n keyword === 'SCROLLWINDOW'\n ) {\n const layout = {\n type: componentName,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n widgets: [],\n }\n this.layoutStack.push(layout)\n this.currentLayout.widgets.push(layout)\n this.currentLayout = layout\n } else if (this.$options.components[componentName]) {\n this.currentLayout.widgets.push({\n type: componentName,\n target: this.target,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n line: line,\n lineNumber: lineNumber,\n })\n } else {\n let widget = {\n type: 'DynamicWidget',\n target: this.target,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n name: componentName,\n line: line,\n lineNumber: lineNumber,\n }\n this.currentLayout.widgets.push(widget)\n this.dynamicWidgets.push(widget)\n }\n },\n applyGlobalSettings: function (widgets) {\n widgets.forEach((widget) => {\n this.globalSettings.forEach((setting) => {\n // widget.type is already the full camelcase widget name like LabelWidget\n // so we have to lower case both and tack on 'widget' to compare\n if (\n widget.type.toLowerCase() ===\n setting[0].toLowerCase() + 'widget'\n ) {\n const existingSetting = widget.settings.find(\n (s) => s[0] === setting[1],\n )\n if (!existingSetting) {\n widget.settings.push(setting.slice(1))\n }\n }\n })\n // Recursively apply to all widgets contained in layouts\n if (widget.widgets) {\n this.applyGlobalSettings(widget.widgets)\n }\n })\n },\n update: function () {\n // Don't update if frozen\n if (this.frozen) {\n return\n }\n // Only pass the dateTime if we're in playback mode, null means realtime\n let dateTime =\n this.playbackMode === 'playback' ? this.playbackDateTime : null\n if (this.actualScreenItems.length !== 0) {\n this.api\n .get_tlm_values(\n this.actualScreenItems,\n this.staleTime,\n this.cacheTimeout,\n dateTime,\n )\n .then((data) => {\n if (data && data.length > 0) {\n this.updateValues(data)\n }\n })\n .catch((error) => {\n let message = JSON.stringify(error, null, 2)\n if (\n !this.errors.find((existing) => {\n return existing.message === message\n })\n ) {\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push({\n type: 'error',\n message: message,\n time: new Date().getTime(),\n })\n }\n }\n })\n }\n },\n updateValues: function (values) {\n this.updateCounter += 1\n if (\n values.length != this.screenItems.length ||\n values.length != this.actualScreenItems.length\n ) {\n // eslint-disable-next-line no-console\n console.log(\n `get_tlm_values mismatch: data.length: ${values.length}, screenItems.length: ${this.screenItems.length}, actualScreenItems.length: ${this.actualScreenItems.length}`,\n JSON.stringify(values),\n JSON.stringify(this.screenItems),\n JSON.stringify(this.actualScreenItems),\n )\n } else {\n for (let i = 0; i < values.length; i++) {\n values[i].push(this.updateCounter)\n this.screenValues[this.screenItems[i]] = values[i]\n }\n }\n },\n debouncedUpdateTlmAvailable: function () {\n // Skip API calls when frozen - we're using saved values\n if (this.frozen) {\n return\n }\n if (this.tlmAvailableTimeout != null) {\n clearTimeout(this.tlmAvailableTimeout)\n }\n this.tlmAvailableTimeout = setTimeout(() => {\n this.api\n .get_tlm_available(this.screenItems)\n .then((data) => {\n this.actualScreenItems = data\n // This must be the same or we're going to have problems\n // because the data comes back in an ordered array\n if (this.screenItems.length != data.length) {\n // eslint-disable-next-line no-console\n console.log(\n 'Error getting tlm available',\n this.screenItems,\n this.actualScreenItems,\n )\n } else {\n for (let i = 0; i < this.actualScreenItems.length; i++) {\n if (this.actualScreenItems[i] === null) {\n // Try to find the line in the screen definition for this item\n const parts = this.screenItems[i].split('__')\n const lines = this.currentDefinition.split('\\n')\n const itemLine =\n lines.findIndex(\n (line) =>\n line.includes(parts[0]) &&\n line.includes(parts[1]) &&\n line.includes(parts[2]),\n ) + 1 // +1 for 1-based line number\n if (itemLine > 0) {\n this.errors.push({\n type: 'usage',\n message: `Null for ${parts.join(' ')}! Does it exist?`,\n line: lines[itemLine - 1], // 0-based line array\n lineNumber: itemLine,\n time: new Date().getTime(),\n })\n } else {\n this.errors.push({\n type: 'error',\n message: `Null for ${parts.join(' ')}! Does it exist?`,\n time: new Date().getTime(),\n })\n }\n }\n }\n }\n })\n .catch((error) => {\n // eslint-disable-next-line\n console.log('Error getting tlm available', error)\n this.actualScreenItems = this.screenItems\n })\n this.tlmAvailableTimeout = null\n }, 100)\n },\n addItem: function (valueId) {\n this.screenItems.push(valueId)\n // If frozen and we have a saved value for this item, use it\n // Otherwise initialize to null\n if (this.frozen && this.frozenValues && this.frozenValues[valueId]) {\n this.screenValues[valueId] = this.frozenValues[valueId]\n } else {\n this.screenValues[valueId] = [null, null, 0]\n }\n this.debouncedUpdateTlmAvailable()\n },\n deleteItem: function (valueId) {\n let index = this.screenItems.indexOf(valueId)\n this.screenItems.splice(index, 1)\n this.debouncedUpdateTlmAvailable()\n },\n // Get current screen values for saving (used by notebooks)\n getScreenValues: function () {\n // Return a copy of the current screen values\n return JSON.parse(JSON.stringify(this.screenValues))\n },\n },\n}\n</script>\n\n<style scoped>\n.errors {\n padding-top: 0px;\n margin-top: 0px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n -webkit-mask-image: unset;\n mask-image: unset;\n}\n</style>\n"],"names":["ScreenCompleter","Api","response","OpenC3Api","editor","session","pos","prefix","callback","parsedLine","suggestions","x","result","more","current","acc","curr","target_name","pkt","packet_name","items","item","completions","_sfc_main","newValue","screenMode","error","ace.edit","AceEditorUtils","oop","ace.require","TextHighlightRules","list","OpenC3HighlightRules","Mode","TextMode","event","position","token","value","blob","link","fileReader","that","_hoisted_1","_openBlock","_createElementBlock","_createVNode","_component_v_row","_component_v_btn","$data","$options","_cache","_component_v_file_input","$event","_component_v_spacer","_createElementVNode","$props","args","_component_v_menu","_component_v_list","_component_v_list_item","_component_v_list_item_title","_createTextVNode","_toDisplayString","_component_v_divider","ScreenEditor","messages","sortedErrors","a","b","msg","dialog","_createBlock","_component_v_dialog","_ctx","_component_v_card","_component_v_toolbar","_component_v_card_text","_component_screen_editor","_Fragment","_renderList","index","getKeywords","type","getAutocompleteData","groupBy","array","lambda","groups","key","toMethodCallSyntaxRegex","word","opening","params","PacketCompleter","dataReadyCallback","expressionsReadyCallback","_editor","_prefix","matches","lineBeforeCursor","regex","CmdCompleter","TlmCompleter","packetName","itemName","amendedItem","foundPacket","alertEvent","env","_component_v_text_field","_component_v_data_table","_withCtx","_component_v_col","props","__props","isOpen","ref","showNode","computed","_nodeOrChildMatchesSearch","node","_a","watch","newpath","newSearch","toggle","emit","__emit","globalTooltip","showGlobalTooltip","text","rect","centerX","centerY","hideGlobalTooltip","handleClick","bubbleNodeToggled","nodeName","bubbleNodeRequest","_component_v_tooltip","_hoisted_2","_component_v_icon","_withKeys","_hoisted_3","_hoisted_4","_hoisted_5","child","_component_tree_node","TreeNode","message","alphanumeric","expression","target","filename","fileIcon","file","id","found","root","name","locked","breakpoints","level","path","parts","_component_v_overlay","_component_v_progress_circular","MAX_ERRORS","EditScreenDialog","WidgetComponents","uniqueId","style","origWidth","oldValue","err","vm","info","ConfigParserService","screen","refreshInterval","keyword","parameters","line","lineNumber","names","lines","widget","bodyRect","elemRect","e","xOffset","yOffset","definition","widgetName","componentName","settings","layout","widgets","setting","s","dateTime","data","existing","values","i","itemLine","valueId","_vShow","_component_v_expand_transition","_withDirectives","_component_vertical_widget","_component_edit_screen_dialog","_component_v_textarea","_component_v_card_actions"],"mappings":"yPA0Ce,MAAMA,CAAgB,CACnC,aAAc,CAIZC,EAAAA,GAAI,IAAI,sCAAsC,EAAE,KAAMC,GAAa,CACjE,KAAK,iBAAmBA,EAAS,IACnC,CAAC,EACD,KAAK,IAAM,IAAIC,EAAAA,EACjB,CAEA,MAAM,eAAeC,EAAQC,EAASC,EAAKC,EAAQC,EAAU,CAG3D,IAAIC,EAFOJ,EAAQ,QAAQC,EAAI,GAAG,EACZ,MAAM,EAAGA,EAAI,MAAM,EACb,UAAS,EAAG,MAAM,aAAa,EACvDI,EAAc,KAAK,iBAEnBD,EAAW,OAAS,IACtBC,EAAcA,EAAY,KAAMC,GAAMA,EAAE,UAAYF,EAAW,CAAC,CAAC,GAEnE,IAAIG,EAAS,CAAA,EACTC,EAAO,GAIX,GAAIH,GAAeA,EAAY,OAAW,CAEpCA,EAAY,OAAU,QAAUD,EAAW,OAAS,IACtDI,EAAO,IAIT,IAAIC,EAAUJ,EAAY,OAAUD,EAAW,OAAS,CAAC,EAGzD,GAAIK,EAAQ,aAAa,EAEvBJ,GADmB,MAAM,KAAK,IAAI,iBAAgB,GACvB,OACzB,CAACK,EAAKC,KAAWD,EAAIC,CAAI,EAAI,EAAID,GACjC,CAAA,CACV,UACiBD,EAAQ,aAAa,EAAG,CACjC,IAAIG,EAAcR,EAAWA,EAAW,OAAS,CAAC,EAElDC,GADc,MAAM,KAAK,IAAI,YAAYO,CAAW,GAC9B,OACpB,CAACF,EAAKG,KAAUH,EAAIG,EAAI,WAAW,EAAIA,EAAI,YAAcH,GACzD,CAAA,CACV,EACQL,EAAY,OAAY,gCAC1B,SAAWI,EAAQ,WAAW,EAAG,CAC/B,IAAIG,EAAcR,EAAWA,EAAW,OAAS,CAAC,EAC9CU,EAAcV,EAAWA,EAAW,OAAS,CAAC,EAClD,GAAIU,IAAgB,SAAU,CAC5B,IAAIC,EAAQ,MAAM,KAAK,IAAI,uBAAuBH,CAAW,EAC7DP,EAAc,CAAA,EACdU,EAAM,QAASC,GAAS,CACtBX,EAAYW,CAAI,EAAI,UAAUA,CAAI,EACpC,CAAC,CACH,MAEEX,GADa,MAAM,KAAK,IAAI,QAAQO,EAAaE,CAAW,GACvC,MAAM,OACzB,CAACJ,EAAKM,KAAWN,EAAIM,EAAK,IAAI,EAAIA,EAAK,YAAcN,GACrD,CAAA,CACZ,CAEM,MAEEL,EAAcI,EAGhBF,EAAS,OAAO,KAAKF,GAAe,CAAA,CAAE,EAAE,IAAKC,GAAM,CACjD,IAAIW,EAAc,CAChB,MAAOX,GAAKE,EAAO,IAAM,IAGzB,QAASA,GAAQ,mBAC3B,EAGQ,OAAI,OAAOH,EAAYC,CAAC,GAAM,WAC5BW,EAAY,KAAUZ,EAAYC,CAAC,GAE9BW,CACT,CAAC,CACH,MAEEV,EAASF,EAEXF,EAAS,KAAMI,CAAM,CACvB,CACF,CCxCA,MAAKW,EAAU,CACb,MAAO,CACL,WAAY,CACV,KAAM,OACN,QAAS,IAEX,SAAU,CACR,KAAM,MACN,QAAS,IAAM,CAAA,GAEjB,OAAQ,CACN,KAAM,OACN,QAAS,QAEX,SAAU,CACR,KAAM,OACN,QAAS,eAGb,MAAO,CAAC,mBAAmB,EAC3B,MAAO,CACL,MAAO,CACL,OAAQ,KACR,KAAM,KACN,eAAgB,CAAA,EAChB,YAAa,GACb,YAAa,GACb,MAAO,EACP,MAAO,CACT,CACF,EACA,SAAU,CACR,mBAAoB,CAElB,OAAO,KAAK,SAAS,OAAS,EAAI,KAAK,SAAW,KAAK,cACzD,GAEF,MAAO,CACL,WAAWC,EAAU,CACf,KAAK,QAAU,KAAK,OAAO,SAAQ,IAAOA,IAC5C,KAAK,OAAO,SAASA,CAAQ,EAC7B,KAAK,OAAO,eAAc,EAE9B,EACA,mBAAoB,CAClB,GAAI,KAAK,OAAQ,CACf,MAAMC,EAAa,KAAK,gBAAe,EACvC,KAAK,OAAO,QAAQ,QAAQ,IAAIA,CAAY,CAC9C,CACF,GAEF,SAAU,CAEJ,KAAK,SAAS,SAAW,GAC3B,KAAK,aAAY,CAErB,EACA,SAAU,CACR,KAAK,WAAU,CACjB,EACA,eAAgB,CACV,KAAK,SACP,KAAK,OAAO,QAAO,EACnB,KAAK,OAAO,UAAU,OAAM,EAEhC,EACA,QAAS,CACP,MAAM,cAAe,CACnB,GAAI,CACF,MAAMvB,EAAW,MAAMD,EAAAA,GAAI,IACzB,0CACF,EACA,KAAK,eAAiBC,EAAS,IACjC,OAASwB,EAAO,CAEd,QAAQ,MAAM,iCAAkCA,CAAK,CACvD,CACF,EACA,YAAa,CACX,KAAK,OAASC,EAAAA,WAAAA,KAAS,KAAK,MAAM,MAAM,EACxC,KAAK,OAAO,SAAS,oBAAoB,EACzC,MAAMF,EAAa,KAAK,gBAAe,EACvC,KAAK,OAAO,QAAQ,QAAQ,IAAIA,CAAY,EAC5C,KAAK,OAAO,QAAQ,WAAW,CAAC,EAChC,KAAK,OAAO,QAAQ,eAAe,EAAI,EACvC,KAAK,OAAO,gBAAkB,IAC9B,KAAK,OAAO,UAAU,4BAA6B,EAAI,EACvD,KAAK,OAAO,UAAU,2BAA4B,EAAI,EACtD,KAAK,OAAO,WAAa,CAAC,IAAIzB,CAAiB,EAC/C,KAAK,OAAO,uBAAuB,EAAK,EACxC,KAAK,OAAO,SAAS,KAAK,UAAU,EACpC,KAAK,OAAO,eAAc,EAC1B4B,iBAAe,sBAAsB,KAAK,MAAM,EAChD,KAAK,OAAO,MAAK,EAEjB,KAAK,OAAO,QAAQ,GAAG,SAAU,IAAM,CACrC,KAAK,MAAM,oBAAqB,KAAK,OAAO,SAAQ,CAAE,CACxD,CAAC,CACH,EACA,UAAW,CACT,OAAO,KAAK,OAAS,KAAK,OAAO,SAAQ,EAAK,KAAK,UACrD,EACA,iBAAkB,CAChB,IAAIC,EAAMC,EAAAA,WAAAA,QAAY,aAAa,EAC/BC,EAAqBD,EAAAA,WAAAA,QACvB,+BACF,EAAE,mBAEEE,EAAO,KAAK,kBAAkB,KAAK,GAAG,EACtCC,EAAuB,UAAY,CACrC,KAAK,OAAS,CACZ,MAAO,CACL,CACE,MAAO,UACP,MAAO,QAET,CACE,MAAO,SACP,MAAO,SAET,CACE,MAAO,SACP,MAAO,SAET,CACE,MAAO,mBACP,MAAO,0BAET,CACE,MAAO,UACP,MAAOD,EAAO,IAAI,OAAO,SAASA,CAAI,MAAM,EAAI,QAGtD,EACA,KAAK,eAAc,CACrB,EACAH,EAAI,SAASI,EAAsBF,CAAkB,EACrD,IAAIG,EAAO,UAAY,CACrB,KAAK,eAAiBD,CACxB,EACIE,EAAWL,qBAAY,eAAe,EAAE,KAC5C,OAAAD,EAAI,SAASK,EAAMC,CAAQ,GACzB,UAAY,CACZ,KAAK,IAAM,iBACb,GAAG,KAAKD,EAAK,SAAS,EACfA,CACT,EACA,eAAgB,CACdN,iBAAe,cAAc,KAAK,MAAM,CAC1C,EACA,gBAAgBQ,EAAO,CACrB,KAAK,MAAQA,EAAM,MACnB,KAAK,MAAQA,EAAM,MAEnB,IAAIC,EAAW,KAAK,OAAO,kBAAiB,EACxCC,EAAQ,KAAK,OAAO,QAAQ,WAAWD,EAAS,IAAKA,EAAS,MAAM,EACxE,GAAIC,EAAO,CACT,IAAIC,EAAQD,EAAM,MAAM,KAAI,EACxBC,EAAM,SAAS,GAAG,EACpB,KAAK,YAAcA,EAAM,MAAM,GAAG,EAAE,CAAC,EAErC,KAAK,YAAcA,EAErB,KAAK,YAAc,EACrB,CACF,EACA,mBAAoB,CAClB,OAAO,KACL,GACE,OAAO,SAAS,MAClB,0DAA0D,KAAK,YAAY,YAAW,CAAE,GACxF,QACF,CACF,EACA,iBAAkB,CAChB,MAAMC,EAAO,IAAI,KAAK,CAAC,KAAK,OAAO,SAAQ,CAAE,EAAG,CAC9C,KAAM,aACP,EACKC,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAO,IAAI,gBAAgBD,CAAI,EACpCC,EAAK,aAAa,WAAY,KAAK,QAAQ,EAC3CA,EAAK,MAAK,CACZ,EACA,UAAW,CACT,MAAMC,EAAa,IAAI,WACvBA,EAAW,WAAW,KAAK,IAAI,EAC/B,MAAMC,EAAO,KACbD,EAAW,OAAS,UAAY,CAC9BC,EAAK,OAAO,SAASD,EAAW,MAAM,EACtCC,EAAK,OAAO,eAAc,EAC1BA,EAAK,KAAO,IACd,CACF,EAEJ,EA3QOC,EAAA,CAAA,MAAM,yBAAyB,gVAApC,OAAAC,YAAA,EAAAC,qBA4DM,MA5DNF,EA4DM,CA3DJG,EAAAA,YA6BQC,EAAA,CA7BD,aAAA,GAAW,MAAM,SAAS,MAAM,2BACrC,IASQ,CATRD,EAAAA,YASQE,EAAA,CARL,UAAWC,EAAA,KACZ,MAAM,UACN,KAAK,QACL,MAAM,OACN,YAAU,qBACT,QAAOC,EAAA,6BACT,IAED,CAAA,GAAAC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAFC,SAED,EAAA,qCACAL,EAAAA,YAQEM,EAAA,YAPSH,EAAA,0CAAAA,EAAA,KAAII,GACb,kBAAgB,KAChB,OAAO,OACP,MAAM,oCACN,QAAQ,UACR,eAAA,GACA,MAAA,CAAA,YAAA,OAAA,0BAEFP,EAAAA,YAAYQ,CAAA,EACZR,EAAAA,YAOEE,EAAA,CANA,KAAK,eACL,QAAQ,OACR,QAAQ,UACR,MAAM,WACN,YAAU,uBACT,QAAOE,EAAA,6CAGZJ,EAAAA,YAsBQC,EAAA,CAtBD,aAAA,GAAW,MAAM,2BACtB,IAKO,CALPQ,EAAAA,mBAKO,MAAA,CAJL,IAAI,SACJ,MAAM,gBACL,+BAAiBC,EAAA,OAAM,MAAA,OAAA,EACvB,kDAAqBN,EAAA,iBAAAA,EAAA,gBAAA,GAAAO,CAAA,EAAe,CAAA,SAAA,CAAA,aAEvCX,EAAAA,YAcSY,EAAA,YAdQT,EAAA,iDAAAA,EAAA,YAAWI,GAAG,OAAM,CAAGJ,EAAA,MAAOA,EAAA,KAAK,sBAClD,IAYS,CAZTH,EAAAA,YAYSa,EAAA,KAAA,mBAXP,IAIc,CAJdb,EAAAA,YAIcc,EAAA,CAJD,KAAA,GAAM,QAAOV,EAAA,sCACxB,IAEoB,CAFpBJ,EAAAA,YAEoBe,EAAA,KAAA,mBADlB,IAAiB,CAAdC,EAAAA,gBAAAC,EAAAA,gBAAAd,EAAA,WAAW,EAAG,kBACnB,CAAA,gCAEFH,EAAAA,YAAakB,CAAA,EACblB,EAAAA,YAIEc,EAAA,CAHA,MAAM,kBACN,eAAa,aACZ,QAAOV,EAAA,qFAKhBJ,EAAAA,YAKQC,EAAA,CALD,aAAA,EAAU,EAAA,mBACf,IAGO,CAAA,GAAAI,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,CAHPI,EAAAA,mBAGO,OAAA,CAHD,MAAM,wBAAwB,EAAC,+EAGrC,EAAA,sFCIDjC,EAAU,CACb,WAAY,CACV,aAAA2C,GAEF,MAAO,CACL,WAAY,QACZ,OAAQ,CACN,KAAM,OACN,QAAS,IAEX,OAAQ,CACN,KAAM,OACN,QAAS,IAEX,WAAY,CACV,KAAM,OACN,QAAS,IAEX,SAAU,CACR,KAAM,MACN,QAAS,IAAM,CAAA,GAEjB,OAAQ,CACN,KAAM,MACN,QAAS,IAAM,CAAA,IAGnB,MAAO,CAAC,SAAU,SAAU,OAAQ,mBAAmB,EACvD,MAAO,CACL,MAAO,CACL,cAAe,KAAK,UACtB,CACF,EACA,SAAU,CACR,WAAY,UAAY,CACtB,GAAI,KAAK,gBAAkB,GACzB,MAAO,CAAC,yBAAyB,EAEnC,GAAI,KAAK,OAAO,SAAW,EAAG,CAC5B,IAAIC,EAAW,IAAI,IACfvD,EAAS,CAAA,EACb,MAAMwD,EAAe,KAAK,OAAO,SAC/B,CAACC,EAAGC,IAAMD,EAAE,WAAaC,EAAE,UAC7B,EACA,UAAW5C,KAAS0C,EAAc,CAChC,IAAIG,EAAM,MAAM7C,EAAM,UAAU,MAAMA,EAAM,IAAI,KAAKA,EAAM,OAAO,IAC9DA,EAAM,QACR6C,GAAO,WAAW7C,EAAM,KAAK,IAE/Bd,EAAO,KAAK2D,CAAG,EACfJ,EAAS,IAAIzC,EAAM,OAAO,CAC5B,CACA,OAAOd,CACT,CACA,MAAO,CAAA,CACT,EACA,KAAM,CACJ,KAAM,CACJ,OAAO,KAAK,UACd,EACA,IAAI2B,EAAO,CACT,KAAK,MAAM,oBAAqBA,CAAK,CACvC,IAGJ,MAAO,CACL,WAAWf,EAAU,CACnB,KAAK,cAAgBA,CACvB,GAEF,QAAS,CACP,aAAc,UAAY,CACxB,KAAK,QACF,QAAQ,gDAAiD,CACxD,OAAQ,SACR,WAAY,SACb,EACA,KAAMgD,GAAW,CAChB,KAAK,MAAM,QAAQ,CACrB,CAAC,CACL,EAEJ,gVA/IEC,EAAAA,YAuDWC,EAAA,YAtDAvB,EAAA,0CAAAA,EAAA,KAAIG,GACb,WAAA,GACA,MAAM,OACL,oCAAaqB,EAAA,MAAK,QAAA,EAAA,CAAA,KAAA,CAAA,uBAEnB,IAgDS,CAhDT5B,EAAAA,YAgDS6B,EAAA,KAAA,mBA/CP,IAYY,CAZZ7B,EAAAA,YAYY8B,EAAA,CAZD,OAAO,IAAI,EAAA,mBACpB,IAOE,CAPF9B,EAAAA,YAOEE,EAAA,CANA,MAAM,OACN,KAAK,aACL,QAAQ,OACR,QAAQ,UACR,YAAU,qBACT,QAAOE,EAAA,kCAEVJ,EAAAA,YAAYQ,CAAA,EACZC,EAAAA,mBAAqD,YAA/C,iBAAcQ,EAAAA,gBAAGP,QAAM,EAAG,sBAAIA,EAAA,MAAM,EAAA,CAAA,EAC1CV,EAAAA,YAAYQ,CAAA,UAEdR,EAAAA,YAiCc+B,EAAA,CAjCD,MAAA,CAAA,aAAA,MAAA,GAAwB,mBACnC,IAME,CANF/B,EAAAA,YAMEgC,EAAA,CALA,IAAI,0BACK7B,EAAA,mDAAAA,EAAA,cAAaI,GACrB,SAAUG,EAAA,SACV,SAAQ,GAAKA,EAAA,OAAO,YAAW,CAAA,OAChC,OAAO,qDAGTV,cAIQC,EAAA,CAJD,MAAA,CAAA,aAAA,QAAA,aAAA,MAAA,GAA2C,mBAC3C,IAAoC,EAAzCH,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAEMkC,WAAA,KAAAC,EAAAA,WAFwB9B,EAAA,WAAU,CAA3BzB,EAAOwD,mBAApBpC,EAAAA,mBAEM,MAAA,CAFqC,IAAKoC,GAAK,CACnD1B,EAAAA,mBAAwC,OAAA,CAAlC,MAAM,WAAW,YAAAQ,EAAAA,gBAActC,CAAD,+BAGxCqB,EAAAA,YAkBQC,EAAA,CAlBD,MAAM,MAAM,EAAA,mBACjB,IAAY,CAAZD,EAAAA,YAAYQ,CAAA,EACZR,EAAAA,YAOQE,EAAA,CANN,MAAM,OACN,QAAQ,WACR,YAAU,qBACT,uBAAO0B,EAAA,MAAK,QAAA,uBACd,IAED,CAAA,GAAAvB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAFC,WAED,EAAA,YACAL,EAAAA,YAOQE,EAAA,CANN,MAAM,OACN,MAAM,UACN,YAAU,mBACT,QAAKG,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAE,GAAEqB,EAAA,MAAK,OAASzB,EAAA,aAAa,uBACpC,IAED,CAAA,GAAAE,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAFC,SAED,EAAA,qGC/CJ+B,EAAeC,GACZnF,EAAAA,GAAI,IAAI,qCAAqCmF,CAAI,EAAE,EAGtDC,EAAuBD,GACpBnF,EAAAA,GAAI,IAAI,iCAAiCmF,CAAI,EAAE,EAIlDE,EAAU,CAACC,EAAOC,IACfD,EAAM,OAAO,CAACE,EAAQpE,IAAS,CACpC,MAAMqE,EAAMF,EAAOnE,CAAI,EACvB,OAAIoE,EAAOC,CAAG,EACZD,EAAOC,CAAG,EAAE,KAAKrE,CAAI,EAErBoE,EAAOC,CAAG,EAAI,CAACrE,CAAI,EAEdoE,CACT,EAAG,CAAA,CAAE,EClBDE,EAA2BC,GAAS,CAExC,MAAMrF,EAAS,gBACTsF,EAAU,iBACVC,EAAS,kBACf,OAAO,IAAI,OAAO,GAAGvF,CAAM,GAAGqF,CAAI,GAAGC,CAAO,GAAGC,CAAM,GAAG,CAC1D,EAEe,MAAMC,CAAgB,CACnC,YACEX,EACAY,EAAoB,IAAM,CAAC,EAC3BC,EAA2B,IAAM,CAAC,EAClC,CACA,KAAK,mBAAqB,CAAA,EAC1B,KAAK,iBAAmB,CAAA,EAExBd,EAAYC,CAAI,EAAE,KAAMlF,GAAa,CACnC,KAAK,mBAAqBA,EAAS,KAAK,IAAIyF,CAAuB,EACnEM,EAAwB,CAC1B,CAAC,EACDZ,EAAoBD,CAAI,EAAE,KAAMlF,GAAa,CAC3C,KAAK,iBAAmBA,EAAS,KACjC8F,EAAiB,CACnB,CAAC,CACH,CAEA,eAAeE,EAAS7F,EAASgC,EAAU8D,EAAS3F,EAAU,CAC5D,IAAI4F,EAAU,CAAA,EACd,MAAMC,EAAmBhG,EAAQ,IAAI,OAAOgC,EAAS,GAAG,EAAE,MACxD,EACAA,EAAS,MACf,EAEM,KAAK,mBAAmB,KAAMiE,GAAUD,EAAiB,MAAMC,CAAK,CAAC,IAErEF,EAAU,KAAK,kBAGjB5F,EAAS,KAAM,CACb,GAAG4F,CAQT,CAAK,CACH,CACF,CClDe,MAAMG,UAAqBR,CAAgB,CACxD,aAAc,CACZ,MAAM,KAAK,CACb,CACF,CCJe,MAAMS,UAAqBT,CAAgB,CACxD,aAAc,CACZ,MAAM,MAAO,IAAM,CAGjB,KAAK,kBAAoB,KAAK,iBAAiB,OAAO,CAACN,EAAQpE,IAAS,CACtE,MAAMoF,EAAapF,EAAK,QAAQ,MAAM,UAAU,EAAE,CAAC,EAC7CqF,EAAWrF,EAAK,QAAQ,QAAQ,GAAGoF,CAAU,IAAK,EAAE,EACpDE,EAAc,CAClB,QAASD,EACT,QAASA,EACT,KAAM,MAChB,EAEQ,OAAIjB,EAAOgB,CAAU,EACnBhB,EAAOgB,CAAU,EAAE,KAAKE,CAAW,EAEnClB,EAAOgB,CAAU,EAAI,CAACE,CAAW,EAE5BlB,CACT,EAAG,CAAA,CAAE,EACL,KAAK,QAAU,OAAO,KAAK,KAAK,iBAAiB,EAAE,IAAKgB,IAC/C,CACL,QAASA,EACT,QAASA,EACT,KAAM,QAChB,EACO,CACH,CAAC,CACH,CAGA,eAAeP,EAAS7F,EAASgC,EAAU8D,EAAS3F,EAAU,CAC5D,IAAI4F,EAAU,CAAA,EACd,MAAMC,EAAmBhG,EAAQ,IAAI,OAAOgC,EAAS,GAAG,EAAE,MACxD,EACAA,EAAS,MACf,EACI,GACE,KAAK,mBAAmB,KAAMiE,GAAUD,EAAiB,MAAMC,CAAK,CAAC,EACrE,CACA,MAAMM,EAAc,OAAO,KAAK,KAAK,iBAAiB,EAAE,KACrDH,GAAeJ,EAAiB,SAASI,CAAU,CAC5D,EACUG,EACFR,EAAU,KAAK,kBAAkBQ,CAAW,EAE5CR,EAAU,KAAK,OAEnB,CAEA5F,EAAS,KAAM4F,CAAO,CACxB,CACF,CC2BA,MAAK7E,EAAU,CACb,MAAO,CACL,WAAY,SAEd,MAAO,CAAC,mBAAmB,EAC3B,MAAO,CACL,MAAO,CACL,MAAO,GACP,UAAW,UACX,UAAW,GACX,OAAQ,GACR,IAAK,GACL,SAAU,GACV,YAAa,CAAA,EACb,QAAS,CACP,CACE,KAAM,MACN,MAAO,OAET,CACE,KAAM,QACN,MAAO,SAET,CACE,KAAM,UACN,MAAO,UACP,MAAO,MACP,SAAU,IAGhB,CACF,EACA,SAAU,CACR,KAAM,CACJ,KAAM,CACJ,OAAO,KAAK,UACd,EACA,IAAIgB,EAAO,CACT,KAAK,MAAM,oBAAqBA,CAAK,CACvC,IAGJ,SAAU,CACR,KAAK,OAAM,CACb,EACA,QAAS,CACP,aAAc,SAAUH,EAAO,CAC7B,KAAK,MAAQA,EAAM,KACnB,KAAK,UAAYA,EAAM,KACvB,KAAK,UAAY,EACnB,EACA,OAAQ,UAAY,CAClBnC,EAAAA,GAAI,IAAI,yBAAyB,EAC9B,KAAMC,GAAa,CAClB,KAAK,YAAcA,EAAS,IAC9B,CAAC,EACA,MAAOwB,GAAU,CAElB,CAAC,CACL,EACA,eAAgB,UAAY,CAC1BzB,EAAAA,GAAI,KAAK,0BAA2B,CAClC,KAAM,CACJ,IAAK,KAAK,IAAI,YAAW,EACzB,MAAO,KAAK,UAEf,EACE,KAAMC,GAAa,CAEmB,GAAAA,EAAS,KAAK,OAGnD,KAAK,OAAM,CACb,CAAC,EACA,MAAOwB,GAAU,CAChB,MAAMmF,EAAa,CACjB,KAAM,uCAAuCnF,CAAK,GAClD,KAAM,OACR,EACA,KAAK,aAAamF,CAAU,CAC9B,CAAC,EACH,KAAK,IAAM,GACX,KAAK,SAAW,EAClB,EACA,kBAAmB,SAAUC,EAAK,CAChC,KAAK,QACF,QAAQ,oCAAoCA,EAAI,GAAG,IAAIA,EAAI,KAAK,GAAI,CACnE,OAAQ,SACR,WAAY,SACb,EACA,KAAMtC,GACEvE,EAAAA,GAAI,OAAO,2BAA2B6G,EAAI,IAAI,EAAE,CACxD,EACA,KAAM5G,GAAa,CAClB,MAAM2G,EAAa,CACjB,KAAM,iCAAiCC,EAAI,IAAI,GAC/C,KAAM,SACR,EACA,KAAK,aAAaD,CAAU,EAC5B,KAAK,OAAM,CACb,CAAC,EACA,MAAOnF,GAAU,CAChB,MAAMmF,EAAa,CACjB,KAAM,iCAAiCnF,CAAK,GAC5C,KAAM,OACR,EACA,KAAK,aAAamF,CAAU,CAC9B,CAAC,CACL,EAEJ,EAtLejE,EAAA,CAAA,MAAM,MAAM,gYATzB6B,EAAAA,YA2EWC,EAAA,YA3EQvB,EAAA,0CAAAA,EAAA,KAAIG,GAAE,MAAM,0BAC7B,IAyES,CAzETP,EAAAA,YAyES6B,EAAA,KAAA,mBAxEP,IAuEO,CAvEPpB,EAAAA,mBAuEO,OAAA,CAvEA,6CAAgBL,EAAA,gBAAAA,EAAA,eAAA,GAAAO,CAAA,EAAc,CAAA,SAAA,CAAA,KACnCX,EAAAA,YAIY8B,EAAA,CAJD,OAAO,IAAI,EAAA,mBACpB,IAAY,CAAZ9B,EAAAA,YAAYQ,CAAA,EACZH,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAI,qBAAyC,YAAnC,+BAA4B,EAAA,GAClCT,EAAAA,YAAYQ,CAAA,UAEdR,EAAAA,YAgEc+B,EAAA,KAAA,mBA/DZ,IA8DM,CA9DNtB,EAAAA,mBA8DM,MA9DNZ,EA8DM,CA7DJG,EAAAA,YAeQC,EAAA,CAfD,MAAA,GAAM,MAAM,2BACjB,IAaE,CAbFD,EAAAA,YAaEgE,EAAA,YAZS7D,EAAA,4CAAAA,EAAA,OAAMI,GACf,MAAM,SACN,KAAK,OACL,YAAU,SACV,qBAAmB,cACnB,UAAA,GACA,QAAQ,WACR,QAAQ,UACR,aAAW,2BACX,UAAA,GACA,cAAA,GACA,eAAA,mCAGJP,EAAAA,YAoBeiE,EAAA,CAnBb,WAAS,OACT,sBAAA,GACA,YAAU,YACT,OAAQ9D,EAAA,OACR,QAASA,EAAA,QACT,MAAOA,EAAA,YACP,iBAAgB,EAChB,yBAAwB,CAAA,CAAA,IAEd,eAAY+D,EAAAA,QACrB,CAOE,CARuB,KAAA5F,KAAI,CAC7B0B,EAAAA,YAOEE,EAAA,CANA,KAAK,aACL,QAAQ,OACR,MAAM,OACN,YAAU,cACV,aAAW,8BACV,QAAKK,GAAEH,EAAA,kBAAkB9B,CAAI,8DAIpC0B,EAAAA,YAWQC,EAAA,CAXD,MAAA,EAAK,EAAA,mBACV,IAEQ,CAFRD,EAAAA,YAEQmE,EAAA,KAAA,mBADN,IAA8D,CAA9DnE,EAAAA,YAA8DgE,EAAA,YAAvC7D,EAAA,yCAAAA,EAAA,IAAGI,GAAE,MAAM,MAAM,YAAU,0CAEpDP,EAAAA,YAMQmE,EAAA,KAAA,mBALN,IAIE,CAJFnE,EAAAA,YAIEgE,EAAA,YAHS7D,EAAA,8CAAAA,EAAA,SAAQI,GACjB,MAAM,QACN,YAAU,oDAIhBP,EAAAA,YAWQC,EAAA,CAXD,MAAA,EAAK,EAAA,mBACV,IASQ,CATRD,EAAAA,YASQE,EAAA,CARN,MAAA,GACA,KAAK,SACL,MAAM,UACN,YAAU,UACT,SAAQ,CAAGC,EAAA,KAAG,CAAKA,EAAA,SACnB,wBAAeC,EAAA,eAAc,CAAA,SAAA,CAAA,sBAC/B,IAED,CAAA,GAAAC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAFC,QAED,EAAA,oaCMd,MAAM+D,EAAQC,EAeRC,EAASC,EAAAA,IAAIH,EAAM,KAAK,QAAU,EAAK,EAEvCI,EAAWC,EAAAA,SAAS,IAAM,CAC9B,MAAMC,EAA6BC,GAAS,OAI1C,MAHI,CAACP,EAAM,QAGPO,EAAK,KAAK,YAAW,EAAG,SAASP,EAAM,OAAO,YAAW,CAAE,EACtD,GAEF,CAAC,GAACQ,EAAAD,EAAK,WAAL,MAAAC,EAAe,KAAKF,GAC/B,EAEA,OAAOA,EAA0BN,EAAM,IAAI,CAC7C,CAAC,EAEDS,EAAAA,MACE,IAAMT,EAAM,KAAK,OAChBU,GAAY,CACXR,EAAO,MAAQQ,CACjB,CACF,EAEAD,EAAAA,MACE,IAAMT,EAAM,OACXW,GAAc,CACTA,EACGX,EAAM,KAAK,QAAQY,EAAM,EAE1BZ,EAAM,KAAK,QAAQY,EAAM,CAEjC,CACF,EAEA,MAAMC,EAAOC,EAEPC,EAAgBZ,EAAAA,IAAI,CACxB,KAAM,GACN,KAAM,GACN,EAAG,EACH,EAAG,CACL,CAAC,EAEKa,EAAoB,CAAC/F,EAAOgG,IAAS,CAEzC,GAAI,CAACA,GAAQA,EAAK,QAAU,GAAI,OAEhC,MAAMC,EAAOjG,EAAM,OAAO,sBAAqB,EACzCkG,EAAUD,EAAK,KACfE,EAAUF,EAAK,IAErBH,EAAc,MAAM,KAAOE,EAC3BF,EAAc,MAAM,EAAII,EACxBJ,EAAc,MAAM,EAAIK,EAAU,GAClCL,EAAc,MAAM,KAAO,EAC7B,EAEMM,EAAoB,IAAM,CAC9BN,EAAc,MAAM,KAAO,EAC7B,EAEMO,EAAef,GAAS,CACxBA,EAAK,UACPK,EAAM,EAEFZ,EAAM,OAAS,QACjBa,EAAK,UAAWN,CAAI,GAGtBM,EAAK,UAAWN,CAAI,CAExB,EACMK,EAAS,IAAM,CACfZ,EAAM,KAAK,WACbE,EAAO,MAAQ,CAACA,EAAO,MAGvBF,EAAM,KAAK,OAASE,EAAO,MAC3BW,EAAK,cAAeb,EAAM,KAAK,GAAIE,EAAO,KAAK,EAEnD,EAEMqB,EAAoB,CAACC,EAAUtB,IAAW,CAC9CW,EAAK,cAAeW,EAAUtB,CAAM,CACtC,EACMuB,EAAqBlB,GAAS,CAClCM,EAAK,UAAWN,CAAI,CACtB,qNAjLE3E,EAAAA,YAKE8F,EAAA,CAJS,WAAAX,EAAA,MAAc,KAAd,sBAAA9E,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAE,GAAA4E,EAAA,MAAc,KAAI5E,GAC1B,KAAM4E,EAAA,MAAc,KACrB,SAAS,MACR,iDAAiCA,EAAA,MAAc,CAAC,YAAYA,EAAA,MAAc,CAAC,2BAAA,yCAG9E1E,EAAAA,mBA8DM,MA9DNZ,EA8DM,CA7DO2E,EAAA,qBAAXzE,EAAAA,mBAgDM,MAAA,OAhDe,MAAM,eAAgB,QAAKM,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAE,GAAEmF,EAAYrB,EAAA,IAAI,KAChE5D,EAAAA,mBA8CM,MA9CNsF,EA8CM,CA5CI1B,EAAA,KAAK,wBADb3C,EAAAA,YAMSsE,EAAA,OAJP,MAAM,cACN,MAAA,CAAA,gBAAA,MAAA,sBAEA,IAAsD,CAAnDhF,EAAAA,gBAAAC,EAAAA,gBAAAoD,EAAA,KAAK,OAAM,gBAAA,gBAAA,EAAA,CAAA,uCAEFA,EAAA,KAAK,wBAAnB3C,EAAAA,YAESsE,EAAA,OAFoB,KAAK,QAAQ,MAAA,CAAA,gBAAA,MAAA,sBACxC,IAAkB,CAAA,GAAA3F,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,qCAAf,YAAY,EAAA,EAAA,aAGJgE,EAAA,KAAK,MAAM,SAAQ,KAAA,iBADhC3C,EAAAA,YAMSsE,EAAA,OAJP,KAAK,QACL,MAAA,CAAA,gBAAA,MAAA,sBAEA,IAAyB,CAAA,GAAA3F,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,qCAAtB,mBAAmB,EAAA,EAAA,aAGXgE,EAAA,KAAK,MAAM,SAAQ,KAAA,iBADhC3C,EAAAA,YAMSsE,EAAA,OAJP,KAAK,QACL,MAAA,CAAA,gBAAA,MAAA,sBAEA,IAA2B,CAAA,GAAA3F,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,qCAAxB,qBAAqB,EAAA,EAAA,4BAE1BqB,EAAAA,YAESsE,EAAA,OAFM,KAAK,QAAQ,MAAA,CAAA,gBAAA,MAAA,sBAC1B,IAAyB,CAAA,GAAA3F,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,qCAAtB,mBAAmB,EAAA,EAAA,aAExBI,EAAAA,mBAQO,OAAA,CAPL,MAAM,UACL,SAAU4D,EAAA,KAAK,SAAQ,GAAA,EACvB,QAAKhE,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA4F,EAAAA,SAAA1F,GAAQmF,EAAYrB,EAAA,IAAI,EAAA,CAAA,OAAA,CAAA,GAC7B,4BAAYe,EAAkB7E,EAAQ8D,EAAA,KAAK,KAAK,GAChD,aAAYoB,CAEV,EAAAxE,EAAAA,gBAAAoD,EAAA,KAAK,KAAK,EAAA,GAAA6B,CAAA,EAIP7B,EAAA,KAAK,QAAK,0BADlB3C,EAAAA,YAOExB,EAAA,OALA,KAAK,aACL,QAAQ,OACR,MAAA,CAAA,cAAA,MAAA,EACA,aAAW,SACV,uBAAO+E,EAAI,QAAA,sDAIlBlF,EAAAA,mBAAkB,MAAAoG,CAAA,GACP9B,EAAA,KAAK,UAAYA,EAAA,KAAK,QAAjCvE,EAAAA,YAAAC,EAAAA,mBAUM,MAVNqG,EAUM,EATJtG,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBAQakC,WAAA,KAAAC,EAAAA,WAPKmC,EAAA,KAAK,SAAdgC,kBADT3E,EAAAA,YAQa4E,EAAA,CANV,IAAKD,EAAM,GACX,KAAMA,EACN,OAAQhC,EAAA,OACR,KAAMA,EAAA,KACN,cAAcsB,EACd,UAASE,0ICmCbrH,EAAU,CACb,WAAY,CACV,SAAA+H,GAEF,MAAO,CACL,KAAM,CACJ,KAAM,OACN,SAAU,GACV,UAAW,SAAU/G,EAAO,CAE1B,MAAO,CAAC,OAAQ,MAAM,EAAE,QAAQA,CAAK,IAAM,EAC7C,GAEF,OAAQ,CACN,KAAM,OACN,QAAS,IACX,EACA,uBAAwB,QACxB,cAAe,CACb,KAAM,OACN,QAAS,IACX,EACA,WAAY,QACZ,eAAgB,CACd,KAAM,OACN,QAAS,IACX,GAEF,MAAO,CAAC,oBAAqB,QAAS,aAAc,OAAQ,UAAU,EACtE,MAAO,CACL,MAAO,CACL,KAAM,CAAA,EACN,MAAO,CAAA,EACP,OAAQ,KACR,aAAc,KACd,eAAgB,GAChB,QAAS,CAAA,EACT,iBAAkB,CAAA,EAClB,QAAS,EACX,CACF,EACA,SAAU,CACR,KAAM,CACJ,KAAM,CACJ,OAAO,KAAK,UACd,EACA,IAAIA,EAAO,CACT,KAAK,MAAM,oBAAqBA,CAAK,CACvC,GAEF,MAAO,UAAY,CACjB,OAAI,KAAK,OAAS,OACT,YAEA,iBAEX,EACA,OAAQ,UAAY,CAClB,OAAI,KAAK,OAAS,OACT,OAEA,MAEX,EACA,SAAU,UAAY,CACpB,OAAI,KAAK,eACA,KAAK,eAEV,KAAK,OAAS,OACT,sLAEA,oIAEX,EACA,MAAO,UAAY,CACjB,GAAI,KAAK,eAAiB,IAAM,KAAK,eAAiB,KACpD,MAAO,sCAET,GACE,CAAC,KAAK,aAAa,MAAM,KAAK,kBAAkB,GAChD,KAAK,aAAa,MAAM,qBAAqB,EAC7C,CACA,IAAIgH,EAAU,GAAG,KAAK,YAAY,kCAClC,OAAI,KAAK,yBACPA,GAAW,iCAEbA,GACE;AAAA;AAAA,0DAEKA,CACT,CACA,OAAI,KAAK,OAAS,QAAU,KAAK,aAAa,MAAM,KAAK,EACzC,GAAG,KAAK,YAAY,iDAG7B,IACT,EACA,mBAAoB,UAAY,CAC9B,MAAMC,EAAe,YAErB,IAAIC,EAAa,IADD,GAAGD,CAAY,6BACH,SAASA,CAAY,KACjD,OAAI,KAAK,yBAEPC,EAAa,OADG,IAAI,KAAK,QAAQ,KAAK,GAAG,CAAC,GACf,MAAMA,CAAU,IAEtC,IAAI,OAAOA,CAAU,CAC9B,GAEF,SAAU,CACRxJ,EAAAA,GAAI,IAAI,qBAAqB,EAAE,KAAMC,GAAa,CAChD,KAAK,QAAUA,EAAS,KACxB,KAAK,QAAQ,KAAK,UAAU,EAC5B,KAAK,QAAQ,QAASwJ,GAAW,CAE/B,KAAK,MAAM,KAAK,CACd,GAAIA,EACJ,SAAU,GACV,MAAOA,EACP,SAAU,CAAA,EACV,KAAMA,EACP,EAED,KAAK,UAAUA,CAAM,CACvB,CAAC,EACD,KAAK,QAAU,EACjB,CAAC,CACH,EACA,QAAS,CACP,SAAU,SAAUC,EAAU,CAC5B,OAAOC,EAAAA,SAASD,CAAQ,CAC1B,EACA,UAAW,SAAUD,EAAQ,CAC3BzJ,EAAAA,GAAI,IAAI,KAAK,OAAQ,CAAE,OAAQ,CAAE,OAAAyJ,GAAU,EACxC,KAAMxJ,GAAa,CAClB,GAAIA,EAAS,KAAK,SAAW,EAAG,CAE9B,KAAK,MAAQ,KAAK,MAAM,OAAQmB,GAASA,EAAK,KAAOqI,CAAM,EAC3D,MACF,CACA,QAASG,KAAQ3J,EAAS,KAAK,KAAI,EAGjC,KAAK,SAAW2J,EAChB,KAAK,WAAW,KAAK,MAAO,EAAGA,CAAI,EAEjC,KAAK,gBACP,KAAK,aAAe,KAAK,eAG3B,MAAM3E,EAAQ,KAAK,MAAM,UAAW7D,GAASA,EAAK,KAAOqI,CAAM,EAC3DxE,IAAU,KACZ,KAAK,MAAMA,CAAK,EAAE,SAAW,GAEjC,CAAC,EACA,MAAOxD,GAAU,CAChB,KAAK,MAAM,QAAS,gCAAgCA,CAAK,EAAE,CAC7D,CAAC,CACL,EACA,MAAO,UAAY,CACjB,KAAK,KAAO,GACZ,KAAK,UAAY,GACjB,KAAK,eAAiB,EACxB,EACA,WAAY,SAAUmI,EAAM,CACtBA,EAAK,SAAW,EAClB,KAAK,aAAe,MAGpB,KAAK,aAAe,KAAK,SAAS,KAAK,MAAOA,EAAK,EAAE,EAErD,WAAW,IAAM,CACf,KAAK,MAAM,UAAU,IAAI,MAAK,CAChC,EAAG,GAAG,EAEV,EACA,SAAU,SAAUzI,EAAO0I,EAAI,CAC7B,QAASzI,KAAQD,EAAO,CACtB,GAAIC,EAAK,KAAOyI,EACd,OAAOzI,EAAK,KAEd,GAAIA,EAAK,SAAU,CACjB,MAAM0I,EAAQ,KAAK,SAAS1I,EAAK,SAAUyI,CAAE,EAC7C,GAAIC,EACF,OAAOA,CAEX,CACF,CACA,OAAO,IACT,EACA,OAAQ,SAAUC,EAAMC,EAAM,CAC5B,IAAIF,EAAQ,GACZ,QAAS1I,KAAQ2I,EAAM,CAIrB,GAHI3I,EAAK,OAAS4I,GAGd5I,EAAK,KAAK,OAAS,GACjBA,EAAK,KAAKA,EAAK,KAAK,OAAS,CAAC,IAAM,KAElCA,EAAK,KAAK,MAAM,EAAGA,EAAK,KAAK,OAAS,CAAC,IAAM4I,EAC/C,MAAO,GAIT5I,EAAK,WACP0I,EAAQA,GAAS,KAAK,OAAO1I,EAAK,SAAU4I,CAAI,EAEpD,CACA,OAAOF,CACT,EACA,QAAS,UAAY,CAEf,KAAK,eAAiB,MAAQ,KAAK,QAAU,OAC3C,KAAK,OAAS,OAChB,KAAK,YAAW,EAEhB,KAAK,YAAW,EAGtB,EACA,WAAY,UAAY,CACtB,KAAK,QACF,QAAQ,2DAA4D,CACnE,OAAQ,SACR,WAAY,SACb,EACA,KAAMvF,GACEvE,EAAAA,GAAI,OAAO,gCAAgC,CACnD,EACA,KAAMC,GAAa,CAClB,KAAK,MAAM,YAAY,EACvB,KAAK,UAAU,UAAU,CAC3B,CAAC,EACA,MAAOwB,GAAU,CAChB,KAAK,QAAQ,QAAQ,CACnB,MAAO,QACP,KAAM,kDAAkDA,CAAK,GAC9D,CACH,CAAC,CACL,EACA,YAAa,UAAY,CAEvB,KAAK,eAAiB,GACtBzB,KAAI,IAAI,GAAG,KAAK,MAAM,IAAI,KAAK,YAAY,EAAE,EAC1C,KAAMC,GAAa,CAClB,MAAM2J,EAAO,CACX,KAAM,KAAK,aACX,SAAU3J,EAAS,KAAK,QAC1B,EACIA,EAAS,KAAK,SAChB2J,EAAK,OAAY,KAAK,MAAM3J,EAAS,KAAK,MAAM,GAE9CA,EAAS,KAAK,QAChB2J,EAAK,MAAW3J,EAAS,KAAK,OAE5BA,EAAS,KAAK,UAChB2J,EAAK,QAAa3J,EAAS,KAAK,SAElC,MAAMgK,EAAShK,EAAS,KAAK,OACvBiK,EAAcjK,EAAS,KAAK,YAClC,KAAK,MAAM,OAAQ,CAAE,KAAA2J,EAAM,OAAAK,EAAQ,YAAAC,EAAa,EAChD,KAAK,MAAK,CACZ,CAAC,EACA,MAAOzI,GAAU,CAChB,KAAK,MAAM,QAAS,kBAAkB,KAAK,YAAY,KAAKA,CAAK,EAAE,EACnE,KAAK,MAAK,CACZ,CAAC,CACL,EACA,YAAa,UAAY,CACT,KAAK,OAAO,KAAK,MAAO,KAAK,YAAY,EAErD,KAAK,QACF,QAAQ,uCAAuC,KAAK,YAAY,GAAI,CACnE,OAAQ,YACR,WAAY,SACb,EACA,KAAM8C,GAAW,CAChB,KAAK,MAAM,WAAY,KAAK,YAAY,EACxC,KAAK,MAAK,CACZ,CAAC,EACA,MAAO9C,GAAU,CAAC,CAAC,GAEtB,KAAK,MAAM,WAAY,KAAK,YAAY,EACxC,KAAK,MAAK,EAEd,EACA,WAAY,SAAUsI,EAAMI,EAAOC,EAAM,CACvC,IAAIC,EAAQD,EAAK,MAAM,GAAG,EAE1B,GAAIC,EAAM,SAAW,EAAG,CACtBN,EAAK,KAAK,CACR,GAAI,KAAK,SACT,MAAOM,EAAM,CAAC,EACd,KAAM,OACN,KAAM,KAAK,SACZ,EACD,MACF,CAEA,MAAMpF,EAAQ8E,EAAK,UAAW3I,GAASA,EAAK,QAAUiJ,EAAM,CAAC,CAAC,EAC1DpF,IAAU,IAEZ8E,EAAK,KAAK,CACR,GAAI,KAAK,SACN,MAAM,GAAG,EACT,MAAM,EAAGI,EAAQ,CAAC,EAClB,KAAK,GAAG,EACX,MAAOE,EAAM,CAAC,EACd,SAAU,CAAA,EACV,KAAM,KAAK,SACR,MAAM,GAAG,EACT,MAAM,EAAGF,EAAQ,CAAC,EAClB,KAAK,GAAG,EACZ,EACD,KAAK,WACHJ,EAAKA,EAAK,OAAS,CAAC,EAAE,SACtBI,EAAQ,EACRE,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG,CACzB,GAIA,KAAK,WACHN,EAAK9E,CAAK,EAAE,SACZkF,EAAQ,EACRE,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG,CACzB,CAEJ,EAEJ,EAxZe1H,GAAA,CAAA,MAAM,MAAM,EAeVkG,GAAA,CAAA,MAAM,gCAAgC,8aArCrDrE,EAAAA,YA6FWC,EAAA,YA5FAvB,EAAA,0CAAAA,EAAA,KAAIG,GACb,WAAA,GACA,MAAM,MACL,UAAO,2BAAQH,EAAA,QAAO,EAAA,CAAA,OAAA,CAAA,GACTC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA4F,EAAAA,SAAA1F,GAAAJ,EAAA,oBAAyBC,EAAA,KAAI,GAAA,CAAA,KAAA,CAAA,wBAE3C,IAqFS,CArFTJ,EAAAA,YAqFS6B,EAAA,KAAA,mBApFP,IAMY,CANZ7B,EAAAA,YAMYwH,EAAA,CANA,cAAarH,EAAA,OAAO,EAAA,mBAC9B,IAIuB,CAJvBH,EAAAA,YAIuByH,EAAA,CAHrB,cAAA,GACA,SAAA,GACA,KAAK,iCAGThH,EAAAA,mBA4EO,OAAA,CA5EA,6CAAgBL,EAAA,SAAAA,EAAA,QAAA,GAAAO,CAAA,EAAO,CAAA,SAAA,CAAA,KAC5BX,EAAAA,YAIY8B,EAAA,CAJD,OAAO,IAAI,EAAA,mBACpB,IAAY,CAAZ9B,EAAAA,YAAYQ,CAAA,EACZC,EAAAA,mBAA0B,8BAAhBL,EAAA,KAAK,EAAA,CAAA,EACfJ,EAAAA,YAAYQ,CAAA,UAEdR,EAAAA,YAqEc+B,EAAA,KAAA,mBApEZ,IAmEM,CAnENtB,EAAAA,mBAmEM,MAnENZ,GAmEM,CAlEJG,EAAAA,YAA8BC,EAAA,KAAA,mBAAvB,IAAc,qCAAXG,EAAA,QAAQ,EAAA,CAAA,UAClBJ,EAAAA,YAYQC,EAAA,CAZD,MAAA,GAAM,MAAM,2BACjB,IAUE,CAVFD,EAAAA,YAUEgE,EAAA,YATS7D,EAAA,4CAAAA,EAAA,OAAMI,GACf,KAAA,GACA,UAAA,GACA,eAAA,GACA,UAAA,GACA,MAAM,SACN,qBAAmB,cACnB,QAAQ,UACR,YAAU,wDAGdE,EAAAA,mBAUM,MAVNsF,GAUM,kBATJhG,EAAAA,mBAQakC,EAAAA,SAAA,KAAAC,EAAAA,WAPI/B,EAAA,MAARwE,kBADTjD,EAAAA,YAQa4E,EAAA,CANV,IAAG,GAAK3B,EAAK,EAAE,GACf,KAAMA,EACN,OAAQxE,EAAA,OACR,KAAMO,EAAA,KACN,UAASN,EAAA,WACT,SAAQA,EAAA,8EAGbJ,EAAAA,YAQQC,EAAA,CARD,MAAM,MAAM,EAAA,mBACjB,IAME,CANFD,EAAAA,YAMEgE,EAAA,YALS7D,EAAA,kDAAAA,EAAA,aAAYI,GACrB,eAAA,GACA,MAAM,WACN,YAAU,0BACT,SAAUG,EAAA,OAAI,kDAGnBV,EAAAA,YAQQC,EAAA,CARD,MAAA,EAAK,EAAA,mBACV,IAMM,kBANNQ,EAAAA,mBAMM,MAAA,CAJJ,MAAM,gBACN,MAAA,CAAA,cAAA,UAAA,qBAEGL,EAAA,KAAK,EAAA,GAAA,EAAA,UAJAA,EAAA,KAAK,YAOjBJ,EAAAA,YAsBQC,EAAA,CAtBD,MAAM,MAAM,EAAA,mBACjB,IAAY,CAAZD,EAAAA,YAAYQ,CAAA,EACZR,EAAAA,YAQQE,EAAA,CAPN,QAAQ,WACR,MAAM,OACN,YAAU,4BACT,SAAUC,EAAA,eACV,uBAAOC,EAAA,KAAI,wBACb,IAED,CAAA,GAAAC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAFC,WAED,EAAA,2BACAL,EAAAA,YAUQE,EAAA,CATN,IAAI,YACJ,KAAK,SACL,MAAM,UACN,MAAM,OACN,YAAU,4BACT,SAAUC,EAAA,gBAAc,CAAA,CAAMC,EAAA,MAC9B,wBAAeA,EAAA,QAAO,CAAA,SAAA,CAAA,sBAEvB,IAAY,qCAATA,EAAA,MAAM,EAAA,CAAA,qICqInBsH,EAAa,GAEdlJ,GAAU,CACb,WAAY,CACV,iBAAAmJ,GAEF,OAAQ,CAACC,EAAAA,gBAAgB,EACzB,MAAO,CACL,OAAQ,CACN,KAAM,OACN,QAAS,IAEX,OAAQ,CACN,KAAM,OACN,QAAS,IAEX,WAAY,CACV,KAAM,OACN,QAAS,IAEX,SAAU,CACR,KAAM,MACN,QAAS,IAAM,CAAA,GAEjB,eAAgB,CACd,KAAM,QACN,QAAS,IAEX,WAAY,CACV,KAAM,OACN,QAAS,GAEX,YAAa,CACX,KAAM,OACN,QAAS,GAEX,SAAU,CACR,KAAM,OACN,QAAS,GAEX,KAAM,CACJ,KAAM,OACN,QAAS,GAEX,WAAY,CACV,KAAM,QACN,QAAS,IAEX,MAAO,CACL,KAAM,OACN,QAAS,GAEX,UAAW,CACT,KAAM,QACN,QAAS,IAEX,SAAU,CACR,KAAM,OACN,QAAS,SAEX,OAAQ,CACN,KAAM,QACN,QAAS,IAEX,aAAc,CACZ,KAAM,OACN,QAAS,YAEX,iBAAkB,CAChB,KAAM,KACN,QAAS,MAEX,OAAQ,CACN,KAAM,QACN,QAAS,IAEX,aAAc,CACZ,KAAM,OACN,QAAS,OAGb,MAAO,CACL,eACA,gBACA,cACA,cACA,eACA,iBACA,kBAEF,MAAO,CACL,MAAO,CACL,IAAK,KACL,OAAQ,GACR,kBAAmB,KAAK,WACxB,WAAY,GACZ,OAAQ,GACR,aAAc,KACd,cAAe,KACf,YAAa,CAAA,EACb,aAAc,CAAA,EACd,eAAgB,CAAA,EAChB,MAAO,KACP,OAAQ,KACR,UAAW,GACX,aAAc,GACd,eAAgB,CAAA,EAChB,WAAY,GACZ,qBAAsB,KACtB,iBAAkB,GAClB,cAAe,EACf,OAAQ,CAAA,EACR,YAAa,GACb,UAAW,KACX,MAAO,EACP,MAAO,EACP,QAAS,KAAK,eACd,IAAK,KAAK,WACV,KAAM,KAAK,YACX,OAAQ,KAAK,SACb,cAAe,EACf,YAAa,CAAA,EACb,kBAAmB,CAAA,EACnB,aAAc,CAAA,EACd,cAAe,EACf,QAAS,KACT,SAAUC,EAAAA,cAAAA,SAAS,gBAAgB,EACnC,oBAAqB,IACvB,CACF,EACA,SAAU,CACR,MAAO,UAAY,CACjB,GAAI,KAAK,aAAe,KAAK,OAAO,OAAS,EAAG,CAC9C,IAAIzG,EAAW,IAAI,IACfvD,EAAS,GACb,UAAWc,KAAS,KAAK,OAAQ,CAC/B,GAAIyC,EAAS,IAAIzC,EAAM,OAAO,EAC5B,SAEF,IAAI6C,EAAM,GAAG7C,EAAM,IAAI,MAAMA,EAAM,IAAI,KAAKA,EAAM,OAAO;AAAA,EACzDd,GAAU2D,EACVJ,EAAS,IAAIzC,EAAM,OAAO,CAC5B,CACA,OAAOd,CACT,CACA,OAAO,IACT,EACA,eAAgB,OACd,IAAIiK,EAAQ,CAAA,EAEZ,MAAMC,EAAY,KAAK,SAASnD,EAAA,KAAK,MAAM,MAAX,YAAAA,EAAgB,aAChD,OAAI,KAAK,UACPkD,EAAM,SAAc,WACpBA,EAAM,IAAS,KAAK,IAAM,KAC1BA,EAAM,KAAU,KAAK,KAAO,KAC5BA,EAAM,MAAWC,EAAY,MAExBD,CACT,GAEF,MAAO,CACL,MAAO,CACL,QAAQrJ,EAAUuJ,EAAU,CAC1B,KAAK,kBAAoB,KAAK,WAC9B,KAAK,SAAQ,CACf,GAEF,iBAAkB,CAChB,QAAQvJ,EAAUuJ,EAAU,CACtB,KAAK,eAAiB,YAAcvJ,GACtC,KAAK,OAAM,CAEf,GAEF,aAAc,CACZ,QAAQA,EAAUuJ,EAAU,CACtBvJ,IAAa,WACf,KAAK,sBAAqB,GAI1B,cAAc,KAAK,OAAO,EAC1B,KAAK,QAAU,KAEnB,GAEF,OAAQ,CACN,QAAQA,EAAU,CACZA,EAEE,KAAK,UACP,cAAc,KAAK,OAAO,EAC1B,KAAK,QAAU,MAIb,KAAK,eAAiB,YACxB,KAAK,sBAAqB,CAGhC,GAEF,aAAc,CACZ,UAAW,GACX,QAAQA,EAAU,CACZA,GAAY,KAAK,QAEnB,OAAO,OAAO,KAAK,aAAcA,CAAQ,CAE7C,IAMJ,cAAcwJ,EAAKC,EAAIC,EAAM,CAC3B,OAAI,KAAK,OAAO,OAAST,IACnBO,EAAI,MACN,KAAK,OAAO,KAAK,CACf,KAAM,QACN,QAASA,EAAI,QACb,MAAOA,EAAI,MACX,KAAMA,EAAI,KACV,WAAYA,EAAI,WAChB,KAAM,IAAI,KAAI,EAAG,QAAO,EACzB,EAED,KAAK,OAAO,KAAK,CACf,KAAM,QACN,QAASA,EACT,KAAM,IAAI,KAAI,EAAG,QAAO,EACzB,GAGE,EACT,EACA,SAAU,CACR,KAAK,IAAM,IAAI7K,EAAAA,GACf,KAAK,aAAe,IAAIgL,EAAAA,GACxB,KAAK,gBAAe,EACpB,KAAK,UAAY,KAAK,MAAM,KAAK,OAAM,EAAK,GAAO,CACrD,EACA,SAAU,CACJ,KAAK,eAAiB,YAAc,CAAC,KAAK,QAC5C,KAAK,sBAAqB,EAGxB,KAAK,QAAU,KAAK,cACtB,KAAK,UAAU,IAAM,CACnB,OAAO,OAAO,KAAK,aAAc,KAAK,YAAY,CACpD,CAAC,EAEC,KAAK,UACP,KAAK,MAAM,IAAI,YAAc,KAAK,cAClC,KAAK,MAAM,IAAI,cAAc,cAAc,MACzC,YAAc,KAAK,OAEzB,EACA,WAAY,CACN,KAAK,SAAW,OAClB,cAAc,KAAK,OAAO,EAC1B,KAAK,QAAU,MAEb,KAAK,qBAAuB,OAC9B,aAAa,KAAK,mBAAmB,EACrC,KAAK,oBAAsB,KAE/B,EACA,QAAS,CAEP,KAAKzB,EAAQ0B,EAAQ,CACnB,KAAK,QAAQ,WAAW1B,EAAQ0B,CAAM,CACxC,EACA,MAAM1B,EAAQ0B,EAAQ,CACpB,KAAK,QAAQ,kBAAkB1B,EAAQ0B,CAAM,CAC/C,EACA,UAAW,CACT,KAAK,QAAQ,SAAQ,CACvB,EACA,YAAa,UAAY,CACvB,KAAK,OAAS,CAAA,CAChB,EACA,sBAAuB,UAAY,CACjC,IAAIC,EAAkB,KAAK,cAAgB,IACvC,KAAK,SACP,cAAc,KAAK,OAAO,EAE5B,KAAK,QAAU,YAAY,IAAM,CAC/B,KAAK,OAAM,CACb,EAAGA,CAAe,CACpB,EACA,gBAAiB,UAAY,CAoH3B,GAlHA,KAAK,YAAW,EAChB,KAAK,YAAc,CAAA,EACnB,KAAK,aAAe,CAAA,EACpB,KAAK,YAAc,CAAA,EACnB,KAAK,eAAiB,CAAA,EAEtB,KAAK,YAAY,KAAK,CACpB,KAAM,iBACN,WAAY,CAAA,EACZ,QAAS,CAAA,EACV,EACD,KAAK,cAAgB,KAAK,YAAY,KAAK,YAAY,OAAS,CAAC,EAEjE,KAAK,aAAa,aAChB,KAAK,kBACL,GACA,GACA,GACA,CAACC,EAASC,EAAYC,EAAMC,IAAe,CACzC,GAAIH,EACF,OAAQA,EAAO,CACb,IAAK,SACH,KAAK,aAAa,sBAChB,EACA,EACA,GAAGA,CAAO,oDACZ,EACA,KAAK,MAAQ,SAASC,EAAW,CAAC,CAAC,EACnC,KAAK,OAAS,SAASA,EAAW,CAAC,CAAC,EACpC,KAAK,cAAgB,WAAWA,EAAW,CAAC,CAAC,EAC7C,MACF,IAAK,MACH,KAAK,aAAa,sBAAsB,EAAG,EAAG,GAAGD,CAAO,EAAE,EAC1D,KAAK,YAAY,IAAG,EACpB,KAAK,cACH,KAAK,YAAY,KAAK,YAAY,OAAS,CAAC,EAC9C,MACF,IAAK,aACH,KAAK,aAAa,sBAChB,EACA,EACA,GAAGA,CAAO,aACZ,EACA,KAAK,UAAY,SAASC,EAAW,CAAC,CAAC,EACvC,MACF,IAAK,aACH,KAAK,aAAa,sBAChB,EACA,KACA,GAAGD,CAAO,6CACZ,EACIC,EAAW,CAAC,IAAM,QACpBA,EAAW,CAAC,EAAI,QAAUA,EAAW,CAAC,EAAE,YAAW,GAEvD,IAAK,UACH,KAAK,aAAa,sBAChB,EACA,KACA,GAAGD,CAAO,qCACZ,EACIC,EAAW,CAAC,IAAM,QACpBA,EAAW,CAAC,EAAI,QAAUA,EAAW,CAAC,EAAE,YAAW,IAGnD,KAAK,cAAc,QACjB,KAAK,cAAc,QAAQ,OAAS,CACtC,GAAK,KAAK,eACL,SAAS,KAAKA,CAAU,EAC/B,MACF,IAAK,UACH,KAAK,aAAa,sBAChB,EACA,EACA,GAAGD,CAAO,8BACZ,GAGE,KAAK,cAAc,QACjB,KAAK,cAAc,QAAQ,OAAS,CACtC,GAAK,KAAK,eACE,SAAS,KAAK,CAC1B,UACAC,EAAW,CAAC,EACZA,EAAW,CAAC,EACb,EACD,MACF,IAAK,oBACH,KAAK,aAAa,sBAChB,EACA,KACA,GAAGD,CAAO,6CACZ,EACIC,EAAW,CAAC,IAAM,QACpBA,EAAW,CAAC,EAAI,QAAUA,EAAW,CAAC,EAAE,YAAW,GAEvD,IAAK,iBACH,KAAK,aAAa,sBAChB,EACA,KACA,GAAGD,CAAO,qCACZ,EACIC,EAAW,CAAC,IAAM,QACpBA,EAAW,CAAC,EAAI,QAAUA,EAAW,CAAC,EAAE,YAAW,GAErD,KAAK,eAAe,KAAKA,CAAU,EACnC,MACF,QACE,KAAK,cAAcD,EAASC,EAAYC,EAAMC,CAAU,EACxD,KACJ,CAEJ,CACF,EAEI,OAAO,KAAK,YAAY,CAAC,EAAM,IAAa,CAC9C,IAAIC,EAAQ,CAAA,EACRC,EAAQ,CAAA,EACZ,UAAWC,KAAU,KAAK,eACxBF,EAAM,KAAKE,EAAO,IAAI,EACtBD,EAAM,KAAKC,EAAO,UAAU,EAG1B,KAAK,OAAO,OAASnB,GACvB,KAAK,OAAO,KAAK,CACf,KAAM,QACN,QAAS,sCAAsCiB,EAAM,KAAK,GAAG,CAAC,IAC9D,WAAYC,EAAM,KAAK,GAAG,EAC1B,KAAM,IAAI,KAAI,EAAG,QAAO,EACzB,EAIH,KAAK,YAAY,CAAC,EAAI,CACpB,KAAM,iBACN,WAAY,CAAA,EACZ,QAAS,CAAA,CACX,CACF,MACE,KAAK,oBAAoB,KAAK,YAAY,CAAC,EAAE,OAAO,CAExD,EACA,SAAU,UAAY,CAEpB,KAAK,OAAS,KAAK,kBAAkB,OAAO,CAAC,EAC7C,KAAK,WAAa,EACpB,EACA,SAAU,UAAY,CACpB,KAAK,QAAU,EACf,KAAK,MAAM,IAAI,cAAc,cAAc,MACzC,YAAc,KAAK,OACrB,KAAK,MAAM,cAAe,CACxB,KAAK,QACL,KAAK,IACL,KAAK,KACL,KAAK,OACN,CACH,EACA,WAAY,UAAY,CAClB,KAAK,OAAS,KAAK,OACrB,KAAK,QAAU,EACf,KAAK,MAAM,IAAI,cAAc,cAAc,MACzC,YAAc,KAAK,OACrB,KAAK,MAAM,cAAe,CACxB,KAAK,QACL,KAAK,IACL,KAAK,KACL,KAAK,OACN,EAEL,EACA,YAAa,UAAY,CACvB,GAAI,KAAK,QACP,KAAK,MAAM,IAAI,YAAc,KAC7B,KAAK,MAAM,IAAI,cAAc,cAAc,MAAQ,aACnD,KAAK,QAAU,GACf,KAAK,MAAM,iBAAkB,CAC3B,KAAK,QACL,KAAK,IACL,KAAK,KACL,KAAK,OACN,MACI,CACL,IAAIE,EACF,KAAK,MAAM,IAAI,cAAc,cAAc,cAAc,sBAAqB,EAC5EC,EAAW,KAAK,MAAM,IAAI,sBAAqB,EACnD,KAAK,IAAMA,EAAS,IAAMD,EAAS,IAAM,EACzC,KAAK,KAAOC,EAAS,KAAOD,EAAS,KAAO,EAC5C,KAAK,MAAM,IAAI,YAAc,KAAK,cAClC,KAAK,MAAM,IAAI,cAAc,cAAc,MACzC,YAAc,KAAK,OACrB,KAAK,QAAU,GACf,KAAK,MAAM,eAAgB,CACzB,KAAK,QACL,KAAK,IACL,KAAK,KACL,KAAK,OACN,CACH,CACF,EACA,cAAe,SAAUE,EAAG,CAC1BA,EAAIA,GAAK,OAAO,MAChBA,EAAE,eAAc,EAEhB,KAAK,MAAQA,EAAE,QACf,KAAK,MAAQA,EAAE,QACf,SAAS,UAAY,KAAK,iBAE1B,SAAS,YAAc,KAAK,WAC9B,EACA,YAAa,SAAUA,EAAG,CACxBA,EAAIA,GAAK,OAAO,MAChBA,EAAE,eAAc,EAEhB,IAAIC,EAAU,KAAK,MAAQD,EAAE,QACzBE,EAAU,KAAK,MAAQF,EAAE,QAC7B,KAAK,MAAQA,EAAE,QACf,KAAK,MAAQA,EAAE,QAEf,KAAK,IAAM,KAAK,MAAM,IAAI,UAAYE,EACtC,KAAK,KAAO,KAAK,MAAM,IAAI,WAAaD,EACxC,KAAK,MAAM,cAAe,CACxB,KAAK,QACL,KAAK,IACL,KAAK,KACL,KAAK,OACN,CACH,EACA,iBAAkB,UAAY,CAE5B,SAAS,UAAY,KACrB,SAAS,YAAc,IACzB,EACA,SAAU,UAAY,CACpB,KAAK,gBAAe,EACpB,KAAK,sBAAqB,EAE1B,KAAK,UAAY,KAAK,MAAM,KAAK,OAAM,EAAK,GAAO,EAEnD,KAAK,UAAU,UAAY,CACzB,KAAK,YAAW,EAChB,KAAK,MAAM,aAAa,CAC1B,CAAC,CACH,EACA,WAAY,UAAY,CACtB,KAAK,KAAO,KACZ,KAAK,WAAa,GAElB,KAAK,kBAAoB,KAAK,OAC9B,KAAK,SAAQ,CACf,EACA,SAAU,SAAUE,EAAY,CAC9B,KAAK,WAAa,GAClB,KAAK,kBAAoBA,EACzB,KAAK,SAAQ,EACb,KAAK,UAAU,UAAY,CACzBjM,EAAAA,GAAI,KACF,sBACA,CACE,KAAM,CACJ,MAAO,OAAO,YACd,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,KAAM,KAAK,oBAGf,CACF,CACF,CAAC,CACH,EACA,aAAc,UAAY,CACxB,KAAK,WAAa,GAClBA,EAAAA,GAAI,OAAO,sBAAsB,KAAK,MAAM,IAAI,KAAK,MAAM,EAAE,EAAE,KAC5DC,GAAa,CACZ,KAAK,MAAM,eAAe,CAC5B,CACF,CACF,EACA,iBAAkB,UAAY,CAC5B,KAAK,OAAS,CAAC,KAAK,OACpB,KAAK,MAAM,gBAAgB,CAC7B,EACA,cAAe,SAAUoL,EAASC,EAAYC,EAAMC,EAAY,CAC9D,IAAIU,EAAa,KACbb,IAAY,iBACd,KAAK,aAAa,sBAChB,EACA,KACA,GAAGA,CAAO,8DACZ,EACAa,EAAaZ,EAAW,CAAC,EAAE,YAAW,EACtCD,EAAUC,EAAW,CAAC,EAAE,YAAW,EACnCA,EAAaA,EAAW,MAAM,EAAGA,EAAW,MAAM,GAEpD,MAAMa,EACJd,EAAQ,OAAO,CAAC,EAAE,YAAW,EAC7BA,EAAQ,MAAM,CAAC,EAAE,YAAW,EAC5B,SACF,IAAIe,EAAW,CAAA,EAWf,GARAA,EAAS,KAAK,CAAC,gBAAiB,KAAK,QAAQ,CAAC,EAC1CF,IAAe,MAIjBE,EAAS,KAAK,CAAC,eAAgBF,CAAU,CAAC,EAI1Cb,IAAY,YACZA,IAAY,eACZA,IAAY,cACZA,IAAY,iBACZA,IAAY,mBACZA,IAAY,WACZA,IAAY,WACZA,IAAY,UACZA,IAAY,cACZA,IAAY,eACZ,CACA,MAAMgB,EAAS,CACb,KAAMF,EACN,WAAYb,EACZ,SAAUc,EACV,aAAc,KAAK,aACnB,eAAgB,KAAK,SACrB,QAAS,CAAA,CACX,EACA,KAAK,YAAY,KAAKC,CAAM,EAC5B,KAAK,cAAc,QAAQ,KAAKA,CAAM,EACtC,KAAK,cAAgBA,CACvB,SAAW,KAAK,SAAS,WAAWF,CAAa,EAC/C,KAAK,cAAc,QAAQ,KAAK,CAC9B,KAAMA,EACN,OAAQ,KAAK,OACb,WAAYb,EACZ,SAAUc,EACV,aAAc,KAAK,aACnB,eAAgB,KAAK,SACrB,KAAMb,EACN,WAAYC,EACb,MACI,CACL,IAAIG,EAAS,CACX,KAAM,gBACN,OAAQ,KAAK,OACb,WAAYL,EACZ,SAAUc,EACV,aAAc,KAAK,aACnB,eAAgB,KAAK,SACrB,KAAMD,EACN,KAAMZ,EACN,WAAYC,CACd,EACA,KAAK,cAAc,QAAQ,KAAKG,CAAM,EACtC,KAAK,eAAe,KAAKA,CAAM,CACjC,CACF,EACA,oBAAqB,SAAUW,EAAS,CACtCA,EAAQ,QAASX,GAAW,CAC1B,KAAK,eAAe,QAASY,GAAY,CAIrCZ,EAAO,KAAK,YAAW,IACvBY,EAAQ,CAAC,EAAE,cAAgB,WAEHZ,EAAO,SAAS,KACrCa,GAAMA,EAAE,CAAC,IAAMD,EAAQ,CAAC,CAC3B,GAEEZ,EAAO,SAAS,KAAKY,EAAQ,MAAM,CAAC,CAAC,EAG3C,CAAC,EAEGZ,EAAO,SACT,KAAK,oBAAoBA,EAAO,OAAO,CAE3C,CAAC,CACH,EACA,OAAQ,UAAY,CAElB,GAAI,KAAK,OACP,OAGF,IAAIc,EACF,KAAK,eAAiB,WAAa,KAAK,iBAAmB,KACzD,KAAK,kBAAkB,SAAW,GACpC,KAAK,IACF,eACC,KAAK,kBACL,KAAK,UACL,KAAK,aACLA,CACF,EACC,KAAMC,GAAS,CACVA,GAAQA,EAAK,OAAS,GACxB,KAAK,aAAaA,CAAI,CAE1B,CAAC,EACA,MAAOjL,GAAU,CAChB,IAAI6H,EAAU,KAAK,UAAU7H,EAAO,KAAM,CAAC,EAExC,KAAK,OAAO,KAAMkL,GACVA,EAAS,UAAYrD,CAC7B,GAEG,KAAK,OAAO,OAASkB,GACvB,KAAK,OAAO,KAAK,CACf,KAAM,QACN,QAASlB,EACT,KAAM,IAAI,KAAI,EAAG,QAAO,EACzB,CAGP,CAAC,CAEP,EACA,aAAc,SAAUsD,EAAQ,CAE9B,GADA,KAAK,eAAiB,EAEpBA,EAAO,QAAU,KAAK,YAAY,QAClCA,EAAO,QAAU,KAAK,kBAAkB,OAGxC,QAAQ,IACN,yCAAyCA,EAAO,MAAM,yBAAyB,KAAK,YAAY,MAAM,+BAA+B,KAAK,kBAAkB,MAAM,GAClK,KAAK,UAAUA,CAAM,EACrB,KAAK,UAAU,KAAK,WAAW,EAC/B,KAAK,UAAU,KAAK,iBAAiB,CACvC,MAEA,SAASC,EAAI,EAAGA,EAAID,EAAO,OAAQC,IACjCD,EAAOC,CAAC,EAAE,KAAK,KAAK,aAAa,EACjC,KAAK,aAAa,KAAK,YAAYA,CAAC,CAAC,EAAID,EAAOC,CAAC,CAGvD,EACA,4BAA6B,UAAY,CAEnC,KAAK,SAGL,KAAK,qBAAuB,MAC9B,aAAa,KAAK,mBAAmB,EAEvC,KAAK,oBAAsB,WAAW,IAAM,CAC1C,KAAK,IACF,kBAAkB,KAAK,WAAW,EAClC,KAAMH,GAAS,CAId,GAHA,KAAK,kBAAoBA,EAGrB,KAAK,YAAY,QAAUA,EAAK,OAElC,QAAQ,IACN,8BACA,KAAK,YACL,KAAK,iBACP,MAEA,SAASG,EAAI,EAAGA,EAAI,KAAK,kBAAkB,OAAQA,IACjD,GAAI,KAAK,kBAAkBA,CAAC,IAAM,KAAM,CAEtC,MAAMxC,EAAQ,KAAK,YAAYwC,CAAC,EAAE,MAAM,IAAI,EACtCnB,EAAQ,KAAK,kBAAkB,MAAM;AAAA,CAAI,EACzCoB,EACJpB,EAAM,UACHH,GACCA,EAAK,SAASlB,EAAM,CAAC,CAAC,GACtBkB,EAAK,SAASlB,EAAM,CAAC,CAAC,GACtBkB,EAAK,SAASlB,EAAM,CAAC,CAAC,GACtB,EACFyC,EAAW,EACb,KAAK,OAAO,KAAK,CACf,KAAM,QACN,QAAS,YAAYzC,EAAM,KAAK,GAAG,CAAC,mBACpC,KAAMqB,EAAMoB,EAAW,CAAC,EACxB,WAAYA,EACZ,KAAM,IAAI,KAAI,EAAG,QAAO,EACzB,EAED,KAAK,OAAO,KAAK,CACf,KAAM,QACN,QAAS,YAAYzC,EAAM,KAAK,GAAG,CAAC,mBACpC,KAAM,IAAI,KAAI,EAAG,QAAO,EACzB,CAEL,CAGN,CAAC,EACA,MAAO5I,GAAU,CAEhB,QAAQ,IAAI,8BAA+BA,CAAK,EAChD,KAAK,kBAAoB,KAAK,WAChC,CAAC,EACH,KAAK,oBAAsB,IAC7B,EAAG,GAAG,EACR,EACA,QAAS,SAAUsL,EAAS,CAC1B,KAAK,YAAY,KAAKA,CAAO,EAGzB,KAAK,QAAU,KAAK,cAAgB,KAAK,aAAaA,CAAO,EAC/D,KAAK,aAAaA,CAAO,EAAI,KAAK,aAAaA,CAAO,EAEtD,KAAK,aAAaA,CAAO,EAAI,CAAC,KAAM,KAAM,CAAC,EAE7C,KAAK,4BAA2B,CAClC,EACA,WAAY,SAAUA,EAAS,CAC7B,IAAI9H,EAAQ,KAAK,YAAY,QAAQ8H,CAAO,EAC5C,KAAK,YAAY,OAAO9H,EAAO,CAAC,EAChC,KAAK,4BAA2B,CAClC,EAEA,gBAAiB,UAAY,CAE3B,OAAO,KAAK,MAAM,KAAK,UAAU,KAAK,YAAY,CAAC,CACrD,EAEJ,MAz5BU,IAAI,SACJ,MAAM,OACN,MAAA,CAAA,SAAA,UAAA,aAyBa,MAAM,OAAO,MAAA,CAAA,SAAA,UAAA,qeA3IlCpC,EAAAA,mBA+MM,MAAA,CA/MD,IAAI,MAAO,uBAAOK,EAAA,aAAa,IAEzBM,EAAA,kDADTgB,EAAAA,YAwISG,EAAA,OAtIN,aAAY1B,EAAA,OACZ,YAAWA,EAAA,MACZ,MAAA,CAAA,OAAA,SAAA,sBAEA,IAqGY,CArGZH,EAAAA,YAqGY8B,EAAA,CArGD,OAAO,IAAI,EAAA,mBACpB,IAYE,kBAZF9B,EAAAA,YAYEE,EAAA,CAVA,KAAK,YACL,QAAQ,OACR,QAAQ,UACR,YAAU,mBACV,aAAW,cACV,QAAKG,EAAA,CAAA,IAAAA,EAAA,CAAA,OAAqCF,EAAA,YAAW,iBAN9C,CAAA+J,QAAA/J,EAAA,OAAO,SAAM,CAAA,IAYvBH,EAAAA,YAOEE,EAAA,CANA,KAAK,aACL,QAAQ,OACR,QAAQ,UACR,YAAU,mBACV,aAAW,cACV,QAAOE,EAAA,8BAEQM,EAAA,sDAAlBgB,EAAAA,YAcYoE,EAAA,OAdmB,aAAY,IAAK,SAAS,QAC5C,UAAS5B,EAAAA,QAClB,CASM,CAVgB,MAAAE,KAAK,CAC3B3D,EAAAA,mBASM,4CATO2D,CAAK,CAAA,EAAA,CAChBpE,EAAAA,YAOEE,EAAA,CANC,KAAMC,EAAA,QAAO,cAAA,wBACd,QAAQ,OACR,QAAQ,UACR,YAAU,oBACT,aAAYA,EAAA,QAAO,iBAAA,eACnB,QAAOC,EAAA,8EAId,IAAgE,CAAhEK,qBAAgE,8BAAtDN,EAAA,QAAO,iBAAA,cAAA,EAAA,CAAA,WAEFA,EAAA,uBAAjBuB,EAAAA,YAcYoE,EAAA,OAde,aAAY,IAAK,SAAS,QACxC,UAAS5B,EAAAA,QAClB,CASM,CAVgB,MAAAE,KAAK,CAC3B3D,EAAAA,mBASM,4CATO2D,CAAK,CAAA,EAAA,CAChBpE,EAAAA,YAOEE,EAAA,CANA,KAAK,eACL,QAAQ,OACR,QAAQ,UACR,YAAU,iBACV,aAAW,iBACV,QAAOE,EAAA,uDAId,IAA6B,CAA7BC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAI,EAAAA,mBAA6B,YAAvB,mBAAgB,EAAA,wCAGhBN,EAAA,SAAWA,EAAA,OAASO,EAAA,oBAD5BgB,EAAAA,YAkBYoE,EAAA,OAhBT,aAAY,IACb,SAAS,QAEE,UAAS5B,EAAAA,QAClB,CASM,CAVgB,MAAAE,KAAK,CAC3B3D,EAAAA,mBASM,4CATO2D,CAAK,CAAA,EAAA,CAChBpE,EAAAA,YAOEE,EAAA,CANA,KAAK,iBACL,QAAQ,OACR,QAAQ,UACR,YAAU,mBACV,aAAW,mBACV,QAAOE,EAAA,yDAId,IAA+B,CAA/BC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAI,EAAAA,mBAA+B,YAAzB,qBAAkB,EAAA,wCAE1BT,EAAAA,YAAYQ,CAAA,EACZC,EAAAA,mBAAwC,OAAA,KAAAQ,EAAAA,gBAA9BP,EAAA,MAAM,EAAG,sBAAIA,EAAA,MAAM,EAAA,CAAA,EAC7BV,EAAAA,YAAYQ,CAAA,EAEJL,EAAA,sBADRuB,EAAAA,YAQExB,EAAA,OANA,KAAK,sBACL,QAAQ,OACR,QAAQ,UACR,YAAU,uBACV,aAAW,kBACV,QAAOE,EAAA,sDAEVsB,EAAAA,YAQExB,EAAA,OANA,KAAK,sBACL,QAAQ,OACR,QAAQ,UACR,YAAU,uBACV,aAAW,kBACV,QAAOE,EAAA,uCAGFM,EAAA,yBADRgB,EAAAA,YAQExB,EAAA,OANA,KAAK,gBACL,QAAQ,OACR,QAAQ,UACR,YAAU,oBACV,aAAW,eACV,uBAAO0B,EAAA,MAAK,cAAA,0CAGWzB,EAAA,sDAA5BuB,EAAAA,YA2BsByI,EAAA,CAAA,IAAA,CAAA,EAAA,mBA1BpB,IAyBM,CAzBNC,iBAAA3J,EAAAA,mBAyBM,MAzBNZ,GAyBM,CAnBJG,EAAAA,YAOEwH,EAAA,CANA,MAAA,CAAA,iBAAA,MAAA,EACC,cAAarH,EAAA,OAAO,SAAM,EAC3B,QAAQ,MACR,SAAA,GACA,OAAA,GACA,kBAAgB,+CAElBuB,EAAAA,YAUE2I,EAAA,CATC,IAAKlK,EAAA,UACL,QAASA,EAAA,YAAW,CAAA,EAAI,QACxB,gBAAeA,EAAA,aACf,mBAAkBO,EAAA,SAClB,UAAUN,EAAA,QACV,aAAaA,EAAA,WACb,OAAMA,EAAA,KACN,QAAOA,EAAA,MACP,WAAWA,EAAA,6IAtBND,EAAA,MAAM,mDA4BTO,EAAA,QAAXZ,EAAAA,YAAAC,EAAAA,mBAiCM,MAjCNgG,GAiCM,CAhCJ/F,EAAAA,YAOEwH,EAAA,CANA,MAAA,CAAA,iBAAA,MAAA,EACC,cAAarH,EAAA,OAAO,SAAM,EAC3B,QAAQ,MACR,SAAA,GACA,OAAA,GACA,kBAAgB,iDAElBH,EAAAA,YAYEE,EAAA,CAVA,KAAK,YACL,QAAQ,OACR,QAAQ,UACR,YAAU,mBACV,aAAW,cACV,QAAKG,EAAA,CAAA,IAAAA,EAAA,CAAA,OAAiCF,EAAA,YAAW,iBAN1C,CAAA+J,QAAA/J,EAAA,OAAO,SAAM,CAAA,mBAYvBuB,EAAAA,YAUE2I,EAAA,CATC,IAAKlK,EAAA,UACL,QAASA,EAAA,YAAW,CAAA,EAAI,QACxB,gBAAeA,EAAA,aACf,mBAAkBO,EAAA,SAClB,UAAUN,EAAA,QACV,aAAaA,EAAA,WACb,OAAMA,EAAA,KACN,QAAOA,EAAA,MACP,WAAWA,EAAA,4JAKRD,EAAA,0BADRuB,EAAAA,YAWE4I,EAAA,kBATSnK,EAAA,gDAAAA,EAAA,WAAUI,GAClB,OAAQG,EAAA,OACR,OAAQA,EAAA,OACR,WAAYP,EAAA,kBACZ,SAAUO,EAAA,SACV,OAAQP,EAAA,OACR,OAAMC,EAAA,SACN,SAAQA,EAAA,WACR,SAAQA,EAAA,oJAIXJ,EAAAA,YAkBW2B,EAAA,YAlBQxB,EAAA,iDAAAA,EAAA,YAAWI,GAAE,MAAM,2BACpC,IAIY,CAJZP,EAAAA,YAIY8B,EAAA,CAJD,OAAO,IAAI,EAAA,mBACpB,IAAY,CAAZ9B,EAAAA,YAAYQ,CAAA,EACZC,EAAAA,mBAAuD,OAAA,KAAjD,YAASQ,EAAAA,gBAAGP,EAAA,MAAM,EAAG,IAACO,EAAAA,gBAAGP,EAAA,MAAM,EAAG,WAAQ,CAAA,EAChDV,EAAAA,YAAYQ,CAAA,UAEdR,EAAAA,YAWS6B,EAAA,KAAA,mBAVP,IAAqE,CAArE7B,EAAAA,YAAqEuK,EAAA,CAAzD,MAAM,SAAS,SAAA,GAAS,KAAK,KAAM,cAAanK,EAAA,+BAC5DJ,EAAAA,YAQiBwK,EAAA,CARD,MAAM,MAAM,EAAA,mBAC1B,IAAY,CAAZxK,EAAAA,YAAYQ,CAAA,EACZR,EAAAA,YAEQE,EAAA,CAFD,QAAQ,WAAW,MAAM,OAAQ,QAAOE,EAAA,gCAAa,IAE5D,CAAA,GAAAC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAF4D,iBAE5D,EAAA,0BACAL,EAAAA,YAEQE,EAAA,CAFD,QAAQ,OAAO,MAAM,OAAQ,uBAAOC,EAAA,YAAW,wBAAU,IAEhE,CAAA,GAAAE,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAFgE,UAEhE,EAAA"}
@@ -0,0 +1,2 @@
1
+ "use strict";const n=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-Bjn8x8eE.cjs"),e=require("vue"),f=require("./CustomIcon-CEc927h0.cjs"),p={methods:{buildLanguageMode(o,t){let i=n.aceExports.require("ace/lib/oop"),a=Object.getOwnPropertyNames(n.yi.prototype).filter(s=>s!=="constructor").filter(s=>s!=="exec").concat(["check","check_raw","check_formatted","check_with_units","check_exception","check_tolerance","check_expression","wait","wait_tolerance","wait_expression","wait_check","wait_check_tolerance","wait_check_expression","wait_packet","wait_check_packet","disable_instrumentation","set_line_delay","get_line_delay","set_max_output","get_max_output"]),l=new RegExp(`(\\b${a.join("\\b|\\b")}\\b)`),r=function(){o.call(this);for(let s in this.$rules)this.$rules[s].unshift({regex:l,token:"support.function"})};i.inherits(r,o);let d=n.aceExports.require("ace/mode/matching_brace_outdent").MatchingBraceOutdent,c=n.aceExports.require("ace/mode/behaviour/cstyle").CstyleBehaviour;return[i,function(){this.HighlightRules=r,this.$outdent=new d,this.$behaviour=new c,this.foldingRules=new t,this.indentKeywords=this.foldingRules.indentKeywords}]},buildRubyMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/ruby_highlight_rules").RubyHighlightRules,n.aceExports.require("ace/mode/folding/ruby").FoldMode);let i=n.aceExports.require("ace/mode/ruby").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t},buildPythonMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/python_highlight_rules").PythonHighlightRules,n.aceExports.require("ace/mode/folding/pythonic").FoldMode);let i=n.aceExports.require("ace/mode/python").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t},buildJsonMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/json_highlight_rules").JsonHighlightRules,n.aceExports.require("ace/mode/folding/ruby").FoldMode);let i=n.aceExports.require("ace/mode/json").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t},buildMarkdownMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/markdown_highlight_rules").MarkdownHighlightRules,n.aceExports.require("ace/mode/folding/markdown").FoldMode);let i=n.aceExports.require("ace/mode/markdown").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t}}},w={mixins:[p],props:{content:{type:String,required:!0},type:{type:String,default:null},name:{type:String,default:null},modelValue:Boolean,filename:{type:String,default:null}},emits:["update:modelValue"],data(){return{editor:null,mode:null}},computed:{show:{get(){return this.modelValue},set(o){this.$emit("update:modelValue",o)}},title:function(){return`${this.type}: ${this.name}`}},mounted(){this.editor=ace.edit(this.$refs.editor),this.editor.setTheme("ace/theme/twilight");let o=null;switch(this.filename?this.filename.split(".").pop():"txt"){case"json":const i=this.buildJsonMode();o=new i,this.editor.setOptions({useWorker:!1});break;case"py":case"pyi":const a=this.buildPythonMode();o=new a;break;case"md":const l=this.buildMarkdownMode();o=new l;break;default:const r=this.buildRubyMode();o=new r;break}this.editor.session.setMode(o),this.editor.session.setUseWrapMode(!0),this.editor.$blockScrolling=1/0,this.editor.setHighlightActiveLine(!1),this.editor.setValue(this.content),this.editor.clearSelection(),this.editor.focus(),this.editor.setReadOnly(!0)},beforeUnmount(){this.editor&&this.editor.destroy()},methods:{close:function(){this.show=!this.show},download:function(){const o=new Blob([this.editor.getValue()],{type:"text/plain"});let t=`${this.type.toLowerCase()}_${this.name.toLowerCase()}.json`;this.filename&&(t=this.filename);const i=document.createElement("a");i.href=URL.createObjectURL(o),i.setAttribute("download",t),i.click()}}},b=["textContent"],y={class:"mx-2"},M={ref:"editor",class:"editor"};function x(o,t,i,a,l,r){const d=e.resolveComponent("v-spacer"),c=e.resolveComponent("v-btn"),u=e.resolveComponent("v-toolbar"),s=e.resolveComponent("v-card-text"),_=e.resolveComponent("v-card-actions"),m=e.resolveComponent("v-card"),g=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(g,{modelValue:r.show,"onUpdate:modelValue":t[1]||(t[1]=h=>r.show=h),width:"85vw"},{default:e.withCtx(()=>[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(u,{height:"24"},{default:e.withCtx(()=>[e.createVNode(d),e.createElementVNode("span",{textContent:e.toDisplayString(r.title)},null,8,b),e.createVNode(d),e.createElementVNode("div",y,[e.createVNode(c,{icon:"mdi-download",variant:"text",density:"compact","data-test":"downloadIcon",onClick:r.download},null,8,["onClick"])])]),_:1}),e.createVNode(s,null,{default:e.withCtx(()=>[e.createElementVNode("pre",M,null,512)]),_:1}),e.createVNode(_,{class:"pr-6 pb-4 pt-0"},{default:e.withCtx(()=>[e.createVNode(d),e.createVNode(c,{variant:"flat",onClick:t[0]||(t[0]=h=>r.show=!r.show)},{default:e.withCtx(()=>[...t[2]||(t[2]=[e.createTextVNode(" Ok ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])}const k=f._export_sfc(w,[["render",x],["__scopeId","data-v-e0692b60"]]);exports.AceEditorModes=p;exports.OutputDialog=k;
2
+ //# sourceMappingURL=OutputDialog-BwEWPQW9.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputDialog-BwEWPQW9.cjs","sources":["../src/components/ace/AceEditorModes.js","../src/components/OutputDialog.vue"],"sourcesContent":["/*\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-markdown'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n methods: {\n buildLanguageMode(HighlightRules, FoldMode) {\n let oop = ace.require('ace/lib/oop')\n let apis = Object.getOwnPropertyNames(OpenC3Api.prototype)\n .filter((a) => a !== 'constructor')\n .filter((a) => a !== 'exec')\n // Add the Public apis in api_shared but not in OpenC3Api\n .concat([\n 'check',\n 'check_raw',\n 'check_formatted',\n 'check_with_units',\n 'check_exception',\n 'check_tolerance',\n 'check_expression',\n 'wait',\n 'wait_tolerance',\n 'wait_expression',\n 'wait_check',\n 'wait_check_tolerance',\n 'wait_check_expression',\n 'wait_packet',\n 'wait_check_packet',\n 'disable_instrumentation',\n 'set_line_delay',\n 'get_line_delay',\n 'set_max_output',\n 'get_max_output',\n ])\n let regex = new RegExp(`(\\\\b${apis.join('\\\\b|\\\\b')}\\\\b)`)\n let OpenC3HighlightRules = function () {\n HighlightRules.call(this)\n // add openc3 rules to the rules\n for (let rule in this.$rules) {\n this.$rules[rule].unshift({\n regex: regex,\n token: 'support.function',\n })\n }\n }\n oop.inherits(OpenC3HighlightRules, HighlightRules)\n\n let MatchingBraceOutdent = ace.require(\n 'ace/mode/matching_brace_outdent',\n ).MatchingBraceOutdent\n let CstyleBehaviour = ace.require(\n 'ace/mode/behaviour/cstyle',\n ).CstyleBehaviour\n let Mode = function () {\n this.HighlightRules = OpenC3HighlightRules\n this.$outdent = new MatchingBraceOutdent()\n this.$behaviour = new CstyleBehaviour()\n this.foldingRules = new FoldMode()\n this.indentKeywords = this.foldingRules.indentKeywords\n }\n return [oop, Mode]\n },\n buildRubyMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/ruby_highlight_rules').RubyHighlightRules,\n ace.require('ace/mode/folding/ruby').FoldMode,\n )\n let RubyMode = ace.require('ace/mode/ruby').Mode\n oop.inherits(Mode, RubyMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildPythonMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/python_highlight_rules').PythonHighlightRules,\n ace.require('ace/mode/folding/pythonic').FoldMode,\n )\n let PythonMode = ace.require('ace/mode/python').Mode\n oop.inherits(Mode, PythonMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildJsonMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/json_highlight_rules').JsonHighlightRules,\n ace.require('ace/mode/folding/ruby').FoldMode,\n )\n let JsonMode = ace.require('ace/mode/json').Mode\n oop.inherits(Mode, JsonMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildMarkdownMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/markdown_highlight_rules').MarkdownHighlightRules,\n ace.require('ace/mode/folding/markdown').FoldMode,\n )\n let MarkdownMode = ace.require('ace/mode/markdown').Mode\n oop.inherits(Mode, MarkdownMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n },\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"85vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"title\" />\n <v-spacer />\n <div class=\"mx-2\">\n <v-btn\n icon=\"mdi-download\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"downloadIcon\"\n @click=\"download\"\n />\n </div>\n </v-toolbar>\n <v-card-text>\n <pre ref=\"editor\" class=\"editor\"></pre>\n </v-card-text>\n <v-card-actions class=\"pr-6 pb-4 pt-0\">\n <v-spacer />\n <v-btn variant=\"flat\" @click=\"show = !show\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { AceEditorModes } from './ace'\n\nexport default {\n mixins: [AceEditorModes],\n props: {\n content: {\n type: String,\n required: true,\n },\n type: {\n type: String,\n default: null,\n },\n name: {\n type: String,\n default: null,\n },\n modelValue: Boolean,\n filename: {\n type: String,\n default: null,\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n editor: null,\n mode: null,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n title: function () {\n return `${this.type}: ${this.name}`\n },\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n let languageMode = null\n const fileExtension = this.filename ? this.filename.split('.').pop() : 'txt'\n switch (fileExtension) {\n case 'json':\n const JsonMode = this.buildJsonMode()\n languageMode = new JsonMode()\n this.editor.setOptions({\n useWorker: false,\n })\n break\n case 'py':\n case 'pyi':\n const PythonMode = this.buildPythonMode()\n languageMode = new PythonMode()\n break\n case 'md':\n const MarkdownMode = this.buildMarkdownMode()\n languageMode = new MarkdownMode()\n break\n default:\n // Most of the COSMOS text files are best display in Ruby\n // This includes Rakefiles, Gemfiles, etc.\n const RubyMode = this.buildRubyMode()\n languageMode = new RubyMode()\n break\n }\n this.editor.session.setMode(languageMode)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.content)\n this.editor.clearSelection()\n this.editor.focus()\n this.editor.setReadOnly(true)\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n }\n },\n methods: {\n close: function () {\n this.show = !this.show\n },\n download: function () {\n const blob = new Blob([this.editor.getValue()], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n let filename = `${this.type.toLowerCase()}_${this.name.toLowerCase()}.json`\n if (this.filename) {\n filename = this.filename\n }\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', filename)\n link.click()\n },\n },\n}\n</script>\n\n<style scoped>\n.editor {\n height: 75vh;\n position: relative;\n font-size: 16px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n"],"names":["AceEditorModes","HighlightRules","FoldMode","oop","ace.require","apis","OpenC3Api","a","regex","OpenC3HighlightRules","rule","MatchingBraceOutdent","CstyleBehaviour","Mode","RubyMode","PythonMode","JsonMode","MarkdownMode","_sfc_main","value","languageMode","blob","filename","link","_hoisted_2","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_btn","_component_v_card_text","_hoisted_3","_component_v_card_actions","_cache"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { b as i, y as w } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B8ikVCn7.js";
2
- import { resolveComponent as d, createBlock as M, openBlock as y, withCtx as l, createVNode as s, createElementVNode as p, toDisplayString as k, createTextVNode as x } from "vue";
3
- import { _ as v } from "./CustomIcon-DTfsnDJn.js";
1
+ import { a as i, y as w } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-NXWdTcR2.js";
2
+ import { resolveComponent as r, createBlock as y, openBlock as M, withCtx as l, createVNode as s, createElementVNode as p, toDisplayString as k, createTextVNode as x } from "vue";
3
+ import { _ as v } from "./CustomIcon-B9m73Gqm.js";
4
4
  const q = {
5
5
  methods: {
6
6
  buildLanguageMode(t, e) {
7
- let o = i.require("ace/lib/oop"), c = Object.getOwnPropertyNames(w.prototype).filter((r) => r !== "constructor").filter((r) => r !== "exec").concat([
7
+ let o = i.require("ace/lib/oop"), c = Object.getOwnPropertyNames(w.prototype).filter((d) => d !== "constructor").filter((d) => d !== "exec").concat([
8
8
  "check",
9
9
  "check_raw",
10
10
  "check_formatted",
@@ -27,8 +27,8 @@ const q = {
27
27
  "get_max_output"
28
28
  ]), u = new RegExp(`(\\b${c.join("\\b|\\b")}\\b)`), n = function() {
29
29
  t.call(this);
30
- for (let r in this.$rules)
31
- this.$rules[r].unshift({
30
+ for (let d in this.$rules)
31
+ this.$rules[d].unshift({
32
32
  regex: u,
33
33
  token: "support.function"
34
34
  });
@@ -91,14 +91,21 @@ const q = {
91
91
  type: String,
92
92
  required: !0
93
93
  },
94
- type: String,
95
- name: String,
94
+ type: {
95
+ type: String,
96
+ default: null
97
+ },
98
+ name: {
99
+ type: String,
100
+ default: null
101
+ },
96
102
  modelValue: Boolean,
97
103
  filename: {
98
104
  type: String,
99
- required: !1
105
+ default: null
100
106
  }
101
107
  },
108
+ emits: ["update:modelValue"],
102
109
  data() {
103
110
  return {
104
111
  editor: null,
@@ -161,13 +168,13 @@ const q = {
161
168
  o.href = URL.createObjectURL(t), o.setAttribute("download", e), o.click();
162
169
  }
163
170
  }
164
- }, $ = ["textContent"], C = { class: "mx-2" }, O = {
171
+ }, $ = ["textContent"], C = { class: "mx-2" }, V = {
165
172
  ref: "editor",
166
173
  class: "editor"
167
174
  };
168
- function V(t, e, o, c, u, n) {
169
- const a = d("v-spacer"), h = d("v-btn"), _ = d("v-toolbar"), r = d("v-card-text"), g = d("v-card-actions"), f = d("v-card"), b = d("v-dialog");
170
- return y(), M(b, {
175
+ function O(t, e, o, c, u, n) {
176
+ const a = r("v-spacer"), h = r("v-btn"), _ = r("v-toolbar"), d = r("v-card-text"), g = r("v-card-actions"), f = r("v-card"), b = r("v-dialog");
177
+ return M(), y(b, {
171
178
  modelValue: n.show,
172
179
  "onUpdate:modelValue": e[1] || (e[1] = (m) => n.show = m),
173
180
  width: "85vw"
@@ -194,9 +201,9 @@ function V(t, e, o, c, u, n) {
194
201
  ]),
195
202
  _: 1
196
203
  }),
197
- s(r, null, {
204
+ s(d, null, {
198
205
  default: l(() => [
199
- p("pre", O, null, 512)
206
+ p("pre", V, null, 512)
200
207
  ]),
201
208
  _: 1
202
209
  }),
@@ -222,9 +229,9 @@ function V(t, e, o, c, u, n) {
222
229
  _: 1
223
230
  }, 8, ["modelValue"]);
224
231
  }
225
- const E = /* @__PURE__ */ v(R, [["render", V], ["__scopeId", "data-v-69e71dd8"]]);
232
+ const E = /* @__PURE__ */ v(R, [["render", O], ["__scopeId", "data-v-e0692b60"]]);
226
233
  export {
227
234
  q as A,
228
235
  E as O
229
236
  };
230
- //# sourceMappingURL=OutputDialog-CNH74LpJ.js.map
237
+ //# sourceMappingURL=OutputDialog-x4QZFAWe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputDialog-x4QZFAWe.js","sources":["../src/components/ace/AceEditorModes.js","../src/components/OutputDialog.vue"],"sourcesContent":["/*\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-markdown'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n methods: {\n buildLanguageMode(HighlightRules, FoldMode) {\n let oop = ace.require('ace/lib/oop')\n let apis = Object.getOwnPropertyNames(OpenC3Api.prototype)\n .filter((a) => a !== 'constructor')\n .filter((a) => a !== 'exec')\n // Add the Public apis in api_shared but not in OpenC3Api\n .concat([\n 'check',\n 'check_raw',\n 'check_formatted',\n 'check_with_units',\n 'check_exception',\n 'check_tolerance',\n 'check_expression',\n 'wait',\n 'wait_tolerance',\n 'wait_expression',\n 'wait_check',\n 'wait_check_tolerance',\n 'wait_check_expression',\n 'wait_packet',\n 'wait_check_packet',\n 'disable_instrumentation',\n 'set_line_delay',\n 'get_line_delay',\n 'set_max_output',\n 'get_max_output',\n ])\n let regex = new RegExp(`(\\\\b${apis.join('\\\\b|\\\\b')}\\\\b)`)\n let OpenC3HighlightRules = function () {\n HighlightRules.call(this)\n // add openc3 rules to the rules\n for (let rule in this.$rules) {\n this.$rules[rule].unshift({\n regex: regex,\n token: 'support.function',\n })\n }\n }\n oop.inherits(OpenC3HighlightRules, HighlightRules)\n\n let MatchingBraceOutdent = ace.require(\n 'ace/mode/matching_brace_outdent',\n ).MatchingBraceOutdent\n let CstyleBehaviour = ace.require(\n 'ace/mode/behaviour/cstyle',\n ).CstyleBehaviour\n let Mode = function () {\n this.HighlightRules = OpenC3HighlightRules\n this.$outdent = new MatchingBraceOutdent()\n this.$behaviour = new CstyleBehaviour()\n this.foldingRules = new FoldMode()\n this.indentKeywords = this.foldingRules.indentKeywords\n }\n return [oop, Mode]\n },\n buildRubyMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/ruby_highlight_rules').RubyHighlightRules,\n ace.require('ace/mode/folding/ruby').FoldMode,\n )\n let RubyMode = ace.require('ace/mode/ruby').Mode\n oop.inherits(Mode, RubyMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildPythonMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/python_highlight_rules').PythonHighlightRules,\n ace.require('ace/mode/folding/pythonic').FoldMode,\n )\n let PythonMode = ace.require('ace/mode/python').Mode\n oop.inherits(Mode, PythonMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildJsonMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/json_highlight_rules').JsonHighlightRules,\n ace.require('ace/mode/folding/ruby').FoldMode,\n )\n let JsonMode = ace.require('ace/mode/json').Mode\n oop.inherits(Mode, JsonMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildMarkdownMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/markdown_highlight_rules').MarkdownHighlightRules,\n ace.require('ace/mode/folding/markdown').FoldMode,\n )\n let MarkdownMode = ace.require('ace/mode/markdown').Mode\n oop.inherits(Mode, MarkdownMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n },\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"85vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"title\" />\n <v-spacer />\n <div class=\"mx-2\">\n <v-btn\n icon=\"mdi-download\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"downloadIcon\"\n @click=\"download\"\n />\n </div>\n </v-toolbar>\n <v-card-text>\n <pre ref=\"editor\" class=\"editor\"></pre>\n </v-card-text>\n <v-card-actions class=\"pr-6 pb-4 pt-0\">\n <v-spacer />\n <v-btn variant=\"flat\" @click=\"show = !show\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { AceEditorModes } from './ace'\n\nexport default {\n mixins: [AceEditorModes],\n props: {\n content: {\n type: String,\n required: true,\n },\n type: {\n type: String,\n default: null,\n },\n name: {\n type: String,\n default: null,\n },\n modelValue: Boolean,\n filename: {\n type: String,\n default: null,\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n editor: null,\n mode: null,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n title: function () {\n return `${this.type}: ${this.name}`\n },\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n let languageMode = null\n const fileExtension = this.filename ? this.filename.split('.').pop() : 'txt'\n switch (fileExtension) {\n case 'json':\n const JsonMode = this.buildJsonMode()\n languageMode = new JsonMode()\n this.editor.setOptions({\n useWorker: false,\n })\n break\n case 'py':\n case 'pyi':\n const PythonMode = this.buildPythonMode()\n languageMode = new PythonMode()\n break\n case 'md':\n const MarkdownMode = this.buildMarkdownMode()\n languageMode = new MarkdownMode()\n break\n default:\n // Most of the COSMOS text files are best display in Ruby\n // This includes Rakefiles, Gemfiles, etc.\n const RubyMode = this.buildRubyMode()\n languageMode = new RubyMode()\n break\n }\n this.editor.session.setMode(languageMode)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.content)\n this.editor.clearSelection()\n this.editor.focus()\n this.editor.setReadOnly(true)\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n }\n },\n methods: {\n close: function () {\n this.show = !this.show\n },\n download: function () {\n const blob = new Blob([this.editor.getValue()], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n let filename = `${this.type.toLowerCase()}_${this.name.toLowerCase()}.json`\n if (this.filename) {\n filename = this.filename\n }\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', filename)\n link.click()\n },\n },\n}\n</script>\n\n<style scoped>\n.editor {\n height: 75vh;\n position: relative;\n font-size: 16px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n"],"names":["AceEditorModes","HighlightRules","FoldMode","oop","ace.require","apis","OpenC3Api","a","regex","OpenC3HighlightRules","rule","MatchingBraceOutdent","CstyleBehaviour","Mode","RubyMode","PythonMode","JsonMode","MarkdownMode","_sfc_main","value","languageMode","blob","filename","link","_hoisted_2","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_btn","_component_v_card_text","_hoisted_3","_component_v_card_actions","_cache"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-CP8T5W6m.cjs"),e=require("vue"),y=require("./CustomIcon-eie3rPKh.cjs");require("single-spa");const N=require("./SimpleTextDialog-CJ8pLBGz.cjs"),P=require("./tools/admin.cjs"),C=require("./format-B22VpiOS.cjs"),D={components:{DownloadDialog:P.DownloadDialog,SimpleTextDialog:N.SimpleTextDialog},data(){return{showDownloadDialog:!1,showProcessOutput:!1,processOutput:"",files:[],loadingPackage:!1,progress:0,gems:[],python:[],processes:{}}},mounted(){this.update(),this.updateProcesses()},methods:{showOutput:function(n){this.processOutput=n.output,this.showProcessOutput=!0},update(){d.fi.get("/openc3-api/packages").then(n=>{this.gems=n.data.ruby,this.python=n.data.python})},updateProcesses:function(){d.fi.get("/openc3-api/process_status/package_?substr=true").then(n=>{this.processes=n.data,Object.keys(this.processes).length>0&&setTimeout(()=>{this.updateProcesses(),this.update()},2500)})},formatDate(n){return C.format(C.toDate(parseInt(n)/1e6),"yyyy-MM-dd HH:mm:ss.SSS")},selectFile(){this.progress=0,this.$refs.fileInput.click()},fileChange(n){const t=n.target.files;if(t.length>0){this.loadingPackage=!0;let g=this;const h=[...t].map(l=>{const a=new FormData;return a.append("package",l,l.name),d.fi.post("/openc3-api/packages",{data:a,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(r){let s=Math.round(r.loaded*100/r.total);g.progress=s}})});Promise.all(h).then(l=>{this.$notify.normal({body:`Uploaded ${l.length} package${l.length>1?"s":""}`}),this.loadingPackage=!1,this.files=[],setTimeout(()=>{this.updateProcesses()},2500)}).catch(l=>{this.loadingPackage=!1})}},deletePackage(n){this.$dialog.confirm(`Are you sure you want to remove: ${n}`,{okText:"Delete",cancelText:"Cancel"}).then(t=>d.fi.delete(`/openc3-api/packages/${n}`)).then(t=>{this.$notify.normal({body:`Removed package ${n}`}),setTimeout(()=>{this.updateProcesses()},2500)}).catch(t=>{this.$notify.serious({body:`Failed to remove package ${n}`})})}}},b=["textContent"],T=["textContent"];function B(n,t,g,h,l,a){const r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-col"),x=e.resolveComponent("rux-progress"),c=e.resolveComponent("v-row"),u=e.resolveComponent("v-list-item-title"),v=e.resolveComponent("v-list-item-subtitle"),k=e.resolveComponent("v-tooltip"),p=e.resolveComponent("v-list-item"),m=e.resolveComponent("v-divider"),_=e.resolveComponent("v-list"),w=e.resolveComponent("download-dialog"),V=e.resolveComponent("simple-text-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(c,{"no-gutters":"",align:"center",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(s,{class:"pa-2 mt-2"},{default:e.withCtx(()=>[e.createVNode(r,{onClick:a.selectFile},{default:e.withCtx(()=>[...t[3]||(t[3]=[e.createTextVNode("Install Package",-1)])]),_:1},8,["onClick"]),e.createElementVNode("input",{ref:"fileInput",style:{display:"none"},type:"file",onChange:t[0]||(t[0]=(...o)=>a.fileChange&&a.fileChange(...o))},null,544)]),_:1}),e.createVNode(s,{class:"ml-4 mr-2",cols:"4"},{default:e.withCtx(()=>[e.createVNode(x,{value:l.progress},null,8,["value"])]),_:1})]),_:1}),Object.keys(l.processes).length>0?(e.openBlock(),e.createBlock(_,{key:0,class:"list","data-test":"process-list"},{default:e.withCtx(()=>[e.createVNode(c,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>[...t[4]||(t[4]=[e.createTextVNode("Process List",-1)])]),_:1}),e.createVNode(s,{align:"right"},{default:e.withCtx(()=>[...t[5]||(t[5]=[e.createElementVNode("div",null,"Showing last 10 min of activity",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.processes,o=>(e.openBlock(),e.createElementBlock("div",{key:o.name},[e.createVNode(p,null,e.createSlots({default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass(o.state.toLowerCase()),textContent:e.toDisplayString(`Processing ${o.process_type}: ${o.detail} - ${o.state}`)},null,10,b)]),_:2},1024),e.createVNode(v,null,{default:e.withCtx(()=>[e.createElementVNode("span",{textContent:e.toDisplayString(" Updated At: "+a.formatDate(o.updated_at))},null,8,T)]),_:2},1024)]),_:2},[o.state!=="Running"?{name:"append",fn:e.withCtx(()=>[e.createVNode(k,{"open-delay":600,location:"top"},{activator:e.withCtx(({props:i})=>[e.createVNode(r,e.mergeProps({ref_for:!0},i,{icon:"mdi-eye",variant:"text","aria-label":"Show Output",onClick:f=>a.showOutput(o)}),null,16,["onClick"])]),default:e.withCtx(()=>[t[6]||(t[6]=e.createElementVNode("span",null,"Show Output",-1))]),_:2},1024)]),key:"0"}:void 0]),1024),e.createVNode(m)]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(_,{class:"list","data-test":"packageList"},{default:e.withCtx(()=>[e.createVNode(c,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Ruby Gems",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.gems,(o,i)=>(e.openBlock(),e.createElementBlock("div",{key:i},[e.createVNode(p,null,{append:e.withCtx(()=>[e.createVNode(r,{icon:"mdi-delete",variant:"text","aria-label":"Delete Ruby Gem",onClick:f=>a.deletePackage(o)},null,8,["onClick"])]),default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o),1)]),_:2},1024)]),_:2},1024),e.createVNode(m)]))),128)),e.createVNode(c,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("Python Packages",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.python,(o,i)=>(e.openBlock(),e.createElementBlock("div",{key:i},[e.createVNode(p,null,{append:e.withCtx(()=>[e.createVNode(r,{icon:"mdi-delete",variant:"text","aria-label":"Delete Python Package",onClick:f=>a.deletePackage(o)},null,8,["onClick"])]),default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o),1)]),_:2},1024)]),_:2},1024),e.createVNode(m)]))),128))]),_:1}),e.createVNode(w,{modelValue:l.showDownloadDialog,"onUpdate:modelValue":t[1]||(t[1]=o=>l.showDownloadDialog=o)},null,8,["modelValue"]),e.createVNode(V,{modelValue:l.showProcessOutput,"onUpdate:modelValue":t[2]||(t[2]=o=>l.showProcessOutput=o),title:"Process Output",text:l.processOutput},null,8,["modelValue","text"])])}const S=y._export_sfc(D,[["render",B],["__scopeId","data-v-e97741ba"]]);exports.default=S;
2
- //# sourceMappingURL=PackagesTab-PEPT4CQu.cjs.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_dda5adfc_lang-Bjn8x8eE.cjs"),e=require("vue"),y=require("./CustomIcon-CEc927h0.cjs");require("single-spa");const N=require("./SimpleTextDialog-Bdw3jul4.cjs"),P=require("./tools/admin.cjs"),C=require("./format-B22VpiOS.cjs"),D={components:{DownloadDialog:P.DownloadDialog,SimpleTextDialog:N.SimpleTextDialog},data(){return{showDownloadDialog:!1,showProcessOutput:!1,processOutput:"",files:[],loadingPackage:!1,progress:0,gems:[],python:[],processes:{}}},mounted(){this.update(),this.updateProcesses()},methods:{showOutput:function(n){this.processOutput=n.output,this.showProcessOutput=!0},update(){d.fi.get("/openc3-api/packages").then(n=>{this.gems=n.data.ruby,this.python=n.data.python})},updateProcesses:function(){d.fi.get("/openc3-api/process_status/package_?substr=true").then(n=>{this.processes=n.data,Object.keys(this.processes).length>0&&setTimeout(()=>{this.updateProcesses(),this.update()},2500)})},formatDate(n){return C.format(C.toDate(parseInt(n)/1e6),"yyyy-MM-dd HH:mm:ss.SSS")},selectFile(){this.progress=0,this.$refs.fileInput.click()},fileChange(n){const t=n.target.files;if(t.length>0){this.loadingPackage=!0;let g=this;const h=[...t].map(l=>{const a=new FormData;return a.append("package",l,l.name),d.fi.post("/openc3-api/packages",{data:a,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(r){let s=Math.round(r.loaded*100/r.total);g.progress=s}})});Promise.all(h).then(l=>{this.$notify.normal({body:`Uploaded ${l.length} package${l.length>1?"s":""}`}),this.loadingPackage=!1,this.files=[],setTimeout(()=>{this.updateProcesses()},2500)}).catch(l=>{this.loadingPackage=!1})}},deletePackage(n){this.$dialog.confirm(`Are you sure you want to remove: ${n}`,{okText:"Delete",cancelText:"Cancel"}).then(t=>d.fi.delete(`/openc3-api/packages/${n}`)).then(t=>{this.$notify.normal({body:`Removed package ${n}`}),setTimeout(()=>{this.updateProcesses()},2500)}).catch(t=>{this.$notify.serious({body:`Failed to remove package ${n}`})})}}},b=["textContent"],T=["textContent"];function B(n,t,g,h,l,a){const r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-col"),x=e.resolveComponent("rux-progress"),c=e.resolveComponent("v-row"),u=e.resolveComponent("v-list-item-title"),v=e.resolveComponent("v-list-item-subtitle"),k=e.resolveComponent("v-tooltip"),p=e.resolveComponent("v-list-item"),m=e.resolveComponent("v-divider"),_=e.resolveComponent("v-list"),w=e.resolveComponent("download-dialog"),V=e.resolveComponent("simple-text-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(c,{"no-gutters":"",align:"center",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(s,{class:"pa-2 mt-2"},{default:e.withCtx(()=>[e.createVNode(r,{onClick:a.selectFile},{default:e.withCtx(()=>[...t[3]||(t[3]=[e.createTextVNode("Install Package",-1)])]),_:1},8,["onClick"]),e.createElementVNode("input",{ref:"fileInput",style:{display:"none"},type:"file",onChange:t[0]||(t[0]=(...o)=>a.fileChange&&a.fileChange(...o))},null,544)]),_:1}),e.createVNode(s,{class:"ml-4 mr-2",cols:"4"},{default:e.withCtx(()=>[e.createVNode(x,{value:l.progress},null,8,["value"])]),_:1})]),_:1}),Object.keys(l.processes).length>0?(e.openBlock(),e.createBlock(_,{key:0,class:"list","data-test":"process-list"},{default:e.withCtx(()=>[e.createVNode(c,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>[...t[4]||(t[4]=[e.createTextVNode("Process List",-1)])]),_:1}),e.createVNode(s,{align:"right"},{default:e.withCtx(()=>[...t[5]||(t[5]=[e.createElementVNode("div",null,"Showing last 10 min of activity",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.processes,o=>(e.openBlock(),e.createElementBlock("div",{key:o.name},[e.createVNode(p,null,e.createSlots({default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass(o.state.toLowerCase()),textContent:e.toDisplayString(`Processing ${o.process_type}: ${o.detail} - ${o.state}`)},null,10,b)]),_:2},1024),e.createVNode(v,null,{default:e.withCtx(()=>[e.createElementVNode("span",{textContent:e.toDisplayString(" Updated At: "+a.formatDate(o.updated_at))},null,8,T)]),_:2},1024)]),_:2},[o.state!=="Running"?{name:"append",fn:e.withCtx(()=>[e.createVNode(k,{"open-delay":600,location:"top"},{activator:e.withCtx(({props:i})=>[e.createVNode(r,e.mergeProps({ref_for:!0},i,{icon:"mdi-eye",variant:"text","aria-label":"Show Output",onClick:f=>a.showOutput(o)}),null,16,["onClick"])]),default:e.withCtx(()=>[t[6]||(t[6]=e.createElementVNode("span",null,"Show Output",-1))]),_:2},1024)]),key:"0"}:void 0]),1024),e.createVNode(m)]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(_,{class:"list","data-test":"packageList"},{default:e.withCtx(()=>[e.createVNode(c,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Ruby Gems",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.gems,(o,i)=>(e.openBlock(),e.createElementBlock("div",{key:i},[e.createVNode(p,null,{append:e.withCtx(()=>[e.createVNode(r,{icon:"mdi-delete",variant:"text","aria-label":"Delete Ruby Gem",onClick:f=>a.deletePackage(o)},null,8,["onClick"])]),default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o),1)]),_:2},1024)]),_:2},1024),e.createVNode(m)]))),128)),e.createVNode(c,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("Python Packages",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.python,(o,i)=>(e.openBlock(),e.createElementBlock("div",{key:i},[e.createVNode(p,null,{append:e.withCtx(()=>[e.createVNode(r,{icon:"mdi-delete",variant:"text","aria-label":"Delete Python Package",onClick:f=>a.deletePackage(o)},null,8,["onClick"])]),default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o),1)]),_:2},1024)]),_:2},1024),e.createVNode(m)]))),128))]),_:1}),e.createVNode(w,{modelValue:l.showDownloadDialog,"onUpdate:modelValue":t[1]||(t[1]=o=>l.showDownloadDialog=o)},null,8,["modelValue"]),e.createVNode(V,{modelValue:l.showProcessOutput,"onUpdate:modelValue":t[2]||(t[2]=o=>l.showProcessOutput=o),title:"Process Output",text:l.processOutput},null,8,["modelValue","text"])])}const S=y._export_sfc(D,[["render",B],["__scopeId","data-v-e97741ba"]]);exports.default=S;
2
+ //# sourceMappingURL=PackagesTab-CHwfaqdP.cjs.map