@openc3/vue-common 6.9.1 → 6.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ArrayWidget-DLfNWDzN.js → ArrayWidget-DQRQ7dPa.js} +5 -5
- package/dist/{ArrayWidget-DLfNWDzN.js.map → ArrayWidget-DQRQ7dPa.js.map} +1 -1
- package/dist/{ArrayWidget-DJkuPBFS.cjs → ArrayWidget-DvCX-1Om.cjs} +2 -2
- package/dist/{ArrayWidget-DJkuPBFS.cjs.map → ArrayWidget-DvCX-1Om.cjs.map} +1 -1
- package/dist/{ArrayplotWidget-CoRsUxHG.js → ArrayplotWidget-BeSfz3MR.js} +4 -4
- package/dist/{ArrayplotWidget-CoRsUxHG.js.map → ArrayplotWidget-BeSfz3MR.js.map} +1 -1
- package/dist/{ArrayplotWidget-COGxmBEP.cjs → ArrayplotWidget-DA4SCxEg.cjs} +2 -2
- package/dist/{ArrayplotWidget-COGxmBEP.cjs.map → ArrayplotWidget-DA4SCxEg.cjs.map} +1 -1
- package/dist/{BarColumn-DHP-zQ4R.js → BarColumn-BdIaQfOz.js} +3 -3
- package/dist/{BarColumn-DHP-zQ4R.js.map → BarColumn-BdIaQfOz.js.map} +1 -1
- package/dist/{BarColumn-BaPaYtki.cjs → BarColumn-C5VfAEOx.cjs} +2 -2
- package/dist/{BarColumn-BaPaYtki.cjs.map → BarColumn-C5VfAEOx.cjs.map} +1 -1
- package/dist/{BlockWidget-DLncsLLX.cjs → BlockWidget-C33RBqR2.cjs} +2 -2
- package/dist/{BlockWidget-DLncsLLX.cjs.map → BlockWidget-C33RBqR2.cjs.map} +1 -1
- package/dist/{BlockWidget-BmHSFvOq.js → BlockWidget-DSFKrUxl.js} +5 -5
- package/dist/{BlockWidget-BmHSFvOq.js.map → BlockWidget-DSFKrUxl.js.map} +1 -1
- package/dist/{ButtonWidget-C3ZWRjZZ.js → ButtonWidget-CFbjdxSr.js} +7 -7
- package/dist/{ButtonWidget-C3ZWRjZZ.js.map → ButtonWidget-CFbjdxSr.js.map} +1 -1
- package/dist/{ButtonWidget-BLePbTf_.cjs → ButtonWidget-DV33-G5z.cjs} +3 -3
- package/dist/{ButtonWidget-BLePbTf_.cjs.map → ButtonWidget-DV33-G5z.cjs.map} +1 -1
- package/dist/{CanvasWidget-CL-XzPF4.js → CanvasWidget-BloYxuKE.js} +3 -3
- package/dist/{CanvasWidget-CL-XzPF4.js.map → CanvasWidget-BloYxuKE.js.map} +1 -1
- package/dist/{CanvasWidget-C8Sy9t9G.cjs → CanvasWidget-CO5Ql5FM.cjs} +2 -2
- package/dist/{CanvasWidget-C8Sy9t9G.cjs.map → CanvasWidget-CO5Ql5FM.cjs.map} +1 -1
- package/dist/{CanvasdotWidget-D8Y9DgVE.js → CanvasdotWidget-CZxUOPRd.js} +3 -3
- package/dist/{CanvasdotWidget-D8Y9DgVE.js.map → CanvasdotWidget-CZxUOPRd.js.map} +1 -1
- package/dist/{CanvasdotWidget-6MPKD5iZ.cjs → CanvasdotWidget-v73CXaR2.cjs} +2 -2
- package/dist/{CanvasdotWidget-6MPKD5iZ.cjs.map → CanvasdotWidget-v73CXaR2.cjs.map} +1 -1
- package/dist/{CanvasimageWidget-DYUaf3zy.cjs → CanvasimageWidget-CCwRuLep.cjs} +2 -2
- package/dist/{CanvasimageWidget-DYUaf3zy.cjs.map → CanvasimageWidget-CCwRuLep.cjs.map} +1 -1
- package/dist/{CanvasimageWidget-DHSGK_tD.js → CanvasimageWidget-ULQq3nqZ.js} +4 -4
- package/dist/{CanvasimageWidget-DHSGK_tD.js.map → CanvasimageWidget-ULQq3nqZ.js.map} +1 -1
- package/dist/{CanvasimagevalueWidget-Bu1ECOWl.cjs → CanvasimagevalueWidget-NZYl_3mA.cjs} +2 -2
- package/dist/{CanvasimagevalueWidget-Bu1ECOWl.cjs.map → CanvasimagevalueWidget-NZYl_3mA.cjs.map} +1 -1
- package/dist/{CanvasimagevalueWidget-Btt_fQfC.js → CanvasimagevalueWidget-jFCVXYhi.js} +4 -4
- package/dist/{CanvasimagevalueWidget-Btt_fQfC.js.map → CanvasimagevalueWidget-jFCVXYhi.js.map} +1 -1
- package/dist/{CanvaslabelWidget-BF_8RTjv.js → CanvaslabelWidget-DQhBI1vZ.js} +3 -3
- package/dist/{CanvaslabelWidget-BF_8RTjv.js.map → CanvaslabelWidget-DQhBI1vZ.js.map} +1 -1
- package/dist/{CanvaslabelWidget-Dik-ld55.cjs → CanvaslabelWidget-XfEANCQ-.cjs} +2 -2
- package/dist/{CanvaslabelWidget-Dik-ld55.cjs.map → CanvaslabelWidget-XfEANCQ-.cjs.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-scbwaujI.js → CanvaslabelvalueWidget-C4REgztL.js} +3 -3
- package/dist/{CanvaslabelvalueWidget-scbwaujI.js.map → CanvaslabelvalueWidget-C4REgztL.js.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-BBlKBoZO.cjs → CanvaslabelvalueWidget-CJCZdHId.cjs} +2 -2
- package/dist/{CanvaslabelvalueWidget-BBlKBoZO.cjs.map → CanvaslabelvalueWidget-CJCZdHId.cjs.map} +1 -1
- package/dist/{CanvaslineWidget-DN0ojc37.cjs → CanvaslineWidget-DycxDsyJ.cjs} +2 -2
- package/dist/{CanvaslineWidget-DN0ojc37.cjs.map → CanvaslineWidget-DycxDsyJ.cjs.map} +1 -1
- package/dist/{CanvaslineWidget-gRvm_-TT.js → CanvaslineWidget-S4PCEvZM.js} +3 -3
- package/dist/{CanvaslineWidget-gRvm_-TT.js.map → CanvaslineWidget-S4PCEvZM.js.map} +1 -1
- package/dist/{CanvaslinevalueWidget-CljziRek.js → CanvaslinevalueWidget-597khOSA.js} +3 -3
- package/dist/{CanvaslinevalueWidget-CljziRek.js.map → CanvaslinevalueWidget-597khOSA.js.map} +1 -1
- package/dist/{CanvaslinevalueWidget-Cz1XYp0r.cjs → CanvaslinevalueWidget-bChpy38C.cjs} +2 -2
- package/dist/{CanvaslinevalueWidget-Cz1XYp0r.cjs.map → CanvaslinevalueWidget-bChpy38C.cjs.map} +1 -1
- package/dist/{CheckbuttonWidget-BOabI_jE.js → CheckbuttonWidget-BcblKat3.js} +3 -3
- package/dist/{CheckbuttonWidget-BOabI_jE.js.map → CheckbuttonWidget-BcblKat3.js.map} +1 -1
- package/dist/{CheckbuttonWidget-B5jOzhZ4.cjs → CheckbuttonWidget-BwDttJTf.cjs} +2 -2
- package/dist/{CheckbuttonWidget-B5jOzhZ4.cjs.map → CheckbuttonWidget-BwDttJTf.cjs.map} +1 -1
- package/dist/{ClassificationBanners-CbcQDr3v.cjs → ClassificationBanners-CEzDn5cM.cjs} +2 -2
- package/dist/{ClassificationBanners-CbcQDr3v.cjs.map → ClassificationBanners-CEzDn5cM.cjs.map} +1 -1
- package/dist/{ClassificationBanners-BGDnMx4r.js → ClassificationBanners-CS4GUeYv.js} +2 -2
- package/dist/{ClassificationBanners-BGDnMx4r.js.map → ClassificationBanners-CS4GUeYv.js.map} +1 -1
- package/dist/{ComboboxWidget-BLXNYFiY.js → ComboboxWidget-BMcHS4g5.js} +3 -3
- package/dist/{ComboboxWidget-BLXNYFiY.js.map → ComboboxWidget-BMcHS4g5.js.map} +1 -1
- package/dist/{ComboboxWidget-_lxTm8Wb.cjs → ComboboxWidget-DkBtLQ41.cjs} +2 -2
- package/dist/{ComboboxWidget-_lxTm8Wb.cjs.map → ComboboxWidget-DkBtLQ41.cjs.map} +1 -1
- package/dist/{CriticalCmdDialog-niBmkudw.cjs → CriticalCmdDialog-C4DRtDnA.cjs} +2 -2
- package/dist/CriticalCmdDialog-C4DRtDnA.cjs.map +1 -0
- package/dist/{CriticalCmdDialog-CnNlsHRX.js → CriticalCmdDialog-CVLyYtng.js} +17 -17
- package/dist/CriticalCmdDialog-CVLyYtng.js.map +1 -0
- package/dist/{CustomIcon-h5X7369N.js → CustomIcon-DTfsnDJn.js} +6 -6
- package/dist/{CustomIcon-h5X7369N.js.map → CustomIcon-DTfsnDJn.js.map} +1 -1
- package/dist/CustomIcon-eie3rPKh.cjs +2 -0
- package/dist/{CustomIcon-Bop2mEnu.cjs.map → CustomIcon-eie3rPKh.cjs.map} +1 -1
- package/dist/{DateWidget-BTqLCtLS.js → DateWidget-BpnMzSBn.js} +3 -3
- package/dist/{DateWidget-BTqLCtLS.js.map → DateWidget-BpnMzSBn.js.map} +1 -1
- package/dist/{DateWidget-BvabEAhO.cjs → DateWidget-CRFiLyxD.cjs} +2 -2
- package/dist/{DateWidget-BvabEAhO.cjs.map → DateWidget-CRFiLyxD.cjs.map} +1 -1
- package/dist/DetailsDialog-Brv3nVs3.cjs +2 -0
- package/dist/DetailsDialog-Brv3nVs3.cjs.map +1 -0
- package/dist/{DetailsDialog-BNCS3QAe.js → DetailsDialog-q9piPmHq.js} +77 -74
- package/dist/DetailsDialog-q9piPmHq.js.map +1 -0
- package/dist/{DynamicWidget-BWEVCUfd.cjs → DynamicWidget-BNfJRfR5.cjs} +2 -2
- package/dist/{DynamicWidget-BWEVCUfd.cjs.map → DynamicWidget-BNfJRfR5.cjs.map} +1 -1
- package/dist/{DynamicWidget-CfMtj7H8.js → DynamicWidget-DHL7pbgW.js} +2 -2
- package/dist/{DynamicWidget-CfMtj7H8.js.map → DynamicWidget-DHL7pbgW.js.map} +1 -1
- package/dist/{EventListDialog-C2pwmD0d.js → EventListDialog-BlcxcO8a.js} +129 -123
- package/dist/EventListDialog-BlcxcO8a.js.map +1 -0
- package/dist/EventListDialog-DXIYmkWb.cjs +2 -0
- package/dist/EventListDialog-DXIYmkWb.cjs.map +1 -0
- package/dist/{FormatvalueWidget-ulLzg1E-.cjs → FormatvalueWidget-AXH-VW-A.cjs} +2 -2
- package/dist/{FormatvalueWidget-ulLzg1E-.cjs.map → FormatvalueWidget-AXH-VW-A.cjs.map} +1 -1
- package/dist/{FormatvalueWidget-CLYx8qbg.js → FormatvalueWidget-Cm-HmAmw.js} +4 -4
- package/dist/{FormatvalueWidget-CLYx8qbg.js.map → FormatvalueWidget-Cm-HmAmw.js.map} +1 -1
- package/dist/{Graph-BliBYJxD.js → Graph-BEodMaxQ.js} +102 -95
- package/dist/Graph-BEodMaxQ.js.map +1 -0
- package/dist/Graph-wDFY6Kd7.cjs +2 -0
- package/dist/Graph-wDFY6Kd7.cjs.map +1 -0
- package/dist/{GraphWidget-g-0vO4_S.cjs → GraphWidget-B878ArE1.cjs} +2 -2
- package/dist/{GraphWidget-g-0vO4_S.cjs.map → GraphWidget-B878ArE1.cjs.map} +1 -1
- package/dist/{GraphWidget-Cb6Ozf54.js → GraphWidget-CAADBFV-.js} +2 -2
- package/dist/{GraphWidget-Cb6Ozf54.js.map → GraphWidget-CAADBFV-.js.map} +1 -1
- package/dist/{HorizontalWidget-BiEZZpZQ.cjs → HorizontalWidget-D2lXnQqQ.cjs} +2 -2
- package/dist/{HorizontalWidget-BiEZZpZQ.cjs.map → HorizontalWidget-D2lXnQqQ.cjs.map} +1 -1
- package/dist/{HorizontalWidget-AY2M01qP.js → HorizontalWidget-NcXIXxh7.js} +3 -3
- package/dist/{HorizontalWidget-AY2M01qP.js.map → HorizontalWidget-NcXIXxh7.js.map} +1 -1
- package/dist/{HorizontalboxWidget-CWq4ej6k.cjs → HorizontalboxWidget-BGzl7-Rt.cjs} +2 -2
- package/dist/{HorizontalboxWidget-CWq4ej6k.cjs.map → HorizontalboxWidget-BGzl7-Rt.cjs.map} +1 -1
- package/dist/{HorizontalboxWidget-2MEKvq_C.js → HorizontalboxWidget-CW9XX4uH.js} +6 -6
- package/dist/{HorizontalboxWidget-2MEKvq_C.js.map → HorizontalboxWidget-CW9XX4uH.js.map} +1 -1
- package/dist/{HorizontallineWidget-DgpOPA7q.js → HorizontallineWidget-Cu2dDt7k.js} +3 -3
- package/dist/{HorizontallineWidget-DgpOPA7q.js.map → HorizontallineWidget-Cu2dDt7k.js.map} +1 -1
- package/dist/{HorizontallineWidget-Dm5G1l4A.cjs → HorizontallineWidget-x2u6MQNz.cjs} +2 -2
- package/dist/{HorizontallineWidget-Dm5G1l4A.cjs.map → HorizontallineWidget-x2u6MQNz.cjs.map} +1 -1
- package/dist/{IframeWidget-DDw5t7eV.cjs → IframeWidget-B5simCWn.cjs} +2 -2
- package/dist/{IframeWidget-DDw5t7eV.cjs.map → IframeWidget-B5simCWn.cjs.map} +1 -1
- package/dist/{IframeWidget-UKKUl7k5.js → IframeWidget-BBU3MkSq.js} +3 -3
- package/dist/{IframeWidget-UKKUl7k5.js.map → IframeWidget-BBU3MkSq.js.map} +1 -1
- package/dist/{ImageLoader-9TCd0KxL.cjs → ImageLoader-Dj3MZVq9.cjs} +2 -2
- package/dist/{ImageLoader-9TCd0KxL.cjs.map → ImageLoader-Dj3MZVq9.cjs.map} +1 -1
- package/dist/{ImageLoader-C-CIL4YD.js → ImageLoader-XAGgjKkq.js} +2 -2
- package/dist/{ImageLoader-C-CIL4YD.js.map → ImageLoader-XAGgjKkq.js.map} +1 -1
- package/dist/{ImageviewerWidget-DpXzLOpF.cjs → ImageviewerWidget-BtuiORhN.cjs} +2 -2
- package/dist/{ImageviewerWidget-DpXzLOpF.cjs.map → ImageviewerWidget-BtuiORhN.cjs.map} +1 -1
- package/dist/{ImageviewerWidget-DhuQH5Io.js → ImageviewerWidget-UByjeO63.js} +3 -3
- package/dist/{ImageviewerWidget-DhuQH5Io.js.map → ImageviewerWidget-UByjeO63.js.map} +1 -1
- package/dist/{InterfacesTab-Dq3oAKqz.js → InterfacesTab-6hli9fcg.js} +7 -7
- package/dist/{InterfacesTab-Dq3oAKqz.js.map → InterfacesTab-6hli9fcg.js.map} +1 -1
- package/dist/{InterfacesTab-CiVfsUia.cjs → InterfacesTab-B1CwBWFu.cjs} +2 -2
- package/dist/{InterfacesTab-CiVfsUia.cjs.map → InterfacesTab-B1CwBWFu.cjs.map} +1 -1
- package/dist/{LabelWidget-SO9zqcNN.js → LabelWidget-BsOpolUL.js} +3 -3
- package/dist/{LabelWidget-SO9zqcNN.js.map → LabelWidget-BsOpolUL.js.map} +1 -1
- package/dist/{LabelWidget-D-m2gFIZ.cjs → LabelWidget-X4cBbl5N.cjs} +2 -2
- package/dist/{LabelWidget-D-m2gFIZ.cjs.map → LabelWidget-X4cBbl5N.cjs.map} +1 -1
- package/dist/{LabelledWidget-DWoM5AJ5.js → LabelledWidget-DVOGpgZ-.js} +5 -5
- package/dist/{LabelledWidget-DWoM5AJ5.js.map → LabelledWidget-DVOGpgZ-.js.map} +1 -1
- package/dist/{LabelledWidget-BFfsD2wz.cjs → LabelledWidget-DaHqSURc.cjs} +2 -2
- package/dist/{LabelledWidget-BFfsD2wz.cjs.map → LabelledWidget-DaHqSURc.cjs.map} +1 -1
- package/dist/{LabelprogressbarWidget-D3vnkvQZ.js → LabelprogressbarWidget-BeE9fDs6.js} +5 -5
- package/dist/{LabelprogressbarWidget-D3vnkvQZ.js.map → LabelprogressbarWidget-BeE9fDs6.js.map} +1 -1
- package/dist/{LabelprogressbarWidget-B8x5YimU.cjs → LabelprogressbarWidget-Cz3nXacL.cjs} +2 -2
- package/dist/{LabelprogressbarWidget-B8x5YimU.cjs.map → LabelprogressbarWidget-Cz3nXacL.cjs.map} +1 -1
- package/dist/{LabelsparklineWidget-DO0T-Jot.js → LabelsparklineWidget-Bj7trKML.js} +5 -5
- package/dist/{LabelsparklineWidget-DO0T-Jot.js.map → LabelsparklineWidget-Bj7trKML.js.map} +1 -1
- package/dist/{LabelsparklineWidget-DyPaUfc9.cjs → LabelsparklineWidget-Bns8kwBj.cjs} +2 -2
- package/dist/{LabelsparklineWidget-DyPaUfc9.cjs.map → LabelsparklineWidget-Bns8kwBj.cjs.map} +1 -1
- package/dist/{LabelvalueWidget-cTPG6Xqi.cjs → LabelvalueWidget-D-sncwem.cjs} +2 -2
- package/dist/{LabelvalueWidget-cTPG6Xqi.cjs.map → LabelvalueWidget-D-sncwem.cjs.map} +1 -1
- package/dist/{LabelvalueWidget-B6BbNFnk.js → LabelvalueWidget-Dwqsh5o2.js} +5 -5
- package/dist/{LabelvalueWidget-B6BbNFnk.js.map → LabelvalueWidget-Dwqsh5o2.js.map} +1 -1
- package/dist/{LabelvaluedescWidget-CxfL-H9C.js → LabelvaluedescWidget-Cfu2vuja.js} +10 -10
- package/dist/{LabelvaluedescWidget-CxfL-H9C.js.map → LabelvaluedescWidget-Cfu2vuja.js.map} +1 -1
- package/dist/{LabelvaluedescWidget-C4sIZ0md.cjs → LabelvaluedescWidget-DmqG8dzJ.cjs} +2 -2
- package/dist/{LabelvaluedescWidget-C4sIZ0md.cjs.map → LabelvaluedescWidget-DmqG8dzJ.cjs.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-BT5k9mHv.js → LabelvaluelimitsbarWidget-DYV68AJ_.js} +5 -5
- package/dist/{LabelvaluelimitsbarWidget-BT5k9mHv.js.map → LabelvaluelimitsbarWidget-DYV68AJ_.js.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-CBnU6Afl.cjs → LabelvaluelimitsbarWidget-_l7xjrX9.cjs} +2 -2
- package/dist/{LabelvaluelimitsbarWidget-CBnU6Afl.cjs.map → LabelvaluelimitsbarWidget-_l7xjrX9.cjs.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-DUbmxh4p.js → LabelvaluelimitscolumnWidget-CtaoTixt.js} +6 -6
- package/dist/{LabelvaluelimitscolumnWidget-DUbmxh4p.js.map → LabelvaluelimitscolumnWidget-CtaoTixt.js.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-CwoMfO0P.cjs → LabelvaluelimitscolumnWidget-D0WEVZMc.cjs} +2 -2
- package/dist/{LabelvaluelimitscolumnWidget-CwoMfO0P.cjs.map → LabelvaluelimitscolumnWidget-D0WEVZMc.cjs.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-DexAc2UB.js → LabelvaluerangebarWidget-3EaUB6E6.js} +5 -5
- package/dist/{LabelvaluerangebarWidget-DexAc2UB.js.map → LabelvaluerangebarWidget-3EaUB6E6.js.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-DB4gw6Rd.cjs → LabelvaluerangebarWidget-BZTEfPQh.cjs} +2 -2
- package/dist/{LabelvaluerangebarWidget-DB4gw6Rd.cjs.map → LabelvaluerangebarWidget-BZTEfPQh.cjs.map} +1 -1
- package/dist/{Layout-Dd6dRf3R.js → Layout-DNR3xnku.js} +2 -2
- package/dist/{Layout-Dd6dRf3R.js.map → Layout-DNR3xnku.js.map} +1 -1
- package/dist/Layout-U0MXDxLO.cjs +2 -0
- package/dist/{Layout-DvBekli8.cjs.map → Layout-U0MXDxLO.cjs.map} +1 -1
- package/dist/{LedWidget-D1RwHb_V.js → LedWidget-Gi6GXtrW.js} +5 -5
- package/dist/{LedWidget-D1RwHb_V.js.map → LedWidget-Gi6GXtrW.js.map} +1 -1
- package/dist/{LedWidget-a99ygZOA.cjs → LedWidget-MAyRDM2n.cjs} +2 -2
- package/dist/{LedWidget-a99ygZOA.cjs.map → LedWidget-MAyRDM2n.cjs.map} +1 -1
- package/dist/{LimitsbarWidget-ClOmoV50.js → LimitsbarWidget-BTZQY9XQ.js} +3 -3
- package/dist/{LimitsbarWidget-ClOmoV50.js.map → LimitsbarWidget-BTZQY9XQ.js.map} +1 -1
- package/dist/{LimitsbarWidget-DaHpj-rM.cjs → LimitsbarWidget-ytyfCphX.cjs} +2 -2
- package/dist/{LimitsbarWidget-DaHpj-rM.cjs.map → LimitsbarWidget-ytyfCphX.cjs.map} +1 -1
- package/dist/{LimitscolorWidget-CBUoEYKp.js → LimitscolorWidget-CFnmvlrA.js} +3 -3
- package/dist/{LimitscolorWidget-CBUoEYKp.js.map → LimitscolorWidget-CFnmvlrA.js.map} +1 -1
- package/dist/{LimitscolorWidget-D4nPHQlI.cjs → LimitscolorWidget-CeZYYSQn.cjs} +2 -2
- package/dist/{LimitscolorWidget-D4nPHQlI.cjs.map → LimitscolorWidget-CeZYYSQn.cjs.map} +1 -1
- package/dist/{LimitscolumnWidget-wIx0L9hb.cjs → LimitscolumnWidget-CXzLYznR.cjs} +2 -2
- package/dist/{LimitscolumnWidget-wIx0L9hb.cjs.map → LimitscolumnWidget-CXzLYznR.cjs.map} +1 -1
- package/dist/{LimitscolumnWidget-hsHkmY-_.js → LimitscolumnWidget-DSsz36tT.js} +3 -3
- package/dist/{LimitscolumnWidget-hsHkmY-_.js.map → LimitscolumnWidget-DSsz36tT.js.map} +1 -1
- package/dist/{LinegraphWidget-CXrKtxOo.js → LinegraphWidget-CeBijgDo.js} +5 -5
- package/dist/{LinegraphWidget-CXrKtxOo.js.map → LinegraphWidget-CeBijgDo.js.map} +1 -1
- package/dist/{LinegraphWidget-BRnwhfEQ.cjs → LinegraphWidget-WVSJOuTE.cjs} +2 -2
- package/dist/{LinegraphWidget-BRnwhfEQ.cjs.map → LinegraphWidget-WVSJOuTE.cjs.map} +1 -1
- package/dist/{MatrixbycolumnsWidget-3jldaS14.cjs → MatrixbycolumnsWidget-COWMt_-r.cjs} +2 -2
- package/dist/{MatrixbycolumnsWidget-3jldaS14.cjs.map → MatrixbycolumnsWidget-COWMt_-r.cjs.map} +1 -1
- package/dist/{MatrixbycolumnsWidget-CsogVU9c.js → MatrixbycolumnsWidget-DX9uhjAv.js} +4 -4
- package/dist/{MatrixbycolumnsWidget-CsogVU9c.js.map → MatrixbycolumnsWidget-DX9uhjAv.js.map} +1 -1
- package/dist/{MicroservicesTab-DzEvbxlM.js → MicroservicesTab-BSSCh5Ss.js} +5 -5
- package/dist/{MicroservicesTab-DzEvbxlM.js.map → MicroservicesTab-BSSCh5Ss.js.map} +1 -1
- package/dist/{MicroservicesTab-3pNZZ5I0.cjs → MicroservicesTab-Btw8r_9N.cjs} +2 -2
- package/dist/{MicroservicesTab-3pNZZ5I0.cjs.map → MicroservicesTab-Btw8r_9N.cjs.map} +1 -1
- package/dist/Openc3Screen-DIN4KVsw.cjs +6 -0
- package/dist/Openc3Screen-DIN4KVsw.cjs.map +1 -0
- package/dist/{Openc3Screen-Cqm5Xtd-.js → Openc3Screen-iW_gaikc.js} +266 -253
- package/dist/Openc3Screen-iW_gaikc.js.map +1 -0
- package/dist/{OutputDialog-7M4L50tA.js → OutputDialog-BMzp6wy3.js} +3 -3
- package/dist/{OutputDialog-7M4L50tA.js.map → OutputDialog-BMzp6wy3.js.map} +1 -1
- package/dist/{OutputDialog-CnDQxHTZ.cjs → OutputDialog-CKObLICh.cjs} +2 -2
- package/dist/{OutputDialog-CnDQxHTZ.cjs.map → OutputDialog-CKObLICh.cjs.map} +1 -1
- package/dist/{PackagesTab-N4SD1Pxj.js → PackagesTab-BascLTCK.js} +4 -4
- package/dist/{PackagesTab-N4SD1Pxj.js.map → PackagesTab-BascLTCK.js.map} +1 -1
- package/dist/{PackagesTab-DPPXZvoV.cjs → PackagesTab-D_1kbMkk.cjs} +2 -2
- package/dist/{PackagesTab-DPPXZvoV.cjs.map → PackagesTab-D_1kbMkk.cjs.map} +1 -1
- package/dist/PluginsTab-CjYoMrbj.cjs +6 -0
- package/dist/PluginsTab-CjYoMrbj.cjs.map +1 -0
- package/dist/{PluginsTab-C7PH2Wym.js → PluginsTab-Yz9HZqpp.js} +376 -294
- package/dist/PluginsTab-Yz9HZqpp.js.map +1 -0
- package/dist/{ProgressbarWidget-CPeGR-Az.cjs → ProgressbarWidget-BUSOhcZ3.cjs} +2 -2
- package/dist/{ProgressbarWidget-CPeGR-Az.cjs.map → ProgressbarWidget-BUSOhcZ3.cjs.map} +1 -1
- package/dist/{ProgressbarWidget-CO6CEkxP.js → ProgressbarWidget-DJepvOip.js} +3 -3
- package/dist/{ProgressbarWidget-CO6CEkxP.js.map → ProgressbarWidget-DJepvOip.js.map} +1 -1
- package/dist/{RadiobuttonWidget-DrxUclws.js → RadiobuttonWidget-4e8ROIfg.js} +3 -3
- package/dist/{RadiobuttonWidget-DrxUclws.js.map → RadiobuttonWidget-4e8ROIfg.js.map} +1 -1
- package/dist/{RadiobuttonWidget-DucgkAYD.cjs → RadiobuttonWidget-D4Fka1eN.cjs} +2 -2
- package/dist/{RadiobuttonWidget-DucgkAYD.cjs.map → RadiobuttonWidget-D4Fka1eN.cjs.map} +1 -1
- package/dist/{RadiogroupWidget-DN9C38cg.js → RadiogroupWidget-CUucj6aT.js} +3 -3
- package/dist/{RadiogroupWidget-DN9C38cg.js.map → RadiogroupWidget-CUucj6aT.js.map} +1 -1
- package/dist/{RadiogroupWidget-C7oVFRf3.cjs → RadiogroupWidget-DU9G6qLq.cjs} +2 -2
- package/dist/{RadiogroupWidget-C7oVFRf3.cjs.map → RadiogroupWidget-DU9G6qLq.cjs.map} +1 -1
- package/dist/{RangebarWidget-5uQTfLMP.js → RangebarWidget-Bu4rqlrx.js} +3 -3
- package/dist/{RangebarWidget-5uQTfLMP.js.map → RangebarWidget-Bu4rqlrx.js.map} +1 -1
- package/dist/{RangebarWidget-Da9S3KMB.cjs → RangebarWidget-DlMJo2o3.cjs} +2 -2
- package/dist/{RangebarWidget-Da9S3KMB.cjs.map → RangebarWidget-DlMJo2o3.cjs.map} +1 -1
- package/dist/{RedisTab-Cyrr_g9k.js → RedisTab-C00rFmdl.js} +3 -3
- package/dist/{RedisTab-Cyrr_g9k.js.map → RedisTab-C00rFmdl.js.map} +1 -1
- package/dist/{RedisTab-BFTaPNRc.cjs → RedisTab-Dz4m_JfV.cjs} +2 -2
- package/dist/{RedisTab-BFTaPNRc.cjs.map → RedisTab-Dz4m_JfV.cjs.map} +1 -1
- package/dist/{RollupWidget-B0DCULnu.js → RollupWidget-ByLvEEau.js} +3 -3
- package/dist/{RollupWidget-B0DCULnu.js.map → RollupWidget-ByLvEEau.js.map} +1 -1
- package/dist/{RollupWidget-DK0eFASs.cjs → RollupWidget-D-Dx6Dkx.cjs} +2 -2
- package/dist/{RollupWidget-DK0eFASs.cjs.map → RollupWidget-D-Dx6Dkx.cjs.map} +1 -1
- package/dist/{RoutersTab-BAfpG8k3.js → RoutersTab-CEe4oS0x.js} +7 -7
- package/dist/{RoutersTab-BAfpG8k3.js.map → RoutersTab-CEe4oS0x.js.map} +1 -1
- package/dist/{RoutersTab-B8JIxjdI.cjs → RoutersTab-CyjPaVVb.cjs} +2 -2
- package/dist/{RoutersTab-B8JIxjdI.cjs.map → RoutersTab-CyjPaVVb.cjs.map} +1 -1
- package/dist/ScriptChooser-B83Pgq2H.cjs +2 -0
- package/dist/ScriptChooser-B83Pgq2H.cjs.map +1 -0
- package/dist/{ScriptChooser-ahp4Tu3O.js → ScriptChooser-CbVbI0x-.js} +55 -50
- package/dist/ScriptChooser-CbVbI0x-.js.map +1 -0
- package/dist/{ScrollwindowWidget-xM_R_Arq.cjs → ScrollwindowWidget-0UcfntpY.cjs} +2 -2
- package/dist/{ScrollwindowWidget-xM_R_Arq.cjs.map → ScrollwindowWidget-0UcfntpY.cjs.map} +1 -1
- package/dist/{ScrollwindowWidget-BOkZQgtf.js → ScrollwindowWidget-CXJ9QGN1.js} +4 -4
- package/dist/{ScrollwindowWidget-BOkZQgtf.js.map → ScrollwindowWidget-CXJ9QGN1.js.map} +1 -1
- package/dist/{SecretsTab-DoHYppoO.cjs → SecretsTab-B07A5MeK.cjs} +2 -2
- package/dist/{SecretsTab-DoHYppoO.cjs.map → SecretsTab-B07A5MeK.cjs.map} +1 -1
- package/dist/{SecretsTab-D5RxHYVp.js → SecretsTab-DFrxV8Q8.js} +8 -8
- package/dist/{SecretsTab-D5RxHYVp.js.map → SecretsTab-DFrxV8Q8.js.map} +1 -1
- package/dist/{SettingsTab-Dvnzqzdp.cjs → SettingsTab-CDaG6VS1.cjs} +2 -2
- package/dist/{SettingsTab-Dvnzqzdp.cjs.map → SettingsTab-CDaG6VS1.cjs.map} +1 -1
- package/dist/{SettingsTab-CKGQEwd_.js → SettingsTab-CpLxrjTc.js} +5 -5
- package/dist/{SettingsTab-CKGQEwd_.js.map → SettingsTab-CpLxrjTc.js.map} +1 -1
- package/dist/{SignalWidget-BWKgNMdV.cjs → SignalWidget-DhS8nGJu.cjs} +2 -2
- package/dist/{SignalWidget-BWKgNMdV.cjs.map → SignalWidget-DhS8nGJu.cjs.map} +1 -1
- package/dist/{SignalWidget-Cis0Xkea.js → SignalWidget-qvL2YZJA.js} +3 -3
- package/dist/{SignalWidget-Cis0Xkea.js.map → SignalWidget-qvL2YZJA.js.map} +1 -1
- package/dist/{SimpleTextDialog-D2mEDvGY.js → SimpleTextDialog--iSWgPgq.js} +7 -7
- package/dist/SimpleTextDialog--iSWgPgq.js.map +1 -0
- package/dist/{SimpleTextDialog-BCNn5FZh.cjs → SimpleTextDialog-tZ7qO1zq.cjs} +2 -2
- package/dist/SimpleTextDialog-tZ7qO1zq.cjs.map +1 -0
- package/dist/{SpacerWidget-_daU5QnM.cjs → SpacerWidget-CUrYZDLP.cjs} +2 -2
- package/dist/{SpacerWidget-_daU5QnM.cjs.map → SpacerWidget-CUrYZDLP.cjs.map} +1 -1
- package/dist/{SpacerWidget-CLcqC2Qk.js → SpacerWidget-CaWx41K7.js} +3 -3
- package/dist/{SpacerWidget-CLcqC2Qk.js.map → SpacerWidget-CaWx41K7.js.map} +1 -1
- package/dist/{SparklineWidget-qRnlPzJ_.cjs → SparklineWidget-BOnHnJOh.cjs} +2 -2
- package/dist/{SparklineWidget-qRnlPzJ_.cjs.map → SparklineWidget-BOnHnJOh.cjs.map} +1 -1
- package/dist/{SparklineWidget-CTp83eZ-.js → SparklineWidget-BkNSRypJ.js} +5 -5
- package/dist/{SparklineWidget-CTp83eZ-.js.map → SparklineWidget-BkNSRypJ.js.map} +1 -1
- package/dist/{TabbookWidget-C0Fvv-o5.cjs → TabbookWidget-BTvyYn7i.cjs} +2 -2
- package/dist/{TabbookWidget-C0Fvv-o5.cjs.map → TabbookWidget-BTvyYn7i.cjs.map} +1 -1
- package/dist/{TabbookWidget-uucd-zsX.js → TabbookWidget-MsrRG1vn.js} +3 -3
- package/dist/{TabbookWidget-uucd-zsX.js.map → TabbookWidget-MsrRG1vn.js.map} +1 -1
- package/dist/TargetPacketItemChooser-CmjEcxN3.cjs +2 -0
- package/dist/TargetPacketItemChooser-CmjEcxN3.cjs.map +1 -0
- package/dist/{TargetPacketItemChooser-CXpSx-eA.js → TargetPacketItemChooser-oSQHf8Ht.js} +158 -108
- package/dist/TargetPacketItemChooser-oSQHf8Ht.js.map +1 -0
- package/dist/{TargetsTab-CM4ABe5y.js → TargetsTab-B6tf2hKl.js} +7 -7
- package/dist/{TargetsTab-CM4ABe5y.js.map → TargetsTab-B6tf2hKl.js.map} +1 -1
- package/dist/{TargetsTab-Ixql3xzm.cjs → TargetsTab-DwFb3_1K.cjs} +2 -2
- package/dist/{TargetsTab-Ixql3xzm.cjs.map → TargetsTab-DwFb3_1K.cjs.map} +1 -1
- package/dist/{TextBoxDialog-DbD8P4Xc.cjs → TextBoxDialog-DXG7H7kQ.cjs} +2 -2
- package/dist/{TextBoxDialog-DbD8P4Xc.cjs.map → TextBoxDialog-DXG7H7kQ.cjs.map} +1 -1
- package/dist/{TextBoxDialog-CdFHdj5W.js → TextBoxDialog-Xs-gitZd.js} +2 -2
- package/dist/{TextBoxDialog-CdFHdj5W.js.map → TextBoxDialog-Xs-gitZd.js.map} +1 -1
- package/dist/{TextboxWidget-DrdMC0EB.cjs → TextboxWidget-CPmQEhMm.cjs} +2 -2
- package/dist/{TextboxWidget-DrdMC0EB.cjs.map → TextboxWidget-CPmQEhMm.cjs.map} +1 -1
- package/dist/{TextboxWidget-C2n38ti5.js → TextboxWidget-DbwpPVGB.js} +5 -5
- package/dist/{TextboxWidget-C2n38ti5.js.map → TextboxWidget-DbwpPVGB.js.map} +1 -1
- package/dist/{TextfieldWidget-VeOem1w3.cjs → TextfieldWidget-BzaNs7J4.cjs} +2 -2
- package/dist/{TextfieldWidget-VeOem1w3.cjs.map → TextfieldWidget-BzaNs7J4.cjs.map} +1 -1
- package/dist/{TextfieldWidget--HTv9ddk.js → TextfieldWidget-DzMlTMYW.js} +3 -3
- package/dist/{TextfieldWidget--HTv9ddk.js.map → TextfieldWidget-DzMlTMYW.js.map} +1 -1
- package/dist/{TimeWidget-CPNVZaUM.js → TimeWidget-BHybAfg8.js} +3 -3
- package/dist/{TimeWidget-CPNVZaUM.js.map → TimeWidget-BHybAfg8.js.map} +1 -1
- package/dist/{TimeWidget-C9ltUWFh.cjs → TimeWidget-DksEVe5c.cjs} +2 -2
- package/dist/{TimeWidget-C9ltUWFh.cjs.map → TimeWidget-DksEVe5c.cjs.map} +1 -1
- package/dist/{TitleWidget-IuUVZkLh.cjs → TitleWidget-C7_pj0lU.cjs} +2 -2
- package/dist/{TitleWidget-IuUVZkLh.cjs.map → TitleWidget-C7_pj0lU.cjs.map} +1 -1
- package/dist/{TitleWidget-Cp0cb6V8.js → TitleWidget-DL_sE5YE.js} +3 -3
- package/dist/{TitleWidget-Cp0cb6V8.js.map → TitleWidget-DL_sE5YE.js.map} +1 -1
- package/dist/{ToolsTab-DGjyBWkp.js → ToolsTab-CXoxIck8.js} +4 -4
- package/dist/{ToolsTab-DGjyBWkp.js.map → ToolsTab-CXoxIck8.js.map} +1 -1
- package/dist/{ToolsTab-Bgrj0eGr.cjs → ToolsTab-DTL8ujgd.cjs} +3 -3
- package/dist/{ToolsTab-Bgrj0eGr.cjs.map → ToolsTab-DTL8ujgd.cjs.map} +1 -1
- package/dist/TopBar-B8LJESUg.js +324 -0
- package/dist/TopBar-B8LJESUg.js.map +1 -0
- package/dist/TopBar-CGSMcenK.cjs +2 -0
- package/dist/TopBar-CGSMcenK.cjs.map +1 -0
- package/dist/{UpgradeToEnterpriseDialog-C2Ggr_Xd.js → UpgradeToEnterpriseDialog-CqnhQ8So.js} +3 -3
- package/dist/{UpgradeToEnterpriseDialog-C2Ggr_Xd.js.map → UpgradeToEnterpriseDialog-CqnhQ8So.js.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog-DtckZO3_.cjs → UpgradeToEnterpriseDialog-Dv_egyCM.cjs} +2 -2
- package/dist/{UpgradeToEnterpriseDialog-DtckZO3_.cjs.map → UpgradeToEnterpriseDialog-Dv_egyCM.cjs.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-JEZNdnan.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C3WTK6F-.js} +15036 -14930
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C3WTK6F-.js.map +1 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-RGlL9jUF.cjs +1498 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-RGlL9jUF.cjs.map +1 -0
- package/dist/VWidget-CTcOKw09.cjs +2 -0
- package/dist/VWidget-CTcOKw09.cjs.map +1 -0
- package/dist/{VWidget-DQGJRgAk.js → VWidget-D06LY-Yc.js} +7 -7
- package/dist/VWidget-D06LY-Yc.js.map +1 -0
- package/dist/{ValueWidget-BmXm9dYt.cjs → ValueWidget-C2qn7lVq.cjs} +2 -2
- package/dist/{ValueWidget-BmXm9dYt.cjs.map → ValueWidget-C2qn7lVq.cjs.map} +1 -1
- package/dist/{ValueWidget-Bk1RFjks.js → ValueWidget-CGT0LV_n.js} +5 -5
- package/dist/{ValueWidget-Bk1RFjks.js.map → ValueWidget-CGT0LV_n.js.map} +1 -1
- package/dist/{ValuelimitsbarWidget-C0HIBYh2.js → ValuelimitsbarWidget-CmpyPO-1.js} +5 -5
- package/dist/{ValuelimitsbarWidget-C0HIBYh2.js.map → ValuelimitsbarWidget-CmpyPO-1.js.map} +1 -1
- package/dist/{ValuelimitsbarWidget-PjCpjhsr.cjs → ValuelimitsbarWidget-_lEKCmQl.cjs} +2 -2
- package/dist/{ValuelimitsbarWidget-PjCpjhsr.cjs.map → ValuelimitsbarWidget-_lEKCmQl.cjs.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-BGiDDUI_.cjs → ValuelimitscolumnWidget-0urjo-hR.cjs} +2 -2
- package/dist/{ValuelimitscolumnWidget-BGiDDUI_.cjs.map → ValuelimitscolumnWidget-0urjo-hR.cjs.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-BTT90uyX.js → ValuelimitscolumnWidget-jzxrQd-f.js} +5 -5
- package/dist/{ValuelimitscolumnWidget-BTT90uyX.js.map → ValuelimitscolumnWidget-jzxrQd-f.js.map} +1 -1
- package/dist/{ValuerangebarWidget-CcQw_XK9.js → ValuerangebarWidget-C8ckuAeh.js} +5 -5
- package/dist/{ValuerangebarWidget-CcQw_XK9.js.map → ValuerangebarWidget-C8ckuAeh.js.map} +1 -1
- package/dist/{ValuerangebarWidget-ClmX-qH_.cjs → ValuerangebarWidget-lXHRe4YZ.cjs} +2 -2
- package/dist/{ValuerangebarWidget-ClmX-qH_.cjs.map → ValuerangebarWidget-lXHRe4YZ.cjs.map} +1 -1
- package/dist/{VerticalWidget-BeDWsvP6.cjs → VerticalWidget-XBSrdA2c.cjs} +2 -2
- package/dist/{VerticalWidget-BeDWsvP6.cjs.map → VerticalWidget-XBSrdA2c.cjs.map} +1 -1
- package/dist/{VerticalWidget-CNtFQv3R.js → VerticalWidget-qN82km_m.js} +3 -3
- package/dist/{VerticalWidget-CNtFQv3R.js.map → VerticalWidget-qN82km_m.js.map} +1 -1
- package/dist/{VerticalboxWidget-DlokKDBD.cjs → VerticalboxWidget-1FHkgmf0.cjs} +2 -2
- package/dist/{VerticalboxWidget-DlokKDBD.cjs.map → VerticalboxWidget-1FHkgmf0.cjs.map} +1 -1
- package/dist/{VerticalboxWidget-Yxmz1SnU.js → VerticalboxWidget-CiJZDlHJ.js} +6 -6
- package/dist/{VerticalboxWidget-Yxmz1SnU.js.map → VerticalboxWidget-CiJZDlHJ.js.map} +1 -1
- package/dist/{Widget-HC1_yuQg.cjs → Widget-BwvnfXRa.cjs} +2 -2
- package/dist/{Widget-HC1_yuQg.cjs.map → Widget-BwvnfXRa.cjs.map} +1 -1
- package/dist/{Widget-LsyjS7ZS.js → Widget-DXvVFSH5.js} +2 -2
- package/dist/{Widget-LsyjS7ZS.js.map → Widget-DXvVFSH5.js.map} +1 -1
- package/dist/cmdUtilities--4ZqS2At.js +44 -0
- package/dist/{cmdUtilities-BMsSNjt_.js.map → cmdUtilities--4ZqS2At.js.map} +1 -1
- package/dist/{cmdUtilities-ChD8v8-7.cjs → cmdUtilities-N30xDV6q.cjs} +2 -2
- package/dist/{cmdUtilities-ChD8v8-7.cjs.map → cmdUtilities-N30xDV6q.cjs.map} +1 -1
- package/dist/components.cjs +2 -2
- package/dist/components.cjs.map +1 -1
- package/dist/components.js +93 -93
- package/dist/components.js.map +1 -1
- package/dist/composables.cjs +2 -0
- package/dist/composables.cjs.map +1 -0
- package/dist/composables.js +5 -0
- package/dist/composables.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{index-DS1ACWVr.js → index-3k1IXN1T.js} +244 -226
- package/dist/index-3k1IXN1T.js.map +1 -0
- package/dist/index-DlWUR7vt.cjs +7 -0
- package/dist/index-DlWUR7vt.cjs.map +1 -0
- package/dist/plugins.cjs +2 -2
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.js +87 -85
- package/dist/plugins.js.map +1 -1
- package/dist/purify.es-BuxjWxA2.js +554 -0
- package/dist/purify.es-BuxjWxA2.js.map +1 -0
- package/dist/purify.es-d7tb6jjJ.cjs +3 -0
- package/dist/purify.es-d7tb6jjJ.cjs.map +1 -0
- package/dist/{settings-DCxXjkio.js → settings-DRNFiuf0.js} +2 -2
- package/dist/{settings-DCxXjkio.js.map → settings-DRNFiuf0.js.map} +1 -1
- package/dist/{settings-zRw8EylV.cjs → settings-s8NuYKD-.cjs} +2 -2
- package/dist/{settings-zRw8EylV.cjs.map → settings-s8NuYKD-.cjs.map} +1 -1
- package/dist/tools/admin.cjs +5 -5
- package/dist/tools/admin.cjs.map +1 -1
- package/dist/tools/admin.js +605 -849
- package/dist/tools/admin.js.map +1 -1
- package/dist/tools/base.cjs +1 -1
- package/dist/tools/base.js +6 -6
- package/dist/tools/calendar.cjs +1 -1
- package/dist/tools/calendar.js +1 -1
- package/dist/tools/scriptrunner.cjs +9 -9
- package/dist/tools/scriptrunner.cjs.map +1 -1
- package/dist/tools/scriptrunner.js +925 -894
- package/dist/tools/scriptrunner.js.map +1 -1
- package/dist/useContainerHeight-BAw05dIa.js +11 -0
- package/dist/useContainerHeight-BAw05dIa.js.map +1 -0
- package/dist/useContainerHeight-BEd4f2Lr.cjs +2 -0
- package/dist/useContainerHeight-BEd4f2Lr.cjs.map +1 -0
- package/dist/util.cjs +1 -1
- package/dist/util.js +1 -1
- package/dist/vue-common.css +1 -1
- package/dist/widgets.cjs +1 -1
- package/dist/widgets.js +64 -64
- package/package.json +23 -25
- package/dist/CriticalCmdDialog-CnNlsHRX.js.map +0 -1
- package/dist/CriticalCmdDialog-niBmkudw.cjs.map +0 -1
- package/dist/CustomIcon-Bop2mEnu.cjs +0 -2
- package/dist/DetailsDialog-BNCS3QAe.js.map +0 -1
- package/dist/DetailsDialog-DgN9Jcio.cjs +0 -2
- package/dist/DetailsDialog-DgN9Jcio.cjs.map +0 -1
- package/dist/EventListDialog-B8rnN9Zi.cjs +0 -2
- package/dist/EventListDialog-B8rnN9Zi.cjs.map +0 -1
- package/dist/EventListDialog-C2pwmD0d.js.map +0 -1
- package/dist/Graph-BliBYJxD.js.map +0 -1
- package/dist/Graph-DxC2MPYf.cjs +0 -2
- package/dist/Graph-DxC2MPYf.cjs.map +0 -1
- package/dist/Layout-DvBekli8.cjs +0 -2
- package/dist/Openc3Screen-CD3C_EUo.cjs +0 -6
- package/dist/Openc3Screen-CD3C_EUo.cjs.map +0 -1
- package/dist/Openc3Screen-Cqm5Xtd-.js.map +0 -1
- package/dist/PluginsTab-C7PH2Wym.js.map +0 -1
- package/dist/PluginsTab-xzPlEMYj.cjs +0 -6
- package/dist/PluginsTab-xzPlEMYj.cjs.map +0 -1
- package/dist/ScriptChooser-ahp4Tu3O.js.map +0 -1
- package/dist/ScriptChooser-ma6P0WuM.cjs +0 -2
- package/dist/ScriptChooser-ma6P0WuM.cjs.map +0 -1
- package/dist/SimpleTextDialog-BCNn5FZh.cjs.map +0 -1
- package/dist/SimpleTextDialog-D2mEDvGY.js.map +0 -1
- package/dist/TargetPacketItemChooser-CAl-fNql.cjs +0 -2
- package/dist/TargetPacketItemChooser-CAl-fNql.cjs.map +0 -1
- package/dist/TargetPacketItemChooser-CXpSx-eA.js.map +0 -1
- package/dist/TopBar-B48yYbtR.js +0 -296
- package/dist/TopBar-B48yYbtR.js.map +0 -1
- package/dist/TopBar-DLz-U85G.cjs +0 -2
- package/dist/TopBar-DLz-U85G.cjs.map +0 -1
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs +0 -1498
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs.map +0 -1
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-JEZNdnan.js.map +0 -1
- package/dist/VWidget-Cf9MXbCl.cjs +0 -2
- package/dist/VWidget-Cf9MXbCl.cjs.map +0 -1
- package/dist/VWidget-DQGJRgAk.js.map +0 -1
- package/dist/cmdUtilities-BMsSNjt_.js +0 -46
- package/dist/index-DS1ACWVr.js.map +0 -1
- package/dist/index-Nd4O4kac.cjs +0 -7
- package/dist/index-Nd4O4kac.cjs.map +0 -1
- package/dist/purify.es-GHnZTJ9O.cjs +0 -3
- package/dist/purify.es-GHnZTJ9O.cjs.map +0 -1
- package/dist/purify.es-eYFoHPwR.js +0 -529
- package/dist/purify.es-eYFoHPwR.js.map +0 -1
package/dist/Graph-DxC2MPYf.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const O=require("./timeFilters-CJFxfjqN.cjs"),Y=require("./TargetPacketItemChooser-CAl-fNql.cjs"),e=require("vue"),x=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs"),E=require("./CustomIcon-Bop2mEnu.cjs"),I=require("./format-B22VpiOS.cjs"),M=require("./parse-DwfgQboe.cjs"),L={components:{TargetPacketItemChooser:Y.TargetPacketItemChooser},mixins:[O.TimeFilters],props:{modelValue:Boolean,title:{type:String,required:!0},legendPosition:{type:String,required:!0},items:{type:Array,required:!0},graphMinY:{type:Number},graphMaxY:{type:Number},lines:{type:Array,required:!0},colors:{type:Array,required:!0},startDateTime:{type:Number},endDateTime:{type:Number},timeZone:{type:String,required:!0},xAxisItemPacket:{type:Object,default:void 0},xAxisItem:{type:String,default:"__time"}},emits:["cancel","ok","remove","update:modelValue","update:xAxisItem"],data:function(){return{tab:0,graph:{},customXAxisEnabled:!1,selectedXAxisItem:null,pendingXAxisSelection:null,legendPositions:["top","bottom","left","right"],startDate:null,startTime:null,endDate:null,endTime:null,lineHeaders:[{title:"Y Value",value:"yValue"},{title:"Color",value:"color"},{title:"Actions",value:"actions",sortable:!1}],itemHeaders:[{title:"Target Name",value:"targetName"},{title:"Packet Name",value:"packetName"},{title:"Item Name",value:"itemName"},{title:"Actions",value:"actions",sortable:!1}],rules:{date:i=>{if(!i)return!0;try{return I.isValid(M.parse(i,"yyyy-MM-dd",new Date))||"Invalid date (YYYY-MM-DD)"}catch{return"Invalid date (YYYY-MM-DD)"}},time:i=>{if(!i)return!0;try{return I.isValid(M.parse(i,"HH:mm:ss",new Date))||"Invalid time (HH:MM:SS)"}catch{return"Invalid time (HH:MM:SS)"}}}}},computed:{show:{get(){return this.modelValue},set(i){this.$emit("update:modelValue",i)}},editItems:function(){if(!this.items)return[];let i=0;return this.items.map(t=>(i+=1,{...t,itemId:i}))},initialXAxisItem:function(){if(this.xAxisItem!=="__time")return this.xAxisItem.split("__").at(4)}},created(){if(this.graph={title:this.title,legendPosition:this.legendPosition,items:this.items,graphMinY:this.graphMinY,graphMaxY:this.graphMaxY,lines:[...this.lines]},this.customXAxisEnabled=this.xAxisItem&&this.xAxisItem!=="__time",this.selectedXAxisItem=this.xAxisItem,this.startDateTime){let i=I.toDate(this.startDateTime/1e6);this.startDate=this.formatDate(i,this.timeZone),this.startTime=this.formatTimeHMS(i,this.timeZone)}else{let i=new Date-36e5;this.startDate=this.formatDate(i,this.timeZone),this.startTime=this.formatTimeHMS(i,this.timeZone)}if(this.endDateTime){let i=I.toDate(this.endDateTime/1e6);this.endDate=this.formatDate(i,this.timeZone),this.endTime=this.formatTimeHMS(i,this.timeZone)}},methods:{closeOk(){this.startDate&&this.startTime?this.graph.startDateTime=this.startDate+" "+this.startTime:this.graph.startDateTime=null,this.endDate&&this.endTime?this.graph.endDateTime=this.endDate+" "+this.endTime:this.graph.endDateTime=null,this.$emit("ok",this.graph)},addLine(){this.graph.lines.push({yValue:0,color:"white"})},removeLine(i){let t=this.graph.lines.indexOf(i);this.graph.lines.splice(t,1)},customXAxisToggled(i){i||(this.selectedXAxisItem="__time",this.$emit("update:xAxisItem","__time"))},xAxisItemChanged(i){this.pendingXAxisSelection=i},xAxisItemSelected(i){if(i.targetName&&i.packetName&&i.itemName){const t=`DECOM__TLM__${i.targetName}__${i.packetName}__${i.itemName}__CONVERTED`;this.selectedXAxisItem=t,this.$emit("update:xAxisItem",t)}}}},U={class:"edit-box"},X={class:"edit-box"},z={class:"edit-box"},R={class:"edit-box"},H={class:"edit-box"};function q(i,t,s,a,l,o){const n=e.resolveComponent("v-spacer"),m=e.resolveComponent("v-toolbar"),p=e.resolveComponent("v-tab"),d=e.resolveComponent("v-tabs"),c=e.resolveComponent("v-text-field"),y=e.resolveComponent("v-card-text"),f=e.resolveComponent("v-col"),v=e.resolveComponent("v-select"),u=e.resolveComponent("v-row"),C=e.resolveComponent("v-tabs-window-item"),g=e.resolveComponent("v-btn"),w=e.resolveComponent("v-list-item"),N=e.resolveComponent("v-list"),b=e.resolveComponent("v-checkbox"),D=e.resolveComponent("target-packet-item-chooser"),_=e.resolveComponent("v-data-table"),V=e.resolveComponent("v-tabs-window"),A=e.resolveComponent("v-card-actions"),h=e.resolveComponent("v-card"),B=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(B,{modelValue:o.show,"onUpdate:modelValue":t[13]||(t[13]=r=>o.show=r),"max-width":"700",onKeydown:t[14]||(t[14]=e.withKeys(r=>i.$emit("cancel"),["esc"]))},{default:e.withCtx(()=>[e.createVNode(m,{height:"24"},{default:e.withCtx(()=>[e.createVNode(n),t[15]||(t[15]=e.createElementVNode("span",null," Edit Graph ",-1)),e.createVNode(n)]),_:1}),e.createVNode(h,{class:"pa-3"},{default:e.withCtx(()=>[e.createVNode(d,{modelValue:i.tab,"onUpdate:modelValue":t[0]||(t[0]=r=>i.tab=r),class:"ml-3"},{default:e.withCtx(()=>[e.createVNode(p,{value:"0"},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode(" Settings ",-1)])]),_:1}),e.createVNode(p,{value:"1"},{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode(" Scale / Lines ",-1)])]),_:1}),e.createVNode(p,{value:"2"},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode(" Items ",-1)])]),_:1})]),_:1},8,["modelValue"]),e.createVNode(V,{modelValue:i.tab,"onUpdate:modelValue":t[11]||(t[11]=r=>i.tab=r)},{default:e.withCtx(()=>[e.createVNode(C,{value:"0",eager:""},{default:e.withCtx(()=>[e.createElementVNode("div",U,[e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(y,{class:"pa-0"},{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.graph.title,"onUpdate:modelValue":t[1]||(t[1]=r=>i.graph.title=r),class:"pb-2",label:"Title","hide-details":""},null,8,["modelValue"])]),_:1})]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(v,{modelValue:i.graph.legendPosition,"onUpdate:modelValue":t[2]||(t[2]=r=>i.graph.legendPosition=r),label:"Legend Position","hide-details":"",items:i.legendPositions,style:{"max-width":"280px"}},null,8,["modelValue","items"])]),_:1})]),_:1})]),e.createElementVNode("div",X,[e.createVNode(y,{class:"pa-0"},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode(" Select a start date/time for the graph. Leave blank for start now. ",-1)])]),_:1}),e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.startDate,"onUpdate:modelValue":t[3]||(t[3]=r=>i.startDate=r),label:"Start Date",name:`date${Date.now()}`,rules:[i.rules.date],type:"date"},null,8,["modelValue","name","rules"])]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.startTime,"onUpdate:modelValue":t[4]||(t[4]=r=>i.startTime=r),label:"Start Time",name:`time${Date.now()}`,rules:[i.rules.time],type:"time",step:"1"},null,8,["modelValue","name","rules"])]),_:1})]),_:1}),e.createVNode(y,{class:"pa-0"},{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode(" Select a end date/time for the graph. Leave blank for continuous real-time graphing. ",-1)])]),_:1}),e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.endDate,"onUpdate:modelValue":t[5]||(t[5]=r=>i.endDate=r),label:"End Date",name:`date${Date.now()}`,rules:[i.rules.date],type:"date"},null,8,["modelValue","name","rules"])]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.endTime,"onUpdate:modelValue":t[6]||(t[6]=r=>i.endTime=r),label:"End Time",name:`time${Date.now()}`,rules:[i.rules.time],type:"time",step:"1"},null,8,["modelValue","name","rules"])]),_:1})]),_:1})])]),_:1}),e.createVNode(C,{value:"1",eager:""},{default:e.withCtx(()=>[e.createElementVNode("div",z,[e.createVNode(y,{class:"pa-0"},{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode(" Set a min or max Y value to override automatic scaling ",-1)])]),_:1}),e.createVNode(u,{dense:""},{default:e.withCtx(()=>[e.createVNode(f,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.graph.graphMinY,"onUpdate:modelValue":t[7]||(t[7]=r=>i.graph.graphMinY=r),"hide-details":"",label:"Min Y Axis (Optional)",type:"number"},null,8,["modelValue"])]),_:1}),e.createVNode(f,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(c,{modelValue:i.graph.graphMaxY,"onUpdate:modelValue":t[8]||(t[8]=r=>i.graph.graphMaxY=r),"hide-details":"",label:"Max Y Axis (Optional)",type:"number"},null,8,["modelValue"])]),_:1})]),_:1})]),e.createElementVNode("div",R,[e.createVNode(N,{density:"compact",class:"horizontal-lines"},{default:e.withCtx(()=>[e.createVNode(w,null,{default:e.withCtx(()=>[t[23]||(t[23]=e.createElementVNode("span",{style:{"padding-top":"5px"}}," Add horizontal lines to the graph ",-1)),e.createVNode(n),e.createVNode(g,{onClick:t[9]||(t[9]=r=>o.addLine())},{default:e.withCtx(()=>[...t[22]||(t[22]=[e.createTextVNode(" New Line ",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.graph.lines,(r,S)=>(e.openBlock(),e.createBlock(w,{key:S,value:r,color:"primary"},{default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(c,{modelValue:r.yValue,"onUpdate:modelValue":k=>r.yValue=k,label:"Y Value"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(v,{modelValue:r.color,"onUpdate:modelValue":k=>r.color=k,label:"Color","hide-details":"",items:s.colors},null,8,["modelValue","onUpdate:modelValue","items"])]),_:2},1024),e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(g,{style:{padding:"30px"},icon:"mdi-delete",variant:"text","aria-label":"Remove Line",onClick:k=>o.removeLine(r)},null,8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1032,["value"]))),128))]),_:1})]),e.createElementVNode("div",H,[e.createVNode(y,{class:"pa-0 text-medium-emphasis"},{default:e.withCtx(()=>[...t[24]||(t[24]=[e.createTextVNode(" Choose a different item to use for the graph's X axis. If unchecked, the graph will use the packet's PACKET_TIMESECONDS item if it exists, otherwise it will use RECEIVED_TIMESECONDS. ",-1),e.createElementVNode("br",null,null,-1),e.createElementVNode("span",{class:"font-italic"}," Note that the graph may not work correctly if you choose an item that does not strictly increase in value. It is recommended to use a counter or timestamp. ",-1)])]),_:1}),e.createVNode(b,{modelValue:i.customXAxisEnabled,"onUpdate:modelValue":[t[10]||(t[10]=r=>i.customXAxisEnabled=r),o.customXAxisToggled],disabled:!s.xAxisItemPacket,label:"Custom X axis item",density:"compact","hide-details":""},null,8,["modelValue","disabled","onUpdate:modelValue"]),s.xAxisItemPacket?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(y,{key:0,class:"pa-0 text-medium-emphasis"},{default:e.withCtx(()=>[...t[25]||(t[25]=[e.createTextVNode(" All items on the graph must be in the same packet to enable this feature. ",-1)])]),_:1})),i.customXAxisEnabled&&s.xAxisItemPacket?(e.openBlock(),e.createBlock(D,{key:1,"initial-target-name":s.xAxisItemPacket.targetName,"initial-packet-name":s.xAxisItemPacket.packetName,"initial-item-name":o.initialXAxisItem,"choose-item":"","lock-target":"","lock-packet":"","button-text":"Set",onOnSet:o.xAxisItemChanged,onAddItem:o.xAxisItemSelected},null,8,["initial-target-name","initial-packet-name","initial-item-name","onOnSet","onAddItem"])):e.createCommentVNode("",!0)])]),_:1}),e.createVNode(C,{value:"2",eager:""},{default:e.withCtx(()=>[e.createVNode(_,{"item-key":"itemId",class:"elevation-1 my-2","data-test":"edit-graph-items",headers:i.itemHeaders,items:o.editItems,"items-per-page":5,"footer-props":{"items-per-page-options":[5]}},{"item.actions":e.withCtx(({item:r})=>[e.createVNode(g,{icon:"mdi-delete",variant:"text","aria-label":"Remove Item",onClick:S=>i.$emit("remove",r)},null,8,["onClick"])]),"no-data":e.withCtx(()=>[...t[26]||(t[26]=[e.createElementVNode("span",null," Currently no items on this graph ",-1)])]),_:1},8,["headers","items"])]),_:1})]),_:1},8,["modelValue"]),e.createVNode(A,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(n),e.createVNode(g,{variant:"outlined",onClick:t[12]||(t[12]=r=>i.$emit("cancel"))},{default:e.withCtx(()=>[...t[27]||(t[27]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(g,{variant:"flat",onClick:o.closeOk},{default:e.withCtx(()=>[...t[28]||(t[28]=[e.createTextVNode(" Ok ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])}const P=E._export_sfc(L,[["render",q]]),W={props:{modelValue:Boolean,item:{type:Object,required:!0},colors:{type:Array,required:!0}},emits:["cancel","changeColor","changeLimits","close","update:modelValue"],data:function(){return{editItem:null,limitsName:"NONE",limits:{NONE:[]},valueTypes:["CONVERTED","RAW"],reduction:[{title:"NONE",value:"DECOM"},{title:"REDUCED_MINUTE",value:"REDUCED_MINUTE"},{title:"REDUCED_HOUR",value:"REDUCED_HOUR"},{title:"REDUCED_DAY",value:"REDUCED_DAY"}],reducedTypes:["MIN","MAX","AVG","STDDEV"]}},computed:{show:{get(){return this.modelValue},set(i){this.$emit("update:modelValue",i)}},limitsNames(){return Object.keys(this.limits)}},async created(){this.editItem={...this.item},new x.gi().get_item(this.item.targetName,this.item.packetName,this.item.itemName).then(i=>{for(const[t,s]of Object.entries(i.limits))Object.keys(s).includes("red_low")&&(this.limits[t]=Object.values(s));this.limitsName=Object.keys(this.limits).find(t=>this.limits[t]+""==this.editItem.limits+"")})}},K={key:0},j={class:"pa-3"};function F(i,t,s,a,l,o){const n=e.resolveComponent("v-card-title"),m=e.resolveComponent("v-select"),p=e.resolveComponent("v-card-text"),d=e.resolveComponent("v-spacer"),c=e.resolveComponent("v-btn"),y=e.resolveComponent("v-card-actions"),f=e.resolveComponent("v-card"),v=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(v,{modelValue:o.show,"onUpdate:modelValue":t[9]||(t[9]=u=>o.show=u),width:"400",onKeydown:t[10]||(t[10]=e.withKeys(u=>i.success(),["enter"]))},{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(n,{class:"mb-2"},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode("Edit Item",-1)])]),_:1}),e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(m,{modelValue:i.editItem.valueType,"onUpdate:modelValue":t[0]||(t[0]=u=>i.editItem.valueType=u),variant:"outlined","hide-details":"",label:"Value Type",items:i.valueTypes,class:"mb-2"},null,8,["modelValue","items"]),e.createVNode(m,{modelValue:i.editItem.reduced,"onUpdate:modelValue":t[1]||(t[1]=u=>i.editItem.reduced=u),variant:"outlined","hide-details":"",label:"Reduction",items:i.reduction,class:"mb-2"},null,8,["modelValue","items"]),e.createVNode(m,{modelValue:i.editItem.reducedType,"onUpdate:modelValue":t[2]||(t[2]=u=>i.editItem.reducedType=u),variant:"outlined","hide-details":"",label:"Reduced Type",items:i.reducedTypes,disabled:i.editItem.reduced==="DECOM",class:"mb-2"},null,8,["modelValue","items","disabled"]),e.createVNode(m,{modelValue:i.editItem.color,"onUpdate:modelValue":[t[3]||(t[3]=u=>i.editItem.color=u),t[4]||(t[4]=u=>i.$emit("changeColor",u))],variant:"outlined","hide-details":"",label:"Color",items:s.colors,class:"mb-2"},null,8,["modelValue","items"]),o.limitsNames.length>1?(e.openBlock(),e.createElementBlock("div",K,[e.createVNode(m,{modelValue:i.limitsName,"onUpdate:modelValue":[t[5]||(t[5]=u=>i.limitsName=u),t[6]||(t[6]=u=>i.$emit("changeLimits",i.limits[i.limitsName]))],variant:"outlined","hide-details":"",label:"Display Limits",items:o.limitsNames},null,8,["modelValue","items"]),e.createElementVNode("div",j,e.toDisplayString(i.limitsName)+": "+e.toDisplayString(i.limits[i.limitsName]),1)])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(y,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(d),e.createVNode(c,{variant:"outlined",onClick:t[7]||(t[7]=u=>i.$emit("cancel"))},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(c,{variant:"flat",onClick:t[8]||(t[8]=u=>i.$emit("close",i.editItem))},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode(" Ok ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])}const G=E._export_sfc(W,[["render",F]]),T="__time",Z={components:{GraphEditDialog:P,GraphEditItemDialog:G},mixins:[O.TimeFilters],props:{id:{type:Number,required:!0},selectedGraphId:{type:Number,default:null},state:{type:String,required:!0},startTime:{type:Number,default:null},secondsGraphed:{type:Number,required:!0},pointsSaved:{type:Number,required:!0},pointsGraphed:{type:Number,required:!0},refreshIntervalMs:{type:Number,default:200},hideToolbar:{type:Boolean,default:!1},hideOverview:{type:Boolean,default:!1},sparkline:{type:Boolean,default:!1},initialItems:{type:Array,default:()=>[]},initialXAxisItem:{type:String,default:T},height:{type:Number,default:null},width:{type:Number,default:null},timeZone:{type:String,default:"local"}},emits:["click","close-graph","edit","min-max-graph","pause","resize","start","started"],data(){return{api:null,lines:[],active:!0,expand:!0,fullWidth:!0,fullHeight:!0,graph:null,editGraph:!1,editGraphMenu:!1,editGraphMenuX:0,editGraphMenuY:0,editItem:!1,itemMenu:!1,itemMenuX:0,itemMenuY:0,legendMenu:!1,legendMenuX:0,legendMenuY:0,legendPosition:"bottom",selectedItem:null,hideToolbarData:this.hideToolbar,showOverview:!this.hideOverview,hideOverviewData:this.hideOverview,title:"",overview:null,data:[[]],dataChanged:!1,interval:null,graphMinY:null,graphMaxY:null,graphStartDateTime:null,graphEndDateTime:null,xAxisItem:this.initialXAxisItem,indexes:{},items:this.initialItems,graphItems:[],lastPlaybackDateTime:null,limitsValues:[],drawInterval:null,zoomChart:!1,zoomOverview:!1,cable:new x.pi,subscription:null,needToUpdate:!1,errorDialog:!1,errors:[],colorIndex:0,colors:["#00c7cb","#938bdb","#4dacff","lime","darkorange","red","gold","hotpink","tan","cyan","maroon","blue","teal","purple","green","brown","lightblue","white","black"]}},computed:{calcFullSize:function(){return this.fullWidth||this.fullHeight},error:function(){return this.errorDialog&&this.errors.length>0?JSON.stringify(this.errors,null,4):null},itemSubscriptionKeys:function(){return this.items.map(this.subscriptionKey)},allowableXAxisItemPacket:function(){if(!this.canUseCustomXAxisItem||this.items.length===0)return;const{targetName:i,packetName:t}=this.items[0];return{targetName:i,packetName:t}},canUseCustomXAxisItem:function(){if(this.items.length===0)return!0;const{targetName:i,packetName:t}=this.items[0];return this.items.every(s=>s.targetName===i&&s.packetName===t)},actualXAxisItem:function(){return this.canUseCustomXAxisItem&&this.xAxisItem?this.xAxisItem:T},xAxisConverter:function(){return this.xAxisIsDefault?i=>i/1e9:i=>i},xAxisFormatter:function(){return i=>i==null?"--":this.xAxisIsTime?this.formatSeconds(i,this.timeZone):i},xAxisLabel:function(){return this.xAxisIsTime?"Time":this.actualXAxisItem.split("__").at(-2)},xAxisIsDefault:function(){return this.actualXAxisItem===T},xAxisIsTime:function(){const i=["PACKET_TIMESECONDS","RECEIVED_TIMESECONDS"];return this.xAxisIsDefault||i.includes(this.actualXAxisItem.split("__").at(4))},xAxisIsAlsoGraphedItem:function(){return this.itemSubscriptionKeys.includes(this.actualXAxisItem)},playbackMode:function(){return this.$store.state.playback.playbackMode},playbackDateTime:function(){return this.$store.state.playback.playbackDateTime},playbackStep:function(){return this.$store.state.playback.playbackStep}},watch:{state:function(i,t){switch(i){case"start":t==="stop"&&this.startGraph();break;case"stop":this.stopGraph();break}},playbackMode:function(i,t){this.playbackMode==="playback"?this.setupPlaybackMode():(this.lastPlaybackDateTime=null,this.clearAllData(),this.startGraph())},playbackDateTime:function(i,t){this.playbackMode==="playback"&&(this.lastPlaybackDateTime===null||this.lastPlaybackDateTime>this.playbackDateTime?this.clearAllData():this.api.get_tlm_values(this.graphItems,30,null,this.lastPlaybackDateTime,this.playbackDateTime).then(s=>{if(s.length>0){if(Array.isArray(s[0])&&Array.isArray(s[0][0]))for(let a=0;a<s.length;a++)for(let l=0;l<s[a].length;l++)if(l===0){let o=s[a][l][0],n=new Date(o);this.data[0].push(n.getTime()/1e3)}else this.data[l].push(s[a][l][0]);else if(Array.isArray(s)&&s.length>=2)for(let a=0;a<s.length;a++)if(a===0){let l=s[a][0],o=new Date(l);this.data[0].push(o.getTime()/1e3)}else this.data[a].push(s[a][0])}this.dataChanged=!0,this.updateGraphData()}),this.lastPlaybackDateTime=this.playbackDateTime)},data:function(i,t){this.dataChanged=!0},graphMinY:function(i,t){let s=parseFloat(i);isNaN(s)||(this.graphMinY=s),this.setGraphRange()},graphMaxY:function(i,t){let s=parseFloat(i);isNaN(s)||(this.graphMaxY=s),this.setGraphRange()},graphStartDateTime:function(i,t){i&&typeof i=="string"?(this.graphStartDateTime=this.parseDateTime(this.graphStartDateTime,this.timeZone)*1e6,this.graphStartDateTime!==t&&(this.needToUpdate=!0)):i===null&&t&&(this.graphStartDateTime=null,this.needToUpdate=!0)},graphEndDateTime:function(i,t){i&&typeof i=="string"?(this.graphEndDateTime=this.parseDateTime(this.graphEndDateTime,this.timeZone)*1e6,this.graphEndDateTime!==t&&(this.needToUpdate=!0)):i===null&&t&&(this.graphEndDateTime=null,this.needToUpdate=!0)},actualXAxisItem:function(i,t){let s=JSON.parse(JSON.stringify(this.items));this.removeItems(s),this.graph.destroy(),this.chartOpts.series[0].label=this.xAxisLabel,this.chartOpts.scales.x.time=this.xAxisIsTime,this.graph=new x.uPlot(this.chartOpts,this.data,document.getElementById(`chart${this.id}`)),this.hideOverview||(this.overview.destroy(),this.overviewOpts.scales.x.time=this.xAxisIsTime,this.overview=new x.uPlot(this.overviewOpts,this.data,document.getElementById(`overview${this.id}`))),this.addItems(s)},refreshIntervalMs:function(i){this.interval&&(clearInterval(this.interval),this.interval=setInterval(()=>{this.updateGraphData()},i))}},created(){this.api=new x.gi,this.title=`Graph ${this.id}`;for(const[i,t]of this.items.entries())this.data.push([]),this.indexes[this.subscriptionKey(t)]=i+1,t.color===void 0&&(t.color=this.colors[this.colorIndex]),this.colorIndex++,this.colorIndex===this.colors.length&&(this.colorIndex=0)},mounted(){const{chartSeries:i,overviewSeries:t}=this.items.reduce((s,a)=>{const l={spanGaps:!0};return s.chartSeries.push({...l,item:a,label:this.formatLabel(a),stroke:(o,n)=>this.items[n-1].color,width:2,value:(o,n)=>typeof n=="string"||isNaN(n)?"NaN":n==null?"--":n.toFixed(3)}),s.overviewSeries.push({...l}),s},{chartSeries:[],overviewSeries:[]});if(this.chartOpts={},this.sparkline)this.hideToolbarData=!0,this.hideOverviewData=!0,this.showOverview=!1,this.chartOpts={width:this.width,height:this.height,pxAlign:!1,cursor:{show:!1},select:{show:!1},legend:{show:!1},scales:{x:{time:!1}},axes:[{show:!1},{show:!1}],series:[{},{stroke:"white"}]},this.graph=new x.uPlot(this.chartOpts,this.data,document.getElementById(`chart${this.id}`));else{let s=Intl.DateTimeFormat().resolvedOptions().timeZone;this.timeZone&&this.timeZone!=="local"&&(s=this.timeZone),this.chartOpts={...this.getSize("chart"),...this.getScales(),...this.getAxes("chart"),plugins:[this.linesPlugin()],tzDate:a=>x.uPlot.tzDate(new Date(a*1e3),s),series:[{label:this.xAxisLabel,value:(a,l)=>this.xAxisFormatter(l)},...i],cursor:{drag:{x:!0,y:!1},sync:{key:"openc3"},bind:{mouseup:(a,l,o)=>n=>{this.state==="pause"&&a.select.width===0&&this.$emit("start"),o(n)}}},hooks:{setScale:[(a,l)=>{if(l==="x"&&!this.zoomOverview&&this.overview){this.zoomChart=!0;let o=Math.round(this.overview.valToPos(a.scales.x.min,"x")),n=Math.round(this.overview.valToPos(a.scales.x.max,"x"));this.overview.setSelect({left:o,width:n-o}),this.zoomChart=!1}}],setSelect:[a=>{this.state==="start"&&a.select.width>0&&this.$emit("pause")}],ready:[a=>{a.root.querySelector(".u-over").addEventListener("contextmenu",n=>{n.preventDefault(),this.itemMenu=!1,this.legendMenu=!1,this.editGraphMenuX=n.clientX,this.editGraphMenuY=n.clientY,this.editGraphMenu=!0});let o=a.root.querySelector(".u-legend");o.addEventListener("contextmenu",n=>{n.preventDefault(),this.editGraphMenu=!1,this.legendMenu=!1,this.itemMenuX=n.clientX,this.itemMenuY=n.clientY;let m=n.target.closest(".u-series"),p=Array.prototype.slice.call(o.childNodes[0].childNodes).indexOf(m),d=a.series[p];d.item?(this.selectedItem=d.item,this.itemMenu=!0):(this.itemMenu=!1,this.legendMenuX=n.clientX,this.legendMenuY=n.clientY,this.legendMenu=!0)}),o.querySelector("tbody").appendChild(this.$refs.info)}]}},this.graph=new x.uPlot(this.chartOpts,this.data,document.getElementById(`chart${this.id}`)),this.overviewOpts={...this.getSize("overview"),...this.getScales(),...this.getAxes("overview"),tzDate:a=>x.uPlot.tzDate(new Date(a*1e3),s),series:[...t],cursor:{y:!1,drag:{setScale:!1,x:!0,y:!1}},legend:{show:!1},hooks:{setSelect:[a=>{if(!this.zoomChart){this.state==="start"&&a.select.width>0&&this.$emit("pause"),this.zoomOverview=!0;let l=a.posToVal(a.select.left,"x"),o=a.posToVal(a.select.left+a.select.width,"x");this.graph.setScale("x",{min:l,max:o}),this.zoomOverview=!1}}]}},this.hideOverview||(this.overview=new x.uPlot(this.overviewOpts,this.data,document.getElementById(`overview${this.id}`))),this.moveLegend(this.legendPosition),window.addEventListener("resize",this.resize)}this.playbackMode!=="playback"?this.state!=="stop"&&this.startGraph():this.setupPlaybackMode()},beforeUnmount:function(){this.stopGraph(),this.cable.disconnect(),window.removeEventListener("resize",this.resize)},methods:{setupPlaybackMode:function(){this.stopGraph(),this.clearAllData();const i=this.itemSubscriptionKeys.map(t=>t.split("__").slice(2).join("__"));if(this.actualXAxisItem===T){const t=i[0].split("__").slice(0,2).join("__");i.unshift(`${t}__PACKET_TIMESECONDS__RAW`)}else this.xAxisIsAlsoGraphedItem||i.unshift(this.actualXAxisItem);this.api.get_tlm_available(i).then(t=>{this.graphItems=t,i.length!=t.length&&console.log("Error getting tlm available",i,this.graphItems)})},startGraph:function(){this.subscribe(),this.interval=setInterval(()=>{this.updateGraphData()},this.refreshIntervalMs)},stopGraph:function(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=null),this.interval&&(clearInterval(this.interval),this.interval=null)},updateGraphData:function(){if(this.state==="pause"||!this.dataChanged)return;this.graph.setData(this.data),this.overview&&this.overview.setData(this.data);const i=this.data[0];if(i&&i.length){let t=i.at(-1);const s=[i.at(0)];this.pointsGraphed<=i.length&&s.push(i.at(-this.pointsGraphed)),this.xAxisIsTime&&s.push(t-this.secondsGraphed);const a=Math.max(...s);a===t&&(t+=1),this.graph.setScale("x",{min:a,max:t})}this.dataChanged=!1},formatLabel(i){if(i.valueType==="CONVERTED"&&i.reduced==="DECOM")return i.itemName;{let t="";return i.valueType!=="CONVERTED"&&(t+=i.valueType),i.reduced!=="DECOM"&&(t!==""&&(t+=" "),t+=`${i.reduced.split("_")[1]} ${i.reducedType}`),`${i.itemName} (${t})`}},moveLegend:function(i){switch(i){case"bottom":this.graph.root.classList.remove("side-legend"),this.graph.root.classList.remove("left-legend"),this.graph.root.classList.remove("top-legend");break;case"top":this.graph.root.classList.remove("side-legend"),this.graph.root.classList.remove("left-legend"),this.graph.root.classList.add("top-legend");break;case"left":this.graph.root.classList.remove("top-legend"),this.graph.root.classList.add("side-legend"),this.graph.root.classList.add("left-legend");break;case"right":this.graph.root.classList.remove("top-legend"),this.graph.root.classList.remove("left-legend"),this.graph.root.classList.add("side-legend");break}this.legendPosition=i,this.resize()},clearErrors:function(){this.errors=[]},editGraphClose:function(i){this.editGraph=!1,this.title=i.title,this.legendPosition=i.legendPosition,this.graphMinY=i.graphMinY,this.graphMaxY=i.graphMaxY,this.lines=[...i.lines],this.graphStartDateTime=i.startDateTime,this.graphEndDateTime=i.endDateTime,this.$nextTick(()=>{if(this.needToUpdate){if(this.subscription==null)this.startGraph();else{let t=JSON.parse(JSON.stringify(this.items));this.removeItems(t),setTimeout(()=>{this.addItems(t)},0)}this.needToUpdate=!1}}),this.moveLegend(this.legendPosition),this.$emit("edit")},resize:function(){this.graph.setSize(this.getSize("chart")),this.overview&&this.overview.setSize(this.getSize("overview")),this.$emit("resize",this.id)},expandAll:function(){this.fullWidth=!0,this.fullHeight=!0,this.resize()},collapseAll:function(){this.fullWidth=!1,this.fullHeight=!1,this.resize()},expandWidth:function(){this.fullWidth=!0,this.resize()},collapseWidth:function(){this.fullWidth=!1,this.resize()},expandHeight:function(){this.fullHeight=!0,this.resize()},collapseHeight:function(){this.fullHeight=!1,this.resize()},minMaxTransition:function(){this.expand=!this.expand,this.$emit("min-max-graph",this.id)},setGraphRange:function(){let i=.1;(this.graphMinY||this.graphMinY===0||this.graphMaxY||this.graphMaxY===0)&&(i=0),this.graph.scales.y.range=(t,s,a)=>{let l=s;(this.graphMinY||this.graphMinY===0)&&(l=this.graphMinY);let o=a;return(this.graphMaxY||this.graphMaxY===0)&&(o=this.graphMaxY),x.uPlot.rangeNum(l,o,i,!0)}},subscribe:function(){this.cable.createSubscription("StreamingChannel",window.openc3Scope,{received:i=>this.received(i),connected:()=>{const i=[...this.items];!this.xAxisIsDefault&&!this.xAxisIsAlsoGraphedItem&&i.push(this.actualXAxisItem),this.addItemsToSubscription(i)},disconnected:i=>{i.allowReconnect&&this.errors.push({type:"disconnected",message:"OpenC3 backend connection disconnected",time:new Date().getTime()})},rejected:()=>{this.errors.push({type:"rejected",message:"OpenC3 backend connection rejected",time:new Date().getTime()})}}).then(i=>{this.subscription=i})},getSize:function(i){let t=0;const s=document.getElementById("openc3-nav-drawer");s&&(t=s.classList.contains("v-navigation-drawer--active")?s.clientWidth:0);let a=0;(this.legendPosition==="right"||this.legendPosition==="left")&&(a=document.getElementsByClassName("u-legend")[0].clientWidth);const l=Math.max(document.documentElement.clientWidth,window.innerWidth||0)-t-a,o=Math.max(document.documentElement.clientHeight,window.innerHeight||0),n=document.getElementsByClassName("v-expansion-panel")[0];let m=100;i==="overview"?this.fullHeight&&!this.hideOverviewData?this.showOverview=!0:this.showOverview=!1:(m=o-n.clientHeight-m-250,this.fullHeight||(m=m/2+10));let p=l-70;return this.fullWidth||(p=p/2-12),{width:this.width||p,height:this.height||m}},getScales:function(){return{scales:{x:{range(i,t,s){return t==null?this.xAxisIsTime?[1566453600,1566497660]:[0,1]:[t,s]},time:this.xAxisIsTime},y:{range(i,t,s){return t==null?[-100,100]:x.uPlot.rangeNum(t,s,.1,!0)}}}}},getAxes:function(i){let t="rgba(255, 255, 255, .1)",s="white";return{axes:[{stroke:s,grid:{show:!0,stroke:t,width:2}},{size:80,stroke:s,grid:{show:i!=="overview",stroke:t,width:2},values(a,l){return(l.some(o=>o>=1e7)||l.every(o=>o<.01))&&(l=l.map(o=>o.toExponential(3))),l}}]}},closeEditItem:function(i){this.editItem=!1,(this.graphEndDateTime!==null&&this.selectedItem!==i||this.selectedItem.valueType!==i.valueType||this.selectedItem.reduced!==i.reduced||this.selectedItem.reducedType!==i.reducedType)&&this.changeItem(i)},changeColor:function(i){let t=this.subscriptionKey(this.selectedItem),s=this.indexes[t];this.items[s-1].color=i,this.selectedItem.color=i,this.graph.root.querySelectorAll(".u-marker")[s].style.borderColor=i},changeLimits:function(i){let t=this.subscriptionKey(this.selectedItem),s=this.indexes[t];this.items[s-1].limits=i,this.selectedItem.limits=i,this.limitsValues=i},linesPlugin:function(){return{hooks:{draw:i=>{const{ctx:t,bbox:s}=i,a=i.valToPos(i.scales.y.min,"y",!0),l=i.valToPos(i.scales.y.max,"y",!0),o=i.valToPos(this.limitsValues[0],"y",!0),n=i.valToPos(this.limitsValues[1],"y",!0),m=i.valToPos(this.limitsValues[2],"y",!0),p=i.valToPos(this.limitsValues[3],"y",!0);if(this.lines.forEach(d=>{i.scales.y.min<=d.yValue&&d.yValue<=i.scales.y.max&&(t.save(),t.beginPath(),t.strokeStyle=d.color,t.lineWidth=2,t.moveTo(s.left,i.valToPos(d.yValue,"y",!0)),t.lineTo(s.left+s.width,i.valToPos(d.yValue,"y",!0)),t.stroke(),t.restore())}),t.save(),t.beginPath(),t.fillStyle="rgba(255,0,0,0.15)",i.scales.y.min<this.limitsValues[0]){let d=o<l?l:o;t.fillRect(s.left,o,s.width,a-d)}if(i.scales.y.max>this.limitsValues[3]){let d=a<p?a:p;t.fillRect(s.left,l,s.width,d-l)}if(t.fillStyle="rgba(255,255,0,0.15)",i.scales.y.min<this.limitsValues[1]&&i.scales.y.max>this.limitsValues[0]){let d=n<l?l:n;t.fillRect(s.left,d,s.width,o-d)}if(i.scales.y.max>this.limitsValues[2]&&i.scales.y.min<this.limitsValues[3]){let d=a<p?a:p,c=a<m?a:m;t.fillRect(s.left,d,s.width,c-d)}if(t.fillStyle="rgba(0,255,0,0.15)",this.limitsValues.length===4){if(i.scales.y.min<this.limitsValues[2]&&i.scales.y.max>this.limitsValues[1]){let d=m<l?l:m,c=a<n?a:n;t.fillRect(s.left,d,s.width,c-d)}}else{const d=i.valToPos(this.limitsValues[4],"y",!0),c=i.valToPos(this.limitsValues[5],"y",!0);if(i.scales.y.min<this.limitsValues[4]&&i.scales.y.max>this.limitsValues[1]){let v=d<l?l:d;t.fillRect(s.left,v,s.width,n-v)}if(i.scales.y.max>this.limitsValues[5]&&i.scales.y.min<this.limitsValues[2]){let v=a<m?a:m,u=a<c?a:c;t.fillRect(s.left,v,s.width,u-v)}t.fillStyle="rgba(0,0,255,0.15)";let y=c<l?l:c,f=a<d?a:d;t.fillRect(s.left,y,s.width,f-y)}t.stroke(),t.restore()}}}},changeItem:function(i){this.removeItems([this.selectedItem]),this.selectedItem.valueType=i.valueType,this.selectedItem.reduced=i.reduced,this.selectedItem.reducedType=i.reducedType,setTimeout(()=>{this.addItems([this.selectedItem])},0)},addItems:function(i,t="CONVERTED"){i.forEach(s=>{s.valueType||(s.valueType=t),s.color||(s.color=this.colors[this.colorIndex]),s.limits||(s.limits=[]),s.limits.length>0&&(this.limitsValues=s.limits),this.colorIndex=(this.colorIndex+1)%this.colors.length,this.items.push(s);const a=this.data.length;this.graph.addSeries(this.createSeriesConfig(s),a),this.overview&&this.overview.addSeries(this.createOverviewSeriesConfig(),a),this.data.splice(a,0,Array(this.data[0].length)),this.indexes[this.subscriptionKey(s)]=a}),this.updateColorIndex(i),this.xAxisIsDefault||i.push(this.actualXAxisItem),this.addItemsToSubscription(i),this.$emit("resize"),this.$emit("edit")},createSeriesConfig:function(i){return{spanGaps:!0,item:i,label:this.formatLabel(i),stroke:(t,s)=>this.items[s-1].color,width:2,value:(t,s)=>typeof s=="string"||isNaN(s)?"NaN":s==null?"--":Math.abs(s)<.01&&s!==0||Math.abs(s)>=1e7?s.toExponential(6):s.toFixed(6)}},createOverviewSeriesConfig:function(){return{spanGaps:!0,stroke:(i,t)=>this.items[t-1].color}},updateColorIndex:function(i){const t=i[i.length-1];if(t){const s=this.colors.indexOf(t.color);s!==-1&&(this.colorIndex=(s+1)%this.colors.length)}},addItemsToSubscription:function(i=this.items){let t=this.startTime;this.graphStartDateTime&&(t=this.graphStartDateTime);const s=i.map(a=>{if(typeof a=="object")return this.subscriptionKey(a);if(typeof a=="string")return a;throw new Error(`Invalid subscription item type for ${a}: ${typeof a}`)});this.subscription&&OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(a=>{a&&OpenC3Auth.setTokens(),this.subscription.perform("add",{scope:window.openc3Scope,token:localStorage.openc3Token,items:s,start_time:t,end_time:this.graphEndDateTime})})},clearAllData:function(){this.data[0]=[],this.clearData(this.items)},clearData:function(i){for(const t of i.map(this.subscriptionKey)){let s=this.indexes[t];this.data[s]=Array(this.data[0].length).fill(null),this.graph.setData(this.data),this.overview&&this.overview.setData(this.data)}this.data.length===2&&(this.data[0]=[],this.graph.setData(this.data),this.overview&&this.overview.setData(this.data))},removeItems:function(i){this.removeItemsFromSubscription(i);for(const t of i.map(this.subscriptionKey)){const s=this.reorderIndexes(t);this.items.splice(s-1,1),this.data.splice(s,1),this.graph.delSeries(s),this.graph.setData(this.data),this.overview&&(this.overview.delSeries(s),this.overview.setData(this.data))}this.data.length===1&&(this.data[0]=[],this.graph.setData(this.data),this.overview&&this.overview.setData(this.data)),this.$emit("resize"),this.$emit("edit")},removeItemsFromSubscription:function(i=this.items){if(this.subscription){const t=i.map(s=>{if(typeof s=="object")return this.subscriptionKey(s);if(typeof s=="string")return s;throw new Error(`Invalid subscription item type for ${s}: ${typeof s}`)});this.subscription.perform("remove",{scope:window.openc3Scope,token:localStorage.openc3Token,items:t})}},reorderIndexes:function(i){let t=this.indexes[i];delete this.indexes[i];for(let s in this.indexes)this.indexes[s]>t&&(this.indexes[s]-=1);return t},received:function(i){this.cable.recordPing();for(let t=0;t<i.length;t++){if(!i[t].hasOwnProperty(this.actualXAxisItem))continue;let s=this.xAxisConverter(i[t][this.actualXAxisItem]),a=this.data[0].length;if(a===0||s>this.data[0][a-1]){for(let l=0;l<this.data.length;l++)this.data[l].push(null);this.setDataAtIndex(this.data[0].length-1,s,i[t])}else{let l=x.bs(this.data[0],s,this.bsComparator);if(l>=0){if(!Number.isFinite(s))throw new RangeError(`Invalid x-axis value: ${s}`);for(;l>=0;)s-=1e-5,l=x.bs(this.data[0],s,this.bsComparator);const o=-l-1;for(let n=0;n<this.data.length;n++)this.data[n].splice(o,0,null);this.setDataAtIndex(o,s,i[t])}else{const o=-l-1;for(let n=0;n<this.data.length;n++)this.data[n].splice(o,0,null);this.setDataAtIndex(o,s,i[t])}}}if(this.startTime==null&&this.data[0][0]){let t=this.data[0][0]*1e9;this.$emit("started",t)}this.dataChanged=!0},bsComparator:function(i,t){return i-t},setDataAtIndex:function(i,t,s){this.data[0][i]=t;for(const[a,l]of Object.entries(s)){if(a===this.actualXAxisItem&&!this.xAxisIsAlsoGraphedItem)continue;const o=this.indexes[a];if(o){let n=this.data[o];if(l!=null&&l.raw)n[i]=null;else if(typeof l=="string"){if(n[i]=null,!a.includes("__RAW")){for(let m of this.items)if(this.subscriptionKey(m)===a){this.selectedItem=m;break}this.changeItem({valueType:"RAW",reduced:this.selectedItem.reduced,reducedType:this.selectedItem.reducedType})}}else n[i]=l}}},subscriptionKey:function(i){let t=`${i.reduced}__TLM__${i.targetName}__${i.packetName}__${i.itemName}__${i.valueType}`;return(i.reduced==="REDUCED_MINUTE"||i.reduced==="REDUCED_HOUR"||i.reduced==="REDUCED_DAY")&&(t+=`__${i.reducedType}`),t}}},J={id:"chart",ref:"chart",class:"pa-1"},Q=["id"],$=["id"],ee={key:5,ref:"info",class:"u-series"};function te(i,t,s,a,l,o){const n=e.resolveComponent("v-btn"),m=e.resolveComponent("v-spacer"),p=e.resolveComponent("v-toolbar"),d=e.resolveComponent("v-expand-transition"),c=e.resolveComponent("v-card"),y=e.resolveComponent("graph-edit-dialog"),f=e.resolveComponent("v-text-field"),v=e.resolveComponent("v-row"),u=e.resolveComponent("v-textarea"),C=e.resolveComponent("v-dialog"),g=e.resolveComponent("v-list-item-title"),w=e.resolveComponent("v-list-item"),N=e.resolveComponent("v-list"),b=e.resolveComponent("v-menu"),D=e.resolveComponent("graph-edit-item-dialog"),_=e.resolveComponent("v-list-subheader"),V=e.resolveComponent("v-icon"),A=e.resolveComponent("v-tooltip");return e.openBlock(),e.createElementBlock("div",{onClick:t[22]||(t[22]=e.withModifiers(h=>i.$emit("click"),["prevent"]))},[e.createVNode(c,null,{default:e.withCtx(()=>[e.withDirectives(e.createVNode(p,{height:"24",class:e.normalizeClass(["pl-2 pr-2",s.selectedGraphId===s.id?"active":""])},{default:e.withCtx(()=>[e.withDirectives(e.createVNode(n,{class:"mx-2",icon:"mdi-alert",density:"compact",variant:"text","aria-label":"Show Errors",onClick:t[0]||(t[0]=()=>{l.errorDialog=!0})},null,512),[[e.vShow,l.errors.length!==0]]),e.createVNode(n,{icon:"mdi-pencil",variant:"text",density:"compact","data-test":"edit-graph-icon","aria-label":"Edit Graph",onClick:t[1]||(t[1]=()=>{l.editGraph=!0})}),e.createVNode(m),e.createElementVNode("span",null,e.toDisplayString(l.title),1),e.createVNode(m),l.expand?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[o.calcFullSize?(e.openBlock(),e.createBlock(n,{key:0,icon:"mdi-arrow-collapse",variant:"text",density:"compact","data-test":"collapse-all",onClick:o.collapseAll},null,8,["onClick"])):(e.openBlock(),e.createBlock(n,{key:1,icon:"mdi-arrow-expand",variant:"text",density:"compact","data-test":"expand-all",onClick:o.expandAll},null,8,["onClick"])),l.fullWidth?(e.openBlock(),e.createBlock(n,{key:2,icon:"mdi-arrow-collapse-horizontal",variant:"text",density:"compact","data-test":"collapse-width",onClick:o.collapseWidth},null,8,["onClick"])):(e.openBlock(),e.createBlock(n,{key:3,icon:"mdi-arrow-expand-horizontal",variant:"text",density:"compact","data-test":"expand-width",onClick:o.expandWidth},null,8,["onClick"])),l.fullHeight?(e.openBlock(),e.createBlock(n,{key:4,icon:"mdi-arrow-collapse-vertical",variant:"text",density:"compact","data-test":"collapse-height",onClick:o.collapseHeight},null,8,["onClick"])):(e.openBlock(),e.createBlock(n,{key:5,icon:"mdi-arrow-expand-vertical",variant:"text",density:"compact","data-test":"expand-height",onClick:o.expandHeight},null,8,["onClick"]))],64)):e.createCommentVNode("",!0),l.expand?(e.openBlock(),e.createBlock(n,{key:1,icon:"mdi-window-minimize",variant:"text",density:"compact","data-test":"minimize-screen-icon",onClick:o.minMaxTransition},null,8,["onClick"])):(e.openBlock(),e.createBlock(n,{key:2,icon:"mdi-window-maximize",variant:"text",density:"compact","data-test":"maximize-screen-icon",onClick:o.minMaxTransition},null,8,["onClick"])),e.createVNode(n,{icon:"mdi-close-box",variant:"text",density:"compact","data-test":"close-graph-icon",onClick:t[2]||(t[2]=e.withModifiers(h=>i.$emit("close-graph"),["stop"]))})]),_:1},8,["class"]),[[e.vShow,!l.hideToolbarData]]),e.createVNode(d,null,{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",J,[e.createElementVNode("div",{id:`chart${s.id}`},null,8,Q),t[23]||(t[23]=e.createElementVNode("div",{id:"betweenCharts"},null,-1)),e.withDirectives(e.createElementVNode("div",{id:`overview${s.id}`},null,8,$),[[e.vShow,l.showOverview]])],512),[[e.vShow,l.expand]])]),_:1})]),_:1}),l.editGraph?(e.openBlock(),e.createBlock(y,{key:0,modelValue:l.editGraph,"onUpdate:modelValue":t[3]||(t[3]=h=>l.editGraph=h),"x-axis-item":l.xAxisItem,"onUpdate:xAxisItem":t[4]||(t[4]=h=>l.xAxisItem=h),title:l.title,"legend-position":l.legendPosition,items:l.items,"graph-min-y":l.graphMinY,"graph-max-y":l.graphMaxY,lines:l.lines,colors:l.colors,"start-date-time":l.graphStartDateTime,"end-date-time":l.graphEndDateTime,"time-zone":s.timeZone,"x-axis-item-packet":o.allowableXAxisItemPacket,onRemove:t[5]||(t[5]=h=>o.removeItems([h])),onOk:o.editGraphClose,onCancel:t[6]||(t[6]=h=>l.editGraph=!1)},null,8,["modelValue","x-axis-item","title","legend-position","items","graph-min-y","graph-max-y","lines","colors","start-date-time","end-date-time","time-zone","x-axis-item-packet","onOk"])):e.createCommentVNode("",!0),e.createVNode(C,{modelValue:l.errorDialog,"onUpdate:modelValue":t[8]||(t[8]=h=>l.errorDialog=h),"max-width":"600"},{default:e.withCtx(()=>[e.createVNode(p,{height:"24"},{default:e.withCtx(()=>[e.createVNode(m),t[24]||(t[24]=e.createElementVNode("span",null," Errors ",-1)),e.createVNode(m)]),_:1}),e.createVNode(c,{class:"pa-3"},{default:e.withCtx(()=>[e.createVNode(v,{dense:""},{default:e.withCtx(()=>[e.createVNode(f,{modelValue:l.title,"onUpdate:modelValue":t[7]||(t[7]=h=>l.title=h),readonly:"","hide-details":"",class:"pb-2",label:"Graph Title"},null,8,["modelValue"])]),_:1}),e.createVNode(v,{class:"my-3"},{default:e.withCtx(()=>[e.createVNode(u,{readonly:"",rows:"8",value:o.error},null,8,["value"])]),_:1}),e.createVNode(v,null,{default:e.withCtx(()=>[e.createVNode(n,{block:"",onClick:o.clearErrors},{default:e.withCtx(()=>[...t[25]||(t[25]=[e.createTextVNode(" Clear ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),l.editGraphMenu?(e.openBlock(),e.createBlock(b,{key:1,modelValue:l.editGraphMenu,"onUpdate:modelValue":t[10]||(t[10]=h=>l.editGraphMenu=h),target:[l.editGraphMenuX,l.editGraphMenuY],absolute:"","offset-y":""},{default:e.withCtx(()=>[e.createVNode(N,null,{default:e.withCtx(()=>[e.createVNode(w,{onClick:t[9]||(t[9]=h=>l.editGraph=!0)},{default:e.withCtx(()=>[e.createVNode(g,{style:{cursor:"pointer"}},{default:e.withCtx(()=>[e.createTextVNode(" Edit "+e.toDisplayString(l.title),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue","target"])):e.createCommentVNode("",!0),l.editItem?(e.openBlock(),e.createBlock(D,{key:2,modelValue:l.editItem,"onUpdate:modelValue":t[11]||(t[11]=h=>l.editItem=h),colors:l.colors,item:l.selectedItem,onChangeColor:o.changeColor,onChangeLimits:o.changeLimits,onCancel:t[12]||(t[12]=h=>l.editItem=!1),onClose:o.closeEditItem},null,8,["modelValue","colors","item","onChangeColor","onChangeLimits","onClose"])):e.createCommentVNode("",!0),l.itemMenu?(e.openBlock(),e.createBlock(b,{key:3,modelValue:l.itemMenu,"onUpdate:modelValue":t[16]||(t[16]=h=>l.itemMenu=h),target:[l.itemMenuX,l.itemMenuY],absolute:"","offset-y":""},{default:e.withCtx(()=>[e.createVNode(N,{nav:"",density:"compact"},{default:e.withCtx(()=>[e.createVNode(_,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.selectedItem.targetName)+" "+e.toDisplayString(l.selectedItem.packetName)+" "+e.toDisplayString(l.selectedItem.itemName),1)]),_:1}),e.createVNode(w,{onClick:t[13]||(t[13]=h=>l.editItem=!0)},{prepend:e.withCtx(()=>[e.createVNode(V,{icon:"mdi-pencil"})]),default:e.withCtx(()=>[e.createVNode(g,null,{default:e.withCtx(()=>[...t[26]||(t[26]=[e.createTextVNode(" Edit ",-1)])]),_:1})]),_:1}),e.createVNode(w,{onClick:t[14]||(t[14]=h=>o.clearData([l.selectedItem]))},{prepend:e.withCtx(()=>[e.createVNode(V,{icon:"mdi-eraser"})]),default:e.withCtx(()=>[e.createVNode(g,null,{default:e.withCtx(()=>[...t[27]||(t[27]=[e.createTextVNode(" Clear ",-1)])]),_:1})]),_:1}),e.createVNode(w,{onClick:t[15]||(t[15]=h=>o.removeItems([l.selectedItem]))},{prepend:e.withCtx(()=>[e.createVNode(V,{icon:"mdi-delete"})]),default:e.withCtx(()=>[e.createVNode(g,null,{default:e.withCtx(()=>[...t[28]||(t[28]=[e.createTextVNode(" Delete ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue","target"])):e.createCommentVNode("",!0),l.legendMenu?(e.openBlock(),e.createBlock(b,{key:4,modelValue:l.legendMenu,"onUpdate:modelValue":t[21]||(t[21]=h=>l.legendMenu=h),target:[l.legendMenuX,l.legendMenuY],absolute:"","offset-y":""},{default:e.withCtx(()=>[e.createVNode(N,null,{default:e.withCtx(()=>[e.createVNode(w,{onClick:t[17]||(t[17]=h=>o.moveLegend("top"))},{default:e.withCtx(()=>[e.createVNode(g,{style:{cursor:"pointer"}},{default:e.withCtx(()=>[...t[29]||(t[29]=[e.createTextVNode(" Legend Top ",-1)])]),_:1})]),_:1}),e.createVNode(w,{onClick:t[18]||(t[18]=h=>o.moveLegend("bottom"))},{default:e.withCtx(()=>[e.createVNode(g,{style:{cursor:"pointer"}},{default:e.withCtx(()=>[...t[30]||(t[30]=[e.createTextVNode(" Legend Bottom ",-1)])]),_:1})]),_:1}),e.createVNode(w,{onClick:t[19]||(t[19]=h=>o.moveLegend("left"))},{default:e.withCtx(()=>[e.createVNode(g,{style:{cursor:"pointer"}},{default:e.withCtx(()=>[...t[31]||(t[31]=[e.createTextVNode(" Legend Left ",-1)])]),_:1})]),_:1}),e.createVNode(w,{onClick:t[20]||(t[20]=h=>o.moveLegend("right"))},{default:e.withCtx(()=>[e.createVNode(g,{style:{cursor:"pointer"}},{default:e.withCtx(()=>[...t[32]||(t[32]=[e.createTextVNode(" Legend RIght ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue","target"])):e.createCommentVNode("",!0),s.sparkline?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",ee,[e.createVNode(A,{text:"Click item to toggle, Right click to edit",location:"top"},{activator:e.withCtx(({props:h})=>[e.createVNode(V,e.normalizeProps(e.guardReactiveProps(h)),{default:e.withCtx(()=>[...t[33]||(t[33]=[e.createTextVNode(" mdi-information-variant-circle ",-1)])]),_:1},16)]),_:1})],512))])}const ie=E._export_sfc(Z,[["render",te],["__scopeId","data-v-c388ce30"]]);exports.Graph=ie;exports.GraphEditDialog=P;exports.GraphEditItemDialog=G;
|
|
2
|
-
//# sourceMappingURL=Graph-DxC2MPYf.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Graph-DxC2MPYf.cjs","sources":["../src/components/GraphEditDialog.vue","../src/components/GraphEditItemDialog.vue","../src/components/Graph.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\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" max-width=\"700\" @keydown.esc=\"$emit('cancel')\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Edit Graph </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-tabs v-model=\"tab\" class=\"ml-3\">\n <v-tab value=\"0\"> Settings </v-tab>\n <v-tab value=\"1\"> Scale / Lines </v-tab>\n <v-tab value=\"2\"> Items </v-tab>\n </v-tabs>\n <v-tabs-window v-model=\"tab\">\n <v-tabs-window-item value=\"0\" eager>\n <div class=\"edit-box\">\n <v-row>\n <v-col>\n <v-card-text class=\"pa-0\">\n <v-text-field\n v-model=\"graph.title\"\n class=\"pb-2\"\n label=\"Title\"\n hide-details\n />\n </v-card-text>\n </v-col>\n <v-col>\n <v-select\n v-model=\"graph.legendPosition\"\n label=\"Legend Position\"\n hide-details\n :items=\"legendPositions\"\n style=\"max-width: 280px\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Select a start date/time for the graph. Leave blank for start now.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"startDate\"\n label=\"Start Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"startTime\"\n label=\"Start Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n <v-card-text class=\"pa-0\">\n Select a end date/time for the graph. Leave blank for continuous\n real-time graphing.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"endDate\"\n label=\"End Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"endTime\"\n label=\"End Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"1\" eager>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Set a min or max Y value to override automatic scaling\n </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMinY\"\n hide-details\n label=\"Min Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMaxY\"\n hide-details\n label=\"Max Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-list density=\"compact\" class=\"horizontal-lines\">\n <v-list-item>\n <span style=\"padding-top: 5px\">\n Add horizontal lines to the graph\n </span>\n <v-spacer />\n <v-btn @click=\"addLine()\"> New Line </v-btn>\n </v-list-item>\n <v-list-item\n v-for=\"(item, i) in graph.lines\"\n :key=\"i\"\n :value=\"item\"\n color=\"primary\"\n >\n <v-row>\n <v-col>\n <v-text-field v-model=\"item.yValue\" label=\"Y Value\" />\n </v-col>\n <v-col>\n <v-select\n v-model=\"item.color\"\n label=\"Color\"\n hide-details\n :items=\"colors\"\n />\n </v-col>\n <v-col>\n <v-btn\n style=\"padding: 30px\"\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Line\"\n @click=\"removeLine(item)\"\n />\n </v-col>\n </v-row>\n </v-list-item>\n </v-list>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0 text-medium-emphasis\">\n Choose a different item to use for the graph's X axis. If\n unchecked, the graph will use the packet's PACKET_TIMESECONDS item\n if it exists, otherwise it will use RECEIVED_TIMESECONDS.\n <br />\n <span class=\"font-italic\">\n Note that the graph may not work correctly if you choose an item\n that does not strictly increase in value. It is recommended to\n use a counter or timestamp.\n </span>\n </v-card-text>\n <v-checkbox\n v-model=\"customXAxisEnabled\"\n :disabled=\"!xAxisItemPacket\"\n label=\"Custom X axis item\"\n density=\"compact\"\n hide-details\n @update:model-value=\"customXAxisToggled\"\n />\n <v-card-text\n v-if=\"!xAxisItemPacket\"\n class=\"pa-0 text-medium-emphasis\"\n >\n All items on the graph must be in the same packet to enable this\n feature.\n </v-card-text>\n <target-packet-item-chooser\n v-if=\"customXAxisEnabled && xAxisItemPacket\"\n :initial-target-name=\"xAxisItemPacket.targetName\"\n :initial-packet-name=\"xAxisItemPacket.packetName\"\n :initial-item-name=\"initialXAxisItem\"\n choose-item\n lock-target\n lock-packet\n button-text=\"Set\"\n @on-set=\"xAxisItemChanged\"\n @add-item=\"xAxisItemSelected\"\n />\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"2\" eager>\n <v-data-table\n item-key=\"itemId\"\n class=\"elevation-1 my-2\"\n data-test=\"edit-graph-items\"\n :headers=\"itemHeaders\"\n :items=\"editItems\"\n :items-per-page=\"5\"\n :footer-props=\"{\n 'items-per-page-options': [5],\n }\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Item\"\n @click=\"$emit('remove', item)\"\n />\n </template>\n <template #no-data>\n <span> Currently no items on this graph </span>\n </template>\n </v-data-table>\n </v-tabs-window-item>\n </v-tabs-window>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"closeOk\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { TimeFilters } from '@/util'\nimport TargetPacketItemChooser from './TargetPacketItemChooser.vue'\nimport { isValid, parse, toDate } from 'date-fns'\nexport default {\n components: {\n TargetPacketItemChooser,\n },\n mixins: [TimeFilters],\n props: {\n modelValue: Boolean, // modelValue is the default prop when using v-model\n title: {\n type: String,\n required: true,\n },\n legendPosition: {\n type: String,\n required: true,\n },\n items: {\n type: Array,\n required: true,\n },\n graphMinY: {\n type: Number,\n },\n graphMaxY: {\n type: Number,\n },\n lines: {\n type: Array,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n startDateTime: {\n type: Number,\n },\n endDateTime: {\n type: Number,\n },\n timeZone: {\n type: String,\n required: true,\n },\n xAxisItemPacket: {\n type: Object,\n default: undefined,\n },\n xAxisItem: {\n type: String,\n default: '__time',\n },\n },\n emits: ['cancel', 'ok', 'remove', 'update:modelValue', 'update:xAxisItem'],\n data: function () {\n return {\n tab: 0,\n graph: {},\n customXAxisEnabled: false,\n selectedXAxisItem: null,\n pendingXAxisSelection: null,\n legendPositions: ['top', 'bottom', 'left', 'right'],\n startDate: null,\n startTime: null,\n endDate: null,\n endTime: null,\n lineHeaders: [\n { title: 'Y Value', value: 'yValue' },\n { title: 'Color', value: 'color' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n itemHeaders: [\n { title: 'Target Name', value: 'targetName' },\n { title: 'Packet Name', value: 'packetName' },\n { title: 'Item Name', value: 'itemName' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n rules: {\n date: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'yyyy-MM-dd', new Date())) ||\n 'Invalid date (YYYY-MM-DD)'\n )\n } catch (e) {\n return 'Invalid date (YYYY-MM-DD)'\n }\n },\n time: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'HH:mm:ss', new Date())) ||\n 'Invalid time (HH:MM:SS)'\n )\n } catch (e) {\n return 'Invalid time (HH:MM:SS)'\n }\n },\n },\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n editItems: function () {\n if (!this.items) return []\n let itemId = 0\n return this.items.map((item) => {\n itemId += 1\n return { ...item, itemId }\n })\n },\n initialXAxisItem: function () {\n // Just for TargetPacketItemChooser\n if (this.xAxisItem === '__time') {\n return\n }\n return this.xAxisItem.split('__').at(4)\n },\n },\n created() {\n this.graph = {\n title: this.title,\n legendPosition: this.legendPosition,\n items: this.items,\n graphMinY: this.graphMinY,\n graphMaxY: this.graphMaxY,\n lines: [...this.lines],\n }\n this.customXAxisEnabled = this.xAxisItem && this.xAxisItem !== '__time'\n this.selectedXAxisItem = this.xAxisItem\n // Set the date and time if they pass a dateTime or set a default\n // Start needs a default because if the timeZone is UTC the time will still be local time\n if (this.startDateTime) {\n // Use the passed dateTime as is\n let date = toDate(this.startDateTime / 1000000)\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n } else {\n // Create a new date 1 hr in the past as a default\n let date = new Date() - 3600000\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n }\n // Only set end date / time if it is explicitly passed\n if (this.endDateTime) {\n let date = toDate(this.endDateTime / 1000000)\n this.endDate = this.formatDate(date, this.timeZone)\n this.endTime = this.formatTimeHMS(date, this.timeZone)\n }\n },\n methods: {\n closeOk() {\n if (!!this.startDate && !!this.startTime) {\n this.graph.startDateTime = this.startDate + ' ' + this.startTime\n } else {\n this.graph.startDateTime = null\n }\n if (!!this.endDate && !!this.endTime) {\n this.graph.endDateTime = this.endDate + ' ' + this.endTime\n } else {\n this.graph.endDateTime = null\n }\n this.$emit('ok', this.graph)\n },\n addLine() {\n this.graph.lines.push({ yValue: 0, color: 'white' })\n },\n removeLine(dline) {\n let i = this.graph.lines.indexOf(dline)\n this.graph.lines.splice(i, 1)\n },\n customXAxisToggled(enabled) {\n if (!enabled) {\n this.selectedXAxisItem = '__time'\n this.$emit('update:xAxisItem', '__time')\n }\n },\n xAxisItemChanged(selection) {\n this.pendingXAxisSelection = selection\n },\n xAxisItemSelected(selection) {\n if (selection.targetName && selection.packetName && selection.itemName) {\n const xAxisItemKey = `DECOM__TLM__${selection.targetName}__${selection.packetName}__${selection.itemName}__CONVERTED`\n this.selectedXAxisItem = xAxisItemKey\n this.$emit('update:xAxisItem', xAxisItemKey)\n }\n },\n },\n}\n</script>\n\n<style>\n.edit-box {\n color: hsla(0, 0%, 100%, 0.7);\n background-color: var(--color-background-surface-default);\n padding: 10px;\n margin-top: 10px;\n}\n\n/* For the Y Axis item editor within the Edit Dialog */\n.v-small-dialog__content {\n background-color: var(--color-background-surface-selected);\n padding: 5px 5px;\n}\n\n.horizontal-lines {\n background-color: var(--color-background-surface-default);\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 2023, 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 <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" width=\"400\" @keydown.enter=\"success()\">\n <v-card>\n <v-card-title class=\"mb-2\">Edit Item</v-card-title>\n <v-card-text>\n <v-select\n v-model=\"editItem.valueType\"\n variant=\"outlined\"\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n class=\"mb-2\"\n />\n <v-select\n v-model=\"editItem.reduced\"\n variant=\"outlined\"\n hide-details\n label=\"Reduction\"\n :items=\"reduction\"\n class=\"mb-2\"\n />\n <v-select\n v-model=\"editItem.reducedType\"\n variant=\"outlined\"\n hide-details\n label=\"Reduced Type\"\n :items=\"reducedTypes\"\n :disabled=\"editItem.reduced === 'DECOM'\"\n class=\"mb-2\"\n />\n <v-select\n v-model=\"editItem.color\"\n variant=\"outlined\"\n hide-details\n label=\"Color\"\n :items=\"colors\"\n class=\"mb-2\"\n @update:model-value=\"$emit('changeColor', $event)\"\n />\n <div v-if=\"limitsNames.length > 1\">\n <v-select\n v-model=\"limitsName\"\n variant=\"outlined\"\n hide-details\n label=\"Display Limits\"\n :items=\"limitsNames\"\n @update:model-value=\"$emit('changeLimits', limits[limitsName])\"\n />\n <div class=\"pa-3\">{{ limitsName }}: {{ limits[limitsName] }}</div>\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"$emit('close', editItem)\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\nexport default {\n props: {\n modelValue: Boolean,\n item: {\n type: Object,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n },\n emits: [\n 'cancel',\n 'changeColor',\n 'changeLimits',\n 'close',\n 'update:modelValue',\n ],\n data: function () {\n return {\n editItem: null,\n limitsName: 'NONE',\n // NONE: [] matches the default limits assigned in Graph addItems\n limits: { NONE: [] },\n valueTypes: ['CONVERTED', 'RAW'],\n reduction: [\n // Map NONE to DECOM for clarity\n { title: 'NONE', value: 'DECOM' },\n { title: 'REDUCED_MINUTE', value: 'REDUCED_MINUTE' },\n { title: 'REDUCED_HOUR', value: 'REDUCED_HOUR' },\n { title: 'REDUCED_DAY', value: 'REDUCED_DAY' },\n ],\n reducedTypes: ['MIN', 'MAX', 'AVG', 'STDDEV'],\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 limitsNames() {\n return Object.keys(this.limits)\n },\n },\n async created() {\n this.editItem = { ...this.item }\n new OpenC3Api()\n .get_item(this.item.targetName, this.item.packetName, this.item.itemName)\n .then((details) => {\n for (const [key, value] of Object.entries(details.limits)) {\n if (Object.keys(value).includes('red_low')) {\n this.limits[key] = Object.values(value)\n }\n }\n // Locate the key for the value array that we pass in\n this.limitsName = Object.keys(this.limits).find(\n // Little hack to compare arrays you convert them to strings\n (key) => this.limits[key] + '' === this.editItem.limits + '',\n )\n })\n },\n}\n</script>\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# A portion of this file was funded by Blue Origin Enterprises, L.P.\n# See https://github.com/OpenC3/cosmos/pull/1957\n-->\n\n<template>\n <div @click.prevent=\"$emit('click')\">\n <v-card>\n <v-toolbar\n v-show=\"!hideToolbarData\"\n height=\"24\"\n class=\"pl-2 pr-2\"\n :class=\"selectedGraphId === id ? 'active' : ''\"\n >\n <v-btn\n v-show=\"errors.length !== 0\"\n class=\"mx-2\"\n icon=\"mdi-alert\"\n density=\"compact\"\n variant=\"text\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"edit-graph-icon\"\n aria-label=\"Edit Graph\"\n @click=\"\n () => {\n editGraph = true\n }\n \"\n />\n\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n\n <template v-if=\"expand\">\n <v-btn\n v-if=\"calcFullSize\"\n icon=\"mdi-arrow-collapse\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-all\"\n @click=\"collapseAll\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-all\"\n @click=\"expandAll\"\n />\n\n <v-btn\n v-if=\"fullWidth\"\n icon=\"mdi-arrow-collapse-horizontal\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-width\"\n @click=\"collapseWidth\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand-horizontal\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-width\"\n @click=\"expandWidth\"\n />\n\n <v-btn\n v-if=\"fullHeight\"\n icon=\"mdi-arrow-collapse-vertical\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-height\"\n @click=\"collapseHeight\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand-vertical\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-height\"\n @click=\"expandHeight\"\n />\n </template>\n\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 @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 @click=\"minMaxTransition\"\n />\n\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-graph-icon\"\n @click.stop=\"$emit('close-graph')\"\n />\n </v-toolbar>\n\n <v-expand-transition>\n <div v-show=\"expand\" id=\"chart\" ref=\"chart\" class=\"pa-1\">\n <div :id=\"`chart${id}`\"></div>\n <div id=\"betweenCharts\"></div>\n <div v-show=\"showOverview\" :id=\"`overview${id}`\"></div>\n </div>\n </v-expand-transition>\n </v-card>\n\n <!-- Edit graph dialog -->\n <graph-edit-dialog\n v-if=\"editGraph\"\n v-model=\"editGraph\"\n v-model:x-axis-item=\"xAxisItem\"\n :title=\"title\"\n :legend-position=\"legendPosition\"\n :items=\"items\"\n :graph-min-y=\"graphMinY\"\n :graph-max-y=\"graphMaxY\"\n :lines=\"lines\"\n :colors=\"colors\"\n :start-date-time=\"graphStartDateTime\"\n :end-date-time=\"graphEndDateTime\"\n :time-zone=\"timeZone\"\n :x-axis-item-packet=\"allowableXAxisItemPacket\"\n @remove=\"removeItems([$event])\"\n @ok=\"editGraphClose\"\n @cancel=\"editGraph = false\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" max-width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n v-model=\"title\"\n readonly\n hide-details\n class=\"pb-2\"\n label=\"Graph Title\"\n />\n </v-row>\n <v-row class=\"my-3\">\n <v-textarea readonly rows=\"8\" :value=\"error\" />\n </v-row>\n <v-row>\n <v-btn block @click=\"clearErrors\"> Clear </v-btn>\n </v-row>\n </v-card>\n </v-dialog>\n\n <!-- Edit right click context menu -->\n <v-menu\n v-if=\"editGraphMenu\"\n v-model=\"editGraphMenu\"\n :target=\"[editGraphMenuX, editGraphMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"editGraph = true\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ title }}\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <graph-edit-item-dialog\n v-if=\"editItem\"\n v-model=\"editItem\"\n :colors=\"colors\"\n :item=\"selectedItem\"\n @change-color=\"changeColor\"\n @change-limits=\"changeLimits\"\n @cancel=\"editItem = false\"\n @close=\"closeEditItem\"\n />\n\n <!-- Edit Item right click context menu -->\n <v-menu\n v-if=\"itemMenu\"\n v-model=\"itemMenu\"\n :target=\"[itemMenuX, itemMenuY]\"\n absolute\n offset-y\n >\n <v-list nav density=\"compact\">\n <v-list-subheader>\n {{ selectedItem.targetName }}\n {{ selectedItem.packetName }}\n {{ selectedItem.itemName }}\n </v-list-subheader>\n <v-list-item @click=\"editItem = true\">\n <template #prepend>\n <v-icon icon=\"mdi-pencil\" />\n </template>\n <v-list-item-title> Edit </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"clearData([selectedItem])\">\n <template #prepend>\n <v-icon icon=\"mdi-eraser\" />\n </template>\n <v-list-item-title> Clear </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"removeItems([selectedItem])\">\n <template #prepend>\n <v-icon icon=\"mdi-delete\" />\n </template>\n <v-list-item-title> Delete </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <!-- Edit Legend right click context menu -->\n <v-menu\n v-if=\"legendMenu\"\n v-model=\"legendMenu\"\n :target=\"[legendMenuX, legendMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"moveLegend('top')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Top\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('bottom')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Bottom\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('left')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Left\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('right')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend RIght\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <div v-if=\"!sparkline\" ref=\"info\" class=\"u-series\">\n <v-tooltip\n text=\"Click item to toggle, Right click to edit\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-icon v-bind=\"props\"> mdi-information-variant-circle </v-icon>\n </template>\n </v-tooltip>\n </div>\n </div>\n</template>\n\n<script>\nimport GraphEditDialog from './GraphEditDialog.vue'\nimport GraphEditItemDialog from './GraphEditItemDialog.vue'\nimport uPlot from 'uplot'\nimport bs from 'binary-search'\nimport { OpenC3Api, Cable } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\nimport 'uplot/dist/uPlot.min.css'\n\nconst DEFAULT_X_AXIS_ITEM = '__time'\n\nexport default {\n components: {\n GraphEditDialog,\n GraphEditItemDialog,\n },\n mixins: [TimeFilters],\n props: {\n id: {\n type: Number,\n required: true,\n },\n selectedGraphId: {\n type: Number,\n default: null,\n },\n state: {\n type: String,\n required: true,\n },\n // start time in nanoseconds to start the graph\n // this allows multiple graphs to be synchronized\n startTime: {\n type: Number,\n default: null,\n },\n secondsGraphed: {\n type: Number,\n required: true,\n },\n pointsSaved: {\n type: Number,\n required: true,\n },\n pointsGraphed: {\n type: Number,\n required: true,\n },\n refreshIntervalMs: {\n type: Number,\n default: 200,\n },\n hideToolbar: {\n type: Boolean,\n default: false,\n },\n hideOverview: {\n type: Boolean,\n default: false,\n },\n sparkline: {\n type: Boolean,\n default: false,\n },\n initialItems: {\n type: Array,\n default: () => [],\n },\n initialXAxisItem: {\n type: String,\n default: DEFAULT_X_AXIS_ITEM,\n },\n // These allow the parent to force a specific height and/or width\n height: {\n type: Number,\n default: null,\n },\n width: {\n type: Number,\n default: null,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n emits: [\n 'click',\n 'close-graph',\n 'edit',\n 'min-max-graph',\n 'pause',\n 'resize',\n 'start',\n 'started',\n ],\n data() {\n return {\n api: null,\n lines: [],\n active: true,\n expand: true,\n fullWidth: true,\n fullHeight: true,\n graph: null,\n editGraph: false,\n editGraphMenu: false,\n editGraphMenuX: 0,\n editGraphMenuY: 0,\n editItem: false,\n itemMenu: false,\n itemMenuX: 0,\n itemMenuY: 0,\n legendMenu: false,\n legendMenuX: 0,\n legendMenuY: 0,\n legendPosition: 'bottom',\n selectedItem: null,\n hideToolbarData: this.hideToolbar,\n showOverview: !this.hideOverview,\n hideOverviewData: this.hideOverview,\n title: '',\n overview: null,\n data: [[]],\n dataChanged: false,\n interval: null,\n graphMinY: null,\n graphMaxY: null,\n graphStartDateTime: null,\n graphEndDateTime: null,\n xAxisItem: this.initialXAxisItem, // '__time' or something like 'DECOM__TLM__INST__ADCS__RECEIVED_COUNT__CONVERTED'\n indexes: {},\n items: this.initialItems,\n graphItems: [],\n lastPlaybackDateTime: null,\n limitsValues: [],\n drawInterval: null,\n zoomChart: false,\n zoomOverview: false,\n cable: new Cable(),\n subscription: null,\n needToUpdate: false,\n errorDialog: false,\n errors: [],\n colorIndex: 0,\n colors: [\n // The first 3 are taken from the Astro css definitions for\n // --color-data-visualization-1 through 3\n '#00c7cb',\n '#938bdb',\n '#4dacff',\n 'lime',\n 'darkorange',\n 'red',\n 'gold',\n 'hotpink',\n 'tan',\n 'cyan',\n 'maroon',\n 'blue',\n 'teal',\n 'purple',\n 'green',\n 'brown',\n 'lightblue',\n 'white',\n 'black',\n ],\n }\n },\n computed: {\n calcFullSize: function () {\n return this.fullWidth || this.fullHeight\n },\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n return JSON.stringify(this.errors, null, 4)\n }\n return null\n },\n itemSubscriptionKeys: function () {\n return this.items.map(this.subscriptionKey)\n },\n allowableXAxisItemPacket: function () {\n if (!this.canUseCustomXAxisItem || this.items.length === 0) {\n return undefined\n }\n const { targetName, packetName } = this.items[0]\n return { targetName, packetName }\n },\n canUseCustomXAxisItem: function () {\n // Make sure we're not mixing packets, because items from different packets will be received at different times.\n // If it was mixed, e.g. `xAxisItem` is 'INST__ADCS__RECEIVED_COUNT' and you were graphing\n // 'INST__HEALTH_STATUS__TEMP1', then the `received` handler wouldn't know which x-axis values to apply to the\n // received TEMP1 data points.\n if (this.items.length === 0) {\n return true\n }\n const { targetName, packetName } = this.items[0]\n return this.items.every(\n (item) =>\n item.targetName === targetName && item.packetName === packetName,\n )\n },\n actualXAxisItem: function () {\n if (this.canUseCustomXAxisItem && this.xAxisItem) {\n return this.xAxisItem\n } else {\n return DEFAULT_X_AXIS_ITEM\n }\n },\n xAxisConverter: function () {\n if (this.xAxisIsDefault) {\n return (val) => val / 1_000_000_000.0 // nsec to sec\n }\n return (val) => val\n },\n xAxisFormatter: function () {\n return (val) => {\n if (val == null) {\n return '--'\n } else if (this.xAxisIsTime) {\n // Convert the unix timestamp into a formatted date / time\n return this.formatSeconds(val, this.timeZone)\n }\n return val\n }\n },\n xAxisLabel: function () {\n return this.xAxisIsTime ? 'Time' : this.actualXAxisItem.split('__').at(-2)\n },\n xAxisIsDefault: function () {\n return this.actualXAxisItem === DEFAULT_X_AXIS_ITEM\n },\n xAxisIsTime: function () {\n const timeItems = ['PACKET_TIMESECONDS', 'RECEIVED_TIMESECONDS']\n return (\n this.xAxisIsDefault ||\n timeItems.includes(this.actualXAxisItem.split('__').at(4))\n )\n },\n xAxisIsAlsoGraphedItem: function () {\n return this.itemSubscriptionKeys.includes(this.actualXAxisItem)\n },\n playbackMode: function () {\n return this.$store.state.playback.playbackMode\n },\n playbackDateTime: function () {\n return this.$store.state.playback.playbackDateTime\n },\n playbackStep: function () {\n return this.$store.state.playback.playbackStep\n },\n },\n watch: {\n state: function (newState, oldState) {\n switch (newState) {\n case 'start':\n // Only subscribe if we were previously stopped\n // If we were paused we do nothing ... see the data function\n if (oldState === 'stop') {\n this.startGraph()\n }\n break\n // case 'pause': Nothing to do ... see the data function\n case 'stop':\n this.stopGraph()\n break\n }\n },\n playbackMode: function (_newState, _oldState) {\n if (this.playbackMode === 'playback') {\n this.setupPlaybackMode()\n } else {\n // realtime\n this.lastPlaybackDateTime = null\n this.clearAllData()\n this.startGraph()\n }\n },\n playbackDateTime: function (_newState, _oldState) {\n if (this.playbackMode === 'playback') {\n if (\n this.lastPlaybackDateTime === null ||\n this.lastPlaybackDateTime > this.playbackDateTime\n ) {\n // If we are going backwards in time we need to clear the data\n this.clearAllData()\n } else {\n this.api\n .get_tlm_values(\n this.graphItems,\n 30, // stale timeout\n null, // no cache timeout\n this.lastPlaybackDateTime, // start time\n this.playbackDateTime, // end time\n )\n .then((data) => {\n if (data.length > 0) {\n if (Array.isArray(data[0]) && Array.isArray(data[0][0])) {\n // data is array of array of arrays\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].length; j++) {\n if (j === 0) {\n let dateStr = data[i][j][0]\n let dateObj = new Date(dateStr)\n this.data[0].push(dateObj.getTime() / 1000.0) // Convert to seconds\n } else {\n this.data[j].push(data[i][j][0])\n }\n }\n }\n } else if (Array.isArray(data) && data.length >= 2) {\n for (let i = 0; i < data.length; i++) {\n if (i === 0) {\n let dateStr = data[i][0]\n let dateObj = new Date(dateStr)\n this.data[0].push(dateObj.getTime() / 1000.0) // Convert to seconds\n } else {\n this.data[i].push(data[i][0])\n }\n }\n }\n }\n this.dataChanged = true\n this.updateGraphData()\n })\n }\n this.lastPlaybackDateTime = this.playbackDateTime\n }\n },\n data: function (newData, oldData) {\n this.dataChanged = true\n },\n graphMinY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMinY = val\n }\n this.setGraphRange()\n },\n graphMaxY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMaxY = val\n }\n this.setGraphRange()\n },\n graphStartDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphStartDateTime =\n this.parseDateTime(this.graphStartDateTime, this.timeZone) * 1000000\n if (this.graphStartDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the start date time we need to update\n this.graphStartDateTime = null\n this.needToUpdate = true\n }\n },\n graphEndDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphEndDateTime =\n this.parseDateTime(this.graphEndDateTime, this.timeZone) * 1000000\n if (this.graphEndDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the end date time we need to update\n this.graphEndDateTime = null\n this.needToUpdate = true\n }\n },\n actualXAxisItem: function (newVal, oldVal) {\n let clonedItems = JSON.parse(JSON.stringify(this.items))\n this.removeItems(clonedItems)\n this.graph.destroy()\n this.chartOpts.series[0].label = this.xAxisLabel\n this.chartOpts.scales.x.time = this.xAxisIsTime\n this.graph = new uPlot(\n this.chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n if (!this.hideOverview) {\n this.overview.destroy()\n this.overviewOpts.scales.x.time = this.xAxisIsTime\n this.overview = new uPlot(\n this.overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`),\n )\n }\n this.addItems(clonedItems)\n // Don't need to $emit('edit') because addItems() does that\n },\n refreshIntervalMs: function (val) {\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = setInterval(() => {\n this.updateGraphData()\n }, val)\n }\n },\n },\n created() {\n this.api = new OpenC3Api()\n this.title = `Graph ${this.id}`\n for (const [index, item] of this.items.entries()) {\n this.data.push([]) // initialize the empty data arrays\n this.indexes[this.subscriptionKey(item)] = index + 1\n if (item.color === undefined) {\n item.color = this.colors[this.colorIndex]\n }\n this.colorIndex++\n if (this.colorIndex === this.colors.length) {\n this.colorIndex = 0\n }\n }\n },\n mounted() {\n // This code allows for temporary pulling in a patched uPlot\n // Also note you need to add 'async' before the mounted method for await\n // const plugin = document.createElement('script')\n // plugin.setAttribute(\n // 'src',\n // 'https://leeoniya.github.io/uPlot/dist/uPlot.iife.min.js'\n // )\n // plugin.async = true\n // document.head.appendChild(plugin)\n // await new Promise(r => setTimeout(r, 500)) // Allow the js to load\n\n // TODO: This is demo / performance code of multiple items with many data points\n // 10 items at 500,000 each renders immediately and uses 180MB in Chrome\n // Refresh still works, chrome is sluggish but once you pause it is very performant\n // 500,000 pts at 1Hz is 138.9hrs .. almost 6 days\n //\n // 10 items at 100,000 each is very performant ... 1,000,000 pts is Qt TlmGrapher default\n // 100,000 pts at 1Hz is 27.8hrs\n //\n // 100,000 takes 40ms, Chrome uses 160MB\n // this.data = []\n // const dataPoints = 100000\n // const items = 10\n // let pts = new Array(dataPoints)\n // let times = new Array(dataPoints)\n // let time = 1589398007\n // let series = [{}]\n // for (let i = 0; i < dataPoints; i++) {\n // times[i] = time\n // pts[i] = i\n // time += 1\n // }\n // this.data.push(times)\n // for (let i = 0; i < items; i++) {\n // this.data.push(pts.map(x => x + i))\n // series.push({\n // label: 'Item' + i,\n // stroke: this.colors[i]\n // })\n // }\n\n // NOTE: These are just initial settings ... actual series are added by this.graph.addSeries\n const { chartSeries, overviewSeries } = this.items.reduce(\n (seriesObj, item) => {\n const commonProps = {\n spanGaps: true,\n }\n seriesObj.chartSeries.push({\n ...commonProps,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => {\n return this.items[seriesIdx - 1].color\n },\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else {\n return rawValue == null ? '--' : rawValue.toFixed(3)\n }\n },\n })\n seriesObj.overviewSeries.push({\n ...commonProps,\n })\n return seriesObj\n },\n { chartSeries: [], overviewSeries: [] },\n )\n\n this.chartOpts = {}\n if (this.sparkline) {\n this.hideToolbarData = true\n this.hideOverviewData = true\n this.showOverview = false\n this.chartOpts = {\n width: this.width,\n height: this.height,\n pxAlign: false,\n cursor: {\n show: false,\n },\n select: {\n show: false,\n },\n legend: {\n show: false,\n },\n scales: {\n x: {\n time: false,\n },\n },\n axes: [\n {\n show: false,\n },\n {\n show: false,\n },\n ],\n series: [\n {},\n {\n stroke: 'white', // TODO: Light / dark theme\n },\n ],\n }\n this.graph = new uPlot(\n this.chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n } else {\n // Uplot wants the real timezone name ('local' doesn't work)\n let timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone\n if (this.timeZone && this.timeZone !== 'local') {\n timeZoneName = this.timeZone\n }\n this.chartOpts = {\n ...this.getSize('chart'),\n ...this.getScales(),\n ...this.getAxes('chart'),\n // series: series, // TODO: Uncomment with the performance code\n plugins: [this.linesPlugin()],\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [\n {\n label: this.xAxisLabel,\n value: (u, v) => this.xAxisFormatter(v),\n },\n ...chartSeries,\n ],\n cursor: {\n drag: {\n x: true,\n y: false,\n },\n // Sync the cursor across graphs so mouseovers are synced\n sync: {\n key: 'openc3',\n // setSeries links graphs so clicking an item to hide it also hides the other graph item\n // setSeries: true,\n },\n bind: {\n mouseup: (self, targ, handler) => {\n return (e) => {\n // Single click while paused will resume the graph\n // This makes it possible to resume in TlmViewer widgets\n if (this.state === 'pause' && self.select.width === 0) {\n this.$emit('start')\n }\n handler(e)\n }\n },\n },\n },\n hooks: {\n setScale: [\n (chart, key) => {\n if (key === 'x' && !this.zoomOverview && this.overview) {\n this.zoomChart = true\n let left = Math.round(\n this.overview.valToPos(chart.scales.x.min, 'x'),\n )\n let right = Math.round(\n this.overview.valToPos(chart.scales.x.max, 'x'),\n )\n this.overview.setSelect({ left, width: right - left })\n this.zoomChart = false\n }\n },\n ],\n setSelect: [\n (chart) => {\n // Pause the graph while selecting a range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n },\n ],\n ready: [\n (u) => {\n let canvas = u.root.querySelector('.u-over')\n canvas.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.itemMenu = false\n this.legendMenu = false\n this.editGraphMenuX = e.clientX\n this.editGraphMenuY = e.clientY\n this.editGraphMenu = true\n })\n let legend = u.root.querySelector('.u-legend')\n legend.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.editGraphMenu = false\n this.legendMenu = false\n this.itemMenuX = e.clientX\n this.itemMenuY = e.clientY\n // Grab the closest series and then figure out which index it is\n let seriesEl = e.target.closest('.u-series')\n let seriesIdx = Array.prototype.slice\n .call(legend.childNodes[0].childNodes)\n .indexOf(seriesEl)\n let series = u.series[seriesIdx]\n if (series.item) {\n this.selectedItem = series.item\n this.itemMenu = true\n } else {\n this.itemMenu = false\n this.legendMenuX = e.clientX\n this.legendMenuY = e.clientY\n this.legendMenu = true\n }\n })\n // Append the info to the legend\n legend.querySelector('tbody').appendChild(this.$refs.info)\n },\n ],\n },\n }\n this.graph = new uPlot(\n this.chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n\n this.overviewOpts = {\n ...this.getSize('overview'),\n ...this.getScales(),\n ...this.getAxes('overview'),\n // series: series, // TODO: Uncomment with the performance code\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [...overviewSeries],\n cursor: {\n y: false,\n drag: {\n setScale: false,\n x: true,\n y: false,\n },\n },\n legend: {\n show: false,\n },\n hooks: {\n setSelect: [\n (chart) => {\n if (!this.zoomChart) {\n // Pause the graph while selecting an overview range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n this.zoomOverview = true\n let min = chart.posToVal(chart.select.left, 'x')\n let max = chart.posToVal(\n chart.select.left + chart.select.width,\n 'x',\n )\n this.graph.setScale('x', { min, max })\n this.zoomOverview = false\n }\n },\n ],\n },\n }\n if (!this.hideOverview) {\n this.overview = new uPlot(\n this.overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`),\n )\n }\n this.moveLegend(this.legendPosition)\n\n // Allow the charts to dynamically resize when the window resizes\n window.addEventListener('resize', this.resize)\n }\n\n if (this.playbackMode !== 'playback') {\n if (this.state !== 'stop') {\n this.startGraph()\n }\n } else {\n this.setupPlaybackMode()\n }\n },\n beforeUnmount: function () {\n this.stopGraph()\n this.cable.disconnect()\n window.removeEventListener('resize', this.resize)\n },\n methods: {\n setupPlaybackMode: function () {\n this.stopGraph()\n this.clearAllData()\n const screenItems = this.itemSubscriptionKeys.map((key) => {\n return key.split('__').slice(2).join('__')\n })\n if (this.actualXAxisItem === DEFAULT_X_AXIS_ITEM) {\n // When in playback we don't have the DEFAULT_X_AXIS_ITEM '__time' available from the stream\n // So parse the first item and add the PACKET_TIMESECONDS from that target / packet\n const tgtpkt = screenItems[0].split('__').slice(0, 2).join('__')\n screenItems.unshift(`${tgtpkt}__PACKET_TIMESECONDS__RAW`)\n } else if (!this.xAxisIsAlsoGraphedItem) {\n // We need to add the x-axis item if it isn't already being graphed\n screenItems.unshift(this.actualXAxisItem)\n }\n this.api.get_tlm_available(screenItems).then((data) => {\n this.graphItems = 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 (screenItems.length != data.length) {\n // eslint-disable-next-line no-console\n console.log(\n 'Error getting tlm available',\n screenItems,\n this.graphItems,\n )\n }\n })\n },\n startGraph: function () {\n this.subscribe()\n this.interval = setInterval(() => {\n this.updateGraphData()\n }, this.refreshIntervalMs)\n },\n stopGraph: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n this.subscription = null\n }\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = null\n }\n },\n updateGraphData: function () {\n // Ignore changes to the data while we're paused\n if (this.state === 'pause' || !this.dataChanged) {\n return\n }\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n\n const xAxisData = this.data[0]\n if (xAxisData && xAxisData.length) {\n let max = xAxisData.at(-1)\n const possibleMinValues = [xAxisData.at(0)]\n if (this.pointsGraphed <= xAxisData.length) {\n possibleMinValues.push(xAxisData.at(-this.pointsGraphed))\n }\n if (this.xAxisIsTime) {\n possibleMinValues.push(max - this.secondsGraphed)\n }\n const min = Math.max(...possibleMinValues)\n if (min === max) {\n max += 1\n }\n this.graph.setScale('x', { min, max })\n }\n\n this.dataChanged = false\n },\n formatLabel(item) {\n if (item.valueType === 'CONVERTED' && item.reduced === 'DECOM') {\n return item.itemName\n } else {\n let description = ''\n // Only display valueType if we're not CONVERTED\n if (item.valueType !== 'CONVERTED') {\n description += item.valueType\n }\n // Only display reduced if we're not DECOM\n if (item.reduced !== 'DECOM') {\n // If we already have the valueType add a space\n if (description !== '') {\n description += ' '\n }\n description += `${item.reduced.split('_')[1]} ${item.reducedType}`\n }\n return `${item.itemName} (${description})`\n }\n },\n moveLegend: function (desired) {\n switch (desired) {\n case 'bottom':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.remove('top-legend')\n break\n case 'top':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('top-legend')\n break\n case 'left':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.add('side-legend')\n this.graph.root.classList.add('left-legend')\n break\n case 'right':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('side-legend')\n break\n }\n this.legendPosition = desired\n this.resize()\n },\n clearErrors: function () {\n this.errors = []\n },\n editGraphClose: function (graph) {\n this.editGraph = false\n this.title = graph.title\n // Don't need to copy items because we don't modify them\n this.legendPosition = graph.legendPosition\n this.graphMinY = graph.graphMinY\n this.graphMaxY = graph.graphMaxY\n this.lines = [...graph.lines]\n this.graphStartDateTime = graph.startDateTime\n this.graphEndDateTime = graph.endDateTime\n // Allow the watch to update needToUpdate\n this.$nextTick(() => {\n if (this.needToUpdate) {\n if (this.subscription == null) {\n this.startGraph()\n } else {\n // NOTE: removing and adding back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n // Clone the items first because removeItems modifies this.items\n let clonedItems = JSON.parse(JSON.stringify(this.items))\n this.removeItems(clonedItems)\n setTimeout(() => {\n this.addItems(clonedItems)\n }, 0)\n }\n this.needToUpdate = false\n }\n })\n this.moveLegend(this.legendPosition)\n this.$emit('edit')\n },\n resize: function () {\n this.graph.setSize(this.getSize('chart'))\n if (this.overview) {\n this.overview.setSize(this.getSize('overview'))\n }\n this.$emit('resize', this.id)\n },\n expandAll: function () {\n this.fullWidth = true\n this.fullHeight = true\n this.resize()\n },\n collapseAll: function () {\n this.fullWidth = false\n this.fullHeight = false\n this.resize()\n },\n expandWidth: function () {\n this.fullWidth = true\n this.resize()\n },\n collapseWidth: function () {\n this.fullWidth = false\n this.resize()\n },\n expandHeight: function () {\n this.fullHeight = true\n this.resize()\n },\n collapseHeight: function () {\n this.fullHeight = false\n this.resize()\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-graph', this.id)\n },\n setGraphRange: function () {\n let pad = 0.1\n if (\n this.graphMinY ||\n this.graphMinY === 0 ||\n this.graphMaxY ||\n this.graphMaxY === 0\n ) {\n pad = 0\n }\n this.graph.scales.y.range = (u, dataMin, dataMax) => {\n let min = dataMin\n if (this.graphMinY || this.graphMinY === 0) {\n min = this.graphMinY\n }\n let max = dataMax\n if (this.graphMaxY || this.graphMaxY === 0) {\n max = this.graphMaxY\n }\n return uPlot.rangeNum(min, max, pad, true)\n }\n },\n subscribe: function () {\n this.cable\n .createSubscription('StreamingChannel', window.openc3Scope, {\n received: (data) => this.received(data),\n connected: () => {\n const itemsToAdd = [...this.items]\n if (!this.xAxisIsDefault && !this.xAxisIsAlsoGraphedItem) {\n itemsToAdd.push(this.actualXAxisItem)\n }\n this.addItemsToSubscription(itemsToAdd)\n },\n disconnected: (data) => {\n // If allowReconnect is true it means we got a disconnect due to connection lost or server disconnect\n // If allowReconnect is false this is a normal server close or client close\n if (data.allowReconnect) {\n this.errors.push({\n type: 'disconnected',\n message: 'OpenC3 backend connection disconnected',\n time: new Date().getTime(),\n })\n }\n },\n rejected: () => {\n this.errors.push({\n type: 'rejected',\n message: 'OpenC3 backend connection rejected',\n time: new Date().getTime(),\n })\n },\n })\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n // throttle(cb, limit) {\n // let wait = false\n // return () => {\n // if (!wait) {\n // requestAnimationFrame(cb)\n // wait = true\n // setTimeout(() => {\n // wait = false\n // }, limit)\n // }\n // }\n // },\n getSize: function (type) {\n let navDrawerWidth = 0\n const navDrawer = document.getElementById('openc3-nav-drawer')\n if (navDrawer) {\n navDrawerWidth = navDrawer.classList.contains(\n 'v-navigation-drawer--active',\n )\n ? navDrawer.clientWidth\n : 0\n }\n let legendWidth = 0\n if (this.legendPosition === 'right' || this.legendPosition === 'left') {\n const legend = document.getElementsByClassName('u-legend')[0]\n legendWidth = legend.clientWidth\n }\n const viewWidth =\n Math.max(document.documentElement.clientWidth, window.innerWidth || 0) -\n navDrawerWidth -\n legendWidth\n const viewHeight = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0,\n )\n\n const panel = document.getElementsByClassName('v-expansion-panel')[0]\n let height = 100\n if (type === 'overview') {\n // Show overview if we're full height and we're not explicitly hiding it\n if (this.fullHeight && !this.hideOverviewData) {\n this.showOverview = true\n } else {\n this.showOverview = false\n }\n } else {\n // Height of chart is viewportSize - expansion-panel - overview - fudge factor (primarily padding)\n height = viewHeight - panel.clientHeight - height - 250\n if (!this.fullHeight) {\n height = height / 2.0 + 10 // 5px padding top and bottom\n }\n }\n // subtract off some arbitrary padding left and right to make the layout work\n let width = viewWidth - 70\n if (!this.fullWidth) {\n // 6px padding left and right defined in TlmGrapher.vue .item-content\n width = width / 2.0 - 12\n }\n return {\n width: this.width || width,\n height: this.height || height,\n }\n },\n getScales: function () {\n return {\n scales: {\n x: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) {\n if (this.xAxisIsTime) {\n return [1566453600, 1566497660]\n }\n return [0, 1]\n }\n return [dataMin, dataMax]\n },\n time: this.xAxisIsTime,\n },\n y: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [-100, 100]\n return uPlot.rangeNum(dataMin, dataMax, 0.1, true)\n },\n },\n },\n }\n },\n getAxes: function (type) {\n let strokeColor = 'rgba(255, 255, 255, .1)'\n let axisColor = 'white'\n return {\n axes: [\n {\n stroke: axisColor,\n grid: {\n show: true,\n stroke: strokeColor,\n width: 2,\n },\n },\n {\n size: 80, // This size supports values up to 8 digits plus sign\n stroke: axisColor,\n grid: {\n show: type === 'overview' ? false : true,\n stroke: strokeColor,\n width: 2,\n },\n // Forces the axis values to be formatted correctly\n // especially with really small or large values\n values(u, splits) {\n if (\n splits.some((el) => el >= 10000000) ||\n splits.every((el) => el < 0.01)\n ) {\n splits = splits.map((split) => split.toExponential(3))\n }\n return splits\n },\n },\n ],\n }\n },\n closeEditItem: function (event) {\n this.editItem = false\n if (\n // If we have an end time and anything was changed we basically regraph\n (this.graphEndDateTime !== null && this.selectedItem !== event) ||\n // If we're live graphing we just regraph if the types change\n this.selectedItem.valueType !== event.valueType ||\n this.selectedItem.reduced !== event.reduced ||\n this.selectedItem.reducedType !== event.reducedType\n ) {\n this.changeItem(event)\n }\n },\n changeColor: function (event) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].color = event\n this.selectedItem.color = event\n this.graph.root.querySelectorAll('.u-marker')[index].style.borderColor =\n event\n },\n changeLimits: function (limits) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].limits = limits\n this.selectedItem.limits = limits\n this.limitsValues = limits\n },\n linesPlugin: function () {\n return {\n hooks: {\n draw: (u) => {\n const { ctx, bbox } = u\n // These are all in canvas units\n const yMin = u.valToPos(u.scales.y.min, 'y', true)\n const yMax = u.valToPos(u.scales.y.max, 'y', true)\n const redLow = u.valToPos(this.limitsValues[0], 'y', true)\n const yellowLow = u.valToPos(this.limitsValues[1], 'y', true)\n const yellowHigh = u.valToPos(this.limitsValues[2], 'y', true)\n const redHigh = u.valToPos(this.limitsValues[3], 'y', true)\n\n // NOTE: These comparisons are tricky because the canvas\n // starts in the upper left with 0,0. Thus it grows downward\n // and to the right with increasing values. The comparisons\n // of scale and limitsValues use graph coordinates but the\n // fillRect calculations use the canvas coordinates.\n\n // Draw Y axis lines\n this.lines.forEach((line) => {\n if (\n u.scales.y.min <= line.yValue &&\n line.yValue <= u.scales.y.max\n ) {\n ctx.save()\n ctx.beginPath()\n ctx.strokeStyle = line.color\n ctx.lineWidth = 2\n ctx.moveTo(bbox.left, u.valToPos(line.yValue, 'y', true))\n ctx.lineTo(\n bbox.left + bbox.width,\n u.valToPos(line.yValue, 'y', true),\n )\n ctx.stroke()\n ctx.restore()\n }\n })\n\n ctx.save()\n ctx.beginPath()\n\n // Draw red limits\n ctx.fillStyle = 'rgba(255,0,0,0.15)'\n if (u.scales.y.min < this.limitsValues[0]) {\n let start = redLow < yMax ? yMax : redLow\n ctx.fillRect(bbox.left, redLow, bbox.width, yMin - start)\n }\n if (u.scales.y.max > this.limitsValues[3]) {\n let end = yMin < redHigh ? yMin : redHigh\n ctx.fillRect(bbox.left, yMax, bbox.width, end - yMax)\n }\n\n // Draw yellow limits\n ctx.fillStyle = 'rgba(255,255,0,0.15)'\n if (\n u.scales.y.min < this.limitsValues[1] && // yellowLow\n u.scales.y.max > this.limitsValues[0] // redLow\n ) {\n let start = yellowLow < yMax ? yMax : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, redLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[2] && // yellowHigh\n u.scales.y.min < this.limitsValues[3] // redHigh\n ) {\n let start = yMin < redHigh ? yMin : redHigh\n let end = yMin < yellowHigh ? yMin : yellowHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n\n // Draw green limits & operational limits\n ctx.fillStyle = 'rgba(0,255,0,0.15)'\n // If there are no operational limits the interior is all green\n if (this.limitsValues.length === 4) {\n // Determine if we show any green\n if (\n u.scales.y.min < this.limitsValues[2] && // yellowHigh\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = yellowHigh < yMax ? yMax : yellowHigh\n let end = yMin < yellowLow ? yMin : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n } else {\n // Operational limits\n const greenLow = u.valToPos(this.limitsValues[4], 'y', true)\n const greenHigh = u.valToPos(this.limitsValues[5], 'y', true)\n if (\n u.scales.y.min < this.limitsValues[4] && // greenLow\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = greenLow < yMax ? yMax : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, yellowLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[5] && // greenHigh\n u.scales.y.min < this.limitsValues[2] // yellowHigh\n ) {\n let start = yMin < yellowHigh ? yMin : yellowHigh\n let end = yMin < greenHigh ? yMin : greenHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.fillStyle = 'rgba(0,0,255,0.15)'\n let start = greenHigh < yMax ? yMax : greenHigh\n let end = yMin < greenLow ? yMin : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.stroke()\n ctx.restore()\n },\n },\n }\n },\n changeItem: function (event) {\n // NOTE: removing and adding items back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n this.removeItems([this.selectedItem])\n this.selectedItem.valueType = event.valueType\n this.selectedItem.reduced = event.reduced\n this.selectedItem.reducedType = event.reducedType\n setTimeout(() => {\n this.addItems([this.selectedItem])\n }, 0)\n },\n addItems: function (itemArray, type = 'CONVERTED') {\n itemArray.forEach((item) => {\n item.valueType ||= type // set the default type\n item.color ||= this.colors[this.colorIndex]\n item.limits ||= []\n\n if (item.limits.length > 0) {\n this.limitsValues = item.limits\n }\n\n this.colorIndex = (this.colorIndex + 1) % this.colors.length\n this.items.push(item)\n\n const index = this.data.length\n this.graph.addSeries(this.createSeriesConfig(item), index)\n\n if (this.overview) {\n this.overview.addSeries(this.createOverviewSeriesConfig(), index)\n }\n\n this.data.splice(index, 0, Array(this.data[0].length))\n this.indexes[this.subscriptionKey(item)] = index\n })\n\n this.updateColorIndex(itemArray)\n if (!this.xAxisIsDefault) {\n itemArray.push(this.actualXAxisItem)\n }\n this.addItemsToSubscription(itemArray)\n this.$emit('resize')\n this.$emit('edit')\n },\n createSeriesConfig: function (item) {\n return {\n spanGaps: true,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else if (rawValue == null) {\n return '--'\n } else if (\n (Math.abs(rawValue) < 0.01 && rawValue !== 0) ||\n Math.abs(rawValue) >= 10000000\n ) {\n return rawValue.toExponential(6)\n } else {\n return rawValue.toFixed(6)\n }\n },\n }\n },\n createOverviewSeriesConfig: function () {\n return {\n spanGaps: true,\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n }\n },\n updateColorIndex: function (itemArray) {\n const lastItem = itemArray[itemArray.length - 1]\n if (lastItem) {\n const index = this.colors.indexOf(lastItem.color)\n if (index !== -1) {\n this.colorIndex = (index + 1) % this.colors.length\n }\n }\n },\n addItemsToSubscription: function (itemArray = this.items) {\n let theStartTime = this.startTime\n if (this.graphStartDateTime) {\n theStartTime = this.graphStartDateTime\n }\n const items = itemArray.map((item) => {\n if (typeof item === 'object') {\n return this.subscriptionKey(item)\n } else if (typeof item === 'string') {\n return item\n } else {\n throw new Error(\n `Invalid subscription item type for ${item}: ${typeof item}`,\n )\n }\n })\n if (this.subscription) {\n OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(\n (refreshed) => {\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n this.subscription.perform('add', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: items,\n start_time: theStartTime,\n end_time: this.graphEndDateTime,\n })\n },\n )\n }\n },\n clearAllData: function () {\n // Clear all data so delete the time data as well\n this.data[0] = []\n this.clearData(this.items)\n },\n clearData: function (itemArray) {\n for (const key of itemArray.map(this.subscriptionKey)) {\n let index = this.indexes[key]\n this.data[index] = Array(this.data[0].length).fill(null)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n // data.length of 2 means we only have 1 item\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 2) {\n this.data[0] = []\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n },\n removeItems: function (itemArray) {\n this.removeItemsFromSubscription(itemArray)\n\n for (const key of itemArray.map(this.subscriptionKey)) {\n const index = this.reorderIndexes(key)\n this.items.splice(index - 1, 1)\n this.data.splice(index, 1)\n this.graph.delSeries(index)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.delSeries(index)\n this.overview.setData(this.data)\n }\n }\n // data.length of 1 means we've deleted all our items\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 1) {\n this.data[0] = []\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n this.$emit('resize')\n this.$emit('edit')\n },\n removeItemsFromSubscription: function (itemArray = this.items) {\n if (this.subscription) {\n const items = itemArray.map((item) => {\n if (typeof item === 'object') {\n return this.subscriptionKey(item)\n } else if (typeof item === 'string') {\n return item\n } else {\n throw new Error(\n `Invalid subscription item type for ${item}: ${typeof item}`,\n )\n }\n })\n this.subscription.perform('remove', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: items,\n })\n }\n },\n reorderIndexes: function (key) {\n let index = this.indexes[key]\n delete this.indexes[key]\n for (let i in this.indexes) {\n if (this.indexes[i] > index) {\n this.indexes[i] -= 1\n }\n }\n return index\n },\n received: function (data) {\n this.cable.recordPing()\n // TODO: Shouldn't get errors but should we handle this every time?\n // if (json_data.error) {\n // console.log(json_data.error)\n // return\n // }\n for (let i = 0; i < data.length; i++) {\n if (!data[i].hasOwnProperty(this.actualXAxisItem)) {\n // This happens if the streaming thread was already sending something when we switched xAxisItems.\n // Nothing we can do but throw away the point. It'll come back when the graph is reset anyway.\n continue\n }\n let xAxisVal = this.xAxisConverter(data[i][this.actualXAxisItem])\n let length = this.data[0].length\n if (length === 0 || xAxisVal > this.data[0][length - 1]) {\n // Nominal case - append new data to end\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].push(null)\n }\n this.setDataAtIndex(this.data[0].length - 1, xAxisVal, data[i])\n } else {\n let index = bs(this.data[0], xAxisVal, this.bsComparator)\n if (index >= 0) {\n // Found a slot with the exact same time value\n // Handle duplicate time by subtracting a small amount until we find an open slot\n if (!Number.isFinite(xAxisVal)) {\n // Make sure this exists so that we don't create an infinite loop\n // (Infinity or NaN -= 1e-5 results in Infinity or NaN)\n throw new RangeError(`Invalid x-axis value: ${xAxisVal}`)\n }\n while (index >= 0) {\n xAxisVal -= 1e-5 // Subtract a small amount (10 microseconds if x-axis is time in seconds)\n index = bs(this.data[0], xAxisVal, this.bsComparator)\n }\n // Now that we have a unique time, insert at the ideal index\n const idealIndex = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(idealIndex, 0, null)\n }\n // Use the adjusted time but keep the original data\n this.setDataAtIndex(idealIndex, xAxisVal, data[i])\n } else {\n // Insert a new null slot at the ideal index\n const idealIndex = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(idealIndex, 0, null)\n }\n this.setDataAtIndex(idealIndex, xAxisVal, data[i])\n }\n }\n }\n // If we weren't passed a startTime notify grapher of our start\n if (this.startTime == null && this.data[0][0]) {\n let newStartTime = this.data[0][0] * 1_000_000_000\n this.$emit('started', newStartTime)\n }\n this.dataChanged = true\n },\n bsComparator: function (element, needle) {\n return element - needle\n },\n setDataAtIndex: function (index, xAxisVal, newData) {\n this.data[0][index] = xAxisVal\n for (const [key, value] of Object.entries(newData)) {\n if (key === this.actualXAxisItem && !this.xAxisIsAlsoGraphedItem) {\n continue\n }\n const keyIndex = this.indexes[key]\n if (keyIndex) {\n let array = this.data[keyIndex]\n // NaN and Infinite values are sent as objects with raw attribute set\n // to 'NaN', '-Infinity', or 'Infinity', just set data to null\n if (value?.raw) {\n array[index] = null\n } else if (typeof value === 'string') {\n // Can't graph strings so just set to null\n array[index] = null\n // If it's not already RAW, change the type to RAW\n // NOTE: Some items are RAW strings so they won't ever work\n if (!key.includes('__RAW')) {\n for (let item of this.items) {\n if (this.subscriptionKey(item) === key) {\n this.selectedItem = item\n break\n }\n }\n this.changeItem({\n valueType: 'RAW',\n reduced: this.selectedItem.reduced,\n reducedType: this.selectedItem.reducedType,\n })\n }\n } else {\n array[index] = value\n }\n }\n }\n },\n subscriptionKey: function (item) {\n let key = `${item.reduced}__TLM__${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`\n if (\n item.reduced === 'REDUCED_MINUTE' ||\n item.reduced === 'REDUCED_HOUR' ||\n item.reduced === 'REDUCED_DAY'\n ) {\n key += `__${item.reducedType}`\n }\n return key\n },\n },\n}\n</script>\n\n<style>\n.v-window-item {\n background-color: var(--color-background-surface-default);\n}\n\n/* left right stacked legend */\n.uplot.side-legend {\n display: flex;\n width: auto;\n}\n\n.uplot.side-legend .u-wrap {\n flex: none;\n}\n\n.uplot.side-legend .u-legend {\n text-align: left;\n margin-left: 0;\n width: 220px;\n}\n\n.uplot.side-legend .u-legend,\n.uplot.side-legend .u-legend tr,\n.uplot.side-legend .u-legend th,\n.uplot.side-legend .u-legend td {\n display: revert;\n}\n\n/* left side we need to order the legend before the plot */\n.uplot.left-legend .u-legend {\n order: -1;\n}\n\n/* top legend */\n.uplot.top-legend {\n display: flex;\n flex-direction: column;\n}\n\n.uplot.top-legend .u-legend {\n order: -1;\n}\n\n/* This value is large enough to support negative scientific notation\n that we use on the value with rawValue.toExponential(6) */\n.u-legend.u-inline .u-series .u-value {\n width: 105px;\n}\n\n/* This value is large enough to support our date format: YYYY-MM-DD HH:MM:SS.sss */\n.u-legend.u-inline .u-series:first-child .u-value {\n width: 185px;\n}\n\n.u-select {\n background-color: rgba(255, 255, 255, 0.07);\n}\n</style>\n<style scoped>\n.active {\n background-color: var(--color-background-surface-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","TargetPacketItemChooser","TimeFilters","value","isValid","parse","itemId","item","date","toDate","dline","i","enabled","selection","xAxisItemKey","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_createBlock","_component_v_dialog","$options","$event","_ctx","_createVNode","_component_v_toolbar","_component_v_spacer","_cache","_createElementVNode","_component_v_card","_component_v_tabs","_component_v_tab","_component_v_tabs_window","_component_v_tabs_window_item","_component_v_row","_component_v_col","_component_v_card_text","_component_v_text_field","_component_v_select","_component_v_list","_component_v_list_item","_component_v_btn","_openBlock","_createElementBlock","_Fragment","$props","_component_v_checkbox","_component_target_packet_item_chooser","_component_v_data_table","_withCtx","_component_v_card_actions","OpenC3Api","details","key","_component_v_card_title","_toDisplayString","DEFAULT_X_AXIS_ITEM","GraphEditDialog","GraphEditItemDialog","Cable","targetName","packetName","val","timeItems","newState","oldState","_newState","_oldState","data","j","dateStr","dateObj","newData","oldData","newVal","oldVal","clonedItems","uPlot","index","chartSeries","overviewSeries","seriesObj","commonProps","u","seriesIdx","self","rawValue","timeZoneName","ts","v","targ","handler","e","chart","left","right","legend","seriesEl","series","min","max","screenItems","tgtpkt","xAxisData","possibleMinValues","description","desired","graph","pad","dataMin","dataMax","itemsToAdd","subscription","type","navDrawerWidth","navDrawer","legendWidth","viewWidth","viewHeight","panel","height","width","strokeColor","axisColor","splits","el","split","event","limits","ctx","bbox","yMin","yMax","redLow","yellowLow","yellowHigh","redHigh","line","start","end","greenLow","greenHigh","itemArray","lastItem","theStartTime","items","refreshed","xAxisVal","length","bs","idealIndex","newStartTime","element","needle","keyIndex","array","_normalizeClass","$data","_vShow","_component_v_expand_transition","_withDirectives","_component_graph_edit_dialog","_component_v_textarea","_component_v_menu","_component_v_list_item_title","_createTextVNode","_component_graph_edit_item_dialog","_component_v_list_subheader","_component_v_icon","_component_v_tooltip","props"],"mappings":"kVA+PKA,EAAU,CACb,WAAY,yBACVC,EAAAA,yBAEF,OAAQ,CAACC,EAAAA,WAAW,EACpB,MAAO,CACL,WAAY,QACZ,MAAO,CACL,KAAM,OACN,SAAU,IAEZ,eAAgB,CACd,KAAM,OACN,SAAU,IAEZ,MAAO,CACL,KAAM,MACN,SAAU,IAEZ,UAAW,CACT,KAAM,QAER,UAAW,CACT,KAAM,QAER,MAAO,CACL,KAAM,MACN,SAAU,IAEZ,OAAQ,CACN,KAAM,MACN,SAAU,IAEZ,cAAe,CACb,KAAM,QAER,YAAa,CACX,KAAM,QAER,SAAU,CACR,KAAM,OACN,SAAU,IAEZ,gBAAiB,CACf,KAAM,OACN,QAAS,QAEX,UAAW,CACT,KAAM,OACN,QAAS,WAGb,MAAO,CAAC,SAAU,KAAM,SAAU,oBAAqB,kBAAkB,EACzE,KAAM,UAAY,CAChB,MAAO,CACL,IAAK,EACL,MAAO,CAAA,EACP,mBAAoB,GACpB,kBAAmB,KACnB,sBAAuB,KACvB,gBAAiB,CAAC,MAAO,SAAU,OAAQ,OAAO,EAClD,UAAW,KACX,UAAW,KACX,QAAS,KACT,QAAS,KACT,YAAa,CACX,CAAE,MAAO,UAAW,MAAO,UAC3B,CAAE,MAAO,QAAS,MAAO,OAAM,EAC/B,CAAE,MAAO,UAAW,MAAO,UAAW,SAAU,EAAI,GAEtD,YAAa,CACX,CAAE,MAAO,cAAe,MAAO,cAC/B,CAAE,MAAO,cAAe,MAAO,cAC/B,CAAE,MAAO,YAAa,MAAO,YAC7B,CAAE,MAAO,UAAW,MAAO,UAAW,SAAU,EAAI,GAEtD,MAAO,CACL,KAAOC,GAAU,CACf,GAAI,CAACA,EAAO,MAAO,GACnB,GAAI,CACF,OACEC,EAAAA,QAAQC,EAAAA,MAAMF,EAAO,aAAc,IAAI,IAAM,CAAC,GAC9C,2BAEJ,MAAY,CACV,MAAO,2BACT,CACF,EACA,KAAOA,GAAU,CACf,GAAI,CAACA,EAAO,MAAO,GACnB,GAAI,CACF,OACEC,EAAAA,QAAQC,EAAAA,MAAMF,EAAO,WAAY,IAAI,IAAM,CAAC,GAC5C,yBAEJ,MAAY,CACV,MAAO,yBACT,CACF,EAEJ,CACF,EACA,SAAU,CACR,KAAM,CACJ,KAAM,CACJ,OAAO,KAAK,UACd,EACA,IAAIA,EAAO,CACT,KAAK,MAAM,oBAAqBA,CAAK,CACvC,GAEF,UAAW,UAAY,CACrB,GAAI,CAAC,KAAK,MAAO,MAAO,CAAA,EACxB,IAAIG,EAAS,EACb,OAAO,KAAK,MAAM,IAAKC,IACrBD,GAAU,EACH,CAAE,GAAGC,EAAM,OAAAD,CAAK,EACxB,CACH,EACA,iBAAkB,UAAY,CAE5B,GAAI,KAAK,YAAc,SAGvB,OAAO,KAAK,UAAU,MAAM,IAAI,EAAE,GAAG,CAAC,CACxC,GAEF,SAAU,CAaR,GAZA,KAAK,MAAQ,CACX,MAAO,KAAK,MACZ,eAAgB,KAAK,eACrB,MAAO,KAAK,MACZ,UAAW,KAAK,UAChB,UAAW,KAAK,UAChB,MAAO,CAAC,GAAG,KAAK,KAAK,CACvB,EACA,KAAK,mBAAqB,KAAK,WAAa,KAAK,YAAc,SAC/D,KAAK,kBAAoB,KAAK,UAG1B,KAAK,cAAe,CAEtB,IAAIE,EAAOC,EAAAA,OAAO,KAAK,cAAgB,GAAO,EAC9C,KAAK,UAAY,KAAK,WAAWD,EAAM,KAAK,QAAQ,EACpD,KAAK,UAAY,KAAK,cAAcA,EAAM,KAAK,QAAQ,CACzD,KAAO,CAEL,IAAIA,EAAO,IAAI,KAAS,KACxB,KAAK,UAAY,KAAK,WAAWA,EAAM,KAAK,QAAQ,EACpD,KAAK,UAAY,KAAK,cAAcA,EAAM,KAAK,QAAQ,CACzD,CAEA,GAAI,KAAK,YAAa,CACpB,IAAIA,EAAOC,EAAAA,OAAO,KAAK,YAAc,GAAO,EAC5C,KAAK,QAAU,KAAK,WAAWD,EAAM,KAAK,QAAQ,EAClD,KAAK,QAAU,KAAK,cAAcA,EAAM,KAAK,QAAQ,CACvD,CACF,EACA,QAAS,CACP,SAAU,CACF,KAAK,WAAe,KAAK,UAC7B,KAAK,MAAM,cAAgB,KAAK,UAAY,IAAM,KAAK,UAEvD,KAAK,MAAM,cAAgB,KAEvB,KAAK,SAAa,KAAK,QAC3B,KAAK,MAAM,YAAc,KAAK,QAAU,IAAM,KAAK,QAEnD,KAAK,MAAM,YAAc,KAE3B,KAAK,MAAM,KAAM,KAAK,KAAK,CAC7B,EACA,SAAU,CACR,KAAK,MAAM,MAAM,KAAK,CAAE,OAAQ,EAAG,MAAO,QAAS,CACrD,EACA,WAAWE,EAAO,CAChB,IAAIC,EAAI,KAAK,MAAM,MAAM,QAAQD,CAAK,EACtC,KAAK,MAAM,MAAM,OAAOC,EAAG,CAAC,CAC9B,EACA,mBAAmBC,EAAS,CACrBA,IACH,KAAK,kBAAoB,SACzB,KAAK,MAAM,mBAAoB,QAAQ,EAE3C,EACA,iBAAiBC,EAAW,CAC1B,KAAK,sBAAwBA,CAC/B,EACA,kBAAkBA,EAAW,CAC3B,GAAIA,EAAU,YAAcA,EAAU,YAAcA,EAAU,SAAU,CACtE,MAAMC,EAAe,eAAeD,EAAU,UAAU,KAAKA,EAAU,UAAU,KAAKA,EAAU,QAAQ,cACxG,KAAK,kBAAoBC,EACzB,KAAK,MAAM,mBAAoBA,CAAY,CAC7C,CACF,EAEJ,EAjaeC,EAAA,CAAA,MAAM,UAAU,EAuBhBC,EAAA,CAAA,MAAM,UAAU,EAuDhBC,EAAA,CAAA,MAAM,UAAU,EAuBhBC,EAAA,CAAA,MAAM,UAAU,EAwChBC,EAAA,CAAA,MAAM,UAAU,+uBA3J7BC,EAAAA,YAoOWC,EAAA,YApOQC,EAAA,4CAAAA,EAAA,KAAIC,GAAE,YAAU,MAAO,sCAAaC,EAAA,MAAK,QAAA,EAAA,CAAA,KAAA,CAAA,uBAC1D,IAIY,CAJZC,EAAAA,YAIYC,EAAA,CAJD,OAAO,IAAI,EAAA,mBACpB,IAAY,CAAZD,EAAAA,YAAYE,CAAA,EACZC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,qBAAyB,YAAnB,eAAY,EAAA,GAClBJ,EAAAA,YAAYE,CAAA,UAEdF,EAAAA,YA6NSK,EAAA,CA7ND,MAAM,MAAM,EAAA,mBAClB,IAIS,CAJTL,EAAAA,YAISM,EAAA,YAJQP,EAAA,yCAAAA,EAAA,IAAGD,GAAE,MAAM,2BAC1B,IAAmC,CAAnCE,EAAAA,YAAmCO,EAAA,CAA5B,MAAM,GAAG,EAAA,mBAAC,IAAU,CAAA,GAAAJ,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAV,aAAU,EAAA,YAC3BH,EAAAA,YAAwCO,EAAA,CAAjC,MAAM,GAAG,EAAA,mBAAC,IAAe,CAAA,GAAAJ,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAf,kBAAe,EAAA,YAChCH,EAAAA,YAAgCO,EAAA,CAAzB,MAAM,GAAG,EAAA,mBAAC,IAAO,CAAA,GAAAJ,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAP,UAAO,EAAA,qCAE1BH,EAAAA,YAiNgBQ,EAAA,YAjNQT,EAAA,2CAAAA,EAAA,IAAGD,uBACzB,IA6EqB,CA7ErBE,EAAAA,YA6EqBS,EAAA,CA7ED,MAAM,IAAI,MAAA,uBAC5B,IAsBM,CAtBNL,EAAAA,mBAsBM,MAtBNd,EAsBM,CArBJU,EAAAA,YAoBQU,EAAA,KAAA,mBAnBN,IASQ,CATRV,EAAAA,YASQW,EAAA,KAAA,mBARN,IAOc,CAPdX,EAAAA,YAOcY,EAAA,CAPD,MAAM,MAAM,EAAA,mBACvB,IAKE,CALFZ,EAAAA,YAKEa,EAAA,CAJS,WAAAd,EAAA,MAAM,MAAN,sBAAAI,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAC,EAAA,MAAM,MAAKD,GACpB,MAAM,OACN,MAAM,QACN,eAAA,2CAINE,EAAAA,YAQQW,EAAA,KAAA,mBAPN,IAME,CANFX,EAAAA,YAMEc,EAAA,CALS,WAAAf,EAAA,MAAM,eAAN,sBAAAI,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAC,EAAA,MAAM,eAAcD,GAC7B,MAAM,kBACN,eAAA,GACC,MAAOC,EAAA,gBACR,MAAA,CAAA,YAAA,OAAA,oDAKRK,EAAAA,mBAoDM,MApDNb,EAoDM,CAnDJS,EAAAA,YAEcY,EAAA,CAFD,MAAM,MAAM,EAAA,mBAAC,IAE1B,CAAA,GAAAT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAF0B,uEAE1B,EAAA,YACAH,EAAAA,YAqBQU,EAAA,KAAA,mBApBN,IAQQ,CARRV,EAAAA,YAQQW,EAAA,KAAA,mBAPN,IAME,CANFX,EAAAA,YAMEa,EAAA,YALSd,EAAA,+CAAAA,EAAA,UAASD,GAClB,MAAM,aACL,KAAI,OAAS,KAAK,IAAG,CAAA,GACrB,MAAK,CAAGC,EAAA,MAAM,IAAI,EACnB,KAAK,sDAGTC,EAAAA,YAUQW,EAAA,KAAA,mBARN,IAOE,CAPFX,EAAAA,YAOEa,EAAA,YANSd,EAAA,+CAAAA,EAAA,UAASD,GAClB,MAAM,aACL,KAAI,OAAS,KAAK,IAAG,CAAA,GACrB,MAAK,CAAGC,EAAA,MAAM,IAAI,EACnB,KAAK,OACL,KAAK,2DAIXC,EAAAA,YAGcY,EAAA,CAHD,MAAM,MAAM,EAAA,mBAAC,IAG1B,CAAA,GAAAT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAH0B,yFAG1B,EAAA,YACAH,EAAAA,YAqBQU,EAAA,KAAA,mBApBN,IAQQ,CARRV,EAAAA,YAQQW,EAAA,KAAA,mBAPN,IAME,CANFX,EAAAA,YAMEa,EAAA,YALSd,EAAA,6CAAAA,EAAA,QAAOD,GAChB,MAAM,WACL,KAAI,OAAS,KAAK,IAAG,CAAA,GACrB,MAAK,CAAGC,EAAA,MAAM,IAAI,EACnB,KAAK,sDAGTC,EAAAA,YAUQW,EAAA,KAAA,mBARN,IAOE,CAPFX,EAAAA,YAOEa,EAAA,YANSd,EAAA,6CAAAA,EAAA,QAAOD,GAChB,MAAM,WACL,KAAI,OAAS,KAAK,IAAG,CAAA,GACrB,MAAK,CAAGC,EAAA,MAAM,IAAI,EACnB,KAAK,OACL,KAAK,qEAMfC,EAAAA,YAwGqBS,EAAA,CAxGD,MAAM,IAAI,MAAA,uBAC5B,IAsBM,CAtBNL,EAAAA,mBAsBM,MAtBNZ,EAsBM,CArBJQ,EAAAA,YAEcY,EAAA,CAFD,MAAM,MAAM,EAAA,mBAAC,IAE1B,CAAA,GAAAT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAF0B,2DAE1B,EAAA,YACAH,EAAAA,YAiBQU,EAAA,CAjBD,MAAA,EAAK,EAAA,mBACV,IAOQ,CAPRV,EAAAA,YAOQW,EAAA,CAPD,MAAM,MAAM,EAAA,mBACjB,IAKE,CALFX,EAAAA,YAKEa,EAAA,CAJS,WAAAd,EAAA,MAAM,UAAN,sBAAAI,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAC,EAAA,MAAM,UAASD,GACxB,eAAA,GACA,MAAM,wBACN,KAAK,yCAGTE,EAAAA,YAOQW,EAAA,CAPD,MAAM,MAAM,EAAA,mBACjB,IAKE,CALFX,EAAAA,YAKEa,EAAA,CAJS,WAAAd,EAAA,MAAM,UAAN,sBAAAI,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAC,EAAA,MAAM,UAASD,GACxB,eAAA,GACA,MAAM,wBACN,KAAK,mDAKbM,EAAAA,mBAuCM,MAvCNX,EAuCM,CAtCJO,EAAAA,YAqCSe,EAAA,CArCD,QAAQ,UAAU,MAAM,uCAC9B,IAMc,CANdf,EAAAA,YAMcgB,EAAA,KAAA,mBALZ,IAEO,CAFPb,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,EAAAA,mBAEO,OAAA,CAFD,MAAA,CAAA,cAAA,KAAA,CAAwB,EAAC,sCAE/B,EAAA,GACAJ,EAAAA,YAAYE,CAAA,EACZF,EAAAA,YAA4CiB,EAAA,CAApC,uBAAOpB,EAAA,+BAAW,IAAU,CAAA,GAAAM,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAV,aAAU,EAAA,qBAEtCe,EAAAA,UAAA,EAAA,EAAAC,EAAAA,mBA4BcC,EAAAA,2BA3BQrB,EAAA,MAAM,MAAK,CAAvBjB,EAAMI,mBADhBS,EAAAA,YA4BcqB,EAAA,CA1BX,IAAK9B,EACL,MAAOJ,EACR,MAAM,8BAEN,IAqBQ,CArBRkB,EAAAA,YAqBQU,EAAA,KAAA,mBApBN,IAEQ,CAFRV,EAAAA,YAEQW,EAAA,KAAA,mBADN,IAAsD,CAAtDX,EAAAA,YAAsDa,EAAA,CAA/B,WAAA/B,EAAK,OAAL,sBAAAgB,GAAAhB,EAAK,OAAMgB,EAAE,MAAM,qEAE5CE,EAAAA,YAOQW,EAAA,KAAA,mBANN,IAKE,CALFX,EAAAA,YAKEc,EAAA,CAJS,WAAAhC,EAAK,MAAL,sBAAAgB,GAAAhB,EAAK,MAAKgB,EACnB,MAAM,QACN,eAAA,GACC,MAAOuB,EAAA,0EAGZrB,EAAAA,YAQQW,EAAA,KAAA,mBAPN,IAME,CANFX,EAAAA,YAMEiB,EAAA,CALA,MAAA,CAAA,QAAA,MAAA,EACA,KAAK,aACL,QAAQ,OACR,aAAW,cACV,QAAKnB,GAAED,EAAA,WAAWf,CAAI,0FAOnCsB,EAAAA,mBAuCM,MAvCNV,EAuCM,CAtCJM,EAAAA,YAUcY,EAAA,CAVD,MAAM,2BAA2B,EAAA,mBAAC,IAI7C,CAAA,GAAAT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAJ6C,2LAI7C,EAAA,EAAAC,EAAAA,mBAAM,KAAA,KAAA,KAAA,EAAA,EACNA,EAAAA,mBAIO,OAAA,CAJD,MAAM,aAAa,EAAC,gKAI1B,EAAA,YAEFJ,EAAAA,YAOEsB,EAAA,YANSvB,EAAA,2DAAAA,EAAA,mBAAkBD,GAKND,EAAA,oBAJpB,UAAWwB,EAAA,gBACZ,MAAM,qBACN,QAAQ,UACR,eAAA,4DAIOA,EAAA,2DADT1B,EAAAA,YAMciB,EAAA,OAJZ,MAAM,gDACP,IAGD,CAAA,GAAAT,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAHC,8EAGD,EAAA,aAEQJ,EAAA,oBAAsBsB,EAAA,+BAD9B1B,EAAAA,YAWE4B,EAAA,OATC,sBAAqBF,EAAA,gBAAgB,WACrC,sBAAqBA,EAAA,gBAAgB,WACrC,oBAAmBxB,EAAA,iBACpB,cAAA,GACA,cAAA,GACA,cAAA,GACA,cAAY,MACX,QAAQA,EAAA,iBACR,UAAUA,EAAA,0JAIjBG,EAAAA,YAwBqBS,EAAA,CAxBD,MAAM,IAAI,MAAA,uBAC5B,IAsBe,CAtBfT,EAAAA,YAsBewB,EAAA,CArBb,WAAS,SACT,MAAM,mBACN,YAAU,mBACT,QAASzB,EAAA,YACT,MAAOF,EAAA,UACP,iBAAgB,EAChB,eAAc,6BAEd,IAEU,eAAY4B,EAAAA,QACrB,CAKE,CANuB,KAAA3C,KAAI,CAC7BkB,EAAAA,YAKEiB,EAAA,CAJA,KAAK,aACL,QAAQ,OACR,aAAW,cACV,QAAKnB,GAAEC,EAAA,MAAK,SAAWjB,CAAI,yBAGrB,oBACT,IAA+C,CAAA,GAAAqB,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,CAA/CC,EAAAA,mBAA+C,YAAzC,qCAAkC,EAAA,mEAKhDJ,EAAAA,YAIiB0B,EAAA,CAJD,MAAM,MAAM,EAAA,mBAC1B,IAAY,CAAZ1B,EAAAA,YAAYE,CAAA,EACZF,EAAAA,YAAmEiB,EAAA,CAA5D,QAAQ,WAAY,yBAAOlB,EAAA,MAAK,QAAA,uBAAY,IAAQ,CAAA,GAAAI,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAR,WAAQ,EAAA,YAC3DH,EAAAA,YAAmDiB,EAAA,CAA5C,QAAQ,OAAQ,QAAOpB,EAAA,4BAAS,IAAI,CAAA,GAAAM,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAJ,OAAI,EAAA,2GChK9C5B,EAAU,CACb,MAAO,CACL,WAAY,QACZ,KAAM,CACJ,KAAM,OACN,SAAU,IAEZ,OAAQ,CACN,KAAM,MACN,SAAU,KAGd,MAAO,CACL,SACA,cACA,eACA,QACA,qBAEF,KAAM,UAAY,CAChB,MAAO,CACL,SAAU,KACV,WAAY,OAEZ,OAAQ,CAAE,KAAM,IAChB,WAAY,CAAC,YAAa,KAAK,EAC/B,UAAW,CAET,CAAE,MAAO,OAAQ,MAAO,OAAM,EAC9B,CAAE,MAAO,iBAAkB,MAAO,gBAAe,EACjD,CAAE,MAAO,eAAgB,MAAO,gBAChC,CAAE,MAAO,cAAe,MAAO,gBAEjC,aAAc,CAAC,MAAO,MAAO,MAAO,QAAQ,CAC9C,CACF,EACA,SAAU,CACR,KAAM,CACJ,KAAM,CACJ,OAAO,KAAK,UACd,EACA,IAAIG,EAAO,CACT,KAAK,MAAM,oBAAqBA,CAAK,CACvC,GAEF,aAAc,CACZ,OAAO,OAAO,KAAK,KAAK,MAAM,CAChC,GAEF,MAAM,SAAU,CACd,KAAK,SAAW,CAAE,GAAG,KAAK,IAAG,EAC7B,IAAIiD,EAAAA,GAAS,EACV,SAAS,KAAK,KAAK,WAAY,KAAK,KAAK,WAAY,KAAK,KAAK,QAAQ,EACvE,KAAMC,GAAY,CACjB,SAAW,CAACC,EAAKnD,CAAK,IAAK,OAAO,QAAQkD,EAAQ,MAAM,EAClD,OAAO,KAAKlD,CAAK,EAAE,SAAS,SAAS,IACvC,KAAK,OAAOmD,CAAG,EAAI,OAAO,OAAOnD,CAAK,GAI1C,KAAK,WAAa,OAAO,KAAK,KAAK,MAAM,EAAE,KAExCmD,GAAQ,KAAK,OAAOA,CAAG,EAAI,IAAO,KAAK,SAAS,OAAS,EAC5D,CACF,CAAC,CACL,CACF,YAhFetC,EAAA,CAAA,MAAM,MAAM,qUA/CzBI,EAAAA,YAwDWC,EAAA,YAxDQC,EAAA,0CAAAA,EAAA,KAAIC,GAAE,MAAM,MAAO,sCAAeC,EAAA,QAAO,EAAA,CAAA,OAAA,CAAA,uBAC1D,IAsDS,CAtDTC,EAAAA,YAsDSK,EAAA,KAAA,mBArDP,IAAmD,CAAnDL,EAAAA,YAAmD8B,EAAA,CAArC,MAAM,MAAM,EAAA,mBAAC,IAAS,CAAA,GAAA3B,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAT,YAAS,EAAA,YACpCH,EAAAA,YA8CcY,EAAA,KAAA,mBA7CZ,IAOE,CAPFZ,EAAAA,YAOEc,EAAA,CANS,WAAAf,EAAA,SAAS,UAAT,sBAAAI,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAC,EAAA,SAAS,UAASD,GAC3B,QAAQ,WACR,eAAA,GACA,MAAM,aACL,MAAOC,EAAA,WACR,MAAM,uCAERC,EAAAA,YAOEc,EAAA,CANS,WAAAf,EAAA,SAAS,QAAT,sBAAAI,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAC,EAAA,SAAS,QAAOD,GACzB,QAAQ,WACR,eAAA,GACA,MAAM,YACL,MAAOC,EAAA,UACR,MAAM,uCAERC,EAAAA,YAQEc,EAAA,CAPS,WAAAf,EAAA,SAAS,YAAT,sBAAAI,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAC,EAAA,SAAS,YAAWD,GAC7B,QAAQ,WACR,eAAA,GACA,MAAM,eACL,MAAOC,EAAA,aACP,SAAUA,EAAA,SAAS,UAAO,QAC3B,MAAM,kDAERC,EAAAA,YAQEc,EAAA,CAPS,WAAAf,EAAA,SAAS,6BAATI,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAC,EAAA,SAAS,MAAKD,GAMFK,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAAC,EAAA,oBAAqBD,CAAM,IALhD,QAAQ,WACR,eAAA,GACA,MAAM,QACL,MAAOuB,EAAA,OACR,MAAM,uCAGGxB,EAAA,YAAY,OAAM,iBAA7BsB,EAAAA,mBAUM,MAAA7B,EAAA,CATJU,EAAAA,YAOEc,EAAA,YANSf,EAAA,iDAAAA,EAAA,WAAUD,kBAKEC,EAAA,MAAK,eAAiBA,EAAA,OAAOA,EAAA,UAAU,CAAA,IAJ5D,QAAQ,WACR,eAAA,GACA,MAAM,iBACL,MAAOF,EAAA,4CAGVO,EAAAA,mBAAkE,MAAlEb,EAAkEwC,EAAAA,gBAA7ChC,EAAA,UAAU,EAAG,KAAEgC,EAAAA,gBAAGhC,EAAA,OAAOA,EAAA,UAAU,CAAA,EAAA,CAAA,yCAG5DC,EAAAA,YAIiB0B,EAAA,CAJD,MAAM,MAAM,EAAA,mBAC1B,IAAY,CAAZ1B,EAAAA,YAAYE,CAAA,EACZF,EAAAA,YAAmEiB,EAAA,CAA5D,QAAQ,WAAY,uBAAOlB,EAAA,MAAK,QAAA,uBAAY,IAAQ,CAAA,GAAAI,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAR,WAAQ,EAAA,YAC3DH,EAAAA,YAAoEiB,EAAA,CAA7D,QAAQ,OAAQ,QAAKd,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAEC,EAAA,MAAK,QAAUA,EAAA,QAAQ,uBAAG,IAAI,CAAA,GAAAI,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAJ,OAAI,EAAA,6FCgP9D6B,EAAsB,SAEvBzD,EAAU,CACb,WAAY,CACV,gBAAA0D,EACA,oBAAAC,GAEF,OAAQ,CAACzD,EAAAA,WAAW,EACpB,MAAO,CACL,GAAI,CACF,KAAM,OACN,SAAU,IAEZ,gBAAiB,CACf,KAAM,OACN,QAAS,MAEX,MAAO,CACL,KAAM,OACN,SAAU,IAIZ,UAAW,CACT,KAAM,OACN,QAAS,MAEX,eAAgB,CACd,KAAM,OACN,SAAU,IAEZ,YAAa,CACX,KAAM,OACN,SAAU,IAEZ,cAAe,CACb,KAAM,OACN,SAAU,IAEZ,kBAAmB,CACjB,KAAM,OACN,QAAS,KAEX,YAAa,CACX,KAAM,QACN,QAAS,IAEX,aAAc,CACZ,KAAM,QACN,QAAS,IAEX,UAAW,CACT,KAAM,QACN,QAAS,IAEX,aAAc,CACZ,KAAM,MACN,QAAS,IAAM,CAAA,GAEjB,iBAAkB,CAChB,KAAM,OACN,QAASuD,GAGX,OAAQ,CACN,KAAM,OACN,QAAS,MAEX,MAAO,CACL,KAAM,OACN,QAAS,MAEX,SAAU,CACR,KAAM,OACN,QAAS,UAGb,MAAO,CACL,QACA,cACA,OACA,gBACA,QACA,SACA,QACA,WAEF,MAAO,CACL,MAAO,CACL,IAAK,KACL,MAAO,CAAA,EACP,OAAQ,GACR,OAAQ,GACR,UAAW,GACX,WAAY,GACZ,MAAO,KACP,UAAW,GACX,cAAe,GACf,eAAgB,EAChB,eAAgB,EAChB,SAAU,GACV,SAAU,GACV,UAAW,EACX,UAAW,EACX,WAAY,GACZ,YAAa,EACb,YAAa,EACb,eAAgB,SAChB,aAAc,KACd,gBAAiB,KAAK,YACtB,aAAc,CAAC,KAAK,aACpB,iBAAkB,KAAK,aACvB,MAAO,GACP,SAAU,KACV,KAAM,CAAC,CAAA,CAAE,EACT,YAAa,GACb,SAAU,KACV,UAAW,KACX,UAAW,KACX,mBAAoB,KACpB,iBAAkB,KAClB,UAAW,KAAK,iBAChB,QAAS,CAAA,EACT,MAAO,KAAK,aACZ,WAAY,CAAA,EACZ,qBAAsB,KACtB,aAAc,CAAA,EACd,aAAc,KACd,UAAW,GACX,aAAc,GACd,MAAO,IAAIG,EAAAA,GACX,aAAc,KACd,aAAc,GACd,YAAa,GACb,OAAQ,CAAA,EACR,WAAY,EACZ,OAAQ,CAGN,UACA,UACA,UACA,OACA,aACA,MACA,OACA,UACA,MACA,OACA,SACA,OACA,OACA,SACA,QACA,QACA,YACA,QACA,QAEJ,CACF,EACA,SAAU,CACR,aAAc,UAAY,CACxB,OAAO,KAAK,WAAa,KAAK,UAChC,EACA,MAAO,UAAY,CACjB,OAAI,KAAK,aAAe,KAAK,OAAO,OAAS,EACpC,KAAK,UAAU,KAAK,OAAQ,KAAM,CAAC,EAErC,IACT,EACA,qBAAsB,UAAY,CAChC,OAAO,KAAK,MAAM,IAAI,KAAK,eAAe,CAC5C,EACA,yBAA0B,UAAY,CACpC,GAAI,CAAC,KAAK,uBAAyB,KAAK,MAAM,SAAW,EACvD,OAEF,KAAM,CAAE,WAAAC,EAAY,WAAAC,CAAS,EAAM,KAAK,MAAM,CAAC,EAC/C,MAAO,CAAE,WAAAD,EAAY,WAAAC,CAAS,CAChC,EACA,sBAAuB,UAAY,CAKjC,GAAI,KAAK,MAAM,SAAW,EACxB,MAAO,GAET,KAAM,CAAE,WAAAD,EAAY,WAAAC,CAAS,EAAM,KAAK,MAAM,CAAC,EAC/C,OAAO,KAAK,MAAM,MACfvD,GACCA,EAAK,aAAesD,GAActD,EAAK,aAAeuD,CAC1D,CACF,EACA,gBAAiB,UAAY,CAC3B,OAAI,KAAK,uBAAyB,KAAK,UAC9B,KAAK,UAELL,CAEX,EACA,eAAgB,UAAY,CAC1B,OAAI,KAAK,eACCM,GAAQA,EAAM,IAEhBA,GAAQA,CAClB,EACA,eAAgB,UAAY,CAC1B,OAAQA,GACFA,GAAO,KACF,KACE,KAAK,YAEP,KAAK,cAAcA,EAAK,KAAK,QAAQ,EAEvCA,CAEX,EACA,WAAY,UAAY,CACtB,OAAO,KAAK,YAAc,OAAS,KAAK,gBAAgB,MAAM,IAAI,EAAE,GAAG,EAAE,CAC3E,EACA,eAAgB,UAAY,CAC1B,OAAO,KAAK,kBAAoBN,CAClC,EACA,YAAa,UAAY,CACvB,MAAMO,EAAY,CAAC,qBAAsB,sBAAsB,EAC/D,OACE,KAAK,gBACLA,EAAU,SAAS,KAAK,gBAAgB,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,CAE7D,EACA,uBAAwB,UAAY,CAClC,OAAO,KAAK,qBAAqB,SAAS,KAAK,eAAe,CAChE,EACA,aAAc,UAAY,CACxB,OAAO,KAAK,OAAO,MAAM,SAAS,YACpC,EACA,iBAAkB,UAAY,CAC5B,OAAO,KAAK,OAAO,MAAM,SAAS,gBACpC,EACA,aAAc,UAAY,CACxB,OAAO,KAAK,OAAO,MAAM,SAAS,YACpC,GAEF,MAAO,CACL,MAAO,SAAUC,EAAUC,EAAU,CACnC,OAAQD,EAAQ,CACd,IAAK,QAGCC,IAAa,QACf,KAAK,WAAU,EAEjB,MAEF,IAAK,OACH,KAAK,UAAS,EACd,KACJ,CACF,EACA,aAAc,SAAUC,EAAWC,EAAW,CACxC,KAAK,eAAiB,WACxB,KAAK,kBAAiB,GAGtB,KAAK,qBAAuB,KAC5B,KAAK,aAAY,EACjB,KAAK,WAAU,EAEnB,EACA,iBAAkB,SAAUD,EAAWC,EAAW,CAC5C,KAAK,eAAiB,aAEtB,KAAK,uBAAyB,MAC9B,KAAK,qBAAuB,KAAK,iBAGjC,KAAK,aAAY,EAEjB,KAAK,IACF,eACC,KAAK,WACL,GACA,KACA,KAAK,qBACL,KAAK,gBACP,EACC,KAAMC,GAAS,CACd,GAAIA,EAAK,OAAS,GAChB,GAAI,MAAM,QAAQA,EAAK,CAAC,CAAC,GAAK,MAAM,QAAQA,EAAK,CAAC,EAAE,CAAC,CAAC,EAEpD,QAAS1D,EAAI,EAAGA,EAAI0D,EAAK,OAAQ1D,IAC/B,QAAS2D,EAAI,EAAGA,EAAID,EAAK1D,CAAC,EAAE,OAAQ2D,IAClC,GAAIA,IAAM,EAAG,CACX,IAAIC,EAAUF,EAAK1D,CAAC,EAAE2D,CAAC,EAAE,CAAC,EACtBE,EAAU,IAAI,KAAKD,CAAO,EAC9B,KAAK,KAAK,CAAC,EAAE,KAAKC,EAAQ,QAAO,EAAK,GAAM,CAC9C,MACE,KAAK,KAAKF,CAAC,EAAE,KAAKD,EAAK1D,CAAC,EAAE2D,CAAC,EAAE,CAAC,CAAC,UAI5B,MAAM,QAAQD,CAAI,GAAKA,EAAK,QAAU,EAC/C,QAAS1D,EAAI,EAAGA,EAAI0D,EAAK,OAAQ1D,IAC/B,GAAIA,IAAM,EAAG,CACX,IAAI4D,EAAUF,EAAK1D,CAAC,EAAE,CAAC,EACnB6D,EAAU,IAAI,KAAKD,CAAO,EAC9B,KAAK,KAAK,CAAC,EAAE,KAAKC,EAAQ,QAAO,EAAK,GAAM,CAC9C,MACE,KAAK,KAAK7D,CAAC,EAAE,KAAK0D,EAAK1D,CAAC,EAAE,CAAC,CAAC,EAKpC,KAAK,YAAc,GACnB,KAAK,gBAAe,CACtB,CAAC,EAEL,KAAK,qBAAuB,KAAK,iBAErC,EACA,KAAM,SAAU8D,EAASC,EAAS,CAChC,KAAK,YAAc,EACrB,EACA,UAAW,SAAUC,EAAQC,EAAQ,CACnC,IAAIb,EAAM,WAAWY,CAAM,EACtB,MAAMZ,CAAG,IACZ,KAAK,UAAYA,GAEnB,KAAK,cAAa,CACpB,EACA,UAAW,SAAUY,EAAQC,EAAQ,CACnC,IAAIb,EAAM,WAAWY,CAAM,EACtB,MAAMZ,CAAG,IACZ,KAAK,UAAYA,GAEnB,KAAK,cAAa,CACpB,EACA,mBAAoB,SAAUY,EAAQC,EAAQ,CACxCD,GAAU,OAAOA,GAAW,UAC9B,KAAK,mBACH,KAAK,cAAc,KAAK,mBAAoB,KAAK,QAAQ,EAAI,IAC3D,KAAK,qBAAuBC,IAC9B,KAAK,aAAe,KAEbD,IAAW,MAAQC,IAE5B,KAAK,mBAAqB,KAC1B,KAAK,aAAe,GAExB,EACA,iBAAkB,SAAUD,EAAQC,EAAQ,CACtCD,GAAU,OAAOA,GAAW,UAC9B,KAAK,iBACH,KAAK,cAAc,KAAK,iBAAkB,KAAK,QAAQ,EAAI,IACzD,KAAK,mBAAqBC,IAC5B,KAAK,aAAe,KAEbD,IAAW,MAAQC,IAE5B,KAAK,iBAAmB,KACxB,KAAK,aAAe,GAExB,EACA,gBAAiB,SAAUD,EAAQC,EAAQ,CACzC,IAAIC,EAAc,KAAK,MAAM,KAAK,UAAU,KAAK,KAAK,CAAC,EACvD,KAAK,YAAYA,CAAW,EAC5B,KAAK,MAAM,QAAO,EAClB,KAAK,UAAU,OAAO,CAAC,EAAE,MAAQ,KAAK,WACtC,KAAK,UAAU,OAAO,EAAE,KAAO,KAAK,YACpC,KAAK,MAAQ,IAAIC,EAAAA,MACf,KAAK,UACL,KAAK,KACL,SAAS,eAAe,QAAQ,KAAK,EAAE,EAAE,CAC3C,EACK,KAAK,eACR,KAAK,SAAS,QAAO,EACrB,KAAK,aAAa,OAAO,EAAE,KAAO,KAAK,YACvC,KAAK,SAAW,IAAIA,EAAAA,MAClB,KAAK,aACL,KAAK,KACL,SAAS,eAAe,WAAW,KAAK,EAAE,EAAE,CAC9C,GAEF,KAAK,SAASD,CAAW,CAE3B,EACA,kBAAmB,SAAUd,EAAK,CAC5B,KAAK,WACP,cAAc,KAAK,QAAQ,EAC3B,KAAK,SAAW,YAAY,IAAM,CAChC,KAAK,gBAAe,CACtB,EAAGA,CAAG,EAEV,GAEF,SAAU,CACR,KAAK,IAAM,IAAIX,EAAAA,GACf,KAAK,MAAQ,SAAS,KAAK,EAAE,GAC7B,SAAW,CAAC2B,EAAOxE,CAAI,IAAK,KAAK,MAAM,UACrC,KAAK,KAAK,KAAK,EAAE,EACjB,KAAK,QAAQ,KAAK,gBAAgBA,CAAI,CAAC,EAAIwE,EAAQ,EAC/CxE,EAAK,QAAU,SACjBA,EAAK,MAAQ,KAAK,OAAO,KAAK,UAAU,GAE1C,KAAK,aACD,KAAK,aAAe,KAAK,OAAO,SAClC,KAAK,WAAa,EAGxB,EACA,SAAU,CA2CR,KAAM,CAAE,YAAAyE,EAAa,eAAAC,GAAmB,KAAK,MAAM,OACjD,CAACC,EAAW3E,IAAS,CACnB,MAAM4E,EAAc,CAClB,SAAU,EACZ,EACA,OAAAD,EAAU,YAAY,KAAK,CACzB,GAAGC,EACH,KAAM5E,EACN,MAAO,KAAK,YAAYA,CAAI,EAC5B,OAAQ,CAAC6E,EAAGC,IACH,KAAK,MAAMA,EAAY,CAAC,EAAE,MAEnC,MAAO,EACP,MAAO,CAACC,EAAMC,IACR,OAAOA,GAAa,UAAY,MAAMA,CAAQ,EACzC,MAEAA,GAAY,KAAO,KAAOA,EAAS,QAAQ,CAAC,EAGxD,EACDL,EAAU,eAAe,KAAK,CAC5B,GAAGC,EACJ,EACMD,CACT,EACA,CAAE,YAAa,CAAA,EAAI,eAAgB,GACrC,EAGA,GADA,KAAK,UAAY,CAAA,EACb,KAAK,UACP,KAAK,gBAAkB,GACvB,KAAK,iBAAmB,GACxB,KAAK,aAAe,GACpB,KAAK,UAAY,CACf,MAAO,KAAK,MACZ,OAAQ,KAAK,OACb,QAAS,GACT,OAAQ,CACN,KAAM,IAER,OAAQ,CACN,KAAM,IAER,OAAQ,CACN,KAAM,IAER,OAAQ,CACN,EAAG,CACD,KAAM,KAGV,KAAM,CACJ,CACE,KAAM,IAER,CACE,KAAM,KAGV,OAAQ,CACN,CAAA,EACA,CACE,OAAQ,SAGd,EACA,KAAK,MAAQ,IAAIJ,EAAAA,MACf,KAAK,UACL,KAAK,KACL,SAAS,eAAe,QAAQ,KAAK,EAAE,EAAE,CAC3C,MACK,CAEL,IAAIU,EAAe,KAAK,eAAc,EAAG,gBAAe,EAAG,SACvD,KAAK,UAAY,KAAK,WAAa,UACrCA,EAAe,KAAK,UAEtB,KAAK,UAAY,CACf,GAAG,KAAK,QAAQ,OAAO,EACvB,GAAG,KAAK,UAAS,EACjB,GAAG,KAAK,QAAQ,OAAO,EAEvB,QAAS,CAAC,KAAK,aAAa,EAC5B,OAASC,GAAOX,EAAAA,MAAM,OAAO,IAAI,KAAKW,EAAK,GAAG,EAAGD,CAAY,EAC7D,OAAQ,CACN,CACE,MAAO,KAAK,WACZ,MAAO,CAACJ,EAAGM,IAAM,KAAK,eAAeA,CAAC,GAExC,GAAGV,GAEL,OAAQ,CACN,KAAM,CACJ,EAAG,GACH,EAAG,IAGL,KAAM,CACJ,IAAK,UAIP,KAAM,CACJ,QAAS,CAACM,EAAMK,EAAMC,IACZC,GAAM,CAGR,KAAK,QAAU,SAAWP,EAAK,OAAO,QAAU,GAClD,KAAK,MAAM,OAAO,EAEpBM,EAAQC,CAAC,CACX,IAIN,MAAO,CACL,SAAU,CACR,CAACC,EAAOxC,IAAQ,CACd,GAAIA,IAAQ,KAAO,CAAC,KAAK,cAAgB,KAAK,SAAU,CACtD,KAAK,UAAY,GACjB,IAAIyC,EAAO,KAAK,MACd,KAAK,SAAS,SAASD,EAAM,OAAO,EAAE,IAAK,GAAG,CAChD,EACIE,EAAQ,KAAK,MACf,KAAK,SAAS,SAASF,EAAM,OAAO,EAAE,IAAK,GAAG,CAChD,EACA,KAAK,SAAS,UAAU,CAAE,KAAAC,EAAM,MAAOC,EAAQD,CAAG,CAAG,EACrD,KAAK,UAAY,EACnB,CACF,GAEF,UAAW,CACRD,GAAU,CAEL,KAAK,QAAU,SAAWA,EAAM,OAAO,MAAQ,GACjD,KAAK,MAAM,OAAO,CAEtB,GAEF,MAAO,CACJV,GAAM,CACQA,EAAE,KAAK,cAAc,SAAS,EACpC,iBAAiB,cAAgBS,GAAM,CAC5CA,EAAE,eAAc,EAChB,KAAK,SAAW,GAChB,KAAK,WAAa,GAClB,KAAK,eAAiBA,EAAE,QACxB,KAAK,eAAiBA,EAAE,QACxB,KAAK,cAAgB,EACvB,CAAC,EACD,IAAII,EAASb,EAAE,KAAK,cAAc,WAAW,EAC7Ca,EAAO,iBAAiB,cAAgBJ,GAAM,CAC5CA,EAAE,eAAc,EAChB,KAAK,cAAgB,GACrB,KAAK,WAAa,GAClB,KAAK,UAAYA,EAAE,QACnB,KAAK,UAAYA,EAAE,QAEnB,IAAIK,EAAWL,EAAE,OAAO,QAAQ,WAAW,EACvCR,EAAY,MAAM,UAAU,MAC7B,KAAKY,EAAO,WAAW,CAAC,EAAE,UAAU,EACpC,QAAQC,CAAQ,EACfC,EAASf,EAAE,OAAOC,CAAS,EAC3Bc,EAAO,MACT,KAAK,aAAeA,EAAO,KAC3B,KAAK,SAAW,KAEhB,KAAK,SAAW,GAChB,KAAK,YAAcN,EAAE,QACrB,KAAK,YAAcA,EAAE,QACrB,KAAK,WAAa,GAEtB,CAAC,EAEDI,EAAO,cAAc,OAAO,EAAE,YAAY,KAAK,MAAM,IAAI,CAC3D,GAGN,EACA,KAAK,MAAQ,IAAInB,EAAAA,MACf,KAAK,UACL,KAAK,KACL,SAAS,eAAe,QAAQ,KAAK,EAAE,EAAE,CAC3C,EAEA,KAAK,aAAe,CAClB,GAAG,KAAK,QAAQ,UAAU,EAC1B,GAAG,KAAK,UAAS,EACjB,GAAG,KAAK,QAAQ,UAAU,EAE1B,OAASW,GAAOX,EAAAA,MAAM,OAAO,IAAI,KAAKW,EAAK,GAAG,EAAGD,CAAY,EAC7D,OAAQ,CAAC,GAAGP,CAAc,EAC1B,OAAQ,CACN,EAAG,GACH,KAAM,CACJ,SAAU,GACV,EAAG,GACH,EAAG,KAGP,OAAQ,CACN,KAAM,IAER,MAAO,CACL,UAAW,CACRa,GAAU,CACT,GAAI,CAAC,KAAK,UAAW,CAEf,KAAK,QAAU,SAAWA,EAAM,OAAO,MAAQ,GACjD,KAAK,MAAM,OAAO,EAEpB,KAAK,aAAe,GACpB,IAAIM,EAAMN,EAAM,SAASA,EAAM,OAAO,KAAM,GAAG,EAC3CO,EAAMP,EAAM,SACdA,EAAM,OAAO,KAAOA,EAAM,OAAO,MACjC,GACF,EACA,KAAK,MAAM,SAAS,IAAK,CAAE,IAAAM,EAAK,IAAAC,EAAK,EACrC,KAAK,aAAe,EACtB,CACF,GAGN,EACK,KAAK,eACR,KAAK,SAAW,IAAIvB,EAAAA,MAClB,KAAK,aACL,KAAK,KACL,SAAS,eAAe,WAAW,KAAK,EAAE,EAAE,CAC9C,GAEF,KAAK,WAAW,KAAK,cAAc,EAGnC,OAAO,iBAAiB,SAAU,KAAK,MAAM,CAC/C,CAEI,KAAK,eAAiB,WACpB,KAAK,QAAU,QACjB,KAAK,WAAU,EAGjB,KAAK,kBAAiB,CAE1B,EACA,cAAe,UAAY,CACzB,KAAK,UAAS,EACd,KAAK,MAAM,WAAU,EACrB,OAAO,oBAAoB,SAAU,KAAK,MAAM,CAClD,EACA,QAAS,CACP,kBAAmB,UAAY,CAC7B,KAAK,UAAS,EACd,KAAK,aAAY,EACjB,MAAMwB,EAAc,KAAK,qBAAqB,IAAKhD,GAC1CA,EAAI,MAAM,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI,CAC1C,EACD,GAAI,KAAK,kBAAoBG,EAAqB,CAGhD,MAAM8C,EAASD,EAAY,CAAC,EAAE,MAAM,IAAI,EAAE,MAAM,EAAG,CAAC,EAAE,KAAK,IAAI,EAC/DA,EAAY,QAAQ,GAAGC,CAAM,2BAA2B,CAC1D,MAAY,KAAK,wBAEfD,EAAY,QAAQ,KAAK,eAAe,EAE1C,KAAK,IAAI,kBAAkBA,CAAW,EAAE,KAAMjC,GAAS,CACrD,KAAK,WAAaA,EAGdiC,EAAY,QAAUjC,EAAK,QAE7B,QAAQ,IACN,8BACAiC,EACA,KAAK,UACP,CAEJ,CAAC,CACH,EACA,WAAY,UAAY,CACtB,KAAK,UAAS,EACd,KAAK,SAAW,YAAY,IAAM,CAChC,KAAK,gBAAe,CACtB,EAAG,KAAK,iBAAiB,CAC3B,EACA,UAAW,UAAY,CACjB,KAAK,eACP,KAAK,aAAa,YAAW,EAC7B,KAAK,aAAe,MAElB,KAAK,WACP,cAAc,KAAK,QAAQ,EAC3B,KAAK,SAAW,KAEpB,EACA,gBAAiB,UAAY,CAE3B,GAAI,KAAK,QAAU,SAAW,CAAC,KAAK,YAClC,OAEF,KAAK,MAAM,QAAQ,KAAK,IAAI,EACxB,KAAK,UACP,KAAK,SAAS,QAAQ,KAAK,IAAI,EAGjC,MAAME,EAAY,KAAK,KAAK,CAAC,EAC7B,GAAIA,GAAaA,EAAU,OAAQ,CACjC,IAAIH,EAAMG,EAAU,GAAG,EAAE,EACzB,MAAMC,EAAoB,CAACD,EAAU,GAAG,CAAC,CAAC,EACtC,KAAK,eAAiBA,EAAU,QAClCC,EAAkB,KAAKD,EAAU,GAAG,CAAC,KAAK,aAAa,CAAC,EAEtD,KAAK,aACPC,EAAkB,KAAKJ,EAAM,KAAK,cAAc,EAElD,MAAMD,EAAM,KAAK,IAAI,GAAGK,CAAiB,EACrCL,IAAQC,IACVA,GAAO,GAET,KAAK,MAAM,SAAS,IAAK,CAAE,IAAAD,EAAK,IAAAC,EAAK,CACvC,CAEA,KAAK,YAAc,EACrB,EACA,YAAY9F,EAAM,CAChB,GAAIA,EAAK,YAAc,aAAeA,EAAK,UAAY,QACrD,OAAOA,EAAK,SACP,CACL,IAAImG,EAAc,GAElB,OAAInG,EAAK,YAAc,cACrBmG,GAAenG,EAAK,WAGlBA,EAAK,UAAY,UAEfmG,IAAgB,KAClBA,GAAe,KAEjBA,GAAe,GAAGnG,EAAK,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,IAAIA,EAAK,WAAW,IAE3D,GAAGA,EAAK,QAAQ,KAAKmG,CAAW,GACzC,CACF,EACA,WAAY,SAAUC,EAAS,CAC7B,OAAQA,EAAO,CACb,IAAK,SACH,KAAK,MAAM,KAAK,UAAU,OAAO,aAAa,EAC9C,KAAK,MAAM,KAAK,UAAU,OAAO,aAAa,EAC9C,KAAK,MAAM,KAAK,UAAU,OAAO,YAAY,EAC7C,MACF,IAAK,MACH,KAAK,MAAM,KAAK,UAAU,OAAO,aAAa,EAC9C,KAAK,MAAM,KAAK,UAAU,OAAO,aAAa,EAC9C,KAAK,MAAM,KAAK,UAAU,IAAI,YAAY,EAC1C,MACF,IAAK,OACH,KAAK,MAAM,KAAK,UAAU,OAAO,YAAY,EAC7C,KAAK,MAAM,KAAK,UAAU,IAAI,aAAa,EAC3C,KAAK,MAAM,KAAK,UAAU,IAAI,aAAa,EAC3C,MACF,IAAK,QACH,KAAK,MAAM,KAAK,UAAU,OAAO,YAAY,EAC7C,KAAK,MAAM,KAAK,UAAU,OAAO,aAAa,EAC9C,KAAK,MAAM,KAAK,UAAU,IAAI,aAAa,EAC3C,KACJ,CACA,KAAK,eAAiBA,EACtB,KAAK,OAAM,CACb,EACA,YAAa,UAAY,CACvB,KAAK,OAAS,CAAA,CAChB,EACA,eAAgB,SAAUC,EAAO,CAC/B,KAAK,UAAY,GACjB,KAAK,MAAQA,EAAM,MAEnB,KAAK,eAAiBA,EAAM,eAC5B,KAAK,UAAYA,EAAM,UACvB,KAAK,UAAYA,EAAM,UACvB,KAAK,MAAQ,CAAC,GAAGA,EAAM,KAAK,EAC5B,KAAK,mBAAqBA,EAAM,cAChC,KAAK,iBAAmBA,EAAM,YAE9B,KAAK,UAAU,IAAM,CACnB,GAAI,KAAK,aAAc,CACrB,GAAI,KAAK,cAAgB,KACvB,KAAK,WAAU,MACV,CAML,IAAI/B,EAAc,KAAK,MAAM,KAAK,UAAU,KAAK,KAAK,CAAC,EACvD,KAAK,YAAYA,CAAW,EAC5B,WAAW,IAAM,CACf,KAAK,SAASA,CAAW,CAC3B,EAAG,CAAC,CACN,CACA,KAAK,aAAe,EACtB,CACF,CAAC,EACD,KAAK,WAAW,KAAK,cAAc,EACnC,KAAK,MAAM,MAAM,CACnB,EACA,OAAQ,UAAY,CAClB,KAAK,MAAM,QAAQ,KAAK,QAAQ,OAAO,CAAC,EACpC,KAAK,UACP,KAAK,SAAS,QAAQ,KAAK,QAAQ,UAAU,CAAC,EAEhD,KAAK,MAAM,SAAU,KAAK,EAAE,CAC9B,EACA,UAAW,UAAY,CACrB,KAAK,UAAY,GACjB,KAAK,WAAa,GAClB,KAAK,OAAM,CACb,EACA,YAAa,UAAY,CACvB,KAAK,UAAY,GACjB,KAAK,WAAa,GAClB,KAAK,OAAM,CACb,EACA,YAAa,UAAY,CACvB,KAAK,UAAY,GACjB,KAAK,OAAM,CACb,EACA,cAAe,UAAY,CACzB,KAAK,UAAY,GACjB,KAAK,OAAM,CACb,EACA,aAAc,UAAY,CACxB,KAAK,WAAa,GAClB,KAAK,OAAM,CACb,EACA,eAAgB,UAAY,CAC1B,KAAK,WAAa,GAClB,KAAK,OAAM,CACb,EACA,iBAAkB,UAAY,CAC5B,KAAK,OAAS,CAAC,KAAK,OACpB,KAAK,MAAM,gBAAiB,KAAK,EAAE,CACrC,EACA,cAAe,UAAY,CACzB,IAAIgC,EAAM,IAER,KAAK,WACL,KAAK,YAAc,GACnB,KAAK,WACL,KAAK,YAAc,KAEnBA,EAAM,GAER,KAAK,MAAM,OAAO,EAAE,MAAQ,CAACzB,EAAG0B,EAASC,IAAY,CACnD,IAAIX,EAAMU,GACN,KAAK,WAAa,KAAK,YAAc,KACvCV,EAAM,KAAK,WAEb,IAAIC,EAAMU,EACV,OAAI,KAAK,WAAa,KAAK,YAAc,KACvCV,EAAM,KAAK,WAENvB,EAAAA,MAAM,SAASsB,EAAKC,EAAKQ,EAAK,EAAI,CAC3C,CACF,EACA,UAAW,UAAY,CACrB,KAAK,MACF,mBAAmB,mBAAoB,OAAO,YAAa,CAC1D,SAAWxC,GAAS,KAAK,SAASA,CAAI,EACtC,UAAW,IAAM,CACf,MAAM2C,EAAa,CAAC,GAAG,KAAK,KAAK,EAC7B,CAAC,KAAK,gBAAkB,CAAC,KAAK,wBAChCA,EAAW,KAAK,KAAK,eAAe,EAEtC,KAAK,uBAAuBA,CAAU,CACxC,EACA,aAAe3C,GAAS,CAGlBA,EAAK,gBACP,KAAK,OAAO,KAAK,CACf,KAAM,eACN,QAAS,yCACT,KAAM,IAAI,KAAI,EAAG,QAAO,EACzB,CAEL,EACA,SAAU,IAAM,CACd,KAAK,OAAO,KAAK,CACf,KAAM,WACN,QAAS,qCACT,KAAM,IAAI,KAAI,EAAG,QAAO,EACzB,CACH,EACD,EACA,KAAM4C,GAAiB,CACtB,KAAK,aAAeA,CACtB,CAAC,CACL,EAaA,QAAS,SAAUC,EAAM,CACvB,IAAIC,EAAiB,EACrB,MAAMC,EAAY,SAAS,eAAe,mBAAmB,EACzDA,IACFD,EAAiBC,EAAU,UAAU,SACnC,6BACF,EACIA,EAAU,YACV,GAEN,IAAIC,EAAc,GACd,KAAK,iBAAmB,SAAW,KAAK,iBAAmB,UAE7DA,EADe,SAAS,uBAAuB,UAAU,EAAE,CAAC,EACvC,aAEvB,MAAMC,EACJ,KAAK,IAAI,SAAS,gBAAgB,YAAa,OAAO,YAAc,CAAC,EACrEH,EACAE,EACIE,EAAa,KAAK,IACtB,SAAS,gBAAgB,aACzB,OAAO,aAAe,CACxB,EAEMC,EAAQ,SAAS,uBAAuB,mBAAmB,EAAE,CAAC,EACpE,IAAIC,EAAS,IACTP,IAAS,WAEP,KAAK,YAAc,CAAC,KAAK,iBAC3B,KAAK,aAAe,GAEpB,KAAK,aAAe,IAItBO,EAASF,EAAaC,EAAM,aAAeC,EAAS,IAC/C,KAAK,aACRA,EAASA,EAAS,EAAM,KAI5B,IAAIC,EAAQJ,EAAY,GACxB,OAAK,KAAK,YAERI,EAAQA,EAAQ,EAAM,IAEjB,CACL,MAAO,KAAK,OAASA,EACrB,OAAQ,KAAK,QAAUD,CACzB,CACF,EACA,UAAW,UAAY,CACrB,MAAO,CACL,OAAQ,CACN,EAAG,CACD,MAAMrC,EAAG0B,EAASC,EAAS,CACzB,OAAID,GAAW,KACT,KAAK,YACA,CAAC,WAAY,UAAU,EAEzB,CAAC,EAAG,CAAC,EAEP,CAACA,EAASC,CAAO,CAC1B,EACA,KAAM,KAAK,aAEb,EAAG,CACD,MAAM3B,EAAG0B,EAASC,EAAS,CACzB,OAAID,GAAW,KAAa,CAAC,KAAM,GAAG,EAC/BhC,EAAAA,MAAM,SAASgC,EAASC,EAAS,GAAK,EAAI,CACnD,GAGN,CACF,EACA,QAAS,SAAUG,EAAM,CACvB,IAAIS,EAAc,0BACdC,EAAY,QAChB,MAAO,CACL,KAAM,CACJ,CACE,OAAQA,EACR,KAAM,CACJ,KAAM,GACN,OAAQD,EACR,MAAO,IAGX,CACE,KAAM,GACN,OAAQC,EACR,KAAM,CACJ,KAAMV,IAAS,WACf,OAAQS,EACR,MAAO,GAIT,OAAOvC,EAAGyC,EAAQ,CAChB,OACEA,EAAO,KAAMC,GAAOA,GAAM,GAAQ,GAClCD,EAAO,MAAOC,GAAOA,EAAK,GAAI,KAE9BD,EAASA,EAAO,IAAKE,GAAUA,EAAM,cAAc,CAAC,CAAC,GAEhDF,CACT,GAGN,CACF,EACA,cAAe,SAAUG,EAAO,CAC9B,KAAK,SAAW,IAGb,KAAK,mBAAqB,MAAQ,KAAK,eAAiBA,GAEzD,KAAK,aAAa,YAAcA,EAAM,WACtC,KAAK,aAAa,UAAYA,EAAM,SACpC,KAAK,aAAa,cAAgBA,EAAM,cAExC,KAAK,WAAWA,CAAK,CAEzB,EACA,YAAa,SAAUA,EAAO,CAC5B,IAAI1E,EAAM,KAAK,gBAAgB,KAAK,YAAY,EAC5CyB,EAAQ,KAAK,QAAQzB,CAAG,EAC5B,KAAK,MAAMyB,EAAQ,CAAC,EAAE,MAAQiD,EAC9B,KAAK,aAAa,MAAQA,EAC1B,KAAK,MAAM,KAAK,iBAAiB,WAAW,EAAEjD,CAAK,EAAE,MAAM,YACzDiD,CACJ,EACA,aAAc,SAAUC,EAAQ,CAC9B,IAAI3E,EAAM,KAAK,gBAAgB,KAAK,YAAY,EAC5CyB,EAAQ,KAAK,QAAQzB,CAAG,EAC5B,KAAK,MAAMyB,EAAQ,CAAC,EAAE,OAASkD,EAC/B,KAAK,aAAa,OAASA,EAC3B,KAAK,aAAeA,CACtB,EACA,YAAa,UAAY,CACvB,MAAO,CACL,MAAO,CACL,KAAO7C,GAAM,CACX,KAAM,CAAE,IAAA8C,EAAK,KAAAC,GAAS/C,EAEhBgD,EAAOhD,EAAE,SAASA,EAAE,OAAO,EAAE,IAAK,IAAK,EAAI,EAC3CiD,EAAOjD,EAAE,SAASA,EAAE,OAAO,EAAE,IAAK,IAAK,EAAI,EAC3CkD,EAASlD,EAAE,SAAS,KAAK,aAAa,CAAC,EAAG,IAAK,EAAI,EACnDmD,EAAYnD,EAAE,SAAS,KAAK,aAAa,CAAC,EAAG,IAAK,EAAI,EACtDoD,EAAapD,EAAE,SAAS,KAAK,aAAa,CAAC,EAAG,IAAK,EAAI,EACvDqD,EAAUrD,EAAE,SAAS,KAAK,aAAa,CAAC,EAAG,IAAK,EAAI,EAiC1D,GAxBA,KAAK,MAAM,QAASsD,GAAS,CAEzBtD,EAAE,OAAO,EAAE,KAAOsD,EAAK,QACvBA,EAAK,QAAUtD,EAAE,OAAO,EAAE,MAE1B8C,EAAI,KAAI,EACRA,EAAI,UAAS,EACbA,EAAI,YAAcQ,EAAK,MACvBR,EAAI,UAAY,EAChBA,EAAI,OAAOC,EAAK,KAAM/C,EAAE,SAASsD,EAAK,OAAQ,IAAK,EAAI,CAAC,EACxDR,EAAI,OACFC,EAAK,KAAOA,EAAK,MACjB/C,EAAE,SAASsD,EAAK,OAAQ,IAAK,EAAI,CACnC,EACAR,EAAI,OAAM,EACVA,EAAI,QAAO,EAEf,CAAC,EAEDA,EAAI,KAAI,EACRA,EAAI,UAAS,EAGbA,EAAI,UAAY,qBACZ9C,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,EAAG,CACzC,IAAIuD,EAAQL,EAASD,EAAOA,EAAOC,EACnCJ,EAAI,SAASC,EAAK,KAAMG,EAAQH,EAAK,MAAOC,EAAOO,CAAK,CAC1D,CACA,GAAIvD,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,EAAG,CACzC,IAAIwD,EAAMR,EAAOK,EAAUL,EAAOK,EAClCP,EAAI,SAASC,EAAK,KAAME,EAAMF,EAAK,MAAOS,EAAMP,CAAI,CACtD,CAIA,GADAH,EAAI,UAAY,uBAEd9C,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,GACpCA,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,EACpC,CACA,IAAIuD,EAAQJ,EAAYF,EAAOA,EAAOE,EACtCL,EAAI,SAASC,EAAK,KAAMQ,EAAOR,EAAK,MAAOG,EAASK,CAAK,CAC3D,CACA,GACEvD,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,GACpCA,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,EACpC,CACA,IAAIuD,EAAQP,EAAOK,EAAUL,EAAOK,EAChCG,EAAMR,EAAOI,EAAaJ,EAAOI,EACrCN,EAAI,SAASC,EAAK,KAAMQ,EAAOR,EAAK,MAAOS,EAAMD,CAAK,CACxD,CAKA,GAFAT,EAAI,UAAY,qBAEZ,KAAK,aAAa,SAAW,GAE/B,GACE9C,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,GACpCA,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,EACpC,CACA,IAAIuD,EAAQH,EAAaH,EAAOA,EAAOG,EACnCI,EAAMR,EAAOG,EAAYH,EAAOG,EACpCL,EAAI,SAASC,EAAK,KAAMQ,EAAOR,EAAK,MAAOS,EAAMD,CAAK,CACxD,MACK,CAEL,MAAME,EAAWzD,EAAE,SAAS,KAAK,aAAa,CAAC,EAAG,IAAK,EAAI,EACrD0D,EAAY1D,EAAE,SAAS,KAAK,aAAa,CAAC,EAAG,IAAK,EAAI,EAC5D,GACEA,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,GACpCA,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,EACpC,CACA,IAAIuD,EAAQE,EAAWR,EAAOA,EAAOQ,EACrCX,EAAI,SAASC,EAAK,KAAMQ,EAAOR,EAAK,MAAOI,EAAYI,CAAK,CAC9D,CACA,GACEvD,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,GACpCA,EAAE,OAAO,EAAE,IAAM,KAAK,aAAa,CAAC,EACpC,CACA,IAAIuD,EAAQP,EAAOI,EAAaJ,EAAOI,EACnCI,EAAMR,EAAOU,EAAYV,EAAOU,EACpCZ,EAAI,SAASC,EAAK,KAAMQ,EAAOR,EAAK,MAAOS,EAAMD,CAAK,CACxD,CACAT,EAAI,UAAY,qBAChB,IAAIS,EAAQG,EAAYT,EAAOA,EAAOS,EAClCF,EAAMR,EAAOS,EAAWT,EAAOS,EACnCX,EAAI,SAASC,EAAK,KAAMQ,EAAOR,EAAK,MAAOS,EAAMD,CAAK,CACxD,CACAT,EAAI,OAAM,EACVA,EAAI,QAAO,CACb,EAEJ,CACF,EACA,WAAY,SAAUF,EAAO,CAK3B,KAAK,YAAY,CAAC,KAAK,YAAY,CAAC,EACpC,KAAK,aAAa,UAAYA,EAAM,UACpC,KAAK,aAAa,QAAUA,EAAM,QAClC,KAAK,aAAa,YAAcA,EAAM,YACtC,WAAW,IAAM,CACf,KAAK,SAAS,CAAC,KAAK,YAAY,CAAC,CACnC,EAAG,CAAC,CACN,EACA,SAAU,SAAUe,EAAW7B,EAAO,YAAa,CACjD6B,EAAU,QAASxI,GAAS,CAC1BA,EAAK,YAALA,EAAK,UAAc2G,GACnB3G,EAAK,QAALA,EAAK,MAAU,KAAK,OAAO,KAAK,UAAU,GAC1CA,EAAK,SAALA,EAAK,OAAW,CAAA,GAEZA,EAAK,OAAO,OAAS,IACvB,KAAK,aAAeA,EAAK,QAG3B,KAAK,YAAc,KAAK,WAAa,GAAK,KAAK,OAAO,OACtD,KAAK,MAAM,KAAKA,CAAI,EAEpB,MAAMwE,EAAQ,KAAK,KAAK,OACxB,KAAK,MAAM,UAAU,KAAK,mBAAmBxE,CAAI,EAAGwE,CAAK,EAErD,KAAK,UACP,KAAK,SAAS,UAAU,KAAK,2BAA0B,EAAIA,CAAK,EAGlE,KAAK,KAAK,OAAOA,EAAO,EAAG,MAAM,KAAK,KAAK,CAAC,EAAE,MAAM,CAAC,EACrD,KAAK,QAAQ,KAAK,gBAAgBxE,CAAI,CAAC,EAAIwE,CAC7C,CAAC,EAED,KAAK,iBAAiBgE,CAAS,EAC1B,KAAK,gBACRA,EAAU,KAAK,KAAK,eAAe,EAErC,KAAK,uBAAuBA,CAAS,EACrC,KAAK,MAAM,QAAQ,EACnB,KAAK,MAAM,MAAM,CACnB,EACA,mBAAoB,SAAUxI,EAAM,CAClC,MAAO,CACL,SAAU,GACV,KAAMA,EACN,MAAO,KAAK,YAAYA,CAAI,EAC5B,OAAQ,CAAC6E,EAAGC,IAAc,KAAK,MAAMA,EAAY,CAAC,EAAE,MACpD,MAAO,EACP,MAAO,CAACC,EAAMC,IACR,OAAOA,GAAa,UAAY,MAAMA,CAAQ,EACzC,MACEA,GAAY,KACd,KAEN,KAAK,IAAIA,CAAQ,EAAI,KAAQA,IAAa,GAC3C,KAAK,IAAIA,CAAQ,GAAK,IAEfA,EAAS,cAAc,CAAC,EAExBA,EAAS,QAAQ,CAAC,CAG/B,CACF,EACA,2BAA4B,UAAY,CACtC,MAAO,CACL,SAAU,GACV,OAAQ,CAACH,EAAGC,IAAc,KAAK,MAAMA,EAAY,CAAC,EAAE,KACtD,CACF,EACA,iBAAkB,SAAU0D,EAAW,CACrC,MAAMC,EAAWD,EAAUA,EAAU,OAAS,CAAC,EAC/C,GAAIC,EAAU,CACZ,MAAMjE,EAAQ,KAAK,OAAO,QAAQiE,EAAS,KAAK,EAC5CjE,IAAU,KACZ,KAAK,YAAcA,EAAQ,GAAK,KAAK,OAAO,OAEhD,CACF,EACA,uBAAwB,SAAUgE,EAAY,KAAK,MAAO,CACxD,IAAIE,EAAe,KAAK,UACpB,KAAK,qBACPA,EAAe,KAAK,oBAEtB,MAAMC,EAAQH,EAAU,IAAKxI,GAAS,CACpC,GAAI,OAAOA,GAAS,SAClB,OAAO,KAAK,gBAAgBA,CAAI,EAC3B,GAAI,OAAOA,GAAS,SACzB,OAAOA,EAEP,MAAM,IAAI,MACR,sCAAsCA,CAAI,KAAK,OAAOA,CAAI,EAC5D,CAEJ,CAAC,EACG,KAAK,cACP,WAAW,YAAY,WAAW,kBAAkB,EAAE,KACnD4I,GAAc,CACTA,GACF,WAAW,UAAS,EAEtB,KAAK,aAAa,QAAQ,MAAO,CAC/B,MAAO,OAAO,YACd,MAAO,aAAa,YACpB,MAAOD,EACP,WAAYD,EACZ,SAAU,KAAK,iBAChB,CACH,CACF,CAEJ,EACA,aAAc,UAAY,CAExB,KAAK,KAAK,CAAC,EAAI,CAAA,EACf,KAAK,UAAU,KAAK,KAAK,CAC3B,EACA,UAAW,SAAUF,EAAW,CAC9B,UAAWzF,KAAOyF,EAAU,IAAI,KAAK,eAAe,EAAG,CACrD,IAAIhE,EAAQ,KAAK,QAAQzB,CAAG,EAC5B,KAAK,KAAKyB,CAAK,EAAI,MAAM,KAAK,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,EACvD,KAAK,MAAM,QAAQ,KAAK,IAAI,EACxB,KAAK,UACP,KAAK,SAAS,QAAQ,KAAK,IAAI,CAEnC,CAGI,KAAK,KAAK,SAAW,IACvB,KAAK,KAAK,CAAC,EAAI,CAAA,EACf,KAAK,MAAM,QAAQ,KAAK,IAAI,EACxB,KAAK,UACP,KAAK,SAAS,QAAQ,KAAK,IAAI,EAGrC,EACA,YAAa,SAAUgE,EAAW,CAChC,KAAK,4BAA4BA,CAAS,EAE1C,UAAWzF,KAAOyF,EAAU,IAAI,KAAK,eAAe,EAAG,CACrD,MAAMhE,EAAQ,KAAK,eAAezB,CAAG,EACrC,KAAK,MAAM,OAAOyB,EAAQ,EAAG,CAAC,EAC9B,KAAK,KAAK,OAAOA,EAAO,CAAC,EACzB,KAAK,MAAM,UAAUA,CAAK,EAC1B,KAAK,MAAM,QAAQ,KAAK,IAAI,EACxB,KAAK,WACP,KAAK,SAAS,UAAUA,CAAK,EAC7B,KAAK,SAAS,QAAQ,KAAK,IAAI,EAEnC,CAGI,KAAK,KAAK,SAAW,IACvB,KAAK,KAAK,CAAC,EAAI,CAAA,EACf,KAAK,MAAM,QAAQ,KAAK,IAAI,EACxB,KAAK,UACP,KAAK,SAAS,QAAQ,KAAK,IAAI,GAGnC,KAAK,MAAM,QAAQ,EACnB,KAAK,MAAM,MAAM,CACnB,EACA,4BAA6B,SAAUgE,EAAY,KAAK,MAAO,CAC7D,GAAI,KAAK,aAAc,CACrB,MAAMG,EAAQH,EAAU,IAAKxI,GAAS,CACpC,GAAI,OAAOA,GAAS,SAClB,OAAO,KAAK,gBAAgBA,CAAI,EAC3B,GAAI,OAAOA,GAAS,SACzB,OAAOA,EAEP,MAAM,IAAI,MACR,sCAAsCA,CAAI,KAAK,OAAOA,CAAI,EAC5D,CAEJ,CAAC,EACD,KAAK,aAAa,QAAQ,SAAU,CAClC,MAAO,OAAO,YACd,MAAO,aAAa,YACpB,MAAO2I,EACR,CACH,CACF,EACA,eAAgB,SAAU5F,EAAK,CAC7B,IAAIyB,EAAQ,KAAK,QAAQzB,CAAG,EAC5B,OAAO,KAAK,QAAQA,CAAG,EACvB,QAAS3C,KAAK,KAAK,QACb,KAAK,QAAQA,CAAC,EAAIoE,IACpB,KAAK,QAAQpE,CAAC,GAAK,GAGvB,OAAOoE,CACT,EACA,SAAU,SAAUV,EAAM,CACxB,KAAK,MAAM,WAAU,EAMrB,QAAS1D,EAAI,EAAGA,EAAI0D,EAAK,OAAQ1D,IAAK,CACpC,GAAI,CAAC0D,EAAK1D,CAAC,EAAE,eAAe,KAAK,eAAe,EAG9C,SAEF,IAAIyI,EAAW,KAAK,eAAe/E,EAAK1D,CAAC,EAAE,KAAK,eAAe,CAAC,EAC5D0I,EAAS,KAAK,KAAK,CAAC,EAAE,OAC1B,GAAIA,IAAW,GAAKD,EAAW,KAAK,KAAK,CAAC,EAAEC,EAAS,CAAC,EAAG,CAEvD,QAAS/E,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,IACpC,KAAK,KAAKA,CAAC,EAAE,KAAK,IAAI,EAExB,KAAK,eAAe,KAAK,KAAK,CAAC,EAAE,OAAS,EAAG8E,EAAU/E,EAAK1D,CAAC,CAAC,CAChE,KAAO,CACL,IAAIoE,EAAQuE,EAAAA,GAAG,KAAK,KAAK,CAAC,EAAGF,EAAU,KAAK,YAAY,EACxD,GAAIrE,GAAS,EAAG,CAGd,GAAI,CAAC,OAAO,SAASqE,CAAQ,EAG3B,MAAM,IAAI,WAAW,yBAAyBA,CAAQ,EAAE,EAE1D,KAAOrE,GAAS,GACdqE,GAAY,KACZrE,EAAQuE,EAAAA,GAAG,KAAK,KAAK,CAAC,EAAGF,EAAU,KAAK,YAAY,EAGtD,MAAMG,EAAa,CAACxE,EAAQ,EAC5B,QAAST,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,IACpC,KAAK,KAAKA,CAAC,EAAE,OAAOiF,EAAY,EAAG,IAAI,EAGzC,KAAK,eAAeA,EAAYH,EAAU/E,EAAK1D,CAAC,CAAC,CACnD,KAAO,CAEL,MAAM4I,EAAa,CAACxE,EAAQ,EAC5B,QAAST,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,IACpC,KAAK,KAAKA,CAAC,EAAE,OAAOiF,EAAY,EAAG,IAAI,EAEzC,KAAK,eAAeA,EAAYH,EAAU/E,EAAK1D,CAAC,CAAC,CACnD,CACF,CACF,CAEA,GAAI,KAAK,WAAa,MAAQ,KAAK,KAAK,CAAC,EAAE,CAAC,EAAG,CAC7C,IAAI6I,EAAe,KAAK,KAAK,CAAC,EAAE,CAAC,EAAI,IACrC,KAAK,MAAM,UAAWA,CAAY,CACpC,CACA,KAAK,YAAc,EACrB,EACA,aAAc,SAAUC,EAASC,EAAQ,CACvC,OAAOD,EAAUC,CACnB,EACA,eAAgB,SAAU3E,EAAOqE,EAAU3E,EAAS,CAClD,KAAK,KAAK,CAAC,EAAEM,CAAK,EAAIqE,EACtB,SAAW,CAAC9F,EAAKnD,CAAK,IAAK,OAAO,QAAQsE,CAAO,EAAG,CAClD,GAAInB,IAAQ,KAAK,iBAAmB,CAAC,KAAK,uBACxC,SAEF,MAAMqG,EAAW,KAAK,QAAQrG,CAAG,EACjC,GAAIqG,EAAU,CACZ,IAAIC,EAAQ,KAAK,KAAKD,CAAQ,EAG9B,GAAIxJ,GAAA,MAAAA,EAAO,IACTyJ,EAAM7E,CAAK,EAAI,aACN,OAAO5E,GAAU,UAK1B,GAHAyJ,EAAM7E,CAAK,EAAI,KAGX,CAACzB,EAAI,SAAS,OAAO,EAAG,CAC1B,QAAS/C,KAAQ,KAAK,MACpB,GAAI,KAAK,gBAAgBA,CAAI,IAAM+C,EAAK,CACtC,KAAK,aAAe/C,EACpB,KACF,CAEF,KAAK,WAAW,CACd,UAAW,MACX,QAAS,KAAK,aAAa,QAC3B,YAAa,KAAK,aAAa,YAChC,CACH,OAEAqJ,EAAM7E,CAAK,EAAI5E,CAEnB,CACF,CACF,EACA,gBAAiB,SAAUI,EAAM,CAC/B,IAAI+C,EAAM,GAAG/C,EAAK,OAAO,UAAUA,EAAK,UAAU,KAAKA,EAAK,UAAU,KAAKA,EAAK,QAAQ,KAAKA,EAAK,SAAS,GAC3G,OACEA,EAAK,UAAY,kBACjBA,EAAK,UAAY,gBACjBA,EAAK,UAAY,iBAEjB+C,GAAO,KAAK/C,EAAK,WAAW,IAEvB+C,CACT,EAEJ,KApqD6B,GAAG,QAAQ,IAAI,QAAQ,MAAM,oCAsJ/B,IAAI,OAAO,MAAM,ksBA7Q1CV,EAAAA,mBAuRM,MAAA,CAvRA,yCAAepB,EAAA,MAAK,OAAA,EAAA,CAAA,SAAA,CAAA,KACxBC,EAAAA,YA4HSK,EAAA,KAAA,mBA3HP,IAkHY,kBAlHZL,EAAAA,YAkHYC,EAAA,CAhHV,OAAO,KACP,MAAKmI,EAAAA,eAAA,CAAC,YACE/G,EAAA,kBAAoBA,EAAA,GAAE,SAAA,EAAA,CAAA,sBAE9B,IAYE,kBAZFrB,EAAAA,YAYEiB,EAAA,CAVA,MAAM,OACN,KAAK,YACL,QAAQ,UACR,QAAQ,OACR,aAAW,cACV,QAAKd,EAAA,CAAA,IAAAA,EAAA,CAAA,OAAqCkI,EAAA,YAAW,iBAN9C,CAAAC,QAAAD,EAAA,OAAO,SAAM,CAAA,IAavBrI,EAAAA,YAWEiB,EAAA,CAVA,KAAK,aACL,QAAQ,OACR,QAAQ,UACR,YAAU,kBACV,aAAW,aACV,QAAKd,EAAA,CAAA,IAAAA,EAAA,CAAA,OAAqCkI,EAAA,UAAS,OAOtDrI,EAAAA,YAAYE,CAAA,EACZE,EAAAA,mBAA0B,8BAAhBiI,EAAA,KAAK,EAAA,CAAA,EACfrI,EAAAA,YAAYE,CAAA,EAEImI,EAAA,sBAAhBlH,EAAAA,mBAmDWC,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAjDDvB,EAAA,4BADRF,EAAAA,YAOEsB,EAAA,OALA,KAAK,qBACL,QAAQ,OACR,QAAQ,UACR,YAAU,eACT,QAAOpB,EAAA,iDAEVF,EAAAA,YAOEsB,EAAA,OALA,KAAK,mBACL,QAAQ,OACR,QAAQ,UACR,YAAU,aACT,QAAOpB,EAAA,gCAIFwI,EAAA,yBADR1I,EAAAA,YAOEsB,EAAA,OALA,KAAK,gCACL,QAAQ,OACR,QAAQ,UACR,YAAU,iBACT,QAAOpB,EAAA,mDAEVF,EAAAA,YAOEsB,EAAA,OALA,KAAK,8BACL,QAAQ,OACR,QAAQ,UACR,YAAU,eACT,QAAOpB,EAAA,kCAIFwI,EAAA,0BADR1I,EAAAA,YAOEsB,EAAA,OALA,KAAK,8BACL,QAAQ,OACR,QAAQ,UACR,YAAU,kBACT,QAAOpB,EAAA,oDAEVF,EAAAA,YAOEsB,EAAA,OALA,KAAK,4BACL,QAAQ,OACR,QAAQ,UACR,YAAU,gBACT,QAAOpB,EAAA,qEAKJwI,EAAA,sBADR1I,EAAAA,YAOEsB,EAAA,OALA,KAAK,sBACL,QAAQ,OACR,QAAQ,UACR,YAAU,uBACT,QAAOpB,EAAA,sDAEVF,EAAAA,YAOEsB,EAAA,OALA,KAAK,sBACL,QAAQ,OACR,QAAQ,UACR,YAAU,uBACT,QAAOpB,EAAA,uCAGVG,EAAAA,YAMEiB,EAAA,CALA,KAAK,gBACL,QAAQ,OACR,QAAQ,UACR,YAAU,mBACT,uCAAYlB,EAAA,MAAK,aAAA,EAAA,CAAA,MAAA,CAAA,oCA/GXsI,EAAA,eAAe,IAmH1BrI,EAAAA,YAMsBuI,EAAA,KAAA,mBALpB,IAIM,CAJNC,iBAAApI,EAAAA,mBAIM,MAJNd,EAIM,CAHJc,EAAAA,mBAA8B,MAAA,CAAxB,WAAYiB,EAAA,EAAE,4BACpBjB,EAAAA,mBAA8B,MAAA,CAAzB,GAAG,eAAe,EAAA,KAAA,EAAA,oBACvBA,EAAAA,mBAAuD,MAAA,CAA3B,cAAeiB,EAAA,EAAE,wBAAhCgH,EAAA,YAAY,oBAHdA,EAAA,MAAM,oBAUfA,EAAA,yBADR1I,EAAAA,YAkBE8I,EAAA,kBAhBSJ,EAAA,+CAAAA,EAAA,UAASvI,GACV,cAAauI,EAAA,8CAAAA,EAAA,UAASvI,GAC7B,MAAOuI,EAAA,MACP,kBAAiBA,EAAA,eACjB,MAAOA,EAAA,MACP,cAAaA,EAAA,UACb,cAAaA,EAAA,UACb,MAAOA,EAAA,MACP,OAAQA,EAAA,OACR,kBAAiBA,EAAA,mBACjB,gBAAeA,EAAA,iBACf,YAAWhH,EAAA,SACX,qBAAoBxB,EAAA,yBACpB,SAAMM,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAL,GAAED,EAAA,YAAW,CAAEC,CAAM,CAAA,GAC3B,KAAID,EAAA,eACJ,wBAAQwI,EAAA,UAAS,gOAIpBrI,EAAAA,YAuBWJ,EAAA,YAvBQyI,EAAA,iDAAAA,EAAA,YAAWvI,GAAE,YAAU,0BACxC,IAIY,CAJZE,EAAAA,YAIYC,EAAA,CAJD,OAAO,IAAI,EAAA,mBACpB,IAAY,CAAZD,EAAAA,YAAYE,CAAA,EACZC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,qBAAqB,YAAf,WAAQ,EAAA,GACdJ,EAAAA,YAAYE,CAAA,UAEdF,EAAAA,YAgBSK,EAAA,CAhBD,MAAM,MAAM,EAAA,mBAClB,IAQQ,CARRL,EAAAA,YAQQU,EAAA,CARD,MAAA,EAAK,EAAA,mBACV,IAME,CANFV,EAAAA,YAMEa,EAAA,YALSwH,EAAA,2CAAAA,EAAA,MAAKvI,GACd,SAAA,GACA,eAAA,GACA,MAAM,OACN,MAAM,8CAGVE,EAAAA,YAEQU,EAAA,CAFD,MAAM,MAAM,EAAA,mBACjB,IAA+C,CAA/CV,EAAAA,YAA+C0I,EAAA,CAAnC,SAAA,GAAS,KAAK,IAAK,MAAO7I,EAAA,iCAExCG,EAAAA,YAEQU,EAAA,KAAA,mBADN,IAAiD,CAAjDV,EAAAA,YAAiDiB,EAAA,CAA1C,MAAA,GAAO,QAAOpB,EAAA,gCAAa,IAAO,CAAA,GAAAM,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAP,UAAO,EAAA,mEAOvCkI,EAAA,6BADR1I,EAAAA,YAcSgJ,EAAA,kBAZEN,EAAA,qDAAAA,EAAA,cAAavI,GACrB,OAAM,CAAGuI,EAAA,eAAgBA,EAAA,cAAc,EACxC,SAAA,GACA,WAAA,uBAEA,IAMS,CANTrI,EAAAA,YAMSe,EAAA,KAAA,mBALP,IAIc,CAJdf,EAAAA,YAIcgB,EAAA,CAJA,uBAAOqH,EAAA,UAAS,wBAC5B,IAEoB,CAFpBrI,EAAAA,YAEoB4I,EAAA,CAFD,MAAA,CAAA,OAAA,SAAA,GAAuB,mBAAC,IACpC,CADoCC,EAAAA,gBAAA,2BACjCR,EAAA,KAAK,EAAA,CAAA,yFAObA,EAAA,wBADR1I,EAAAA,YASEmJ,EAAA,kBAPST,EAAA,gDAAAA,EAAA,SAAQvI,GAChB,OAAQuI,EAAA,OACR,KAAMA,EAAA,aACN,cAAcxI,EAAA,YACd,eAAeA,EAAA,aACf,0BAAQwI,EAAA,SAAQ,IAChB,QAAOxI,EAAA,8HAKFwI,EAAA,wBADR1I,EAAAA,YAgCSgJ,EAAA,kBA9BEN,EAAA,gDAAAA,EAAA,SAAQvI,GAChB,OAAM,CAAGuI,EAAA,UAAWA,EAAA,SAAS,EAC9B,SAAA,GACA,WAAA,uBAEA,IAwBS,CAxBTrI,EAAAA,YAwBSe,EAAA,CAxBD,IAAA,GAAI,QAAQ,8BAClB,IAImB,CAJnBf,EAAAA,YAImB+I,EAAA,KAAA,mBAHjB,IAA6B,CAA1BF,EAAAA,gBAAA9G,EAAAA,gBAAAsG,EAAA,aAAa,UAAU,EAAG,IAC7BtG,kBAAGsG,EAAA,aAAa,UAAU,EAAG,IAC7BtG,EAAAA,gBAAGsG,EAAA,aAAa,QAAQ,EAAA,CAAA,UAE1BrI,EAAAA,YAKcgB,EAAA,CALA,yBAAOqH,EAAA,SAAQ,MAChB,kBACT,IAA4B,CAA5BrI,EAAAA,YAA4BgJ,EAAA,CAApB,KAAK,YAAY,CAAA,sBAE3B,IAA6C,CAA7ChJ,EAAAA,YAA6C4I,EAAA,KAAA,mBAA1B,IAAM,CAAA,GAAAzI,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAN,SAAM,EAAA,oBAE3BH,EAAAA,YAKcgB,EAAA,CALA,QAAKb,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAL,GAAED,EAAA,UAAS,CAAEwI,EAAA,YAAY,CAAA,KAC/B,kBACT,IAA4B,CAA5BrI,EAAAA,YAA4BgJ,EAAA,CAApB,KAAK,YAAY,CAAA,sBAE3B,IAA8C,CAA9ChJ,EAAAA,YAA8C4I,EAAA,KAAA,mBAA3B,IAAO,CAAA,GAAAzI,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAP,UAAO,EAAA,oBAE5BH,EAAAA,YAKcgB,EAAA,CALA,QAAKb,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAL,GAAED,EAAA,YAAW,CAAEwI,EAAA,YAAY,CAAA,KACjC,kBACT,IAA4B,CAA5BrI,EAAAA,YAA4BgJ,EAAA,CAApB,KAAK,YAAY,CAAA,sBAE3B,IAA+C,CAA/ChJ,EAAAA,YAA+C4I,EAAA,KAAA,mBAA5B,IAAQ,CAAA,GAAAzI,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAR,WAAQ,EAAA,2FAOzBkI,EAAA,0BADR1I,EAAAA,YA6BSgJ,EAAA,kBA3BEN,EAAA,kDAAAA,EAAA,WAAUvI,GAClB,OAAM,CAAGuI,EAAA,YAAaA,EAAA,WAAW,EAClC,SAAA,GACA,WAAA,uBAEA,IAqBS,CArBTrI,EAAAA,YAqBSe,EAAA,KAAA,mBApBP,IAIc,CAJdf,EAAAA,YAIcgB,EAAA,CAJA,yBAAOnB,EAAA,WAAU,KAAA,uBAC7B,IAEoB,CAFpBG,EAAAA,YAEoB4I,EAAA,CAFD,MAAA,CAAA,OAAA,SAAA,GAAuB,mBAAC,IAE3C,CAAA,GAAAzI,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAF2C,eAE3C,EAAA,oBAEFH,EAAAA,YAIcgB,EAAA,CAJA,yBAAOnB,EAAA,WAAU,QAAA,uBAC7B,IAEoB,CAFpBG,EAAAA,YAEoB4I,EAAA,CAFD,MAAA,CAAA,OAAA,SAAA,GAAuB,mBAAC,IAE3C,CAAA,GAAAzI,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAF2C,kBAE3C,EAAA,oBAEFH,EAAAA,YAIcgB,EAAA,CAJA,yBAAOnB,EAAA,WAAU,MAAA,uBAC7B,IAEoB,CAFpBG,EAAAA,YAEoB4I,EAAA,CAFD,MAAA,CAAA,OAAA,SAAA,GAAuB,mBAAC,IAE3C,CAAA,GAAAzI,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAF2C,gBAE3C,EAAA,oBAEFH,EAAAA,YAIcgB,EAAA,CAJA,yBAAOnB,EAAA,WAAU,OAAA,uBAC7B,IAEoB,CAFpBG,EAAAA,YAEoB4I,EAAA,CAFD,MAAA,CAAA,OAAA,SAAA,GAAuB,mBAAC,IAE3C,CAAA,GAAAzI,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAF2C,iBAE3C,EAAA,2FAKMkB,EAAA,uCAAZH,EAAAA,YAAAC,EAAAA,mBASM,MATN1B,GASM,CARJO,EAAAA,YAOYiJ,EAAA,CANV,KAAK,4CACL,SAAS,QAEE,UAASxH,EAAAA,QAClB,CAAgE,CAD1C,MAAAyH,KAAK,CAC3BlJ,EAAAA,YAAgEgJ,wCAAhDE,CAAK,CAAA,EAAA,mBAAE,IAAgC,CAAA,GAAA/I,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAhC,mCAAgC,EAAA"}
|
package/dist/Layout-DvBekli8.cjs
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";const y=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs"),e=require("vue"),w=require("./CustomIcon-Bop2mEnu.cjs"),T=require("./fileIcon-BduOQcTc.cjs"),b=require("./TopBar-DLz-U85G.cjs");class k{constructor(){y.hi.get("/openc3-api/autocomplete/data/screen").then(n=>{this.autocompleteData=n.data}),this.api=new y.gi}async getCompletions(n,i,s,o,l){let m=i.getLine(s.row).slice(0,s.column).trimStart().split(/ (?![^<]*>)/),d=this.autocompleteData;m.length>1&&(d=d.find(x=>x.caption===m[0]));let f={},_=!0;if(d&&d.params){d.params.length==m.length-1&&(_=!1);let x=d.params[m.length-2];if(x["Target name"])d=(await this.api.get_target_names()).reduce((r,g)=>(r[g]=1,r),{});else if(x["Packet name"]){let c=m[m.length-2];d=(await this.api.get_all_tlm(c)).reduce((g,u)=>(g[u.packet_name]=u.description,g),{})}else if(x["Item name"]){let c=m[m.length-3],r=m[m.length-2];d=(await this.api.get_tlm(c,r)).items.reduce((u,h)=>(u[h.name]=h.description,u),{})}else d=x;f=Object.keys(d||{}).map(c=>{let r={value:c+(_?" ":""),command:_&&"startAutocomplete"};return typeof d[c]=="string"&&(r.meta=d[c]),r})}else f=d;l(null,f)}}const E={props:{modelValue:Boolean,target:{type:String,default:""},screen:{type:String,default:""},definition:{type:String,default:""},keywords:{type:Array,default:()=>[]},errors:{type:Array,default:()=>[]}},emits:["cancel","delete","save","update:modelValue"],data(){return{file:null,docsKeyword:"",contextMenu:!1,menuX:0,menuY:0}},computed:{editErrors:function(){if(this.definition===""&&!this.file)return["Input can not be blank."];if(this.errors.length!==0){let t=new Set,n=[];const i=this.errors.toSorted((s,o)=>s.lineNumber-o.lineNumber);for(const s of i){let o=`At ${s.lineNumber}: (${s.line}) ${s.message}.`;s.usage&&(o+=` Usage: ${s.usage}`),n.push(o),t.add(s.message)}return n}return[]},show:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}}},mounted:function(){this.editor=y.aceExports.edit(this.$refs.editor),this.editor.setTheme("ace/theme/twilight");const t=this.buildScreenMode();this.editor.session.setMode(new t),this.editor.session.setTabSize(2),this.editor.session.setUseWrapMode(!0),this.editor.$blockScrolling=1/0,this.editor.setOption("enableBasicAutocompletion",!0),this.editor.setOption("enableLiveAutocompletion",!0),this.editor.completers=[new k],this.editor.setHighlightActiveLine(!1),this.editor.setValue(this.definition),this.editor.clearSelection(),b.AceEditorUtils.applyVimModeIfEnabled(this.editor),this.editor.focus()},beforeUnmount(){this.editor.destroy(),this.editor.container.remove()},methods:{toggleVimMode:function(){b.AceEditorUtils.toggleVimMode(this.editor)},showContextMenu:function(t){this.menuX=t.pageX,this.menuY=t.pageY;let n=this.editor.getCursorPosition(),i=this.editor.session.getTokenAt(n.row,n.column);if(i){let s=i.value.trim();s.includes(" ")?this.docsKeyword=s.split(" ")[0]:this.docsKeyword=s,this.contextMenu=!0}},openDocumentation(){window.open(`${window.location.origin}/tools/staticdocs/docs/configuration/telemetry-screens#${this.docsKeyword.toLowerCase()}`,"_blank")},buildScreenMode(){let t=y.aceExports.require("ace/lib/oop"),n=y.aceExports.require("ace/mode/text_highlight_rules").TextHighlightRules,i=this.keywords.join("|"),s=function(){this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"},{token:"constant.numeric",regex:"\\b\\d+(?:\\.\\d+)?\\b"},{token:"keyword",regex:new RegExp(`^\\s*(${i})\\b`)}]},this.normalizeRules()};t.inherits(s,n);let o=function(){this.HighlightRules=s},l=y.aceExports.require("ace/mode/text").Mode;return t.inherits(o,l),(function(){this.$id="ace/mode/openc3"}).call(o.prototype),o},downloadScreen:function(){const t=new Blob([this.editor.getValue()],{type:"text/plain"}),n=document.createElement("a");n.href=URL.createObjectURL(t),n.setAttribute("download",`${this.screen.toLowerCase()}.txt`),n.click()},loadFile:function(){const t=new FileReader;t.readAsText(this.file);const n=this;t.onload=function(){n.editor.setValue(t.result),n.file=null}},deleteScreen:function(){this.$dialog.confirm("Are you sure you want to delete this screen?!",{okText:"Delete",cancelText:"Cancel"}).then(t=>{this.$emit("delete")})}}},D=["textContent"];function I(t,n,i,s,o,l){const a=e.resolveComponent("v-btn"),p=e.resolveComponent("v-spacer"),m=e.resolveComponent("v-toolbar"),d=e.resolveComponent("v-row"),f=e.resolveComponent("v-file-input"),_=e.resolveComponent("v-list-item-title"),x=e.resolveComponent("v-list-item"),c=e.resolveComponent("v-divider"),r=e.resolveComponent("v-list"),g=e.resolveComponent("v-menu"),u=e.resolveComponent("v-card-text"),h=e.resolveComponent("v-card"),C=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(C,{modelValue:l.show,"onUpdate:modelValue":n[5]||(n[5]=v=>l.show=v),persistent:"",width:"75vw"},{default:e.withCtx(()=>[e.createVNode(h,null,{default:e.withCtx(()=>[e.createVNode(m,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a,{class:"mx-2",icon:"mdi-delete",variant:"text",density:"compact","data-test":"delete-screen-icon",onClick:l.deleteScreen},null,8,["onClick"]),e.createVNode(p),e.createElementVNode("span",null," Edit Screen: "+e.toDisplayString(i.target)+" "+e.toDisplayString(i.screen),1),e.createVNode(p),e.createVNode(a,{class:"mx-2",icon:"mdi-download",variant:"text",density:"compact","data-test":"download-screen-icon",onClick:l.downloadScreen},null,8,["onClick"])]),_:1}),e.createVNode(u,{style:{"max-height":"90vh"}},{default:e.withCtx(()=>[e.createVNode(d,{class:"mt-3"},{default:e.withCtx(()=>[...n[6]||(n[6]=[e.createTextVNode(" Upload a screen file. ",-1)])]),_:1}),e.createVNode(d,{"no-gutters":"",align:"center"},{default:e.withCtx(()=>[e.createVNode(a,{disabled:!o.file,color:"primary",class:"mr-3","data-test":"edit-screen-load",onClick:l.loadFile},{default:e.withCtx(()=>[...n[7]||(n[7]=[e.createTextVNode(" Load ",-1)])]),_:1},8,["disabled","onClick"]),e.createVNode(f,{modelValue:o.file,"onUpdate:modelValue":n[0]||(n[0]=v=>o.file=v),"truncate-length":"15",accept:".txt",label:"Click to select .txt screen file."},null,8,["modelValue"])]),_:1}),e.createVNode(d,{class:"mb-2"},{default:e.withCtx(()=>[...n[8]||(n[8]=[e.createTextVNode(" Edit the screen definition. ",-1)])]),_:1}),e.createVNode(d,{class:"mb-2"},{default:e.withCtx(()=>[e.createElementVNode("pre",{ref:"editor",class:"editor",onContextmenu:n[1]||(n[1]=e.withModifiers((...v)=>l.showContextMenu&&l.showContextMenu(...v),["prevent"]))},null,544),e.createVNode(g,{modelValue:o.contextMenu,"onUpdate:modelValue":n[2]||(n[2]=v=>o.contextMenu=v),target:[o.menuX,o.menuY]},{default:e.withCtx(()=>[e.createVNode(r,null,{default:e.withCtx(()=>[e.createVNode(x,{link:""},{default:e.withCtx(()=>[e.createVNode(_,{onClick:l.openDocumentation},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.docsKeyword)+" documentation ",1)]),_:1},8,["onClick"])]),_:1}),e.createVNode(c),e.createVNode(x,{title:"Toggle Vim mode","prepend-icon":"extras:vim",onClick:l.toggleVimMode},null,8,["onClick"])]),_:1})]),_:1},8,["modelValue","target"])]),_:1}),e.createVNode(d,{style:{"max-height":"120px","overflow-y":"auto"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.editErrors,(v,S)=>(e.openBlock(),e.createElementBlock("div",{key:S},[e.createElementVNode("span",{class:"text-red",textContent:e.toDisplayString(v)},null,8,D)]))),128))]),_:1}),e.createVNode(d,{class:"mt-5"},{default:e.withCtx(()=>[n[11]||(n[11]=e.createElementVNode("span",null," Ctrl-space brings up autocomplete. Right click keywords for documentation. ",-1)),e.createVNode(p),e.createVNode(a,{class:"mx-2",variant:"outlined","data-test":"edit-screen-cancel",onClick:n[3]||(n[3]=v=>t.$emit("cancel"))},{default:e.withCtx(()=>[...n[9]||(n[9]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(a,{class:"mx-2",color:"primary","data-test":"edit-screen-save",onClick:n[4]||(n[4]=v=>t.$emit("save",t.editor.getValue()))},{default:e.withCtx(()=>[...n[10]||(n[10]=[e.createTextVNode(" Save ",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])}const N=w._export_sfc(E,[["render",I],["__scopeId","data-v-65b25a74"]]),B={props:{modelValue:Boolean},data(){return{alert:"",alertType:"success",showAlert:!1,search:"",key:"",keyValue:"",environment:[],headers:[{text:"Key",value:"key"},{text:"Value",value:"value"},{text:"Actions",value:"actions",align:"end",sortable:!1}]}},computed:{show:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}}},mounted(){this.update()},methods:{alertHandler:function(t){this.alert=t.text,this.alertType=t.type,this.showAlert=!0},update:function(){y.hi.get("/openc3-api/environment").then(t=>{this.environment=t.data}).catch(t=>{})},addEnvironment:function(){y.hi.post("/openc3-api/environment",{data:{key:this.key.toUpperCase(),value:this.keyValue}}).then(t=>{`${t.data.name}`,this.update()}).catch(t=>{const n={text:`Failed to add environment variable: ${t}`,type:"error"};this.alertHandler(n)}),this.key="",this.keyValue=""},deleteEnvironment:function(t){this.$dialog.confirm(`Are you sure you want to delete: ${t.key}=${t.value}`,{okText:"Delete",cancelText:"Cancel"}).then(n=>y.hi.delete(`/openc3-api/environment/${t.name}`)).then(n=>{const i={text:`Removed environment variable: ${t.name}`,type:"success"};this.alertHandler(i),this.update()}).catch(n=>{const i={text:`Failed to delete environment: ${n}`,type:"error"};this.alertHandler(i)})}}},A={class:"pa-3"};function F(t,n,i,s,o,l){const a=e.resolveComponent("v-spacer"),p=e.resolveComponent("v-toolbar"),m=e.resolveComponent("v-text-field"),d=e.resolveComponent("v-row"),f=e.resolveComponent("v-btn"),_=e.resolveComponent("v-data-table"),x=e.resolveComponent("v-col"),c=e.resolveComponent("v-card-text"),r=e.resolveComponent("v-card"),g=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(g,{modelValue:l.show,"onUpdate:modelValue":n[4]||(n[4]=u=>l.show=u),width:"600"},{default:e.withCtx(()=>[e.createVNode(r,null,{default:e.withCtx(()=>[e.createElementVNode("form",{onSubmit:n[3]||(n[3]=e.withModifiers((...u)=>l.addEnvironment&&l.addEnvironment(...u),["prevent"]))},[e.createVNode(p,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),n[5]||(n[5]=e.createElementVNode("span",null,"Global Environment Variables",-1)),e.createVNode(a)]),_:1}),e.createVNode(c,null,{default:e.withCtx(()=>[e.createElementVNode("div",A,[e.createVNode(d,{dense:"",class:"mb-2"},{default:e.withCtx(()=>[e.createVNode(m,{modelValue:o.search,"onUpdate:modelValue":n[0]||(n[0]=u=>o.search=u),label:"search",type:"text","data-test":"search","prepend-inner-icon":"mdi-magnify",clearable:"",variant:"outlined",density:"compact","clear-icon":"mdi-close-circle-outline",autofocus:"","single-line":"","hide-details":""},null,8,["modelValue"])]),_:1}),e.createVNode(_,{"item-key":"name","hide-default-header":"","data-test":"env-table",search:o.search,headers:o.headers,items:o.environment,"items-per-page":5,"items-per-page-options":[5]},{"item.actions":e.withCtx(({item:u})=>[e.createVNode(f,{icon:"mdi-delete",variant:"text",class:"mt-1","data-test":"item-delete","aria-label":"Delete Environment Variable",onClick:h=>l.deleteEnvironment(u)},null,8,["onClick"])]),_:1},8,["search","headers","items"]),e.createVNode(d,{dense:""},{default:e.withCtx(()=>[e.createVNode(x,null,{default:e.withCtx(()=>[e.createVNode(m,{modelValue:o.key,"onUpdate:modelValue":n[1]||(n[1]=u=>o.key=u),label:"Key","data-test":"env-key"},null,8,["modelValue"])]),_:1}),e.createVNode(x,null,{default:e.withCtx(()=>[e.createVNode(m,{modelValue:o.keyValue,"onUpdate:modelValue":n[2]||(n[2]=u=>o.keyValue=u),label:"Value","data-test":"env-value"},null,8,["modelValue"])]),_:1})]),_:1}),e.createVNode(d,{dense:""},{default:e.withCtx(()=>[e.createVNode(f,{block:"",type:"submit",color:"primary","data-test":"add-env",disabled:!o.key||!o.keyValue,onClick:e.withModifiers(l.addEnvironment,["prevent"])},{default:e.withCtx(()=>[...n[6]||(n[6]=[e.createTextVNode(" Add ",-1)])]),_:1},8,["disabled","onClick"])]),_:1})])]),_:1})],32)]),_:1})]),_:1},8,["modelValue"])}const M=w._export_sfc(B,[["render",F]]),O={class:"tree-node"},R={class:"content-wrapper"},L=["tabindex"],U={key:1},z={key:2,class:"children"},W={__name:"TreeNode",props:{node:{type:Object,required:!0},search:{type:String,default:""},type:{type:String,default:"open"}},emits:["nodeToggled","request"],setup(t,{emit:n}){const i=t,s=e.ref(i.node.isOpen||!1),o=e.computed(()=>{const c=r=>{var g;return!i.search||r.path.toLowerCase().includes(i.search.toLowerCase())?!0:!!((g=r.children)!=null&&g.some(c))};return c(i.node)});e.watch(()=>i.node.isOpen,c=>{s.value=c}),e.watch(()=>i.search,c=>{c?i.node.isOpen||f():i.node.isOpen&&f()});const l=n,a=e.ref({show:!1,text:"",x:0,y:0}),p=(c,r)=>{if(!r||r.length<=50)return;const g=c.target.getBoundingClientRect(),u=g.left,h=g.top;a.value.text=r,a.value.x=u,a.value.y=h-40,a.value.show=!0},m=()=>{a.value.show=!1},d=c=>{c.children?(f(),i.type==="save"&&l("request",c)):l("request",c)},f=()=>{i.node.children&&(s.value=!s.value,i.node.isOpen=s.value,l("nodeToggled",i.node.id,s.value))},_=(c,r)=>{l("nodeToggled",c,r)},x=c=>{l("request",c)};return(c,r)=>{const g=e.resolveComponent("v-tooltip"),u=e.resolveComponent("v-icon"),h=e.resolveComponent("v-btn"),C=e.resolveComponent("tree-node",!0);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(g,{modelValue:a.value.show,"onUpdate:modelValue":r[0]||(r[0]=v=>a.value.show=v),text:a.value.text,location:"top",style:e.normalizeStyle(`position: fixed; left: ${a.value.x}px; top: ${a.value.y}px; pointer-events: none;`)},null,8,["modelValue","text","style"]),e.createElementVNode("div",O,[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"node-content",onClick:r[4]||(r[4]=v=>d(t.node))},[e.createElementVNode("div",R,[t.node.children?(e.openBlock(),e.createBlock(u,{key:0,class:"toggle-icon",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.node.isOpen?"mdi-menu-down":"mdi-menu-right"),1)]),_:1})):e.createCommentVNode("",!0),t.node.children?(e.openBlock(),e.createBlock(u,{key:1,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[...r[5]||(r[5]=[e.createTextVNode(e.toDisplayString("mdi-folder"),-1)])]),_:1})):t.node.title.includes(".rb")?(e.openBlock(),e.createBlock(u,{key:2,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[...r[6]||(r[6]=[e.createTextVNode(e.toDisplayString("mdi-language-ruby"),-1)])]),_:1})):t.node.title.includes(".py")?(e.openBlock(),e.createBlock(u,{key:3,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[...r[7]||(r[7]=[e.createTextVNode(e.toDisplayString("mdi-language-python"),-1)])]),_:1})):(e.openBlock(),e.createBlock(u,{key:4,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[...r[8]||(r[8]=[e.createTextVNode(e.toDisplayString("mdi-file-document"),-1)])]),_:1})),e.createElementVNode("span",{class:"title",tabindex:t.node.children?-1:0,onKeyup:r[1]||(r[1]=e.withKeys(v=>d(t.node),["enter"])),onMouseenter:r[2]||(r[2]=v=>p(v,t.node.title)),onMouseleave:m},e.toDisplayString(t.node.title),41,L),t.node.title==="__TEMP__"?(e.openBlock(),e.createBlock(h,{key:5,icon:"mdi-delete",variant:"text",style:{"margin-left":"auto"},"aria-label":"Delete",onClick:r[3]||(r[3]=v=>l("delete"))})):e.createCommentVNode("",!0)])])):(e.openBlock(),e.createElementBlock("div",U)),t.node.children&&t.node.isOpen?(e.openBlock(),e.createElementBlock("div",z,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.node.children,v=>(e.openBlock(),e.createBlock(C,{key:v.id,node:v,search:t.search,type:t.type,onNodeToggled:_,onRequest:x},null,8,["node","search","type"]))),128))])):e.createCommentVNode("",!0)])],64)}}},P=w._export_sfc(W,[["__scopeId","data-v-9d98e565"]]),q={components:{TreeNode:P},props:{type:{type:String,required:!0,validator:function(t){return["open","save"].indexOf(t)!==-1}},apiUrl:String,requireTargetParentDir:Boolean,inputFilename:String,modelValue:Boolean},data(){return{tree:[],items:[],search:null,selectedFile:null,disableButtons:!1,targets:[],targetsRetrieved:[],loading:!0}},computed:{show:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}},title:function(){return this.type==="open"?"File Open":"File Save As..."},submit:function(){return this.type==="open"?"OPEN":"SAVE"},helpText:function(){return this.type==="open"?"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.":"Click on the folder to save into. Then complete the filename path with the desired name. Use the search box to filter the results."},error:function(){if(this.selectedFile===""||this.selectedFile===null)return"No file selected must select a file";if(!this.selectedFile.match(this.validFilenameRegex)||this.selectedFile.match(/\.\.|\/\/|\.\/|\/\./)){let t=`${this.selectedFile} is not a valid filename. Must `;return this.requireTargetParentDir&&(t+="be in a target directory and "),t+=`only contain alphanumeric characters (including !-_.*) and a valid extension.
|
|
2
|
-
|
|
3
|
-
For example: TGT1/procedures/test.py or TGT2/lib/inst.rb`,t}return this.type==="save"&&this.selectedFile.match(/\*$/)?`${this.selectedFile} is not a valid filename. Must not end in '*'.`:null},validFilenameRegex:function(){const t="0-9a-zA-Z";let i=`[${`${t}\\/\\!\\-\\_\\.\\*\\'\\(\\)`}]+\\.[${t}]+`;return this.requireTargetParentDir&&(i=`\\/?${`(${this.targets.join("|")})`}\\/${i}`),new RegExp(i)}},created(){y.hi.get("/openc3-api/targets").then(t=>{this.targets=t.data,this.targets.push("__TEMP__"),this.targets.forEach(n=>{this.items.push({id:n,disabled:!0,title:n,children:[],path:n}),this.loadFiles(n)}),this.loading=!1})},methods:{calcIcon:function(t){return T.fileIcon(t)},loadFiles:function(t){y.hi.get(this.apiUrl,{params:{target:t}}).then(n=>{if(n.data.length===0){this.items=this.items.filter(s=>s.id!==t);return}for(let s of n.data.sort())this.filepath=s,this.insertFile(this.items,2,s);this.inputFilename&&(this.selectedFile=this.inputFilename);const i=this.items.findIndex(s=>s.id===t);i!==-1&&(this.items[i].disabled=!1)}).catch(n=>{this.$emit("error",`Failed to connect to OpenC3. ${n}`)})},clear:function(){this.show=!1,this.overwrite=!1,this.disableButtons=!1},activeFile:function(t){t.length===0?this.selectedFile=null:(this.selectedFile=this.findItem(this.items,t.id),setTimeout(()=>{this.$refs.submitBtn.$el.focus()},100))},findItem:function(t,n){for(let i of t){if(i.id===n)return i.path;if(i.children){const s=this.findItem(i.children,n);if(s)return s}}return null},exists:function(t,n){let i=!1;for(let s of t){if(s.path===n||s.path.length>1&&s.path[s.path.length-1]==="*"&&s.path.slice(0,s.path.length-1)===n)return!0;s.children&&(i=i||this.exists(s.children,n))}return i},success:function(){this.selectedFile!==null&&this.error===null&&(this.type==="open"?this.openSuccess():this.saveSuccess())},deleteTemp:function(){this.$dialog.confirm("Are you sure you want to delete all the temporary files?",{okText:"Delete",cancelText:"Cancel"}).then(t=>y.hi.delete("/script-api/scripts/temp_files")).then(t=>{this.$emit("clear-temp"),this.loadFiles("__TEMP__")}).catch(t=>{this.$notify.serious({title:"Error",body:`Failed to remove script temporary files due to ${t}`})})},openSuccess:function(){this.disableButtons=!0,y.hi.get(`${this.apiUrl}/${this.selectedFile}`).then(t=>{const n={name:this.selectedFile,contents:t.data.contents};t.data.suites&&(n.suites=JSON.parse(t.data.suites)),t.data.error&&(n.error=t.data.error),t.data.success&&(n.success=t.data.success);const i=t.data.locked,s=t.data.breakpoints;this.$emit("file",{file:n,locked:i,breakpoints:s}),this.clear()}).catch(t=>{this.$emit("error",`Failed to open ${this.selectedFile}. ${t}`),this.clear()})},saveSuccess:function(){this.exists(this.items,this.selectedFile)?this.$dialog.confirm(`Are you sure you want to overwrite: ${this.selectedFile}`,{okText:"Overwrite",cancelText:"Cancel"}).then(n=>{this.$emit("filename",this.selectedFile),this.clear()}).catch(n=>{}):(this.$emit("filename",this.selectedFile),this.clear())},insertFile:function(t,n,i){let s=i.split("/");if(s.length===1){t.push({id:this.filepath,title:s[0],file:"ruby",path:this.filepath});return}const o=t.findIndex(l=>l.title===s[0]);o===-1?(t.push({id:this.filepath.split("/").slice(0,n-1).join("/"),title:s[0],children:[],path:this.filepath.split("/").slice(0,n-1).join("/")}),this.insertFile(t[t.length-1].children,n+1,s.slice(1).join("/"))):this.insertFile(t[o].children,n+1,s.slice(1).join("/"))}}},G={class:"pa-3"},K={class:"overflow-y-auto tree-container"};function Z(t,n,i,s,o,l){const a=e.resolveComponent("v-progress-circular"),p=e.resolveComponent("v-overlay"),m=e.resolveComponent("v-spacer"),d=e.resolveComponent("v-toolbar"),f=e.resolveComponent("v-row"),_=e.resolveComponent("v-text-field"),x=e.resolveComponent("tree-node"),c=e.resolveComponent("v-btn"),r=e.resolveComponent("v-card-text"),g=e.resolveComponent("v-card"),u=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(u,{modelValue:l.show,"onUpdate:modelValue":n[4]||(n[4]=h=>l.show=h),width:"800",onKeydown:n[5]||(n[5]=e.withKeys(h=>l.success(),["enter"]))},{default:e.withCtx(()=>[e.createVNode(g,null,{default:e.withCtx(()=>[e.createVNode(p,{"model-value":o.loading},{default:e.withCtx(()=>[e.createVNode(a,{indeterminate:"",absolute:"",size:"64"})]),_:1},8,["model-value"]),e.createElementVNode("form",{onSubmit:n[3]||(n[3]=e.withModifiers((...h)=>l.success&&l.success(...h),["prevent"]))},[e.createVNode(d,{height:"24"},{default:e.withCtx(()=>[e.createVNode(m),e.createElementVNode("span",null,e.toDisplayString(l.title),1),e.createVNode(m)]),_:1}),e.createVNode(r,null,{default:e.withCtx(()=>[e.createElementVNode("div",G,[e.createVNode(f,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.helpText),1)]),_:1}),e.createVNode(f,{dense:"",class:"mt-5"},{default:e.withCtx(()=>[e.createVNode(_,{modelValue:o.search,"onUpdate:modelValue":n[0]||(n[0]=h=>o.search=h),flat:"",autofocus:"","hide-details":"",clearable:"",label:"Search","prepend-inner-icon":"mdi-magnify",density:"compact","data-test":"file-open-save-search"},null,8,["modelValue"])]),_:1}),e.createElementVNode("div",K,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.items,h=>(e.openBlock(),e.createBlock(x,{key:`${h.id}`,node:h,search:o.search,type:i.type,onRequest:l.activeFile,onDelete:l.deleteTemp},null,8,["node","search","type","onRequest","onDelete"]))),128))]),e.createVNode(f,{class:"my-2"},{default:e.withCtx(()=>[e.createVNode(_,{modelValue:o.selectedFile,"onUpdate:modelValue":n[1]||(n[1]=h=>o.selectedFile=h),"hide-details":"",label:"Filename","data-test":"file-open-save-filename",disabled:i.type==="open"},null,8,["modelValue","disabled"])]),_:1}),e.createVNode(f,{dense:""},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",{class:"my-2 text-red",style:{"white-space":"pre-line"}},e.toDisplayString(l.error),513),[[e.vShow,l.error]])]),_:1}),e.createVNode(f,{class:"mt-2"},{default:e.withCtx(()=>[e.createVNode(m),e.createVNode(c,{variant:"outlined",class:"mx-2","data-test":"file-open-save-cancel-btn",disabled:o.disableButtons,onClick:n[2]||(n[2]=h=>l.show=!1)},{default:e.withCtx(()=>[...n[6]||(n[6]=[e.createTextVNode(" Cancel ",-1)])]),_:1},8,["disabled"]),e.createVNode(c,{ref:"submitBtn",type:"submit",color:"primary",class:"mx-2","data-test":"file-open-save-submit-btn",disabled:o.disableButtons||!!l.error,onClick:e.withModifiers(l.success,["prevent"])},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.submit),1)]),_:1},8,["disabled","onClick"])]),_:1})])]),_:1})],32)]),_:1})]),_:1},8,["modelValue"])}const X=w._export_sfc(q,[["render",Z]]),V=20,Y={components:{EditScreenDialog:N},mixins:[y.WidgetComponents],props:{target:{type:String,default:""},screen:{type:String,default:""},definition:{type:String,default:""},keywords:{type:Array,default:()=>[]},initialFloated:{type:Boolean,default:!1},initialTop:{type:Number,default:0},initialLeft:{type:Number,default:0},initialZ:{type:Number,default:0},minZ:{type:Number,default:0},fixFloated:{type:Boolean,default:!1},count:{type:Number,default:0},showClose:{type:Boolean,default:!0},timeZone:{type:String,default:"local"},inline:{type:Boolean,default:!1},playbackMode:{type:String,default:"realtime"},playbackDateTime:{type:Date,default:null}},emits:["close-screen","delete-screen","drag-screen","edit-screen","float-screen","min-max-screen","unfloat-screen"],data(){return{api:null,backup:"",currentDefinition:this.definition,editDialog:!1,expand:!0,configParser:null,currentLayout:null,layoutStack:[],namedWidgets:{},dynamicWidgets:[],width:null,height:null,staleTime:30,cacheTimeout:.1,globalSettings:[],substitute:!1,original_target_name:null,force_substitute:!1,pollingPeriod:1,errors:[],errorDialog:!1,screenKey:null,dragX:0,dragY:0,floated:this.initialFloated,top:this.initialTop,left:this.initialLeft,zIndex:this.initialZ,changeCounter:0,screenItems:[],actualScreenItems:[],screenValues:{},updateCounter:0,updater:null,screenId:y.lodashExports.uniqueId("openc3-screen_"),tlmAvailableTimeout:null}},computed:{error:function(){if(this.errorDialog&&this.errors.length>0){let t=new Set,n="";for(const i of this.errors){if(t.has(i.message))continue;let s=`${i.time}: (${i.type}) ${i.message}
|
|
4
|
-
`;n+=s,t.add(i.message)}return n}return null},computedStyle(){var i;let t={};const n=this.width||((i=this.$refs.bar)==null?void 0:i.clientWidth);return this.floated&&(t.position="absolute",t.top=this.top+"px",t.left=this.left+"px",t.width=n+"px"),t}},watch:{count:{handler(t,n){this.currentDefinition=this.definition,this.rerender()}},playbackDateTime:{handler(t,n){this.playbackMode==="playback"&&t&&this.update()}},playbackMode:{handler(t,n){t==="realtime"?this.updateRefreshInterval():(clearInterval(this.updater),this.updater=null)}}},errorCaptured(t,n,i){return this.errors.length<V&&(t.usage?this.errors.push({type:"usage",message:t.message,usage:t.usage,line:t.line,lineNumber:t.lineNumber,time:new Date().getTime()}):this.errors.push({type:"error",message:t,time:new Date().getTime()})),!1},created(){this.api=new y.gi,this.configParser=new y.mi,this.parseDefinition(),this.screenKey=Math.floor(Math.random()*1e6)},mounted(){this.playbackMode==="realtime"&&this.updateRefreshInterval(),this.floated&&(this.$refs.bar.onmousedown=this.dragMouseDown,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex)},unmounted(){this.updater!=null&&(clearInterval(this.updater),this.updater=null),this.tlmAvailableTimeout!=null&&(clearTimeout(this.tlmAvailableTimeout),this.tlmAvailableTimeout=null)},methods:{open(t,n){this.$parent.showScreen(t,n)},close(t,n){this.$parent.closeScreenByName(t,n)},closeAll(){this.$parent.closeAll()},clearErrors:function(){this.errors=[]},updateRefreshInterval:function(){let t=this.pollingPeriod*1e3;this.updater&&clearInterval(this.updater),this.updater=setInterval(()=>{this.update()},t)},parseDefinition:function(){if(this.clearErrors(),this.screenItems=[],this.namedWidgets={},this.layoutStack=[],this.dynamicWidgets=[],this.layoutStack.push({type:"VerticalWidget",parameters:[],widgets:[]}),this.currentLayout=this.layoutStack[this.layoutStack.length-1],this.configParser.parse_string(this.currentDefinition,"",!1,!0,(t,n,i,s)=>{if(t)switch(t){case"SCREEN":this.configParser.verify_num_parameters(3,4,`${t} <Width or AUTO> <Height or AUTO> <Polling Period>`),this.width=parseInt(n[0]),this.height=parseInt(n[1]),this.pollingPeriod=parseFloat(n[2]);break;case"END":this.configParser.verify_num_parameters(0,0,`${t}`),this.layoutStack.pop(),this.currentLayout=this.layoutStack[this.layoutStack.length-1];break;case"STALE_TIME":this.configParser.verify_num_parameters(1,1,`${t} <Time (s)>`),this.staleTime=parseInt(n[0]);break;case"SUBSETTING":this.configParser.verify_num_parameters(3,null,`${t} <Index> <Widget Type> <Widget Settings...>`),n[1]==="RAW"&&(n[1]="RAW__"+n[2].toLowerCase());case"SETTING":this.configParser.verify_num_parameters(2,null,`${t} <Widget Type> <Widget Settings...>`),n[0]==="RAW"&&(n[0]="RAW__"+n[1].toLowerCase()),(this.currentLayout.widgets[this.currentLayout.widgets.length-1]??this.currentLayout).settings.push(n);break;case"GLOBAL_SUBSETTING":this.configParser.verify_num_parameters(3,null,`${t} <Index> <Widget Type> <Widget Settings...>`),n[2]==="RAW"&&(n[2]="RAW__"+n[3].toLowerCase());case"GLOBAL_SETTING":this.configParser.verify_num_parameters(2,null,`${t} <Widget Type> <Widget Settings...>`),n[1]==="RAW"&&(n[1]="RAW__"+n[2].toLowerCase()),this.globalSettings.push(n);break;default:this.processWidget(t,n,i,s);break}}),typeof this.layoutStack[0]>"u"){let t=[],n=[];for(const i of this.dynamicWidgets)t.push(i.name),n.push(i.lineNumber);this.errors.length<V&&this.errors.push({type:"usage",message:`Unknown widget! Are these widgets: ${t.join(",")}?`,lineNumber:n.join(","),time:new Date().getTime()}),this.layoutStack[0]={type:"VerticalWidget",parameters:[],widgets:[]}}else this.applyGlobalSettings(this.layoutStack[0].widgets)},openEdit:function(){this.backup=this.currentDefinition.repeat(1),this.editDialog=!0},upScreen:function(){this.zIndex+=1,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex,this.$emit("drag-screen",[this.floated,this.top,this.left,this.zIndex])},downScreen:function(){this.zIndex>this.minZ&&(this.zIndex-=1,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex,this.$emit("drag-screen",[this.floated,this.top,this.left,this.zIndex]))},floatScreen:function(){if(this.floated)this.$refs.bar.onmousedown=null,this.$refs.bar.parentElement.parentElement.style="z-index: 0",this.floated=!1,this.$emit("unfloat-screen",[this.floated,this.top,this.left,this.zIndex]);else{let t=this.$refs.bar.parentElement.parentElement.parentElement.getBoundingClientRect(),n=this.$refs.bar.getBoundingClientRect();this.top=n.top-t.top-5,this.left=n.left-t.left-5,this.$refs.bar.onmousedown=this.dragMouseDown,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex,this.floated=!0,this.$emit("float-screen",[this.floated,this.top,this.left,this.zIndex])}},dragMouseDown:function(t){t=t||window.event,t.preventDefault(),this.dragX=t.clientX,this.dragY=t.clientY,document.onmouseup=this.closeDragElement,document.onmousemove=this.elementDrag},elementDrag:function(t){t=t||window.event,t.preventDefault();let n=this.dragX-t.clientX,i=this.dragY-t.clientY;this.dragX=t.clientX,this.dragY=t.clientY,this.top=this.$refs.bar.offsetTop-i,this.left=this.$refs.bar.offsetLeft-n,this.$emit("drag-screen",[this.floated,this.top,this.left,this.zIndex])},closeDragElement:function(){document.onmouseup=null,document.onmousemove=null},rerender:function(){this.parseDefinition(),this.updateRefreshInterval(),this.screenKey=Math.floor(Math.random()*1e6),this.$nextTick(function(){this.clearErrors(),this.$emit("edit-screen")})},cancelEdit:function(){this.file=null,this.editDialog=!1,this.currentDefinition=this.backup,this.rerender()},saveEdit:function(t){this.editDialog=!1,this.currentDefinition=t,this.rerender(),this.$nextTick(function(){y.hi.post("/openc3-api/screen/",{data:{scope:window.openc3Scope,target:this.target,screen:this.screen,text:this.currentDefinition}},0)})},deleteScreen:function(){this.editDialog=!1,y.hi.delete(`/openc3-api/screen/${this.target}/${this.screen}`).then(t=>{this.$emit("delete-screen")})},minMaxTransition:function(){this.expand=!this.expand,this.$emit("min-max-screen")},processWidget:function(t,n,i,s){let o=null;t==="NAMED_WIDGET"&&(this.configParser.verify_num_parameters(2,null,`${t} <Widget Name> <Widget Type> <Widget Settings... (optional)>`),o=n[0].toUpperCase(),t=n[1].toUpperCase(),n=n.slice(2,n.length));const l=t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()+"Widget";let a=[];if(a.push(["__SCREEN_ID__",this.screenId]),o!==null&&a.push(["NAMED_WIDGET",o]),t==="VERTICAL"||t==="VERTICALBOX"||t==="HORIZONTAL"||t==="HORIZONTALBOX"||t==="MATRIXBYCOLUMNS"||t==="TABBOOK"||t==="TABITEM"||t==="CANVAS"||t==="RADIOGROUP"||t==="SCROLLWINDOW"){const p={type:l,parameters:n,settings:a,screenValues:this.screenValues,screenTimeZone:this.timeZone,widgets:[]};this.layoutStack.push(p),this.currentLayout.widgets.push(p),this.currentLayout=p}else if(this.$options.components[l])this.currentLayout.widgets.push({type:l,target:this.target,parameters:n,settings:a,screenValues:this.screenValues,screenTimeZone:this.timeZone,line:i,lineNumber:s});else{let p={type:"DynamicWidget",target:this.target,parameters:n,settings:a,screenValues:this.screenValues,screenTimeZone:this.timeZone,name:l,line:i,lineNumber:s};this.currentLayout.widgets.push(p),this.dynamicWidgets.push(p)}},applyGlobalSettings:function(t){t.forEach(n=>{this.globalSettings.forEach(i=>{n.type.toLowerCase()===i[0].toLowerCase()+"widget"&&(n.settings.find(o=>o[0]===i[1])||n.settings.push(i.slice(1)))}),n.widgets&&this.applyGlobalSettings(n.widgets)})},update:function(){let t=this.playbackMode==="playback"?this.playbackDateTime:null;this.actualScreenItems.length!==0&&this.api.get_tlm_values(this.actualScreenItems,this.staleTime,this.cacheTimeout,t).then(n=>{n&&n.length>0&&this.updateValues(n)}).catch(n=>{let i=JSON.stringify(n,null,2);this.errors.find(s=>s.message===i)||this.errors.length<V&&this.errors.push({type:"error",message:i,time:new Date().getTime()})})},updateValues:function(t){if(this.updateCounter+=1,t.length!=this.screenItems.length||t.length!=this.actualScreenItems.length)console.log(`get_tlm_values mismatch: data.length: ${t.length}, screenItems.length: ${this.screenItems.length}, actualScreenItems.length: ${this.actualScreenItems.length}`,JSON.stringify(t),JSON.stringify(this.screenItems),JSON.stringify(this.actualScreenItems));else for(let n=0;n<t.length;n++)t[n].push(this.updateCounter),this.screenValues[this.screenItems[n]]=t[n]},debouncedUpdateTlmAvailable:function(){this.tlmAvailableTimeout!=null&&clearTimeout(this.tlmAvailableTimeout),this.tlmAvailableTimeout=setTimeout(()=>{this.api.get_tlm_available(this.screenItems).then(t=>{if(this.actualScreenItems=t,this.screenItems.length!=t.length)console.log("Error getting tlm available",this.screenItems,this.actualScreenItems);else for(let n=0;n<this.actualScreenItems.length;n++)if(this.actualScreenItems[n]===null){const i=this.screenItems[n].split("__"),s=this.currentDefinition.split(`
|
|
5
|
-
`),o=s.findIndex(l=>l.includes(i[0])&&l.includes(i[1])&&l.includes(i[2]))+1;o>0?this.errors.push({type:"usage",message:`Null for ${i.join(" ")}! Does it exist?`,line:s[o-1],lineNumber:o,time:new Date().getTime()}):this.errors.push({type:"error",message:`Null for ${i.join(" ")}! Does it exist?`,time:new Date().getTime()})}}).catch(t=>{console.log("Error getting tlm available",t),this.actualScreenItems=this.screenItems}),this.tlmAvailableTimeout=null},100)},addItem:function(t){this.screenItems.push(t),this.screenValues[t]=[null,null,0],this.debouncedUpdateTlmAvailable()},deleteItem:function(t){let n=this.screenItems.indexOf(t);this.screenItems.splice(n,1),this.debouncedUpdateTlmAvailable()}}},$={ref:"screen",class:"pa-1",style:{position:"relative"}},j={key:1,class:"pa-1",style:{position:"relative"}};function H(t,n,i,s,o,l){const a=e.resolveComponent("v-btn"),p=e.resolveComponent("v-tooltip"),m=e.resolveComponent("v-spacer"),d=e.resolveComponent("v-toolbar"),f=e.resolveComponent("v-overlay"),_=e.resolveComponent("vertical-widget"),x=e.resolveComponent("v-expand-transition"),c=e.resolveComponent("v-card"),r=e.resolveComponent("edit-screen-dialog"),g=e.resolveComponent("v-textarea"),u=e.resolveComponent("v-card-actions"),h=e.resolveComponent("v-dialog");return e.openBlock(),e.createElementBlock("div",{ref:"bar",style:e.normalizeStyle(l.computedStyle)},[i.inline?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(c,{key:0,"min-height":o.height,"min-width":o.width,style:{cursor:"default"}},{default:e.withCtx(()=>[e.createVNode(d,{height:"24"},{default:e.withCtx(()=>[e.withDirectives(e.createVNode(a,{icon:"mdi-alert",variant:"text",density:"compact","data-test":"error-graph-icon","aria-label":"Show Errors",onClick:n[0]||(n[0]=()=>{o.errorDialog=!0})},null,512),[[e.vShow,o.errors.length!==0]]),e.createVNode(a,{icon:"mdi-pencil",variant:"text",density:"compact","data-test":"edit-screen-icon","aria-label":"Edit Screen",onClick:l.openEdit},null,8,["onClick"]),i.fixFloated?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(p,{key:0,"open-delay":600,location:"top"},{activator:e.withCtx(({props:C})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(C)),[e.createVNode(a,{icon:o.floated?"mdi-balloon":"mdi-view-grid-outline",variant:"text",density:"compact","data-test":"float-screen-icon","aria-label":o.floated?"Unfloat Screen":"Float Screen",onClick:l.floatScreen},null,8,["icon","aria-label","onClick"])],16)]),default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(o.floated?"Unfloat Screen":"Float Screen"),1)]),_:1})),o.floated?(e.openBlock(),e.createBlock(p,{key:1,"open-delay":600,location:"top"},{activator:e.withCtx(({props:C})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(C)),[e.createVNode(a,{icon:"mdi-arrow-up",variant:"text",density:"compact","data-test":"up-screen-icon","aria-label":"Move Screen Up",onClick:l.upScreen},null,8,["onClick"])],16)]),default:e.withCtx(()=>[n[6]||(n[6]=e.createElementVNode("span",null," Move Screen Up ",-1))]),_:1})):e.createCommentVNode("",!0),o.floated&&o.zIndex>i.minZ?(e.openBlock(),e.createBlock(p,{key:2,"open-delay":600,location:"top"},{activator:e.withCtx(({props:C})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(C)),[e.createVNode(a,{icon:"mdi-arrow-down",variant:"text",density:"compact","data-test":"down-screen-icon","aria-label":"Move Screen Down",onClick:l.downScreen},null,8,["onClick"])],16)]),default:e.withCtx(()=>[n[7]||(n[7]=e.createElementVNode("span",null," Move Screen Down ",-1))]),_:1})):e.createCommentVNode("",!0),e.createVNode(m),e.createElementVNode("span",null,e.toDisplayString(i.target)+" "+e.toDisplayString(i.screen),1),e.createVNode(m),o.expand?(e.openBlock(),e.createBlock(a,{key:3,icon:"mdi-window-minimize",variant:"text",density:"compact","data-test":"minimize-screen-icon","aria-label":"Minimize Screen",onClick:l.minMaxTransition},null,8,["onClick"])):(e.openBlock(),e.createBlock(a,{key:4,icon:"mdi-window-maximize",variant:"text",density:"compact","data-test":"maximize-screen-icon","aria-label":"Maximize Screen",onClick:l.minMaxTransition},null,8,["onClick"])),i.showClose?(e.openBlock(),e.createBlock(a,{key:5,icon:"mdi-close-box",variant:"text",density:"compact","data-test":"close-screen-icon","aria-label":"Close Screen",onClick:n[1]||(n[1]=C=>t.$emit("close-screen"))})):e.createCommentVNode("",!0)]),_:1}),o.editDialog?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(x,{key:0},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",$,[e.createVNode(f,{style:{"pointer-events":"none"},"model-value":o.errors.length!==0,opacity:"0.8",absolute:"",attach:"","scroll-strategy":"none"},null,8,["model-value"]),(e.openBlock(),e.createBlock(_,{key:o.screenKey,widgets:o.layoutStack[0].widgets,"screen-values":o.screenValues,"screen-time-zone":i.timeZone,onAddItem:l.addItem,onDeleteItem:l.deleteItem,onOpen:l.open,onClose:l.close,onCloseAll:l.closeAll},null,8,["widgets","screen-values","screen-time-zone","onAddItem","onDeleteItem","onOpen","onClose","onCloseAll"]))],512),[[e.vShow,o.expand]])]),_:1}))]),_:1},8,["min-height","min-width"])),i.inline?(e.openBlock(),e.createElementBlock("div",j,[e.createVNode(f,{style:{"pointer-events":"none"},"model-value":o.errors.length!==0,opacity:"0.8",absolute:"",attach:"","scroll-strategy":"none"},null,8,["model-value"]),e.withDirectives(e.createVNode(a,{icon:"mdi-alert",variant:"text",density:"compact","data-test":"error-graph-icon","aria-label":"Show Errors",onClick:n[2]||(n[2]=()=>{o.errorDialog=!0})},null,512),[[e.vShow,o.errors.length!==0]]),(e.openBlock(),e.createBlock(_,{key:o.screenKey,widgets:o.layoutStack[0].widgets,"screen-values":o.screenValues,"screen-time-zone":i.timeZone,onAddItem:l.addItem,onDeleteItem:l.deleteItem,onOpen:l.open,onClose:l.close,onCloseAll:l.closeAll},null,8,["widgets","screen-values","screen-time-zone","onAddItem","onDeleteItem","onOpen","onClose","onCloseAll"]))])):e.createCommentVNode("",!0),o.editDialog?(e.openBlock(),e.createBlock(r,{key:2,modelValue:o.editDialog,"onUpdate:modelValue":n[3]||(n[3]=C=>o.editDialog=C),target:i.target,screen:i.screen,definition:o.currentDefinition,keywords:i.keywords,errors:o.errors,onSave:l.saveEdit,onCancel:l.cancelEdit,onDelete:l.deleteScreen},null,8,["modelValue","target","screen","definition","keywords","errors","onSave","onCancel","onDelete"])):e.createCommentVNode("",!0),e.createVNode(h,{modelValue:o.errorDialog,"onUpdate:modelValue":n[5]||(n[5]=C=>o.errorDialog=C),width:"60vw"},{default:e.withCtx(()=>[e.createVNode(d,{height:"24"},{default:e.withCtx(()=>[e.createVNode(m),e.createElementVNode("span",null," Screen: "+e.toDisplayString(i.target)+" "+e.toDisplayString(i.screen)+" Errors ",1),e.createVNode(m)]),_:1}),e.createVNode(c,null,{default:e.withCtx(()=>[e.createVNode(g,{class:"errors",readonly:"",rows:"13","model-value":l.error},null,8,["model-value"]),e.createVNode(u,{class:"pb-5"},{default:e.withCtx(()=>[e.createVNode(m),e.createVNode(a,{variant:"outlined",class:"mr-2",onClick:l.clearErrors},{default:e.withCtx(()=>[...n[8]||(n[8]=[e.createTextVNode(" Clear Errors ",-1)])]),_:1},8,["onClick"]),e.createVNode(a,{variant:"flat",class:"mr-2",onClick:n[4]||(n[4]=C=>o.errorDialog=!1)},{default:e.withCtx(()=>[...n[9]||(n[9]=[e.createTextVNode(" Close ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])],4)}const J=w._export_sfc(Y,[["render",H],["__scopeId","data-v-95e4a143"]]);exports.EditScreenDialog=N;exports.EnvironmentDialog=M;exports.FileOpenSaveDialog=X;exports.Openc3Screen=J;exports.ScreenCompleter=k;
|
|
6
|
-
//# sourceMappingURL=Openc3Screen-CD3C_EUo.cjs.map
|