@openc3/vue-common 6.4.0 → 6.4.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-Ba-YDfZB.cjs → ArrayWidget-C7qsXQC9.cjs} +2 -2
- package/dist/{ArrayWidget-Ba-YDfZB.cjs.map → ArrayWidget-C7qsXQC9.cjs.map} +1 -1
- package/dist/{ArrayWidget-DAZApfkV.js → ArrayWidget-CeyoPOhk.js} +4 -4
- package/dist/{ArrayWidget-DAZApfkV.js.map → ArrayWidget-CeyoPOhk.js.map} +1 -1
- package/dist/{ArrayplotWidget-BfsxDplv.js → ArrayplotWidget-BEw4fJPY.js} +3 -3
- package/dist/{ArrayplotWidget-BfsxDplv.js.map → ArrayplotWidget-BEw4fJPY.js.map} +1 -1
- package/dist/{ArrayplotWidget-Ckm4lmSc.cjs → ArrayplotWidget-S4tyM6zU.cjs} +2 -2
- package/dist/{ArrayplotWidget-Ckm4lmSc.cjs.map → ArrayplotWidget-S4tyM6zU.cjs.map} +1 -1
- package/dist/{BarColumn-Cp7oEFJR.cjs → BarColumn-B2FQVNoP.cjs} +2 -2
- package/dist/{BarColumn-Cp7oEFJR.cjs.map → BarColumn-B2FQVNoP.cjs.map} +1 -1
- package/dist/{BarColumn-q0nAsvrd.js → BarColumn-CIWppEH6.js} +3 -3
- package/dist/{BarColumn-q0nAsvrd.js.map → BarColumn-CIWppEH6.js.map} +1 -1
- package/dist/{BlockWidget-SDCUWcMQ.js → BlockWidget-DRtBkPat.js} +4 -4
- package/dist/{BlockWidget-SDCUWcMQ.js.map → BlockWidget-DRtBkPat.js.map} +1 -1
- package/dist/{BlockWidget-DRB-TDL_.cjs → BlockWidget-EZBTae9s.cjs} +2 -2
- package/dist/{BlockWidget-DRB-TDL_.cjs.map → BlockWidget-EZBTae9s.cjs.map} +1 -1
- package/dist/{ButtonWidget-BVMjwC19.js → ButtonWidget-4GORf9BG.js} +4 -4
- package/dist/{ButtonWidget-BVMjwC19.js.map → ButtonWidget-4GORf9BG.js.map} +1 -1
- package/dist/{ButtonWidget-yJ70adEU.cjs → ButtonWidget-C0UM4M51.cjs} +2 -2
- package/dist/{ButtonWidget-yJ70adEU.cjs.map → ButtonWidget-C0UM4M51.cjs.map} +1 -1
- package/dist/{CanvasWidget-DXkxnt1x.cjs → CanvasWidget-77u4rg8R.cjs} +2 -2
- package/dist/{CanvasWidget-DXkxnt1x.cjs.map → CanvasWidget-77u4rg8R.cjs.map} +1 -1
- package/dist/{CanvasWidget-bVkufjRQ.js → CanvasWidget-VW1uHIU0.js} +2 -2
- package/dist/{CanvasWidget-bVkufjRQ.js.map → CanvasWidget-VW1uHIU0.js.map} +1 -1
- package/dist/{CanvasdotWidget-Bi3nZh7g.cjs → CanvasdotWidget-B4olJsKr.cjs} +2 -2
- package/dist/{CanvasdotWidget-Bi3nZh7g.cjs.map → CanvasdotWidget-B4olJsKr.cjs.map} +1 -1
- package/dist/{CanvasdotWidget-DpniFfca.js → CanvasdotWidget-unc83V9l.js} +2 -2
- package/dist/{CanvasdotWidget-DpniFfca.js.map → CanvasdotWidget-unc83V9l.js.map} +1 -1
- package/dist/{CanvasimageWidget-C-aBl-by.cjs → CanvasimageWidget-BPk3GdGV.cjs} +2 -2
- package/dist/{CanvasimageWidget-C-aBl-by.cjs.map → CanvasimageWidget-BPk3GdGV.cjs.map} +1 -1
- package/dist/{CanvasimageWidget-DHOSz-dJ.js → CanvasimageWidget-CNPV5Ale.js} +3 -3
- package/dist/{CanvasimageWidget-DHOSz-dJ.js.map → CanvasimageWidget-CNPV5Ale.js.map} +1 -1
- package/dist/{CanvasimagevalueWidget-DAbbV-LB.cjs → CanvasimagevalueWidget-DpPDDitX.cjs} +2 -2
- package/dist/{CanvasimagevalueWidget-DAbbV-LB.cjs.map → CanvasimagevalueWidget-DpPDDitX.cjs.map} +1 -1
- package/dist/{CanvasimagevalueWidget-zrURWWUL.js → CanvasimagevalueWidget-DsQbSZt_.js} +3 -3
- package/dist/{CanvasimagevalueWidget-zrURWWUL.js.map → CanvasimagevalueWidget-DsQbSZt_.js.map} +1 -1
- package/dist/{CanvaslabelWidget-D-XAMifp.js → CanvaslabelWidget-B-5KAkZr.js} +2 -2
- package/dist/{CanvaslabelWidget-D-XAMifp.js.map → CanvaslabelWidget-B-5KAkZr.js.map} +1 -1
- package/dist/{CanvaslabelWidget-82bf_Awf.cjs → CanvaslabelWidget-CjKvr47x.cjs} +2 -2
- package/dist/{CanvaslabelWidget-82bf_Awf.cjs.map → CanvaslabelWidget-CjKvr47x.cjs.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-DgDzwLdi.cjs → CanvaslabelvalueWidget-C0jdjHxr.cjs} +2 -2
- package/dist/{CanvaslabelvalueWidget-DgDzwLdi.cjs.map → CanvaslabelvalueWidget-C0jdjHxr.cjs.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-BsIdBtEb.js → CanvaslabelvalueWidget-DX-b_55r.js} +2 -2
- package/dist/{CanvaslabelvalueWidget-BsIdBtEb.js.map → CanvaslabelvalueWidget-DX-b_55r.js.map} +1 -1
- package/dist/{CanvaslineWidget-BRRPuuqS.cjs → CanvaslineWidget-C-4EjDkj.cjs} +2 -2
- package/dist/{CanvaslineWidget-BRRPuuqS.cjs.map → CanvaslineWidget-C-4EjDkj.cjs.map} +1 -1
- package/dist/{CanvaslineWidget-CA2aPGRg.js → CanvaslineWidget-DiNWzbpu.js} +2 -2
- package/dist/{CanvaslineWidget-CA2aPGRg.js.map → CanvaslineWidget-DiNWzbpu.js.map} +1 -1
- package/dist/{CanvaslinevalueWidget-J7epKRlo.js → CanvaslinevalueWidget-Du9pwAN7.js} +2 -2
- package/dist/{CanvaslinevalueWidget-J7epKRlo.js.map → CanvaslinevalueWidget-Du9pwAN7.js.map} +1 -1
- package/dist/{CanvaslinevalueWidget-BYjWr2gq.cjs → CanvaslinevalueWidget-x81dANpk.cjs} +2 -2
- package/dist/{CanvaslinevalueWidget-BYjWr2gq.cjs.map → CanvaslinevalueWidget-x81dANpk.cjs.map} +1 -1
- package/dist/{CheckbuttonWidget-ByH-PDRG.js → CheckbuttonWidget--QM-segm.js} +2 -2
- package/dist/{CheckbuttonWidget-ByH-PDRG.js.map → CheckbuttonWidget--QM-segm.js.map} +1 -1
- package/dist/{CheckbuttonWidget-DkoFFTcM.cjs → CheckbuttonWidget-LWSGbUuH.cjs} +2 -2
- package/dist/{CheckbuttonWidget-DkoFFTcM.cjs.map → CheckbuttonWidget-LWSGbUuH.cjs.map} +1 -1
- package/dist/{ComboboxWidget-Bdm_fMzW.js → ComboboxWidget-BDpHIcCo.js} +2 -2
- package/dist/{ComboboxWidget-Bdm_fMzW.js.map → ComboboxWidget-BDpHIcCo.js.map} +1 -1
- package/dist/{ComboboxWidget-Dq28F4bs.cjs → ComboboxWidget-DR8EmM6T.cjs} +2 -2
- package/dist/{ComboboxWidget-Dq28F4bs.cjs.map → ComboboxWidget-DR8EmM6T.cjs.map} +1 -1
- package/dist/{CriticalCmdDialog-CLF7hYKu.cjs → CriticalCmdDialog-Ct5WeIW_.cjs} +2 -2
- package/dist/{CriticalCmdDialog-CLF7hYKu.cjs.map → CriticalCmdDialog-Ct5WeIW_.cjs.map} +1 -1
- package/dist/{CriticalCmdDialog-Bcq8PGag.js → CriticalCmdDialog-D4-eoA3P.js} +2 -2
- package/dist/{CriticalCmdDialog-Bcq8PGag.js.map → CriticalCmdDialog-D4-eoA3P.js.map} +1 -1
- package/dist/{DateWidget-BaQqthC7.js → DateWidget-BCmQNavZ.js} +2 -2
- package/dist/{DateWidget-BaQqthC7.js.map → DateWidget-BCmQNavZ.js.map} +1 -1
- package/dist/{DateWidget-DCayVS3o.cjs → DateWidget-CBzHYk5i.cjs} +2 -2
- package/dist/{DateWidget-DCayVS3o.cjs.map → DateWidget-CBzHYk5i.cjs.map} +1 -1
- package/dist/{DetailsDialog-C5jf8o0K.js → DetailsDialog-OMd7LWdZ.js} +2 -2
- package/dist/{DetailsDialog-C5jf8o0K.js.map → DetailsDialog-OMd7LWdZ.js.map} +1 -1
- package/dist/{DetailsDialog-CangkVuF.cjs → DetailsDialog-T9G076-B.cjs} +2 -2
- package/dist/{DetailsDialog-CangkVuF.cjs.map → DetailsDialog-T9G076-B.cjs.map} +1 -1
- package/dist/EventListDialog-COOwwkxk.cjs +2 -0
- package/dist/EventListDialog-COOwwkxk.cjs.map +1 -0
- package/dist/{EventListDialog-Bniar26O.js → EventListDialog-ankpCg-n.js} +58 -54
- package/dist/EventListDialog-ankpCg-n.js.map +1 -0
- package/dist/{FormatvalueWidget--H5B9i_Y.js → FormatvalueWidget-CPn5mDHY.js} +3 -3
- package/dist/{FormatvalueWidget--H5B9i_Y.js.map → FormatvalueWidget-CPn5mDHY.js.map} +1 -1
- package/dist/{FormatvalueWidget-CDh1rF5P.cjs → FormatvalueWidget-wjsl4ty0.cjs} +2 -2
- package/dist/{FormatvalueWidget-CDh1rF5P.cjs.map → FormatvalueWidget-wjsl4ty0.cjs.map} +1 -1
- package/dist/{Graph-DIR-5tJu.cjs → Graph-hTOB_jv2.cjs} +2 -2
- package/dist/{Graph-DIR-5tJu.cjs.map → Graph-hTOB_jv2.cjs.map} +1 -1
- package/dist/{Graph-M382Zo8o.js → Graph-vUcIyyTp.js} +2 -2
- package/dist/{Graph-M382Zo8o.js.map → Graph-vUcIyyTp.js.map} +1 -1
- package/dist/{GraphWidget-_YOGDD1U.js → GraphWidget-Cl97QQYm.js} +2 -2
- package/dist/{GraphWidget-_YOGDD1U.js.map → GraphWidget-Cl97QQYm.js.map} +1 -1
- package/dist/{GraphWidget-CNUOLw5-.cjs → GraphWidget-D3rDXvA8.cjs} +2 -2
- package/dist/{GraphWidget-CNUOLw5-.cjs.map → GraphWidget-D3rDXvA8.cjs.map} +1 -1
- package/dist/{HorizontalWidget-Bix4q7It.cjs → HorizontalWidget-72nrDrwn.cjs} +2 -2
- package/dist/{HorizontalWidget-Bix4q7It.cjs.map → HorizontalWidget-72nrDrwn.cjs.map} +1 -1
- package/dist/{HorizontalWidget-D_gzrOWs.js → HorizontalWidget-CtTkQHl-.js} +2 -2
- package/dist/{HorizontalWidget-D_gzrOWs.js.map → HorizontalWidget-CtTkQHl-.js.map} +1 -1
- package/dist/{HorizontalboxWidget-B8a4-h2J.cjs → HorizontalboxWidget-C8kuEm-u.cjs} +2 -2
- package/dist/{HorizontalboxWidget-B8a4-h2J.cjs.map → HorizontalboxWidget-C8kuEm-u.cjs.map} +1 -1
- package/dist/{HorizontalboxWidget-GDcjO-UB.js → HorizontalboxWidget-Dn9zVn4r.js} +5 -5
- package/dist/{HorizontalboxWidget-GDcjO-UB.js.map → HorizontalboxWidget-Dn9zVn4r.js.map} +1 -1
- package/dist/{HorizontallineWidget-DZvOYFxf.js → HorizontallineWidget-BBvYWaP7.js} +2 -2
- package/dist/{HorizontallineWidget-DZvOYFxf.js.map → HorizontallineWidget-BBvYWaP7.js.map} +1 -1
- package/dist/{HorizontallineWidget-BD6dqVhE.cjs → HorizontallineWidget-Bs_p5rzY.cjs} +2 -2
- package/dist/{HorizontallineWidget-BD6dqVhE.cjs.map → HorizontallineWidget-Bs_p5rzY.cjs.map} +1 -1
- package/dist/{IframeWidget-DL_CET3B.cjs → IframeWidget-Bhl0G51c.cjs} +2 -2
- package/dist/{IframeWidget-DL_CET3B.cjs.map → IframeWidget-Bhl0G51c.cjs.map} +1 -1
- package/dist/{IframeWidget-CuUav9b3.js → IframeWidget-BmZOip3U.js} +2 -2
- package/dist/{IframeWidget-CuUav9b3.js.map → IframeWidget-BmZOip3U.js.map} +1 -1
- package/dist/{ImageLoader-DaWMqoJS.cjs → ImageLoader-CXV42ZAx.cjs} +2 -2
- package/dist/{ImageLoader-DaWMqoJS.cjs.map → ImageLoader-CXV42ZAx.cjs.map} +1 -1
- package/dist/{ImageLoader-3KLKJ5mV.js → ImageLoader-wYNaGuuz.js} +2 -2
- package/dist/{ImageLoader-3KLKJ5mV.js.map → ImageLoader-wYNaGuuz.js.map} +1 -1
- package/dist/{ImageviewerWidget-_0YopZ1s.cjs → ImageviewerWidget-BAK_GlYK.cjs} +2 -2
- package/dist/{ImageviewerWidget-_0YopZ1s.cjs.map → ImageviewerWidget-BAK_GlYK.cjs.map} +1 -1
- package/dist/{ImageviewerWidget-BMZ6REN4.js → ImageviewerWidget-ByuTqBHq.js} +2 -2
- package/dist/{ImageviewerWidget-BMZ6REN4.js.map → ImageviewerWidget-ByuTqBHq.js.map} +1 -1
- package/dist/{InterfacesTab-DTixVrGo.js → InterfacesTab-BbsiYwEX.js} +3 -3
- package/dist/{InterfacesTab-DTixVrGo.js.map → InterfacesTab-BbsiYwEX.js.map} +1 -1
- package/dist/{InterfacesTab-DGrLsTA0.cjs → InterfacesTab-CnQLkjoz.cjs} +2 -2
- package/dist/{InterfacesTab-DGrLsTA0.cjs.map → InterfacesTab-CnQLkjoz.cjs.map} +1 -1
- package/dist/{LabelWidget-DkZvBxYg.cjs → LabelWidget-BP72ze-R.cjs} +2 -2
- package/dist/{LabelWidget-DkZvBxYg.cjs.map → LabelWidget-BP72ze-R.cjs.map} +1 -1
- package/dist/{LabelWidget-oh6FIG6s.js → LabelWidget-Dmb5F5j-.js} +2 -2
- package/dist/{LabelWidget-oh6FIG6s.js.map → LabelWidget-Dmb5F5j-.js.map} +1 -1
- package/dist/{LabelledWidget-D7nm73kj.cjs → LabelledWidget-DIflzlDv.cjs} +2 -2
- package/dist/{LabelledWidget-D7nm73kj.cjs.map → LabelledWidget-DIflzlDv.cjs.map} +1 -1
- package/dist/{LabelledWidget-Bic36les.js → LabelledWidget-DV1IbbPS.js} +4 -4
- package/dist/{LabelledWidget-Bic36les.js.map → LabelledWidget-DV1IbbPS.js.map} +1 -1
- package/dist/{LabelprogressbarWidget-DY0Xd2c2.cjs → LabelprogressbarWidget-B18EaMhU.cjs} +2 -2
- package/dist/{LabelprogressbarWidget-DY0Xd2c2.cjs.map → LabelprogressbarWidget-B18EaMhU.cjs.map} +1 -1
- package/dist/{LabelprogressbarWidget-CqIiGoDb.js → LabelprogressbarWidget-BHBDYVZp.js} +4 -4
- package/dist/{LabelprogressbarWidget-CqIiGoDb.js.map → LabelprogressbarWidget-BHBDYVZp.js.map} +1 -1
- package/dist/{LabelsparklineWidget-DLhmqO02.js → LabelsparklineWidget-BaoIdd7s.js} +4 -4
- package/dist/{LabelsparklineWidget-DLhmqO02.js.map → LabelsparklineWidget-BaoIdd7s.js.map} +1 -1
- package/dist/{LabelsparklineWidget-DZ5-iEcK.cjs → LabelsparklineWidget-Bdft2p6Y.cjs} +2 -2
- package/dist/{LabelsparklineWidget-DZ5-iEcK.cjs.map → LabelsparklineWidget-Bdft2p6Y.cjs.map} +1 -1
- package/dist/{LabelvalueWidget-D-u38nLh.cjs → LabelvalueWidget-DiqMgePn.cjs} +2 -2
- package/dist/{LabelvalueWidget-D-u38nLh.cjs.map → LabelvalueWidget-DiqMgePn.cjs.map} +1 -1
- package/dist/{LabelvalueWidget-BefwSSVq.js → LabelvalueWidget-wuW55zQP.js} +4 -4
- package/dist/{LabelvalueWidget-BefwSSVq.js.map → LabelvalueWidget-wuW55zQP.js.map} +1 -1
- package/dist/{LabelvaluedescWidget-NxrCzznm.js → LabelvaluedescWidget-BBHwqvj4.js} +5 -5
- package/dist/{LabelvaluedescWidget-NxrCzznm.js.map → LabelvaluedescWidget-BBHwqvj4.js.map} +1 -1
- package/dist/{LabelvaluedescWidget-DMuBCLM8.cjs → LabelvaluedescWidget-fN9XLm-N.cjs} +2 -2
- package/dist/{LabelvaluedescWidget-DMuBCLM8.cjs.map → LabelvaluedescWidget-fN9XLm-N.cjs.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-pq7qoolL.js → LabelvaluelimitsbarWidget-77Rc3lCf.js} +4 -4
- package/dist/{LabelvaluelimitsbarWidget-pq7qoolL.js.map → LabelvaluelimitsbarWidget-77Rc3lCf.js.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-BY212bgc.cjs → LabelvaluelimitsbarWidget-Dp5qsue9.cjs} +2 -2
- package/dist/{LabelvaluelimitsbarWidget-BY212bgc.cjs.map → LabelvaluelimitsbarWidget-Dp5qsue9.cjs.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-edkpogsl.js → LabelvaluelimitscolumnWidget-nounrACl.js} +5 -5
- package/dist/{LabelvaluelimitscolumnWidget-edkpogsl.js.map → LabelvaluelimitscolumnWidget-nounrACl.js.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-DVLGU6ja.cjs → LabelvaluelimitscolumnWidget-uR4QE_cm.cjs} +2 -2
- package/dist/{LabelvaluelimitscolumnWidget-DVLGU6ja.cjs.map → LabelvaluelimitscolumnWidget-uR4QE_cm.cjs.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-DpJNv9dh.js → LabelvaluerangebarWidget-B83Jj5Q1.js} +4 -4
- package/dist/{LabelvaluerangebarWidget-DpJNv9dh.js.map → LabelvaluerangebarWidget-B83Jj5Q1.js.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-CA_7kTS2.cjs → LabelvaluerangebarWidget-MVkSnTVH.cjs} +2 -2
- package/dist/{LabelvaluerangebarWidget-CA_7kTS2.cjs.map → LabelvaluerangebarWidget-MVkSnTVH.cjs.map} +1 -1
- package/dist/{Layout-B0hvhBQO.js → Layout-ByQC7nQ3.js} +2 -2
- package/dist/{Layout-B0hvhBQO.js.map → Layout-ByQC7nQ3.js.map} +1 -1
- package/dist/Layout-CFJMHNqy.cjs +2 -0
- package/dist/{Layout-BLADjt_A.cjs.map → Layout-CFJMHNqy.cjs.map} +1 -1
- package/dist/{LedWidget--4eSxBnn.js → LedWidget-Cccb8YTk.js} +4 -4
- package/dist/{LedWidget--4eSxBnn.js.map → LedWidget-Cccb8YTk.js.map} +1 -1
- package/dist/{LedWidget-BoZKOBZg.cjs → LedWidget-ghzR6jZJ.cjs} +2 -2
- package/dist/{LedWidget-BoZKOBZg.cjs.map → LedWidget-ghzR6jZJ.cjs.map} +1 -1
- package/dist/{LimitsbarWidget-BQaumgRt.js → LimitsbarWidget-D1EBBwX1.js} +2 -2
- package/dist/{LimitsbarWidget-BQaumgRt.js.map → LimitsbarWidget-D1EBBwX1.js.map} +1 -1
- package/dist/{LimitsbarWidget-CyHbbNx3.cjs → LimitsbarWidget-Dg2_T5OY.cjs} +2 -2
- package/dist/{LimitsbarWidget-CyHbbNx3.cjs.map → LimitsbarWidget-Dg2_T5OY.cjs.map} +1 -1
- package/dist/{LimitscolorWidget-BBF9sRtF.js → LimitscolorWidget--1aPSNVB.js} +2 -2
- package/dist/{LimitscolorWidget-BBF9sRtF.js.map → LimitscolorWidget--1aPSNVB.js.map} +1 -1
- package/dist/{LimitscolorWidget-CsuRoqxm.cjs → LimitscolorWidget-D9mHLFOs.cjs} +2 -2
- package/dist/{LimitscolorWidget-CsuRoqxm.cjs.map → LimitscolorWidget-D9mHLFOs.cjs.map} +1 -1
- package/dist/{LimitscolumnWidget-Cr1qFT8M.cjs → LimitscolumnWidget-D18x3aW-.cjs} +2 -2
- package/dist/{LimitscolumnWidget-Cr1qFT8M.cjs.map → LimitscolumnWidget-D18x3aW-.cjs.map} +1 -1
- package/dist/{LimitscolumnWidget-DZZtSoXw.js → LimitscolumnWidget-swnMNApm.js} +2 -2
- package/dist/{LimitscolumnWidget-DZZtSoXw.js.map → LimitscolumnWidget-swnMNApm.js.map} +1 -1
- package/dist/{LinegraphWidget-DTLZmyWs.js → LinegraphWidget-BbI-wOnq.js} +4 -4
- package/dist/{LinegraphWidget-DTLZmyWs.js.map → LinegraphWidget-BbI-wOnq.js.map} +1 -1
- package/dist/{LinegraphWidget-Cw9vua8K.cjs → LinegraphWidget-BdCc6zps.cjs} +2 -2
- package/dist/{LinegraphWidget-Cw9vua8K.cjs.map → LinegraphWidget-BdCc6zps.cjs.map} +1 -1
- package/dist/{MatrixbycolumnsWidget-dpgZz4wR.js → MatrixbycolumnsWidget-Bx2qMr8P.js} +3 -3
- package/dist/{MatrixbycolumnsWidget-dpgZz4wR.js.map → MatrixbycolumnsWidget-Bx2qMr8P.js.map} +1 -1
- package/dist/{MatrixbycolumnsWidget-Digh2kY7.cjs → MatrixbycolumnsWidget-CuhTHsdb.cjs} +2 -2
- package/dist/{MatrixbycolumnsWidget-Digh2kY7.cjs.map → MatrixbycolumnsWidget-CuhTHsdb.cjs.map} +1 -1
- package/dist/{MicroservicesTab-BQywJ_ya.cjs → MicroservicesTab-7mVRcHEj.cjs} +2 -2
- package/dist/{MicroservicesTab-BQywJ_ya.cjs.map → MicroservicesTab-7mVRcHEj.cjs.map} +1 -1
- package/dist/{MicroservicesTab-DbL48MBc.js → MicroservicesTab-CtI7BEt0.js} +3 -3
- package/dist/{MicroservicesTab-DbL48MBc.js.map → MicroservicesTab-CtI7BEt0.js.map} +1 -1
- package/dist/{Openc3Screen-COi4u-9k.cjs → Openc3Screen-B4X70CVP.cjs} +3 -3
- package/dist/Openc3Screen-B4X70CVP.cjs.map +1 -0
- package/dist/{Openc3Screen-CtwGKfq-.js → Openc3Screen-DFYYhHt7.js} +178 -164
- package/dist/Openc3Screen-DFYYhHt7.js.map +1 -0
- package/dist/{OutputDialog-B5qHVyck.js → OutputDialog-CqD5uI0m.js} +2 -2
- package/dist/{OutputDialog-B5qHVyck.js.map → OutputDialog-CqD5uI0m.js.map} +1 -1
- package/dist/{OutputDialog-CFhG2RY9.cjs → OutputDialog-Dft9Xm4R.cjs} +2 -2
- package/dist/{OutputDialog-CFhG2RY9.cjs.map → OutputDialog-Dft9Xm4R.cjs.map} +1 -1
- package/dist/{PackagesTab-DXSowjd4.cjs → PackagesTab-BxP1kiSR.cjs} +2 -2
- package/dist/{PackagesTab-DXSowjd4.cjs.map → PackagesTab-BxP1kiSR.cjs.map} +1 -1
- package/dist/{PackagesTab-Bw34RkLc.js → PackagesTab-DhMk-fi5.js} +3 -3
- package/dist/{PackagesTab-Bw34RkLc.js.map → PackagesTab-DhMk-fi5.js.map} +1 -1
- package/dist/{PluginsTab-CPaBGJMa.cjs → PluginsTab-BKJo5vK-.cjs} +2 -2
- package/dist/{PluginsTab-CPaBGJMa.cjs.map → PluginsTab-BKJo5vK-.cjs.map} +1 -1
- package/dist/{PluginsTab-C9t0-QVm.js → PluginsTab-DxxEqPCA.js} +3 -3
- package/dist/{PluginsTab-C9t0-QVm.js.map → PluginsTab-DxxEqPCA.js.map} +1 -1
- package/dist/{ProgressbarWidget-7cYr8136.js → ProgressbarWidget-7rJeuX6H.js} +2 -2
- package/dist/{ProgressbarWidget-7cYr8136.js.map → ProgressbarWidget-7rJeuX6H.js.map} +1 -1
- package/dist/{ProgressbarWidget-CdOWGViG.cjs → ProgressbarWidget-DLvbQ0g-.cjs} +2 -2
- package/dist/{ProgressbarWidget-CdOWGViG.cjs.map → ProgressbarWidget-DLvbQ0g-.cjs.map} +1 -1
- package/dist/{RadiobuttonWidget-5t4ofYx3.cjs → RadiobuttonWidget-C15SchQH.cjs} +2 -2
- package/dist/{RadiobuttonWidget-5t4ofYx3.cjs.map → RadiobuttonWidget-C15SchQH.cjs.map} +1 -1
- package/dist/{RadiobuttonWidget-DTfn-7F2.js → RadiobuttonWidget-DsEw3JiU.js} +2 -2
- package/dist/{RadiobuttonWidget-DTfn-7F2.js.map → RadiobuttonWidget-DsEw3JiU.js.map} +1 -1
- package/dist/{RadiogroupWidget-emxyymRZ.cjs → RadiogroupWidget-BZS_MkSP.cjs} +2 -2
- package/dist/{RadiogroupWidget-emxyymRZ.cjs.map → RadiogroupWidget-BZS_MkSP.cjs.map} +1 -1
- package/dist/{RadiogroupWidget-DWvTpw94.js → RadiogroupWidget-DhfbTvQ8.js} +2 -2
- package/dist/{RadiogroupWidget-DWvTpw94.js.map → RadiogroupWidget-DhfbTvQ8.js.map} +1 -1
- package/dist/{RangebarWidget-CG2Y7eYp.js → RangebarWidget-BEGvSL_K.js} +2 -2
- package/dist/{RangebarWidget-CG2Y7eYp.js.map → RangebarWidget-BEGvSL_K.js.map} +1 -1
- package/dist/{RangebarWidget-CLMKfbiT.cjs → RangebarWidget-bBSBfvHk.cjs} +2 -2
- package/dist/{RangebarWidget-CLMKfbiT.cjs.map → RangebarWidget-bBSBfvHk.cjs.map} +1 -1
- package/dist/{RedisTab-CvPLS0Qe.js → RedisTab-Bq8Frctp.js} +2 -2
- package/dist/{RedisTab-CvPLS0Qe.js.map → RedisTab-Bq8Frctp.js.map} +1 -1
- package/dist/{RedisTab-PbizvHjY.cjs → RedisTab-CWYntIvy.cjs} +2 -2
- package/dist/{RedisTab-PbizvHjY.cjs.map → RedisTab-CWYntIvy.cjs.map} +1 -1
- package/dist/{RollupWidget-C6HKTfCR.js → RollupWidget-BZhspgWd.js} +2 -2
- package/dist/{RollupWidget-C6HKTfCR.js.map → RollupWidget-BZhspgWd.js.map} +1 -1
- package/dist/{RollupWidget-CHKUdXMx.cjs → RollupWidget-BueYskqE.cjs} +2 -2
- package/dist/{RollupWidget-CHKUdXMx.cjs.map → RollupWidget-BueYskqE.cjs.map} +1 -1
- package/dist/{RoutersTab-D-ex_yMO.js → RoutersTab-Bg6dpAXr.js} +3 -3
- package/dist/{RoutersTab-D-ex_yMO.js.map → RoutersTab-Bg6dpAXr.js.map} +1 -1
- package/dist/{RoutersTab-zkaML-Xt.cjs → RoutersTab-DOseaOsv.cjs} +2 -2
- package/dist/{RoutersTab-zkaML-Xt.cjs.map → RoutersTab-DOseaOsv.cjs.map} +1 -1
- package/dist/{ScriptChooser-Dkf84RzQ.cjs → ScriptChooser-CHkObjcT.cjs} +2 -2
- package/dist/{ScriptChooser-Dkf84RzQ.cjs.map → ScriptChooser-CHkObjcT.cjs.map} +1 -1
- package/dist/{ScriptChooser-qiC2xQ_W.js → ScriptChooser-DBkFAc6E.js} +2 -2
- package/dist/{ScriptChooser-qiC2xQ_W.js.map → ScriptChooser-DBkFAc6E.js.map} +1 -1
- package/dist/{ScrollwindowWidget-CVc9EXW2.cjs → ScrollwindowWidget-CJmuGHai.cjs} +2 -2
- package/dist/{ScrollwindowWidget-CVc9EXW2.cjs.map → ScrollwindowWidget-CJmuGHai.cjs.map} +1 -1
- package/dist/{ScrollwindowWidget-DvhBCYd2.js → ScrollwindowWidget-qZ3nhhVU.js} +3 -3
- package/dist/{ScrollwindowWidget-DvhBCYd2.js.map → ScrollwindowWidget-qZ3nhhVU.js.map} +1 -1
- package/dist/{SecretsTab-Clw9ErBz.cjs → SecretsTab-B49h9PhL.cjs} +2 -2
- package/dist/{SecretsTab-Clw9ErBz.cjs.map → SecretsTab-B49h9PhL.cjs.map} +1 -1
- package/dist/{SecretsTab-CLkJfzf-.js → SecretsTab-vdm8oj9_.js} +2 -2
- package/dist/{SecretsTab-CLkJfzf-.js.map → SecretsTab-vdm8oj9_.js.map} +1 -1
- package/dist/{SettingsTab-CysOMBFu.js → SettingsTab-C05e6-Xm.js} +3 -3
- package/dist/{SettingsTab-CysOMBFu.js.map → SettingsTab-C05e6-Xm.js.map} +1 -1
- package/dist/{SettingsTab-BJ9mrQ8U.cjs → SettingsTab-fmHVuOps.cjs} +2 -2
- package/dist/{SettingsTab-BJ9mrQ8U.cjs.map → SettingsTab-fmHVuOps.cjs.map} +1 -1
- package/dist/{SignalWidget-BZIoGjam.js → SignalWidget-Bh14Zrch.js} +2 -2
- package/dist/{SignalWidget-BZIoGjam.js.map → SignalWidget-Bh14Zrch.js.map} +1 -1
- package/dist/{SignalWidget-DpNUpQNW.cjs → SignalWidget-J3LFoUd-.cjs} +2 -2
- package/dist/{SignalWidget-DpNUpQNW.cjs.map → SignalWidget-J3LFoUd-.cjs.map} +1 -1
- package/dist/{SimpleTextDialog-P2KPhVHq.cjs → SimpleTextDialog-CSsm9IoB.cjs} +2 -2
- package/dist/{SimpleTextDialog-P2KPhVHq.cjs.map → SimpleTextDialog-CSsm9IoB.cjs.map} +1 -1
- package/dist/{SimpleTextDialog-CGStqYvO.js → SimpleTextDialog-plHG7LGh.js} +2 -2
- package/dist/{SimpleTextDialog-CGStqYvO.js.map → SimpleTextDialog-plHG7LGh.js.map} +1 -1
- package/dist/{SpacerWidget-CHuv4qDR.cjs → SpacerWidget-CzqLoBdY.cjs} +2 -2
- package/dist/{SpacerWidget-CHuv4qDR.cjs.map → SpacerWidget-CzqLoBdY.cjs.map} +1 -1
- package/dist/{SpacerWidget-YBS8RZIE.js → SpacerWidget-D_NE46jZ.js} +2 -2
- package/dist/{SpacerWidget-YBS8RZIE.js.map → SpacerWidget-D_NE46jZ.js.map} +1 -1
- package/dist/{SparklineWidget-BMhY9vYe.js → SparklineWidget-CJEEJdZ-.js} +4 -4
- package/dist/{SparklineWidget-BMhY9vYe.js.map → SparklineWidget-CJEEJdZ-.js.map} +1 -1
- package/dist/{SparklineWidget-qWQGTMwn.cjs → SparklineWidget-DDRhatn7.cjs} +2 -2
- package/dist/{SparklineWidget-qWQGTMwn.cjs.map → SparklineWidget-DDRhatn7.cjs.map} +1 -1
- package/dist/{TabbookWidget-RfET19pq.js → TabbookWidget-C-SU65IF.js} +2 -2
- package/dist/{TabbookWidget-RfET19pq.js.map → TabbookWidget-C-SU65IF.js.map} +1 -1
- package/dist/{TabbookWidget-C4jdzkQl.cjs → TabbookWidget-C8k2kKLX.cjs} +2 -2
- package/dist/{TabbookWidget-C4jdzkQl.cjs.map → TabbookWidget-C8k2kKLX.cjs.map} +1 -1
- package/dist/{TargetsTab-CfBt-dZW.js → TargetsTab-DyfyM9sC.js} +3 -3
- package/dist/{TargetsTab-CfBt-dZW.js.map → TargetsTab-DyfyM9sC.js.map} +1 -1
- package/dist/{TargetsTab-CVZR_Bp6.cjs → TargetsTab-pU_wu9d-.cjs} +2 -2
- package/dist/{TargetsTab-CVZR_Bp6.cjs.map → TargetsTab-pU_wu9d-.cjs.map} +1 -1
- package/dist/{TextboxWidget-Cm7-yWTZ.cjs → TextboxWidget-CRDu77NK.cjs} +2 -2
- package/dist/{TextboxWidget-Cm7-yWTZ.cjs.map → TextboxWidget-CRDu77NK.cjs.map} +1 -1
- package/dist/{TextboxWidget-M8vFBSxS.js → TextboxWidget-Dn1Ds-b0.js} +4 -4
- package/dist/{TextboxWidget-M8vFBSxS.js.map → TextboxWidget-Dn1Ds-b0.js.map} +1 -1
- package/dist/{TextfieldWidget-Dev7lCsT.js → TextfieldWidget-C0C7NL53.js} +2 -2
- package/dist/{TextfieldWidget-Dev7lCsT.js.map → TextfieldWidget-C0C7NL53.js.map} +1 -1
- package/dist/{TextfieldWidget-Bfk2NPtC.cjs → TextfieldWidget-DGdD6b_-.cjs} +2 -2
- package/dist/{TextfieldWidget-Bfk2NPtC.cjs.map → TextfieldWidget-DGdD6b_-.cjs.map} +1 -1
- package/dist/{TimeWidget-CQzn13rQ.js → TimeWidget-AFOTVB4w.js} +2 -2
- package/dist/{TimeWidget-CQzn13rQ.js.map → TimeWidget-AFOTVB4w.js.map} +1 -1
- package/dist/{TimeWidget-BqkZJdg7.cjs → TimeWidget-BlZoS24B.cjs} +2 -2
- package/dist/{TimeWidget-BqkZJdg7.cjs.map → TimeWidget-BlZoS24B.cjs.map} +1 -1
- package/dist/{TitleWidget-C4zbSian.js → TitleWidget-CbS_wrQw.js} +2 -2
- package/dist/{TitleWidget-C4zbSian.js.map → TitleWidget-CbS_wrQw.js.map} +1 -1
- package/dist/{TitleWidget-DW0hJ0FE.cjs → TitleWidget-DDEnHVPP.cjs} +2 -2
- package/dist/{TitleWidget-DW0hJ0FE.cjs.map → TitleWidget-DDEnHVPP.cjs.map} +1 -1
- package/dist/{ToolsTab-CnhhRS3J.js → ToolsTab-BvpoO0wt.js} +3 -3
- package/dist/{ToolsTab-CnhhRS3J.js.map → ToolsTab-BvpoO0wt.js.map} +1 -1
- package/dist/{ToolsTab-CKeFb94Y.cjs → ToolsTab-DCRNrlhT.cjs} +2 -2
- package/dist/{ToolsTab-CKeFb94Y.cjs.map → ToolsTab-DCRNrlhT.cjs.map} +1 -1
- package/dist/{TopBar-BQhv8Jcc.js → TopBar-AjYGyx8W.js} +2 -2
- package/dist/{TopBar-BQhv8Jcc.js.map → TopBar-AjYGyx8W.js.map} +1 -1
- package/dist/{TopBar-4zZ-wYMY.cjs → TopBar-vznpQjGN.cjs} +2 -2
- package/dist/{TopBar-4zZ-wYMY.cjs.map → TopBar-vznpQjGN.cjs.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog-C0MA3Uc-.cjs → UpgradeToEnterpriseDialog-1fVtqbze.cjs} +2 -2
- package/dist/{UpgradeToEnterpriseDialog-C0MA3Uc-.cjs.map → UpgradeToEnterpriseDialog-1fVtqbze.cjs.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog-c6twungI.js → UpgradeToEnterpriseDialog-CMVEjihv.js} +2 -2
- package/dist/{UpgradeToEnterpriseDialog-c6twungI.js.map → UpgradeToEnterpriseDialog-CMVEjihv.js.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-Bowkx8lp.cjs → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B98GsSQS.cjs} +21 -21
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-Bowkx8lp.cjs.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B98GsSQS.cjs.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-CVrrWDJ_.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BOiUmW4q.js} +446 -446
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-CVrrWDJ_.js.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BOiUmW4q.js.map} +1 -1
- package/dist/{VWidget-iASFPjdx.js → VWidget-BlF_o-7Z.js} +2 -2
- package/dist/{VWidget-iASFPjdx.js.map → VWidget-BlF_o-7Z.js.map} +1 -1
- package/dist/{VWidget-iTwRH6Qq.cjs → VWidget-CMKh-tv6.cjs} +2 -2
- package/dist/{VWidget-iTwRH6Qq.cjs.map → VWidget-CMKh-tv6.cjs.map} +1 -1
- package/dist/{ValueWidget-BVI6uUVX.js → ValueWidget-DFUfM5tw.js} +4 -4
- package/dist/{ValueWidget-BVI6uUVX.js.map → ValueWidget-DFUfM5tw.js.map} +1 -1
- package/dist/{ValueWidget-CPuSUgn9.cjs → ValueWidget-K7SCPEB6.cjs} +2 -2
- package/dist/{ValueWidget-CPuSUgn9.cjs.map → ValueWidget-K7SCPEB6.cjs.map} +1 -1
- package/dist/{ValuelimitsbarWidget-BiIcery0.js → ValuelimitsbarWidget-CALgABsT.js} +4 -4
- package/dist/{ValuelimitsbarWidget-BiIcery0.js.map → ValuelimitsbarWidget-CALgABsT.js.map} +1 -1
- package/dist/{ValuelimitsbarWidget-CNdyobcf.cjs → ValuelimitsbarWidget-DcY2NV9X.cjs} +2 -2
- package/dist/{ValuelimitsbarWidget-CNdyobcf.cjs.map → ValuelimitsbarWidget-DcY2NV9X.cjs.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-BiRI8GbI.js → ValuelimitscolumnWidget-Bs91VFLz.js} +4 -4
- package/dist/{ValuelimitscolumnWidget-BiRI8GbI.js.map → ValuelimitscolumnWidget-Bs91VFLz.js.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-Db0K4OjQ.cjs → ValuelimitscolumnWidget-DQKvlGap.cjs} +2 -2
- package/dist/{ValuelimitscolumnWidget-Db0K4OjQ.cjs.map → ValuelimitscolumnWidget-DQKvlGap.cjs.map} +1 -1
- package/dist/{ValuerangebarWidget-CtMFQu9-.js → ValuerangebarWidget-C7WHyR2h.js} +4 -4
- package/dist/{ValuerangebarWidget-CtMFQu9-.js.map → ValuerangebarWidget-C7WHyR2h.js.map} +1 -1
- package/dist/{ValuerangebarWidget-DAEr-D_E.cjs → ValuerangebarWidget-DnWuvusw.cjs} +2 -2
- package/dist/{ValuerangebarWidget-DAEr-D_E.cjs.map → ValuerangebarWidget-DnWuvusw.cjs.map} +1 -1
- package/dist/{VerticalWidget-CRmcpQBn.js → VerticalWidget-COP5oVCK.js} +2 -2
- package/dist/{VerticalWidget-CRmcpQBn.js.map → VerticalWidget-COP5oVCK.js.map} +1 -1
- package/dist/{VerticalWidget-YG3auPJa.cjs → VerticalWidget-eMN4dvxL.cjs} +2 -2
- package/dist/{VerticalWidget-YG3auPJa.cjs.map → VerticalWidget-eMN4dvxL.cjs.map} +1 -1
- package/dist/{VerticalboxWidget-C-qChjug.js → VerticalboxWidget-CDPoOx4C.js} +5 -5
- package/dist/{VerticalboxWidget-C-qChjug.js.map → VerticalboxWidget-CDPoOx4C.js.map} +1 -1
- package/dist/{VerticalboxWidget-DX8-gFay.cjs → VerticalboxWidget-UIBpyEz_.cjs} +2 -2
- package/dist/{VerticalboxWidget-DX8-gFay.cjs.map → VerticalboxWidget-UIBpyEz_.cjs.map} +1 -1
- package/dist/{Widget-EsyLQi_8.cjs → Widget-Cg0pAxSF.cjs} +2 -2
- package/dist/{Widget-EsyLQi_8.cjs.map → Widget-Cg0pAxSF.cjs.map} +1 -1
- package/dist/{Widget-CFEnOKms.js → Widget-cmJ76_g1.js} +2 -2
- package/dist/{Widget-CFEnOKms.js.map → Widget-cmJ76_g1.js.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +11 -11
- package/dist/tools/admin.cjs +1 -1
- package/dist/tools/admin.js +12 -12
- package/dist/tools/base.cjs +1 -1
- package/dist/tools/base.js +2 -2
- package/dist/tools/calendar.cjs +1 -1
- package/dist/tools/calendar.js +1 -1
- package/dist/tools/scriptrunner.cjs +3 -3
- package/dist/tools/scriptrunner.cjs.map +1 -1
- package/dist/tools/scriptrunner.js +14 -14
- package/dist/tools/scriptrunner.js.map +1 -1
- package/dist/vue-common.css +1 -1
- package/dist/widgets.cjs +1 -1
- package/dist/widgets.js +63 -63
- package/package.json +2 -2
- package/dist/EventListDialog-Bniar26O.js.map +0 -1
- package/dist/EventListDialog-D_KXhGDO.cjs +0 -2
- package/dist/EventListDialog-D_KXhGDO.cjs.map +0 -1
- package/dist/Layout-BLADjt_A.cjs +0 -2
- package/dist/Openc3Screen-COi4u-9k.cjs.map +0 -1
- package/dist/Openc3Screen-CtwGKfq-.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const _=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-Bowkx8lp.cjs"),D=require("./timeFilters-CJFxfjqN.cjs"),e=require("vue"),x=require("./CustomIcon-Bop2mEnu.cjs"),b=require("./ScriptChooser-Dkf84RzQ.cjs");require("single-spa");const T=require("./parse-DwfgQboe.cjs"),A=require("./addMonths-n1tnl3ab.cjs"),N=require("./format-B22VpiOS.cjs");function I(a,t,i){const{years:r=0,months:o=0,weeks:n=0,days:l=0,hours:s=0,minutes:y=0,seconds:d=0}=t,u=N.toDate(a,i==null?void 0:i.in),p=o||r?A.addMonths(u,o+r*12):u,f=l||n?T.addDays(p,l+n*7):p,V=y+s*60,w=(d+V*60)*1e3;return N.constructFrom(a,+f+w)}const k={props:{date:{type:String},time:{type:String},timeZone:{type:String}},data(){return{startDate:"",startTime:"",endDate:"",endTime:""}},methods:{calcStartDateTime:function(){this.date?(this.startDate=this.date,this.endDate=this.date):(this.startDate=N.format(new Date,"yyyy-MM-dd"),this.endDate=N.format(new Date,"yyyy-MM-dd"));let a=1e3*60*30,t=null;this.time?(t=T.parse(this.time,"HH:mm:ss",new Date),t=new Date(Math.floor(t.getTime()/a)*a)):t=new Date(Math.ceil(new Date().getTime()/a)*a),this.startTime=N.format(t,"HH:mm:ss"),this.endTime=N.format(I(t,{minutes:30}),"HH:mm:ss")}}},H={components:{EnvironmentChooser:b.EnvironmentChooser,ScriptChooser:b.ScriptChooser},mixins:[k,D.TimeFilters],props:{modelValue:Boolean,timelines:{type:Array,required:!0},activity:{type:Object,default:null}},data(){return{timeline:null,dialogStep:1,kind:"",types:["COMMAND","SCRIPT","RESERVE"],activityData:"",activityEnvironment:[],rules:{required:a=>!!a||"Required"},recurring:!1,recurringEndDate:null,recurringEndTime:null,frequency:90,timeSpan:"minutes",timeSpans:["minutes","hours","days"]}},computed:{timeError:function(){const a=new Date,t=Date.parse(`${this.startDate}T${this.startTime}`),i=Date.parse(`${this.endDate}T${this.endTime}`);return t===i?"Invalid start, end time. Activity must have different start and end times.":a>t?"Invalid start time. Activity must be in the future.":t>i?"Invalid start time. Activity start before end.":null},typeError:function(){return this.timeline?this.kind!=="RESERVE"&&!this.activityData?"No data is selected or inputted":null:"Activity must have a timeline selected."},timelineNames:function(){return this.timelines.map(a=>a.name)},show:{get(){return this.modelValue},set(a){this.$emit("update:modelValue",a)}}},mounted:function(){this.updateValues()},methods:{changeKind:function(a){a!==this.kind&&(this.kind=a,this.activityData="")},fileHandler:function(a){this.activityData=a},updateValues:function(){var a;if(this.dialogStep=1,this.activity){this.timeline=this.activity.name;const t=new Date(this.activity.start*1e3),i=new Date(this.activity.stop*1e3);if(this.startDate=this.formatDate(t,this.timeZone),this.startTime=this.formatTimeHMS(t,this.timeZone),this.endDate=this.formatDate(i,this.timeZone),this.endTime=this.formatTimeHMS(i,this.timeZone),this.kind=this.activity.kind.toUpperCase(),this.activityData=this.activity.data[this.activity.kind],this.activityEnvironment=this.activity.data.environment,(a=this.activity.recurring)!=null&&a.uuid){this.recurring=!0;const r=new Date(this.activity.recurring.end*1e3);this.recurringEndDate=this.formatDate(r,this.timeZone),this.recurringEndTime=this.formatTimeHMS(r,this.timeZone),this.frequency=this.activity.recurring.frequency,this.timeSpan=this.activity.recurring.span}}else this.calcStartDateTime(),this.recurringEndDate=this.startDate,this.recurringEndTime=this.startTime,this.kind="",this.activityData="",this.activityEnvironment=[],this.timeline=this.timelineNames[0]},clearHandler:function(){this.show=!this.show},submitHandler(){let a=null,t=null,i=null;this.timeZone==="local"?(a=new Date(this.startDate+" "+this.startTime).toISOString(),t=new Date(this.endDate+" "+this.endTime).toISOString(),this.recurring&&(i=new Date(this.recurringEndDate+" "+this.recurringEndTime).toISOString())):(a=new Date(this.startDate+" "+this.startTime+"Z").toISOString(),t=new Date(this.endDate+" "+this.endTime+"Z").toISOString(),this.recurring&&(i=new Date(this.recurringEndDate+" "+this.recurringEndTime+"Z").toISOString()));const r=this.kind.toLowerCase();let o={environment:this.activityEnvironment};o[r]=this.activityData;let n={};this.recurring&&(n={frequency:this.frequency,span:this.timeSpan,end:i}),this.activity?_.li.put(`/openc3-api/timeline/${this.activity.name}/activity/${this.activity.start}`,{data:{start:a,stop:t,kind:r,data:o,recurring:n}}).then(l=>{const s=this.formatSeconds(new Date(l.data.start*1e3));this.$notify.normal({title:"Updated Activity",body:`${s} (${l.data.start}) on timeline: ${l.data.name}`}),this.$emit("update",l.data),this.show=!this.show}).catch(l=>{this.show=!this.show}):_.li.post(`/openc3-api/timeline/${this.timeline}/activities`,{data:{start:a,stop:t,kind:r,data:o,recurring:n}}).then(l=>{const s=this.formatSeconds(new Date(l.data.start*1e3));this.$notify.normal({title:"Created Activity",body:`${s} (${l.data.start}) on timeline: ${l.data.name}`}),this.$emit("update",l.data),this.show=!this.show}).catch(l=>{this.show=!this.show}),this.clearHandler()}}},Z={key:0},O={key:1},F={class:"pr-2"},R=["textContent"],z={class:"pr-2"},P={key:0},L={key:1,class:"ma-3"},j={key:2},K=["textContent"];function W(a,t,i,r,o,n){const l=e.resolveComponent("v-spacer"),s=e.resolveComponent("v-btn"),y=e.resolveComponent("v-toolbar"),d=e.resolveComponent("v-row"),u=e.resolveComponent("v-select"),p=e.resolveComponent("v-text-field"),f=e.resolveComponent("v-checkbox"),V=e.resolveComponent("v-col"),C=e.resolveComponent("v-card-text"),w=e.resolveComponent("script-chooser"),h=e.resolveComponent("environment-chooser"),v=e.resolveComponent("v-stepper"),g=e.resolveComponent("v-card"),m=e.resolveComponent("v-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(m,{modelValue:n.show,"onUpdate:modelValue":t[15]||(t[15]=c=>n.show=c),persistent:"",width:"600"},{default:e.withCtx(()=>[e.createVNode(g,null,{default:e.withCtx(()=>[e.createVNode(y,{height:"24"},{default:e.withCtx(()=>[e.createVNode(l),i.activity?(e.openBlock(),e.createElementBlock("span",Z,"Edit Activity")):(e.openBlock(),e.createElementBlock("span",O,"Create Activity")),e.createVNode(l),e.createVNode(s,{icon:"mdi-close-box",variant:"text",density:"compact","data-test":"close-note-icon",onClick:n.clearHandler},null,8,["onClick"])]),_:1}),e.createVNode(v,{modelValue:o.dialogStep,"onUpdate:modelValue":t[14]||(t[14]=c=>o.dialogStep=c),editable:"",items:["Activity Times","Activity Type"]},e.createSlots({"item.1":e.withCtx(()=>[e.createVNode(C,null,{default:e.withCtx(()=>[e.createElementVNode("div",F,[e.createVNode(u,{modelValue:o.timeline,"onUpdate:modelValue":t[1]||(t[1]=c=>o.timeline=c),density:"compact","hide-details":"",variant:"outlined",items:n.timelineNames,label:"Timeline","data-test":"activity-select-timeline",class:"pb-2"},null,8,["modelValue","items"]),e.createVNode(d,{dense:""},{default:e.withCtx(()=>[e.createVNode(p,{modelValue:a.startDate,"onUpdate:modelValue":t[2]||(t[2]=c=>a.startDate=c),type:"date",label:"Start Date",class:"mx-1",rules:[o.rules.required],"data-test":"activity-start-date"},null,8,["modelValue","rules"]),e.createVNode(p,{modelValue:a.startTime,"onUpdate:modelValue":t[3]||(t[3]=c=>a.startTime=c),type:"time",step:"1",label:"Start Time",class:"mx-1",rules:[o.rules.required],"data-test":"activity-start-time"},null,8,["modelValue","rules"])]),_:1}),e.createVNode(d,{dense:""},{default:e.withCtx(()=>[e.createVNode(p,{modelValue:a.endDate,"onUpdate:modelValue":t[4]||(t[4]=c=>a.endDate=c),type:"date",label:"End Date",class:"mx-1",rules:[o.rules.required],"data-test":"activity-end-date"},null,8,["modelValue","rules"]),e.createVNode(p,{modelValue:a.endTime,"onUpdate:modelValue":t[5]||(t[5]=c=>a.endTime=c),type:"time",step:"1",label:"End Time",class:"mx-1",rules:[o.rules.required],"data-test":"activity-end-time"},null,8,["modelValue","rules"])]),_:1}),e.createVNode(d,{class:"pl-3"},{default:e.withCtx(()=>[e.createVNode(f,{modelValue:o.recurring,"onUpdate:modelValue":t[6]||(t[6]=c=>o.recurring=c),disabled:!!i.activity,label:"Recurring","hide-details":"","data-test":"recurring"},null,8,["modelValue","disabled"])]),_:1}),o.recurring?(e.openBlock(),e.createBlock(d,{key:0},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>t[19]||(t[19]=[e.createElementVNode("div",{class:"repeat"},"Repeat every",-1)])),_:1}),e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(p,{modelValue:o.frequency,"onUpdate:modelValue":t[7]||(t[7]=c=>o.frequency=c),disabled:!!i.activity,density:"compact",variant:"outlined","single-line":"","hide-details":"","data-test":"recurring-frequency"},null,8,["modelValue","disabled"])]),_:1}),e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(u,{modelValue:o.timeSpan,"onUpdate:modelValue":t[8]||(t[8]=c=>o.timeSpan=c),disabled:!!i.activity,items:o.timeSpans,style:{},"hide-details":"",density:"compact",variant:"outlined","data-test":"recurring-span"},null,8,["modelValue","disabled","items"])]),_:1})]),_:1})):e.createCommentVNode("",!0),o.recurring?(e.openBlock(),e.createBlock(d,{key:1,style:{"padding-bottom":"10px"}},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>t[20]||(t[20]=[e.createElementVNode("div",{class:"repeat"},"Ending",-1)])),_:1}),e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(p,{modelValue:o.recurringEndDate,"onUpdate:modelValue":t[9]||(t[9]=c=>o.recurringEndDate=c),type:"date",label:"End Date",class:"mx-1",rules:[o.rules.required],disabled:!!i.activity,"data-test":"recurring-end-date"},null,8,["modelValue","rules","disabled"])]),_:1}),e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(p,{modelValue:o.recurringEndTime,"onUpdate:modelValue":t[10]||(t[10]=c=>o.recurringEndTime=c),type:"time",step:"1",label:"End Time",class:"mx-1",rules:[o.rules.required],disabled:!!i.activity,"data-test":"recurring-end-time"},null,8,["modelValue","rules","disabled"])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(d,null,{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("span",{class:"ma-2 text-red",textContent:e.toDisplayString(n.timeError)},null,8,R),[[e.vShow,n.timeError]])]),_:1})])]),_:1})]),"item.2":e.withCtx(()=>[e.createVNode(C,null,{default:e.withCtx(()=>[e.createElementVNode("div",z,[e.createVNode(u,{modelValue:o.kind,"onUpdate:modelValue":t[11]||(t[11]=c=>o.kind=c),density:"compact","hide-details":"",variant:"outlined",items:o.types,label:"Activity Type","data-test":"activity-select-type",class:"pb-2"},null,8,["modelValue","items"]),o.kind==="COMMAND"?(e.openBlock(),e.createElementBlock("div",P,[e.createVNode(p,{modelValue:o.activityData,"onUpdate:modelValue":t[12]||(t[12]=c=>o.activityData=c),type:"text",label:"Command Input",placeholder:"INST COLLECT with TYPE 0, DURATION 1, OPCODE 171, TEMP 0",prefix:"cmd('",suffix:"')",hint:"Timeline runs commands with cmd_no_hazardous_check","data-test":"activity-cmd"},null,8,["modelValue"])])):o.kind==="SCRIPT"?(e.openBlock(),e.createElementBlock("div",L,[e.createVNode(w,{onFile:n.fileHandler},null,8,["onFile"]),e.createVNode(h,{modelValue:o.activityEnvironment,"onUpdate:modelValue":t[13]||(t[13]=c=>o.activityEnvironment=c)},null,8,["modelValue"])])):(e.openBlock(),e.createElementBlock("div",j,t[21]||(t[21]=[e.createElementVNode("span",{class:"ma-2"}," No required input ",-1)]))),e.withDirectives(e.createVNode(d,{class:"mt-2"},{default:e.withCtx(()=>[e.createElementVNode("span",{class:"ma-2 text-red",textContent:e.toDisplayString(n.typeError)},null,8,K)]),_:1},512),[[e.vShow,n.typeError]])])]),_:1})]),_:2},[o.dialogStep===2?{name:"actions",fn:e.withCtx(()=>[e.createVNode(d,{class:"ma-0 px-6 pb-4"},{default:e.withCtx(()=>[e.createVNode(s,{variant:"text",onClick:t[0]||(t[0]=()=>o.dialogStep-=1)},{default:e.withCtx(()=>t[16]||(t[16]=[e.createTextVNode(" Previous ")])),_:1}),e.createVNode(l),e.createVNode(s,{variant:"outlined",class:"mr-4",onClick:n.clearHandler},{default:e.withCtx(()=>t[17]||(t[17]=[e.createTextVNode(" Cancel ")])),_:1},8,["onClick"]),e.createVNode(s,{type:"submit",color:"primary",disabled:!!a.error,onClick:e.withModifiers(n.submitHandler,["prevent"])},{default:e.withCtx(()=>t[18]||(t[18]=[e.createTextVNode(" Ok ")])),_:1},8,["disabled","onClick"])]),_:1})]),key:"0"}:void 0]),1032,["modelValue"])]),_:1})]),_:1},8,["modelValue"])])}const S=x._export_sfc(H,[["render",W],["__scopeId","data-v-a2610a2a"]]),Y={components:{},props:{modelValue:{type:String,required:!0}},computed:{color:{get(){return this.modelValue},set(a){this.$emit("update:modelValue",a)}},swatches:function(){return["#005a8f","#003784","#8F3400","#df1368","#ff5252","#df323b","#9f0010","#2d9437","#004700","#db7200","#802700","#0f2941"]}},methods:{}};function G(a,t,i,r,o,n){const l=e.resolveComponent("v-icon"),s=e.resolveComponent("v-list-item"),y=e.resolveComponent("v-select");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(y,{label:"Color",items:n.swatches,modelValue:n.color,"onUpdate:modelValue":t[0]||(t[0]=d=>n.color=d)},{"prepend-inner":e.withCtx(()=>[e.createVNode(l,{color:n.color},{default:e.withCtx(()=>t[1]||(t[1]=[e.createTextVNode(" mdi-square ")])),_:1},8,["color"])]),item:e.withCtx(({props:d,item:u})=>[e.createVNode(s,e.mergeProps(d,{value:u.raw}),{prepend:e.withCtx(()=>[e.createVNode(l,{color:u.raw},{default:e.withCtx(()=>t[2]||(t[2]=[e.createTextVNode(" mdi-square ")])),_:2},1032,["color"])]),_:2},1040,["value"])]),_:1},8,["items","modelValue"])])}const E=x._export_sfc(Y,[["render",G]]),U={methods:{deleteItem(a){let t=null,i="";switch(a.type.toLowerCase()){case"activity":i="activity",t=a.activity.start;break;case"metadata":i="metadata",t=a.metadata.start;break;case"note":i="notes",t=a.note.start;break}this.$dialog.confirm(`Are you sure you want to remove ${a.typeStr} at ${a.startStr}`,{okText:"Delete",cancelText:"Cancel"}).then(()=>_.li.delete(`/openc3-api/${i}/${t}`)).then(()=>{this.$emit("delete",a),this.$notify.normal({title:`Deleted ${a.typeStr}`,body:`Deleted ${a.typeStr} at ${a.startStr}`})}).catch(()=>{})}}},J={components:{},props:{modelValue:{type:Array,required:!0}},data(){return{}},computed:{metadata:{get(){return this.modelValue},set(a){this.$emit("update:modelValue",a)}}},methods:{newMetadata:function(){this.metadata.push({key:"",value:""})},rm:function(a){this.metadata.splice(a,1)}}},Q={scope:"col",class:"text-right"};function X(a,t,i,r,o,n){const l=e.resolveComponent("v-btn"),s=e.resolveComponent("v-text-field"),y=e.resolveComponent("v-table");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(y,{dense:""},{default:e.withCtx(()=>[e.createElementVNode("tbody",null,[e.createElementVNode("tr",null,[t[0]||(t[0]=e.createElementVNode("th",{scope:"col",class:"text-left"},"Key",-1)),t[1]||(t[1]=e.createElementVNode("th",{scope:"col",class:"text-left"},"Value",-1)),e.createElementVNode("th",Q,[e.createVNode(l,{icon:"mdi-plus",variant:"text","data-test":"new-metadata-icon",onClick:n.newMetadata},null,8,["onClick"])])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.metadata,(d,u)=>(e.openBlock(),e.createElementBlock("tr",{key:`tr-${u}`},[e.createElementVNode("td",null,[e.createVNode(s,{modelValue:d.key,"onUpdate:modelValue":p=>d.key=p,type:"text",density:"compact","data-test":`key-${u}`},null,8,["modelValue","onUpdate:modelValue","data-test"])]),e.createElementVNode("td",null,[e.createVNode(s,{modelValue:d.value,"onUpdate:modelValue":p=>d.value=p,type:"text",density:"compact","data-test":`value-${u}`},null,8,["modelValue","onUpdate:modelValue","data-test"])]),e.createElementVNode("td",null,[e.createVNode(l,{icon:"mdi-delete",variant:"text","data-test":`delete-metadata-icon-${u}`,onClick:p=>n.rm(u)},null,8,["data-test","onClick"])])]))),128))])]),_:1})])}const M=x._export_sfc(J,[["render",X]]),$={components:{ColorSelectForm:E,MetadataInputForm:M},mixins:[k,D.TimeFilters],props:{modelValue:Boolean,metadata:{type:Object,default:null}},data(){return{dialogStep:1,color:"#003784",metadataVals:[],rules:{required:a=>!!a||"Required"}}},computed:{typeError:function(){return this.color?this.metadataVals.length<1?"Please enter a value in the metadata table.":this.metadataVals.find(t=>t.key===""||t.value==="")?"Missing or empty key, value in the metadata table.":null:"A color is required."},show:{get(){return this.modelValue},set(a){this.$emit("update:modelValue",a)}}},mounted:function(){this.updateValues()},methods:{updateValues:function(){if(this.dialogStep=1,this.metadata){const a=new Date(this.metadata.start*1e3);this.startDate=this.formatDate(a,this.timeZone),this.startTime=this.formatTimeHMS(a,this.timeZone),this.color=this.metadata.color,this.metadataVals=Object.keys(this.metadata.metadata).map(t=>({key:t,value:this.metadata.metadata[t]}))}else this.calcStartDateTime(),this.color="#003784",this.metadataVals=[]},clearHandler:function(){this.show=!this.show},submitHandler(){const a=this.color,t=this.metadataVals.reduce((r,o)=>(r[o.key]=o.value,r),{}),i={color:a,metadata:t};this.timeZone==="local"?i.start=new Date(this.startDate+" "+this.startTime).toISOString():i.start=new Date(this.startDate+" "+this.startTime+"Z").toISOString(),this.metadata?_.li.put(`/openc3-api/metadata/${this.metadata.start}`,{data:i}).then(r=>{this.$notify.normal({title:"Updated Metadata",body:`Metadata updated: (${r.data.start})`}),this.$emit("update",r.data),this.show=!this.show}):_.li.post("/openc3-api/metadata",{data:i}).then(r=>{this.$notify.normal({title:"Created new Metadata",body:`Metadata: (${r.data.start})`}),this.$emit("update",r.data),this.show=!this.show})}}},ee={key:0},te={key:1},ae={class:"pa-2"},oe={class:"pa-2"},ne={style:{"min-height":"200px"}},ie=["textContent"];function le(a,t,i,r,o,n){const l=e.resolveComponent("v-spacer"),s=e.resolveComponent("v-btn"),y=e.resolveComponent("v-toolbar"),d=e.resolveComponent("v-row"),u=e.resolveComponent("color-select-form"),p=e.resolveComponent("v-text-field"),f=e.resolveComponent("v-card-text"),V=e.resolveComponent("metadata-input-form"),C=e.resolveComponent("v-stepper"),w=e.resolveComponent("v-card"),h=e.resolveComponent("v-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(h,{modelValue:n.show,"onUpdate:modelValue":t[6]||(t[6]=v=>n.show=v),persistent:"",width:"600"},{default:e.withCtx(()=>[e.createVNode(w,null,{default:e.withCtx(()=>[e.createVNode(y,{height:"24"},{default:e.withCtx(()=>[e.createVNode(l),i.metadata?(e.openBlock(),e.createElementBlock("span",ee,"Update Metadata")):(e.openBlock(),e.createElementBlock("span",te,"Create Metadata")),e.createVNode(l),e.createVNode(s,{icon:"mdi-close-box",variant:"text",density:"compact","data-test":"close-metadata-icon",onClick:n.clearHandler},null,8,["onClick"])]),_:1}),e.createVNode(C,{modelValue:o.dialogStep,"onUpdate:modelValue":t[5]||(t[5]=v=>o.dialogStep=v),editable:"",items:["Metadata Times","Metadata Input"]},e.createSlots({"item.1":e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createElementVNode("div",ae,[e.createVNode(u,{modelValue:o.color,"onUpdate:modelValue":t[1]||(t[1]=v=>o.color=v)},null,8,["modelValue"]),e.createVNode(d,{dense:""},{default:e.withCtx(()=>[e.createVNode(p,{modelValue:a.startDate,"onUpdate:modelValue":t[2]||(t[2]=v=>a.startDate=v),type:"date",label:"Start Date",class:"mx-1",rules:[o.rules.required],"data-test":"metadata-start-date"},null,8,["modelValue","rules"]),e.createVNode(p,{modelValue:a.startTime,"onUpdate:modelValue":t[3]||(t[3]=v=>a.startTime=v),type:"time",step:"1",label:"Start Time",class:"mx-1",rules:[o.rules.required],"data-test":"metadata-start-time"},null,8,["modelValue","rules"])]),_:1})])]),_:1})]),"item.2":e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createElementVNode("div",oe,[e.createElementVNode("div",ne,[e.createVNode(V,{modelValue:o.metadataVals,"onUpdate:modelValue":t[4]||(t[4]=v=>o.metadataVals=v)},null,8,["modelValue"])]),e.withDirectives(e.createVNode(d,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:"ma-2 text-red",textContent:e.toDisplayString(n.typeError)},null,8,ie)]),_:1},512),[[e.vShow,n.typeError]])])]),_:1})]),_:2},[o.dialogStep===2?{name:"actions",fn:e.withCtx(()=>[e.createVNode(d,{class:"ma-0 px-6 pb-4"},{default:e.withCtx(()=>[e.createVNode(s,{variant:"text",onClick:t[0]||(t[0]=()=>o.dialogStep-=1)},{default:e.withCtx(()=>t[7]||(t[7]=[e.createTextVNode(" Previous ")])),_:1}),e.createVNode(l),e.createVNode(s,{variant:"outlined",class:"mr-4",onClick:n.clearHandler},{default:e.withCtx(()=>t[8]||(t[8]=[e.createTextVNode(" Cancel ")])),_:1},8,["onClick"]),e.createVNode(s,{type:"submit",color:"primary",disabled:!!a.error,onClick:e.withModifiers(n.submitHandler,["prevent"])},{default:e.withCtx(()=>t[9]||(t[9]=[e.createTextVNode(" Ok ")])),_:1},8,["disabled","onClick"])]),_:1})]),key:"0"}:void 0]),1032,["modelValue"])]),_:1})]),_:1},8,["modelValue"])])}const B=x._export_sfc($,[["render",le],["__scopeId","data-v-c120467c"]]),re={components:{ColorSelectForm:E},mixins:[k,D.TimeFilters],props:{modelValue:Boolean,note:{type:Object}},data(){return{dialogStep:1,description:"",color:"#8F3400",rules:{required:a=>!!a||"Required"}}},computed:{timeError:function(){let a,t;return this.timeZone==="local"?(a=new Date(this.startDate+" "+this.startTime),t=new Date(this.endDate+" "+this.endTime)):(a=new Date(this.startDate+" "+this.startTime+"Z"),t=new Date(this.endDate+" "+this.endTime+"Z")),a===t?"Invalid start, end time. Notes must have different start and end times.":a>t?"Invalid start time. Notes start before end.":null},typeError:function(){return this.color?this.description?null:"A description is required for a valid note.":"A color is required."},show:{get(){return this.modelValue},set(a){this.$emit("update:modelValue",a)}}},mounted:function(){this.updateValues()},methods:{updateValues:function(){if(this.dialogStep=1,this.note){const a=new Date(this.note.start*1e3);this.startDate=this.formatDate(a,this.timeZone),this.startTime=this.formatTimeHMS(a,this.timeZone);const t=new Date(this.note.stop*1e3);this.endDate=this.formatDate(t,this.timeZone),this.endTime=this.formatTimeHMS(t,this.timeZone),this.color=this.note.color,this.description=this.note.description}else this.calcStartDateTime(),this.color="#8F3400",this.description=""},clearHandler:function(){this.show=!this.show},submitHandler(){let a,t;this.timeZone==="local"?(a=new Date(this.startDate+" "+this.startTime).toISOString(),t=new Date(this.endDate+" "+this.endTime).toISOString()):(a=new Date(this.startDate+" "+this.startTime+"Z").toISOString(),t=new Date(this.endDate+" "+this.endTime+"Z").toISOString());const i=this.color,r=this.description;this.note?_.li.put(`/openc3-api/notes/${this.note.start}`,{data:{start:a,stop:t,color:i,description:r}}).then(o=>{const n=o.data.description.length>16?`${o.data.description.substring(0,16)}...`:o.data.description;this.$notify.normal({title:"Updated Note",body:`Note updated: (${o.data.start}): "${n}"`}),this.$emit("update",o.data),this.show=!this.show}):_.li.post("/openc3-api/notes",{data:{start:a,stop:t,color:i,description:r}}).then(o=>{const n=o.data.description.length>16?`${o.data.description.substring(0,16)}...`:o.data.description;this.$notify.normal({title:"Created new Note",body:`Note: (${o.data.start}) created: "${n}"`}),this.$emit("update",o.data),this.show=!this.show})}}},se={key:0},de={key:1},ce={class:"pa-2"},me=["textContent"],ue={class:"pa-2"},pe=["textContent"];function he(a,t,i,r,o,n){const l=e.resolveComponent("v-spacer"),s=e.resolveComponent("v-btn"),y=e.resolveComponent("v-toolbar"),d=e.resolveComponent("v-row"),u=e.resolveComponent("v-text-field"),p=e.resolveComponent("v-card-text"),f=e.resolveComponent("color-select-form"),V=e.resolveComponent("v-stepper"),C=e.resolveComponent("v-card"),w=e.resolveComponent("v-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(w,{modelValue:n.show,"onUpdate:modelValue":t[8]||(t[8]=h=>n.show=h),persistent:"",width:"600"},{default:e.withCtx(()=>[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(y,{height:"24"},{default:e.withCtx(()=>[e.createVNode(l),i.note?(e.openBlock(),e.createElementBlock("span",se,"Update Note")):(e.openBlock(),e.createElementBlock("span",de,"Create Note")),e.createVNode(l),e.createVNode(s,{icon:"mdi-close-box",variant:"text",density:"compact","data-test":"close-note-icon",onClick:n.clearHandler},null,8,["onClick"])]),_:1}),e.createVNode(V,{modelValue:o.dialogStep,"onUpdate:modelValue":t[7]||(t[7]=h=>o.dialogStep=h),editable:"",items:["Note Times","Note Input"]},e.createSlots({"item.1":e.withCtx(()=>[e.createVNode(p,null,{default:e.withCtx(()=>[e.createElementVNode("div",ce,[e.createVNode(d,{dense:""},{default:e.withCtx(()=>[e.createVNode(u,{modelValue:a.startDate,"onUpdate:modelValue":t[1]||(t[1]=h=>a.startDate=h),type:"date",label:"Start Date",class:"mx-1",rules:[o.rules.required],"data-test":"note-start-date"},null,8,["modelValue","rules"]),e.createVNode(u,{modelValue:a.startTime,"onUpdate:modelValue":t[2]||(t[2]=h=>a.startTime=h),type:"time",step:"1",label:"Start Time",class:"mx-1",rules:[o.rules.required],"data-test":"note-start-time"},null,8,["modelValue","rules"])]),_:1}),e.createVNode(d,{dense:""},{default:e.withCtx(()=>[e.createVNode(u,{modelValue:a.endDate,"onUpdate:modelValue":t[3]||(t[3]=h=>a.endDate=h),type:"date",label:"End Date",class:"mx-1",rules:[o.rules.required],"data-test":"note-end-date"},null,8,["modelValue","rules"]),e.createVNode(u,{modelValue:a.endTime,"onUpdate:modelValue":t[4]||(t[4]=h=>a.endTime=h),type:"time",step:"1",label:"End Time",class:"mx-1",rules:[o.rules.required],"data-test":"note-end-time"},null,8,["modelValue","rules"])]),_:1}),e.createVNode(d,null,{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("span",{class:"ma-2 text-red",textContent:e.toDisplayString(n.timeError)},null,8,me),[[e.vShow,n.timeError]])]),_:1})])]),_:1})]),"item.2":e.withCtx(()=>[e.createVNode(p,null,{default:e.withCtx(()=>[e.createElementVNode("div",ue,[e.createElementVNode("div",null,[e.createVNode(f,{modelValue:o.color,"onUpdate:modelValue":t[5]||(t[5]=h=>o.color=h)},null,8,["modelValue"])]),e.createElementVNode("div",null,[e.createVNode(u,{modelValue:o.description,"onUpdate:modelValue":t[6]||(t[6]=h=>o.description=h),type:"text",label:"Note Description","data-test":"note-description"},null,8,["modelValue"])]),e.withDirectives(e.createVNode(d,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:"ma-2 text-red",textContent:e.toDisplayString(n.typeError)},null,8,pe)]),_:1},512),[[e.vShow,n.typeError]])])]),_:1})]),_:2},[o.dialogStep===2?{name:"actions",fn:e.withCtx(()=>[e.createVNode(d,{class:"ma-0 px-6 pb-4"},{default:e.withCtx(()=>[e.createVNode(s,{variant:"text",onClick:t[0]||(t[0]=()=>o.dialogStep-=1)},{default:e.withCtx(()=>t[9]||(t[9]=[e.createTextVNode(" Previous ")])),_:1}),e.createVNode(l),e.createVNode(s,{variant:"outlined",class:"mr-4",onClick:n.clearHandler},{default:e.withCtx(()=>t[10]||(t[10]=[e.createTextVNode(" Cancel ")])),_:1},8,["onClick"]),e.createVNode(s,{type:"submit",color:"primary",disabled:!!a.error,onClick:e.withModifiers(n.submitHandler,["prevent"])},{default:e.withCtx(()=>t[11]||(t[11]=[e.createTextVNode(" Ok ")])),_:1},8,["disabled","onClick"])]),_:1})]),key:"0"}:void 0]),1032,["modelValue"])]),_:1})]),_:1},8,["modelValue"])])}const q=x._export_sfc(re,[["render",he],["__scopeId","data-v-829ef502"]]),ve={components:{ActivityCreateDialog:S,MetadataCreateDialog:B,NoteCreateDialog:q},mixins:[D.TimeFilters,U],props:{events:{type:Array,required:!0},modelValue:{type:Boolean,required:!0},timeZone:{type:String,required:!0},types:{type:Array},newMetadata:{type:Boolean,default:!1}},data(){return{search:"",localEvents:[...this.events],eventHeaders:[{title:"Start",key:"start",width:215},{title:"Stop",key:"end",width:215},{title:"Type",key:"type"},{title:"Data",key:"data"},{title:"Actions",key:"actions",sortable:!1}],editActivity:{start:new Date,end:new Date},editMetadata:{start:new Date,end:new Date},editNote:{start:new Date,end:new Date},editIndex:0,showActivityUpdate:!1,showMetadataUpdate:!1,showNoteUpdate:!1,showMetadataCreate:!1}},computed:{show:{get(){return this.modelValue},set(a){this.$emit("update:modelValue",a)}}},created:function(){},methods:{close(){this.$emit("close"),this.show=!1},dataFormat(a){let t=a.name;switch(a.type){case"note":t=a.note.description;break;case"metadata":let i=[];Object.entries(a.metadata.metadata).forEach(([r,o])=>i.push(`${r}: ${o}`)),t=i.join(", ");break}return t},editAction(a){switch(this.editIndex=this.localEvents.findIndex(t=>t.type===a.type&&t.start===a.start),a.type){case"activity":this.editActivity=a.activity,this.showActivityUpdate=!0;break;case"metadata":this.editMetadata=a.metadata,this.showMetadataUpdate=!0;break;case"note":this.editNote=a.note,this.showNoteUpdate=!0;break}},deleteAction(a){let t=this.localEvents.findIndex(n=>n.type===a.type&&n.start===a.start),i=null,r=null,o=null;switch(a.type){case"activity":i=`timeline/${a.activity.name}/activity`,r=a.activity.start,o=a.activity.uuid;break;case"metadata":i="metadata",r=a.metadata.start;break;case"note":i="notes",r=a.note.start;break}this.$dialog.confirm(`Are you sure you want to remove ${a.type} at ${a.start}`,{okText:"Delete",cancelText:"Cancel"}).then(n=>{this.localEvents.splice(t,1);let l=`/openc3-api/${i}/${r}`;return o&&(l+=`/${o}`),_.li.delete(l)}).then(n=>{this.$emit("update"),this.$notify.normal({title:`Deleted ${a.type}`,body:`Deleted ${a.type} at ${r}`})}).catch(n=>{})},updateActivity(a){this.$emit("update"),this.localEvents[this.editIndex].activity=a},updateMetadata(a){this.$emit("update"),this.localEvents[this.editIndex].metadata=a},updateNote(a){this.$emit("update"),this.localEvents[this.editIndex].note=a},addMetadata(a){let t={name:"Metadata",start:new Date(a.start*1e3),end:new Date(a.start*1e3),color:a.color,type:a.type,timed:!0,metadata:a};this.localEvents.push(t)}}},Ve={key:0},ye={key:1},fe={key:0},Ce={key:1};function we(a,t,i,r,o,n){const l=e.resolveComponent("v-spacer"),s=e.resolveComponent("v-btn"),y=e.resolveComponent("v-toolbar"),d=e.resolveComponent("v-text-field"),u=e.resolveComponent("v-row"),p=e.resolveComponent("v-card-title"),f=e.resolveComponent("v-data-table"),V=e.resolveComponent("v-card-actions"),C=e.resolveComponent("v-card"),w=e.resolveComponent("v-dialog"),h=e.resolveComponent("activity-create-dialog"),v=e.resolveComponent("metadata-create-dialog"),g=e.resolveComponent("note-create-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(w,{modelValue:n.show,"onUpdate:modelValue":t[2]||(t[2]=m=>n.show=m),persistent:"",width:"80vw"},{default:e.withCtx(()=>[e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(y,{height:"24"},{default:e.withCtx(()=>[e.createVNode(l),i.newMetadata?(e.openBlock(),e.createElementBlock("span",Ve,"Metadata")):(e.openBlock(),e.createElementBlock("span",ye,"Events")),e.createVNode(l),e.createVNode(s,{icon:"mdi-close-box",variant:"text",density:"compact","data-test":"close-metadata-icon","aria-label":"Close Dialog",onClick:n.close},null,8,["onClick"])]),_:1}),e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(u,{class:"pa-3"},{default:e.withCtx(()=>[i.newMetadata?(e.openBlock(),e.createElementBlock("span",fe,"Metadata")):(e.openBlock(),e.createElementBlock("span",Ce,"Events")),e.createVNode(l),e.createVNode(d,{modelValue:o.search,"onUpdate:modelValue":t[0]||(t[0]=m=>o.search=m),label:"Search","prepend-inner-icon":"mdi-magnify",clearable:"",variant:"outlined",density:"compact","single-line":"","hide-details":""},null,8,["modelValue"])]),_:1})]),_:1}),e.createVNode(f,{headers:o.eventHeaders,items:o.localEvents,search:o.search},{"no-data":e.withCtx(()=>t[7]||(t[7]=[e.createElementVNode("span",null," No events ",-1)])),"item.start":e.withCtx(({item:m})=>[e.createTextVNode(e.toDisplayString(a.formatDateTime(m.start,i.timeZone)),1)]),"item.end":e.withCtx(({item:m})=>[e.createTextVNode(e.toDisplayString(a.formatDateTime(m.end,i.timeZone)),1)]),"item.type":e.withCtx(({item:m})=>[e.createTextVNode(e.toDisplayString(m.type.charAt(0).toUpperCase()+m.type.slice(1)),1)]),"item.data":e.withCtx(({item:m})=>[e.createTextVNode(e.toDisplayString(n.dataFormat(m)),1)]),"item.actions":e.withCtx(({item:m})=>[e.createVNode(s,{icon:"mdi-pencil",variant:"text",size:"small",class:"mr-2","data-test":"edit-event","aria-label":"Edit Event",onClick:c=>n.editAction(m)},null,8,["onClick"]),e.createVNode(s,{icon:"mdi-delete",variant:"text",size:"small","data-test":"delete-event","aria-label":"Delete Event",onClick:c=>n.deleteAction(m)},null,8,["onClick"])]),_:1},8,["headers","items","search"]),e.createVNode(V,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(l),e.createVNode(s,{variant:"outlined","data-test":"close-event-list",onClick:n.close},{default:e.withCtx(()=>t[8]||(t[8]=[e.createTextVNode(" Close ")])),_:1},8,["onClick"]),i.newMetadata?(e.openBlock(),e.createBlock(s,{key:0,variant:"flat","data-test":"new-event",onClick:t[1]||(t[1]=m=>o.showMetadataCreate=!0)},{default:e.withCtx(()=>t[9]||(t[9]=[e.createTextVNode(" New Metadata ")])),_:1})):e.createCommentVNode("",!0)]),_:1})]),_:1})]),_:1},8,["modelValue"]),o.showActivityUpdate?(e.openBlock(),e.createBlock(h,{key:0,modelValue:o.showActivityUpdate,"onUpdate:modelValue":t[3]||(t[3]=m=>o.showActivityUpdate=m),activity:o.editActivity,"time-zone":i.timeZone,onUpdate:n.updateActivity},null,8,["modelValue","activity","time-zone","onUpdate"])):e.createCommentVNode("",!0),o.showMetadataUpdate?(e.openBlock(),e.createBlock(v,{key:1,modelValue:o.showMetadataUpdate,"onUpdate:modelValue":t[4]||(t[4]=m=>o.showMetadataUpdate=m),metadata:o.editMetadata,"time-zone":i.timeZone,onUpdate:n.updateMetadata},null,8,["modelValue","metadata","time-zone","onUpdate"])):e.createCommentVNode("",!0),o.showNoteUpdate?(e.openBlock(),e.createBlock(g,{key:2,modelValue:o.showNoteUpdate,"onUpdate:modelValue":t[5]||(t[5]=m=>o.showNoteUpdate=m),note:o.editNote,"time-zone":i.timeZone,onUpdate:n.updateNote},null,8,["modelValue","note","time-zone","onUpdate"])):e.createCommentVNode("",!0),o.showMetadataCreate?(e.openBlock(),e.createBlock(v,{key:3,modelValue:o.showMetadataCreate,"onUpdate:modelValue":t[6]||(t[6]=m=>o.showMetadataCreate=m),"time-zone":i.timeZone,onUpdate:n.addMetadata},null,8,["modelValue","time-zone","onUpdate"])):e.createCommentVNode("",!0)])}const _e=x._export_sfc(ve,[["render",we]]);exports.ActivityCreateDialog=S;exports.ColorSelectForm=E;exports.CreateDialog=k;exports.DeleteItem=U;exports.EventListDialog=_e;exports.MetadataCreateDialog=B;exports.MetadataInputForm=M;exports.NoteCreateDialog=q;
|
|
2
|
-
//# sourceMappingURL=EventListDialog-D_KXhGDO.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventListDialog-D_KXhGDO.cjs","sources":["../../../node_modules/date-fns/add.js","../src/tools/calendar/CreateDialog.js","../src/tools/calendar/ActivityCreateDialog.vue","../src/tools/calendar/ColorSelectForm.vue","../src/tools/calendar/DeleteItem.js","../src/tools/calendar/MetadataInputForm.vue","../src/tools/calendar/MetadataCreateDialog.vue","../src/tools/calendar/NoteCreateDialog.vue","../src/tools/calendar/EventListDialog.vue"],"sourcesContent":["import { addDays } from \"./addDays.js\";\nimport { addMonths } from \"./addMonths.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link add} function options.\n */\n\n/**\n * @name add\n * @category Common Helpers\n * @summary Add the specified years, months, weeks, days, hours, minutes, and seconds to the given date.\n *\n * @description\n * Add the specified years, months, weeks, days, hours, minutes, and seconds to the given date.\n *\n * @typeParam DateType - The `Date` type the function operates on. Gets inferred from passed arguments. Allows using extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param duration - The object with years, months, weeks, days, hours, minutes, and seconds to be added.\n * @param options - An object with options\n *\n * @returns The new date with the seconds added\n *\n * @example\n * // Add the following duration to 1 September 2014, 10:19:50\n * const result = add(new Date(2014, 8, 1, 10, 19, 50), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30,\n * })\n * //=> Thu Jun 15 2017 15:29:20\n */\nexport function add(date, duration, options) {\n const {\n years = 0,\n months = 0,\n weeks = 0,\n days = 0,\n hours = 0,\n minutes = 0,\n seconds = 0,\n } = duration;\n\n // Add years and months\n const _date = toDate(date, options?.in);\n const dateWithMonths =\n months || years ? addMonths(_date, months + years * 12) : _date;\n\n // Add weeks and days\n const dateWithDays =\n days || weeks ? addDays(dateWithMonths, days + weeks * 7) : dateWithMonths;\n\n // Add days, hours, minutes, and seconds\n const minutesToAdd = minutes + hours * 60;\n const secondsToAdd = seconds + minutesToAdd * 60;\n const msToAdd = secondsToAdd * 1000;\n\n return constructFrom(options?.in || date, +dateWithDays + msToAdd);\n}\n\n// Fallback for modularized imports:\nexport default add;\n","/*\n# Copyright 2023 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { add, format, parse } from 'date-fns'\n\nexport default {\n props: {\n date: {\n type: String,\n },\n time: {\n type: String,\n },\n timeZone: {\n type: String,\n },\n },\n data() {\n return {\n startDate: '',\n startTime: '',\n endDate: '',\n endTime: '',\n }\n },\n methods: {\n calcStartDateTime: function () {\n if (this.date) {\n this.startDate = this.date\n this.endDate = this.date\n } else {\n this.startDate = format(new Date(), 'yyyy-MM-dd')\n this.endDate = format(new Date(), 'yyyy-MM-dd')\n }\n let ms = 1000 * 60 * 30 // 30 min\n let start = null\n if (this.time) {\n start = parse(this.time, 'HH:mm:ss', new Date())\n // Round down so the start is the beginning of the time box where they clicked\n start = new Date(Math.floor(start.getTime() / ms) * ms)\n } else {\n // Round up so the start is in the future\n start = new Date(Math.ceil(new Date().getTime() / ms) * ms)\n }\n this.startTime = format(start, 'HH:mm:ss')\n this.endTime = format(add(start, { minutes: 30 }), 'HH:mm:ss')\n },\n },\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-dialog v-model=\"show\" persistent width=\"600\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-if=\"activity\">Edit Activity</span>\n <span v-else>Create Activity</span>\n <v-spacer />\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-note-icon\"\n @click=\"clearHandler\"\n />\n </v-toolbar>\n <v-stepper\n v-model=\"dialogStep\"\n editable\n :items=\"['Activity Times', 'Activity Type']\"\n >\n <template v-if=\"dialogStep === 2\" #actions>\n <v-row class=\"ma-0 px-6 pb-4\">\n <v-btn variant=\"text\" @click=\"() => (dialogStep -= 1)\">\n Previous\n </v-btn>\n <v-spacer />\n <v-btn variant=\"outlined\" class=\"mr-4\" @click=\"clearHandler\">\n Cancel\n </v-btn>\n <v-btn\n type=\"submit\"\n color=\"primary\"\n :disabled=\"!!error\"\n @click.prevent=\"submitHandler\"\n >\n Ok\n </v-btn>\n </v-row>\n </template>\n\n <template #item.1>\n <v-card-text>\n <div class=\"pr-2\">\n <v-select\n v-model=\"timeline\"\n density=\"compact\"\n hide-details\n variant=\"outlined\"\n :items=\"timelineNames\"\n label=\"Timeline\"\n data-test=\"activity-select-timeline\"\n class=\"pb-2\"\n >\n </v-select>\n <v-row dense>\n <v-text-field\n v-model=\"startDate\"\n type=\"date\"\n label=\"Start Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"activity-start-date\"\n />\n <v-text-field\n v-model=\"startTime\"\n type=\"time\"\n step=\"1\"\n label=\"Start Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"activity-start-time\"\n />\n </v-row>\n <v-row dense>\n <v-text-field\n v-model=\"endDate\"\n type=\"date\"\n label=\"End Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"activity-end-date\"\n />\n <v-text-field\n v-model=\"endTime\"\n type=\"time\"\n step=\"1\"\n label=\"End Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"activity-end-time\"\n />\n </v-row>\n <v-row class=\"pl-3\">\n <v-checkbox\n v-model=\"recurring\"\n :disabled=\"!!activity\"\n label=\"Recurring\"\n hide-details\n data-test=\"recurring\"\n >\n </v-checkbox>\n </v-row>\n <v-row v-if=\"recurring\">\n <v-col>\n <div class=\"repeat\">Repeat every</div>\n </v-col>\n <v-col>\n <v-text-field\n v-model=\"frequency\"\n :disabled=\"!!activity\"\n density=\"compact\"\n variant=\"outlined\"\n single-line\n hide-details\n data-test=\"recurring-frequency\"\n /></v-col>\n <v-col>\n <v-select\n v-model=\"timeSpan\"\n :disabled=\"!!activity\"\n :items=\"timeSpans\"\n style=\"primary\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n data-test=\"recurring-span\"\n />\n </v-col>\n </v-row>\n <v-row v-if=\"recurring\" style=\"padding-bottom: 10px\">\n <v-col>\n <div class=\"repeat\">Ending</div>\n </v-col>\n <v-col>\n <v-text-field\n v-model=\"recurringEndDate\"\n type=\"date\"\n label=\"End Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n :disabled=\"!!activity\"\n data-test=\"recurring-end-date\"\n /></v-col>\n <v-col>\n <v-text-field\n v-model=\"recurringEndTime\"\n type=\"time\"\n step=\"1\"\n label=\"End Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n :disabled=\"!!activity\"\n data-test=\"recurring-end-time\"\n /></v-col>\n </v-row>\n <v-row>\n <span\n v-show=\"timeError\"\n class=\"ma-2 text-red\"\n v-text=\"timeError\"\n />\n </v-row>\n </div>\n </v-card-text>\n </template>\n\n <template #item.2>\n <v-card-text>\n <div class=\"pr-2\">\n <v-select\n v-model=\"kind\"\n density=\"compact\"\n hide-details\n variant=\"outlined\"\n :items=\"types\"\n label=\"Activity Type\"\n data-test=\"activity-select-type\"\n class=\"pb-2\"\n >\n </v-select>\n <div v-if=\"kind === 'COMMAND'\">\n <v-text-field\n v-model=\"activityData\"\n type=\"text\"\n label=\"Command Input\"\n placeholder=\"INST COLLECT with TYPE 0, DURATION 1, OPCODE 171, TEMP 0\"\n prefix=\"cmd('\"\n suffix=\"')\"\n hint=\"Timeline runs commands with cmd_no_hazardous_check\"\n data-test=\"activity-cmd\"\n />\n </div>\n <div v-else-if=\"kind === 'SCRIPT'\" class=\"ma-3\">\n <script-chooser @file=\"fileHandler\" />\n <environment-chooser v-model=\"activityEnvironment\" />\n </div>\n <div v-else>\n <span class=\"ma-2\"> No required input </span>\n </div>\n <v-row v-show=\"typeError\" class=\"mt-2\">\n <span class=\"ma-2 text-red\" v-text=\"typeError\" />\n </v-row>\n </div>\n </v-card-text>\n </template>\n </v-stepper>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { EnvironmentChooser, ScriptChooser } from '@/components'\nimport { TimeFilters } from '@/util'\nimport CreateDialog from './CreateDialog'\n\nexport default {\n components: {\n EnvironmentChooser,\n ScriptChooser,\n },\n mixins: [CreateDialog, TimeFilters],\n props: {\n modelValue: Boolean,\n timelines: {\n type: Array,\n required: true,\n },\n activity: {\n type: Object,\n default: null,\n },\n },\n data() {\n return {\n timeline: null,\n dialogStep: 1,\n kind: '',\n types: ['COMMAND', 'SCRIPT', 'RESERVE'],\n activityData: '',\n activityEnvironment: [],\n rules: {\n required: (value) => !!value || 'Required',\n },\n recurring: false,\n recurringEndDate: null,\n recurringEndTime: null,\n frequency: 90,\n timeSpan: 'minutes',\n timeSpans: ['minutes', 'hours', 'days'],\n }\n },\n computed: {\n timeError: function () {\n const now = new Date()\n const start = Date.parse(`${this.startDate}T${this.startTime}`)\n const end = Date.parse(`${this.endDate}T${this.endTime}`)\n if (start === end) {\n return 'Invalid start, end time. Activity must have different start and end times.'\n }\n if (now > start) {\n return 'Invalid start time. Activity must be in the future.'\n }\n if (start > end) {\n return 'Invalid start time. Activity start before end.'\n }\n return null\n },\n typeError: function () {\n if (!this.timeline) {\n return 'Activity must have a timeline selected.'\n }\n if (this.kind !== 'RESERVE' && !this.activityData) {\n return 'No data is selected or inputted'\n }\n return null\n },\n timelineNames: function () {\n return this.timelines.map((timeline) => {\n return timeline.name\n })\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted: function () {\n this.updateValues()\n },\n methods: {\n changeKind: function (inputKind) {\n if (inputKind === this.kind) {\n return\n }\n this.kind = inputKind\n this.activityData = ''\n },\n fileHandler: function (event) {\n this.activityData = event\n },\n updateValues: function () {\n this.dialogStep = 1\n if (this.activity) {\n this.timeline = this.activity.name\n const sDate = new Date(this.activity.start * 1000)\n const eDate = new Date(this.activity.stop * 1000)\n this.startDate = this.formatDate(sDate, this.timeZone)\n this.startTime = this.formatTimeHMS(sDate, this.timeZone)\n this.endDate = this.formatDate(eDate, this.timeZone)\n this.endTime = this.formatTimeHMS(eDate, this.timeZone)\n this.kind = this.activity.kind.toUpperCase()\n this.activityData = this.activity.data[this.activity.kind]\n this.activityEnvironment = this.activity.data.environment\n if (this.activity.recurring?.uuid) {\n this.recurring = true\n const rDate = new Date(this.activity.recurring.end * 1000)\n this.recurringEndDate = this.formatDate(rDate, this.timeZone)\n this.recurringEndTime = this.formatTimeHMS(rDate, this.timeZone)\n this.frequency = this.activity.recurring.frequency\n this.timeSpan = this.activity.recurring.span\n }\n } else {\n this.calcStartDateTime()\n this.recurringEndDate = this.startDate\n this.recurringEndTime = this.startTime\n this.kind = ''\n this.activityData = ''\n this.activityEnvironment = []\n this.timeline = this.timelineNames[0]\n }\n },\n clearHandler: function () {\n this.show = !this.show\n },\n submitHandler() {\n // Call the api to create a new activity to add to the activities array\n let start = null\n let stop = null // API takes stop instead of end\n let recurringEnd = null\n if (this.timeZone === 'local') {\n start = new Date(this.startDate + ' ' + this.startTime).toISOString()\n stop = new Date(this.endDate + ' ' + this.endTime).toISOString()\n if (this.recurring) {\n recurringEnd = new Date(\n this.recurringEndDate + ' ' + this.recurringEndTime,\n ).toISOString()\n }\n } else {\n start = new Date(\n this.startDate + ' ' + this.startTime + 'Z',\n ).toISOString()\n stop = new Date(this.endDate + ' ' + this.endTime + 'Z').toISOString()\n if (this.recurring) {\n recurringEnd = new Date(\n this.recurringEndDate + ' ' + this.recurringEndTime + 'Z',\n ).toISOString()\n }\n }\n const kind = this.kind.toLowerCase()\n let data = { environment: this.activityEnvironment }\n data[kind] = this.activityData\n let recurring = {}\n if (this.recurring) {\n recurring = {\n frequency: this.frequency,\n span: this.timeSpan,\n end: recurringEnd,\n }\n }\n if (this.activity) {\n Api.put(\n `/openc3-api/timeline/${this.activity.name}/activity/${this.activity.start}`,\n {\n data: { start, stop, kind, data, recurring },\n },\n )\n .then((response) => {\n const activityTime = this.formatSeconds(\n new Date(response.data.start * 1000),\n )\n this.$notify.normal({\n title: 'Updated Activity',\n body: `${activityTime} (${response.data.start}) on timeline: ${response.data.name}`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n .catch((error) => {\n this.show = !this.show\n })\n } else {\n Api.post(`/openc3-api/timeline/${this.timeline}/activities`, {\n data: { start, stop, kind, data, recurring },\n })\n .then((response) => {\n const activityTime = this.formatSeconds(\n new Date(response.data.start * 1000),\n )\n this.$notify.normal({\n title: 'Created Activity',\n body: `${activityTime} (${response.data.start}) on timeline: ${response.data.name}`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n .catch((error) => {\n this.show = !this.show\n })\n }\n // We don't do the $emit or set show here because it has to be in the callback\n this.clearHandler()\n },\n },\n}\n</script>\n\n<style scoped>\n.repeat {\n padding-top: 10px;\n text-align: right;\n}\n\n.v-stepper--vertical .v-stepper__content {\n width: auto;\n margin: 0px 0px 0px 36px;\n padding: 0px;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-select label=\"Color\" :items=\"swatches\" v-model=\"color\">\n <template v-slot:prepend-inner>\n <v-icon :color=\"color\"> mdi-square </v-icon>\n </template>\n <template v-slot:item=\"{ props, item }\">\n <v-list-item v-bind=\"props\" :value=\"item.raw\">\n <template v-slot:prepend>\n <v-icon :color=\"item.raw\"> mdi-square </v-icon>\n </template>\n </v-list-item>\n </template>\n </v-select>\n </div>\n</template>\n\n<script>\nexport default {\n components: {},\n props: {\n modelValue: {\n type: String,\n required: true,\n },\n },\n computed: {\n color: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n swatches: function () {\n return [\n '#005a8f',\n '#003784',\n '#8F3400',\n '#df1368',\n '#ff5252',\n '#df323b',\n '#9f0010',\n '#2d9437',\n '#004700',\n '#db7200',\n '#802700',\n '#0f2941',\n ]\n },\n },\n methods: {},\n}\n</script>\n","/*\n# Copyright 2023 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n methods: {\n deleteItem(item) {\n let start = null\n let api = ''\n switch (item.type.toLowerCase()) {\n case 'activity':\n api = 'activity'\n start = item.activity.start\n break\n case 'metadata':\n api = 'metadata'\n start = item.metadata.start\n break\n case 'note':\n api = 'notes'\n start = item.note.start\n break\n }\n this.$dialog\n .confirm(\n `Are you sure you want to remove ${item.typeStr} at ${item.startStr}`,\n {\n okText: 'Delete',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n return Api.delete(`/openc3-api/${api}/${start}`)\n })\n .then(() => {\n this.$emit('delete', item)\n this.$notify.normal({\n title: `Deleted ${item.typeStr}`,\n body: `Deleted ${item.typeStr} at ${item.startStr}`,\n })\n })\n .catch(() => {})\n },\n },\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-table dense>\n <tbody>\n <tr>\n <th scope=\"col\" class=\"text-left\">Key</th>\n <th scope=\"col\" class=\"text-left\">Value</th>\n <th scope=\"col\" class=\"text-right\">\n <v-btn\n icon=\"mdi-plus\"\n variant=\"text\"\n data-test=\"new-metadata-icon\"\n @click=\"newMetadata\"\n />\n </th>\n </tr>\n <tr v-for=\"(meta, i) in metadata\" :key=\"`tr-${i}`\">\n <td>\n <v-text-field\n v-model=\"meta.key\"\n type=\"text\"\n density=\"compact\"\n :data-test=\"`key-${i}`\"\n />\n </td>\n <td>\n <v-text-field\n v-model=\"meta.value\"\n type=\"text\"\n density=\"compact\"\n :data-test=\"`value-${i}`\"\n />\n </td>\n <td>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n :data-test=\"`delete-metadata-icon-${i}`\"\n @click=\"rm(i)\"\n />\n </td>\n </tr>\n </tbody>\n </v-table>\n </div>\n</template>\n\n<script>\nexport default {\n components: {},\n props: {\n modelValue: {\n type: Array,\n required: true,\n },\n },\n data() {\n return {}\n },\n computed: {\n metadata: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n methods: {\n newMetadata: function () {\n this.metadata.push({\n key: '',\n value: '',\n })\n },\n rm: function (index) {\n this.metadata.splice(index, 1)\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 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-dialog v-model=\"show\" persistent width=\"600\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-if=\"metadata\">Update Metadata</span>\n <span v-else>Create Metadata</span>\n <v-spacer />\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-metadata-icon\"\n @click=\"clearHandler\"\n />\n </v-toolbar>\n <v-stepper\n v-model=\"dialogStep\"\n editable\n :items=\"['Metadata Times', 'Metadata Input']\"\n >\n <template v-if=\"dialogStep === 2\" #actions>\n <v-row class=\"ma-0 px-6 pb-4\">\n <v-btn variant=\"text\" @click=\"() => (dialogStep -= 1)\">\n Previous\n </v-btn>\n <v-spacer />\n <v-btn variant=\"outlined\" class=\"mr-4\" @click=\"clearHandler\">\n Cancel\n </v-btn>\n <v-btn\n type=\"submit\"\n color=\"primary\"\n :disabled=\"!!error\"\n @click.prevent=\"submitHandler\"\n >\n Ok\n </v-btn>\n </v-row>\n </template>\n\n <template #item.1>\n <v-card-text>\n <div class=\"pa-2\">\n <color-select-form v-model=\"color\" />\n <v-row dense>\n <v-text-field\n v-model=\"startDate\"\n type=\"date\"\n label=\"Start Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"metadata-start-date\"\n />\n <v-text-field\n v-model=\"startTime\"\n type=\"time\"\n step=\"1\"\n label=\"Start Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"metadata-start-time\"\n />\n </v-row>\n </div>\n </v-card-text>\n </template>\n\n <template #item.2>\n <v-card-text>\n <div class=\"pa-2\">\n <div style=\"min-height: 200px\">\n <metadata-input-form v-model=\"metadataVals\" />\n </div>\n <v-row v-show=\"typeError\">\n <span class=\"ma-2 text-red\" v-text=\"typeError\" />\n </v-row>\n </div>\n </v-card-text>\n </template>\n </v-stepper>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\nimport ColorSelectForm from './ColorSelectForm.vue'\nimport CreateDialog from './CreateDialog'\nimport MetadataInputForm from './MetadataInputForm.vue'\n\nexport default {\n components: {\n ColorSelectForm,\n MetadataInputForm,\n },\n mixins: [CreateDialog, TimeFilters],\n props: {\n modelValue: Boolean,\n metadata: {\n type: Object,\n default: null,\n },\n },\n data() {\n return {\n dialogStep: 1,\n color: '#003784',\n metadataVals: [],\n rules: {\n required: (value) => !!value || 'Required',\n },\n }\n },\n computed: {\n typeError: function () {\n if (!this.color) {\n return 'A color is required.'\n }\n if (this.metadataVals.length < 1) {\n return 'Please enter a value in the metadata table.'\n }\n const emptyKeyValue = this.metadataVals.find(\n (meta) => meta.key === '' || meta.value === '',\n )\n if (emptyKeyValue) {\n return 'Missing or empty key, value in the metadata table.'\n }\n return null\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted: function () {\n this.updateValues()\n },\n methods: {\n updateValues: function () {\n this.dialogStep = 1\n if (this.metadata) {\n const sDate = new Date(this.metadata.start * 1000)\n this.startDate = this.formatDate(sDate, this.timeZone)\n this.startTime = this.formatTimeHMS(sDate, this.timeZone)\n this.color = this.metadata.color\n this.metadataVals = Object.keys(this.metadata.metadata).map((k) => {\n return { key: k, value: this.metadata.metadata[k] }\n })\n } else {\n this.calcStartDateTime()\n this.color = '#003784'\n this.metadataVals = []\n }\n },\n clearHandler: function () {\n this.show = !this.show\n },\n submitHandler() {\n const color = this.color\n const metadata = this.metadataVals.reduce((result, element) => {\n result[element.key] = element.value\n return result\n }, {})\n const data = { color, metadata }\n if (this.timeZone === 'local') {\n data.start = new Date(\n this.startDate + ' ' + this.startTime,\n ).toISOString()\n } else {\n data.start = new Date(\n this.startDate + ' ' + this.startTime + 'Z',\n ).toISOString()\n }\n if (this.metadata) {\n Api.put(`/openc3-api/metadata/${this.metadata.start}`, {\n data,\n }).then((response) => {\n this.$notify.normal({\n title: 'Updated Metadata',\n body: `Metadata updated: (${response.data.start})`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n } else {\n Api.post('/openc3-api/metadata', {\n data,\n }).then((response) => {\n this.$notify.normal({\n title: 'Created new Metadata',\n body: `Metadata: (${response.data.start})`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n }\n // We don't do the $emit or set show here because it has to be in the callback\n },\n },\n}\n</script>\n\n<style scoped>\n.v-stepper--vertical .v-stepper__content {\n width: auto;\n margin: 0px 0px 0px 36px;\n padding: 0px;\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 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-dialog v-model=\"show\" persistent width=\"600\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-if=\"note\">Update Note</span>\n <span v-else>Create Note</span>\n <v-spacer />\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-note-icon\"\n @click=\"clearHandler\"\n />\n </v-toolbar>\n <v-stepper\n v-model=\"dialogStep\"\n editable\n :items=\"['Note Times', 'Note Input']\"\n >\n <template v-if=\"dialogStep === 2\" #actions>\n <v-row class=\"ma-0 px-6 pb-4\">\n <v-btn variant=\"text\" @click=\"() => (dialogStep -= 1)\">\n Previous\n </v-btn>\n <v-spacer />\n <v-btn variant=\"outlined\" class=\"mr-4\" @click=\"clearHandler\">\n Cancel\n </v-btn>\n <v-btn\n type=\"submit\"\n color=\"primary\"\n :disabled=\"!!error\"\n @click.prevent=\"submitHandler\"\n >\n Ok\n </v-btn>\n </v-row>\n </template>\n\n <template #item.1>\n <v-card-text>\n <div class=\"pa-2\">\n <v-row dense>\n <v-text-field\n v-model=\"startDate\"\n type=\"date\"\n label=\"Start Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"note-start-date\"\n />\n <v-text-field\n v-model=\"startTime\"\n type=\"time\"\n step=\"1\"\n label=\"Start Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"note-start-time\"\n />\n </v-row>\n <v-row dense>\n <v-text-field\n v-model=\"endDate\"\n type=\"date\"\n label=\"End Date\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"note-end-date\"\n />\n <v-text-field\n v-model=\"endTime\"\n type=\"time\"\n step=\"1\"\n label=\"End Time\"\n class=\"mx-1\"\n :rules=\"[rules.required]\"\n data-test=\"note-end-time\"\n />\n </v-row>\n <v-row>\n <span\n v-show=\"timeError\"\n class=\"ma-2 text-red\"\n v-text=\"timeError\"\n />\n </v-row>\n </div>\n </v-card-text>\n </template>\n\n <template #item.2>\n <v-card-text>\n <div class=\"pa-2\">\n <div>\n <color-select-form v-model=\"color\" />\n </div>\n <div>\n <v-text-field\n v-model=\"description\"\n type=\"text\"\n label=\"Note Description\"\n data-test=\"note-description\"\n />\n </div>\n <v-row v-show=\"typeError\">\n <span class=\"ma-2 text-red\" v-text=\"typeError\" />\n </v-row>\n </div>\n </v-card-text>\n </template>\n </v-stepper>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\nimport ColorSelectForm from './ColorSelectForm.vue'\nimport CreateDialog from './CreateDialog'\n\nexport default {\n components: {\n ColorSelectForm,\n },\n mixins: [CreateDialog, TimeFilters],\n props: {\n modelValue: Boolean,\n note: {\n type: Object,\n },\n },\n data() {\n return {\n dialogStep: 1,\n description: '',\n color: '#8F3400',\n rules: {\n required: (value) => !!value || 'Required',\n },\n }\n },\n computed: {\n timeError: function () {\n let start\n let end\n if (this.timeZone === 'local') {\n start = new Date(this.startDate + ' ' + this.startTime)\n end = new Date(this.endDate + ' ' + this.endTime)\n } else {\n start = new Date(this.startDate + ' ' + this.startTime + 'Z')\n end = new Date(this.endDate + ' ' + this.endTime + 'Z')\n }\n if (start === end) {\n return 'Invalid start, end time. Notes must have different start and end times.'\n }\n if (start > end) {\n return 'Invalid start time. Notes start before end.'\n }\n return null\n },\n typeError: function () {\n if (!this.color) {\n return 'A color is required.'\n }\n if (!this.description) {\n return 'A description is required for a valid note.'\n }\n return null\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted: function () {\n this.updateValues()\n },\n methods: {\n updateValues: function () {\n this.dialogStep = 1\n if (this.note) {\n const sDate = new Date(this.note.start * 1000)\n this.startDate = this.formatDate(sDate, this.timeZone)\n this.startTime = this.formatTimeHMS(sDate, this.timeZone)\n const eDate = new Date(this.note.stop * 1000)\n this.endDate = this.formatDate(eDate, this.timeZone)\n this.endTime = this.formatTimeHMS(eDate, this.timeZone)\n this.color = this.note.color\n this.description = this.note.description\n } else {\n this.calcStartDateTime()\n this.color = '#8F3400'\n this.description = ''\n }\n },\n clearHandler: function () {\n this.show = !this.show\n },\n submitHandler() {\n let start\n let stop // API takes stop rather than end\n if (this.timeZone === 'local') {\n start = new Date(this.startDate + ' ' + this.startTime).toISOString()\n stop = new Date(this.endDate + ' ' + this.endTime).toISOString()\n } else {\n start = new Date(\n this.startDate + ' ' + this.startTime + 'Z',\n ).toISOString()\n stop = new Date(this.endDate + ' ' + this.endTime + 'Z').toISOString()\n }\n const color = this.color\n const description = this.description\n if (this.note) {\n Api.put(`/openc3-api/notes/${this.note.start}`, {\n data: { start, stop, color, description },\n }).then((response) => {\n const desc =\n response.data.description.length > 16\n ? `${response.data.description.substring(0, 16)}...`\n : response.data.description\n this.$notify.normal({\n title: 'Updated Note',\n body: `Note updated: (${response.data.start}): \"${desc}\"`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n } else {\n Api.post('/openc3-api/notes', {\n data: { start, stop, color, description },\n }).then((response) => {\n const desc =\n response.data.description.length > 16\n ? `${response.data.description.substring(0, 16)}...`\n : response.data.description\n this.$notify.normal({\n title: 'Created new Note',\n body: `Note: (${response.data.start}) created: \"${desc}\"`,\n })\n this.$emit('update', response.data)\n this.show = !this.show\n })\n }\n // We don't do the $emit or set show here because it has to be in the callback\n },\n },\n}\n</script>\n\n<style scoped>\n.v-stepper--vertical .v-stepper__content {\n width: auto;\n margin: 0px 0px 0px 36px;\n padding: 0px;\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 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-dialog v-model=\"show\" persistent width=\"80vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-if=\"newMetadata\">Metadata</span><span v-else>Events</span>\n <v-spacer />\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-metadata-icon\"\n aria-label=\"Close Dialog\"\n @click=\"close\"\n />\n </v-toolbar>\n <v-card-title>\n <v-row class=\"pa-3\">\n <span v-if=\"newMetadata\">Metadata</span><span v-else>Events</span>\n <v-spacer />\n <v-text-field\n v-model=\"search\"\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n single-line\n hide-details\n />\n </v-row>\n </v-card-title>\n <v-data-table\n :headers=\"eventHeaders\"\n :items=\"localEvents\"\n :search=\"search\"\n >\n <template #no-data>\n <span> No events </span>\n </template>\n <template #item.start=\"{ item }\">\n {{ formatDateTime(item.start, timeZone) }}\n </template>\n <template #item.end=\"{ item }\">\n {{ formatDateTime(item.end, timeZone) }}\n </template>\n <template #item.type=\"{ item }\">\n {{ item.type.charAt(0).toUpperCase() + item.type.slice(1) }}\n </template>\n <template #item.data=\"{ item }\">\n {{ dataFormat(item) }}\n </template>\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n size=\"small\"\n class=\"mr-2\"\n data-test=\"edit-event\"\n aria-label=\"Edit Event\"\n @click=\"editAction(item)\"\n />\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n size=\"small\"\n data-test=\"delete-event\"\n aria-label=\"Delete Event\"\n @click=\"deleteAction(item)\"\n />\n </template>\n </v-data-table>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" data-test=\"close-event-list\" @click=\"close\">\n Close\n </v-btn>\n <v-btn\n v-if=\"newMetadata\"\n variant=\"flat\"\n data-test=\"new-event\"\n @click=\"showMetadataCreate = true\"\n >\n New Metadata\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n <!-- Edit existing events -->\n <activity-create-dialog\n v-if=\"showActivityUpdate\"\n v-model=\"showActivityUpdate\"\n :activity=\"editActivity\"\n :time-zone=\"timeZone\"\n @update=\"updateActivity\"\n />\n <metadata-create-dialog\n v-if=\"showMetadataUpdate\"\n v-model=\"showMetadataUpdate\"\n :metadata=\"editMetadata\"\n :time-zone=\"timeZone\"\n @update=\"updateMetadata\"\n />\n <note-create-dialog\n v-if=\"showNoteUpdate\"\n v-model=\"showNoteUpdate\"\n :note=\"editNote\"\n :time-zone=\"timeZone\"\n @update=\"updateNote\"\n />\n <!-- Create new metadata -->\n <metadata-create-dialog\n v-if=\"showMetadataCreate\"\n v-model=\"showMetadataCreate\"\n :time-zone=\"timeZone\"\n @update=\"addMetadata\"\n />\n </div>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\nimport ActivityCreateDialog from './ActivityCreateDialog.vue'\nimport DeleteItem from './DeleteItem'\nimport MetadataCreateDialog from './MetadataCreateDialog.vue'\nimport NoteCreateDialog from './NoteCreateDialog.vue'\n\nexport default {\n components: {\n ActivityCreateDialog,\n MetadataCreateDialog,\n NoteCreateDialog,\n },\n mixins: [TimeFilters, DeleteItem],\n props: {\n events: {\n type: Array,\n required: true,\n },\n modelValue: {\n type: Boolean,\n required: true,\n },\n timeZone: {\n type: String,\n required: true,\n },\n types: {\n type: Array,\n },\n newMetadata: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n search: '',\n localEvents: [...this.events],\n eventHeaders: [\n { title: 'Start', key: 'start', width: 215 },\n { title: 'Stop', key: 'end', width: 215 },\n { title: 'Type', key: 'type' },\n { title: 'Data', key: 'data' },\n { title: 'Actions', key: 'actions', sortable: false },\n ],\n editActivity: { start: new Date(), end: new Date() },\n editMetadata: { start: new Date(), end: new Date() },\n editNote: { start: new Date(), end: new Date() },\n editIndex: 0,\n showActivityUpdate: false,\n showMetadataUpdate: false,\n showNoteUpdate: false,\n showMetadataCreate: false,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n created: function () {\n // TODO: Switch to vue3 syntax\n // this.$on('delete', (item) => {\n // let index = this.localEvents.findIndex((element) => {\n // return element.type === item.type && element.start === item.start\n // })\n // this.localEvents.splice(index, 1)\n // })\n },\n methods: {\n close() {\n this.$emit('close')\n this.show = false\n },\n dataFormat(event) {\n let data = event.name\n switch (event.type) {\n case 'note':\n data = event.note.description\n break\n case 'metadata':\n let rows = []\n Object.entries(event.metadata.metadata).forEach(([key, value]) =>\n rows.push(`${key}: ${value}`),\n )\n data = rows.join(', ')\n break\n }\n return data\n },\n editAction(item) {\n this.editIndex = this.localEvents.findIndex((element) => {\n return element.type === item.type && element.start === item.start\n })\n switch (item.type) {\n case 'activity':\n this.editActivity = item.activity\n this.showActivityUpdate = true\n break\n case 'metadata':\n this.editMetadata = item.metadata\n this.showMetadataUpdate = true\n break\n case 'note':\n this.editNote = item.note\n this.showNoteUpdate = true\n break\n }\n },\n deleteAction(item) {\n let deleteIndex = this.localEvents.findIndex((element) => {\n return element.type === item.type && element.start === item.start\n })\n let api = null\n let start = null\n let uuid = null\n switch (item.type) {\n case 'activity':\n api = `timeline/${item.activity.name}/activity`\n start = item.activity.start\n uuid = item.activity.uuid\n break\n case 'metadata':\n api = 'metadata'\n start = item.metadata.start\n break\n case 'note':\n api = 'notes'\n start = item.note.start\n break\n }\n\n this.$dialog\n .confirm(\n `Are you sure you want to remove ${item.type} at ${item.start}`,\n {\n okText: 'Delete',\n cancelText: 'Cancel',\n },\n )\n .then((dialog) => {\n this.localEvents.splice(deleteIndex, 1)\n let url = `/openc3-api/${api}/${start}`\n if (uuid) {\n url += `/${uuid}`\n }\n return Api.delete(url)\n })\n .then((response) => {\n this.$emit('update')\n this.$notify.normal({\n title: `Deleted ${item.type}`,\n body: `Deleted ${item.type} at ${start}`,\n })\n })\n .catch((error) => {\n // TODO: It returns true on cancel?\n })\n },\n updateActivity(item) {\n this.$emit('update')\n this.localEvents[this.editIndex].activity = item\n },\n updateMetadata(item) {\n this.$emit('update')\n this.localEvents[this.editIndex].metadata = item\n },\n updateNote(item) {\n this.$emit('update')\n this.localEvents[this.editIndex].note = item\n },\n addMetadata(item) {\n // TODO: This is how Calendar creates new metadata items via makeMetadataEvent\n let metadata = {\n name: 'Metadata',\n start: new Date(item.start * 1000),\n end: new Date(item.start * 1000),\n color: item.color,\n type: item.type,\n timed: true,\n metadata: item,\n }\n this.localEvents.push(metadata)\n },\n },\n}\n</script>\n"],"names":["add","date","duration","options","years","months","weeks","days","hours","minutes","seconds","_date","toDate","dateWithMonths","addMonths","dateWithDays","addDays","minutesToAdd","msToAdd","constructFrom","CreateDialog","format","ms","start","parse","_sfc_main","EnvironmentChooser","ScriptChooser","TimeFilters","value","now","end","timeline","inputKind","event","sDate","eDate","_a","rDate","stop","recurringEnd","kind","data","recurring","Api","response","activityTime","error","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_9","_createElementBlock","_createVNode","_component_v_dialog","$options","_cache","$event","_withCtx","_component_v_card","_component_v_toolbar","_component_v_spacer","$props","_hoisted_1","_hoisted_2","_component_v_btn","_component_v_stepper","$data","_createSlots","_component_v_card_text","_createElementVNode","_component_v_select","_component_v_row","_component_v_text_field","_ctx","_component_v_checkbox","_openBlock","_createBlock","_component_v_col","_createCommentVNode","_toDisplayString","_hoisted_6","_hoisted_7","_component_script_chooser","_component_environment_chooser","_hoisted_8","_createTextVNode","_withModifiers","_component_v_icon","props","item","_component_v_list_item","_mergeProps","DeleteItem","api","index","_component_v_table","_Fragment","_renderList","meta","i","ColorSelectForm","MetadataInputForm","k","color","metadata","result","element","_component_color_select_form","_component_metadata_input_form","description","desc","ActivityCreateDialog","MetadataCreateDialog","NoteCreateDialog","rows","key","deleteIndex","uuid","dialog","url","_component_v_card_title","_component_v_data_table","_component_v_card_actions","_component_activity_create_dialog","_component_metadata_create_dialog","_component_note_create_dialog"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/Layout-BLADjt_A.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Openc3Screen-COi4u-9k.cjs","sources":["../src/components/autocomplete/screenCompleter.js","../src/components/EditScreenDialog.vue","../src/components/EnvironmentDialog.vue","../src/components/TreeNode.vue","../src/components/FileOpenSaveDialog.vue","../src/components/Openc3Screen.vue"],"sourcesContent":["/*\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\n\n// Test data useful for testing ScreenCompleter\n// let autocompleteData = [\n// {\n// caption: 'HORIZONTAL',\n// meta: 'Places the widgets it encapsulates horizontally',\n// snippet: 'HORIZONTAL ${1:<Margin>}',\n// },\n// {\n// caption: 'LABELVALUE',\n// meta: 'Displays a LABEL with the item name followed by a VALUE',\n// value: 'LABELVALUE ',\n// command: 'startAutocomplete',\n// params: [\n// { 'Target name': 1 },\n// { 'Packet name': 1 },\n// { 'Item name': 1 },\n// { RAW: 'raw description', CONVERTED: 1, FORMATTED: 1, WITH_UNITS: 1 },\n// { '<Number of characters>': 'characters description' },\n// ],\n// },\n// ]\n\nexport default class ScreenCompleter {\n constructor() {\n // See openc3-cosmos-cmd-tlm-api/app/controllers/script_autocomplete_controller.rb\n // for how the autocompleteData is built\n\n Api.get(`/openc3-api/autocomplete/data/screen`).then((response) => {\n this.autocompleteData = response.data\n })\n this.api = new OpenC3Api()\n }\n\n async getCompletions(editor, session, pos, prefix, callback) {\n let line = session.getLine(pos.row)\n let lineBefore = line.slice(0, pos.column)\n let parsedLine = lineBefore.trimStart().split(/ (?![^<]*>)/)\n let suggestions = this.autocompleteData\n // If we have more than 1 we've selected a keyword\n if (parsedLine.length > 1) {\n suggestions = suggestions.find((x) => x.caption === parsedLine[0])\n }\n let result = {}\n let more = true\n // If we found suggestions and the suggestions have params\n // then we do logic to substitute suggestions using the actual\n // target, packet, item data\n if (suggestions && suggestions['params']) {\n // Check if this is the last autocomplete parameter\n if (suggestions['params'].length == parsedLine.length - 1) {\n more = false\n }\n // parsedLine.length - 2 because the last element is blank\n // e.g. ['LABELVALUE', 'INST', '']\n let current = suggestions['params'][parsedLine.length - 2]\n // Check for Target name, Packet name, and Item name and use\n // api calls to substitute actual values for suggestions\n if (current['Target name']) {\n let target_names = await this.api.get_target_names()\n suggestions = target_names.reduce(\n (acc, curr) => ((acc[curr] = 1), acc),\n {},\n )\n } else if (current['Packet name']) {\n let target_name = parsedLine[parsedLine.length - 2]\n let packets = await this.api.get_all_tlm(target_name)\n suggestions = packets.reduce(\n (acc, pkt) => ((acc[pkt.packet_name] = pkt.description), acc),\n {},\n )\n } else if (current['Item name']) {\n let target_name = parsedLine[parsedLine.length - 3]\n let packet_name = parsedLine[parsedLine.length - 2]\n let packet = await this.api.get_tlm(target_name, packet_name)\n suggestions = packet.items.reduce(\n (acc, item) => ((acc[item.name] = item.description), acc),\n {},\n )\n } else {\n // Not a special case so just use the param as is\n suggestions = current\n }\n\n result = Object.keys(suggestions || {}).map((x) => {\n let completions = {\n value: x + (more ? ' ' : ''),\n // We want the autoComplete to continue right up\n // to the last parameter\n command: more && 'startAutocomplete',\n }\n // Only add the meta (description) if we have a string\n // This prevents adding (Object) descriptions\n if (typeof suggestions[x] === 'string') {\n completions['meta'] = suggestions[x]\n }\n return completions\n })\n } else {\n // The snippet case where we just inject the snippet\n result = suggestions\n }\n callback(null, result)\n }\n}\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit dialog -->\n <v-dialog v-model=\"show\" persistent width=\"75vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-btn\n class=\"mx-2\"\n icon=\"mdi-delete\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"delete-screen-icon\"\n @click=\"deleteScreen\"\n />\n <v-spacer />\n <span> Edit Screen: {{ target }} {{ screen }} </span>\n <v-spacer />\n <v-btn\n class=\"mx-2\"\n icon=\"mdi-download\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"download-screen-icon\"\n @click=\"downloadScreen\"\n />\n </v-toolbar>\n <v-card-text style=\"max-height: 90vh\">\n <v-row class=\"mt-3\"> Upload a screen file. </v-row>\n <v-row no-gutters align=\"center\">\n <v-btn\n :disabled=\"!file\"\n color=\"primary\"\n class=\"mr-3\"\n data-test=\"edit-screen-load\"\n @click=\"loadFile\"\n >\n Load\n </v-btn>\n <v-file-input\n v-model=\"file\"\n truncate-length=\"15\"\n accept=\".txt\"\n label=\"Click to select .txt screen file.\"\n />\n </v-row>\n <v-row class=\"mb-2\"> Edit the screen definition. </v-row>\n <v-row class=\"mb-2\">\n <pre\n ref=\"editor\"\n class=\"editor\"\n @contextmenu.prevent=\"showContextMenu\"\n ></pre>\n <v-menu v-model=\"contextMenu\" :target=\"[menuX, menuY]\">\n <v-list>\n <v-list-item link>\n <v-list-item-title @click=\"openDocumentation\">\n {{ docsKeyword }} documentation\n </v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item\n title=\"Toggle Vim mode\"\n prepend-icon=\"extras:vim\"\n @click=\"toggleVimMode\"\n />\n </v-list>\n </v-menu>\n </v-row>\n <!-- Make the error messages a max height and scrollable -->\n <v-row style=\"max-height: 120px; overflow-y: auto\">\n <div v-for=\"(error, index) in editErrors\" :key=\"index\">\n <span class=\"text-red\" v-text=\"error\"></span>\n </div>\n </v-row>\n <v-row class=\"mt-5\">\n <span\n >Ctrl-space brings up autocomplete. Right click keywords for\n documentation.</span\n >\n <v-spacer />\n <v-btn\n class=\"mx-2\"\n variant=\"outlined\"\n data-test=\"edit-screen-cancel\"\n @click=\"$emit('cancel')\"\n >\n Cancel\n </v-btn>\n <v-btn\n class=\"mx-2\"\n color=\"primary\"\n data-test=\"edit-screen-save\"\n @click=\"$emit('save', editor.getValue())\"\n >\n Save\n </v-btn>\n </v-row>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport { ScreenCompleter } from './autocomplete'\nimport { AceEditorUtils } from './ace'\n\nexport default {\n props: {\n modelValue: Boolean,\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n errors: {\n type: Array,\n default: () => [],\n },\n },\n data() {\n return {\n file: null,\n docsKeyword: '',\n contextMenu: false,\n menuX: 0,\n menuY: 0,\n }\n },\n computed: {\n editErrors: function () {\n if (this.definition === '' && !this.file) {\n return ['Input can not be blank.']\n }\n if (this.errors.length !== 0) {\n let messages = new Set()\n let result = []\n const sortedErrors = this.errors.toSorted(\n (a, b) => a.lineNumber - b.lineNumber,\n )\n for (const error of sortedErrors) {\n let msg = `At ${error.lineNumber}: (${error.line}) ${error.message}.`\n if (error.usage) {\n msg += ` Usage: ${error.usage}`\n }\n result.push(msg)\n messages.add(error.message)\n }\n return result\n }\n return []\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted: function () {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n const screenMode = this.buildScreenMode()\n this.editor.session.setMode(new screenMode())\n this.editor.session.setTabSize(2)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setOption('enableBasicAutocompletion', true)\n this.editor.setOption('enableLiveAutocompletion', true)\n this.editor.completers = [new ScreenCompleter()]\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.definition)\n this.editor.clearSelection()\n AceEditorUtils.applyVimModeIfEnabled(this.editor)\n this.editor.focus()\n },\n beforeUnmount() {\n this.editor.destroy()\n this.editor.container.remove()\n },\n methods: {\n toggleVimMode: function () {\n AceEditorUtils.toggleVimMode(this.editor)\n },\n showContextMenu: function (event) {\n this.menuX = event.pageX\n this.menuY = event.pageY\n\n let position = this.editor.getCursorPosition()\n let token = this.editor.session.getTokenAt(position.row, position.column)\n if (token) {\n let value = token.value.trim()\n if (value.includes(' ')) {\n this.docsKeyword = value.split(' ')[0]\n } else {\n this.docsKeyword = value\n }\n this.contextMenu = true\n }\n },\n openDocumentation() {\n window.open(\n `${\n window.location.origin\n }/tools/staticdocs/docs/configuration/telemetry-screens#${this.docsKeyword.toLowerCase()}`,\n '_blank',\n )\n },\n buildScreenMode() {\n let oop = ace.require('ace/lib/oop')\n let TextHighlightRules = ace.require(\n 'ace/mode/text_highlight_rules',\n ).TextHighlightRules\n\n let list = this.keywords.join('|')\n let OpenC3HighlightRules = function () {\n this.$rules = {\n start: [\n {\n token: 'comment',\n regex: '#.*$',\n },\n {\n token: 'string',\n regex: '\".*?\"',\n },\n {\n token: 'string',\n regex: \"'.*?'\",\n },\n {\n token: 'constant.numeric',\n regex: '\\\\b\\\\d+(?:\\\\.\\\\d+)?\\\\b',\n },\n {\n token: 'keyword',\n regex: new RegExp(`^\\\\s*(${list})\\\\b`),\n },\n ],\n }\n this.normalizeRules()\n }\n oop.inherits(OpenC3HighlightRules, TextHighlightRules)\n let Mode = function () {\n this.HighlightRules = OpenC3HighlightRules\n }\n let TextMode = ace.require('ace/mode/text').Mode\n oop.inherits(Mode, TextMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n downloadScreen: function () {\n const blob = new Blob([this.editor.getValue()], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', `${this.screen.toLowerCase()}.txt`)\n link.click()\n },\n loadFile: function () {\n const fileReader = new FileReader()\n fileReader.readAsText(this.file)\n const that = this\n fileReader.onload = function () {\n that.editor.setValue(fileReader.result)\n that.file = null\n }\n },\n deleteScreen: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete this screen?!`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('delete')\n })\n },\n },\n}\n</script>\n\n<style>\n.ace_autocomplete {\n width: 60vw !important;\n}\n</style>\n<style scoped>\n.editor {\n height: 45vh;\n width: 75vw;\n position: relative;\n font-size: 16px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <form @submit.prevent=\"addEnvironment\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Global Environment Variables</span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense class=\"mb-2\">\n <v-text-field\n v-model=\"search\"\n label=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n clear-icon=\"mdi-close-circle-outline\"\n autofocus\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n item-key=\"name\"\n hide-default-header\n data-test=\"env-table\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"environment\"\n :items-per-page=\"5\"\n :items-per-page-options=\"[5]\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n class=\"mt-1\"\n data-test=\"item-delete\"\n aria-label=\"Delete Environment Variable\"\n @click=\"deleteEnvironment(item)\"\n />\n </template>\n </v-data-table>\n <v-row dense>\n <v-col>\n <v-text-field v-model=\"key\" label=\"Key\" data-test=\"env-key\" />\n </v-col>\n <v-col>\n <v-text-field\n v-model=\"keyValue\"\n label=\"Value\"\n data-test=\"env-value\"\n />\n </v-col>\n </v-row>\n <v-row dense>\n <v-btn\n block\n type=\"submit\"\n color=\"primary\"\n data-test=\"add-env\"\n :disabled=\"!key || !keyValue\"\n @click.prevent=\"addEnvironment\"\n >\n Add\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n modelValue: Boolean,\n },\n data() {\n return {\n alert: '',\n alertType: 'success',\n showAlert: false,\n search: '',\n key: '',\n keyValue: '',\n environment: [],\n headers: [\n {\n text: 'Key',\n value: 'key',\n },\n {\n text: 'Value',\n value: 'value',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted() {\n this.update()\n },\n methods: {\n alertHandler: function (event) {\n this.alert = event.text\n this.alertType = event.type\n this.showAlert = true\n },\n update: function () {\n Api.get('/openc3-api/environment')\n .then((response) => {\n this.environment = response.data\n })\n .catch((error) => {\n // TODO: $error.something\n })\n },\n addEnvironment: function () {\n Api.post('/openc3-api/environment', {\n data: {\n key: this.key.toUpperCase(),\n value: this.keyValue,\n },\n })\n .then((response) => {\n const alertEvent = {\n text: `New environment variable: ${response.data.name}`,\n type: 'success',\n }\n this.update()\n })\n .catch((error) => {\n const alertEvent = {\n text: `Failed to add environment variable: ${error}`,\n type: 'error',\n }\n this.alertHandler(alertEvent)\n })\n this.key = ''\n this.keyValue = ''\n },\n deleteEnvironment: function (env) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${env.key}=${env.value}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/openc3-api/environment/${env.name}`)\n })\n .then((response) => {\n const alertEvent = {\n text: `Removed environment variable: ${env.name}`,\n type: 'success',\n }\n this.alertHandler(alertEvent)\n this.update()\n })\n .catch((error) => {\n const alertEvent = {\n text: `Failed to delete environment: ${error}`,\n type: 'error',\n }\n this.alertHandler(alertEvent)\n })\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<!--\n# Due to performance issues in TreeView we implement TreeNode\n# based on code example provided in https://github.com/vuetifyjs/vuetify/issues/19919\n-->\n<template>\n <div class=\"tree-node\">\n <div v-if=\"showNode\" class=\"node-content\" @click=\"handleClick(node)\">\n <div class=\"content-wrapper\">\n <v-icon\n v-if=\"node.children\"\n class=\"toggle-icon\"\n style=\"padding-right: 10px\"\n >\n {{ node.isOpen ? 'mdi-menu-down' : 'mdi-menu-right' }}\n </v-icon>\n <v-icon v-if=\"node.children\" size=\"small\" style=\"padding-right: 10px\">\n {{ 'mdi-folder' }}\n </v-icon>\n <v-icon\n v-else-if=\"node.title.includes('.rb')\"\n size=\"small\"\n style=\"padding-right: 10px\"\n >\n {{ 'mdi-language-ruby' }}\n </v-icon>\n <v-icon\n v-else-if=\"node.title.includes('.py')\"\n size=\"small\"\n style=\"padding-right: 10px\"\n >\n {{ 'mdi-language-python' }}\n </v-icon>\n <v-icon v-else size=\"small\" style=\"padding-right: 10px\">\n {{ 'mdi-file-document' }}\n </v-icon>\n <span\n class=\"title\"\n :tabindex=\"node.children ? -1 : 0\"\n @keyup.enter=\"handleClick(node)\"\n >\n {{ node.title }}\n </span>\n\n <v-btn\n v-if=\"node.title === '__TEMP__'\"\n icon=\"mdi-delete\"\n variant=\"text\"\n style=\"margin-left: auto\"\n aria-label=\"Delete\"\n @click=\"emit('delete')\"\n />\n </div>\n </div>\n <div v-else></div>\n <div v-if=\"node.children && node.isOpen\" class=\"children\">\n <tree-node\n v-for=\"child in node.children\"\n :key=\"child.id\"\n :node=\"child\"\n :search=\"search\"\n :type=\"type\"\n @node-toggled=\"bubbleNodeToggled\"\n @request=\"bubbleNodeRequest\"\n ></tree-node>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, watch } from 'vue'\n\nconst props = defineProps({\n node: {\n type: Object,\n required: true,\n },\n search: {\n type: String,\n default: '',\n },\n type: {\n type: String,\n default: 'open',\n },\n})\n\nconst isOpen = ref(props.node.isOpen || false)\n\nconst showNode = computed(() => {\n const _nodeOrChildMatchesSearch = (node) => {\n if (!props.search) {\n return true\n }\n if (node.path.toLowerCase().includes(props.search.toLowerCase())) {\n return true\n }\n return !!node.children?.some(_nodeOrChildMatchesSearch)\n }\n\n return _nodeOrChildMatchesSearch(props.node)\n})\n\nwatch(\n () => props.node.isOpen,\n (newpath) => {\n isOpen.value = newpath\n },\n)\n\nwatch(\n () => props.search,\n (newSearch) => {\n if (newSearch) {\n if (!props.node.isOpen) toggle()\n } else {\n if (props.node.isOpen) toggle()\n }\n },\n)\n\nconst emit = defineEmits(['nodeToggled', 'request'])\n\nconst handleClick = (node) => {\n if (node.children) {\n toggle()\n // Only emit request on folder for save dialog\n if (props.type === 'save') {\n emit('request', node)\n }\n } else {\n emit('request', node)\n }\n}\nconst toggle = () => {\n if (props.node.children) {\n isOpen.value = !isOpen.value\n props.node.isOpen = isOpen.value\n emit('nodeToggled', props.node.id, isOpen.value)\n }\n}\n// Bubble up the event for the nested tree-nodes\nconst bubbleNodeToggled = (nodeName, isOpen) => {\n emit('nodeToggled', nodeName, isOpen)\n}\nconst bubbleNodeRequest = (node) => {\n emit('request', node)\n}\n</script>\n\n<style scoped>\n.children {\n padding-left: 25px;\n}\n.content-wrapper {\n align-items: center;\n display: flex;\n max-height: 38px;\n}\n.node-content {\n cursor: pointer;\n overflow: hidden;\n user-select: none;\n white-space: nowrap;\n}\n.node-content:hover {\n background-color: rgba(211, 211, 211, 0.2);\n transition: background-color 0.3s ease;\n}\n.title {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.toggle-icon {\n width: 20px;\n}\n.tree-node {\n line-height: 1.8;\n position: relative;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\" @keydown.enter=\"success()\">\n <v-card>\n <v-overlay :model-value=\"loading\">\n <v-progress-circular\n indeterminate\n absolute\n size=\"64\"\n ></v-progress-circular>\n </v-overlay>\n <form @submit.prevent=\"success\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row>{{ helpText }} </v-row>\n <v-row dense class=\"mt-5\">\n <v-text-field\n v-model=\"search\"\n flat\n autofocus\n hide-details\n clearable\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n density=\"compact\"\n data-test=\"file-open-save-search\"\n />\n </v-row>\n <div class=\"overflow-y-auto tree-container\">\n <tree-node\n v-for=\"node in items\"\n :key=\"`${node.id}`\"\n :node=\"node\"\n :search=\"search\"\n :type=\"type\"\n @request=\"activeFile\"\n @delete=\"deleteTemp\"\n ></tree-node>\n </div>\n <v-row class=\"my-2\">\n <v-text-field\n v-model=\"selectedFile\"\n hide-details\n label=\"Filename\"\n data-test=\"file-open-save-filename\"\n :disabled=\"type === 'open'\"\n />\n </v-row>\n <v-row dense>\n <div\n v-show=\"error\"\n class=\"my-2 text-red\"\n style=\"white-space: pre-line\"\n >\n {{ error }}\n </div>\n </v-row>\n <v-row class=\"mt-2\">\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n class=\"mx-2\"\n data-test=\"file-open-save-cancel-btn\"\n :disabled=\"disableButtons\"\n @click=\"show = false\"\n >\n Cancel\n </v-btn>\n <v-btn\n ref=\"submitBtn\"\n type=\"submit\"\n color=\"primary\"\n class=\"mx-2\"\n data-test=\"file-open-save-submit-btn\"\n :disabled=\"disableButtons || !!error\"\n @click.prevent=\"success\"\n >\n {{ submit }}\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { fileIcon } from '@/util/fileIcon'\nimport TreeNode from './TreeNode.vue'\n\nexport default {\n components: {\n TreeNode,\n },\n props: {\n type: {\n type: String,\n required: true,\n validator: function (value) {\n // The value must match one of these strings\n return ['open', 'save'].indexOf(value) !== -1\n },\n },\n apiUrl: String, // Base API URL for use with scripts or cmd-tlm\n requireTargetParentDir: Boolean, // Require that the save filename be nested in a directory with the name of a target\n inputFilename: String, // passed if this is a 'save' dialog\n modelValue: Boolean,\n },\n data() {\n return {\n tree: [],\n items: [],\n search: null,\n selectedFile: null,\n disableButtons: false,\n targets: [],\n targetsRetrieved: [],\n loading: true,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n title: function () {\n if (this.type === 'open') {\n return 'File Open'\n } else {\n return 'File Save As...'\n }\n },\n submit: function () {\n if (this.type === 'open') {\n return 'OPEN'\n } else {\n return 'SAVE'\n }\n },\n helpText: function () {\n if (this.type === 'open') {\n return 'Click on folders to open them and then click a file to select it before clicking Open. Use the search box to filter the results. You can also Tab to the files and Enter to select.'\n } else {\n return 'Click on the folder to save into. Then complete the filename path with the desired name. Use the search box to filter the results.'\n }\n },\n error: function () {\n if (this.selectedFile === '' || this.selectedFile === null) {\n return 'No file selected must select a file'\n }\n if (\n !this.selectedFile.match(this.validFilenameRegex) ||\n this.selectedFile.match(/\\.\\.|\\/\\/|\\.\\/|\\/\\./) // Block .'s and /'s next to each other (block path traversal)\n ) {\n let message = `${this.selectedFile} is not a valid filename. Must `\n if (this.requireTargetParentDir) {\n message += 'be in a target directory and '\n }\n message +=\n 'only contain alphanumeric characters (including !-_.*) and a valid extension.\\n\\n' +\n 'For example: TGT1/procedures/test.py or TGT2/lib/inst.rb'\n return message\n }\n if (this.type === 'save' && this.selectedFile.match(/\\*$/)) {\n let message = `${this.selectedFile} is not a valid filename. Must not end in '*'.`\n return message\n }\n return null\n },\n validFilenameRegex: function () {\n const alphanumeric = '0-9a-zA-Z'\n const charset = `${alphanumeric}\\\\/\\\\!\\\\-\\\\_\\\\.\\\\*\\\\'\\\\(\\\\)` // From https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html a-z A-Z 0-9 / ! - _ . * ' ( )\n let expression = `[${charset}]+\\\\.[${alphanumeric}]+`\n if (this.requireTargetParentDir) {\n const targets = `(${this.targets.join('|')})`\n expression = `\\\\/?${targets}\\\\/${expression}`\n }\n return new RegExp(expression)\n },\n },\n created() {\n Api.get('/openc3-api/targets').then((response) => {\n this.targets = response.data\n this.targets.push('__TEMP__') // Also support __TEMP__\n this.targets.forEach((target) => {\n // Name not found so push the item and add a children array\n this.items.push({\n id: target,\n disabled: true,\n title: target,\n children: [],\n path: target,\n })\n // Load the targets 1 by 1 in the background\n this.loadFiles(target)\n })\n this.loading = false\n })\n },\n methods: {\n calcIcon: function (filename) {\n return fileIcon(filename)\n },\n loadFiles: function (target) {\n Api.get(this.apiUrl, { params: { target } })\n .then((response) => {\n if (response.data.length === 0) {\n // Delete from items since there is no data\n this.items = this.items.filter((item) => item.id !== target)\n return\n }\n for (let file of response.data.sort()) {\n // Make a copy of the entire file path before calling insertFile\n // because insertFile does recursion and needs the original path\n this.filepath = file\n this.insertFile(this.items, 2, file)\n }\n if (this.inputFilename) {\n this.selectedFile = this.inputFilename\n }\n // Enable the target we just populated\n const index = this.items.findIndex((item) => item.id === target)\n if (index !== -1) {\n this.items[index].disabled = false\n }\n })\n .catch((error) => {\n this.$emit('error', `Failed to connect to OpenC3. ${error}`)\n })\n },\n clear: function () {\n this.show = false\n this.overwrite = false\n this.disableButtons = false\n },\n activeFile: function (file) {\n if (file.length === 0) {\n this.selectedFile = null\n } else {\n // Search through items to find the item with id\n this.selectedFile = this.findItem(this.items, file.id)\n // Select the Submit button so return opens the file\n setTimeout(() => {\n this.$refs.submitBtn.$el.focus()\n }, 100)\n }\n },\n findItem: function (items, id) {\n for (let item of items) {\n if (item.id === id) {\n return item.path\n }\n if (item.children) {\n const found = this.findItem(item.children, id)\n if (found) {\n return found\n }\n }\n }\n return null\n },\n exists: function (root, name) {\n let found = false\n for (let item of root) {\n if (item.path === name) {\n return true\n }\n if (item.path.length > 1) {\n if (item.path[item.path.length - 1] === '*') {\n // Try without the star too\n if (item.path.slice(0, item.path.length - 1) === name) {\n return true\n }\n }\n }\n if (item.children) {\n found = found || this.exists(item.children, name)\n }\n }\n return found\n },\n success: function () {\n // Only process the success call if a file is selected and no error\n if (this.selectedFile !== null && this.error === null) {\n if (this.type === 'open') {\n this.openSuccess()\n } else {\n this.saveSuccess()\n }\n }\n },\n deleteTemp: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete all the temporary files?`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete('/script-api/scripts/temp_files')\n })\n .then((response) => {\n this.$emit('clear-temp')\n this.loadFiles('__TEMP__')\n })\n .catch((error) => {\n this.$notify.serious({\n title: 'Error',\n body: `Failed to remove script temporary files due to ${error}`,\n })\n })\n },\n openSuccess: function () {\n // Disable the buttons because the API call can take a bit\n this.disableButtons = true\n Api.get(`${this.apiUrl}/${this.selectedFile}`)\n .then((response) => {\n const file = {\n name: this.selectedFile,\n contents: response.data.contents,\n }\n if (response.data.suites) {\n file['suites'] = JSON.parse(response.data.suites)\n }\n if (response.data.error) {\n file['error'] = response.data.error\n }\n if (response.data.success) {\n file['success'] = response.data.success\n }\n const locked = response.data.locked\n const breakpoints = response.data.breakpoints\n this.$emit('file', { file, locked, breakpoints })\n this.clear()\n })\n .catch((error) => {\n this.$emit('error', `Failed to open ${this.selectedFile}. ${error}`)\n this.clear()\n })\n },\n saveSuccess: function () {\n const found = this.exists(this.items, this.selectedFile)\n if (found) {\n this.$dialog\n .confirm(`Are you sure you want to overwrite: ${this.selectedFile}`, {\n okText: 'Overwrite',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('filename', this.selectedFile)\n this.clear()\n })\n .catch((error) => {}) // Cancel, do nothing\n } else {\n this.$emit('filename', this.selectedFile)\n this.clear()\n }\n },\n insertFile: function (root, level, path) {\n let parts = path.split('/')\n // When there is only 1 part we're at the root so push the filename\n if (parts.length === 1) {\n root.push({\n id: this.filepath,\n title: parts[0],\n file: 'ruby',\n path: this.filepath,\n })\n return\n }\n // Look for the first part of the path\n const index = root.findIndex((item) => item.title === parts[0])\n if (index === -1) {\n // Name not found so push the item and add a children array\n root.push({\n id: this.filepath\n .split('/')\n .slice(0, level - 1)\n .join('/'),\n title: parts[0],\n children: [],\n path: this.filepath\n .split('/')\n .slice(0, level - 1)\n .join('/'),\n })\n this.insertFile(\n root[root.length - 1].children, // Start from the node we just added\n level + 1,\n parts.slice(1).join('/'), // Strip the first part of the path\n )\n } else {\n // We already have something at this level so recursively\n // call the insertPart using the node we found and adjust the path\n this.insertFile(\n root[index].children,\n level + 1,\n parts.slice(1).join('/'),\n )\n }\n },\n },\n}\n</script>\n\n<style>\n.tree-container {\n background-color: var(--color-background-base-default);\n padding: 10px;\n margin-top: 5px;\n max-height: 60vh;\n font-size: large;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n#\n# This screen expects to be inside of two parent elements.\n# An overall item, and then a container for all screens\n-->\n\n<template>\n <div ref=\"bar\" :style=\"computedStyle\">\n <v-card\n v-if=\"!inline\"\n :min-height=\"height\"\n :min-width=\"width\"\n style=\"cursor: default\"\n >\n <v-toolbar height=\"24\">\n <v-btn\n v-show=\"errors.length !== 0\"\n icon=\"mdi-alert\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"error-graph-icon\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"edit-screen-icon\"\n aria-label=\"Edit Screen\"\n @click=\"openEdit\"\n />\n <v-tooltip v-if=\"!fixFloated\" :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :icon=\"floated ? 'mdi-balloon' : 'mdi-view-grid-outline'\"\n variant=\"text\"\n data-test=\"float-screen-icon\"\n :aria-label=\"floated ? 'Unfloat Screen' : 'Float Screen'\"\n @click=\"floatScreen\"\n />\n </div>\n </template>\n <span> {{ floated ? 'Unfloat Screen' : 'Float Screen' }} </span>\n </v-tooltip>\n <v-tooltip v-if=\"floated\" :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n icon=\"mdi-arrow-up\"\n variant=\"text\"\n data-test=\"up-screen-icon\"\n aria-label=\"Move Screen Up\"\n @click=\"upScreen\"\n />\n </div>\n </template>\n <span> Move Screen Up </span>\n </v-tooltip>\n <v-tooltip\n v-if=\"floated && zIndex > minZ\"\n :open-delay=\"600\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n icon=\"mdi-arrow-down\"\n variant=\"text\"\n data-test=\"down-screen-icon\"\n aria-label=\"Move Screen Down\"\n @click=\"downScreen\"\n />\n </div>\n </template>\n <span> Move Screen Down </span>\n </v-tooltip>\n <v-spacer />\n <span> {{ target }} {{ screen }} </span>\n <v-spacer />\n <v-btn\n v-if=\"expand\"\n icon=\"mdi-window-minimize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"minimize-screen-icon\"\n aria-label=\"Minimize Screen\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-else\n icon=\"mdi-window-maximize\"\n variant=\"text\"\n data-test=\"maximize-screen-icon\"\n aria-label=\"Maximize Screen\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-if=\"showClose\"\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-screen-icon\"\n aria-label=\"Close Screen\"\n @click=\"$emit('close-screen')\"\n />\n </v-toolbar>\n <v-expand-transition v-if=\"!editDialog\">\n <div\n v-show=\"expand\"\n ref=\"screen\"\n class=\"pa-1\"\n style=\"position: relative\"\n >\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n @add-item=\"addItem\"\n @delete-item=\"deleteItem\"\n @open=\"open\"\n @close=\"close\"\n @close-all=\"closeAll\"\n />\n </div>\n </v-expand-transition>\n </v-card>\n\n <div v-if=\"inline\" class=\"pa-1\" style=\"position: relative\">\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n @add-item=\"addItem\"\n @delete-item=\"deleteItem\"\n @open=\"open\"\n @close=\"close\"\n @close-all=\"closeAll\"\n />\n </div>\n\n <edit-screen-dialog\n v-if=\"editDialog\"\n v-model=\"editDialog\"\n :target=\"target\"\n :screen=\"screen\"\n :definition=\"currentDefinition\"\n :keywords=\"keywords\"\n :errors=\"errors\"\n @save=\"saveEdit($event)\"\n @cancel=\"cancelEdit()\"\n @delete=\"deleteScreen()\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" width=\"60vw\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Screen: {{ target }} {{ screen }} Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card>\n <v-textarea class=\"errors\" readonly rows=\"13\" :model-value=\"error\" />\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { uniqueId } from 'lodash'\nimport { Api, ConfigParserService, OpenC3Api } from '@openc3/js-common/services'\nimport WidgetComponents from '@/widgets/WidgetComponents'\nimport EditScreenDialog from './EditScreenDialog.vue'\n\nconst MAX_ERRORS = 20\n\nexport default {\n components: {\n EditScreenDialog,\n },\n mixins: [WidgetComponents],\n props: {\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n initialFloated: {\n type: Boolean,\n default: false,\n },\n initialTop: {\n type: Number,\n default: 0,\n },\n initialLeft: {\n type: Number,\n default: 0,\n },\n initialZ: {\n type: Number,\n default: 0,\n },\n minZ: {\n type: Number,\n default: 0,\n },\n fixFloated: {\n type: Boolean,\n default: false,\n },\n count: {\n type: Number,\n default: 0,\n },\n showClose: {\n type: Boolean,\n default: true,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n inline: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n api: null,\n backup: '',\n currentDefinition: this.definition,\n editDialog: false,\n expand: true,\n configParser: null,\n configError: false,\n currentLayout: null,\n layoutStack: [],\n namedWidgets: {},\n dynamicWidgets: [],\n width: null,\n height: null,\n staleTime: 30,\n cacheTimeout: 0.1,\n globalSettings: [],\n substitute: false,\n original_target_name: null,\n force_substitute: false,\n pollingPeriod: 1,\n errors: [],\n errorDialog: false,\n screenKey: null,\n dragX: 0,\n dragY: 0,\n floated: this.initialFloated,\n top: this.initialTop,\n left: this.initialLeft,\n zIndex: this.initialZ,\n changeCounter: 0,\n screenItems: [],\n screenValues: {},\n updateCounter: 0,\n screenId: uniqueId('openc3-screen_'),\n }\n },\n computed: {\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n let messages = new Set()\n let result = ''\n for (const error of this.errors) {\n if (messages.has(error.message)) {\n continue\n }\n let msg = `${error.time}: (${error.type}) ${error.message}\\n`\n result += msg\n messages.add(error.message)\n }\n return result\n }\n return null\n },\n computedStyle() {\n let style = {}\n // note down what the width was in case it was set to AUTO, because absolute positioning will lose that\n const origWidth = this.width || this.$refs.bar?.clientWidth\n if (this.floated) {\n style['position'] = 'absolute'\n style['top'] = this.top + 'px'\n style['left'] = this.left + 'px'\n style['width'] = origWidth + 'px'\n }\n return style\n },\n },\n watch: {\n count: {\n handler(newValue, oldValue) {\n this.currentDefinition = this.definition\n this.rerender()\n },\n },\n },\n // Called when an error from any descendent component is captured\n // We need this because an error can occur from any of the children\n // in the widget stack and are typically thrown on create()\n errorCaptured(err, vm, info) {\n // eslint-disable-next-line no-console\n console.log({ err, vm, info })\n if (this.errors.length < MAX_ERRORS) {\n // eslint-disable-next-line no-console\n console.log({ errors: this.errors })\n if (err.usage) {\n this.errors.push({\n type: 'usage',\n message: err.message,\n usage: err.usage,\n line: err.line,\n lineNumber: err.lineNumber,\n time: new Date().getTime(),\n })\n } else {\n this.errors.push({\n type: 'error',\n message: err,\n time: new Date().getTime(),\n })\n }\n this.configError = true\n }\n return false\n },\n created() {\n this.api = new OpenC3Api()\n this.configParser = new ConfigParserService()\n this.parseDefinition()\n this.screenKey = Math.floor(Math.random() * 1000000)\n },\n mounted() {\n this.updateRefreshInterval()\n if (this.floated) {\n this.$refs.bar.onmousedown = this.dragMouseDown\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n }\n },\n unmounted() {\n if (this.updater != null) {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n methods: {\n // These are API methods that ButtonWidget uses to open and close screens\n open(target, screen) {\n this.$parent.showScreen(target, screen)\n },\n close(target, screen) {\n this.$parent.closeScreenByName(target, screen)\n },\n closeAll() {\n this.$parent.closeAll()\n },\n clearErrors: function () {\n this.errors = []\n this.configError = false\n },\n updateRefreshInterval: function () {\n let refreshInterval = this.pollingPeriod * 1000\n if (this.updater) {\n clearInterval(this.updater)\n }\n this.updater = setInterval(() => {\n this.update()\n }, refreshInterval)\n },\n parseDefinition: function () {\n // Each time we start over and parse the screen definition\n this.clearErrors()\n this.namedWidgets = {}\n this.layoutStack = []\n this.dynamicWidgets = []\n // Every screen starts with a VerticalWidget\n this.layoutStack.push({\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n })\n this.currentLayout = this.layoutStack[this.layoutStack.length - 1]\n\n this.configParser.parse_string(\n this.currentDefinition,\n '',\n false,\n true,\n (keyword, parameters, line, lineNumber) => {\n if (keyword) {\n switch (keyword) {\n case 'SCREEN':\n this.configParser.verify_num_parameters(\n 3,\n 4,\n `${keyword} <Width or AUTO> <Height or AUTO> <Polling Period>`,\n )\n this.width = parseInt(parameters[0])\n this.height = parseInt(parameters[1])\n this.pollingPeriod = parseFloat(parameters[2])\n break\n case 'END':\n this.configParser.verify_num_parameters(0, 0, `${keyword}`)\n this.layoutStack.pop()\n this.currentLayout =\n this.layoutStack[this.layoutStack.length - 1]\n break\n case 'STALE_TIME':\n this.configParser.verify_num_parameters(\n 1,\n 1,\n `${keyword} <Time (s)>`,\n )\n this.staleTime = parseInt(parameters[0])\n break\n case 'SETTING':\n case 'SUBSETTING':\n const widget =\n this.currentLayout.widgets[\n this.currentLayout.widgets.length - 1\n ] ?? this.currentLayout\n widget.settings.push(parameters)\n break\n case 'GLOBAL_SETTING':\n case 'GLOBAL_SUBSETTING':\n this.globalSettings.push(parameters)\n break\n default:\n this.processWidget(keyword, parameters, line, lineNumber)\n break\n } // switch keyword\n } // if keyword\n },\n )\n // This can happen if there is a typo in a layout widget with a corresponding END\n if (typeof this.layoutStack[0] === 'undefined') {\n let names = []\n let lines = []\n for (const widget of this.dynamicWidgets) {\n names.push(widget.name)\n lines.push(widget.lineNumber)\n }\n // Warn about any of the Dynamic widgets we found .. they could be typos\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push({\n type: 'usage',\n message: `Unknown widget! Are these widgets: ${names.join(',')}?`,\n lineNumber: lines.join(','),\n time: new Date().getTime(),\n })\n this.configError = true\n }\n // Create a simple VerticalWidget to replace the bad widget so\n // the layout stack can successfully unwind\n this.layoutStack[0] = {\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n }\n } else {\n this.applyGlobalSettings(this.layoutStack[0].widgets)\n }\n },\n openEdit: function () {\n // Make a copy in case they edit and cancel\n this.backup = this.currentDefinition.repeat(1)\n this.editDialog = true\n },\n upScreen: function () {\n this.zIndex += 1\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n },\n downScreen: function () {\n if (this.zIndex > this.minZ) {\n this.zIndex -= 1\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n }\n },\n floatScreen: function () {\n if (this.floated) {\n this.$refs.bar.onmousedown = null\n this.$refs.bar.parentElement.parentElement.style = 'z-index: 0'\n this.floated = false\n this.$emit('unfloat-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n } else {\n let bodyRect =\n this.$refs.bar.parentElement.parentElement.parentElement.getBoundingClientRect()\n let elemRect = this.$refs.bar.getBoundingClientRect()\n this.top = elemRect.top - bodyRect.top - 5\n this.left = elemRect.left - bodyRect.left - 5\n this.$refs.bar.onmousedown = this.dragMouseDown\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.floated = true\n this.$emit('float-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n }\n },\n dragMouseDown: function (e) {\n e = e || window.event\n e.preventDefault()\n // get the mouse cursor position at startup:\n this.dragX = e.clientX\n this.dragY = e.clientY\n document.onmouseup = this.closeDragElement\n // call a function whenever the cursor moves:\n document.onmousemove = this.elementDrag\n },\n elementDrag: function (e) {\n e = e || window.event\n e.preventDefault()\n // calculate the new cursor position:\n let xOffset = this.dragX - e.clientX\n let yOffset = this.dragY - e.clientY\n this.dragX = e.clientX\n this.dragY = e.clientY\n // set the element's new position:\n this.top = this.$refs.bar.offsetTop - yOffset\n this.left = this.$refs.bar.offsetLeft - xOffset\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n },\n closeDragElement: function () {\n // stop moving when mouse button is released:\n document.onmouseup = null\n document.onmousemove = null\n },\n rerender: function () {\n this.parseDefinition()\n this.updateRefreshInterval()\n // Force re-render\n this.screenKey = Math.floor(Math.random() * 1000000)\n // After re-render clear any errors\n this.$nextTick(function () {\n this.clearErrors()\n this.$emit('edit-screen')\n })\n },\n cancelEdit: function () {\n this.file = null\n this.editDialog = false\n // Restore the backup since we cancelled\n this.currentDefinition = this.backup\n this.rerender()\n },\n saveEdit: function (definition) {\n this.editDialog = false\n this.currentDefinition = definition\n this.rerender()\n this.$nextTick(function () {\n Api.post(\n '/openc3-api/screen/',\n {\n data: {\n scope: window.openc3Scope,\n target: this.target,\n screen: this.screen,\n text: this.currentDefinition,\n },\n },\n 0,\n )\n })\n },\n deleteScreen: function () {\n this.editDialog = false\n Api.delete(`/openc3-api/screen/${this.target}/${this.screen}`).then(\n (response) => {\n this.$emit('delete-screen')\n },\n )\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-screen')\n },\n processWidget: function (keyword, parameters, line, lineNumber) {\n let widgetName = null\n if (keyword === 'NAMED_WIDGET') {\n this.configParser.verify_num_parameters(\n 2,\n null,\n `${keyword} <Widget Name> <Widget Type> <Widget Settings... (optional)>`,\n )\n widgetName = parameters[0].toUpperCase()\n keyword = parameters[1].toUpperCase()\n parameters = parameters.slice(2, parameters.length)\n }\n const componentName =\n keyword.charAt(0).toUpperCase() +\n keyword.slice(1).toLowerCase() +\n 'Widget'\n let settings = []\n // Give all the widgets a reference to this screen\n // Use settings so we don't break existing custom widgets\n settings.push(['__SCREEN_ID__', this.screenId])\n if (widgetName !== null) {\n // Push a reference to the screen so the layout can register when it is created\n // We do this because the widget isn't actually created until\n // the layout happens with <component :is='type'>\n settings.push(['NAMED_WIDGET', widgetName])\n }\n // If this is a layout widget we add it to the layoutStack and reset the currentLayout\n if (\n keyword === 'VERTICAL' ||\n keyword === 'VERTICALBOX' ||\n keyword === 'HORIZONTAL' ||\n keyword === 'HORIZONTALBOX' ||\n keyword === 'MATRIXBYCOLUMNS' ||\n keyword === 'TABBOOK' ||\n keyword === 'TABITEM' ||\n keyword === 'CANVAS' ||\n keyword === 'RADIOGROUP' ||\n keyword === 'SCROLLWINDOW'\n ) {\n const layout = {\n type: componentName,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n widgets: [],\n }\n this.layoutStack.push(layout)\n this.currentLayout.widgets.push(layout)\n this.currentLayout = layout\n } else if (this.$options.components[componentName]) {\n this.currentLayout.widgets.push({\n type: componentName,\n target: this.target,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n line: line,\n lineNumber: lineNumber,\n })\n } else {\n let widget = {\n type: 'DynamicWidget',\n target: this.target,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n name: componentName,\n line: line,\n lineNumber: lineNumber,\n }\n this.currentLayout.widgets.push(widget)\n this.dynamicWidgets.push(widget)\n }\n },\n applyGlobalSettings: function (widgets) {\n widgets.forEach((widget) => {\n this.globalSettings.forEach((setting) => {\n // widget.type is already the full camelcase widget name like LabelWidget\n // so we have to lower case both and tack on 'widget' to compare\n if (\n widget.type.toLowerCase() ===\n setting[0].toLowerCase() + 'widget'\n ) {\n const existingSetting = widget.settings.find(\n (s) => s[0] === setting[1],\n )\n if (!existingSetting) {\n widget.settings.push(setting.slice(1))\n }\n }\n })\n // Recursively apply to all widgets contained in layouts\n if (widget.widgets) {\n this.applyGlobalSettings(widget.widgets)\n }\n })\n },\n update: function () {\n if (this.screenItems.length !== 0 && this.configError === false) {\n this.api\n .get_tlm_values(this.screenItems, this.staleTime, this.cacheTimeout)\n .then((data) => {\n this.clearErrors()\n this.updateValues(data)\n })\n .catch((error) => {\n let message = JSON.stringify(error, null, 2)\n // Anything other than 'no response received' which means the API server is down\n // is an error the user needs to fix so don't request values until they do\n if (!message.includes('no response received')) {\n this.configError = true\n }\n if (\n !this.errors.find((existing) => {\n return existing.message === message\n })\n ) {\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push({\n type: 'error',\n message: message,\n time: new Date().getTime(),\n })\n }\n }\n })\n }\n },\n updateValues: function (values) {\n this.updateCounter += 1\n for (let i = 0; i < values.length; i++) {\n values[i].push(this.updateCounter)\n this.screenValues[this.screenItems[i]] = values[i]\n }\n },\n addItem: function (valueId) {\n this.screenItems.push(valueId)\n this.screenValues[valueId] = [null, null, 0]\n },\n deleteItem: function (valueId) {\n let index = this.screenItems.indexOf(valueId)\n this.screenItems.splice(index, 1)\n },\n },\n}\n</script>\n\n<style scoped>\n.errors {\n padding-top: 0px;\n margin-top: 0px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n -webkit-mask-image: unset;\n mask-image: unset;\n}\n</style>\n"],"names":["ScreenCompleter","Api","response","OpenC3Api","editor","session","pos","prefix","callback","parsedLine","suggestions","x","result","more","current","acc","curr","target_name","pkt","packet_name","item","completions","_sfc_main","messages","sortedErrors","a","b","error","msg","value","ace.edit","screenMode","AceEditorUtils","event","position","token","oop","ace.require","TextHighlightRules","list","OpenC3HighlightRules","Mode","TextMode","blob","link","fileReader","that","dialog","_hoisted_1","_createBlock","_component_v_dialog","$options","_cache","$event","_withCtx","_createVNode","_component_v_card","_component_v_toolbar","_component_v_btn","_component_v_spacer","_createElementVNode","_toDisplayString","$props","_component_v_card_text","_component_v_row","_createTextVNode","$data","_component_v_file_input","_withModifiers","args","_component_v_menu","_component_v_list","_component_v_list_item","_component_v_list_item_title","_component_v_divider","_openBlock","_createElementBlock","_Fragment","_renderList","index","_ctx","alertEvent","env","_component_v_text_field","_component_v_data_table","_component_v_col","props","__props","isOpen","ref","showNode","computed","_nodeOrChildMatchesSearch","node","_a","watch","newpath","newSearch","toggle","emit","__emit","handleClick","bubbleNodeToggled","nodeName","bubbleNodeRequest","TreeNode","message","alphanumeric","expression","target","filename","fileIcon","file","items","id","found","root","name","locked","breakpoints","level","path","parts","_hoisted_2","_withKeys","_component_v_overlay","_component_v_progress_circular","_component_tree_node","MAX_ERRORS","EditScreenDialog","WidgetComponents","uniqueId","style","origWidth","newValue","oldValue","err","vm","info","ConfigParserService","screen","refreshInterval","keyword","parameters","line","lineNumber","names","lines","widget","bodyRect","elemRect","e","xOffset","yOffset","definition","widgetName","componentName","settings","layout","widgets","setting","s","data","existing","values","i","valueId","_normalizeStyle","_createCommentVNode","_vShow","_component_v_tooltip","_normalizeProps","_guardReactiveProps","_component_v_expand_transition","_withDirectives","_component_vertical_widget","_component_edit_screen_dialog","_component_v_textarea"],"mappings":"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"}
|