@openc3/vue-common 6.2.0 → 6.2.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-BIQi_bWC.cjs +3 -0
- package/dist/ArrayWidget-BIQi_bWC.cjs.map +1 -0
- package/dist/ArrayWidget-BxEO5hEG.js +106 -0
- package/dist/ArrayWidget-BxEO5hEG.js.map +1 -0
- package/dist/ArrayplotWidget-B_VPoV4v.js +199 -0
- package/dist/ArrayplotWidget-B_VPoV4v.js.map +1 -0
- package/dist/ArrayplotWidget-Donxhd8_.cjs +2 -0
- package/dist/ArrayplotWidget-Donxhd8_.cjs.map +1 -0
- package/dist/AstroStatus-CILMWL6F.cjs +2 -0
- package/dist/AstroStatus-CILMWL6F.cjs.map +1 -0
- package/dist/AstroStatus-CY9VkeTN.js +40 -0
- package/dist/AstroStatus-CY9VkeTN.js.map +1 -0
- package/dist/BarColumn-C9dkpg2O.js +108 -0
- package/dist/BarColumn-C9dkpg2O.js.map +1 -0
- package/dist/BarColumn-CyRSZHMh.cjs +2 -0
- package/dist/BarColumn-CyRSZHMh.cjs.map +1 -0
- package/dist/BlockWidget-CuefOin6.js +112 -0
- package/dist/BlockWidget-CuefOin6.js.map +1 -0
- package/dist/BlockWidget-DPLN1jgj.cjs +3 -0
- package/dist/BlockWidget-DPLN1jgj.cjs.map +1 -0
- package/dist/ButtonWidget-B6HM0Doo.js +166 -0
- package/dist/ButtonWidget-B6HM0Doo.js.map +1 -0
- package/dist/ButtonWidget-DccYzIY3.cjs +3 -0
- package/dist/ButtonWidget-DccYzIY3.cjs.map +1 -0
- package/dist/CanvasWidget-BzTU9rc9.cjs +2 -0
- package/dist/CanvasWidget-BzTU9rc9.cjs.map +1 -0
- package/dist/CanvasWidget-DZQGG-yQ.js +39 -0
- package/dist/CanvasWidget-DZQGG-yQ.js.map +1 -0
- package/dist/CanvasdotWidget-6wuCSnw_.js +19 -0
- package/dist/CanvasdotWidget-6wuCSnw_.js.map +1 -0
- package/dist/CanvasdotWidget-B7VTS1QI.cjs +2 -0
- package/dist/CanvasdotWidget-B7VTS1QI.cjs.map +1 -0
- package/dist/CanvasimageWidget-BwYpfmDE.cjs +2 -0
- package/dist/CanvasimageWidget-BwYpfmDE.cjs.map +1 -0
- package/dist/CanvasimageWidget-mhcPpAuN.js +58 -0
- package/dist/CanvasimageWidget-mhcPpAuN.js.map +1 -0
- package/dist/CanvasimagevalueWidget-Cx-dH8Gc.js +107 -0
- package/dist/CanvasimagevalueWidget-Cx-dH8Gc.js.map +1 -0
- package/dist/CanvasimagevalueWidget-E_NsZ82T.cjs +2 -0
- package/dist/CanvasimagevalueWidget-E_NsZ82T.cjs.map +1 -0
- package/dist/CanvaslabelWidget-BBDuXWfU.cjs +2 -0
- package/dist/CanvaslabelWidget-BBDuXWfU.cjs.map +1 -0
- package/dist/CanvaslabelWidget-CQZCeohU.js +23 -0
- package/dist/CanvaslabelWidget-CQZCeohU.js.map +1 -0
- package/dist/CanvaslabelvalueWidget-CwmYDCjr.js +42 -0
- package/dist/CanvaslabelvalueWidget-CwmYDCjr.js.map +1 -0
- package/dist/CanvaslabelvalueWidget-DAdu7ujn.cjs +2 -0
- package/dist/CanvaslabelvalueWidget-DAdu7ujn.cjs.map +1 -0
- package/dist/CanvaslineWidget-Bv5da1Vy.cjs +2 -0
- package/dist/CanvaslineWidget-Bv5da1Vy.cjs.map +1 -0
- package/dist/CanvaslineWidget-nTP3fJB4.js +28 -0
- package/dist/CanvaslineWidget-nTP3fJB4.js.map +1 -0
- package/dist/CanvaslinevalueWidget-BVfUB96K.cjs +2 -0
- package/dist/CanvaslinevalueWidget-BVfUB96K.cjs.map +1 -0
- package/dist/CanvaslinevalueWidget-C3sJnjLQ.js +44 -0
- package/dist/CanvaslinevalueWidget-C3sJnjLQ.js.map +1 -0
- package/dist/CheckbuttonWidget-5-8YDsQL.js +37 -0
- package/dist/CheckbuttonWidget-5-8YDsQL.js.map +1 -0
- package/dist/CheckbuttonWidget-BGqD-BGc.cjs +2 -0
- package/dist/CheckbuttonWidget-BGqD-BGc.cjs.map +1 -0
- package/dist/ComboboxWidget-DoHMlSAr.cjs +2 -0
- package/dist/ComboboxWidget-DoHMlSAr.cjs.map +1 -0
- package/dist/ComboboxWidget-DzBL8h9f.js +37 -0
- package/dist/ComboboxWidget-DzBL8h9f.js.map +1 -0
- package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-BHFhmbuH.cjs +2 -0
- package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-BHFhmbuH.cjs.map +1 -0
- package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-CHgC5LLL.js +10 -0
- package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-CHgC5LLL.js.map +1 -0
- package/dist/CriticalCmdDialog-DLEasFsx.js +270 -0
- package/dist/CriticalCmdDialog-DLEasFsx.js.map +1 -0
- package/dist/CriticalCmdDialog-DoLBrU2k.cjs +2 -0
- package/dist/CriticalCmdDialog-DoLBrU2k.cjs.map +1 -0
- package/dist/DateWidget-CW7Od7lB.js +40 -0
- package/dist/DateWidget-CW7Od7lB.js.map +1 -0
- package/dist/DateWidget-DKZz1J9J.cjs +2 -0
- package/dist/DateWidget-DKZz1J9J.cjs.map +1 -0
- package/dist/DetailsDialog-BvbziA7Y.js +767 -0
- package/dist/DetailsDialog-BvbziA7Y.js.map +1 -0
- package/dist/DetailsDialog-CiuQYvJK.cjs +2 -0
- package/dist/DetailsDialog-CiuQYvJK.cjs.map +1 -0
- package/dist/DynamicWidget-3wHr6Ng-.cjs +2 -0
- package/dist/DynamicWidget-3wHr6Ng-.cjs.map +1 -0
- package/dist/DynamicWidget-gFSYxzvT.js +35 -0
- package/dist/DynamicWidget-gFSYxzvT.js.map +1 -0
- package/dist/FormatvalueWidget-CGpnTqVH.js +44 -0
- package/dist/FormatvalueWidget-CGpnTqVH.js.map +1 -0
- package/dist/FormatvalueWidget-DFrbeKb9.cjs +2 -0
- package/dist/FormatvalueWidget-DFrbeKb9.cjs.map +1 -0
- package/dist/Graph-3rkhFP3G.js +1983 -0
- package/dist/Graph-3rkhFP3G.js.map +1 -0
- package/dist/Graph-C3vGMcos.cjs +2 -0
- package/dist/Graph-C3vGMcos.cjs.map +1 -0
- package/dist/GraphWidget-22NxFa9k.cjs +2 -0
- package/dist/GraphWidget-22NxFa9k.cjs.map +1 -0
- package/dist/GraphWidget-Dycey-mj.js +130 -0
- package/dist/GraphWidget-Dycey-mj.js.map +1 -0
- package/dist/HorizontalWidget-BBeB0eBI.cjs +2 -0
- package/dist/HorizontalWidget-BBeB0eBI.cjs.map +1 -0
- package/dist/HorizontalWidget-D31NRWy5.js +41 -0
- package/dist/HorizontalWidget-D31NRWy5.js.map +1 -0
- package/dist/HorizontalboxWidget-Br8dSVHD.js +38 -0
- package/dist/HorizontalboxWidget-Br8dSVHD.js.map +1 -0
- package/dist/HorizontalboxWidget-DsdzrCJx.cjs +2 -0
- package/dist/HorizontalboxWidget-DsdzrCJx.cjs.map +1 -0
- package/dist/HorizontallineWidget-BCKOQase.cjs +2 -0
- package/dist/HorizontallineWidget-BCKOQase.cjs.map +1 -0
- package/dist/HorizontallineWidget-CbxREBYI.js +11 -0
- package/dist/HorizontallineWidget-CbxREBYI.js.map +1 -0
- package/dist/IframeWidget-CZwsTgvX.cjs +2 -0
- package/dist/IframeWidget-CZwsTgvX.cjs.map +1 -0
- package/dist/IframeWidget-Ctj8OIcG.js +90 -0
- package/dist/IframeWidget-Ctj8OIcG.js.map +1 -0
- package/dist/ImageLoader-BrNrCBvi.js +36 -0
- package/dist/ImageLoader-BrNrCBvi.js.map +1 -0
- package/dist/ImageLoader-D_Gq-KxR.cjs +2 -0
- package/dist/ImageLoader-D_Gq-KxR.cjs.map +1 -0
- package/dist/ImageviewerWidget-DwRPFSLR.cjs +2 -0
- package/dist/ImageviewerWidget-DwRPFSLR.cjs.map +1 -0
- package/dist/ImageviewerWidget-XrsqxmLo.js +37 -0
- package/dist/ImageviewerWidget-XrsqxmLo.js.map +1 -0
- package/dist/InterfacesTab-CLaicsHA.cjs +2 -0
- package/dist/InterfacesTab-CLaicsHA.cjs.map +1 -0
- package/dist/InterfacesTab-DAeNlGlB.js +93 -0
- package/dist/InterfacesTab-DAeNlGlB.js.map +1 -0
- package/dist/LabelWidget-C-s8OVmA.cjs +2 -0
- package/dist/LabelWidget-C-s8OVmA.cjs.map +1 -0
- package/dist/LabelWidget-t7I87dp7.js +48 -0
- package/dist/LabelWidget-t7I87dp7.js.map +1 -0
- package/dist/LabelledWidget-C7TDf92M.js +42 -0
- package/dist/LabelledWidget-C7TDf92M.js.map +1 -0
- package/dist/LabelledWidget-DUpHxc9z.cjs +2 -0
- package/dist/LabelledWidget-DUpHxc9z.cjs.map +1 -0
- package/dist/LabelprogressbarWidget-D6cpayCR.cjs +2 -0
- package/dist/LabelprogressbarWidget-D6cpayCR.cjs.map +1 -0
- package/dist/LabelprogressbarWidget-wwLURt1u.js +43 -0
- package/dist/LabelprogressbarWidget-wwLURt1u.js.map +1 -0
- package/dist/LabelsparklineWidget-B3awLUyP.js +44 -0
- package/dist/LabelsparklineWidget-B3awLUyP.js.map +1 -0
- package/dist/LabelsparklineWidget-CJRnLETe.cjs +2 -0
- package/dist/LabelsparklineWidget-CJRnLETe.cjs.map +1 -0
- package/dist/LabelvalueWidget-Zx_yHCtl.js +58 -0
- package/dist/LabelvalueWidget-Zx_yHCtl.js.map +1 -0
- package/dist/LabelvalueWidget-owiMSCYl.cjs +2 -0
- package/dist/LabelvalueWidget-owiMSCYl.cjs.map +1 -0
- package/dist/LabelvaluedescWidget-BBSBh4vI.js +59 -0
- package/dist/LabelvaluedescWidget-BBSBh4vI.js.map +1 -0
- package/dist/LabelvaluedescWidget-MRmZBUc0.cjs +2 -0
- package/dist/LabelvaluedescWidget-MRmZBUc0.cjs.map +1 -0
- package/dist/LabelvaluelimitsbarWidget-BQ2XYPNE.cjs +2 -0
- package/dist/LabelvaluelimitsbarWidget-BQ2XYPNE.cjs.map +1 -0
- package/dist/LabelvaluelimitsbarWidget-CZueHYWG.js +57 -0
- package/dist/LabelvaluelimitsbarWidget-CZueHYWG.js.map +1 -0
- package/dist/LabelvaluelimitscolumnWidget-BTvzyQMq.js +47 -0
- package/dist/LabelvaluelimitscolumnWidget-BTvzyQMq.js.map +1 -0
- package/dist/LabelvaluelimitscolumnWidget-DNmVpU8J.cjs +2 -0
- package/dist/LabelvaluelimitscolumnWidget-DNmVpU8J.cjs.map +1 -0
- package/dist/LabelvaluerangebarWidget-BhYTBgDq.js +79 -0
- package/dist/LabelvaluerangebarWidget-BhYTBgDq.js.map +1 -0
- package/dist/LabelvaluerangebarWidget-DL0U8cbw.cjs +2 -0
- package/dist/LabelvaluerangebarWidget-DL0U8cbw.cjs.map +1 -0
- package/dist/Layout-Bh7VzCZd.js +14 -0
- package/dist/Layout-Bh7VzCZd.js.map +1 -0
- package/dist/Layout-DRL0EeSA.cjs +2 -0
- package/dist/Layout-DRL0EeSA.cjs.map +1 -0
- package/dist/LedWidget-B8rjFe1b.cjs +2 -0
- package/dist/LedWidget-B8rjFe1b.cjs.map +1 -0
- package/dist/LedWidget-CxJjJBBS.js +71 -0
- package/dist/LedWidget-CxJjJBBS.js.map +1 -0
- package/dist/LimitsbarWidget-CYIH8fdp.cjs +2 -0
- package/dist/LimitsbarWidget-CYIH8fdp.cjs.map +1 -0
- package/dist/LimitsbarWidget-Djui0IpK.js +69 -0
- package/dist/LimitsbarWidget-Djui0IpK.js.map +1 -0
- package/dist/LimitscolorWidget-CS0wpX9A.cjs +2 -0
- package/dist/LimitscolorWidget-CS0wpX9A.cjs.map +1 -0
- package/dist/LimitscolorWidget-DdmvKzmx.js +63 -0
- package/dist/LimitscolorWidget-DdmvKzmx.js.map +1 -0
- package/dist/LimitscolumnWidget-C_UW6xKq.cjs +2 -0
- package/dist/LimitscolumnWidget-C_UW6xKq.cjs.map +1 -0
- package/dist/LimitscolumnWidget-Cc19IEjq.js +66 -0
- package/dist/LimitscolumnWidget-Cc19IEjq.js.map +1 -0
- package/dist/LinegraphWidget-8td_PqgU.cjs +2 -0
- package/dist/LinegraphWidget-8td_PqgU.cjs.map +1 -0
- package/dist/LinegraphWidget-BtieJxeL.js +39 -0
- package/dist/LinegraphWidget-BtieJxeL.js.map +1 -0
- package/dist/MatrixbycolumnsWidget-CGOeCNW2.cjs +2 -0
- package/dist/MatrixbycolumnsWidget-CGOeCNW2.cjs.map +1 -0
- package/dist/MatrixbycolumnsWidget-DnExVRF8.js +56 -0
- package/dist/MatrixbycolumnsWidget-DnExVRF8.js.map +1 -0
- package/dist/MicroservicesTab-IbTmbPxO.js +268 -0
- package/dist/MicroservicesTab-IbTmbPxO.js.map +1 -0
- package/dist/MicroservicesTab-uMC8NebS.cjs +2 -0
- package/dist/MicroservicesTab-uMC8NebS.cjs.map +1 -0
- package/dist/OutputDialog-B4Q0QMJ1.cjs +2 -0
- package/dist/OutputDialog-B4Q0QMJ1.cjs.map +1 -0
- package/dist/OutputDialog-Ci5OT_fH.js +245 -0
- package/dist/OutputDialog-Ci5OT_fH.js.map +1 -0
- package/dist/PackagesTab-BX8YP3H1.js +332 -0
- package/dist/PackagesTab-BX8YP3H1.js.map +1 -0
- package/dist/PackagesTab-eYbk2vw7.cjs +2 -0
- package/dist/PackagesTab-eYbk2vw7.cjs.map +1 -0
- package/dist/PluginsTab-Ck3DvEGm.cjs +6 -0
- package/dist/PluginsTab-Ck3DvEGm.cjs.map +1 -0
- package/dist/PluginsTab-Ds3jk64b.js +599 -0
- package/dist/PluginsTab-Ds3jk64b.js.map +1 -0
- package/dist/ProgressbarWidget-CUIAYySg.cjs +2 -0
- package/dist/ProgressbarWidget-CUIAYySg.cjs.map +1 -0
- package/dist/ProgressbarWidget-DIfqhHRE.js +46 -0
- package/dist/ProgressbarWidget-DIfqhHRE.js.map +1 -0
- package/dist/RadiobuttonWidget-Cjk1JAP_.cjs +2 -0
- package/dist/RadiobuttonWidget-Cjk1JAP_.cjs.map +1 -0
- package/dist/RadiobuttonWidget-QzIkNP7m.js +34 -0
- package/dist/RadiobuttonWidget-QzIkNP7m.js.map +1 -0
- package/dist/RadiogroupWidget-B4lkYWaC.cjs +2 -0
- package/dist/RadiogroupWidget-B4lkYWaC.cjs.map +1 -0
- package/dist/RadiogroupWidget-Ci9sCX39.js +48 -0
- package/dist/RadiogroupWidget-Ci9sCX39.js.map +1 -0
- package/dist/RangebarWidget-CN0YuHqy.js +67 -0
- package/dist/RangebarWidget-CN0YuHqy.js.map +1 -0
- package/dist/RangebarWidget-nl0rzj93.cjs +2 -0
- package/dist/RangebarWidget-nl0rzj93.cjs.map +1 -0
- package/dist/RedisTab-CVimDkIE.js +135 -0
- package/dist/RedisTab-CVimDkIE.js.map +1 -0
- package/dist/RedisTab-DhS4GHDj.cjs +2 -0
- package/dist/RedisTab-DhS4GHDj.cjs.map +1 -0
- package/dist/RollupWidget-Bgudi_bt.cjs +2 -0
- package/dist/RollupWidget-Bgudi_bt.cjs.map +1 -0
- package/dist/RollupWidget-y4jBtJB2.js +83 -0
- package/dist/RollupWidget-y4jBtJB2.js.map +1 -0
- package/dist/RoutersTab-CzO10cVP.cjs +2 -0
- package/dist/RoutersTab-CzO10cVP.cjs.map +1 -0
- package/dist/RoutersTab-Dki_66av.js +95 -0
- package/dist/RoutersTab-Dki_66av.js.map +1 -0
- package/dist/ScriptChooser-BNm_zXxX.cjs +2 -0
- package/dist/ScriptChooser-BNm_zXxX.cjs.map +1 -0
- package/dist/ScriptChooser-l5i8c8KP.js +199 -0
- package/dist/ScriptChooser-l5i8c8KP.js.map +1 -0
- package/dist/ScrollwindowWidget-BIiV7xwi.cjs +2 -0
- package/dist/ScrollwindowWidget-BIiV7xwi.cjs.map +1 -0
- package/dist/ScrollwindowWidget-CBzYk4Y3.js +45 -0
- package/dist/ScrollwindowWidget-CBzYk4Y3.js.map +1 -0
- package/dist/SecretsTab-BSzFZ81X.cjs +2 -0
- package/dist/SecretsTab-BSzFZ81X.cjs.map +1 -0
- package/dist/SecretsTab-BjviaTxh.js +202 -0
- package/dist/SecretsTab-BjviaTxh.js.map +1 -0
- package/dist/SettingsTab-Bo_dYXgb.js +1382 -0
- package/dist/SettingsTab-Bo_dYXgb.js.map +1 -0
- package/dist/SettingsTab-DH8LAAoG.cjs +3 -0
- package/dist/SettingsTab-DH8LAAoG.cjs.map +1 -0
- package/dist/SignalWidget-CvZkvejy.cjs +2 -0
- package/dist/SignalWidget-CvZkvejy.cjs.map +1 -0
- package/dist/SignalWidget-DQ5Uc2uV.js +66 -0
- package/dist/SignalWidget-DQ5Uc2uV.js.map +1 -0
- package/dist/SimpleTextDialog-CheuP_ls.js +108 -0
- package/dist/SimpleTextDialog-CheuP_ls.js.map +1 -0
- package/dist/SimpleTextDialog-DmeNMMCR.cjs +2 -0
- package/dist/SimpleTextDialog-DmeNMMCR.cjs.map +1 -0
- package/dist/SpacerWidget-6rsc_dSM.js +19 -0
- package/dist/SpacerWidget-6rsc_dSM.js.map +1 -0
- package/dist/SpacerWidget-BBJR6HBQ.cjs +2 -0
- package/dist/SpacerWidget-BBJR6HBQ.cjs.map +1 -0
- package/dist/SparklineWidget-BxBLnjAO.cjs +2 -0
- package/dist/SparklineWidget-BxBLnjAO.cjs.map +1 -0
- package/dist/SparklineWidget-CZtvu2ss.js +48 -0
- package/dist/SparklineWidget-CZtvu2ss.js.map +1 -0
- package/dist/TabbookWidget-DNALU0jl.js +66 -0
- package/dist/TabbookWidget-DNALU0jl.js.map +1 -0
- package/dist/TabbookWidget-DyFQnA10.cjs +2 -0
- package/dist/TabbookWidget-DyFQnA10.cjs.map +1 -0
- package/dist/TargetsTab-Cd8U1aN_.js +129 -0
- package/dist/TargetsTab-Cd8U1aN_.js.map +1 -0
- package/dist/TargetsTab-DMiOliqg.cjs +2 -0
- package/dist/TargetsTab-DMiOliqg.cjs.map +1 -0
- package/dist/TextBoxDialog-DvUf3Cak.cjs +2 -0
- package/dist/TextBoxDialog-DvUf3Cak.cjs.map +1 -0
- package/dist/TextBoxDialog-fHkDTtzI.js +110 -0
- package/dist/TextBoxDialog-fHkDTtzI.js.map +1 -0
- package/dist/TextboxWidget-5hqPj74D.js +93 -0
- package/dist/TextboxWidget-5hqPj74D.js.map +1 -0
- package/dist/TextboxWidget-D6lW_dsU.cjs +2 -0
- package/dist/TextboxWidget-D6lW_dsU.cjs.map +1 -0
- package/dist/TextfieldWidget-Df0ANSiU.js +37 -0
- package/dist/TextfieldWidget-Df0ANSiU.js.map +1 -0
- package/dist/TextfieldWidget-iHN7-fyF.cjs +2 -0
- package/dist/TextfieldWidget-iHN7-fyF.cjs.map +1 -0
- package/dist/TimeWidget-C3NZqTEG.cjs +2 -0
- package/dist/TimeWidget-C3NZqTEG.cjs.map +1 -0
- package/dist/TimeWidget-C6XQMUG2.js +40 -0
- package/dist/TimeWidget-C6XQMUG2.js.map +1 -0
- package/dist/TitleWidget-B9SPUlbW.js +26 -0
- package/dist/TitleWidget-B9SPUlbW.js.map +1 -0
- package/dist/TitleWidget-CWZs33c4.cjs +2 -0
- package/dist/TitleWidget-CWZs33c4.cjs.map +1 -0
- package/dist/ToolsTab-CUpUmkZL.cjs +7 -0
- package/dist/ToolsTab-CUpUmkZL.cjs.map +1 -0
- package/dist/ToolsTab-Cgpb2nAW.js +1521 -0
- package/dist/ToolsTab-Cgpb2nAW.js.map +1 -0
- package/dist/TopBar-DuXL27iD.cjs +2 -0
- package/dist/TopBar-DuXL27iD.cjs.map +1 -0
- package/dist/TopBar-F1jHuFan.js +248 -0
- package/dist/TopBar-F1jHuFan.js.map +1 -0
- package/dist/UpgradeToEnterpriseDialog-DVcAH30Y.js +95 -0
- package/dist/UpgradeToEnterpriseDialog-DVcAH30Y.js.map +1 -0
- package/dist/UpgradeToEnterpriseDialog-DfIKahNK.cjs +2 -0
- package/dist/UpgradeToEnterpriseDialog-DfIKahNK.cjs.map +1 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-DJX55UPj.cjs +1417 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-DJX55UPj.cjs.map +1 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-iq-jp8dD.js +26941 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-iq-jp8dD.js.map +1 -0
- package/dist/VWidget-C2x_zSC2.cjs +2 -0
- package/dist/VWidget-C2x_zSC2.cjs.map +1 -0
- package/dist/VWidget-C4spAawK.js +323 -0
- package/dist/VWidget-C4spAawK.js.map +1 -0
- package/dist/ValueWidget-D4RrYVEK.js +116 -0
- package/dist/ValueWidget-D4RrYVEK.js.map +1 -0
- package/dist/ValueWidget-Do3Yn47P.cjs +2 -0
- package/dist/ValueWidget-Do3Yn47P.cjs.map +1 -0
- package/dist/ValuelimitsbarWidget-Bc9_Vj_f.js +41 -0
- package/dist/ValuelimitsbarWidget-Bc9_Vj_f.js.map +1 -0
- package/dist/ValuelimitsbarWidget-DJuh7FOs.cjs +2 -0
- package/dist/ValuelimitsbarWidget-DJuh7FOs.cjs.map +1 -0
- package/dist/ValuelimitscolumnWidget-BFpG-H7v.cjs +2 -0
- package/dist/ValuelimitscolumnWidget-BFpG-H7v.cjs.map +1 -0
- package/dist/ValuelimitscolumnWidget-DHKIL7sf.js +40 -0
- package/dist/ValuelimitscolumnWidget-DHKIL7sf.js.map +1 -0
- package/dist/ValuerangebarWidget-BlZSaiXo.cjs +2 -0
- package/dist/ValuerangebarWidget-BlZSaiXo.cjs.map +1 -0
- package/dist/ValuerangebarWidget-CecQRIok.js +65 -0
- package/dist/ValuerangebarWidget-CecQRIok.js.map +1 -0
- package/dist/VerticalWidget--8UErB4q.cjs +2 -0
- package/dist/VerticalWidget--8UErB4q.cjs.map +1 -0
- package/dist/VerticalWidget-D8jUFxjS.js +40 -0
- package/dist/VerticalWidget-D8jUFxjS.js.map +1 -0
- package/dist/VerticalboxWidget-B4eGUSYH.js +37 -0
- package/dist/VerticalboxWidget-B4eGUSYH.js.map +1 -0
- package/dist/VerticalboxWidget-cxHq1WKQ.cjs +2 -0
- package/dist/VerticalboxWidget-cxHq1WKQ.cjs.map +1 -0
- package/dist/Widget-DNf52jRQ.cjs +2 -0
- package/dist/Widget-DNf52jRQ.cjs.map +1 -0
- package/dist/Widget-fRCERxGf.js +197 -0
- package/dist/Widget-fRCERxGf.js.map +1 -0
- package/dist/addMonths-BtG7uZLJ.js +19 -0
- package/dist/addMonths-BtG7uZLJ.js.map +1 -0
- package/dist/addMonths-n1tnl3ab.cjs +2 -0
- package/dist/addMonths-n1tnl3ab.cjs.map +1 -0
- package/dist/components.cjs +7 -0
- package/dist/components.cjs.map +1 -0
- package/dist/components.js +2973 -0
- package/dist/components.js.map +1 -0
- package/dist/fileIcon-BduOQcTc.cjs +2 -0
- package/dist/fileIcon-BduOQcTc.cjs.map +1 -0
- package/dist/fileIcon-DqRHb1_Z.js +22 -0
- package/dist/fileIcon-DqRHb1_Z.js.map +1 -0
- package/dist/format-B22VpiOS.cjs +2 -0
- package/dist/format-B22VpiOS.cjs.map +1 -0
- package/dist/format-CVeawcIv.js +1295 -0
- package/dist/format-CVeawcIv.js.map +1 -0
- package/dist/getDefaultOptions-Batab9o8.cjs +2 -0
- package/dist/getDefaultOptions-Batab9o8.cjs.map +1 -0
- package/dist/getDefaultOptions-BhSDk-Jo.js +8 -0
- package/dist/getDefaultOptions-BhSDk-Jo.js.map +1 -0
- package/dist/icons/status-dark.png +0 -0
- package/dist/icons/status-dark.xcf +0 -0
- package/dist/icons/status-light.png +0 -0
- package/dist/icons.cjs +2 -0
- package/dist/icons.cjs.map +1 -0
- package/dist/icons.js +157 -0
- package/dist/icons.js.map +1 -0
- package/dist/index-Bz_jHTkl.cjs +7 -0
- package/dist/index-Bz_jHTkl.cjs.map +1 -0
- package/dist/index-CFQnWdPA.js +1705 -0
- package/dist/index-CFQnWdPA.js.map +1 -0
- package/dist/parse-DnkEsW-3.js +1603 -0
- package/dist/parse-DnkEsW-3.js.map +1 -0
- package/dist/parse-DwfgQboe.cjs +2 -0
- package/dist/parse-DwfgQboe.cjs.map +1 -0
- package/dist/plugins.cjs +9 -0
- package/dist/plugins.cjs.map +1 -0
- package/dist/plugins.js +772 -0
- package/dist/plugins.js.map +1 -0
- package/dist/timeFilters-8SaYvcH0.cjs +2 -0
- package/dist/timeFilters-8SaYvcH0.cjs.map +1 -0
- package/dist/timeFilters-CRYpYDdf.js +622 -0
- package/dist/timeFilters-CRYpYDdf.js.map +1 -0
- package/dist/tools/admin.cjs +13 -0
- package/dist/tools/admin.cjs.map +1 -0
- package/dist/tools/admin.js +1944 -0
- package/dist/tools/admin.js.map +1 -0
- package/dist/tools/base.cjs +2 -0
- package/dist/tools/base.cjs.map +1 -0
- package/dist/tools/base.js +1683 -0
- package/dist/tools/base.js.map +1 -0
- package/dist/tools/calendar.cjs +2 -0
- package/dist/tools/calendar.cjs.map +1 -0
- package/dist/tools/calendar.js +1586 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/util.cjs +2 -0
- package/dist/util.cjs.map +1 -0
- package/dist/util.js +9 -0
- package/dist/util.js.map +1 -0
- package/dist/vue-common.css +1 -0
- package/dist/widgets.cjs +2 -0
- package/dist/widgets.cjs.map +1 -0
- package/dist/widgets.js +132 -0
- package/dist/widgets.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Graph-C3vGMcos.cjs","sources":["../src/components/GraphEditDialog.vue","../src/components/GraphEditItemDialog.vue","../src/components/Graph.vue"],"sourcesContent":["<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" @keydown.esc=\"$emit('cancel')\" max-width=\"700\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Edit Graph </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-tabs v-model=\"tab\" class=\"ml-3\">\n <v-tab value=\"0\"> Settings </v-tab>\n <v-tab value=\"1\"> Scale / Lines </v-tab>\n <v-tab value=\"2\"> Items </v-tab>\n </v-tabs>\n <v-tabs-window v-model=\"tab\">\n <v-tabs-window-item value=\"0\" eager>\n <div class=\"edit-box\">\n <v-row>\n <v-col>\n <v-card-text class=\"pa-0\">\n <v-text-field\n class=\"pb-2\"\n label=\"Title\"\n v-model=\"graph.title\"\n hide-details\n />\n </v-card-text>\n </v-col>\n <v-col>\n <v-select\n label=\"Legend Position\"\n hide-details\n :items=\"legendPositions\"\n v-model=\"graph.legendPosition\"\n style=\"max-width: 280px\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Select a start date/time for the graph. Leave blank for start now.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n label=\"Start Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n v-model=\"startDate\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n label=\"Start Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n v-model=\"startTime\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n <v-card-text class=\"pa-0\">\n Select a end date/time for the graph. Leave blank for continuous\n real-time graphing.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n label=\"End Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n v-model=\"endDate\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n label=\"End Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n v-model=\"endTime\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"1\" eager>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Set a min or max Y value to override automatic scaling\n </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n hide-details\n label=\"Min Y Axis (Optional)\"\n v-model=\"graph.graphMinY\"\n type=\"number\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n hide-details\n label=\"Max Y Axis (Optional)\"\n v-model=\"graph.graphMaxY\"\n type=\"number\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-list density=\"compact\" class=\"horizontal-lines\">\n <v-list-item>\n <span style=\"padding-top: 5px\">\n Add horizontal lines to the graph\n </span>\n <v-spacer />\n <v-btn @click=\"addLine()\"> New Line </v-btn>\n </v-list-item>\n <v-list-item\n v-for=\"(item, i) in graph.lines\"\n :key=\"i\"\n :value=\"item\"\n color=\"primary\"\n >\n <v-row>\n <v-col>\n <v-text-field label=\"Y Value\" v-model=\"item.yValue\" />\n </v-col>\n <v-col>\n <v-select\n label=\"Color\"\n hide-details\n :items=\"colors\"\n v-model=\"item.color\"\n />\n </v-col>\n <v-col>\n <v-tooltip text=\"Remove\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n style=\"padding: 30px\"\n @click=\"removeLine(item)\"\n >mdi-delete</v-icon\n >\n </template>\n </v-tooltip>\n </v-col>\n </v-row>\n </v-list-item>\n </v-list>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"2\" eager>\n <v-data-table\n item-key=\"itemId\"\n class=\"elevation-1 my-2\"\n data-test=\"edit-graph-items\"\n :headers=\"itemHeaders\"\n :items=\"editItems\"\n :items-per-page=\"5\"\n :footer-props=\"{\n 'items-per-page-options': [5],\n }\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-tooltip text=\"Remove\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon v-bind=\"props\" @click=\"$emit('remove', item)\">\n mdi-delete\n </v-icon>\n </template>\n </v-tooltip>\n </template>\n <template v-slot:no-data>\n <span> Currently no items on this graph </span>\n </template>\n </v-data-table>\n </v-tabs-window-item>\n </v-tabs-window>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"closeOk\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { TimeFilters } from '@/util'\nimport { isValid, parse, toDate } from 'date-fns'\nexport default {\n props: {\n modelValue: Boolean, // modelValue is the default prop when using v-model\n title: {\n type: String,\n required: true,\n },\n legendPosition: {\n type: String,\n required: true,\n },\n items: {\n type: Array,\n required: true,\n },\n graphMinY: {\n type: Number,\n },\n graphMaxY: {\n type: Number,\n },\n lines: {\n type: Array,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n startDateTime: {\n type: Number,\n },\n endDateTime: {\n type: Number,\n },\n timeZone: {\n type: String,\n required: true,\n },\n },\n mixins: [TimeFilters],\n data: function () {\n return {\n tab: 0,\n graph: {},\n legendPositions: ['top', 'bottom', 'left', 'right'],\n startDate: null,\n startTime: null,\n endDate: null,\n endTime: null,\n lineHeaders: [\n { title: 'Y Value', value: 'yValue' },\n { title: 'Color', value: 'color' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n itemHeaders: [\n { title: 'Target Name', value: 'targetName' },\n { title: 'Packet Name', value: 'packetName' },\n { title: 'Item Name', value: 'itemName' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n rules: {\n date: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'yyyy-MM-dd', new Date())) ||\n 'Invalid date (YYYY-MM-DD)'\n )\n } catch (e) {\n return 'Invalid date (YYYY-MM-DD)'\n }\n },\n time: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'HH:mm:ss', new Date())) ||\n 'Invalid time (HH:MM:SS)'\n )\n } catch (e) {\n return 'Invalid time (HH:MM:SS)'\n }\n },\n },\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n editItems: function () {\n if (!this.items) return []\n let itemId = 0\n return this.items.map((item) => {\n itemId += 1\n return { ...item, itemId }\n })\n },\n },\n created() {\n this.graph = {\n title: this.title,\n legendPosition: this.legendPosition,\n items: this.items,\n graphMinY: this.graphMinY,\n graphMaxY: this.graphMaxY,\n lines: [...this.lines],\n }\n // Set the date and time if they pass a dateTime or set a default\n // Start needs a default because if the timeZone is UTC the time will still be local time\n if (this.startDateTime) {\n // Use the passed dateTime as is\n let date = toDate(this.startDateTime / 1000000)\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n } else {\n // Create a new date 1 hr in the past as a default\n let date = new Date() - 3600000\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n }\n // Only set end date / time if it is explicitly passed\n if (this.endDateTime) {\n let date = toDate(this.endDateTime / 1000000)\n this.endDate = this.formatDate(date, this.timeZone)\n this.endTime = this.formatTimeHMS(date, this.timeZone)\n }\n },\n methods: {\n closeOk() {\n if (!!this.startDate && !!this.startTime) {\n this.graph.startDateTime = this.startDate + ' ' + this.startTime\n } else {\n this.graph.startDateTime = null\n }\n if (!!this.endDate && !!this.endTime) {\n this.graph.endDateTime = this.endDate + ' ' + this.endTime\n } else {\n this.graph.endDateTime = null\n }\n this.$emit('ok', this.graph)\n },\n addLine() {\n this.graph.lines.push({ yValue: 0, color: 'white' })\n },\n removeLine(dline) {\n let i = this.graph.lines.indexOf(dline)\n this.graph.lines.splice(i, 1)\n },\n },\n}\n</script>\n\n<style>\n.edit-box {\n color: hsla(0, 0%, 100%, 0.7);\n background-color: var(--color-background-surface-default);\n padding: 10px;\n margin-top: 10px;\n}\n/* For the Y Axis item editor within the Edit Dialog */\n.v-small-dialog__content {\n background-color: var(--color-background-surface-selected);\n padding: 5px 5px;\n}\n.horizontal-lines {\n background-color: var(--color-background-surface-default);\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2023, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" width=\"400\" @keydown.enter=\"success()\">\n <v-card>\n <v-card-title class=\"mb-2\">Edit Item</v-card-title>\n <v-card-text>\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n v-model=\"editItem.valueType\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Reduction\"\n :items=\"reduction\"\n v-model=\"editItem.reduced\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Reduced Type\"\n :items=\"reducedTypes\"\n :disabled=\"editItem.reduced === 'DECOM'\"\n v-model=\"editItem.reducedType\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Color\"\n :items=\"colors\"\n v-model=\"editItem.color\"\n @update:model-value=\"$emit('changeColor', $event)\"\n class=\"mb-2\"\n />\n <div v-if=\"limitsNames.length > 1\">\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Display Limits\"\n :items=\"limitsNames\"\n v-model=\"limitsName\"\n @update:model-value=\"$emit('changeLimits', limits[limitsName])\"\n />\n <div class=\"pa-3\">{{ limitsName }}: {{ limits[limitsName] }}</div>\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"$emit('close', editItem)\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\nexport default {\n props: {\n modelValue: Boolean,\n item: {\n type: Object,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n },\n data: function () {\n return {\n editItem: null,\n limitsName: 'NONE',\n // NONE: [] matches the default limits assigned in Graph addItems\n limits: { NONE: [] },\n valueTypes: ['CONVERTED', 'RAW'],\n reduction: [\n // Map NONE to DECOM for clarity\n { title: 'NONE', value: 'DECOM' },\n { title: 'REDUCED_MINUTE', value: 'REDUCED_MINUTE' },\n { title: 'REDUCED_HOUR', value: 'REDUCED_HOUR' },\n { title: 'REDUCED_DAY', value: 'REDUCED_DAY' },\n ],\n reducedTypes: ['MIN', 'MAX', 'AVG', 'STDDEV'],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n limitsNames() {\n return Object.keys(this.limits)\n },\n },\n async created() {\n this.editItem = { ...this.item }\n new OpenC3Api()\n .get_item(this.item.targetName, this.item.packetName, this.item.itemName)\n .then((details) => {\n for (const [key, value] of Object.entries(details.limits)) {\n if (Object.keys(value).includes('red_low')) {\n this.limits[key] = Object.values(value)\n }\n }\n // Locate the key for the value array that we pass in\n this.limitsName = Object.keys(this.limits).find(\n // Little hack to compare arrays you convert them to strings\n (key) => this.limits[key] + '' === this.editItem.limits + '',\n )\n })\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 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 @click.prevent=\"$emit('click')\">\n <v-card>\n <v-toolbar\n height=\"24\"\n class=\"pl-2 pr-2\"\n :class=\"selectedGraphId === id ? 'active' : ''\"\n v-show=\"!hideToolbarData\"\n >\n <div v-show=\"errors.length !== 0\" class=\"mx-2\">\n <v-tooltip text=\"Errors\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon v-bind=\"props\" @click=\"errorDialog = true\">\n mdi-alert\n </v-icon>\n </template>\n </v-tooltip>\n </div>\n\n <v-tooltip text=\"Edit\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n @click=\"editGraph = true\"\n data-test=\"edit-graph-icon\"\n >\n mdi-pencil\n </v-icon>\n </template>\n </v-tooltip>\n\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n\n <div v-show=\"expand\">\n <v-tooltip v-if=\"calcFullSize\" text=\"Collapse\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n @click=\"collapseAll\"\n data-test=\"collapse-all\"\n >\n mdi-arrow-collapse\n </v-icon>\n </template>\n </v-tooltip>\n <v-tooltip v-else text=\"Expand\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon v-bind=\"props\" @click=\"expandAll\" data-test=\"expand-all\">\n mdi-arrow-expand\n </v-icon>\n </template>\n </v-tooltip>\n </div>\n\n <div v-show=\"expand\">\n <v-tooltip v-if=\"fullWidth\" text=\"Collapse Width\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n @click=\"collapseWidth\"\n data-test=\"collapse-width\"\n >\n mdi-arrow-collapse-horizontal\n </v-icon>\n </template>\n </v-tooltip>\n <v-tooltip v-else text=\"Expand Width\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n @click=\"expandWidth\"\n data-test=\"expand-width\"\n >\n mdi-arrow-expand-horizontal\n </v-icon>\n </template>\n </v-tooltip>\n </div>\n\n <div v-show=\"expand\">\n <v-tooltip v-if=\"fullHeight\" text=\"Collapse Height\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n @click=\"collapseHeight\"\n data-test=\"collapse-height\"\n >\n mdi-arrow-collapse-vertical\n </v-icon>\n </template>\n </v-tooltip>\n <v-tooltip v-else text=\"Expand Height\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n @click=\"expandHeight\"\n data-test=\"expand-height\"\n >\n mdi-arrow-expand-vertical\n </v-icon>\n </template>\n </v-tooltip>\n </div>\n\n <v-tooltip v-if=\"expand\" text=\"Minimize\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n @click=\"minMaxTransition\"\n data-test=\"minimize-screen-icon\"\n >\n mdi-window-minimize\n </v-icon>\n </template>\n </v-tooltip>\n <v-tooltip v-else text=\"Maximize\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n @click=\"minMaxTransition\"\n data-test=\"maximize-screen-icon\"\n >\n mdi-window-maximize\n </v-icon>\n </template>\n </v-tooltip>\n\n <v-tooltip text=\"Close\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n @click=\"$emit('close-graph')\"\n data-test=\"close-graph-icon\"\n >\n mdi-close-box\n </v-icon>\n </template>\n </v-tooltip>\n </v-toolbar>\n\n <v-expand-transition>\n <div class=\"pa-1\" id=\"chart\" ref=\"chart\" v-show=\"expand\">\n <div :id=\"`chart${id}`\"></div>\n <div id=\"betweenCharts\"></div>\n <div :id=\"`overview${id}`\" v-show=\"showOverview\"></div>\n </div>\n </v-expand-transition>\n </v-card>\n\n <!-- Edit graph dialog -->\n <graph-edit-dialog\n v-if=\"editGraph\"\n v-model=\"editGraph\"\n :title=\"title\"\n :legend-position=\"legendPosition\"\n :items=\"items\"\n :graph-min-y=\"graphMinY\"\n :graph-max-y=\"graphMaxY\"\n :lines=\"lines\"\n :colors=\"colors\"\n :start-date-time=\"graphStartDateTime\"\n :end-date-time=\"graphEndDateTime\"\n :time-zone=\"timeZone\"\n @remove=\"removeItems([$event])\"\n @ok=\"editGraphClose\"\n @cancel=\"editGraph = false\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" max-width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n readonly\n hide-details\n v-model=\"title\"\n class=\"pb-2\"\n label=\"Graph Title\"\n />\n </v-row>\n <v-row class=\"my-3\">\n <v-textarea readonly rows=\"8\" :value=\"error\" />\n </v-row>\n <v-row>\n <v-btn block @click=\"clearErrors\"> Clear </v-btn>\n </v-row>\n </v-card>\n </v-dialog>\n\n <!-- Edit right click context menu -->\n <v-menu\n v-if=\"editGraphMenu\"\n v-model=\"editGraphMenu\"\n :target=\"[editGraphMenuX, editGraphMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"editGraph = true\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ title }}\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <graph-edit-item-dialog\n v-if=\"editItem\"\n v-model=\"editItem\"\n :colors=\"colors\"\n :item=\"selectedItem\"\n @changeColor=\"changeColor\"\n @changeLimits=\"changeLimits\"\n @cancel=\"editItem = false\"\n @close=\"closeEditItem\"\n />\n\n <!-- Edit Item right click context menu -->\n <v-menu\n v-if=\"itemMenu\"\n v-model=\"itemMenu\"\n :target=\"[itemMenuX, itemMenuY]\"\n absolute\n offset-y\n >\n <v-list nav density=\"compact\">\n <v-list-subheader>\n {{ selectedItem.targetName }}\n {{ selectedItem.packetName }}\n {{ selectedItem.itemName }}\n </v-list-subheader>\n <v-list-item @click=\"editItem = true\">\n <template v-slot:prepend>\n <v-icon icon=\"mdi-pencil\" />\n </template>\n <v-list-item-title> Edit </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"clearData([selectedItem])\">\n <template v-slot:prepend>\n <v-icon icon=\"mdi-eraser\" />\n </template>\n <v-list-item-title> Clear </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"removeItems([selectedItem])\">\n <template v-slot:prepend>\n <v-icon icon=\"mdi-delete\" />\n </template>\n <v-list-item-title> Delete </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <!-- Edit Legend right click context menu -->\n <v-menu\n v-if=\"legendMenu\"\n v-model=\"legendMenu\"\n :target=\"[legendMenuX, legendMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"moveLegend('top')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Top\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('bottom')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Bottom\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('left')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Left\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('right')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend RIght\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <div v-if=\"!sparkline\" class=\"u-series\" ref=\"info\">\n <v-tooltip\n text=\"Click item to toggle, Right click to edit\"\n location=\"top\"\n >\n <template v-slot:activator=\"{ props }\">\n <v-icon v-bind=\"props\"> mdi-information-variant-circle </v-icon>\n </template>\n </v-tooltip>\n </div>\n </div>\n</template>\n\n<script>\nimport GraphEditDialog from './GraphEditDialog.vue'\nimport GraphEditItemDialog from './GraphEditItemDialog.vue'\nimport uPlot from 'uplot'\nimport bs from 'binary-search'\nimport { Cable } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\n\nimport 'uplot/dist/uPlot.min.css'\n\nexport default {\n components: {\n GraphEditDialog,\n GraphEditItemDialog,\n },\n props: {\n id: {\n type: Number,\n required: true,\n },\n selectedGraphId: {\n type: Number,\n // Not required because we pass null\n },\n state: {\n type: String,\n required: true,\n },\n // start time in nanoseconds to start the graph\n // this allows multiple graphs to be synchronized\n startTime: {\n type: Number,\n },\n secondsGraphed: {\n type: Number,\n required: true,\n },\n pointsSaved: {\n type: Number,\n required: true,\n },\n pointsGraphed: {\n type: Number,\n required: true,\n },\n refreshIntervalMs: {\n type: Number,\n default: 200,\n },\n hideToolbar: {\n type: Boolean,\n default: false,\n },\n hideOverview: {\n type: Boolean,\n default: false,\n },\n sparkline: {\n type: Boolean,\n default: false,\n },\n initialItems: {\n type: Array,\n },\n // These allow the parent to force a specific height and/or width\n height: {\n type: Number,\n },\n width: {\n type: Number,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n mixins: [TimeFilters],\n data() {\n return {\n lines: [],\n active: true,\n expand: true,\n fullWidth: true,\n fullHeight: true,\n graph: null,\n editGraph: false,\n editGraphMenu: false,\n editGraphMenuX: 0,\n editGraphMenuY: 0,\n editItem: false,\n itemMenu: false,\n itemMenuX: 0,\n itemMenuY: 0,\n legendMenu: false,\n legendMenuX: 0,\n legendMenuY: 0,\n legendPosition: 'bottom',\n selectedItem: null,\n hideToolbarData: this.hideToolbar,\n showOverview: !this.hideOverview,\n hideOverviewData: this.hideOverview,\n title: '',\n overview: null,\n data: [[]],\n dataChanged: false,\n timeout: null,\n graphMinY: null,\n graphMaxY: null,\n graphStartDateTime: null,\n graphEndDateTime: null,\n indexes: {},\n items: this.initialItems || [],\n limitsValues: [],\n drawInterval: null,\n zoomChart: false,\n zoomOverview: false,\n cable: new Cable(),\n subscription: null,\n needToUpdate: false,\n errorDialog: false,\n errors: [],\n colorIndex: 0,\n colors: [\n // The first 3 are taken from the Astro css definitions for\n // --color-data-visualization-1 through 3\n '#00c7cb',\n '#938bdb',\n '#4dacff',\n 'lime',\n 'darkorange',\n 'red',\n 'gold',\n 'hotpink',\n 'tan',\n 'cyan',\n 'maroon',\n 'blue',\n 'teal',\n 'purple',\n 'green',\n 'brown',\n 'lightblue',\n 'white',\n 'black',\n ],\n }\n },\n computed: {\n calcFullSize: function () {\n return this.fullWidth || this.fullHeight\n },\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n return JSON.stringify(this.errors, null, 4)\n }\n return null\n },\n },\n created() {\n this.title = `Graph ${this.id}`\n for (const [index, item] of this.items.entries()) {\n this.data.push([]) // initialize the empty data arrays\n this.indexes[this.subscriptionKey(item)] = index + 1\n if (item.color === undefined) {\n item.color = this.colors[this.colorIndex]\n }\n this.colorIndex++\n if (this.colorIndex === this.colors.length) {\n this.colorIndex = 0\n }\n }\n },\n mounted() {\n // This code allows for temporary pulling in a patched uPlot\n // Also note you need to add 'async' before the mounted method for await\n // const plugin = document.createElement('script')\n // plugin.setAttribute(\n // 'src',\n // 'https://leeoniya.github.io/uPlot/dist/uPlot.iife.min.js'\n // )\n // plugin.async = true\n // document.head.appendChild(plugin)\n // await new Promise(r => setTimeout(r, 500)) // Allow the js to load\n\n // TODO: This is demo / performance code of multiple items with many data points\n // 10 items at 500,000 each renders immediately and uses 180MB in Chrome\n // Refresh still works, chrome is sluggish but once you pause it is very performant\n // 500,000 pts at 1Hz is 138.9hrs .. almost 6 days\n //\n // 10 items at 100,000 each is very performant ... 1,000,000 pts is Qt TlmGrapher default\n // 100,000 pts at 1Hz is 27.8hrs\n //\n // 100,000 takes 40ms, Chrome uses 160MB\n // this.data = []\n // const dataPoints = 100000\n // const items = 10\n // let pts = new Array(dataPoints)\n // let times = new Array(dataPoints)\n // let time = 1589398007\n // let series = [{}]\n // for (let i = 0; i < dataPoints; i++) {\n // times[i] = time\n // pts[i] = i\n // time += 1\n // }\n // this.data.push(times)\n // for (let i = 0; i < items; i++) {\n // this.data.push(pts.map(x => x + i))\n // series.push({\n // label: 'Item' + i,\n // stroke: this.colors[i]\n // })\n // }\n\n // NOTE: These are just initial settings ... actual series are added by this.graph.addSeries\n const { chartSeries, overviewSeries } = this.items.reduce(\n (seriesObj, item) => {\n const commonProps = {\n spanGaps: true,\n }\n seriesObj.chartSeries.push({\n ...commonProps,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => {\n return this.items[seriesIdx - 1].color\n },\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else {\n return rawValue == null ? '--' : rawValue.toFixed(3)\n }\n },\n })\n seriesObj.overviewSeries.push({\n ...commonProps,\n })\n return seriesObj\n },\n { chartSeries: [], overviewSeries: [] },\n )\n\n let chartOpts = {}\n if (this.sparkline) {\n this.hideToolbarData = true\n this.hideOverviewData = true\n this.showOverview = false\n chartOpts = {\n width: this.width,\n height: this.height,\n pxAlign: false,\n cursor: {\n show: false,\n },\n select: {\n show: false,\n },\n legend: {\n show: false,\n },\n scales: {\n x: {\n time: false,\n },\n },\n axes: [\n {\n show: false,\n },\n {\n show: false,\n },\n ],\n series: [\n {},\n {\n stroke: 'white', // TODO: Light / dark theme\n },\n ],\n }\n this.graph = new uPlot(\n chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n } else {\n // Uplot wants the real timezone name ('local' doesn't work)\n let timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone\n if (this.timeZone && this.timeZone !== 'local') {\n timeZoneName = this.timeZone\n }\n chartOpts = {\n ...this.getSize('chart'),\n ...this.getScales(),\n ...this.getAxes('chart'),\n // series: series, // TODO: Uncomment with the performance code\n plugins: [this.linesPlugin()],\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [\n {\n label: 'Time',\n value: (u, v) =>\n // Convert the unix timestamp into a formatted date / time\n v == null ? '--' : this.formatSeconds(v, this.timeZone),\n },\n ...chartSeries,\n ],\n cursor: {\n drag: {\n x: true,\n y: false,\n },\n // Sync the cursor across graphs so mouseovers are synced\n sync: {\n key: 'openc3',\n // setSeries links graphs so clicking an item to hide it also hides the other graph item\n // setSeries: true,\n },\n bind: {\n mouseup: (self, targ, handler) => {\n return (e) => {\n // Single click while paused will resume the graph\n // This makes it possible to resume in TlmViewer widgets\n if (this.state === 'pause' && self.select.width === 0) {\n this.$emit('start')\n }\n handler(e)\n }\n },\n },\n },\n hooks: {\n setScale: [\n (chart, key) => {\n if (key === 'x' && !this.zoomOverview && this.overview) {\n this.zoomChart = true\n let left = Math.round(\n this.overview.valToPos(chart.scales.x.min, 'x'),\n )\n let right = Math.round(\n this.overview.valToPos(chart.scales.x.max, 'x'),\n )\n this.overview.setSelect({ left, width: right - left })\n this.zoomChart = false\n }\n },\n ],\n setSelect: [\n (chart) => {\n // Pause the graph while selecting a range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n },\n ],\n ready: [\n (u) => {\n let canvas = u.root.querySelector('.u-over')\n canvas.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.itemMenu = false\n this.legendMenu = false\n this.editGraphMenuX = e.clientX\n this.editGraphMenuY = e.clientY\n this.editGraphMenu = true\n })\n let legend = u.root.querySelector('.u-legend')\n legend.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.editGraphMenu = false\n this.legendMenu = false\n this.itemMenuX = e.clientX\n this.itemMenuY = e.clientY\n // Grab the closest series and then figure out which index it is\n let seriesEl = e.target.closest('.u-series')\n let seriesIdx = Array.prototype.slice\n .call(legend.childNodes[0].childNodes)\n .indexOf(seriesEl)\n let series = u.series[seriesIdx]\n if (series.item) {\n this.selectedItem = series.item\n this.itemMenu = true\n } else {\n this.itemMenu = false\n this.legendMenuX = e.clientX\n this.legendMenuY = e.clientY\n this.legendMenu = true\n }\n })\n // Append the info to the legend\n legend.querySelector('tbody').appendChild(this.$refs.info)\n },\n ],\n },\n }\n this.graph = new uPlot(\n chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n\n const overviewOpts = {\n ...this.getSize('overview'),\n ...this.getScales(),\n ...this.getAxes('overview'),\n // series: series, // TODO: Uncomment with the performance code\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [...overviewSeries],\n cursor: {\n y: false,\n drag: {\n setScale: false,\n x: true,\n y: false,\n },\n },\n legend: {\n show: false,\n },\n hooks: {\n setSelect: [\n (chart) => {\n if (!this.zoomChart) {\n // Pause the graph while selecting an overview range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n this.zoomOverview = true\n let min = chart.posToVal(chart.select.left, 'x')\n let max = chart.posToVal(\n chart.select.left + chart.select.width,\n 'x',\n )\n this.graph.setScale('x', { min, max })\n this.zoomOverview = false\n }\n },\n ],\n },\n }\n this.overview = new uPlot(\n overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`),\n )\n this.moveLegend(this.legendPosition)\n\n // Allow the charts to dynamically resize when the window resizes\n window.addEventListener('resize', this.resize)\n }\n\n if (this.state !== 'stop') {\n this.startGraph()\n }\n },\n beforeUnmount: function () {\n this.stopGraph()\n this.cable.disconnect()\n window.removeEventListener('resize', this.resize)\n },\n watch: {\n state: function (newState, oldState) {\n switch (newState) {\n case 'start':\n // Only subscribe if we were previously stopped\n // If we were paused we do nothing ... see the data function\n if (oldState === 'stop') {\n this.startGraph()\n }\n break\n // case 'pause': Nothing to do ... see the data function\n case 'stop':\n this.stopGraph()\n break\n }\n },\n data: function (newData, oldData) {\n this.dataChanged = true\n },\n graphMinY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMinY = val\n }\n this.setGraphRange()\n },\n graphMaxY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMaxY = val\n }\n this.setGraphRange()\n },\n graphStartDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphStartDateTime =\n this.parseDateTime(this.graphStartDateTime, this.timeZone) * 1000000\n if (this.graphStartDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the start date time we need to update\n this.graphStartDateTime = null\n this.needToUpdate = true\n }\n },\n graphEndDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphEndDateTime =\n this.parseDateTime(this.graphEndDateTime, this.timeZone) * 1000000\n if (this.graphEndDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the end date time we need to update\n this.graphEndDateTime = null\n this.needToUpdate = true\n }\n },\n },\n methods: {\n startGraph: function () {\n this.subscribe()\n this.timeout = setTimeout(() => {\n this.updateTimeout()\n }, this.refreshIntervalMs)\n },\n stopGraph: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n this.subscription = null\n }\n if (this.timeout) {\n clearTimeout(this.timeout)\n this.timeout = null\n }\n },\n updateTimeout: function () {\n this.updateGraphData()\n this.timeout = setTimeout(() => {\n this.updateTimeout()\n }, this.refreshIntervalMs)\n },\n updateGraphData: function () {\n // Ignore changes to the data while we're paused\n if (this.state === 'pause' || !this.dataChanged) {\n return\n }\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n let max = this.data[0][this.data[0].length - 1]\n let ptsMin = this.data[0][this.data[0].length - this.pointsGraphed]\n let min = this.data[0][0]\n if (min < max - this.secondsGraphed) {\n min = max - this.secondsGraphed\n }\n if (ptsMin > min) {\n min = ptsMin\n }\n this.graph.setScale('x', { min, max })\n this.dataChanged = false\n },\n formatLabel(item) {\n if (item.valueType === 'CONVERTED' && item.reduced === 'DECOM') {\n return item.itemName\n } else {\n let description = ''\n // Only display valueType if we're not CONVERTED\n if (item.valueType !== 'CONVERTED') {\n description += item.valueType\n }\n // Only display reduced if we're not DECOM\n if (item.reduced !== 'DECOM') {\n // If we already have the valueType add a space\n if (description !== '') {\n description += ' '\n }\n description += `${item.reduced.split('_')[1]} ${item.reducedType}`\n }\n return `${item.itemName} (${description})`\n }\n },\n moveLegend: function (desired) {\n switch (desired) {\n case 'bottom':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.remove('top-legend')\n break\n case 'top':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('top-legend')\n break\n case 'left':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.add('side-legend')\n this.graph.root.classList.add('left-legend')\n break\n case 'right':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('side-legend')\n break\n }\n this.legendPosition = desired\n this.resize()\n },\n clearErrors: function () {\n this.errors = []\n },\n editGraphClose: function (graph) {\n this.editGraph = false\n this.title = graph.title\n // Don't need to copy items because we don't modify them\n this.legendPosition = graph.legendPosition\n this.graphMinY = graph.graphMinY\n this.graphMaxY = graph.graphMaxY\n this.lines = [...graph.lines]\n this.graphStartDateTime = graph.startDateTime\n this.graphEndDateTime = graph.endDateTime\n // Allow the watch to update needToUpdate\n this.$nextTick(() => {\n if (this.needToUpdate) {\n if (this.subscription == null) {\n this.startGraph()\n } else {\n // NOTE: removing and adding back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n // Clone the items first because removeItems modifies this.items\n let clonedItems = JSON.parse(JSON.stringify(this.items))\n this.removeItems(clonedItems)\n setTimeout(() => {\n this.addItems(clonedItems)\n }, 0)\n }\n this.needToUpdate = false\n }\n })\n this.moveLegend(this.legendPosition)\n this.$emit('edit')\n },\n resize: function () {\n this.graph.setSize(this.getSize('chart'))\n if (this.overview) {\n this.overview.setSize(this.getSize('overview'))\n }\n this.$emit('resize', this.id)\n },\n expandAll: function () {\n this.fullWidth = true\n this.fullHeight = true\n this.resize()\n },\n collapseAll: function () {\n this.fullWidth = false\n this.fullHeight = false\n this.resize()\n },\n expandWidth: function () {\n this.fullWidth = true\n this.resize()\n },\n collapseWidth: function () {\n this.fullWidth = false\n this.resize()\n },\n expandHeight: function () {\n this.fullHeight = true\n this.resize()\n },\n collapseHeight: function () {\n this.fullHeight = false\n this.resize()\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-graph', this.id)\n },\n setGraphRange: function () {\n let pad = 0.1\n if (\n this.graphMinY ||\n this.graphMinY === 0 ||\n this.graphMaxY ||\n this.graphMaxY === 0\n ) {\n pad = 0\n }\n this.graph.scales.y.range = (u, dataMin, dataMax) => {\n let min = dataMin\n if (this.graphMinY || this.graphMinY === 0) {\n min = this.graphMinY\n }\n let max = dataMax\n if (this.graphMaxY || this.graphMaxY === 0) {\n max = this.graphMaxY\n }\n return uPlot.rangeNum(min, max, pad, true)\n }\n },\n subscribe: function () {\n this.cable\n .createSubscription('StreamingChannel', window.openc3Scope, {\n received: (data) => this.received(data),\n connected: () => {\n this.addItemsToSubscription(this.items)\n },\n disconnected: (data) => {\n // If allowReconnect is true it means we got a disconnect due to connection lost or server disconnect\n // If allowReconnect is false this is a normal server close or client close\n if (data.allowReconnect) {\n this.errors.push({\n type: 'disconnected',\n message: 'OpenC3 backend connection disconnected',\n time: new Date().getTime(),\n })\n }\n },\n rejected: () => {\n this.errors.push({\n type: 'rejected',\n message: 'OpenC3 backend connection rejected',\n time: new Date().getTime(),\n })\n },\n })\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n // throttle(cb, limit) {\n // let wait = false\n // return () => {\n // if (!wait) {\n // requestAnimationFrame(cb)\n // wait = true\n // setTimeout(() => {\n // wait = false\n // }, limit)\n // }\n // }\n // },\n getSize: function (type) {\n let navDrawerWidth = 0\n const navDrawer = document.getElementById('openc3-nav-drawer')\n if (navDrawer) {\n navDrawerWidth = navDrawer.classList.contains(\n 'v-navigation-drawer--active',\n )\n ? navDrawer.clientWidth\n : 0\n }\n let legendWidth = 0\n if (this.legendPosition === 'right' || this.legendPosition === 'left') {\n const legend = document.getElementsByClassName('u-legend')[0]\n legendWidth = legend.clientWidth\n }\n const viewWidth =\n Math.max(document.documentElement.clientWidth, window.innerWidth || 0) -\n navDrawerWidth -\n legendWidth\n const viewHeight = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0,\n )\n\n const panel = document.getElementsByClassName('v-expansion-panel')[0]\n let height = 100\n if (type === 'overview') {\n // Show overview if we're full height and we're not explicitly hiding it\n if (this.fullHeight && !this.hideOverviewData) {\n this.showOverview = true\n } else {\n this.showOverview = false\n }\n } else {\n // Height of chart is viewportSize - expansion-panel - overview - fudge factor (primarily padding)\n height = viewHeight - panel.clientHeight - height - 250\n if (!this.fullHeight) {\n height = height / 2.0 + 10 // 5px padding top and bottom\n }\n }\n // subtract off some arbitrary padding left and right to make the layout work\n let width = viewWidth - 70\n if (!this.fullWidth) {\n // 6px padding left and right defined in TlmGrapher.vue .item-content\n width = width / 2.0 - 12\n }\n return {\n width: this.width || width,\n height: this.height || height,\n }\n },\n getScales: function () {\n return {\n scales: {\n x: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [1566453600, 1566497660]\n return [dataMin, dataMax]\n },\n },\n y: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [-100, 100]\n return uPlot.rangeNum(dataMin, dataMax, 0.1, true)\n },\n },\n },\n }\n },\n getAxes: function (type) {\n let strokeColor = 'rgba(255, 255, 255, .1)'\n let axisColor = 'white'\n return {\n axes: [\n {\n stroke: axisColor,\n grid: {\n show: true,\n stroke: strokeColor,\n width: 2,\n },\n },\n {\n size: 80, // This size supports values up to 8 digits plus sign\n stroke: axisColor,\n grid: {\n show: type === 'overview' ? false : true,\n stroke: strokeColor,\n width: 2,\n },\n // Forces the axis values to be formatted correctly\n // especially with really small or large values\n values(u, splits) {\n if (\n splits.some((el) => el >= 10000000) ||\n splits.every((el) => el < 0.01)\n ) {\n splits = splits.map((split) => split.toExponential(3))\n }\n return splits\n },\n },\n ],\n }\n },\n closeEditItem: function (event) {\n this.editItem = false\n if (\n // If we have an end time and anything was changed we basically regraph\n (this.graphEndDateTime !== null && this.selectedItem !== event) ||\n // If we're live graphing we just regraph if the types change\n this.selectedItem.valueType !== event.valueType ||\n this.selectedItem.reduced !== event.reduced ||\n this.selectedItem.reducedType !== event.reducedType\n ) {\n this.changeItem(event)\n }\n },\n changeColor: function (event) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].color = event\n this.selectedItem.color = event\n this.graph.root.querySelectorAll('.u-marker')[index].style.borderColor =\n event\n },\n changeLimits: function (limits) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].limits = limits\n this.selectedItem.limits = limits\n this.limitsValues = limits\n },\n linesPlugin: function () {\n return {\n hooks: {\n draw: (u) => {\n const { ctx, bbox } = u\n // These are all in canvas units\n const yMin = u.valToPos(u.scales.y.min, 'y', true)\n const yMax = u.valToPos(u.scales.y.max, 'y', true)\n const redLow = u.valToPos(this.limitsValues[0], 'y', true)\n const yellowLow = u.valToPos(this.limitsValues[1], 'y', true)\n const yellowHigh = u.valToPos(this.limitsValues[2], 'y', true)\n const redHigh = u.valToPos(this.limitsValues[3], 'y', true)\n let height = 0\n\n // NOTE: These comparisons are tricky because the canvas\n // starts in the upper left with 0,0. Thus it grows downward\n // and to the right with increasing values. The comparisons\n // of scale and limitsValues use graph coordinates but the\n // fillRect calculations use the canvas coordinates.\n\n // Draw Y axis lines\n this.lines.forEach((line) => {\n if (\n u.scales.y.min <= line.yValue &&\n line.yValue <= u.scales.y.max\n ) {\n ctx.save()\n ctx.beginPath()\n ctx.strokeStyle = line.color\n ctx.lineWidth = 2\n ctx.moveTo(bbox.left, u.valToPos(line.yValue, 'y', true))\n ctx.lineTo(\n bbox.left + bbox.width,\n u.valToPos(line.yValue, 'y', true),\n )\n ctx.stroke()\n ctx.restore()\n }\n })\n\n ctx.save()\n ctx.beginPath()\n\n // Draw red limits\n ctx.fillStyle = 'rgba(255,0,0,0.15)'\n if (u.scales.y.min < this.limitsValues[0]) {\n let start = redLow < yMax ? yMax : redLow\n ctx.fillRect(bbox.left, redLow, bbox.width, yMin - start)\n }\n if (u.scales.y.max > this.limitsValues[3]) {\n let end = yMin < redHigh ? yMin : redHigh\n ctx.fillRect(bbox.left, yMax, bbox.width, end - yMax)\n }\n\n // Draw yellow limits\n ctx.fillStyle = 'rgba(255,255,0,0.15)'\n if (\n u.scales.y.min < this.limitsValues[1] && // yellowLow\n u.scales.y.max > this.limitsValues[0] // redLow\n ) {\n let start = yellowLow < yMax ? yMax : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, redLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[2] && // yellowHigh\n u.scales.y.min < this.limitsValues[3] // redHigh\n ) {\n let start = yMin < redHigh ? yMin : redHigh\n let end = yMin < yellowHigh ? yMin : yellowHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n\n // Draw green limits & operational limits\n ctx.fillStyle = 'rgba(0,255,0,0.15)'\n // If there are no operational limits the interior is all green\n if (this.limitsValues.length === 4) {\n // Determine if we show any green\n if (\n u.scales.y.min < this.limitsValues[2] && // yellowHigh\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = yellowHigh < yMax ? yMax : yellowHigh\n let end = yMin < yellowLow ? yMin : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n } else {\n // Operational limits\n const greenLow = u.valToPos(this.limitsValues[4], 'y', true)\n const greenHigh = u.valToPos(this.limitsValues[5], 'y', true)\n if (\n u.scales.y.min < this.limitsValues[4] && // greenLow\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = greenLow < yMax ? yMax : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, yellowLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[5] && // greenHigh\n u.scales.y.min < this.limitsValues[2] // yellowHigh\n ) {\n let start = yMin < yellowHigh ? yMin : yellowHigh\n let end = yMin < greenHigh ? yMin : greenHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.fillStyle = 'rgba(0,0,255,0.15)'\n let start = greenHigh < yMax ? yMax : greenHigh\n let end = yMin < greenLow ? yMin : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.stroke()\n ctx.restore()\n },\n },\n }\n },\n changeItem: function (event) {\n // NOTE: removing and adding items back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n this.removeItems([this.selectedItem])\n this.selectedItem.valueType = event.valueType\n this.selectedItem.reduced = event.reduced\n this.selectedItem.reducedType = event.reducedType\n setTimeout(() => {\n this.addItems([this.selectedItem])\n }, 0)\n },\n addItems: function (itemArray, type = 'CONVERTED') {\n itemArray.forEach((item) => {\n item.valueType ||= type // set the default type\n item.color ||= this.colors[this.colorIndex]\n item.limits ||= []\n\n if (item.limits.length > 0) {\n this.limitsValues = item.limits\n }\n\n this.colorIndex = (this.colorIndex + 1) % this.colors.length\n this.items.push(item)\n\n const index = this.data.length\n this.graph.addSeries(this.createSeriesConfig(item), index)\n\n if (this.overview) {\n this.overview.addSeries(this.createOverviewSeriesConfig(), index)\n }\n\n this.data.splice(index, 0, Array(this.data[0].length))\n this.indexes[this.subscriptionKey(item)] = index\n })\n\n this.updateColorIndex(itemArray)\n this.addItemsToSubscription(itemArray)\n this.$emit('resize')\n this.$emit('edit')\n },\n createSeriesConfig: function (item) {\n return {\n spanGaps: true,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else if (rawValue == null) {\n return '--'\n } else if (\n (Math.abs(rawValue) < 0.01 && rawValue !== 0) ||\n Math.abs(rawValue) >= 10000000\n ) {\n return rawValue.toExponential(6)\n } else {\n return rawValue.toFixed(6)\n }\n },\n }\n },\n createOverviewSeriesConfig: function () {\n return {\n spanGaps: true,\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n }\n },\n updateColorIndex: function (itemArray) {\n const lastItem = itemArray[itemArray.length - 1]\n if (lastItem) {\n const index = this.colors.indexOf(lastItem.color)\n if (index !== -1) {\n this.colorIndex = (index + 1) % this.colors.length\n }\n }\n },\n addItemsToSubscription: function (itemArray = this.items) {\n let theStartTime = this.startTime\n if (this.graphStartDateTime) {\n theStartTime = this.graphStartDateTime\n }\n if (this.subscription) {\n OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(\n (refreshed) => {\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n this.subscription.perform('add', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: itemArray.map(this.subscriptionKey),\n start_time: theStartTime,\n end_time: this.graphEndDateTime,\n })\n },\n )\n }\n },\n clearAllData: function () {\n // Clear all data so delete the time data as well\n this.data[0] = []\n this.clearData(this.items)\n },\n clearData: function (itemArray) {\n for (const key of itemArray.map(this.subscriptionKey)) {\n let index = this.indexes[key]\n this.data[index] = Array(this.data[0].length).fill(null)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n // data.length of 2 means we only have 1 item\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 2) {\n this.data[0] = []\n this.graph.setData(this.data)\n this.overview.setData(this.data)\n }\n },\n removeItems: function (itemArray) {\n this.removeItemsFromSubscription(itemArray)\n\n for (const key of itemArray.map(this.subscriptionKey)) {\n const index = this.reorderIndexes(key)\n this.items.splice(index - 1, 1)\n this.data.splice(index, 1)\n this.graph.delSeries(index)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.delSeries(index)\n this.overview.setData(this.data)\n }\n }\n // data.length of 1 means we've deleted all our items\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 1) {\n this.data[0] = []\n this.graph.setData(this.data)\n this.overview.setData(this.data)\n }\n this.$emit('resize')\n this.$emit('edit')\n },\n removeItemsFromSubscription: function (itemArray = this.items) {\n if (this.subscription) {\n this.subscription.perform('remove', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: itemArray.map(this.subscriptionKey),\n })\n }\n },\n reorderIndexes: function (key) {\n let index = this.indexes[key]\n delete this.indexes[key]\n for (let i in this.indexes) {\n if (this.indexes[i] > index) {\n this.indexes[i] -= 1\n }\n }\n return index\n },\n received: function (data) {\n this.cable.recordPing()\n // TODO: Shouldn't get errors but should we handle this every time?\n // if (json_data.error) {\n // console.log(json_data.error)\n // return\n // }\n for (let i = 0; i < data.length; i++) {\n let time = data[i].__time / 1000000000.0 // Time in seconds\n let length = data[0].length\n if (length === 0 || time > data[0][length - 1]) {\n // Nominal case - append new data to end\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].push(null)\n }\n this.set_data_at_index(this.data[0].length - 1, time, data[i])\n } else {\n let index = bs(this.data[0], time, this.bs_comparator)\n if (index >= 0) {\n // Found the slot in the existing data\n this.set_data_at_index(index, time, data[i])\n } else {\n // Insert a new null slot at the ideal index\n let ideal_index = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(ideal_index, 0, null)\n }\n this.set_data_at_index(ideal_index, time, data[i])\n }\n }\n }\n // If we weren't passed a startTime notify grapher of our start\n if (this.startTime == null && this.data[0][0]) {\n let newStartTime = this.data[0][0] * 1000000000\n this.$emit('started', newStartTime)\n }\n this.dataChanged = true\n },\n bs_comparator: function (element, needle) {\n return element - needle\n },\n set_data_at_index: function (index, time, new_data) {\n this.data[0][index] = time\n for (const [key, value] of Object.entries(new_data)) {\n if (key === 'time') {\n continue\n }\n let key_index = this.indexes[key]\n if (key_index) {\n let array = this.data[key_index]\n // NaN and Infinite values are sent as objects with raw attribute set\n // to 'NaN', '-Infinity', or 'Infinity', just set data to null\n if (value?.raw) {\n array[index] = null\n } else if (typeof value === 'string') {\n // Can't graph strings so just set to null\n array[index] = null\n // If it's not already RAW, change the type to RAW\n // NOTE: Some items are RAW strings so they won't ever work\n if (!key.includes('__RAW')) {\n for (let item of this.items) {\n if (this.subscriptionKey(item) === key) {\n this.selectedItem = item\n break\n }\n }\n this.changeItem({\n valueType: 'RAW',\n reduced: this.selectedItem.reduced,\n reducedType: this.selectedItem.reducedType,\n })\n }\n } else {\n array[index] = value\n }\n }\n }\n },\n subscriptionKey: function (item) {\n let key = `${item.reduced}__TLM__${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`\n if (\n item.reduced === 'REDUCED_MINUTE' ||\n item.reduced === 'REDUCED_HOUR' ||\n item.reduced === 'REDUCED_DAY'\n ) {\n key += `__${item.reducedType}`\n }\n return key\n },\n },\n}\n</script>\n\n<style>\n.v-window-item {\n background-color: var(--color-background-surface-default);\n}\n/* left right stacked legend */\n.uplot.side-legend {\n display: flex;\n width: auto;\n}\n.uplot.side-legend .u-wrap {\n flex: none;\n}\n.uplot.side-legend .u-legend {\n text-align: left;\n margin-left: 0;\n width: 220px;\n}\n.uplot.side-legend .u-legend,\n.uplot.side-legend .u-legend tr,\n.uplot.side-legend .u-legend th,\n.uplot.side-legend .u-legend td {\n display: revert;\n}\n/* left side we need to order the legend before the plot */\n.uplot.left-legend .u-legend {\n order: -1;\n}\n/* top legend */\n.uplot.top-legend {\n display: flex;\n flex-direction: column;\n}\n.uplot.top-legend .u-legend {\n order: -1;\n}\n/* This value is large enough to support negative scientific notation\n that we use on the value with rawValue.toExponential(6) */\n.u-legend.u-inline .u-series .u-value {\n width: 105px;\n}\n/* This value is large enough to support our date format: YYYY-MM-DD HH:MM:SS.sss */\n.u-legend.u-inline .u-series:first-child .u-value {\n width: 185px;\n}\n.u-select {\n color: rgba(255, 255, 255, 0.07);\n}\n</style>\n<style scoped>\n.active {\n background-color: var(--color-background-surface-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","TimeFilters","value","isValid","parse","itemId","item","date","toDate","dline","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_dialog","$options","_cache","$event","_withKeys","_ctx","_withCtx","_createVNode","_component_v_toolbar","_component_v_spacer","_createElementVNode","_component_v_card","_component_v_tabs","_component_v_tab","_createTextVNode","_component_v_tabs_window","_component_v_tabs_window_item","_component_v_row","_component_v_col","_component_v_card_text","_component_v_text_field","_component_v_select","_component_v_list","_component_v_list_item","_component_v_btn","_createElementBlock","_Fragment","_renderList","$props","_component_v_tooltip","props","_component_v_icon","_mergeProps","_component_v_data_table","_component_v_card_actions","OpenC3Api","details","key","_component_v_card_title","_openBlock","_toDisplayString","_createCommentVNode","GraphEditDialog","GraphEditItemDialog","Cable","index","chartSeries","overviewSeries","seriesObj","commonProps","u","seriesIdx","self","rawValue","chartOpts","uPlot","timeZoneName","ts","v","targ","handler","e","chart","left","right","legend","seriesEl","series","overviewOpts","min","max","newState","oldState","newData","oldData","newVal","oldVal","val","ptsMin","description","desired","graph","clonedItems","pad","dataMin","dataMax","data","subscription","type","navDrawerWidth","navDrawer","legendWidth","viewWidth","viewHeight","panel","height","width","strokeColor","axisColor","splits","el","split","event","limits","ctx","bbox","yMin","yMax","redLow","yellowLow","yellowHigh","redHigh","line","start","end","greenLow","greenHigh","itemArray","lastItem","theStartTime","refreshed","time","length","j","bs","ideal_index","newStartTime","element","needle","new_data","key_index","array","_withModifiers","_normalizeClass","_withDirectives","$data","_vShow","_component_v_expand_transition","_component_graph_edit_dialog","_component_v_textarea","_component_v_menu","_component_v_list_item_title","_component_graph_edit_item_dialog","_component_v_list_subheader","_hoisted_5","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const N=require("./Widget-DNf52jRQ.cjs"),T=require("./format-B22VpiOS.cjs"),h=require("./parse-DwfgQboe.cjs"),b=require("./addMonths-n1tnl3ab.cjs");function y(e,s,a){return h.addDays(e,-s,a)}function k(e,s,a){return b.addMonths(e,-s,a)}function S(e,s,a){const{years:r=0,months:t=0,weeks:i=0,days:d=0,hours:n=0,minutes:c=0,seconds:m=0}=s,o=k(e,t+r*12,a),p=y(o,d+i*7,a),u=c+n*60,l=(m+u*60)*1e3;return T.constructFrom(e,+p-l)}const f={mixins:[N.Widget],data:function(){return{id:Math.floor(Math.random()*1e11),state:"start",items:[{targetName:this.parameters[0],packetName:this.parameters[1],itemName:this.parameters[2],valueType:this.parameters[3]||"CONVERTED",reduced:this.parameters[4]||"DECOM",reducedType:this.parameters[5]||null}],startTime:null,secondsGraphed:3600,pointsSaved:3600,pointsGraphed:3600,size:{height:300,width:400}}},created:function(){this.appliedSettings.forEach(e=>{switch(e[0]){case"ITEM":this.items.push({targetName:e[1],packetName:e[2],itemName:e[3],valueType:e[4]||"CONVERTED",reduced:e[5]||"DECOM",reducedType:e[6]||null});break;case"STARTTIME":let s=h.parse(e[1],"yyyy/MM/dd HH:mm:ss",new Date);this.startTime=s.getTime()*1e6;break;case"HISTORY":let a=parseInt(e[1].slice(0,e[1].length-1)),r=null,t=1;switch(e[1][e[1].length-1]){case"d":r="days",t=3600*24;break;case"h":r="hours",t=3600;break;case"m":r="minutes",t=60;break;case"s":r="seconds";break;default:throw new Error(`Unknown time suffix: ${e[1]}!`)}let i={};i[r]=a,this.startTime=S(new Date,i).getTime()*1e6,a*t>this.secondsGraphed&&(this.secondsGraphed=a*t),a*t>this.pointsSaved&&(this.pointsSaved=a*t),a*t>this.pointsGraphed&&(this.pointsGraphed=a*t);break;case"SECONDSGRAPHED":this.secondsGraphed=parseInt(e[1]);break;case"POINTSSAVED":this.pointsSaved=parseInt(e[1]);break;case"POINTSGRAPHED":this.pointsGraphed=parseInt(e[1]);break;case"SIZE":this.size.width=parseInt(e[1]),this.size.height=parseInt(e[2]);break}}),this.items=this.items.map(e=>{let s=e.itemName;if(e.itemName.includes("[["))e.itemName=e.itemName.replace("[[","[").replace("]]","]"),s=e.itemName;else if(e.itemName.includes("[")){let a=e.itemName.match(/\[(\d+)\]/);this.arrayIndex=parseInt(a[1]),s=e.itemName.replace(a[0],"")}return this.$emit("addItem",`${e.targetName}__${e.packetName}__${s}__${e.valueType}`,!0),e})},destroyed(){this.items.map(e=>this.$emit("deleteItem",`${e.targetName}__${e.packetName}__${e.itemName}__${e.valueType}`))}};exports.GraphWidget=f;
|
|
2
|
+
//# sourceMappingURL=GraphWidget-22NxFa9k.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphWidget-22NxFa9k.cjs","sources":["../../../node_modules/date-fns/subDays.js","../../../node_modules/date-fns/subMonths.js","../../../node_modules/date-fns/sub.js","../src/widgets/GraphWidget.js"],"sourcesContent":["import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 amount - The amount of days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The subMonths function options.\n */\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 amount - The amount of months to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the months subtracted\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function subMonths(date, amount, options) {\n return addMonths(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subMonths;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { subDays } from \"./subDays.js\";\nimport { subMonths } from \"./subMonths.js\";\n\n/**\n * The {@link sub} function options.\n */\n\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 subtracted\n * @param options - An object with options\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns The new date with the seconds subtracted\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\nexport function sub(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 const withoutMonths = subMonths(date, months + years * 12, options);\n const withoutDays = subDays(withoutMonths, days + weeks * 7, options);\n\n const minutesToSub = minutes + hours * 60;\n const secondsToSub = seconds + minutesToSub * 60;\n const msToSub = secondsToSub * 1000;\n\n return constructFrom(options?.in || date, +withoutDays - msToSub);\n}\n\n// Fallback for modularized imports:\nexport default sub;\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\nimport { sub, parse } from 'date-fns'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data: function () {\n return {\n id: Math.floor(Math.random() * 100000000000), // Unique-ish\n state: 'start',\n items: [\n {\n targetName: this.parameters[0],\n packetName: this.parameters[1],\n itemName: this.parameters[2],\n valueType: this.parameters[3] || 'CONVERTED',\n reduced: this.parameters[4] || 'DECOM',\n reducedType: this.parameters[5] || null,\n },\n ],\n startTime: null,\n // 1hr of data by default\n secondsGraphed: 3600,\n pointsSaved: 3600,\n pointsGraphed: 3600,\n // Make it a decently sized graph\n size: {\n height: 300,\n width: 400,\n },\n }\n },\n created: function () {\n this.appliedSettings.forEach((setting) => {\n switch (setting[0]) {\n case 'ITEM':\n this.items.push({\n targetName: setting[1],\n packetName: setting[2],\n itemName: setting[3],\n valueType: setting[4] || 'CONVERTED',\n reduced: setting[5] || 'DECOM',\n reducedType: setting[6] || null,\n })\n break\n case 'STARTTIME':\n let date = parse(setting[1], 'yyyy/MM/dd HH:mm:ss', new Date())\n this.startTime = date.getTime() * 1000000 // nanoseconds\n break\n case 'HISTORY':\n let amount = parseInt(setting[1].slice(0, setting[1].length - 1))\n let key = null\n let multiplier = 1\n switch (setting[1][setting[1].length - 1]) {\n case 'd':\n key = 'days'\n multiplier = 3600 * 24\n break\n case 'h':\n key = 'hours'\n multiplier = 3600\n break\n case 'm':\n key = 'minutes'\n multiplier = 60\n break\n case 's':\n key = 'seconds'\n break\n default:\n throw new Error(`Unknown time suffix: ${setting[1]}!`)\n }\n let obj = {}\n obj[key] = amount\n this.startTime = sub(new Date(), obj).getTime() * 1000000\n if (amount * multiplier > this.secondsGraphed) {\n this.secondsGraphed = amount * multiplier\n }\n if (amount * multiplier > this.pointsSaved) {\n this.pointsSaved = amount * multiplier\n }\n if (amount * multiplier > this.pointsGraphed) {\n this.pointsGraphed = amount * multiplier\n }\n break\n case 'SECONDSGRAPHED':\n this.secondsGraphed = parseInt(setting[1])\n break\n case 'POINTSSAVED':\n this.pointsSaved = parseInt(setting[1])\n break\n case 'POINTSGRAPHED':\n this.pointsGraphed = parseInt(setting[1])\n break\n case 'SIZE':\n this.size.width = parseInt(setting[1])\n this.size.height = parseInt(setting[2])\n break\n }\n })\n this.items = this.items.map((item) => {\n let itemName = item.itemName\n // Remove double bracket escaping. This means they actually have an item\n // with a bracket in the name, not an array index.\n if (item.itemName.includes('[[')) {\n // Change the actual item and the the name we're passing to the screen\n item.itemName = item.itemName.replace('[[', '[').replace(']]', ']')\n itemName = item.itemName\n } else if (item.itemName.includes('[')) {\n // Brackets mean array indexes (normally, but see above)\n let match = item.itemName.match(/\\[(\\d+)\\]/)\n this.arrayIndex = parseInt(match[1])\n // Here we keep the original item name with the brackets but change\n // the item we're passing to the screen to the non-bracket item\n itemName = item.itemName.replace(match[0], '')\n }\n this.$emit(\n 'addItem',\n `${item.targetName}__${item.packetName}__${itemName}__${item.valueType}`,\n true,\n )\n // Return the mapped values since we may have removed bracket escaping\n return item\n })\n },\n destroyed() {\n this.items.map((item) =>\n this.$emit(\n 'deleteItem',\n `${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`,\n ),\n )\n },\n}\n"],"names":["subDays","date","amount","options","addDays","subMonths","addMonths","sub","duration","years","months","weeks","days","hours","minutes","seconds","withoutMonths","withoutDays","minutesToSub","msToSub","constructFrom","GraphWidget","Widget","setting","parse","key","multiplier","obj","item","itemName","match"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { W as l } from "./Widget-fRCERxGf.js";
|
|
2
|
+
import { c as N } from "./format-CVeawcIv.js";
|
|
3
|
+
import { a as T, p as b } from "./parse-DnkEsW-3.js";
|
|
4
|
+
import { a as f } from "./addMonths-BtG7uZLJ.js";
|
|
5
|
+
function y(e, s, a) {
|
|
6
|
+
return T(e, -s, a);
|
|
7
|
+
}
|
|
8
|
+
function k(e, s, a) {
|
|
9
|
+
return f(e, -s, a);
|
|
10
|
+
}
|
|
11
|
+
function S(e, s, a) {
|
|
12
|
+
const {
|
|
13
|
+
years: r = 0,
|
|
14
|
+
months: t = 0,
|
|
15
|
+
weeks: i = 0,
|
|
16
|
+
days: m = 0,
|
|
17
|
+
hours: h = 0,
|
|
18
|
+
minutes: o = 0,
|
|
19
|
+
seconds: d = 0
|
|
20
|
+
} = s, p = k(e, t + r * 12, a), c = y(p, m + i * 7, a), n = o + h * 60, u = (d + n * 60) * 1e3;
|
|
21
|
+
return N(e, +c - u);
|
|
22
|
+
}
|
|
23
|
+
const _ = {
|
|
24
|
+
mixins: [l],
|
|
25
|
+
data: function() {
|
|
26
|
+
return {
|
|
27
|
+
id: Math.floor(Math.random() * 1e11),
|
|
28
|
+
// Unique-ish
|
|
29
|
+
state: "start",
|
|
30
|
+
items: [
|
|
31
|
+
{
|
|
32
|
+
targetName: this.parameters[0],
|
|
33
|
+
packetName: this.parameters[1],
|
|
34
|
+
itemName: this.parameters[2],
|
|
35
|
+
valueType: this.parameters[3] || "CONVERTED",
|
|
36
|
+
reduced: this.parameters[4] || "DECOM",
|
|
37
|
+
reducedType: this.parameters[5] || null
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
startTime: null,
|
|
41
|
+
// 1hr of data by default
|
|
42
|
+
secondsGraphed: 3600,
|
|
43
|
+
pointsSaved: 3600,
|
|
44
|
+
pointsGraphed: 3600,
|
|
45
|
+
// Make it a decently sized graph
|
|
46
|
+
size: {
|
|
47
|
+
height: 300,
|
|
48
|
+
width: 400
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
created: function() {
|
|
53
|
+
this.appliedSettings.forEach((e) => {
|
|
54
|
+
switch (e[0]) {
|
|
55
|
+
case "ITEM":
|
|
56
|
+
this.items.push({
|
|
57
|
+
targetName: e[1],
|
|
58
|
+
packetName: e[2],
|
|
59
|
+
itemName: e[3],
|
|
60
|
+
valueType: e[4] || "CONVERTED",
|
|
61
|
+
reduced: e[5] || "DECOM",
|
|
62
|
+
reducedType: e[6] || null
|
|
63
|
+
});
|
|
64
|
+
break;
|
|
65
|
+
case "STARTTIME":
|
|
66
|
+
let s = b(e[1], "yyyy/MM/dd HH:mm:ss", /* @__PURE__ */ new Date());
|
|
67
|
+
this.startTime = s.getTime() * 1e6;
|
|
68
|
+
break;
|
|
69
|
+
case "HISTORY":
|
|
70
|
+
let a = parseInt(e[1].slice(0, e[1].length - 1)), r = null, t = 1;
|
|
71
|
+
switch (e[1][e[1].length - 1]) {
|
|
72
|
+
case "d":
|
|
73
|
+
r = "days", t = 3600 * 24;
|
|
74
|
+
break;
|
|
75
|
+
case "h":
|
|
76
|
+
r = "hours", t = 3600;
|
|
77
|
+
break;
|
|
78
|
+
case "m":
|
|
79
|
+
r = "minutes", t = 60;
|
|
80
|
+
break;
|
|
81
|
+
case "s":
|
|
82
|
+
r = "seconds";
|
|
83
|
+
break;
|
|
84
|
+
default:
|
|
85
|
+
throw new Error(`Unknown time suffix: ${e[1]}!`);
|
|
86
|
+
}
|
|
87
|
+
let i = {};
|
|
88
|
+
i[r] = a, this.startTime = S(/* @__PURE__ */ new Date(), i).getTime() * 1e6, a * t > this.secondsGraphed && (this.secondsGraphed = a * t), a * t > this.pointsSaved && (this.pointsSaved = a * t), a * t > this.pointsGraphed && (this.pointsGraphed = a * t);
|
|
89
|
+
break;
|
|
90
|
+
case "SECONDSGRAPHED":
|
|
91
|
+
this.secondsGraphed = parseInt(e[1]);
|
|
92
|
+
break;
|
|
93
|
+
case "POINTSSAVED":
|
|
94
|
+
this.pointsSaved = parseInt(e[1]);
|
|
95
|
+
break;
|
|
96
|
+
case "POINTSGRAPHED":
|
|
97
|
+
this.pointsGraphed = parseInt(e[1]);
|
|
98
|
+
break;
|
|
99
|
+
case "SIZE":
|
|
100
|
+
this.size.width = parseInt(e[1]), this.size.height = parseInt(e[2]);
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}), this.items = this.items.map((e) => {
|
|
104
|
+
let s = e.itemName;
|
|
105
|
+
if (e.itemName.includes("[["))
|
|
106
|
+
e.itemName = e.itemName.replace("[[", "[").replace("]]", "]"), s = e.itemName;
|
|
107
|
+
else if (e.itemName.includes("[")) {
|
|
108
|
+
let a = e.itemName.match(/\[(\d+)\]/);
|
|
109
|
+
this.arrayIndex = parseInt(a[1]), s = e.itemName.replace(a[0], "");
|
|
110
|
+
}
|
|
111
|
+
return this.$emit(
|
|
112
|
+
"addItem",
|
|
113
|
+
`${e.targetName}__${e.packetName}__${s}__${e.valueType}`,
|
|
114
|
+
!0
|
|
115
|
+
), e;
|
|
116
|
+
});
|
|
117
|
+
},
|
|
118
|
+
destroyed() {
|
|
119
|
+
this.items.map(
|
|
120
|
+
(e) => this.$emit(
|
|
121
|
+
"deleteItem",
|
|
122
|
+
`${e.targetName}__${e.packetName}__${e.itemName}__${e.valueType}`
|
|
123
|
+
)
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
export {
|
|
128
|
+
_ as G
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=GraphWidget-Dycey-mj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphWidget-Dycey-mj.js","sources":["../../../node_modules/date-fns/subDays.js","../../../node_modules/date-fns/subMonths.js","../../../node_modules/date-fns/sub.js","../src/widgets/GraphWidget.js"],"sourcesContent":["import { addDays } from \"./addDays.js\";\n\n/**\n * The {@link subDays} function options.\n */\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 amount - The amount of days to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the days subtracted\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * const result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport function subDays(date, amount, options) {\n return addDays(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subDays;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The subMonths function options.\n */\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 amount - The amount of months to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the months subtracted\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function subMonths(date, amount, options) {\n return addMonths(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subMonths;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { subDays } from \"./subDays.js\";\nimport { subMonths } from \"./subMonths.js\";\n\n/**\n * The {@link sub} function options.\n */\n\n/**\n * @name sub\n * @category Common Helpers\n * @summary Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @description\n * Subtract the specified years, months, weeks, days, hours, minutes and seconds from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use 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 subtracted\n * @param options - An object with options\n *\n * | Key | Description |\n * |---------|------------------------------------|\n * | years | Amount of years to be subtracted |\n * | months | Amount of months to be subtracted |\n * | weeks | Amount of weeks to be subtracted |\n * | days | Amount of days to be subtracted |\n * | hours | Amount of hours to be subtracted |\n * | minutes | Amount of minutes to be subtracted |\n * | seconds | Amount of seconds to be subtracted |\n *\n * All values default to 0\n *\n * @returns The new date with the seconds subtracted\n *\n * @example\n * // Subtract the following duration from 15 June 2017 15:29:20\n * const result = sub(new Date(2017, 5, 15, 15, 29, 20), {\n * years: 2,\n * months: 9,\n * weeks: 1,\n * days: 7,\n * hours: 5,\n * minutes: 9,\n * seconds: 30\n * })\n * //=> Mon Sep 1 2014 10:19:50\n */\nexport function sub(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 const withoutMonths = subMonths(date, months + years * 12, options);\n const withoutDays = subDays(withoutMonths, days + weeks * 7, options);\n\n const minutesToSub = minutes + hours * 60;\n const secondsToSub = seconds + minutesToSub * 60;\n const msToSub = secondsToSub * 1000;\n\n return constructFrom(options?.in || date, +withoutDays - msToSub);\n}\n\n// Fallback for modularized imports:\nexport default sub;\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\nimport { sub, parse } from 'date-fns'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data: function () {\n return {\n id: Math.floor(Math.random() * 100000000000), // Unique-ish\n state: 'start',\n items: [\n {\n targetName: this.parameters[0],\n packetName: this.parameters[1],\n itemName: this.parameters[2],\n valueType: this.parameters[3] || 'CONVERTED',\n reduced: this.parameters[4] || 'DECOM',\n reducedType: this.parameters[5] || null,\n },\n ],\n startTime: null,\n // 1hr of data by default\n secondsGraphed: 3600,\n pointsSaved: 3600,\n pointsGraphed: 3600,\n // Make it a decently sized graph\n size: {\n height: 300,\n width: 400,\n },\n }\n },\n created: function () {\n this.appliedSettings.forEach((setting) => {\n switch (setting[0]) {\n case 'ITEM':\n this.items.push({\n targetName: setting[1],\n packetName: setting[2],\n itemName: setting[3],\n valueType: setting[4] || 'CONVERTED',\n reduced: setting[5] || 'DECOM',\n reducedType: setting[6] || null,\n })\n break\n case 'STARTTIME':\n let date = parse(setting[1], 'yyyy/MM/dd HH:mm:ss', new Date())\n this.startTime = date.getTime() * 1000000 // nanoseconds\n break\n case 'HISTORY':\n let amount = parseInt(setting[1].slice(0, setting[1].length - 1))\n let key = null\n let multiplier = 1\n switch (setting[1][setting[1].length - 1]) {\n case 'd':\n key = 'days'\n multiplier = 3600 * 24\n break\n case 'h':\n key = 'hours'\n multiplier = 3600\n break\n case 'm':\n key = 'minutes'\n multiplier = 60\n break\n case 's':\n key = 'seconds'\n break\n default:\n throw new Error(`Unknown time suffix: ${setting[1]}!`)\n }\n let obj = {}\n obj[key] = amount\n this.startTime = sub(new Date(), obj).getTime() * 1000000\n if (amount * multiplier > this.secondsGraphed) {\n this.secondsGraphed = amount * multiplier\n }\n if (amount * multiplier > this.pointsSaved) {\n this.pointsSaved = amount * multiplier\n }\n if (amount * multiplier > this.pointsGraphed) {\n this.pointsGraphed = amount * multiplier\n }\n break\n case 'SECONDSGRAPHED':\n this.secondsGraphed = parseInt(setting[1])\n break\n case 'POINTSSAVED':\n this.pointsSaved = parseInt(setting[1])\n break\n case 'POINTSGRAPHED':\n this.pointsGraphed = parseInt(setting[1])\n break\n case 'SIZE':\n this.size.width = parseInt(setting[1])\n this.size.height = parseInt(setting[2])\n break\n }\n })\n this.items = this.items.map((item) => {\n let itemName = item.itemName\n // Remove double bracket escaping. This means they actually have an item\n // with a bracket in the name, not an array index.\n if (item.itemName.includes('[[')) {\n // Change the actual item and the the name we're passing to the screen\n item.itemName = item.itemName.replace('[[', '[').replace(']]', ']')\n itemName = item.itemName\n } else if (item.itemName.includes('[')) {\n // Brackets mean array indexes (normally, but see above)\n let match = item.itemName.match(/\\[(\\d+)\\]/)\n this.arrayIndex = parseInt(match[1])\n // Here we keep the original item name with the brackets but change\n // the item we're passing to the screen to the non-bracket item\n itemName = item.itemName.replace(match[0], '')\n }\n this.$emit(\n 'addItem',\n `${item.targetName}__${item.packetName}__${itemName}__${item.valueType}`,\n true,\n )\n // Return the mapped values since we may have removed bracket escaping\n return item\n })\n },\n destroyed() {\n this.items.map((item) =>\n this.$emit(\n 'deleteItem',\n `${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`,\n ),\n )\n },\n}\n"],"names":["subDays","date","amount","options","addDays","subMonths","addMonths","sub","duration","years","months","weeks","days","hours","minutes","seconds","withoutMonths","withoutDays","minutesToSub","msToSub","constructFrom","GraphWidget","Widget","setting","parse","key","multiplier","obj","item","itemName","match"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./Layout-DRL0EeSA.cjs"),e=require("vue"),l=require("./CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-BHFhmbuH.cjs"),c={mixins:[i.Layout],created:function(){if(this.parameters[0]){let r=this.parameters[0];this.widgets.forEach(s=>{s.settings.find(t=>t[0]==="MARGIN"||t[0]==="RAW"&&t[1].toUpperCase().includes("MARGIN"))===void 0&&s.settings.push(["MARGIN",r])})}}};function u(r,s,o,t,p,f){return e.openBlock(),e.createElementBlock("div",{ref:"container",class:"d-flex flex-row",style:e.normalizeStyle(r.computedStyle)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.widgets,(n,a)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.type),e.mergeProps({ref_for:!0},r.listeners,{key:a,target:n.target,parameters:n.parameters,settings:n.settings,"screen-values":r.screenValues,"screen-time-zone":r.screenTimeZone,widgets:n.widgets,name:n.name,line:n.line,"line-number":n.lineNumber}),null,16,["target","parameters","settings","screen-values","screen-time-zone","widgets","name","line","line-number"]))),128))],4)}const m=l._export_sfc(c,[["render",u]]);exports.default=m;
|
|
2
|
+
//# sourceMappingURL=HorizontalWidget-BBeB0eBI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HorizontalWidget-BBeB0eBI.cjs","sources":["../src/widgets/HorizontalWidget.vue"],"sourcesContent":["<!--\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 ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <component\n v-for=\"(widget, index) in widgets\"\n v-bind=\"listeners\"\n :key=\"index\"\n :is=\"widget.type\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n :line=\"widget.line\"\n :line-number=\"widget.lineNumber\"\n />\n </div>\n</template>\n\n<script>\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n created: function () {\n if (this.parameters[0]) {\n let margin = this.parameters[0]\n this.widgets.forEach((widget) => {\n // Don't push MARGIN on a widget that's already defined it\n const found = widget.settings.find(\n (setting) =>\n setting[0] === 'MARGIN' ||\n (setting[0] === 'RAW' &&\n setting[1].toUpperCase().includes('MARGIN')),\n )\n if (found === undefined) {\n widget.settings.push(['MARGIN', margin])\n }\n })\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","margin","widget","setting","_createElementBlock","_normalizeStyle","_ctx","_openBlock","_Fragment","_renderList","index","_createBlock","_resolveDynamicComponent","_mergeProps"],"mappings":"oOA4CKA,EAAU,CACb,OAAQ,CAACC,EAAAA,MAAM,EACf,QAAS,UAAY,CACnB,GAAI,KAAK,WAAW,CAAC,EAAG,CACtB,IAAIC,EAAS,KAAK,WAAW,CAAC,EAC9B,KAAK,QAAQ,QAASC,GAAW,CAEjBA,EAAO,SAAS,KAC3BC,GACCA,EAAQ,CAAC,IAAM,UACdA,EAAQ,CAAC,IAAM,OACdA,EAAQ,CAAC,EAAE,YAAa,EAAC,SAAS,QAAQ,CAChD,IACc,QACZD,EAAO,SAAS,KAAK,CAAC,SAAUD,CAAM,CAAC,CAE1C,CAAA,CACH,CACD,CACH,+CAxCEG,EAgBM,mBAAA,MAAA,CAhBD,IAAI,YAAY,MAAM,kBAAmB,MAvBhDC,EAAAA,eAuBuDC,EAAa,aAAA,KAChEC,EAAAA,UAAA,EAAA,EAAAH,EAAA,mBAcEI,gBAtCNC,EAyBgC,WAAAH,EAAA,QAzBhC,CAyBcJ,EAAQQ,mBADlBC,EAAAA,YAxBJC,EA4BW,wBAAAV,EAAO,IAAI,EAJlBW,EAcE,WAAA,CAtCN,QAAA,IA0BcP,EAAS,UAAA,CAChB,IAAKI,EAEL,OAAQR,EAAO,OACf,WAAYA,EAAO,WACnB,SAAUA,EAAO,SACjB,gBAAeI,EAAY,aAC3B,mBAAkBA,EAAc,eAChC,QAASJ,EAAO,QAChB,KAAMA,EAAO,KACb,KAAMA,EAAO,KACb,cAAaA,EAAO"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { L as l } from "./Layout-Bh7VzCZd.js";
|
|
2
|
+
import { createElementBlock as a, openBlock as t, normalizeStyle as m, Fragment as c, renderList as u, createBlock as p, resolveDynamicComponent as f, mergeProps as d } from "vue";
|
|
3
|
+
import { _ as g } from "./CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-CHgC5LLL.js";
|
|
4
|
+
const y = {
|
|
5
|
+
mixins: [l],
|
|
6
|
+
created: function() {
|
|
7
|
+
if (this.parameters[0]) {
|
|
8
|
+
let r = this.parameters[0];
|
|
9
|
+
this.widgets.forEach((s) => {
|
|
10
|
+
s.settings.find(
|
|
11
|
+
(n) => n[0] === "MARGIN" || n[0] === "RAW" && n[1].toUpperCase().includes("MARGIN")
|
|
12
|
+
) === void 0 && s.settings.push(["MARGIN", r]);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
function h(r, s, o, n, _, k) {
|
|
18
|
+
return t(), a("div", {
|
|
19
|
+
ref: "container",
|
|
20
|
+
class: "d-flex flex-row",
|
|
21
|
+
style: m(r.computedStyle)
|
|
22
|
+
}, [
|
|
23
|
+
(t(!0), a(c, null, u(r.widgets, (e, i) => (t(), p(f(e.type), d({ ref_for: !0 }, r.listeners, {
|
|
24
|
+
key: i,
|
|
25
|
+
target: e.target,
|
|
26
|
+
parameters: e.parameters,
|
|
27
|
+
settings: e.settings,
|
|
28
|
+
"screen-values": r.screenValues,
|
|
29
|
+
"screen-time-zone": r.screenTimeZone,
|
|
30
|
+
widgets: e.widgets,
|
|
31
|
+
name: e.name,
|
|
32
|
+
line: e.line,
|
|
33
|
+
"line-number": e.lineNumber
|
|
34
|
+
}), null, 16, ["target", "parameters", "settings", "screen-values", "screen-time-zone", "widgets", "name", "line", "line-number"]))), 128))
|
|
35
|
+
], 4);
|
|
36
|
+
}
|
|
37
|
+
const N = /* @__PURE__ */ g(y, [["render", h]]);
|
|
38
|
+
export {
|
|
39
|
+
N as default
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=HorizontalWidget-D31NRWy5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HorizontalWidget-D31NRWy5.js","sources":["../src/widgets/HorizontalWidget.vue"],"sourcesContent":["<!--\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 ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <component\n v-for=\"(widget, index) in widgets\"\n v-bind=\"listeners\"\n :key=\"index\"\n :is=\"widget.type\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n :line=\"widget.line\"\n :line-number=\"widget.lineNumber\"\n />\n </div>\n</template>\n\n<script>\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n created: function () {\n if (this.parameters[0]) {\n let margin = this.parameters[0]\n this.widgets.forEach((widget) => {\n // Don't push MARGIN on a widget that's already defined it\n const found = widget.settings.find(\n (setting) =>\n setting[0] === 'MARGIN' ||\n (setting[0] === 'RAW' &&\n setting[1].toUpperCase().includes('MARGIN')),\n )\n if (found === undefined) {\n widget.settings.push(['MARGIN', margin])\n }\n })\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","margin","widget","setting","_createElementBlock","_normalizeStyle","_ctx","_openBlock","_Fragment","_renderList","index","_createBlock","_resolveDynamicComponent","_mergeProps"],"mappings":";;;AA4CA,MAAKA,IAAU;AAAA,EACb,QAAQ,CAACC,CAAM;AAAA,EACf,SAAS,WAAY;AACnB,QAAI,KAAK,WAAW,CAAC,GAAG;AACtB,UAAIC,IAAS,KAAK,WAAW,CAAC;AAC9B,WAAK,QAAQ,QAAQ,CAACC,MAAW;AAQ/B,QANcA,EAAO,SAAS;AAAA,UAC5B,CAACC,MACCA,EAAQ,CAAC,MAAM,YACdA,EAAQ,CAAC,MAAM,SACdA,EAAQ,CAAC,EAAE,YAAa,EAAC,SAAS,QAAQ;AAAA,QAChD,MACc,UACZD,EAAO,SAAS,KAAK,CAAC,UAAUD,CAAM,CAAC;AAAA,MAE1C,CAAA;AAAA,IACH;AAAA,EACD;AACH;;cAxCEG,EAgBM,OAAA;AAAA,IAhBD,KAAI;AAAA,IAAY,OAAM;AAAA,IAAmB,OAvBhDC,EAuBuDC,EAAa,aAAA;AAAA;KAChEC,EAAA,EAAA,GAAAH,EAcEI,SAtCNC,EAyBgCH,EAAA,SAzBhC,CAyBcJ,GAAQQ,YADlBC,EAxBJC,EA4BWV,EAAO,IAAI,GAJlBW,EAcE,EAtCN,SAAA,MA0BcP,EAAS,WAAA;AAAA,MAChB,KAAKI;AAAA,MAEL,QAAQR,EAAO;AAAA,MACf,YAAYA,EAAO;AAAA,MACnB,UAAUA,EAAO;AAAA,MACjB,iBAAeI,EAAY;AAAA,MAC3B,oBAAkBA,EAAc;AAAA,MAChC,SAASJ,EAAO;AAAA,MAChB,MAAMA,EAAO;AAAA,MACb,MAAMA,EAAO;AAAA,MACb,eAAaA,EAAO;AAAA;;;;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import r from "./HorizontalWidget-D31NRWy5.js";
|
|
2
|
+
import { L as i } from "./Layout-Bh7VzCZd.js";
|
|
3
|
+
import { resolveComponent as n, createElementBlock as a, openBlock as l, createVNode as t, normalizeStyle as m, withCtx as p, createTextVNode as c, toDisplayString as d, mergeProps as g } from "vue";
|
|
4
|
+
import { _ as u } from "./CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-CHgC5LLL.js";
|
|
5
|
+
const f = {
|
|
6
|
+
mixins: [i],
|
|
7
|
+
components: {
|
|
8
|
+
HorizontalWidget: r
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
function _(e, v, z, b, w, y) {
|
|
12
|
+
const o = n("v-banner"), s = n("horizontal-widget");
|
|
13
|
+
return l(), a("div", null, [
|
|
14
|
+
t(o, {
|
|
15
|
+
class: "boxbanner",
|
|
16
|
+
style: m(e.computedStyle),
|
|
17
|
+
"single-line": ""
|
|
18
|
+
}, {
|
|
19
|
+
default: p(() => [
|
|
20
|
+
c(d(e.parameters[0]), 1)
|
|
21
|
+
]),
|
|
22
|
+
_: 1
|
|
23
|
+
}, 8, ["style"]),
|
|
24
|
+
t(s, g(e.listeners, {
|
|
25
|
+
parameters: e.parameters.slice(1),
|
|
26
|
+
settings: e.appliedSettings,
|
|
27
|
+
widgets: e.widgets,
|
|
28
|
+
"screen-values": e.screenValues,
|
|
29
|
+
"screen-time-zone": e.screenTimeZone,
|
|
30
|
+
"screen-id": e.screenId
|
|
31
|
+
}), null, 16, ["parameters", "settings", "widgets", "screen-values", "screen-time-zone", "screen-id"])
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
const k = /* @__PURE__ */ u(f, [["render", _], ["__scopeId", "data-v-e9e6c14b"]]);
|
|
35
|
+
export {
|
|
36
|
+
k as default
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=HorizontalboxWidget-Br8dSVHD.js.map
|