cosmosc2-tool-tlmviewer 5.0.4 → 5.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/756.js","mappings":"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","sources":["webpack://@cosmosc2/tool-tlmviewer/../../node_modules/@cosmosc2/tool-common/src/components/widgets/ sync nonrecursive [A-Z]\\w+Widget\\.vue$","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ButtonWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ImageLoader.js","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/Layout.js","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VWidget.js","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/Widget.js","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/WidthSetter.js","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/services/api.js","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/services/axios.js","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/services/cable.js","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/services/cosmos-api.js","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/DetailsDialog.vue?88c8","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/DetailsDialog.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/DetailsDialog.vue?7eb0","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/DetailsDialog.vue?fdbd","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ArrayWidget.vue?4c4c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ArrayWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ArrayWidget.vue?1d9c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ArrayWidget.vue?c2e2","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/BlockWidget.vue?6f2e","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/BlockWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/BlockWidget.vue?74fc","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/BlockWidget.vue?705e","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ButtonWidget.vue?32a1","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ButtonWidget.vue?bbf4","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ButtonWidget.vue?657c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasWidget.vue?6840","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasWidget.vue?96eb","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasWidget.vue?b24b","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasdotWidget.vue?c855","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasdotWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasdotWidget.vue?f77f","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasdotWidget.vue?7b79","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasimageWidget.vue?9557","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasimageWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasimageWidget.vue?7945","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasimageWidget.vue?1a28","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasimagevalueWidget.vue?60fa","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasimagevalueWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasimagevalueWidget.vue?cde7","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasimagevalueWidget.vue?7ad0","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslabelWidget.vue?ae84","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslabelWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslabelWidget.vue?4737","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslabelWidget.vue?ef6c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslabelvalueWidget.vue?a641","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslabelvalueWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslabelvalueWidget.vue?d01c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslabelvalueWidget.vue?790a","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslineWidget.vue?72cb","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslineWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslineWidget.vue?08a0","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslineWidget.vue?159d","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslinevalueWidget.vue?3f88","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslinevalueWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslinevalueWidget.vue?5671","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvaslinevalueWidget.vue?11ac","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CheckbuttonWidget.vue?3472","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CheckbuttonWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CheckbuttonWidget.vue?2faf","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CheckbuttonWidget.vue?9d18","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ComboboxWidget.vue?30fa","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ComboboxWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ComboboxWidget.vue?7434","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ComboboxWidget.vue?9966","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/DynamicWidget.vue?18e4","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/DynamicWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/DynamicWidget.vue?73b2","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/DynamicWidget.vue?5451","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/FormatvalueWidget.vue?99ca","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/FormatvalueWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/FormatvalueWidget.vue?b95e","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/FormatvalueWidget.vue?5f21","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/HorizontalWidget.vue?8944","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/HorizontalWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/HorizontalWidget.vue?0fa2","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/HorizontalWidget.vue?d216","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/HorizontalboxWidget.vue?9fa8","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/HorizontalboxWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/HorizontalboxWidget.vue?7425","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/HorizontalboxWidget.vue?5d62","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/IframeWidget.vue?9962","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/IframeWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/IframeWidget.vue?d58d","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/IframeWidget.vue?b562","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ImageviewerWidget.vue?9ab6","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ImageviewerWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ImageviewerWidget.vue?febe","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ImageviewerWidget.vue?44a4","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?f72a","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?1e32","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?800c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelledWidget.vue?762e","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelledWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelledWidget.vue?bbfa","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelledWidget.vue?b322","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelprogressbarWidget.vue?a595","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelprogressbarWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelprogressbarWidget.vue?519f","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelprogressbarWidget.vue?c6eb","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue?cd0d","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue?4fd8","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue?19fc","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluedescWidget.vue?7af1","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluedescWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluedescWidget.vue?ec8d","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluedescWidget.vue?b3f5","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?00b3","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?cc59","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?495e","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitscolumnWidget.vue?f487","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitscolumnWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitscolumnWidget.vue?c485","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitscolumnWidget.vue?070a","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluerangebarWidget.vue?196c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluerangebarWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluerangebarWidget.vue?4be4","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelvaluerangebarWidget.vue?3d79","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LedWidget.vue?b5e5","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LedWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LedWidget.vue?7d53","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LedWidget.vue?3c24","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?2de4","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?584c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?56ec","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolorWidget.vue?63b9","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolorWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolorWidget.vue?663c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolorWidget.vue?84b7","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolumnWidget.vue?b4c9","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolumnWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolumnWidget.vue?8672","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolumnWidget.vue?5d8f","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LinegraphWidget.vue?a979","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/Graph.vue?d2ad","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/DateTimeChooser.vue?40c6","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/DateTimeChooser.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/DateTimeChooser.vue?2f38","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/DateTimeChooser.vue?f834","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/Graph.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/Graph.vue?25dc","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/Graph.vue?0667","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LinegraphWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LinegraphWidget.vue?3733","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LinegraphWidget.vue?5590","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/MatrixbycolumnsWidget.vue?2e2b","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/MatrixbycolumnsWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/MatrixbycolumnsWidget.vue?5b11","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/MatrixbycolumnsWidget.vue?8e7f","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ProgressbarWidget.vue?7200","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ProgressbarWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ProgressbarWidget.vue?94ed","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ProgressbarWidget.vue?283b","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RadiobuttonWidget.vue?6b10","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RadiobuttonWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RadiobuttonWidget.vue?4cd3","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RadiobuttonWidget.vue?abe3","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RadiogroupWidget.vue?d8d6","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RadiogroupWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RadiogroupWidget.vue?fbe0","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RadiogroupWidget.vue?b904","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RangebarWidget.vue?1502","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RangebarWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RangebarWidget.vue?b89c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RangebarWidget.vue?51aa","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ScrollwindowWidget.vue?7860","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ScrollwindowWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ScrollwindowWidget.vue?5ed1","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ScrollwindowWidget.vue?1ae4","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/SectionheaderWidget.vue?ed1f","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/SectionheaderWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/SectionheaderWidget.vue?e6d2","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/SectionheaderWidget.vue?5c86","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/SpacerWidget.vue?406c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/SpacerWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/SpacerWidget.vue?3573","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/SpacerWidget.vue?49c7","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TabbookWidget.vue?ae3e","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TabbookWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TabbookWidget.vue?6fee","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TabbookWidget.vue?f966","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TextboxWidget.vue?d762","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TextboxWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TextboxWidget.vue?b40d","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TextboxWidget.vue?a43e","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TextfieldWidget.vue?777d","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TextfieldWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TextfieldWidget.vue?eebc","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TextfieldWidget.vue?da48","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TitleWidget.vue?a136","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TitleWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TitleWidget.vue?7f2a","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TitleWidget.vue?ed11","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?26e5","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?5139","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?0a72","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuelimitsbarWidget.vue?51f5","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuelimitsbarWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuelimitsbarWidget.vue?7cc5","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuelimitsbarWidget.vue?ce92","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuelimitscolumnWidget.vue?d011","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuelimitscolumnWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuelimitscolumnWidget.vue?89a9","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuelimitscolumnWidget.vue?4c45","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuerangebarWidget.vue?ede7","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuerangebarWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuerangebarWidget.vue?3546","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValuerangebarWidget.vue?aa05","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VerticalWidget.vue?853e","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VerticalWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VerticalWidget.vue?924e","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VerticalWidget.vue?db06","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VerticalboxWidget.vue?541a","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VerticalboxWidget.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VerticalboxWidget.vue?f5a2","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VerticalboxWidget.vue?0af6","webpack://@cosmosc2/tool-tlmviewer/./src/tools/TlmViewer/TlmViewer.vue?8780","webpack://@cosmosc2/tool-tlmviewer/./src/tools/TlmViewer/CosmosScreen.vue?a182","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/services/config-parser.js","webpack://@cosmosc2/tool-tlmviewer/src/tools/TlmViewer/CosmosScreen.vue","webpack://@cosmosc2/tool-tlmviewer/./src/tools/TlmViewer/CosmosScreen.vue?ec27","webpack://@cosmosc2/tool-tlmviewer/./src/tools/TlmViewer/CosmosScreen.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?d129","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?b667","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?6158","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?36c2","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?e52f","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?65b7","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/TopBar.vue?0cb9","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/TopBar.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/TopBar.vue?adab","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/TopBar.vue?dfc0","webpack://@cosmosc2/tool-tlmviewer/src/tools/TlmViewer/TlmViewer.vue","webpack://@cosmosc2/tool-tlmviewer/./src/tools/TlmViewer/TlmViewer.vue?f30b","webpack://@cosmosc2/tool-tlmviewer/./src/tools/TlmViewer/TlmViewer.vue","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/DetailsDialog.vue?82b3","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/Graph.vue?c2ce","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/Graph.vue?7ecd","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/TopBar.vue?8c14","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ArrayWidget.vue?743f","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/BlockWidget.vue?4924","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/HorizontalboxWidget.vue?07cd","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?6b70","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LedWidget.vue?cb9c","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolorWidget.vue?d93b","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TextboxWidget.vue?6b3d","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VerticalboxWidget.vue?f662","webpack://@cosmosc2/tool-tlmviewer/./src/tools/TlmViewer/CosmosScreen.vue?2772","webpack://@cosmosc2/tool-tlmviewer/./src/tools/TlmViewer/TlmViewer.vue?60d0","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasWidget.vue?94ad","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?cdf2","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolumnWidget.vue?792e","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RangebarWidget.vue?04fb","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?9001","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/DetailsDialog.vue?dfc1","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/Graph.vue?6ce6","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/Graph.vue?310f","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/TopBar.vue?89b9","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ArrayWidget.vue?4ae6","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/BlockWidget.vue?de92","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/HorizontalboxWidget.vue?9cf2","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?b8ed","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LedWidget.vue?5124","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolorWidget.vue?65b3","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/TextboxWidget.vue?9e58","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/VerticalboxWidget.vue?74ed","webpack://@cosmosc2/tool-tlmviewer/./src/tools/TlmViewer/CosmosScreen.vue?35a1","webpack://@cosmosc2/tool-tlmviewer/./src/tools/TlmViewer/TlmViewer.vue?a788","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/CanvasWidget.vue?1465","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?30f4","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/LimitscolumnWidget.vue?be8b","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/RangebarWidget.vue?f580","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?2dbb"],"sourcesContent":["var map = {\n\t\"./ArrayWidget.vue\": 1358,\n\t\"./BlockWidget.vue\": 25393,\n\t\"./ButtonWidget.vue\": 74350,\n\t\"./CanvasWidget.vue\": 98494,\n\t\"./CanvasdotWidget.vue\": 8176,\n\t\"./CanvasimageWidget.vue\": 38116,\n\t\"./CanvasimagevalueWidget.vue\": 45467,\n\t\"./CanvaslabelWidget.vue\": 92739,\n\t\"./CanvaslabelvalueWidget.vue\": 31981,\n\t\"./CanvaslineWidget.vue\": 83003,\n\t\"./CanvaslinevalueWidget.vue\": 68605,\n\t\"./CheckbuttonWidget.vue\": 604,\n\t\"./ComboboxWidget.vue\": 62229,\n\t\"./DynamicWidget.vue\": 60393,\n\t\"./FormatvalueWidget.vue\": 77451,\n\t\"./HorizontalWidget.vue\": 1297,\n\t\"./HorizontalboxWidget.vue\": 30978,\n\t\"./IframeWidget.vue\": 30443,\n\t\"./ImageviewerWidget.vue\": 86735,\n\t\"./LabelWidget.vue\": 13520,\n\t\"./LabelledWidget.vue\": 62915,\n\t\"./LabelprogressbarWidget.vue\": 86632,\n\t\"./LabelvalueWidget.vue\": 97701,\n\t\"./LabelvaluedescWidget.vue\": 43949,\n\t\"./LabelvaluelimitsbarWidget.vue\": 81579,\n\t\"./LabelvaluelimitscolumnWidget.vue\": 43288,\n\t\"./LabelvaluerangebarWidget.vue\": 53249,\n\t\"./LedWidget.vue\": 67146,\n\t\"./LimitsbarWidget.vue\": 62570,\n\t\"./LimitscolorWidget.vue\": 61873,\n\t\"./LimitscolumnWidget.vue\": 5290,\n\t\"./LinegraphWidget.vue\": 10761,\n\t\"./MatrixbycolumnsWidget.vue\": 31110,\n\t\"./ProgressbarWidget.vue\": 34,\n\t\"./RadiobuttonWidget.vue\": 40102,\n\t\"./RadiogroupWidget.vue\": 6305,\n\t\"./RangebarWidget.vue\": 76117,\n\t\"./ScrollwindowWidget.vue\": 74825,\n\t\"./SectionheaderWidget.vue\": 71354,\n\t\"./SpacerWidget.vue\": 28879,\n\t\"./TabbookWidget.vue\": 59181,\n\t\"./TextboxWidget.vue\": 9669,\n\t\"./TextfieldWidget.vue\": 52872,\n\t\"./TitleWidget.vue\": 86690,\n\t\"./ValueWidget.vue\": 7720,\n\t\"./ValuelimitsbarWidget.vue\": 84907,\n\t\"./ValuelimitscolumnWidget.vue\": 26756,\n\t\"./ValuerangebarWidget.vue\": 46963,\n\t\"./VerticalWidget.vue\": 59314,\n\t\"./VerticalboxWidget.vue\": 25637\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 13644;","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-btn class=\"ma-1\" color=\"primary\" :style=\"computedStyle\" @click=\"onClick\">\n {{ buttonText }}\n </v-btn>\n <v-dialog v-model=\"displaySendHazardous\" max-width=\"300\">\n <v-card class=\"pa-3\">\n <v-card-title class=\"headline\">Hazardous</v-card-title>\n <v-card-text> Warning: Command is Hazardous. Send? </v-card-text>\n <v-btn @click=\"sendHazardousCmd\" class=\"primary mr-4\">Yes</v-btn>\n <v-btn @click=\"cancelHazardousCmd\" class=\"primary\">No</v-btn>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { CosmosApi } from '../../services/cosmos-api'\nimport Api from '../../services/api'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n api: null,\n screen: null,\n displaySendHazardous: false,\n lastCmd: '',\n }\n },\n computed: {\n buttonText() {\n return this.parameters[0]\n },\n eval() {\n return this.parameters[1]\n },\n },\n created() {\n this.api = new CosmosApi()\n // Look through the settings and get a reference to the screen\n this.settings.forEach((setting) => {\n if (setting[0] === 'SCREEN') {\n this.screen = setting[1]\n }\n })\n },\n methods: {\n onClick() {\n const lines = this.eval.split(';;')\n // Create local references to variables so users don't need to use 'this'\n const self = this // needed for $emit\n const screen = this.screen\n const api = this.api\n const run_script = this.runScript\n lines.forEach((line) => {\n const result = eval(line.trim())\n if (result instanceof Promise) {\n result\n .then((success) => {})\n .catch((err) => {\n // This text is in top_level.rb HazardousError.to_s\n if (err.message.includes('is Hazardous')) {\n this.lastCmd = err.message.split('\\n').pop()\n this.displaySendHazardous = true\n }\n })\n }\n })\n },\n sendHazardousCmd() {\n this.displaySendHazardous = false\n // TODO: This only handles basic cmd() calls in buttons, do we need to handle other? cmd_raw()?\n this.lastCmd = this.lastCmd.replace(\n 'cmd(',\n 'this.api.cmd_no_hazardous_check('\n )\n eval(this.lastCmd)\n },\n cancelHazardousCmd() {\n this.displaySendHazardous = false\n },\n runScript(scriptName, openScript = true) {\n Api.post(`/script-api/scripts/${scriptName}/run`).then((response) => {\n if (openScript) {\n window.open(`/tools/scriptrunner/${response.data}`, '_blank')\n }\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport Api from '../../services/api'\n\nexport default {\n props: {\n target: {\n type: String,\n require: true,\n },\n },\n methods: {\n getPresignedUrl: async function (fileName) {\n const response = await Api.get(\n `/cosmos-api/storage/download/${encodeURIComponent(\n `${localStorage.scope}/targets/${this.target}/public/${fileName}`\n )}?bucket=config`\n )\n return response.data.url\n },\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport Widget from './Widget'\nexport default {\n mixins: [Widget],\n props: {\n widgets: {\n type: Array,\n default: () => [],\n },\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport Widget from './Widget'\nimport 'sprintf-js'\nexport default {\n mixins: [Widget],\n // ValueWidget can either get it's value and limitsState directly through props\n // or it will register itself in the Vuex store and be updated asyncronously\n props: {\n value: {\n default: null,\n },\n limitsState: {\n type: String,\n default: null,\n },\n formatString: null,\n },\n data() {\n return {\n valueId: null,\n colorBlind: false,\n viewDetails: false,\n contextMenuShown: false,\n x: 0,\n y: 0,\n contextMenuOptions: [\n {\n title: 'Details',\n action: () => {\n this.contextMenuShown = false\n this.viewDetails = true\n },\n },\n {\n title: 'Graph',\n action: () => {\n window.open(\n '/tools/tlmgrapher/' +\n this.parameters[0] +\n '/' +\n this.parameters[1] +\n '/' +\n this.parameters[2],\n '_blank'\n )\n },\n },\n ],\n }\n },\n computed: {\n _value: function () {\n let value = this.value\n if (value === null) {\n if (this.$store.state.tlmViewerValues[this.valueId]) {\n value = this.$store.state.tlmViewerValues[this.valueId][0]\n } else {\n value = null\n }\n }\n const formatted = this.formatValue(value)\n if (localStorage.colorblindMode === 'true' && this.limitsLetter !== '') {\n return `${formatted} (${this.limitsLetter})`\n }\n return formatted\n },\n valueClass: function () {\n return 'value shrink pa-1 ' + 'cosmos-' + this.limitsColor\n },\n limitsColor() {\n let limitsState = this.limitsState\n if (limitsState === null) {\n if (this.$store.state.tlmViewerValues[this.valueId]) {\n limitsState = this.$store.state.tlmViewerValues[this.valueId][1]\n } else {\n limitsState = null\n }\n }\n if (limitsState != null) {\n switch (limitsState) {\n case 'GREEN':\n case 'GREEN_HIGH':\n case 'GREEN_LOW':\n return 'green'\n case 'YELLOW':\n case 'YELLOW_HIGH':\n case 'YELLOW_LOW':\n return 'yellow'\n case 'RED':\n case 'RED_HIGH':\n case 'RED_LOW':\n return 'red'\n case 'BLUE':\n return 'blue'\n case 'STALE':\n return 'purple'\n default:\n return 'white'\n }\n }\n return ''\n },\n limitsLetter() {\n let limitsState = this.limitsState\n if (limitsState === null) {\n if (this.$store.state.tlmViewerValues[this.valueId]) {\n limitsState = this.$store.state.tlmViewerValues[this.valueId][1]\n } else {\n limitsState = null\n }\n }\n if (limitsState != null) {\n let c = limitsState.charAt(0)\n if (limitsState.endsWith('_LOW')) {\n c = c.toLowerCase()\n }\n return c\n }\n return ''\n },\n },\n created() {\n // If they're not passing us the value and limitsState we have to register\n if (this.value === null || this.limitsState === null) {\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${\n this.parameters[2]\n }__${this.getType()}`\n\n this.$store.commit('tlmViewerAddItem', this.valueId)\n }\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n },\n methods: {\n getType() {\n var type = 'WITH_UNITS'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n return type\n },\n formatValue(value) {\n if (Object.prototype.toString.call(value).slice(8, -1) === 'Array') {\n let result = '['\n for (let i = 0; i < value.length; i++) {\n if (\n Object.prototype.toString.call(value[i]).slice(8, -1) === 'String'\n ) {\n result += '\"' + value[i] + '\"'\n } else {\n result += value[i]\n }\n if (i != value.length - 1) {\n result += ', '\n }\n }\n result += ']'\n return result\n } else if (\n Object.prototype.toString.call(value).slice(8, -1) === 'Object'\n ) {\n return ''\n } else {\n if (this.formatString && value) {\n return sprintf(this.formatString, value)\n } else {\n return '' + value\n }\n }\n },\n showContextMenu(e) {\n e.preventDefault()\n this.contextMenuShown = false\n this.x = e.clientX\n this.y = e.clientY\n this.$nextTick(() => {\n this.contextMenuShown = true\n })\n },\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nexport default {\n props: {\n widgetIndex: {\n type: Number,\n default: null,\n },\n parameters: {\n type: Array,\n default: () => [],\n },\n settings: {\n type: Array,\n default: () => [],\n },\n },\n computed: {\n computedStyle() {\n let style = {}\n this.settings.forEach((setting) => {\n const index = parseInt(setting[0])\n if (this.widgetIndex !== null) {\n if (this.widgetIndex === index) {\n setting = setting.slice(1)\n } else {\n return\n }\n }\n switch (setting[0]) {\n case 'TEXTALIGN':\n style['text-align'] = setting[1].toLowerCase()\n break\n case 'PADDING':\n style['padding'] = setting[1] + 'px !important'\n break\n case 'MARGIN':\n style['margin'] = setting[1] + 'px !important'\n break\n case 'BACKCOLOR':\n style['background-color'] = this.getColor(setting.slice(1))\n break\n case 'TEXTCOLOR':\n style['color'] = this.getColor(setting.slice(1))\n break\n case 'BORDERCOLOR':\n style['border-width'] = '1px'\n style['border-style'] = 'solid'\n style['border-color'] = this.getColor(setting.slice(1))\n break\n case 'WIDTH':\n style['width'] = setting[1] + 'px !important'\n break\n case 'HEIGHT':\n style['height'] = setting[1] + 'px !important'\n break\n case 'RAW':\n style[setting[1].toLowerCase()] = setting[2]\n break\n }\n })\n return style\n },\n },\n methods: {\n // Expects an array, can either be a single color or 3 rgb values\n getColor(setting) {\n switch (setting.length) {\n case 1:\n return setting[0].toLowerCase()\n case 3:\n return `rgb(${setting[0]},${setting[1]},${setting[2]})`\n }\n },\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nexport default {\n data: function () {\n return {\n originalWidthSetting: null,\n }\n },\n created: function () {\n this.originalWidthSetting = ['WIDTH', this.width]\n this.resetWidth()\n },\n beforeUpdate: function () {\n this.resetWidth()\n },\n methods: {\n resetWidth: function () {\n // This sets 'WIDTH' when it gets created, but that is lost if it gets\n // re-rendered by CosmosScreen.vue parsing the config string again\n if (!this.settings.some((setting) => setting[0] === 'WIDTH')) {\n this.settings.unshift(this.originalWidthSetting)\n }\n },\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from './axios.js'\n\nconst request = async function (\n method,\n url,\n { data, params = {}, headers, noAuth = false, noScope = false } = {}\n) {\n if (!noAuth) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n headers['Authorization'] = localStorage.cosmosToken\n }\n if (!noScope && !params['scope']) {\n params['scope'] = localStorage.scope\n }\n return axios({\n method,\n url,\n data,\n params,\n headers,\n })\n}\n\nconst acceptOnlyDefaultHeaders = {\n Accept: 'application/json',\n}\n\nconst fullDefaultHeaders = {\n ...acceptOnlyDefaultHeaders,\n 'Content-Type': 'application/json',\n}\n\nexport default {\n get: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('get', path, { params, headers, noScope, noAuth })\n },\n\n put: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('put', path, { data, params, headers, noScope, noAuth })\n },\n\n post: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('post', path, { data, params, headers, noScope, noAuth })\n },\n\n delete: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('delete', path, { params, headers, noScope, noAuth })\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from 'axios'\nimport Vue from 'vue'\n\nconst vueInstance = new Vue()\n\nconst axiosInstance = axios.create({\n baseURL: location.origin,\n timeout: 60000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n if (error.response.status === 401) {\n delete localStorage.cosmosToken\n CosmosAuth.login(location.href)\n } else {\n // Individual tools can set axiosIgnoreResponse to an error code\n // they potentially expect, e.g. '404', in which case we ignore it\n // Since localStorage only supports strings call toString on the status\n if (\n localStorage.axiosIgnoreResponse === error.response.status.toString()\n ) {\n return Promise.reject(error)\n }\n let body = `HTTP ${error.response.status} - `\n if (error.response?.statusText) {\n body += `${error.response.statusText} `\n }\n if (error.response?.config?.data) {\n body += `${error.response.config.data} `\n }\n if (error.response?.data?.message) {\n body += `${error.response.data.message}`\n } else if (error.response?.data?.exception) {\n body += `${error.response.data.exception}`\n } else if (error.response?.data?.error?.message) {\n if (error.response.data.error.class) {\n body += `${error.response.data.error.class} `\n }\n body += `${error.response.data.error.message}`\n } else {\n body += `${error.response?.data}`\n }\n vueInstance.$notify.serious({\n title: 'Network error',\n body,\n })\n }\n throw error\n } else {\n throw error\n }\n }\n)\n\nexport default axiosInstance\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport * as ActionCable from '@rails/actioncable'\n//ActionCable.logger.enabled = true\nActionCable.ConnectionMonitor.staleThreshold = 60\n\nexport default class Cable {\n constructor(url = '/cosmos-api/cable') {\n this._cable = ActionCable.createConsumer(url)\n }\n disconnect() {\n this._cable.disconnect()\n }\n createSubscription(channel, scope, callbacks = {}, additionalOptions = {}) {\n return CosmosAuth.updateToken(CosmosAuth.defaultMinValidity).then(() => {\n return this._cable.subscriptions.create(\n {\n channel,\n scope,\n token: localStorage.cosmosToken,\n ...additionalOptions,\n },\n callbacks\n )\n })\n }\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from './axios.js'\n\nexport class CosmosApi {\n id = 1\n\n constructor() {}\n\n // This is hacky Json-rpc for now. Should probably use a jsonrpc library.\n async exec(method, params, kwparams = {}) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n this.id = this.id + 1\n try {\n kwparams['scope'] = localStorage.scope\n const response = await axios.post(\n '/cosmos-api/api',\n {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: this.id,\n keyword_params: kwparams,\n },\n {\n headers: {\n Authorization: localStorage.cosmosToken,\n 'Content-Type': 'application/json-rpc',\n },\n }\n )\n // var data = response.data\n // if (data.error) {\n // var err = new Error()\n // err.name = data.error.data.class\n // err.message = data.error.data.message\n // console.log(data.error.data.backtrace.join('\\n'))\n // throw err\n // }\n return response.data.result\n } catch (error) {\n var err = new Error()\n if (error.response) {\n // The request was made and the server responded with a\n // status code that falls out of the range of 2xx\n err.name = error.response.data.error.data.class\n err.message = error.response.data.error.data.message\n } else if (error.request) {\n // The request was made but no response was received, `error.request`\n // is an instance of XMLHttpRequest in the browser and an instance\n // of http.ClientRequest in Node.js\n err.name = 'Request error'\n err.message = 'Request error, no response received'\n } else {\n // Something happened in setting up the request and triggered an Error\n err.name = 'Unknown error'\n }\n //console.log(error)\n throw err\n }\n }\n\n decode_cosmos_type(val) {\n if (val !== null && typeof val === 'object') {\n if (val.json_class == 'Float' && val.raw) {\n if (val.raw == 'NaN') {\n return NaN\n } else if (val.raw == 'Infinity') {\n return Infinity\n } else if (val.raw == '-Infinity') {\n return -Infinity\n }\n }\n }\n return null\n }\n\n encode_cosmos_type(val) {\n if (Number.isNaN(val)) {\n return { json_class: 'Float', raw: 'NaN' }\n } else if (val == Number.POSITIVE_INFINITY) {\n return { json_class: 'Float', raw: 'Infinity' }\n } else if (val == Number.NEGATIVE_INFINITY) {\n return { json_class: 'Float', raw: '-Infinity' }\n }\n return null\n }\n\n // ***********************************************\n // The following APIs are used by the CmdTlmServer\n // ***********************************************\n get_all_interface_info() {\n return this.exec('get_all_interface_info', [])\n }\n\n connect_interface(interface_name) {\n return this.exec('connect_interface', [interface_name])\n }\n\n disconnect_interface(interface_name) {\n return this.exec('disconnect_interface', [interface_name])\n }\n\n get_all_router_info() {\n return this.exec('get_all_router_info', [])\n }\n\n connect_router(router_name) {\n return this.exec('connect_router', [router_name])\n }\n\n disconnect_router(router_name) {\n return this.exec('disconnect_router', [router_name])\n }\n\n get_all_target_info() {\n return this.exec('get_all_target_info', [])\n }\n\n get_all_cmd_info() {\n return this.exec('get_all_cmd_info', [])\n }\n\n get_all_tlm_info() {\n return this.exec('get_all_tlm_info', [])\n }\n\n get_item(target, packet, item) {\n return this.exec('get_item', [target, packet, item])\n }\n\n get_parameter(target, packet, item) {\n return this.exec('get_parameter', [target, packet, item])\n }\n\n get_all_packet_logger_info() {\n return this.exec('get_all_packet_logger_info', [])\n }\n\n start_logging() {\n return this.exec('start_logging', [])\n }\n\n stop_logging() {\n return this.exec('stop_logging', [])\n }\n\n start_cmd_log(log_writer_name) {\n return this.exec('start_cmd_log', [log_writer_name])\n }\n\n start_tlm_log(log_writer_name) {\n return this.exec('start_tlm_log', [log_writer_name])\n }\n\n stop_cmd_log(log_writer_name) {\n return this.exec('stop_cmd_log', [log_writer_name])\n }\n\n stop_tlm_log(log_writer_name) {\n return this.exec('stop_tlm_log', [log_writer_name])\n }\n\n get_server_status() {\n return this.exec('get_server_status', [])\n }\n\n get_limits_sets() {\n return this.exec('get_limits_sets', [])\n }\n\n get_limits_set() {\n return this.exec('get_limits_set', [])\n }\n\n set_limits_set(limits_set) {\n return this.exec('set_limits_set', [limits_set])\n }\n\n get_background_tasks() {\n return this.exec('get_background_tasks', [])\n }\n\n start_background_task(name) {\n return this.exec('start_background_task', [name])\n }\n\n stop_background_task(name) {\n return this.exec('stop_background_task', [name])\n }\n\n // ***********************************************\n // End CmdTlmServer APIs\n // ***********************************************\n\n get_oldest_logfile() {\n return this.exec('get_oldest_logfile', [])\n }\n\n get_target(target_name) {\n return this.exec('get_target', [target_name])\n }\n\n get_target_list() {\n return this.exec('get_target_list', [])\n }\n\n get_telemetry(target_name, packet_name) {\n return this.exec('get_telemetry', [target_name, packet_name])\n }\n\n get_all_telemetry(target_name) {\n return this.exec('get_all_telemetry', [target_name])\n }\n\n get_all_telemetry_list(target_name) {\n return this.exec('get_all_telemetry_list', [target_name])\n }\n\n // Called by PacketViewerComponent\n async get_tlm_packet(target_name, packet_name, value_type) {\n const data = await this.exec('get_tlm_packet', [target_name, packet_name], {\n type: value_type,\n })\n // Make sure data isn't null or undefined. Note this is the only valid use of == or !=\n if (data != null) {\n var len = data.length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_cosmos_type(data[i][1])\n if (converted !== null) {\n data[i][1] = converted\n }\n }\n }\n return data\n }\n\n // Called by PacketViewerComponent\n get_packet_derived_items(target_name, packet_name) {\n return this.exec('get_packet_derived_items', [target_name, packet_name])\n }\n\n // Called by CmdTlmServer Tlm Packets tab\n get_tlm_buffer(target_name, packet_name) {\n return this.exec('get_tlm_buffer', [target_name, packet_name])\n }\n\n // Called by CosmosScreenComponent\n async get_tlm_values(items) {\n const data = await this.exec('get_tlm_values', [items])\n var len = data[0].length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_cosmos_type(data[0][i])\n if (converted !== null) {\n data[0][i] = converted\n }\n }\n return data\n }\n\n // Called by LimitsbarWidget\n get_limits(target_name, packet_name, item_name) {\n return this.exec('get_limits', [target_name, packet_name, item_name])\n }\n\n // Called by LimitsMonitorComponent\n async tlm(target_name, packet_name, item_name) {\n const data = await this.exec('tlm', [target_name, packet_name, item_name])\n var converted = this.decode_cosmos_type(data)\n if (converted !== null) {\n data = converted\n }\n return data\n }\n\n get_all_commands(target_name) {\n return this.exec('get_all_commands', [target_name])\n }\n\n get_all_commands_list(target_name) {\n return this.exec('get_all_commands_list', [target_name])\n }\n\n get_command(target_name, command_name) {\n return this.exec('get_command', [target_name, command_name])\n }\n\n get_cmd_value(\n target_name,\n packet_name,\n parameter_name,\n value_type = 'CONVERTED'\n ) {\n return this.exec('get_cmd_value', [\n target_name,\n packet_name,\n parameter_name,\n value_type,\n ])\n }\n\n // Called by CmdTlmServer Cmd Packets tab\n get_cmd_buffer(target_name, packet_name) {\n return this.exec('get_cmd_buffer', [target_name, packet_name])\n }\n\n // Implementation of functionality shared by cmd methods with param_lists.\n _cmd(method, target_name, command_name, param_list) {\n var converted = null\n for (var key in param_list) {\n if (Object.prototype.hasOwnProperty.call(param_list, key)) {\n converted = this.encode_cosmos_type(param_list[key])\n if (converted !== null) {\n param_list[key] = converted\n }\n }\n }\n return this.exec(method, [target_name, command_name, param_list])\n }\n\n // Called by CmdSenderComponent\n get_cmd_hazardous(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('get_cmd_hazardous', target_name)\n } else {\n return this._cmd(\n 'get_cmd_hazardous',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd', target_name)\n } else {\n return this._cmd('cmd', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw', target_name)\n } else {\n return this._cmd('cmd_raw', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_checks', target_name)\n } else {\n return this._cmd('cmd_no_checks', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_checks', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_checks',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n get_interface_names() {\n return this.exec('get_interface_names', [])\n }\n\n // Called by CmdSenderComponent\n send_raw(interface_name, data) {\n return this.exec('send_raw', [interface_name, data])\n }\n\n list_configs(tool) {\n return this.exec('list_configs', [tool])\n }\n\n load_config(tool, name) {\n return this.exec('load_config', [tool, name])\n }\n\n save_config(tool, name, data) {\n return this.exec('save_config', [tool, name, data])\n }\n\n delete_config(tool, name) {\n return this.exec('delete_config', [tool, name])\n }\n\n get_out_of_limits() {\n return this.exec('get_out_of_limits', [])\n }\n\n get_overall_limits_state(ignored) {\n return this.exec('get_overall_limits_state', [ignored])\n }\n\n list_settings() {\n return this.exec('list_settings', [])\n }\n\n get_all_settings() {\n return this.exec('get_all_settings', [])\n }\n\n get_setting(name) {\n return this.exec('get_setting', [name])\n }\n\n get_settings(array) {\n return this.exec('get_settings', array)\n }\n\n save_setting(name, data) {\n return this.exec('save_setting', [name, data])\n }\n\n // TODO: Currently unused but seemed like a useful function\n async hashString(string) {\n if (window.isSecureContext) {\n // Encode the string as an arrayBuffer which the subtle crypto API uses\n const arrayBuffer = new TextEncoder().encode(string)\n // Use the subtle crypto API to perform a SHA256 Sum of the array buffer\n // The resulting hash is stored in an array buffer\n const hashAsArrayBuffer = await crypto.subtle.digest(\n 'SHA-256',\n arrayBuffer\n )\n // To create a string we will get the hexadecimal value of each byte of the array buffer\n // This gets us an array where each byte of the array buffer becomes one item in the array\n const uint8ViewOfHash = new Uint8Array(hashAsArrayBuffer)\n // We then convert it to a regular array so we can convert each item to hexadecimal strings\n // Where to characters of 0-9 or a-f represent a number between 0 and 16, containing 4 bits of information, so 2 of them is 8 bits (1 byte).\n return Array.from(uint8ViewOfHash)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n // else ?\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Details \")]),_c('v-spacer')],1),_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.targetName)+\" \"+_vm._s(_vm.packetName)+\" \"+_vm._s(_vm.itemName)+\" \")]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.details.description))]),_c('v-card-text',[_c('v-container',{attrs:{\"fluid\":\"\"}},[(_vm.type === 'tlm')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Item Values\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Raw Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.rawValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Converted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.convertedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Formatted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.formattedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"With Units Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.unitsValue))])],1)],1)],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Offset\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_offset))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_size))])],1),(_vm.details.array_size)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Array Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.array_size))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Data Type\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.data_type))])],1),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Minimum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.minimum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Maximum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.maximum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Default\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.default))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Format String\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.format_string))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Read Conversion\")]),(_vm.details.read_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.read_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.read_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Write Conversion\")]),(_vm.details.write_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.write_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.write_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Id Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.id_value))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Full\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units_full))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Abbr\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Endianness\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.endianness))])],1),(_vm.details.states)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.states),function(state,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(state.value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.limits)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.limits),function(limit,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_vm._v(\" \"+_vm._s(_vm.formatLimit(limit))+\" \"),_c('v-col')],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.meta)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.meta),function(value,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col',[_vm._v(\"None\")])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Details </span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-title>\n {{ targetName }} {{ packetName }} {{ itemName }}\n </v-card-title>\n <v-card-subtitle>{{ details.description }}</v-card-subtitle>\n <v-card-text>\n <v-container fluid>\n <v-row no-gutters v-if=\"type === 'tlm'\">\n <v-col cols=\"3\" class=\"label\">Item Values</v-col>\n <v-col />\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Raw Value</v-col>\n <v-col>{{ rawValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Converted Value</v-col>\n <v-col>{{ convertedValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Formatted Value</v-col>\n <v-col>{{ formattedValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">With Units Value</v-col>\n <v-col>{{ unitsValue }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Bit Offset</v-col>\n <v-col>{{ details.bit_offset }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Bit Size</v-col>\n <v-col>{{ details.bit_size }}</v-col>\n </v-row>\n <v-row v-if=\"details.array_size\" no-gutters>\n <v-col cols=\"3\" class=\"label\">Array Size</v-col>\n <v-col>{{ details.array_size }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Data Type</v-col>\n <v-col>{{ details.data_type }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Minimum</v-col>\n <v-col>{{ details.minimum }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Maximum</v-col>\n <v-col>{{ details.maximum }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Default</v-col>\n <v-col>{{ details.default }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Format String</v-col>\n <v-col>{{ details.format_string }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Read Conversion</v-col>\n <v-col v-if=\"details.read_conversion\">\n Class: {{ details.read_conversion.class }}\n <br />\n Params:\n {{ details.read_conversion.params }}\n </v-col>\n <v-col v-else></v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Write Conversion</v-col>\n <v-col v-if=\"details.write_conversion\">\n Class: {{ details.write_conversion.class }}\n <br />\n Params:\n {{ details.write_conversion.params }}\n </v-col>\n <v-col v-else></v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Id Value</v-col>\n <v-col>{{ details.id_value }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Units Full</v-col>\n <v-col>{{ details.units_full }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Units Abbr</v-col>\n <v-col>{{ details.units }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Endianness</v-col>\n <v-col>{{ details.endianness }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.states\">\n <v-col cols=\"3\" class=\"label\">States</v-col>\n <v-col />\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row\n no-gutters\n v-for=\"(state, key) in details.states\"\n :key=\"key\"\n >\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n <v-col>{{ state.value }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters v-else>\n <v-col cols=\"3\" class=\"label\">States</v-col>\n <v-col>None</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.limits\">\n <v-col cols=\"3\" class=\"label\">Limits</v-col>\n <v-col></v-col>\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row\n no-gutters\n v-for=\"(limit, key) in details.limits\"\n :key=\"key\"\n >\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n {{ formatLimit(limit) }}\n <v-col></v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters v-else>\n <v-col cols=\"3\" class=\"label\">Limits</v-col>\n <v-col>None</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.meta\">\n <v-col cols=\"3\" class=\"label\">Meta</v-col>\n <v-col></v-col>\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row no-gutters v-for=\"(value, key) in details.meta\" :key=\"key\">\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n <v-col>{{ value }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row v-else no-gutters>\n <v-col cols=\"3\" class=\"label\">Meta</v-col>\n <v-col>None</v-col>\n </v-row>\n </v-container>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api.js'\n\nexport default {\n props: {\n type: {\n default: 'tlm',\n validator: function (value) {\n // The value must match one of these strings\n return ['cmd', 'tlm'].indexOf(value) !== -1\n },\n },\n targetName: String,\n packetName: String,\n itemName: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n details: Object,\n updater: null,\n rawValue: null,\n convertedValue: null,\n formattedValue: null,\n unitsValue: null,\n }\n },\n computed: {\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n created() {\n this.api = new CosmosApi()\n },\n beforeDestroy() {\n clearInterval(this.updater)\n this.updater = null\n },\n watch: {\n // Create a watcher on value which is the indicator to display the dialog\n // If value is true we request the details from the server\n // If this is a tlm dialog we setup an interval to get the telemetry values\n value: function (newValue, oldValue) {\n if (newValue) {\n this.requestDetails()\n if (this.type === 'tlm') {\n this.updater = setInterval(() => {\n this.api\n .get_tlm_values([\n `${this.targetName}__${this.packetName}__${this.itemName}__RAW`,\n `${this.targetName}__${this.packetName}__${this.itemName}__CONVERTED`,\n `${this.targetName}__${this.packetName}__${this.itemName}__FORMATTED`,\n `${this.targetName}__${this.packetName}__${this.itemName}__WITH_UNITS`,\n ])\n .then((values) => {\n this.rawValue = values[0][0]\n this.convertedValue = values[1][0]\n this.formattedValue = values[2][0]\n this.unitsValue = values[3][0]\n })\n }, 1000)\n }\n } else {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n },\n methods: {\n requestDetails() {\n if (this.type === 'tlm') {\n this.api\n .get_item(this.targetName, this.packetName, this.itemName)\n .then((details) => {\n this.details = details\n })\n } else {\n this.api\n .get_parameter(this.targetName, this.packetName, this.itemName)\n .then((details) => {\n this.details = details\n })\n }\n },\n formatLimit(limit) {\n if (limit.green_low) {\n return (\n 'RL/' +\n limit.red_low +\n ' YL/' +\n limit.yellow_low +\n ' YH/' +\n limit.yellow_high +\n ' RH/' +\n limit.red_high +\n ' GL/' +\n limit.green_low +\n ' GH/' +\n limit.green_high\n )\n } else if (limit.red_low) {\n return (\n 'RL/' +\n limit.red_low +\n ' YL/' +\n limit.yellow_low +\n ' YH/' +\n limit.yellow_high +\n ' RH/' +\n limit.red_high\n )\n } else {\n return limit\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.label {\n font-weight: bold;\n text-transform: capitalize;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DetailsDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DetailsDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DetailsDialog.vue?vue&type=template&id=3eb9665d&scoped=true&\"\nimport script from \"./DetailsDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./DetailsDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DetailsDialog.vue?vue&type=style&index=0&id=3eb9665d&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3eb9665d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-textarea',{class:_vm.valueClass,style:(_vm.computedStyle),attrs:{\"solo\":\"\",\"dense\":\"\",\"readonly\":\"\",\"hide-details\":\"\",\"placeholder\":\"Value\",\"height\":_vm.height,\"value\":_vm._value,\"data-test\":\"array-widget\"},on:{\"contextmenu\":_vm.showContextMenu}}),_c('v-menu',{attrs:{\"position-x\":_vm.x,\"position-y\":_vm.y,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.contextMenuShown),callback:function ($$v) {_vm.contextMenuShown=$$v},expression:\"contextMenuShown\"}},[_c('v-list',_vm._l((_vm.contextMenuOptions),function(item,index){return _c('v-list-item',{key:index,on:{\"click\":function($event){$event.stopPropagation();return item.action.apply(null, arguments)}}},[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)}),1)],1),_c('details-dialog',{attrs:{\"target-name\":_vm.parameters[0],\"packet-name\":_vm.parameters[1],\"item-name\":_vm.parameters[2]},model:{value:(_vm.viewDetails),callback:function ($$v) {_vm.viewDetails=$$v},expression:\"viewDetails\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-textarea\n solo\n dense\n readonly\n hide-details\n placeholder=\"Value\"\n :height=\"height\"\n :value=\"_value\"\n :class=\"valueClass\"\n :style=\"computedStyle\"\n data-test=\"array-widget\"\n @contextmenu=\"showContextMenu\"\n />\n <v-menu\n v-model=\"contextMenuShown\"\n :position-x=\"x\"\n :position-y=\"y\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n :target-name=\"parameters[0]\"\n :packet-name=\"parameters[1]\"\n :item-name=\"parameters[2]\"\n v-model=\"viewDetails\"\n />\n </div>\n</template>\n\n<script>\nimport VWidget from './VWidget'\nimport WidthSetter from './WidthSetter'\nimport DetailsDialog from '../../components/DetailsDialog'\nimport 'sprintf-js'\n\nexport default {\n components: {\n DetailsDialog,\n },\n data: function () {\n return {\n height: 100,\n itemsPerRow: 4,\n formatter: null,\n }\n },\n mixins: [VWidget, WidthSetter],\n created: function () {\n if (this.parameters[3]) {\n this.width = parseInt(this.parameters[3])\n }\n if (this.parameters[4]) {\n this.height = parseInt(this.parameters[4])\n }\n if (this.parameters[5]) {\n this.formatter = this.parameters[5]\n }\n if (this.parameters[6]) {\n this.itemsPerRow = parseInt(this.parameters[6])\n }\n },\n methods: {\n getType: function () {\n var type = 'CONVERTED'\n if (this.parameters[7]) {\n type = this.parameters[7]\n }\n return type\n },\n formatValue: function (data) {\n var text = ''\n var space = ' '\n var newLine = '\\n'\n var count = 0\n\n if (Array.isArray(data)) {\n for (const value of data) {\n if (this.formatter?.toLowerCase() !== 'nil') {\n text += sprintf(this.formatter, value)\n } else {\n text += value\n }\n count += 1\n if (count % this.itemsPerRow === 0) {\n count = 0\n text += newLine\n } else {\n text += space\n }\n }\n return text.trim()\n } else {\n return data\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.value >>> div {\n min-height: 24px !important;\n display: flex !important;\n align-items: center !important;\n}\n.cosmos-green >>> input {\n color: rgb(0, 150, 0);\n}\n.cosmos-yellow >>> input {\n color: rgb(190, 135, 0);\n}\n.cosmos-red >>> input {\n color: red;\n}\n.cosmos-blue >>> input {\n color: rgb(0, 100, 255);\n}\n.cosmos-purple >>> input {\n color: rgb(200, 0, 200);\n}\n.cosmos-black >>> input {\n color: black;\n}\n.cosmos-white >>> input {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArrayWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArrayWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ArrayWidget.vue?vue&type=template&id=3369b22f&scoped=true&\"\nimport script from \"./ArrayWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ArrayWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ArrayWidget.vue?vue&type=style&index=0&id=3369b22f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3369b22f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-textarea',{class:_vm.valueClass,style:(_vm.computedStyle),attrs:{\"solo\":\"\",\"dense\":\"\",\"readonly\":\"\",\"hide-details\":\"\",\"placeholder\":\"Value\",\"height\":_vm.height,\"value\":_vm._value,\"data-test\":\"valueText\"},on:{\"contextmenu\":_vm.showContextMenu}}),_c('v-menu',{attrs:{\"position-x\":_vm.x,\"position-y\":_vm.y,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.contextMenuShown),callback:function ($$v) {_vm.contextMenuShown=$$v},expression:\"contextMenuShown\"}},[_c('v-list',_vm._l((_vm.contextMenuOptions),function(item,index){return _c('v-list-item',{key:index,on:{\"click\":function($event){$event.stopPropagation();return item.action.apply(null, arguments)}}},[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)}),1)],1),_c('details-dialog',{attrs:{\"target-name\":_vm.parameters[0],\"packet-name\":_vm.parameters[1],\"item-name\":_vm.parameters[2]},model:{value:(_vm.viewDetails),callback:function ($$v) {_vm.viewDetails=$$v},expression:\"viewDetails\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-textarea\n solo\n dense\n readonly\n hide-details\n placeholder=\"Value\"\n :height=\"height\"\n :value=\"_value\"\n :class=\"valueClass\"\n :style=\"computedStyle\"\n data-test=\"valueText\"\n @contextmenu=\"showContextMenu\"\n />\n <v-menu\n v-model=\"contextMenuShown\"\n :position-x=\"x\"\n :position-y=\"y\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n :target-name=\"parameters[0]\"\n :packet-name=\"parameters[1]\"\n :item-name=\"parameters[2]\"\n v-model=\"viewDetails\"\n />\n </div>\n</template>\n\n<script>\nimport VWidget from './VWidget'\nimport WidthSetter from './WidthSetter'\nimport DetailsDialog from '../../components/DetailsDialog'\nimport 'sprintf-js'\n\nexport default {\n components: {\n DetailsDialog,\n },\n data: function () {\n return {\n width: 400,\n height: 600,\n bytesPerWord: 4,\n wordsPerRow: 4,\n addrFormat: null,\n formatter: '%02X',\n }\n },\n mixins: [VWidget, WidthSetter],\n created: function () {\n if (this.parameters[3]) {\n this.width = parseInt(this.parameters[3])\n }\n if (this.parameters[4]) {\n this.height = parseInt(this.parameters[4])\n }\n if (this.parameters[5]) {\n this.formatter = this.parameters[5]\n }\n if (this.parameters[6]) {\n this.bytesPerWord = parseInt(this.parameters[6])\n }\n if (this.parameters[7]) {\n this.wordsPerRow = parseInt(this.parameters[7])\n }\n if (this.parameters[8]) {\n this.addrFormat = parseInt(this.parameters[8])\n }\n // parameter[9] is the type ... see getType()\n },\n methods: {\n getType: function () {\n var type = 'RAW'\n if (this.parameters[9]) {\n type = this.parameters[9]\n }\n return type\n },\n formatValue: function (data) {\n var text = ''\n if (data && data.raw) {\n var space = ' '\n var newLine = '\\n'\n\n var byteCount = 0\n var addr = 0\n const bytesPerRow = this.bytesPerWord * this.wordsPerRow\n\n for (const value of data.raw) {\n if (this.addrFormat && byteCount === 0) {\n text += sprintf(this.addrFormat, addr)\n addr += bytesPerRow\n }\n text += sprintf(this.formatter, value)\n byteCount += 1\n if (byteCount % bytesPerRow === 0) {\n byteCount = 0\n text += newLine\n } else if (byteCount % this.bytesPerWord === 0) {\n text += space\n }\n }\n }\n return text\n },\n },\n}\n</script>\n\n<style scoped>\n.v-textarea >>> textarea {\n font-family: 'Courier New', Courier, monospace;\n}\n.value >>> div {\n min-height: 24px !important;\n display: flex !important;\n align-items: center !important;\n}\n.cosmos-green >>> input {\n color: rgb(0, 150, 0);\n}\n.cosmos-yellow >>> input {\n color: rgb(190, 135, 0);\n}\n.cosmos-red >>> input {\n color: red;\n}\n.cosmos-blue >>> input {\n color: rgb(0, 100, 255);\n}\n.cosmos-purple >>> input {\n color: rgb(200, 0, 200);\n}\n.cosmos-black >>> input {\n color: black;\n}\n.cosmos-white >>> input {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlockWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlockWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlockWidget.vue?vue&type=template&id=401cb124&scoped=true&\"\nimport script from \"./BlockWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./BlockWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlockWidget.vue?vue&type=style&index=0&id=401cb124&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"401cb124\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-btn',{staticClass:\"ma-1\",style:(_vm.computedStyle),attrs:{\"color\":\"primary\"},on:{\"click\":_vm.onClick}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \")]),_c('v-dialog',{attrs:{\"max-width\":\"300\"},model:{value:(_vm.displaySendHazardous),callback:function ($$v) {_vm.displaySendHazardous=$$v},expression:\"displaySendHazardous\"}},[_c('v-card',{staticClass:\"pa-3\"},[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(\"Hazardous\")]),_c('v-card-text',[_vm._v(\" Warning: Command is Hazardous. Send? \")]),_c('v-btn',{staticClass:\"primary mr-4\",on:{\"click\":_vm.sendHazardousCmd}},[_vm._v(\"Yes\")]),_c('v-btn',{staticClass:\"primary\",on:{\"click\":_vm.cancelHazardousCmd}},[_vm._v(\"No\")])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ButtonWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ButtonWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ButtonWidget.vue?vue&type=template&id=d4929674&\"\nimport script from \"./ButtonWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ButtonWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('svg',{attrs:{\"id\":\"canvas\",\"width\":_vm.width,\"height\":_vm.height}},_vm._l((_vm.widgets),function(widget,index){return _c(widget.type,_vm._g({key:index,tag:\"component\",attrs:{\"target\":widget.target,\"parameters\":widget.parameters,\"settings\":widget.settings,\"widgets\":widget.widgets,\"name\":widget.name}},_vm.$listeners))}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <svg id=\"canvas\" :width=\"width\" :height=\"height\">\n <component\n v-for=\"(widget, index) in widgets\"\n v-on=\"$listeners\"\n :key=\"index\"\n :is=\"widget.type\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n />\n </svg>\n</template>\n\n<script>\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n computed: {\n width() {\n return this.parameters[0] + 'px'\n },\n height() {\n return this.parameters[1] + 'px'\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\nsvg {\n background-color: white;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvasWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvasWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CanvasWidget.vue?vue&type=template&id=a508bc5c&scoped=true&\"\nimport script from \"./CanvasWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./CanvasWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CanvasWidget.vue?vue&type=style&index=0&id=a508bc5c&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a508bc5c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('circle',{attrs:{\"cx\":_vm.parameters[0],\"cy\":_vm.parameters[1],\"r\":_vm.parameters[3],\"fill\":_vm.parameters[2]}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <circle\n :cx=\"parameters[0]\"\n :cy=\"parameters[1]\"\n :r=\"parameters[3]\"\n :fill=\"parameters[2]\"\n />\n</template>\n\n<script>\nimport Widget from './Widget'\nexport default {\n mixins: [Widget],\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvasdotWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvasdotWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CanvasdotWidget.vue?vue&type=template&id=688a0042&\"\nimport script from \"./CanvasdotWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./CanvasdotWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.imageUrl)?_c('image',{attrs:{\"href\":_vm.imageUrl,\"x\":_vm.parameters[1],\"y\":_vm.parameters[2],\"width\":_vm.width,\"height\":_vm.height}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <image\n v-if=\"imageUrl\"\n :href=\"imageUrl\"\n :x=\"parameters[1]\"\n :y=\"parameters[2]\"\n :width=\"width\"\n :height=\"height\"\n />\n</template>\n\n<script>\nimport Widget from './Widget'\nimport ImageLoader from './ImageLoader'\n\nexport default {\n mixins: [Widget, ImageLoader],\n data: function () {\n return {\n imageUrl: null,\n }\n },\n computed: {\n width: function () {\n if (this.parameters[3]) {\n return `${this.parameters[3]}px`\n }\n return '100%'\n },\n height: function () {\n if (this.parameters[4]) {\n return `${this.parameters[4]}px`\n }\n return '100%'\n },\n },\n created: function () {\n if (!this.parameters[0].startsWith('http')) {\n this.getPresignedUrl(this.parameters[0]).then((response) => {\n this.imageUrl = response\n })\n } else {\n this.imageUrl = this.parameters[0]\n }\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvasimageWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvasimageWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CanvasimageWidget.vue?vue&type=template&id=4f08f970&\"\nimport script from \"./CanvasimageWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./CanvasimageWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',[_vm._l((_vm.images),function(image){return _c('image',{directives:[{name:\"show\",rawName:\"v-show\",value:(image.value == _vm.selectedValue),expression:\"image.value == selectedValue\"}],key:image.value,attrs:{\"href\":image.url,\"x\":image.x,\"y\":image.y,\"width\":image.width,\"height\":image.height}})}),(_vm.defaultImage)?_c('image',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showDefault),expression:\"showDefault\"}],attrs:{\"href\":_vm.defaultImage.url,\"x\":_vm.defaultImage.x,\"y\":_vm.defaultImage.y,\"width\":_vm.defaultImage.width,\"height\":_vm.defaultImage.height}}):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <g>\n <image\n v-for=\"image in images\"\n :key=\"image.value\"\n v-show=\"image.value == selectedValue\"\n :href=\"image.url\"\n :x=\"image.x\"\n :y=\"image.y\"\n :width=\"image.width\"\n :height=\"image.height\"\n />\n <image\n v-if=\"defaultImage\"\n v-show=\"showDefault\"\n :href=\"defaultImage.url\"\n :x=\"defaultImage.x\"\n :y=\"defaultImage.y\"\n :width=\"defaultImage.width\"\n :height=\"defaultImage.height\"\n />\n </g>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport ImageLoader from './ImageLoader'\n\nexport default {\n mixins: [Widget, ImageLoader],\n data: function () {\n return {\n images: [],\n defaultImage: null,\n }\n },\n computed: {\n valueId: function () {\n return `${this.parameters[0]}__${this.parameters[1]}__${\n this.parameters[2]\n }__${this.parameters[3] || 'RAW'}`\n },\n selectedValue: function () {\n return this.$store.state.tlmViewerValues[this.valueId][0]\n },\n showDefault: function () {\n return !this.images.some((image) => image.value == this.selectedValue)\n },\n },\n watch: {\n valueId: {\n immediate: true,\n handler: function (val) {\n this.$store.commit('tlmViewerAddItem', val)\n },\n },\n },\n created: function () {\n // Set value images data\n const promises = this.settings\n .filter((setting) => setting[0] === 'IMAGE')\n .map(async (setting) => {\n let url = setting[2]\n if (!url.startsWith('http')) {\n url = await this.getPresignedUrl(url)\n }\n\n return {\n url,\n value: setting[1],\n x: setting[3],\n y: setting[4],\n width: setting[5],\n height: setting[6],\n }\n })\n Promise.all(promises).then((images) => {\n this.images = images\n })\n\n // Set default image data\n if (this.parameters[4]) {\n const defaultImage = {\n x: this.parameters[5],\n y: this.parameters[6],\n width: this.parameters[7] ? `${this.parameters[7]}px` : '100%',\n height: this.parameters[8] ? `${this.parameters[8]}px` : '100%',\n }\n\n let url = this.parameters[4]\n if (!url.startsWith('http')) {\n this.getPresignedUrl(url).then((response) => {\n this.defaultImage = {\n ...defaultImage,\n url: response,\n }\n })\n } else {\n this.defaultImage = {\n ...defaultImage,\n url,\n }\n }\n }\n },\n destroyed: function () {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvasimagevalueWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvasimagevalueWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CanvasimagevalueWidget.vue?vue&type=template&id=6d66e099&\"\nimport script from \"./CanvasimagevalueWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./CanvasimagevalueWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('text',{attrs:{\"x\":_vm.parameters[0],\"y\":_vm.parameters[1],\"fill\":_vm.fillColor}},[_vm._v(\" \"+_vm._s(_vm.parameters[2])+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <text :x=\"parameters[0]\" :y=\"parameters[1]\" :fill=\"fillColor\">\n {{ parameters[2] }}\n </text>\n</template>\n\n<script>\nimport Widget from './Widget'\nexport default {\n mixins: [Widget],\n computed: {\n fillColor() {\n if (this.parameters[3]) {\n return this.parameters[3]\n }\n return 'black'\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvaslabelWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvaslabelWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CanvaslabelWidget.vue?vue&type=template&id=3556ae12&\"\nimport script from \"./CanvaslabelWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./CanvaslabelWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('text',{attrs:{\"x\":_vm.parameters[3],\"y\":_vm.parameters[4],\"font-size\":_vm.fontSize,\"fill\":_vm.fillColor}},[_vm._v(\" \"+_vm._s(_vm._value)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <!-- TODO: Draw box or underline? -->\n <text\n :x=\"parameters[3]\"\n :y=\"parameters[4]\"\n :font-size=\"fontSize\"\n :fill=\"fillColor\"\n >\n {{ _value }}\n </text>\n</template>\n\n<script>\nimport Widget from './Widget'\nexport default {\n mixins: [Widget],\n data() {\n return {\n valueId: null,\n }\n },\n computed: {\n _value() {\n return this.$store.state.tlmViewerValues[this.valueId][0]\n },\n fontSize() {\n if (this.parameters[5]) {\n return this.parameters[5] + 'px'\n }\n return '14px'\n },\n fillColor() {\n if (this.parameters[6]) {\n return this.parameters[6]\n }\n return 'black'\n },\n },\n created() {\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${this.parameters[2]}__CONVERTED`\n this.$store.commit('tlmViewerAddItem', this.valueId)\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvaslabelvalueWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvaslabelvalueWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CanvaslabelvalueWidget.vue?vue&type=template&id=63da4903&\"\nimport script from \"./CanvaslabelvalueWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./CanvaslabelvalueWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('line',{style:(_vm.calcStyle),attrs:{\"x1\":_vm.parameters[0],\"y1\":_vm.parameters[1],\"x2\":_vm.parameters[2],\"y2\":_vm.parameters[3]}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <line\n :x1=\"parameters[0]\"\n :y1=\"parameters[1]\"\n :x2=\"parameters[2]\"\n :y2=\"parameters[3]\"\n :style=\"calcStyle\"\n />\n</template>\n\n<script>\nimport Widget from './Widget'\nexport default {\n mixins: [Widget],\n computed: {\n calcStyle() {\n let color = 'black'\n if (this.parameters[4]) {\n color = this.parameters[4]\n }\n let width = 1\n if (this.parameters[5]) {\n width = this.parameters[5]\n }\n return 'stroke:' + color + ';stroke-width:' + width\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvaslineWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvaslineWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CanvaslineWidget.vue?vue&type=template&id=1f32a126&\"\nimport script from \"./CanvaslineWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./CanvaslineWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('line',{style:(_vm.calcStyle),attrs:{\"x1\":_vm.parameters[3],\"y1\":_vm.parameters[4],\"x2\":_vm.parameters[5],\"y2\":_vm.parameters[6]}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <line\n :x1=\"parameters[3]\"\n :y1=\"parameters[4]\"\n :x2=\"parameters[5]\"\n :y2=\"parameters[6]\"\n :style=\"calcStyle\"\n />\n</template>\n\n<script>\nimport Widget from './Widget'\nexport default {\n mixins: [Widget],\n data() {\n return {\n valueId: 0,\n }\n },\n computed: {\n calcStyle() {\n let color = this.parameters[8]\n if (parseInt(this.$store.state.tlmViewerValues[this.valueId][0]) === 1) {\n color = this.parameters[7]\n }\n let width = 1\n if (this.parameters[9]) {\n width = this.parameters[9]\n }\n return 'stroke:' + color + ';stroke-width:' + width\n },\n },\n created() {\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${this.parameters[2]}__RAW`\n this.$store.commit('tlmViewerAddItem', this.valueId)\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvaslinevalueWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvaslinevalueWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CanvaslinevalueWidget.vue?vue&type=template&id=05f75c8c&\"\nimport script from \"./CanvaslinevalueWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./CanvaslinevalueWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-checkbox',{style:(_vm.computedStyle),attrs:{\"hide-details\":\"\",\"dense\":\"\",\"label\":_vm.label},model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v},expression:\"value\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-checkbox\n hide-details\n dense\n :label=\"label\"\n v-model=\"value\"\n :style=\"computedStyle\"\n >\n </v-checkbox>\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n items: [],\n label: 'Checkbox',\n value: false,\n }\n },\n created() {\n // Look through the settings and see if we're a NAMED_WIDGET\n this.settings.forEach((setting) => {\n if (setting[0] === 'NAMED_WIDGET') {\n setting[2].setNamedWidget(setting[1], this)\n }\n })\n this.label = this.parameters[0]\n },\n methods: {\n checked() {\n return this.value\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CheckbuttonWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CheckbuttonWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CheckbuttonWidget.vue?vue&type=template&id=2af96702&\"\nimport script from \"./CheckbuttonWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./CheckbuttonWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-select',{style:(_vm.computedStyle),attrs:{\"hide-details\":\"\",\"dense\":\"\",\"items\":_vm.items},model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v},expression:\"value\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-select\n hide-details\n dense\n :items=\"items\"\n v-model=\"value\"\n :style=\"computedStyle\"\n >\n </v-select>\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n items: [],\n value: null,\n }\n },\n created() {\n // Look through the settings and see if we're a NAMED_WIDGET\n this.settings.forEach((setting) => {\n if (setting[0] === 'NAMED_WIDGET') {\n setting[2].setNamedWidget(setting[1], this)\n }\n })\n this.items = this.parameters\n },\n methods: {\n text() {\n return this.value\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ComboboxWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ComboboxWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ComboboxWidget.vue?vue&type=template&id=261ba626&\"\nimport script from \"./ComboboxWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ComboboxWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.widgetType,_vm._b({tag:\"component\"},'component',Object.assign({}, _vm.$props, _vm.$attrs),false))}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <component :is=\"widgetType\" v-bind=\"{ ...$props, ...$attrs }\"></component>\n</template>\n\n<script>\nexport default {\n data() {\n return {\n widgetType: null,\n }\n },\n props: {\n name: { default: null },\n },\n computed: {\n url: function () {\n return `${window.location.origin}/tools/widgets/${this.name}/${this.name}.umd.min.js`\n },\n },\n mounted() {\n const self = this\n\n /* eslint-disable-next-line */\n System.import(/* webpackIgnore: true */ this.url).then(function (widget) {\n self.widgetType = widget\n })\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DynamicWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DynamicWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DynamicWidget.vue?vue&type=template&id=71f511d9&\"\nimport script from \"./DynamicWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./DynamicWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\",style:(_vm.computedStyle)},[_c('value-widget',{attrs:{\"parameters\":_vm.getParameters,\"settings\":_vm.settings,\"format-string\":_vm.parameters[3]}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n :parameters=\"getParameters\"\n :settings=\"settings\"\n :format-string=\"parameters[3]\"\n />\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n mixins: [Widget],\n components: {\n ValueWidget,\n },\n computed: {\n getParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[4],\n ]\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FormatvalueWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FormatvalueWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FormatvalueWidget.vue?vue&type=template&id=be6557c2&\"\nimport script from \"./FormatvalueWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./FormatvalueWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\"},_vm._l((_vm.widgets),function(widget,index){return _c(widget.type,_vm._g({key:index,tag:\"component\",attrs:{\"target\":widget.target,\"parameters\":widget.parameters,\"settings\":widget.settings,\"widgets\":widget.widgets,\"name\":widget.name}},_vm.$listeners))}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\">\n <component\n v-for=\"(widget, index) in widgets\"\n v-on=\"$listeners\"\n :key=\"index\"\n :is=\"widget.type\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n />\n </div>\n</template>\n\n<script>\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HorizontalWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HorizontalWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HorizontalWidget.vue?vue&type=template&id=4fd9fe9a&\"\nimport script from \"./HorizontalWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./HorizontalWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-banner',{attrs:{\"single-line\":\"\"}},[_vm._v(_vm._s(_vm.parameters.join(' ')))]),_c('horizontal-widget',_vm._g({attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings,\"widgets\":_vm.widgets}},_vm.$listeners))],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-banner single-line>{{ parameters.join(' ') }}</v-banner>\n <horizontal-widget\n v-on=\"$listeners\"\n :parameters=\"parameters\"\n :settings=\"settings\"\n :widgets=\"widgets\"\n />\n </div>\n</template>\n\n<script>\nimport HorizontalWidget from './HorizontalWidget'\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n components: {\n HorizontalWidget,\n },\n}\n</script>\n\n<style scoped>\n.v-banner >>> div {\n background-color: var(--v-tertiary-darken2) !important;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HorizontalboxWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HorizontalboxWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HorizontalboxWidget.vue?vue&type=template&id=490e35ec&scoped=true&\"\nimport script from \"./HorizontalboxWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./HorizontalboxWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HorizontalboxWidget.vue?vue&type=style&index=0&id=490e35ec&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"490e35ec\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('iframe',{attrs:{\"src\":_vm.src,\"width\":_vm.width,\"height\":_vm.height}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <iframe :src=\"src\" :width=\"width\" :height=\"height\" />\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n computed: {\n src: function () {\n return this.parameters[0]\n },\n width: function () {\n return this.parameters[1] + 'px'\n },\n height: function () {\n return this.parameters[2] + 'px'\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IframeWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IframeWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./IframeWidget.vue?vue&type=template&id=b23e1f4c&\"\nimport script from \"./IframeWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./IframeWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('img',{attrs:{\"src\":_vm.src,\"alt\":_vm.itemFullName,\"width\":_vm.parameters[4],\"height\":_vm.parameters[5]}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <img\n :src=\"src\"\n :alt=\"itemFullName\"\n :width=\"parameters[4]\"\n :height=\"parameters[5]\"\n />\n</template>\n\n<script>\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport Widget from '@cosmosc2/tool-common/src/components/widgets/Widget'\nimport Cable from '@cosmosc2/tool-common/src/services/cable.js'\n\nexport default {\n mixins: [Widget],\n data: function () {\n return {\n api: new CosmosApi(),\n cable: new Cable(),\n subscription: null,\n imageData: '',\n }\n },\n computed: {\n src: function () {\n return `data:image/${this.parameters[3]};base64, ${this.imageData}`\n },\n itemFullName: function () {\n return `TLM__${this.targetName}__${this.packetName}__${this.itemName}__${this.valueType}`\n },\n targetName: function () {\n return this.parameters[0]\n },\n packetName: function () {\n return this.parameters[1]\n },\n itemName: function () {\n return this.parameters[2]\n },\n valueType: function () {\n return 'CONVERTED'\n },\n },\n created: function () {\n this.api\n .get_tlm_packet(this.targetName, this.packetName, this.valueType)\n .then((packetItems) => {\n const foundPacket = packetItems?.find(\n (item) => item[0] === this.itemName\n )\n if (foundPacket) {\n this.imageData = foundPacket[1]\n }\n })\n .finally(() => {\n this.subscribe()\n })\n },\n destroyed: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.cable.disconnect()\n },\n methods: {\n received: function (json_data) {\n if (json_data['error']) {\n this.$notify.serious({\n body: json_data['error'],\n })\n } else {\n const parsed = JSON.parse(json_data)\n if (parsed.length) {\n const packet = parsed[parsed.length - 1]\n this.imageData = packet[this.itemFullName]\n }\n }\n },\n subscribe: function () {\n this.cable\n .createSubscription('StreamingChannel', localStorage.scope, {\n received: (data) => this.received(data),\n connected: () => {\n this.subscription.perform('add', {\n scope: localStorage.scope,\n mode: 'DECOM',\n token: localStorage.cosmosToken,\n items: [this.itemFullName],\n })\n },\n disconnected: () => {\n this.$notify.caution({\n body: 'COSMOS backend connection disconnected.',\n })\n },\n rejected: () => {\n this.$notify.caution({\n body: 'COSMOS backend connection rejected.',\n })\n },\n })\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageviewerWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageviewerWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageviewerWidget.vue?vue&type=template&id=56d7af1e&\"\nimport script from \"./ImageviewerWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageviewerWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"pa-1 mt-1 label\",style:([_vm.cssProps, _vm.computedStyle]),attrs:{\"data-test\":\"label\"}},[_vm._v(\" \"+_vm._s(_vm.labelText)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <span\n data-test=\"label\"\n class=\"pa-1 mt-1 label\"\n :style=\"[cssProps, computedStyle]\"\n >\n {{ labelText }}\n </span>\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n fontFamily: null,\n fontSize: null,\n fontWeight: 'normal',\n fontStyle: 'normal',\n }\n },\n computed: {\n labelText() {\n return this.parameters[0]\n },\n cssProps() {\n var size = null\n if (this.fontSize) {\n size = this.fontSize + 'px'\n }\n return {\n '--font-family': this.fontFamily,\n '--font-size': size,\n '--font-weight': this.fontWeight,\n '--font-style': this.fontStyle,\n }\n },\n },\n created() {\n if (this.parameters[1]) {\n this.fontFamily = this.parameters[1]\n }\n if (this.parameters[2]) {\n this.fontSize = this.parameters[2]\n }\n if (this.parameters[3]) {\n this.fontWeight = this.parameters[3]\n }\n if (this.parameters[4]) {\n this.fontStyle = this.parameters[4]\n }\n },\n}\n</script>\n\n<style scoped>\n.label {\n font-family: var(--font-family);\n font-size: var(--font-size);\n font-weight: var(--font-weight);\n font-style: var(--font-style);\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelWidget.vue?vue&type=template&id=1ff40000&scoped=true&\"\nimport script from \"./LabelWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LabelWidget.vue?vue&type=style&index=0&id=1ff40000&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ff40000\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\",style:(_vm.computedStyle)},[_c('label-widget',{attrs:{\"parameters\":_vm.labelName,\"settings\":_vm.settings}}),_c('led-widget',{attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <label-widget :parameters=\"labelName\" :settings=\"settings\" />\n <led-widget :parameters=\"parameters\" :settings=\"settings\" />\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport LabelWidget from './LabelWidget.vue'\nimport LedWidget from './LedWidget.vue'\n\nexport default {\n mixins: [Widget],\n components: {\n LabelWidget,\n LedWidget,\n },\n computed: {\n labelName() {\n // LabelWidget uses index 0 from the parameters prop\n // so create an array with the label text in the first position\n return [this.parameters[2] + ':']\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelledWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelledWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelledWidget.vue?vue&type=template&id=61e92cf0&\"\nimport script from \"./LabelledWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelledWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\"},[_c('label-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.labelName,\"settings\":_vm.settings,\"widget-index\":0}}),_c('progressbar-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings,\"widget-index\":1}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\">\n <label-widget\n :parameters=\"labelName\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"0\"\n />\n <progressbar-widget\n :parameters=\"parameters\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport LabelWidget from './LabelWidget.vue'\nimport ProgressbarWidget from './ProgressbarWidget.vue'\n\nexport default {\n mixins: [Widget],\n components: {\n LabelWidget,\n ProgressbarWidget,\n },\n computed: {\n labelName() {\n // LabelWidget uses index 0 from the parameters prop\n // so create an array with the label text in the first position\n return [this.parameters[2] + ':']\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelprogressbarWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelprogressbarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelprogressbarWidget.vue?vue&type=template&id=4e63a67e&\"\nimport script from \"./LabelprogressbarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelprogressbarWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\"},[_c('label-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.labelName,\"settings\":_vm.settings,\"widget-index\":0}}),_c('value-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings,\"widget-index\":1}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\">\n <label-widget\n :parameters=\"labelName\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"0\"\n />\n <value-widget\n :parameters=\"parameters\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport LabelWidget from './LabelWidget.vue'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n mixins: [Widget],\n components: {\n LabelWidget,\n ValueWidget,\n },\n computed: {\n labelName() {\n // LabelWidget uses index 0 from the parameters prop\n // so create an array with the label text in the first position\n return [this.parameters[2] + ':']\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelvalueWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelvalueWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelvalueWidget.vue?vue&type=template&id=13602869&\"\nimport script from \"./LabelvalueWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelvalueWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\"},[_c('label-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.labelName,\"settings\":_vm.settings,\"widget-index\":0}}),_c('value-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.parameters.slice(0, 3),\"settings\":_vm.settings,\"widget-index\":1}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\">\n <label-widget\n :parameters=\"labelName\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"0\"\n />\n <value-widget\n :parameters=\"parameters.slice(0, 3)\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport LabelWidget from './LabelWidget.vue'\nimport ValueWidget from './ValueWidget.vue'\nimport { CosmosApi } from '../../services/cosmos-api.js'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n description: '',\n }\n },\n components: {\n LabelWidget,\n ValueWidget,\n },\n computed: {\n labelName() {\n return [this.description]\n },\n },\n created() {\n if (this.parameters.length > 3) {\n this.description = this.parameters[3]\n } else {\n this.api = new CosmosApi()\n this.api\n .get_item(this.parameters[0], this.parameters[1], this.parameters[2])\n .then((details) => {\n this.description = details['description']\n })\n }\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelvaluedescWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelvaluedescWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelvaluedescWidget.vue?vue&type=template&id=03f3fef9&\"\nimport script from \"./LabelvaluedescWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelvaluedescWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\",style:([_vm.defaultStyle, _vm.computedStyle])},[_c('labelvalue-widget',{attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings}}),_c('limitsbar-widget',{attrs:{\"parameters\":_vm.limitsBarParameters,\"settings\":_vm.settings.filter(function (x) { return x[0] == 1; }).map(function (x) { return x.slice(1); }),\"widget-index\":3}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div\n ref=\"container\"\n class=\"d-flex flex-row\"\n :style=\"[defaultStyle, computedStyle]\"\n >\n <labelvalue-widget :parameters=\"parameters\" :settings=\"settings\" />\n <limitsbar-widget\n :parameters=\"limitsBarParameters\"\n :settings=\"settings.filter((x) => x[0] == 1).map((x) => x.slice(1))\"\n :widget-index=\"3\"\n />\n </div>\n</template>\n\n<script>\nimport LabelvalueWidget from './LabelvalueWidget.vue'\nimport LimitsbarWidget from './LimitsbarWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n LabelvalueWidget,\n LimitsbarWidget,\n },\n data() {\n return {\n overallWidth: '300px',\n }\n },\n created() {\n // Determine if any sub-setting widths have been given\n // If so calculate the overall width, if not the default will be used\n let width = 0\n this.settings.forEach((setting) => {\n if (setting[1] === 'WIDTH') {\n width += parseInt(setting[2])\n }\n })\n if (width != 0) {\n this.overallWidth = width + 'px'\n }\n },\n computed: {\n limitsBarParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n 'CONVERTED',\n ]\n },\n defaultStyle() {\n return {\n width: this.overallWidth,\n }\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelvaluelimitsbarWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelvaluelimitsbarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelvaluelimitsbarWidget.vue?vue&type=template&id=272e68bc&\"\nimport script from \"./LabelvaluelimitsbarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelvaluelimitsbarWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-column\",style:(_vm.computedStyle)},[_c('label-widget',{attrs:{\"parameters\":[_vm.parameters[2]],\"settings\":_vm.settings,\"widget-index\":0}}),_c('limitscolumn-widget',{attrs:{\"parameters\":_vm.limitsColumnParameters,\"settings\":_vm.settings,\"widget-index\":1}}),_c('value-widget',{attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings,\"widget-index\":2}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-column\" :style=\"computedStyle\">\n <label-widget\n :parameters=\"[parameters[2]]\"\n :settings=\"settings\"\n :widget-index=\"0\"\n />\n <limitscolumn-widget\n :parameters=\"limitsColumnParameters\"\n :settings=\"settings\"\n :widget-index=\"1\"\n />\n <value-widget\n :parameters=\"parameters\"\n :settings=\"settings\"\n :widget-index=\"2\"\n />\n </div>\n</template>\n\n<script>\nimport LabelWidget from './LabelWidget.vue'\nimport ValueWidget from './ValueWidget.vue'\nimport LimitscolumnWidget from './LimitscolumnWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n LabelWidget,\n ValueWidget,\n LimitscolumnWidget,\n },\n created() {\n this.settings.push(['WIDTH', '100'])\n },\n computed: {\n limitsColumnParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n 'CONVERTED',\n ]\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelvaluelimitscolumnWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelvaluelimitscolumnWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelvaluelimitscolumnWidget.vue?vue&type=template&id=4148932c&\"\nimport script from \"./LabelvaluelimitscolumnWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelvaluelimitscolumnWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\",style:([_vm.defaultStyle, _vm.computedStyle])},[_c('labelvalue-widget',{attrs:{\"parameters\":_vm.labelValueParameters}}),_c('rangebar-widget',{attrs:{\"parameters\":_vm.parameters}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div\n ref=\"container\"\n class=\"d-flex flex-row\"\n :style=\"[defaultStyle, computedStyle]\"\n >\n <labelvalue-widget :parameters=\"labelValueParameters\" />\n <rangebar-widget :parameters=\"parameters\" />\n </div>\n</template>\n\n<script>\nimport LabelvalueWidget from './LabelvalueWidget.vue'\nimport RangebarWidget from './RangebarWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n LabelvalueWidget,\n RangebarWidget,\n },\n computed: {\n labelValueParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n 'WITH_UNITS',\n ]\n },\n defaultStyle() {\n return {\n width: '300px',\n }\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelvaluerangebarWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelvaluerangebarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelvaluerangebarWidget.vue?vue&type=template&id=26f9eeae&\"\nimport script from \"./LabelvaluerangebarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelvaluerangebarWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"led mt-2\",style:([_vm.cssProps, _vm.computedStyle])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div class=\"led mt-2\" :style=\"[cssProps, computedStyle]\"></div>\n</template>\n\n<script>\nimport Widget from './Widget'\nexport default {\n mixins: [Widget],\n data() {\n return {\n valueId: null,\n colors: {\n TRUE: 'green',\n FALSE: 'red',\n },\n }\n },\n computed: {\n width() {\n return this.parameters[4] ? parseInt(this.parameters[4]) : 20\n },\n height() {\n return this.parameters[5] ? parseInt(this.parameters[5]) : 20\n },\n cssProps() {\n const value = this.$store.state.tlmViewerValues[this.valueId][0]\n let color = this.colors[value]\n if (!color) {\n color = this.colors.ANY\n }\n if (!color) {\n color = 'BLACK'\n }\n return {\n '--height': this.height + 'px',\n '--width': this.width + 'px',\n '--color': color.toLowerCase(),\n }\n },\n },\n // Note Vuejs still treats this syncronously, but this allows us to dispatch\n // the store mutation and return the array index.\n // What this means practically is that future lifecycle hooks may not have valueId set.\n created() {\n this.settings.forEach((setting) => {\n switch (setting[0]) {\n case 'LED_COLOR':\n this.colors[setting[1]] = setting[2]\n break\n }\n })\n if (!this.parameters[3]) {\n this.parameters[3] = 'CONVERTED'\n }\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${this.parameters[2]}__${this.parameters[3]}`\n this.$store.commit('tlmViewerAddItem', this.valueId)\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n },\n}\n</script>\n\n<style scoped>\n.led {\n height: var(--height);\n width: var(--width);\n background-color: var(--color);\n border-radius: 50%;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LedWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LedWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LedWidget.vue?vue&type=template&id=1d5674e7&scoped=true&\"\nimport script from \"./LedWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LedWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LedWidget.vue?vue&type=style&index=0&id=1d5674e7&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1d5674e7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"limitsbar\",style:([_vm.cssProps, _vm.computedStyle])},[_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"limitsbar__container\"},[_c('div',{staticClass:\"limitsbar__redlow\"}),_c('div',{staticClass:\"limitsbar__redhigh\"}),_c('div',{staticClass:\"limitsbar__yellowlow\"}),_c('div',{staticClass:\"limitsbar__yellowhigh\"}),_c('div',{staticClass:\"limitsbar__greenlow\"}),_c('div',{staticClass:\"limitsbar__greenhigh\"}),_c('div',{staticClass:\"limitsbar__blue\"}),_c('div',{staticClass:\"limitsbar__line\"}),_c('div',{staticClass:\"limitsbar__arrow\"})])}]\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div class=\"limitsbar\" :style=\"[cssProps, computedStyle]\">\n <div class=\"limitsbar__container\">\n <div class=\"limitsbar__redlow\" />\n <div class=\"limitsbar__redhigh\" />\n <div class=\"limitsbar__yellowlow\" />\n <div class=\"limitsbar__yellowhigh\" />\n <div class=\"limitsbar__greenlow\" />\n <div class=\"limitsbar__greenhigh\" />\n <div class=\"limitsbar__blue\" />\n\n <div class=\"limitsbar__line\" />\n <div class=\"limitsbar__arrow\" />\n </div>\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport { CosmosApi } from '../../services/cosmos-api.js'\n\nconst DEFAULT_LIMITS_SET = 'DEFAULT'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n width: '100%', // users will override with px\n height: 20, // px\n minValue: null,\n maxValue: null,\n scale: 0,\n redLow: 0,\n yellowLow: 0,\n greenLow: 0,\n greenHigh: 0,\n yellowHigh: 0,\n redHigh: 0,\n blue: 0,\n api: null,\n limitsSettings: {\n DEFAULT: [],\n },\n currentLimitsSet: DEFAULT_LIMITS_SET,\n currentSetRefreshInterval: null,\n }\n },\n computed: {\n cssProps: function () {\n const value = this.$store.state.tlmViewerValues[this.valueId][0]\n let limits = this.modifyLimits(\n this.limitsSettings[this.selectedLimitsSet]\n )\n this.calcLimits(limits)\n return {\n '--height': this.height + 'px',\n '--width': this.width,\n '--container-height': this.height - 5 + 'px',\n '--position': this.calcPosition(value, limits) + '%',\n '--redlow-width': this.redLow + '%',\n '--redhigh-width': this.redHigh + '%',\n '--yellowlow-width': this.yellowLow + '%',\n '--yellowhigh-width': this.yellowHigh + '%',\n '--greenlow-width': this.greenLow + '%',\n '--greenhigh-width': this.greenHigh + '%',\n '--blue-width': this.blue + '%',\n }\n },\n selectedLimitsSet: function () {\n return this.limitsSettings.hasOwnProperty(this.currentLimitsSet)\n ? this.currentLimitsSet\n : DEFAULT_LIMITS_SET\n },\n },\n created() {\n this.api = new CosmosApi()\n this.api\n .get_limits(this.parameters[0], this.parameters[1], this.parameters[2])\n .then((data) => {\n this.limitsSettings = data\n })\n this.getCurrentLimitsSet()\n this.currentSetRefreshInterval = setInterval(\n this.getCurrentLimitsSet,\n 60 * 1000\n )\n\n this.settings.forEach((setting) => {\n if (setting[0] === 'MIN_VALUE') {\n this.minValue = parseInt(setting[1])\n }\n if (setting[0] === 'MAX_VALUE') {\n this.maxValue = parseInt(setting[1])\n }\n })\n\n let type = 'CONVERTED'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${this.parameters[2]}__${type}`\n\n this.$store.commit('tlmViewerAddItem', this.valueId)\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n clearInterval(this.currentSetRefreshInterval)\n },\n methods: {\n modifyLimits(limitsSettings) {\n // By default the red bars take 10% of the display\n this.redLow = 10\n this.redHigh = 10\n\n // Modify values to respect the user defined minimum\n if (this.minValue) {\n if (limitsSettings[0] <= this.minValue) {\n limitsSettings[0] = this.minValue\n // No red low will be displayed\n this.redLow = 0\n }\n if (limitsSettings[1] <= this.minValue) {\n limitsSettings[1] = this.minValue\n }\n if (limitsSettings[2] <= this.minValue) {\n limitsSettings[2] = this.minValue\n }\n if (limitsSettings[3] <= this.minValue) {\n limitsSettings[3] = this.minValue\n }\n if (limitsSettings.length > 4 && limitsSettings[4] <= this.minValue) {\n limitsSettings[4] = this.minValue\n }\n if (limitsSettings.length > 4 && limitsSettings[5] <= this.minValue) {\n limitsSettings[5] = this.minValue\n }\n }\n if (this.maxValue) {\n if (limitsSettings[0] >= this.maxValue) {\n limitsSettings[0] = this.maxValue\n }\n if (limitsSettings[1] >= this.maxValue) {\n limitsSettings[1] = this.maxValue\n }\n if (limitsSettings[2] >= this.maxValue) {\n limitsSettings[2] = this.maxValue\n }\n if (limitsSettings[3] >= this.maxValue) {\n limitsSettings[3] = this.maxValue\n // No red high will be displayed\n this.redHigh = 0\n }\n if (limitsSettings.length > 4 && limitsSettings[4] >= this.maxValue) {\n limitsSettings[4] = this.maxValue\n }\n if (limitsSettings.length > 4 && limitsSettings[5] >= this.maxValue) {\n limitsSettings[5] = this.maxValue\n }\n }\n // If the red low matches yellow low there is no red low\n if (limitsSettings[0] == limitsSettings[1]) {\n this.redLow = 0\n }\n // If the red high matches yellow high there is no red high\n if (limitsSettings[2] == limitsSettings[3]) {\n this.redHigh = 0\n }\n\n let divisor = 80\n if (this.redLow == 0) {\n divisor += 10\n }\n if (this.redHigh == 0) {\n divisor += 10\n }\n this.scale = (limitsSettings[3] - limitsSettings[0]) / divisor\n\n return limitsSettings\n },\n calcPosition(value, limitsSettings) {\n if (!value || !limitsSettings) {\n return\n }\n let lowValue = limitsSettings[0] - 10 * this.scale\n if (this.minValue && this.minValue == limitsSettings[0]) {\n lowValue = limitsSettings[0]\n }\n let highValue = limitsSettings[3] - 10 * this.scale\n if (this.maxValue && this.maxValue == limitsSettings[3]) {\n highValue = limitsSettings[3]\n }\n\n if (value.raw) {\n if (value.raw === '-Infinity') {\n return 0\n } else {\n // NaN and Infinity\n return 100\n }\n }\n if (value < this.min) {\n return 0\n } else if (value > this.max) {\n return 100\n } else {\n const result = parseInt((value - lowValue) / this.scale)\n if (result > 100) {\n return 100\n } else if (result < 0) {\n return 0\n } else {\n return result\n }\n }\n },\n calcLimits(limitsSettings) {\n if (!limitsSettings) {\n return\n }\n\n this.yellowLow = Math.round(\n (limitsSettings[1] - limitsSettings[0]) / this.scale\n )\n this.yellowHigh = Math.round(\n (limitsSettings[3] - limitsSettings[2]) / this.scale\n )\n if (limitsSettings.length > 4) {\n this.greenLow = Math.round(\n (limitsSettings[4] - limitsSettings[1]) / this.scale\n )\n this.greenHigh = Math.round(\n (limitsSettings[2] - limitsSettings[5]) / this.scale\n )\n this.blue = Math.round(\n 100 -\n this.redLow -\n this.yellowLow -\n this.greenLow -\n this.greenHigh -\n this.yellowHigh -\n this.redHigh\n )\n } else {\n this.greenLow = Math.round(\n 100 - this.redLow - this.yellowLow - this.yellowHigh - this.redHigh\n )\n this.greenHigh = 0\n this.blue = 0\n }\n },\n getCurrentLimitsSet: function () {\n this.api.get_limits_set().then((result) => {\n this.currentLimitsSet = result\n })\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.limitsbar {\n cursor: default;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 5px;\n width: var(--width);\n}\n.limitsbar__container {\n position: relative;\n flex: 1;\n height: var(--container-height);\n border: 1px solid black;\n background-color: white;\n}\n.limitsbar__redlow {\n position: absolute;\n top: -1px;\n left: 0px;\n width: var(--redlow-width);\n height: var(--container-height);\n background-color: red;\n}\n.limitsbar__redhigh {\n position: absolute;\n top: -1px;\n right: 0px;\n width: var(--redhigh-width);\n height: var(--container-height);\n background-color: red;\n}\n.limitsbar__yellowlow {\n position: absolute;\n top: -1px;\n left: var(--redlow-width);\n width: var(--yellowlow-width);\n height: var(--container-height);\n background-color: rgb(255, 220, 0);\n}\n.limitsbar__yellowhigh {\n position: absolute;\n top: -1px;\n right: var(--redhigh-width);\n width: var(--yellowhigh-width);\n height: var(--container-height);\n background-color: rgb(255, 220, 0);\n}\n.limitsbar__greenlow {\n position: absolute;\n top: -1px;\n left: calc(var(--redlow-width) + var(--yellowlow-width));\n width: var(--greenlow-width);\n height: var(--container-height);\n background-color: green;\n}\n.limitsbar__greenhigh {\n position: absolute;\n top: -1px;\n right: calc(var(--redhigh-width) + var(--yellowhigh-width));\n width: var(--greenhigh-width);\n height: var(--container-height);\n background-color: green;\n}\n.limitsbar__blue {\n position: absolute;\n top: -1px;\n left: calc(\n var(--redlow-width) + var(--yellowlow-width) + var(--greenlow-width)\n );\n width: var(--blue-width);\n height: var(--container-height);\n background-color: blue;\n}\n.limitsbar__line {\n position: absolute;\n left: var(--position);\n width: 1px;\n height: var(--container-height);\n background-color: rgb(128, 128, 128);\n}\n$arrow-size: 5px;\n.limitsbar__arrow {\n position: absolute;\n top: -$arrow-size;\n left: var(--position);\n width: 0;\n height: 0;\n transform: translateX(-$arrow-size); // Transform so it sits over the line\n border-left: $arrow-size solid transparent;\n border-right: $arrow-size solid transparent;\n border-top: $arrow-size solid rgb(128, 128, 128);\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LimitsbarWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LimitsbarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitsbarWidget.vue?vue&type=template&id=4d506ea0&scoped=true&\"\nimport script from \"./LimitsbarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitsbarWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LimitsbarWidget.vue?vue&type=style&index=0&id=4d506ea0&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d506ea0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\"},[_c('div',{staticClass:\"led align-self-center\",style:([_vm.cssProps, _vm.computedStyle])}),_c('label-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.labelName,\"settings\":_vm.settings,\"widget-index\":1}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\">\n <div class=\"led align-self-center\" :style=\"[cssProps, computedStyle]\"></div>\n <label-widget\n :parameters=\"labelName\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport VWidget from './VWidget'\nexport default {\n mixins: [VWidget],\n data() {\n return {\n radius: 15,\n fullLabelDisplay: false,\n }\n },\n created() {\n if (this.parameters[4]) {\n this.radius = parseInt(this.parameters[4])\n }\n if (this.parameters[5] && this.parameters[5].toLowerCase() === 'true') {\n this.fullLabelDisplay = true\n }\n },\n computed: {\n labelName() {\n // LabelWidget uses index 0 from the parameters prop\n // so create an array with the label text in the first position\n if (this.fullLabelDisplay) {\n return [\n this.parameters[0] +\n ' ' +\n this.parameters[1] +\n ' ' +\n this.parameters[2],\n ]\n } else {\n return [this.parameters[2]]\n }\n },\n cssProps() {\n const value = this.$store.state.tlmViewerValues[this.valueId][0]\n return {\n '--height': this.radius + 'px',\n '--width': this.radius + 'px',\n '--color': this.limitsColor,\n }\n },\n },\n methods: {\n getType() {\n var type = 'CONVERTED'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n return type\n },\n },\n}\n</script>\n\n<style scoped>\n.led {\n height: var(--height);\n width: var(--width);\n background-color: var(--color);\n border-radius: 50%;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LimitscolorWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LimitscolorWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitscolorWidget.vue?vue&type=template&id=348c2b1c&scoped=true&\"\nimport script from \"./LimitscolorWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitscolorWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LimitscolorWidget.vue?vue&type=style&index=0&id=348c2b1c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"348c2b1c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"limitsbar\",style:([_vm.cssProps, _vm.computedStyle])},[_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"limitsbar__container\"},[_c('div',{staticClass:\"limitsbar__redlow\"}),_c('div',{staticClass:\"limitsbar__redhigh\"}),_c('div',{staticClass:\"limitsbar__yellowlow\"}),_c('div',{staticClass:\"limitsbar__yellowhigh\"}),_c('div',{staticClass:\"limitsbar__greenlow\"}),_c('div',{staticClass:\"limitsbar__greenhigh\"}),_c('div',{staticClass:\"limitsbar__blue\"}),_c('div',{staticClass:\"limitsbar__line\"}),_c('div',{staticClass:\"limitsbar__arrow\"})])}]\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div class=\"limitsbar\" :style=\"[cssProps, computedStyle]\">\n <div class=\"limitsbar__container\">\n <div class=\"limitsbar__redlow\" />\n <div class=\"limitsbar__redhigh\" />\n <div class=\"limitsbar__yellowlow\" />\n <div class=\"limitsbar__yellowhigh\" />\n <div class=\"limitsbar__greenlow\" />\n <div class=\"limitsbar__greenhigh\" />\n <div class=\"limitsbar__blue\" />\n\n <div class=\"limitsbar__line\" />\n <div class=\"limitsbar__arrow\" />\n </div>\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport { CosmosApi } from '../../services/cosmos-api.js'\n\nconst DEFAULT_LIMITS_SET = 'DEFAULT'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n width: 20, // px\n height: 100, // users will override with px\n redLow: 0,\n yellowLow: 0,\n greenLow: 0,\n greenHigh: 0,\n yellowHigh: 0,\n redHigh: 0,\n blue: 0,\n api: null,\n limitsSettings: {\n DEFAULT: [],\n },\n currentLimitsSet: DEFAULT_LIMITS_SET,\n currentSetRefreshInterval: null,\n }\n },\n computed: {\n cssProps: function () {\n const value = this.$store.state.tlmViewerValues[this.valueId][0]\n this.calcLimits(this.limitsSettings[this.selectedLimitsSet])\n return {\n '--height': this.height + 'px',\n '--width': this.width + 'px',\n '--container-width': this.width - 5 + 'px',\n '--position':\n this.calcPosition(\n value,\n this.limitsSettings[this.selectedLimitsSet]\n ) + '%',\n '--redlow-height': this.redLow + '%',\n '--redhigh-height': this.redHigh + '%',\n '--yellowlow-height': this.yellowLow + '%',\n '--yellowhigh-height': this.yellowHigh + '%',\n '--greenlow-height': this.greenLow + '%',\n '--greenhigh-height': this.greenHigh + '%',\n '--blue-height': this.blue + '%',\n }\n },\n selectedLimitsSet: function () {\n return this.limitsSettings.hasOwnProperty(this.currentLimitsSet)\n ? this.currentLimitsSet\n : DEFAULT_LIMITS_SET\n },\n },\n created() {\n this.api = new CosmosApi()\n this.api\n .get_limits(this.parameters[0], this.parameters[1], this.parameters[2])\n .then((data) => {\n this.limitsSettings = data\n })\n this.getCurrentLimitsSet()\n this.currentSetRefreshInterval = setInterval(\n this.getCurrentLimitsSet,\n 60 * 1000\n )\n\n let type = 'CONVERTED'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${this.parameters[2]}__${type}`\n\n this.$store.commit('tlmViewerAddItem', this.valueId)\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n clearInterval(this.currentSetRefreshInterval)\n },\n methods: {\n calcPosition(value, limitsSettings) {\n if (!value || !limitsSettings) {\n return\n }\n let divisor = 0.8\n if (limitsSettings[0] === limitsSettings[1]) {\n divisor += 0.1\n }\n if (limitsSettings[2] === limitsSettings[3]) {\n divisor += 0.1\n }\n const scale = (limitsSettings[3] - limitsSettings[0]) / divisor\n const lowValue = limitsSettings[0] - 0.1 * scale\n const highValue = limitsSettings[3] - 0.1 * scale\n\n if (value.raw) {\n if (value.raw === '-Infinity') {\n return 0\n } else {\n // NaN and Infinity\n return 100\n }\n }\n if (value < this.min) {\n return 0\n } else if (value > this.max) {\n return 100\n } else {\n const result = parseInt(((value - lowValue) / scale) * 100.0)\n if (result > 100) {\n return 100\n } else if (result < 0) {\n return 0\n } else {\n return result\n }\n }\n },\n calcLimits(limitsSettings) {\n if (!limitsSettings) {\n return\n }\n let scale = 80\n if (limitsSettings[0] === limitsSettings[1]) {\n this.redLow = 0\n scale += 10\n } else {\n this.redLow = 10\n }\n if (limitsSettings[2] === limitsSettings[3]) {\n this.redHigh = 0\n scale += 10\n } else {\n this.redHigh = 10\n }\n const range = 1.0 * (limitsSettings[3] - limitsSettings[0])\n this.yellowLow = Math.round(\n ((limitsSettings[1] - limitsSettings[0]) / range) * scale\n )\n this.yellowHigh = Math.round(\n ((limitsSettings[3] - limitsSettings[2]) / range) * scale\n )\n if (limitsSettings.length > 4) {\n this.greenLow = Math.round(\n ((limitsSettings[4] - limitsSettings[1]) / range) * scale\n )\n this.greenHigh = Math.round(\n ((limitsSettings[2] - limitsSettings[5]) / range) * scale\n )\n this.blue = Math.round(\n 100 -\n this.redLow -\n this.yellowLow -\n this.greenLow -\n this.greenHigh -\n this.yellowHigh -\n this.redHigh\n )\n } else {\n this.greenLow = Math.round(\n 100 - this.redLow - this.yellowLow - this.yellowHigh - this.redHigh\n )\n this.greenHigh = 0\n this.blue = 0\n }\n },\n getCurrentLimitsSet: function () {\n this.api.get_limits_set().then((result) => {\n this.currentLimitsSet = result\n })\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.limitsbar {\n cursor: default;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 5px;\n height: var(--height);\n}\n.limitsbar__container {\n position: relative;\n flex: 1 1 100%;\n width: var(--container-width);\n border: 1px solid black;\n background-color: white;\n}\n.limitsbar__redlow {\n position: absolute;\n bottom: 0px;\n width: var(--container-width);\n height: var(--redlow-height);\n background-color: red;\n}\n.limitsbar__redhigh {\n position: absolute;\n top: 0px;\n width: var(--container-width);\n height: var(--redhigh-height);\n background-color: red;\n}\n.limitsbar__yellowlow {\n position: absolute;\n bottom: var(--redlow-height);\n height: var(--yellowlow-height);\n width: var(--container-width);\n background-color: rgb(255, 220, 0);\n}\n.limitsbar__yellowhigh {\n position: absolute;\n top: var(--redhigh-height);\n height: var(--yellowhigh-height);\n width: var(--container-width);\n background-color: rgb(255, 220, 0);\n}\n.limitsbar__greenlow {\n position: absolute;\n bottom: calc(var(--redlow-height) + var(--yellowlow-height));\n width: var(--container-width);\n height: var(--greenlow-height);\n background-color: green;\n}\n.limitsbar__greenhigh {\n position: absolute;\n top: calc(var(--redhigh-height) + var(--yellowhigh-height));\n width: var(--container-width);\n height: var(--greenhigh-height);\n background-color: green;\n}\n.limitsbar__blue {\n position: absolute;\n bottom: calc(\n var(--redlow-height) + var(--yellowlow-height) + var(--greenlow-height)\n );\n width: var(--container-width);\n height: var(--blue-height);\n background-color: blue;\n}\n.limitsbar__line {\n position: absolute;\n bottom: var(--position);\n width: var(--container-width);\n height: 1px;\n background-color: rgb(128, 128, 128);\n}\n$arrow-size: 5px;\n.limitsbar__arrow {\n position: absolute;\n bottom: var(--position);\n left: var(--container-width);\n width: 0;\n height: 0;\n transform: translateY($arrow-size); // Transform so it sits over the line\n border-top: $arrow-size solid transparent;\n border-bottom: $arrow-size solid transparent;\n border-right: $arrow-size solid rgb(128, 128, 128);\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LimitscolumnWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LimitscolumnWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitscolumnWidget.vue?vue&type=template&id=5f237a99&scoped=true&\"\nimport script from \"./LimitscolumnWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitscolumnWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LimitscolumnWidget.vue?vue&type=style&index=0&id=5f237a99&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5f237a99\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('graph',{ref:'graph' + _vm.id,attrs:{\"id\":_vm.id,\"state\":_vm.state,\"selected-graph-id\":_vm.id,\"seconds-graphed\":_vm.secondsGraphed,\"points-saved\":_vm.pointsSaved,\"points-graphed\":_vm.pointsGraphed,\"initial-items\":_vm.items,\"height\":_vm.size.height,\"width\":_vm.size.width,\"hide-system-bar\":\"\",\"hide-overview\":\"\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-card',{nativeOn:{\"click\":function($event){return _vm.$emit('click')}}},[_c('v-system-bar',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hideSystemBar),expression:\"!hideSystemBar\"}],class:_vm.selectedGraphId === _vm.id ? 'active' : 'inactive'},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.errors.length !== 0),expression:\"errors.length !== 0\"}],staticClass:\"mx-2\"},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"error-graph-icon\"},on:{\"click\":function($event){_vm.errorDialog = true}}},[_vm._v(\"mdi-alert\")])],1)]}}])},[_c('span',[_vm._v(\"Errors\")])])],1),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"edit-graph-icon\"},on:{\"click\":function($event){_vm.editGraph = true}}},[_vm._v(\" mdi-pencil \")])],1)]}}])},[_c('span',[_vm._v(\" Edit \")])]),_c('v-spacer'),_c('span',[_vm._v(_vm._s(_vm.title))]),_c('v-spacer'),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.calcFullSize),expression:\"calcFullSize\"}],attrs:{\"data-test\":\"collapse-all\"},on:{\"click\":_vm.collapseAll}},[_vm._v(\" mdi-arrow-collapse \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.calcFullSize),expression:\"!calcFullSize\"}],attrs:{\"data-test\":\"expand-all\"},on:{\"click\":_vm.expandAll}},[_vm._v(\" mdi-arrow-expand \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.calcFullSize),expression:\"calcFullSize\"}]},[_vm._v(\" Collapse \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.calcFullSize),expression:\"!calcFullSize\"}]},[_vm._v(\" Expand \")])])],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullWidth),expression:\"fullWidth\"}],attrs:{\"data-test\":\"collapse-width\"},on:{\"click\":_vm.collapseWidth}},[_vm._v(\" mdi-arrow-collapse-horizontal \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullWidth),expression:\"!fullWidth\"}],attrs:{\"data-test\":\"expand-width\"},on:{\"click\":_vm.expandWidth}},[_vm._v(\" mdi-arrow-expand-horizontal \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullWidth),expression:\"fullWidth\"}]},[_vm._v(\" Collapse Width \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullWidth),expression:\"!fullWidth\"}]},[_vm._v(\" Expand Width \")])])],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullHeight),expression:\"fullHeight\"}],attrs:{\"data-test\":\"collapse-height\"},on:{\"click\":_vm.collapseHeight}},[_vm._v(\" mdi-arrow-collapse-vertical \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullHeight),expression:\"!fullHeight\"}],attrs:{\"data-test\":\"expand-height\"},on:{\"click\":_vm.expandHeight}},[_vm._v(\" mdi-arrow-expand-vertical \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullHeight),expression:\"fullHeight\"}]},[_vm._v(\" Collapse Height \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullHeight),expression:\"!fullHeight\"}]},[_vm._v(\" Expand Height \")])])],1),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}],attrs:{\"data-test\":\"minimize-screen-icon\"},on:{\"click\":_vm.minMaxTransition}},[_vm._v(\" mdi-window-minimize \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.expand),expression:\"!expand\"}],attrs:{\"data-test\":\"maximize-screen-icon\"},on:{\"click\":_vm.minMaxTransition}},[_vm._v(\" mdi-window-maximize \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_vm._v(\" Minimize \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.expand),expression:\"!expand\"}]},[_vm._v(\" Maximize \")])]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"close-graph-icon\"},on:{\"click\":function($event){return _vm.$emit('close-graph')}}},[_vm._v(\" mdi-close-box \")])],1)]}}])},[_c('span',[_vm._v(\" Close \")])])],1),_c('v-expand-transition',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}],ref:\"chart\",staticClass:\"pa-1\",attrs:{\"id\":\"chart\"}},[_c('div',{attrs:{\"id\":(\"chart\" + _vm.id)}}),_c('div',{attrs:{\"id\":\"betweenCharts\"}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hideOverview),expression:\"!hideOverview\"}],attrs:{\"id\":(\"overview\" + _vm.id)}})])])],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.$emit('input')},\"input\":function($event){return _vm.editGraphClose()}},model:{value:(_vm.editGraph),callback:function ($$v) {_vm.editGraph=$$v},expression:\"editGraph\"}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Edit Graph\")]),_c('v-spacer')],1),_c('v-card',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{staticClass:\"pb-2\",attrs:{\"label\":\"Title\",\"hide-details\":\"\",\"data-test\":\"edit-graph-title\"},model:{value:(_vm.title),callback:function ($$v) {_vm.title=$$v},expression:\"title\"}})],1),_c('v-card-text',{staticClass:\"pa-0\"},[_vm._v(\" Select a start date/time for the graph. Leave blank for start now. \")]),_c('date-time-chooser',{attrs:{\"required\":false,\"date-label\":\"Start Date\",\"time-label\":\"Start Time\"},on:{\"date-time\":function($event){_vm.graphStartDateTime = $event}}}),_c('v-card-text',{staticClass:\"pa-0\"},[_vm._v(\" Select a end date/time for the graph. Leave blank for continuous real-time graphing. \")]),_c('date-time-chooser',{attrs:{\"date-label\":\"End Date\",\"time-label\":\"End Time\"},on:{\"date-time\":function($event){_vm.graphEndDateTime = $event}}}),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-select',{attrs:{\"label\":\"Legend Position\",\"items\":_vm.legendPositions,\"data-test\":\"edit-legend-position\"},model:{value:(_vm.legendPosition),callback:function ($$v) {_vm.legendPosition=$$v},expression:\"legendPosition\"}})],1),_c('v-card-text',{staticClass:\"pa-0\"},[_vm._v(\" Optional Y axis settings. \")]),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"px-2\"},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"label\":\"Min Y\",\"type\":\"number\",\"data-test\":\"graph-min-y\"},model:{value:(_vm.graphMinY),callback:function ($$v) {_vm.graphMinY=$$v},expression:\"graphMinY\"}})],1),_c('v-col',{staticClass:\"px-2\"},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"label\":\"Max Y\",\"type\":\"number\",\"data-test\":\"graph-max-y\"},model:{value:(_vm.graphMaxY),callback:function ($$v) {_vm.graphMaxY=$$v},expression:\"graphMaxY\"}})],1)],1),_c('v-data-table',{staticClass:\"elevation-1 my-2\",attrs:{\"item-key\":\"itemId\",\"headers\":_vm.itemHeaders,\"items\":_vm.editItems,\"items-per-page\":5,\"footer-props\":{\n 'items-per-page-options': [5],\n }},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\n var item = ref.item;\nreturn [_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-btn',{attrs:{\"icon\":\"\",\"data-test\":(\"delete-item-icon\" + (item.itemId))},on:{\"click\":function () { return _vm.removeItems([item]); }}},[_c('v-icon',[_vm._v(\"mdi-delete\")])],1)],1)]}}],null,true)},[_c('span',[_vm._v(\"Remove\")])])]}},{key:\"no-data\",fn:function(){return [_c('span',[_vm._v(\"Currently no items on this graph\")])]},proxy:true}])}),_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.editGraphClose()}}},[_vm._v(\" Ok \")])],1)],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.errorDialog),callback:function ($$v) {_vm.errorDialog=$$v},expression:\"errorDialog\"}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Errors\")]),_c('v-spacer')],1),_c('v-card',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{staticClass:\"pb-2\",attrs:{\"readonly\":\"\",\"hide-details\":\"\",\"label\":\"Graph Title\"},model:{value:(_vm.title),callback:function ($$v) {_vm.title=$$v},expression:\"title\"}})],1),_c('v-row',{staticClass:\"my-3\"},[_c('v-textarea',{attrs:{\"readonly\":\"\",\"rows\":\"8\",\"value\":_vm.error}})],1),_c('v-row',[_c('v-btn',{attrs:{\"block\":\"\"},on:{\"click\":_vm.clearErrors}},[_vm._v(\" Clear \")])],1)],1)],1),(_vm.editGraphMenu)?_c('v-menu',{attrs:{\"position-x\":_vm.editGraphMenuX,\"position-y\":_vm.editGraphMenuY,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.editGraphMenu),callback:function ($$v) {_vm.editGraphMenu=$$v},expression:\"editGraphMenu\"}},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){_vm.editGraph = true}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\" Edit \"+_vm._s(_vm.title)+\" \")])],1)],1)],1):_vm._e(),(_vm.editItem)?_c('v-dialog',{attrs:{\"max-width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }_vm.editItem = false}},model:{value:(_vm.editItem),callback:function ($$v) {_vm.editItem=$$v},expression:\"editItem\"}},[_c('v-card',{staticClass:\"pa-3\"},[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(\"Edit Item\")]),_c('v-select',{attrs:{\"outlined\":\"\",\"hide-details\":\"\",\"label\":\"Value Type\",\"items\":_vm.valueTypes},model:{value:(_vm.currentType),callback:function ($$v) {_vm.currentType=$$v},expression:\"currentType\"}}),_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.closeEditItem()}}},[_vm._v(\"Ok\")])],1)],1)],1):_vm._e(),(_vm.itemMenu)?_c('v-menu',{attrs:{\"position-x\":_vm.itemMenuX,\"position-y\":_vm.itemMenuY,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.itemMenu),callback:function ($$v) {_vm.itemMenu=$$v},expression:\"itemMenu\"}},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){return _vm.openEditItem()}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\" Edit \"+_vm._s(_vm.selectedItem.itemName)+\" \")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.removeItems([_vm.selectedItem])}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\" Delete \"+_vm._s(_vm.selectedItem.itemName)+\" \")])],1)],1)],1):_vm._e(),(_vm.legendMenu)?_c('v-menu',{attrs:{\"position-x\":_vm.legendMenuX,\"position-y\":_vm.legendMenuY,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.legendMenu),callback:function ($$v) {_vm.legendMenu=$$v},expression:\"legendMenu\"}},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){return _vm.moveLegend('top')}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\"Legend Top\")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.moveLegend('bottom')}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\"Legend Bottom\")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.moveLegend('left')}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\"Legend Left\")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.moveLegend('right')}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\"Legend RIght\")])],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-row',[_c('v-col',[_c('v-menu',{attrs:{\"close-on-content-click\":\"\",\"transition\":\"scale-transition\",\"offset-y\":\"\",\"max-width\":\"290px\",\"min-width\":\"290px\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-text-field',_vm._g({attrs:{\"label\":_vm.dateLabel,\"name\":(\"date\" + (Date.now())),\"rules\":_vm.dateRules,\"type\":\"date\",\"data-test\":\"date-chooser\"},model:{value:(_vm.date),callback:function ($$v) {_vm.date=$$v},expression:\"date\"}},on))]}}])})],1),_c('v-col',[_c('v-text-field',{attrs:{\"label\":_vm.timeLabel,\"name\":(\"time\" + (Date.now())),\"rules\":_vm.timeRules,\"type\":\"time\",\"step\":\"1\",\"data-test\":\"time-chooser\"},on:{\"change\":_vm.onChange},model:{value:(_vm.time),callback:function ($$v) {_vm.time=$$v},expression:\"time\"}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-row>\n <v-col>\n <v-menu\n close-on-content-click\n transition=\"scale-transition\"\n offset-y\n max-width=\"290px\"\n min-width=\"290px\"\n >\n <template v-slot:activator=\"{ on }\">\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n :label=\"dateLabel\"\n :name=\"`date${Date.now()}`\"\n :rules=\"dateRules\"\n v-model=\"date\"\n v-on=\"on\"\n type=\"date\"\n data-test=\"date-chooser\"\n />\n </template>\n </v-menu>\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=\"timeLabel\"\n :name=\"`time${Date.now()}`\"\n :rules=\"timeRules\"\n v-model=\"time\"\n type=\"time\"\n step=\"1\"\n @change=\"onChange\"\n data-test=\"time-chooser\"\n />\n </v-col>\n </v-row>\n </div>\n</template>\n\n<script>\nimport { isValid, parse, format, getTime } from 'date-fns'\n\nexport default {\n props: {\n required: {\n type: Boolean,\n default: true,\n },\n initialDate: {\n type: Date,\n default: null,\n },\n initialTime: {\n type: Date,\n default: null,\n },\n dateLabel: {\n type: String,\n default: 'Date',\n },\n timeLabel: {\n type: String,\n default: 'Time',\n },\n },\n data() {\n return {\n date: null,\n time: null,\n rules: {\n required: (value) => !!value || 'Required',\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 dateRules() {\n let result = [this.rules.date]\n if (this.time || this.required) {\n result.push(this.rules.required)\n }\n return result\n },\n timeRules() {\n let result = [this.rules.time]\n if (this.date || this.required) {\n result.push(this.rules.required)\n }\n return result\n },\n },\n methods: {\n onChange() {\n if (!!this.date && !!this.time) {\n this.$emit('date-time', this.date + ' ' + this.time)\n } else {\n this.$emit('date-time', null)\n }\n },\n },\n}\n</script>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DateTimeChooser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DateTimeChooser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DateTimeChooser.vue?vue&type=template&id=37777c5e&\"\nimport script from \"./DateTimeChooser.vue?vue&type=script&lang=js&\"\nexport * from \"./DateTimeChooser.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-card @click.native=\"$emit('click')\">\n <v-system-bar\n :class=\"selectedGraphId === id ? 'active' : 'inactive'\"\n v-show=\"!hideSystemBar\"\n >\n <div v-show=\"errors.length !== 0\" class=\"mx-2\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"error-graph-icon\" @click=\"errorDialog = true\"\n >mdi-alert</v-icon\n >\n </div>\n </template>\n <span>Errors</span>\n </v-tooltip>\n </div>\n\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"edit-graph-icon\" @click=\"editGraph = true\">\n mdi-pencil\n </v-icon>\n </div>\n </template>\n <span> Edit </span>\n </v-tooltip>\n\n <v-spacer />\n <span>{{ title }}</span>\n <v-spacer />\n\n <div v-show=\"expand\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"collapse-all\"\n v-show=\"calcFullSize\"\n @click=\"collapseAll\"\n >\n mdi-arrow-collapse\n </v-icon>\n <v-icon\n data-test=\"expand-all\"\n v-show=\"!calcFullSize\"\n @click=\"expandAll\"\n >\n mdi-arrow-expand\n </v-icon>\n </div>\n </template>\n <span v-show=\"calcFullSize\"> Collapse </span>\n <span v-show=\"!calcFullSize\"> Expand </span>\n </v-tooltip>\n </div>\n\n <div v-show=\"expand\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"collapse-width\"\n v-show=\"fullWidth\"\n @click=\"collapseWidth\"\n >\n mdi-arrow-collapse-horizontal\n </v-icon>\n <v-icon\n data-test=\"expand-width\"\n v-show=\"!fullWidth\"\n @click=\"expandWidth\"\n >\n mdi-arrow-expand-horizontal\n </v-icon>\n </div>\n </template>\n <span v-show=\"fullWidth\"> Collapse Width </span>\n <span v-show=\"!fullWidth\"> Expand Width </span>\n </v-tooltip>\n </div>\n\n <div v-show=\"expand\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"collapse-height\"\n v-show=\"fullHeight\"\n @click=\"collapseHeight\"\n >\n mdi-arrow-collapse-vertical\n </v-icon>\n <v-icon\n data-test=\"expand-height\"\n v-show=\"!fullHeight\"\n @click=\"expandHeight\"\n >\n mdi-arrow-expand-vertical\n </v-icon>\n </div>\n </template>\n <span v-show=\"fullHeight\"> Collapse Height </span>\n <span v-show=\"!fullHeight\"> Expand Height </span>\n </v-tooltip>\n </div>\n\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"expand\"\n >\n mdi-window-minimize\n </v-icon>\n <v-icon\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"!expand\"\n >\n mdi-window-maximize\n </v-icon>\n </div>\n </template>\n <span v-show=\"expand\"> Minimize </span>\n <span v-show=\"!expand\"> Maximize </span>\n </v-tooltip>\n\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"close-graph-icon\"\n @click=\"$emit('close-graph')\"\n >\n mdi-close-box\n </v-icon>\n </div>\n </template>\n <span> Close </span>\n </v-tooltip>\n </v-system-bar>\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\" />\n <div :id=\"`overview${id}`\" v-show=\"!hideOverview\"></div>\n </div>\n </v-expand-transition>\n </v-card>\n\n <!-- Edit dialog -->\n <v-dialog\n v-model=\"editGraph\"\n @keydown.esc=\"$emit('input')\"\n @input=\"editGraphClose()\"\n max-width=\"600\"\n >\n <v-system-bar>\n <v-spacer />\n <span>Edit Graph</span>\n <v-spacer />\n </v-system-bar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n class=\"pb-2\"\n label=\"Title\"\n v-model=\"title\"\n hide-details\n data-test=\"edit-graph-title\"\n />\n </v-row>\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 <date-time-chooser\n :required=\"false\"\n date-label=\"Start Date\"\n time-label=\"Start Time\"\n @date-time=\"graphStartDateTime = $event\"\n />\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 <date-time-chooser\n date-label=\"End Date\"\n time-label=\"End Time\"\n @date-time=\"graphEndDateTime = $event\"\n />\n <v-row dense>\n <v-select\n label=\"Legend Position\"\n :items=\"legendPositions\"\n v-model=\"legendPosition\"\n data-test=\"edit-legend-position\"\n />\n </v-row>\n <v-card-text class=\"pa-0\"> Optional Y axis settings. </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n hide-details\n label=\"Min Y\"\n v-model=\"graphMinY\"\n type=\"number\"\n data-test=\"graph-min-y\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n hide-details\n label=\"Max Y\"\n v-model=\"graphMaxY\"\n type=\"number\"\n data-test=\"graph-max-y\"\n />\n </v-col>\n </v-row>\n <v-data-table\n item-key=\"itemId\"\n class=\"elevation-1 my-2\"\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 top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-btn\n icon\n :data-test=\"`delete-item-icon${item.itemId}`\"\n @click=\"() => removeItems([item])\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\n </div>\n </template>\n <span>Remove</span>\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-card-actions>\n <v-btn color=\"primary\" @click=\"editGraphClose()\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" max-width=\"600\">\n <v-system-bar>\n <v-spacer />\n <span>Errors</span>\n <v-spacer />\n </v-system-bar>\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 :position-x=\"editGraphMenuX\"\n :position-y=\"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 <!-- Edit Item dialog -->\n <v-dialog\n max-width=\"600\"\n v-if=\"editItem\"\n v-model=\"editItem\"\n @keydown.esc=\"editItem = false\"\n >\n <v-card class=\"pa-3\">\n <v-card-title class=\"headline\">Edit Item</v-card-title>\n <v-select\n outlined\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n v-model=\"currentType\"\n />\n <v-card-actions>\n <v-btn color=\"primary\" @click=\"closeEditItem()\">Ok</v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n\n <!-- Edit Item right click context menu -->\n <v-menu\n v-if=\"itemMenu\"\n v-model=\"itemMenu\"\n :position-x=\"itemMenuX\"\n :position-y=\"itemMenuY\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"openEditItem()\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ selectedItem.itemName }}\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"removeItems([selectedItem])\">\n <v-list-item-title style=\"cursor: pointer\">\n Delete {{ selectedItem.itemName }}\n </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 :position-x=\"legendMenuX\"\n :position-y=\"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</v-list-item-title\n >\n </v-list-item>\n <v-list-item @click=\"moveLegend('bottom')\">\n <v-list-item-title style=\"cursor: pointer\"\n >Legend Bottom</v-list-item-title\n >\n </v-list-item>\n <v-list-item @click=\"moveLegend('left')\">\n <v-list-item-title style=\"cursor: pointer\"\n >Legend Left</v-list-item-title\n >\n </v-list-item>\n <v-list-item @click=\"moveLegend('right')\">\n <v-list-item-title style=\"cursor: pointer\"\n >Legend RIght</v-list-item-title\n >\n </v-list-item>\n </v-list>\n </v-menu>\n </div>\n</template>\n\n<script>\nimport DateTimeChooser from './DateTimeChooser'\nimport uPlot from 'uplot'\nimport bs from 'binary-search'\nimport { toDate, format, getTime } from 'date-fns'\nimport Cable from '../services/cable.js'\n\nrequire('uplot/dist/uPlot.min.css')\n\nexport default {\n components: {\n DateTimeChooser,\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 hideSystemBar: {\n type: Boolean,\n default: false,\n },\n hideOverview: {\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 },\n data() {\n return {\n itemHeaders: [\n { text: 'Target Name', value: 'targetName' },\n { text: 'Packet Name', value: 'packetName' },\n { text: 'Item Name', value: 'itemName' },\n { text: 'Actions', value: 'actions', sortable: false },\n ],\n valueTypes: ['CONVERTED', 'RAW'],\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 legendPositions: ['top', 'bottom', 'left', 'right'],\n selectedItem: null,\n currentType: null,\n title: '',\n overview: null,\n data: [[]],\n graphMinY: '',\n graphMaxY: '',\n graphStartDateTime: this.startTime,\n graphEndDateTime: null,\n indexes: {},\n items: this.initialItems || [],\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 colors: [\n 'blue',\n 'red',\n 'green',\n 'darkorange',\n 'purple',\n 'cornflowerblue',\n 'lime',\n 'gold',\n 'hotpink',\n 'tan',\n 'cyan',\n 'peru',\n 'maroon',\n 'coral',\n 'navy',\n 'teal',\n 'brown',\n 'crimson',\n 'lightblue',\n 'black',\n ],\n }\n },\n computed: {\n calcFullSize: function () {\n return this.fullWidth || this.fullHeight\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 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 }\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 const { chartSeries, overviewSeries } = this.items.reduce(\n (seriesObj, item) => {\n const commonProps = {\n spanGaps: true,\n stroke: this.colors.shift(),\n }\n seriesObj.chartSeries.push({\n ...commonProps,\n item: item,\n label: item.itemName,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else {\n return rawValue == null ? '--' : rawValue.toFixed(2)\n }\n },\n })\n seriesObj.overviewSeries.push({\n ...commonProps,\n })\n return seriesObj\n },\n { chartSeries: [], overviewSeries: [] }\n )\n\n let chartOpts = {\n ...this.getSize('chart'),\n ...this.getScales(),\n ...this.getAxes('chart'),\n // series: series, // TODO: Uncomment with the performance code\n series: [\n {\n label: 'Time',\n value: (u, v) =>\n // Convert the unix timestamp into a formatted date / time\n v == null ? '--' : format(toDate(v * 1000), 'yyyy-MM-dd HH:mm:ss'),\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: 'cosmos',\n // setSeries links graphs so clicking an item to hide it also hides the other graph item\n // setSeries: true,\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 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 // Tell TlmGrapher that you might need to resize since on mouseenter\n // we start showing value popups and the graph can expand\n canvas.addEventListener('mouseenter', (e) => {\n this.$emit('resize')\n })\n canvas.addEventListener('mouseleave', (e) => {\n this.$emit('resize')\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)\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 },\n ],\n },\n }\n // console.time('chart')\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 series: [...overviewSeries],\n cursor: {\n y: false,\n points: {\n show: false, // TODO: This isn't working\n },\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 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 //console.timeEnd('chart')\n this.moveLegend(this.legendPosition)\n\n // Allow the charts to dynamically resize when the window resizes\n window.addEventListener('resize', this.handleResize)\n\n if (this.state !== 'stop') {\n this.subscribe()\n }\n },\n beforeDestroy: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.cable.disconnect()\n window.removeEventListener('resize', this.handleResize)\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.subscribe()\n }\n break\n // case 'pause': Nothing to do ... see the data function\n case 'stop':\n this.subscription.unsubscribe()\n this.subscription = null\n break\n }\n },\n data: function (newData, oldData) {\n // Ignore changes to the data while we're paused\n if (this.state === 'pause') {\n return\n }\n this.graph.setData(newData)\n this.overview.setData(newData)\n let max = newData[0][newData[0].length - 1]\n let ptsMin = newData[0][newData[0].length - this.pointsGraphed]\n let min = newData[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 },\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 (val) {\n this.needToUpdate = true\n if (val && typeof val === 'string') {\n this.graphStartDateTime =\n new Date(this.graphStartDateTime).getTime() * 1_000_000\n }\n },\n graphEndDateTime: function (val) {\n this.needToUpdate = true\n if (val && typeof val === 'string') {\n this.graphEndDateTime =\n new Date(this.graphEndDateTime).getTime() * 1_000_000\n }\n },\n },\n methods: {\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 () {\n this.editGraph = false\n if (this.needToUpdate) {\n this.removeItemsFromSubscription()\n this.addItemsToSubscription()\n this.needToUpdate = false\n }\n this.moveLegend(this.legendPosition)\n },\n handleResize: function () {\n // TODO: Should this method be throttled?\n this.graph.setSize(this.getSize('chart'))\n this.overview.setSize(this.getSize('overview'))\n },\n resize: function () {\n this.graph.setSize(this.getSize('chart'))\n this.overview.setSize(this.getSize('overview'))\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 (endTime = null) {\n this.cable\n .createSubscription('StreamingChannel', localStorage.scope, {\n received: (data) => this.received(data),\n connected: () => {\n this.addItemsToSubscription(this.items, endTime)\n },\n disconnected: () => {\n this.errors.push({\n type: 'disconnected',\n message: 'COSMOS backend connection disconnected',\n time: new Date().getTime(),\n })\n },\n rejected: () => {\n this.errors.push({\n type: 'rejected',\n message: 'COSMOS 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 // var 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 const navDrawer = document.getElementById('cosmos-nav-drawer')\n const navDrawerWidth = navDrawer.classList.contains(\n 'v-navigation-drawer--open'\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 chooser = document.getElementsByClassName('c-chooser')[0]\n let height = 100\n if (type === 'overview') {\n // Hide overview if we're NOT full height\n this.hideOverview = !this.fullHeight\n } else if (chooser) {\n // Height of chart is viewportSize - chooser - overview - fudge factor (primarily padding)\n height = viewHeight - chooser.clientHeight - height - 190\n if (!this.fullHeight) {\n height = height / 2.0 + 10 // 5px padding top and bottom\n }\n }\n let width = viewWidth - 60 // 30px padding left and right\n if (!this.fullWidth) {\n width = width / 2.0 - 10 // 5px padding left and right\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(0, 0, 0, .1)'\n let axisColor = 'black'\n if (this.$vuetify.theme.dark) {\n strokeColor = 'rgba(255, 255, 255, .1)'\n axisColor = 'white'\n }\n return {\n axes: [\n {\n stroke: axisColor,\n grid: {\n show: true,\n stroke: strokeColor,\n width: 2,\n },\n },\n {\n size: 70, // This size supports values up to 99 million\n stroke: axisColor,\n grid: {\n show: type === 'overview' ? false : true,\n stroke: strokeColor,\n width: 2,\n },\n },\n ],\n }\n },\n openEditItem: function () {\n this.currentType = this.selectedItem.valueType\n this.editItem = true\n },\n closeEditItem: function () {\n this.editItem = false\n // Only change if the type was changed\n if (this.selectedItem.valueType !== this.currentType) {\n this.changeType()\n }\n },\n changeType: function () {\n this.removeItems([this.selectedItem])\n this.selectedItem.valueType = this.currentType\n this.addItems([this.selectedItem])\n },\n addItems: function (itemArray, type = 'CONVERTED') {\n for (const item of itemArray) {\n item.valueType ||= type // set the default type\n this.items.push(item)\n const index = this.data.length\n const color = this.colors.shift()\n this.graph.addSeries(\n {\n spanGaps: true,\n item: item,\n label: item.itemName,\n stroke: color,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else {\n return rawValue === null ? '--' : rawValue.toFixed(2)\n }\n },\n },\n index\n )\n this.overview.addSeries({ spanGaps: true, stroke: color }, index)\n let newData = Array(this.data[0].length)\n this.data.splice(index, 0, newData)\n this.indexes[this.subscriptionKey(item)] = index\n }\n this.addItemsToSubscription(itemArray)\n },\n addItemsToSubscription: function (\n itemArray = this.items,\n endTime = this.graphEndDateTime\n ) {\n if (this.subscription) {\n CosmosAuth.updateToken(CosmosAuth.defaultMinValidity).then(() => {\n this.subscription.perform('add', {\n scope: localStorage.scope,\n mode: 'DECOM',\n token: localStorage.cosmosToken,\n items: itemArray.map(this.subscriptionKey),\n start_time: this.graphStartDateTime,\n end_time: endTime,\n })\n })\n }\n },\n removeItems: function (itemArray) {\n this.removeItemsFromSubscription(itemArray)\n\n for (const key of itemArray.map(this.subscriptionKey)) {\n const index = this.reorderIndexes(key)\n // Put back the color so it's available for new series\n this.colors.unshift(this.graph.series[index].stroke)\n this.items.splice(index - 1, 1)\n this.data.splice(index, 1)\n this.graph.delSeries(index)\n this.overview.delSeries(index)\n this.graph.setData(this.data)\n this.overview.setData(this.data)\n }\n },\n removeItemsFromSubscription: function (itemArray = this.items) {\n if (this.subscription) {\n this.subscription.perform('remove', {\n scope: localStorage.scope,\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 (var i in this.indexes) {\n if (this.indexes[i] > index) {\n this.indexes[i] -= 1\n }\n }\n return index\n },\n received: function (json_data) {\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 let data = JSON.parse(json_data)\n for (let i = 0; i < data.length; i++) {\n let time = data[i].time / 1_000_000_000.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) {\n this.graphStartDateTime = this.data[0][0] * 1_000_000_000\n this.$emit('started', this.graphStartDateTime)\n }\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.currentType = 'RAW'\n this.changeType()\n }\n } else {\n array[index] = value\n }\n }\n }\n },\n subscriptionKey: function (item) {\n return `TLM__${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`\n },\n },\n}\n</script>\n\n<style>\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</style>\n\n<style scoped>\n#chart {\n background-color: var(--v-tertiary-darken2);\n}\n/* TODO: Get this to work with white theme, values would be 0 in white */\n#chart >>> .u-select {\n background-color: rgba(255, 255, 255, 0.07);\n}\n/* This prevents the axis from responding to pointer-events.\n Necessary if we set overview height to 0 which makes it hidden but still present.\n However, we simply don't display the overview with v-show.\n See https://github.com/leeoniya/uPlot/issues/689\n#chart >>> .u-axis {\n pointer-events: none;\n} */\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Graph.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Graph.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Graph.vue?vue&type=template&id=6e0520e4&scoped=true&\"\nimport script from \"./Graph.vue?vue&type=script&lang=js&\"\nexport * from \"./Graph.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Graph.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./Graph.vue?vue&type=style&index=1&id=6e0520e4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6e0520e4\",\n null\n \n)\n\nexport default component.exports","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <graph\n :ref=\"'graph' + id\"\n :id=\"id\"\n :state=\"state\"\n :selected-graph-id=\"id\"\n :seconds-graphed=\"secondsGraphed\"\n :points-saved=\"pointsSaved\"\n :points-graphed=\"pointsGraphed\"\n :initial-items=\"items\"\n :height=\"size.height\"\n :width=\"size.width\"\n hide-system-bar\n hide-overview\n />\n</template>\n\n<script>\nimport Widget from './Widget'\nimport Graph from '../Graph.vue'\n\nconst valueType = 'CONVERTED'\nexport default {\n components: {\n Graph,\n },\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,\n },\n ],\n secondsGraphed: 1000,\n pointsSaved: 1000000,\n pointsGraphed: 1000,\n size: {\n height: 300,\n width: 400,\n },\n }\n },\n created: function () {\n this.settings.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,\n })\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 },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LinegraphWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LinegraphWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LinegraphWidget.vue?vue&type=template&id=329eddcc&\"\nimport script from \"./LinegraphWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LinegraphWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{staticClass:\"pa-0\"},_vm._l((_vm.widgetChunks),function(chunk,rindex){return _c('v-row',{key:'r' + rindex,attrs:{\"no-gutters\":\"\"}},_vm._l((chunk),function(widget,cindex){return _c('v-col',{key:'c' + cindex},[_c(widget.type,_vm._g({tag:\"component\",attrs:{\"target\":widget.target,\"parameters\":widget.parameters,\"settings\":widget.settings,\"widgets\":widget.widgets,\"name\":widget.name}},_vm.$listeners))],1)}),1)}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-container class=\"pa-0\">\n <v-row\n no-gutters\n v-for=\"(chunk, rindex) in widgetChunks\"\n :key=\"'r' + rindex\"\n >\n <v-col v-for=\"(widget, cindex) in chunk\" :key=\"'c' + cindex\">\n <component\n v-on=\"$listeners\"\n :is=\"widget.type\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n />\n </v-col>\n </v-row>\n </v-container>\n</template>\n\n<script>\nimport Layout from './Layout'\nimport _ from 'lodash'\nexport default {\n mixins: [Layout],\n computed: {\n columns() {\n return parseInt(this.parameters[0])\n },\n widgetChunks() {\n return _.chunk(this.widgets, this.columns)\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MatrixbycolumnsWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MatrixbycolumnsWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MatrixbycolumnsWidget.vue?vue&type=template&id=fca6767e&\"\nimport script from \"./MatrixbycolumnsWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./MatrixbycolumnsWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-progress-linear',{style:(_vm.computedStyle),attrs:{\"height\":\"25\",\"value\":_vm._value}},[_c('strong',[_vm._v(_vm._s(Math.ceil(_vm._value))+\"%\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-progress-linear height=\"25\" :value=\"_value\" :style=\"computedStyle\">\n <strong>{{ Math.ceil(_value) }}%</strong>\n </v-progress-linear>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport WidthSetter from './WidthSetter'\n\nexport default {\n mixins: [Widget, WidthSetter],\n props: {\n value: {\n default: null,\n },\n },\n data: function () {\n return {\n valueId: null,\n scaleFactor: 1.0,\n width: 80,\n }\n },\n computed: {\n _value: function () {\n let value = this.value\n if (value === null) {\n value = this.$store.state.tlmViewerValues[this.valueId][0]\n }\n return parseInt(parseFloat(value) * this.scaleFactor)\n },\n },\n created: function () {\n if (this.parameters[3]) {\n this.scaleFactor = parseFloat(this.parameters[3])\n }\n if (this.parameters[4]) {\n this.width = parseInt(this.parameters[4])\n }\n // If they're not passing us the value we have to register\n if (this.value === null) {\n var type = 'CONVERTED'\n if (this.parameters[5]) {\n type = this.parameters[5]\n }\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${this.parameters[2]}__${type}`\n this.$store.commit('tlmViewerAddItem', this.valueId)\n }\n },\n destroyed: function () {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ProgressbarWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ProgressbarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProgressbarWidget.vue?vue&type=template&id=340cafa2&\"\nimport script from \"./ProgressbarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ProgressbarWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-radio',{style:(_vm.computedStyle),attrs:{\"hide-details\":\"\",\"dense\":\"\",\"label\":_vm.label,\"value\":_vm.value}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-radio\n hide-details\n dense\n :label=\"label\"\n :style=\"computedStyle\"\n :value=\"value\"\n />\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n props: {\n value: {\n type: Number,\n },\n },\n mixins: [Widget],\n data() {\n return {\n label: 'Radio',\n }\n },\n created() {\n this.label = this.parameters[0]\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RadiobuttonWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RadiobuttonWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RadiobuttonWidget.vue?vue&type=template&id=a85ab600&\"\nimport script from \"./RadiobuttonWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./RadiobuttonWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-radio-group',{style:(_vm.computedStyle),attrs:{\"hide-details\":\"\",\"dense\":\"\"},model:{value:(_vm.selectedIndex),callback:function ($$v) {_vm.selectedIndex=$$v},expression:\"selectedIndex\"}},_vm._l((_vm.widgets),function(widget,index){return _c(widget.type,_vm._g({key:index,tag:\"component\",attrs:{\"value\":index,\"target\":widget.target,\"parameters\":widget.parameters,\"settings\":widget.settings,\"name\":widget.name}},_vm.$listeners))}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-radio-group\n hide-details\n dense\n v-model=\"selectedIndex\"\n :style=\"computedStyle\"\n >\n <component\n v-for=\"(widget, index) in widgets\"\n v-on=\"$listeners\"\n :value=\"index\"\n :key=\"index\"\n :is=\"widget.type\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :name=\"widget.name\"\n />\n </v-radio-group>\n</template>\n\n<script>\nimport Layout from './Layout'\n\nexport default {\n mixins: [Layout],\n data() {\n return {\n selectedIndex: 0,\n }\n },\n created() {\n // Look through the settings and see if we're a NAMED_WIDGET\n this.settings.forEach((setting) => {\n if (setting[0] === 'NAMED_WIDGET') {\n setting[2].setNamedWidget(setting[1], this)\n }\n })\n if (this.parameters[0]) {\n this.selectedIndex = parseInt(this.parameters[0])\n }\n },\n methods: {\n selected() {\n return this.selectedIndex\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RadiogroupWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RadiogroupWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RadiogroupWidget.vue?vue&type=template&id=59f86dd7&\"\nimport script from \"./RadiogroupWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./RadiogroupWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"rangebar\",style:([_vm.cssProps, _vm.computedStyle])},[_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"rangebar__container\"},[_c('div',{staticClass:\"rangebar__line\"}),_c('div',{staticClass:\"rangebar__arrow\"})])}]\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div class=\"rangebar\" :style=\"[cssProps, computedStyle]\">\n <div class=\"rangebar__container\">\n <div class=\"rangebar__line\" />\n <div class=\"rangebar__arrow\" />\n </div>\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n width: '100%', // users will override with px\n height: 20, // px\n }\n },\n computed: {\n cssProps() {\n return {\n '--height': this.height + 'px',\n '--width': this.width,\n '--container-height': this.height - 5 + 'px',\n '--position': this.calcPosition() + '%',\n }\n },\n min() {\n return parseInt(this.parameters[3])\n },\n max() {\n return parseInt(this.parameters[4])\n },\n range() {\n return this.max - this.min\n },\n },\n created() {\n const type = this.parameters[5] ? this.parameters[5] : 'CONVERTED'\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${this.parameters[2]}__${type}`\n this.$store.commit('tlmViewerAddItem', this.valueId)\n\n if (this.parameters[6]) {\n // Width by default is 100% so add the px designator\n this.width = parseInt(this.parameters[6]) + 'px'\n }\n if (this.parameters[7]) {\n // Height by default is a number\n this.height = parseInt(this.parameters[7])\n }\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n },\n methods: {\n calcPosition() {\n const value = this.$store.state.tlmViewerValues[this.valueId][0]\n if (!value) {\n return 0\n }\n if (value.raw) {\n if (value.raw === '-Infinity') {\n return 0\n } else {\n // NaN and Infinity\n return 100\n }\n }\n const result = ((value - this.min) / this.range) * 100\n if (result > 100) {\n return 100\n } else if (result < 0) {\n return 0\n } else {\n return result\n }\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.rangebar {\n cursor: default;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 5px;\n width: var(--width);\n}\n.rangebar__container {\n position: relative;\n flex: 1;\n height: var(--container-height);\n border: 1px solid black;\n background-color: white;\n}\n.rangebar__line {\n position: absolute;\n left: var(--position);\n width: 1px;\n height: var(--container-height);\n background-color: rgb(128, 128, 128);\n}\n$arrow-size: 5px;\n.rangebar__arrow {\n position: absolute;\n top: -$arrow-size;\n left: var(--position);\n width: 0;\n height: 0;\n transform: translateX(-$arrow-size); // Transform so it sits over the line\n border-left: $arrow-size solid transparent;\n border-right: $arrow-size solid transparent;\n border-top: $arrow-size solid rgb(128, 128, 128);\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RangebarWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RangebarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RangebarWidget.vue?vue&type=template&id=3ec94604&scoped=true&\"\nimport script from \"./RangebarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./RangebarWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RangebarWidget.vue?vue&type=style&index=0&id=3ec94604&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3ec94604\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('verticalbox-widget',_vm._g({attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings,\"widgets\":_vm.widgets,\"content-style\":_vm.scrollwindowStyle}},_vm.$listeners))}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <verticalbox-widget\n v-on=\"$listeners\"\n :parameters=\"parameters\"\n :settings=\"settings\"\n :widgets=\"widgets\"\n :content-style=\"scrollwindowStyle\"\n />\n</template>\n\n<script>\nimport Layout from './Layout'\nimport VerticalboxWidget from './VerticalboxWidget'\n\nexport default {\n mixins: [Layout],\n components: {\n VerticalboxWidget,\n },\n computed: {\n maxHeight: function () {\n return Number(\n this.settings.find((setting) => setting[0] === 'HEIGHT')?.at(1) ?? 180\n )\n },\n scrollwindowStyle: function () {\n return `\n max-height: ${this.maxHeight}px;\n overflow-y: scroll;\n `\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ScrollwindowWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ScrollwindowWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ScrollwindowWidget.vue?vue&type=template&id=523ce438&\"\nimport script from \"./ScrollwindowWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ScrollwindowWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-banner',{attrs:{\"single-line\":\"\"}},[_vm._v(_vm._s(_vm.labelText))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-banner single-line>{{ labelText }}</v-banner>\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n computed: {\n labelText() {\n return this.parameters[0]\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SectionheaderWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SectionheaderWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SectionheaderWidget.vue?vue&type=template&id=5867789a&\"\nimport script from \"./SectionheaderWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./SectionheaderWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{style:(_vm.style)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div :style=\"style\" />\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n computed: {\n style: function () {\n return [\n `width: ${this.parameters[0]}px;`,\n `height: ${this.parameters[1]}px;`,\n ].join('')\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpacerWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpacerWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpacerWidget.vue?vue&type=template&id=5cbb2052&\"\nimport script from \"./SpacerWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./SpacerWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-tabs',{model:{value:(_vm.curTab),callback:function ($$v) {_vm.curTab=$$v},expression:\"curTab\"}},_vm._l((_vm.widgets),function(tab,index){return _c('v-tab',{key:index},[_vm._v(\" \"+_vm._s(tab.parameters[0])+\" \")])}),1),_c('v-tabs-items',{model:{value:(_vm.curTab),callback:function ($$v) {_vm.curTab=$$v},expression:\"curTab\"}},_vm._l((_vm.widgets),function(tab,tabIndex){return _c('v-tab-item',{key:tabIndex},_vm._l((tab.widgets),function(widget,widgetIndex){return _c(widget.type,_vm._g({key:(tabIndex + \"-\" + widgetIndex),tag:\"component\",attrs:{\"target\":widget.target,\"parameters\":widget.parameters,\"settings\":widget.settings,\"widgets\":widget.widgets,\"name\":widget.name}},_vm.$listeners))}),1)}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-tabs v-model=\"curTab\">\n <v-tab v-for=\"(tab, index) in widgets\" :key=\"index\">\n {{ tab.parameters[0] }}\n </v-tab>\n </v-tabs>\n <v-tabs-items v-model=\"curTab\">\n <v-tab-item v-for=\"(tab, tabIndex) in widgets\" :key=\"tabIndex\">\n <component\n v-for=\"(widget, widgetIndex) in tab.widgets\"\n v-on=\"$listeners\"\n :key=\"`${tabIndex}-${widgetIndex}`\"\n :is=\"widget.type\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n />\n </v-tab-item>\n </v-tabs-items>\n </div>\n</template>\n\n<script>\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n data: function () {\n return {\n curTab: null,\n }\n },\n watch: {\n curTab: function () {\n this.$emit('min-max-screen')\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TabbookWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TabbookWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TabbookWidget.vue?vue&type=template&id=28716ba5&\"\nimport script from \"./TabbookWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./TabbookWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-textarea',{class:_vm.valueClass,style:(_vm.computedStyle),attrs:{\"solo\":\"\",\"dense\":\"\",\"readonly\":\"\",\"hide-details\":\"\",\"placeholder\":\"Value\",\"height\":_vm.height,\"value\":_vm._value,\"data-test\":\"valueText\"},on:{\"contextmenu\":_vm.showContextMenu}}),_c('v-menu',{attrs:{\"position-x\":_vm.x,\"position-y\":_vm.y,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.contextMenuShown),callback:function ($$v) {_vm.contextMenuShown=$$v},expression:\"contextMenuShown\"}},[_c('v-list',_vm._l((_vm.contextMenuOptions),function(item,index){return _c('v-list-item',{key:index,on:{\"click\":function($event){$event.stopPropagation();return item.action.apply(null, arguments)}}},[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)}),1)],1),_c('details-dialog',{attrs:{\"target-name\":_vm.parameters[0],\"packet-name\":_vm.parameters[1],\"item-name\":_vm.parameters[2]},model:{value:(_vm.viewDetails),callback:function ($$v) {_vm.viewDetails=$$v},expression:\"viewDetails\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-textarea\n solo\n dense\n readonly\n hide-details\n placeholder=\"Value\"\n :height=\"height\"\n :value=\"_value\"\n :class=\"valueClass\"\n :style=\"computedStyle\"\n data-test=\"valueText\"\n @contextmenu=\"showContextMenu\"\n />\n <v-menu\n v-model=\"contextMenuShown\"\n :position-x=\"x\"\n :position-y=\"y\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n :target-name=\"parameters[0]\"\n :packet-name=\"parameters[1]\"\n :item-name=\"parameters[2]\"\n v-model=\"viewDetails\"\n />\n </div>\n</template>\n\n<script>\nimport VWidget from './VWidget'\nimport WidthSetter from './WidthSetter'\nimport DetailsDialog from '../../components/DetailsDialog'\nimport 'sprintf-js'\n\nexport default {\n components: {\n DetailsDialog,\n },\n data: function () {\n return {\n height: 100,\n }\n },\n mixins: [VWidget, WidthSetter],\n created: function () {\n if (this.parameters[3]) {\n this.width = parseInt(this.parameters[3])\n }\n if (this.parameters[4]) {\n this.height = parseInt(this.parameters[4])\n }\n },\n methods: {\n getType: function () {\n var type = 'CONVERTED'\n if (this.parameters[5]) {\n type = this.parameters[5]\n }\n return type\n },\n },\n}\n</script>\n\n<style scoped>\n.value >>> div {\n min-height: 24px !important;\n display: flex !important;\n align-items: center !important;\n}\n.cosmos-green >>> input {\n color: rgb(0, 150, 0);\n}\n.cosmos-yellow >>> input {\n color: rgb(190, 135, 0);\n}\n.cosmos-red >>> input {\n color: red;\n}\n.cosmos-blue >>> input {\n color: rgb(0, 100, 255);\n}\n.cosmos-purple >>> input {\n color: rgb(200, 0, 200);\n}\n.cosmos-black >>> input {\n color: black;\n}\n.cosmos-white >>> input {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TextboxWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TextboxWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TextboxWidget.vue?vue&type=template&id=580e657e&scoped=true&\"\nimport script from \"./TextboxWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./TextboxWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TextboxWidget.vue?vue&type=style&index=0&id=580e657e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"580e657e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-text-field',{style:(_vm.computedStyle),attrs:{\"solo\":\"\",\"dense\":\"\",\"single-line\":\"\",\"hide-no-data\":\"\",\"hide-details\":\"\"},model:{value:(_vm.value),callback:function ($$v) {_vm.value=$$v},expression:\"value\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-text-field\n solo\n dense\n single-line\n hide-no-data\n hide-details\n v-model=\"value\"\n :style=\"computedStyle\"\n >\n </v-text-field>\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n value: null,\n }\n },\n // computed: {\n // width() {\n // return this.parameters[0] ? parseInt(this.parameters[0]) : 20\n // }\n // },\n created() {\n // Look through the settings and see if we're a NAMED_WIDGET\n this.settings.forEach((setting) => {\n if (setting[0] === 'NAMED_WIDGET') {\n setting[2].setNamedWidget(setting[1], this)\n }\n })\n\n // TODO: Is this actually working or do we need the computed width above (see LedWidget for an example)\n if (this.parameters[0]) {\n this.settings.push(['WIDTH', parseInt(this.parameters[0])])\n }\n if (this.parameters[1]) {\n this.value = this.parameters[1]\n }\n },\n methods: {\n text() {\n return this.value\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TextfieldWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TextfieldWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TextfieldWidget.vue?vue&type=template&id=7594193b&\"\nimport script from \"./TextfieldWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./TextfieldWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"text-h5 text-center pa-1 mt-1 label\",style:(_vm.computedStyle)},[_vm._v(\" \"+_vm._s(_vm.labelText)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <span class=\"text-h5 text-center pa-1 mt-1 label\" :style=\"computedStyle\">\n {{ labelText }}\n </span>\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n computed: {\n labelText() {\n return this.parameters[0]\n },\n },\n created() {\n if (this.parameters.length < 1) {\n throw new Error('Not enough parameters for TITLE.')\n }\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TitleWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TitleWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TitleWidget.vue?vue&type=template&id=3405a7c9&\"\nimport script from \"./TitleWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./TitleWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"value-widget-container\"},[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-text-field',_vm._g(_vm._b({class:_vm.valueClass,style:(_vm.computedStyle),attrs:{\"solo\":\"\",\"dense\":\"\",\"readonly\":\"\",\"single-line\":\"\",\"hide-no-data\":\"\",\"hide-details\":\"\",\"placeholder\":\"Value\",\"value\":_vm._value,\"data-test\":\"value\"},on:{\"contextmenu\":_vm.showContextMenu}},'v-text-field',attrs,false),on))]}}])},[_c('span',[_vm._v(_vm._s(_vm.fullName))])]),_c('v-menu',{attrs:{\"position-x\":_vm.x,\"position-y\":_vm.y,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.contextMenuShown),callback:function ($$v) {_vm.contextMenuShown=$$v},expression:\"contextMenuShown\"}},[_c('v-list',_vm._l((_vm.contextMenuOptions),function(item,index){return _c('v-list-item',{key:index,on:{\"click\":function($event){$event.stopPropagation();return item.action.apply(null, arguments)}}},[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)}),1)],1),_c('details-dialog',{attrs:{\"target-name\":_vm.parameters[0],\"packet-name\":_vm.parameters[1],\"item-name\":_vm.parameters[2]},model:{value:(_vm.viewDetails),callback:function ($$v) {_vm.viewDetails=$$v},expression:\"viewDetails\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div class=\"value-widget-container\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-text-field\n solo\n dense\n readonly\n single-line\n hide-no-data\n hide-details\n placeholder=\"Value\"\n :value=\"_value\"\n :class=\"valueClass\"\n :style=\"computedStyle\"\n data-test=\"value\"\n @contextmenu=\"showContextMenu\"\n v-bind=\"attrs\"\n v-on=\"on\"\n />\n </template>\n <span>{{ fullName }}</span>\n </v-tooltip>\n <v-menu\n v-model=\"contextMenuShown\"\n :position-x=\"x\"\n :position-y=\"y\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n :target-name=\"parameters[0]\"\n :packet-name=\"parameters[1]\"\n :item-name=\"parameters[2]\"\n v-model=\"viewDetails\"\n />\n </div>\n</template>\n\n<script>\nimport VWidget from './VWidget'\nimport DetailsDialog from '../../components/DetailsDialog'\nexport default {\n components: {\n DetailsDialog,\n },\n mixins: [VWidget],\n computed: {\n fullName() {\n return (\n this.parameters[0] + ' ' + this.parameters[1] + ' ' + this.parameters[2]\n )\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.value-widget-container {\n min-height: 34px;\n}\n.value ::v-deep div {\n min-height: 24px !important;\n display: flex !important;\n align-items: center !important;\n}\n// TODO: These cosmos styles are also defined in assets/stylesheets/layout/_overrides.scss\n// Can they somehow be reused here? We need to force the style down into the input\n.cosmos-green ::v-deep input {\n color: rgb(0, 150, 0);\n}\n.cosmos-yellow ::v-deep input {\n color: rgb(190, 135, 0);\n}\n.cosmos-red ::v-deep input {\n color: red;\n}\n.cosmos-blue ::v-deep input {\n color: rgb(0, 100, 255);\n}\n.cosmos-purple ::v-deep input {\n color: rgb(200, 0, 200);\n}\n.cosmos-black ::v-deep input {\n color: black;\n}\n.cosmos-white ::v-deep input {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ValueWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ValueWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ValueWidget.vue?vue&type=template&id=d1470e40&scoped=true&\"\nimport script from \"./ValueWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ValueWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ValueWidget.vue?vue&type=style&index=0&id=d1470e40&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d1470e40\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\",style:([_vm.defaultStyle, _vm.computedStyle])},[_c('value-widget',{attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings}}),_c('limitsbar-widget',{attrs:{\"parameters\":_vm.limitsBarParameters,\"settings\":_vm.settings.filter(function (x) { return x[0] == 1; }).map(function (x) { return x.slice(1); })}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div\n ref=\"container\"\n class=\"d-flex flex-row\"\n :style=\"[defaultStyle, computedStyle]\"\n >\n <value-widget :parameters=\"parameters\" :settings=\"settings\" />\n <limitsbar-widget\n :parameters=\"limitsBarParameters\"\n :settings=\"settings.filter((x) => x[0] == 1).map((x) => x.slice(1))\"\n />\n </div>\n</template>\n\n<script>\nimport ValueWidget from './ValueWidget.vue'\nimport LimitsbarWidget from './LimitsbarWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n ValueWidget,\n LimitsbarWidget,\n },\n computed: {\n limitsBarParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n 'CONVERTED',\n ]\n },\n defaultStyle() {\n return {\n width: '300px',\n }\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ValuelimitsbarWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ValuelimitsbarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ValuelimitsbarWidget.vue?vue&type=template&id=fab6546e&\"\nimport script from \"./ValuelimitsbarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ValuelimitsbarWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-column\",style:(_vm.computedStyle)},[_c('limitscolumn-widget',{attrs:{\"parameters\":_vm.limitsColumnParameters,\"settings\":_vm.settings,\"widget-index\":0}}),_c('value-widget',{attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings,\"widget-index\":1}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-column\" :style=\"computedStyle\">\n <limitscolumn-widget\n :parameters=\"limitsColumnParameters\"\n :settings=\"settings\"\n :widget-index=\"0\"\n />\n <value-widget\n :parameters=\"parameters\"\n :settings=\"settings\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport ValueWidget from './ValueWidget.vue'\nimport LimitscolumnWidget from './LimitscolumnWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n ValueWidget,\n LimitscolumnWidget,\n },\n created() {\n this.settings.push(['WIDTH', '100'])\n },\n computed: {\n limitsColumnParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n 'CONVERTED',\n ]\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ValuelimitscolumnWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ValuelimitscolumnWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ValuelimitscolumnWidget.vue?vue&type=template&id=68762854&\"\nimport script from \"./ValuelimitscolumnWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ValuelimitscolumnWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-row\",style:([_vm.defaultStyle, _vm.computedStyle])},[_c('value-widget',{attrs:{\"parameters\":_vm.valueParameters}}),_c('rangebar-widget',{attrs:{\"parameters\":_vm.parameters}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div\n ref=\"container\"\n class=\"d-flex flex-row\"\n :style=\"[defaultStyle, computedStyle]\"\n >\n <value-widget :parameters=\"valueParameters\" />\n <rangebar-widget :parameters=\"parameters\" />\n </div>\n</template>\n\n<script>\nimport ValueWidget from './ValueWidget.vue'\nimport RangebarWidget from './RangebarWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n ValueWidget,\n RangebarWidget,\n },\n computed: {\n valueParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n 'WITH_UNITS',\n ]\n },\n defaultStyle() {\n return {\n width: '300px',\n }\n },\n },\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ValuerangebarWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ValuerangebarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ValuerangebarWidget.vue?vue&type=template&id=6dfb6492&\"\nimport script from \"./ValuerangebarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ValuerangebarWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"d-flex flex-column\"},_vm._l((_vm.widgets),function(widget,index){return _c(widget.type,_vm._g({key:index,tag:\"component\",attrs:{\"target\":widget.target,\"parameters\":widget.parameters,\"settings\":widget.settings,\"widgets\":widget.widgets,\"name\":widget.name}},_vm.$listeners))}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-column\">\n <component\n v-on=\"$listeners\"\n v-for=\"(widget, index) in widgets\"\n :key=\"index\"\n :is=\"widget.type\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n />\n </div>\n</template>\n\n<script>\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VerticalWidget.vue?vue&type=template&id=0402d44d&\"\nimport script from \"./VerticalWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./VerticalWidget.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-banner',{attrs:{\"single-line\":\"\"}},[_vm._v(_vm._s(_vm.parameters.join(' ')))]),_c('vertical-widget',_vm._g({style:(_vm.contentStyle),attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings,\"widgets\":_vm.widgets}},_vm.$listeners))],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-banner single-line>{{ parameters.join(' ') }}</v-banner>\n <vertical-widget\n v-on=\"$listeners\"\n :style=\"contentStyle\"\n :parameters=\"parameters\"\n :settings=\"settings\"\n :widgets=\"widgets\"\n />\n </div>\n</template>\n\n<script>\nimport VerticalWidget from './VerticalWidget'\nimport Layout from './Layout'\n\nexport default {\n mixins: [Layout],\n components: {\n VerticalWidget,\n },\n props: {\n contentStyle: {\n type: String,\n },\n },\n}\n</script>\n\n<style scoped>\n.v-banner >>> div {\n background-color: var(--v-tertiary-darken2) !important;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalboxWidget.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalboxWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VerticalboxWidget.vue?vue&type=template&id=818decfa&scoped=true&\"\nimport script from \"./VerticalboxWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./VerticalboxWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VerticalboxWidget.vue?vue&type=style&index=0&id=818decfa&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"818decfa\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('top-bar',{attrs:{\"title\":_vm.title,\"menus\":_vm.menus}}),_c('v-container',[_c('v-row',[_c('v-col',[_c('v-select',{staticClass:\"ma-0 pa-0\",attrs:{\"label\":\"Select Target\",\"items\":_vm.targets,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":_vm.targetSelect},model:{value:(_vm.selectedTarget),callback:function ($$v) {_vm.selectedTarget=$$v},expression:\"selectedTarget\"}})],1),_c('v-col',[_c('v-select',{staticClass:\"ma-0 pa-0\",attrs:{\"label\":\"Select Screen\",\"items\":_vm.screens},on:{\"change\":_vm.screenSelect},model:{value:(_vm.selectedScreen),callback:function ($$v) {_vm.selectedScreen=$$v},expression:\"selectedScreen\"}})],1),_c('v-col',[_c('v-btn',{staticClass:\"primary\",attrs:{\"disabled\":!_vm.selectedScreen},on:{\"click\":function () { return _vm.showScreen(_vm.selectedTarget, _vm.selectedScreen); }}},[_vm._v(\" Show Screen \")])],1)],1)],1),_c('div',{staticClass:\"grid\"},_vm._l((_vm.definitions),function(def){return _c('div',{key:def.id,ref:\"gridItem\",refInFor:true,staticClass:\"item\",attrs:{\"id\":_vm.screenId(def.id)}},[_c('div',{staticClass:\"item-content\"},[_c('cosmos-screen',{attrs:{\"target\":def.target,\"screen\":def.screen,\"definition\":def.definition},on:{\"close-screen\":function($event){return _vm.closeScreen(def.id)},\"min-max-screen\":_vm.refreshLayout,\"add-new-screen\":function ($event) { return _vm.showScreen.apply(void 0, $event); }}})],1)])}),0),(_vm.openConfig)?_c('open-config-dialog',{attrs:{\"tool\":_vm.toolName},on:{\"success\":function($event){return _vm.openConfiguration($event)}},model:{value:(_vm.openConfig),callback:function ($$v) {_vm.openConfig=$$v},expression:\"openConfig\"}}):_vm._e(),(_vm.saveConfig)?_c('save-config-dialog',{attrs:{\"tool\":_vm.toolName},on:{\"success\":function($event){return _vm.saveConfiguration($event)}},model:{value:(_vm.saveConfig),callback:function ($$v) {_vm.saveConfig=$$v},expression:\"saveConfig\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-card',[_c('v-system-bar',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.errors.length !== 0),expression:\"errors.length !== 0\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"error-graph-icon\"},on:{\"click\":function($event){_vm.errorDialog = true}}},[_vm._v(\" mdi-alert \")])],1)]}}])},[_c('span',[_vm._v(\" Errors \")])])],1),_c('v-spacer'),_c('span',[_vm._v(_vm._s(_vm.target)+\" \"+_vm._s(_vm.screen))]),_c('v-spacer'),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"edit-screen-icon\"},on:{\"click\":_vm.openEdit}},[_vm._v(\" mdi-pencil \")])],1)]}}])},[_c('span',[_vm._v(\" Edit Screen \")])]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}],attrs:{\"data-test\":\"minimize-screen-icon\"},on:{\"click\":_vm.minMaxTransition}},[_vm._v(\" mdi-window-minimize \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.expand),expression:\"!expand\"}],attrs:{\"data-test\":\"maximize-screen-icon\"},on:{\"click\":_vm.minMaxTransition}},[_vm._v(\" mdi-window-maximize \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_vm._v(\" Minimize Screen \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.expand),expression:\"!expand\"}]},[_vm._v(\" Maximize Screen \")])]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"close-screen-icon\"},on:{\"click\":function($event){return _vm.$emit('close-screen')}}},[_vm._v(\" mdi-close-box \")])],1)]}}])},[_c('span',[_vm._v(\" Close Screen \")])])],1),_c('v-expand-transition',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}],ref:\"screen\",staticClass:\"pa-1\"},[_c('vertical-widget',_vm._g({key:_vm.screenKey,attrs:{\"widgets\":_vm.layoutStack[0].widgets}},_vm.$listeners))],1)])],1),_c('v-dialog',{attrs:{\"width\":\"600\"},model:{value:(_vm.editDialog),callback:function ($$v) {_vm.editDialog=$$v},expression:\"editDialog\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Edit Screen: \"+_vm._s(_vm.target)+\" \"+_vm._s(_vm.screen)+\" \")]),_c('v-spacer'),_c('div',{staticClass:\"mx-2\"},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"download-screen-icon\"},on:{\"click\":_vm.downloadScreen}},[_vm._v(\" mdi-download \")])],1)]}}])},[_c('span',[_vm._v(\" Download Screen \")])])],1)],1),_c('v-card-text',[_c('v-row',{staticClass:\"mt-3\"},[_vm._v(\" Upload a screen file. \")]),_c('v-row',{attrs:{\"no-gutters\":\"\",\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"3\"}},[_c('v-btn',{attrs:{\"block\":\"\",\"color\":\"success\",\"disabled\":!_vm.file || _vm.loadingFile,\"loading\":_vm.loadingFile,\"data-test\":\"editScreenLoadBtn\"},on:{\"click\":_vm.loadFile},scopedSlots:_vm._u([{key:\"loader\",fn:function(){return [_c('span',[_vm._v(\"Loading...\")])]},proxy:true}])},[_vm._v(\" Load \")])],1),_c('v-col',{attrs:{\"cols\":\"9\"}},[_c('v-file-input',{attrs:{\"truncate-length\":\"15\",\"accept\":\".txt\",\"label\":\"Click to select .txt screen file.\"},model:{value:(_vm.file),callback:function ($$v) {_vm.file=$$v},expression:\"file\"}})],1)],1),_c('v-row',[_vm._v(\" Edit the screen definition. \")]),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-textarea',{attrs:{\"rows\":\"12\",\"rules\":[_vm.rules.required],\"data-test\":\"screen-text-input\"},model:{value:(_vm.currentDefinition),callback:function ($$v) {_vm.currentDefinition=$$v},expression:\"currentDefinition\"}})],1),_c('v-row',{staticClass:\"my-3\"},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.editErrors),expression:\"editErrors\"}],staticClass:\"red--text\",domProps:{\"textContent\":_vm._s(_vm.editErrors)}})]),_c('v-row',[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"outlined\":\"\",\"data-test\":\"editScreenCancelBtn\"},on:{\"click\":_vm.cancelEdit}},[_vm._v(\" Cancel \")]),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"color\":\"primary\",\"data-test\":\"editScreenSubmitBtn\",\"disabled\":!!_vm.editErrors},on:{\"click\":_vm.saveEdit}},[_vm._v(\" Save \")])],1)],1)],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.errorDialog),callback:function ($$v) {_vm.errorDialog=$$v},expression:\"errorDialog\"}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Screen: \"+_vm._s(_vm.target)+\" \"+_vm._s(_vm.screen)+\" Errors \")]),_c('v-spacer')],1),_c('v-card',{staticClass:\"pa-3\"},[_c('v-row',{staticClass:\"my-3\"},[_c('v-textarea',{attrs:{\"readonly\":\"\",\"rows\":\"13\",\"value\":_vm.error}})],1),_c('v-row',[_c('v-btn',{attrs:{\"block\":\"\"},on:{\"click\":_vm.clearErrors}},[_vm._v(\" Clear \")])],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nexport class ConfigParserError {\n constructor(config_parser, usage = '', url = '') {\n this.keyword = config_parser.keyword\n this.parameters = config_parser.parameters\n this.filename = config_parser.filename\n this.line = config_parser.line\n this.line_number = config_parser.line_number\n this.usage = usage\n this.url = url\n }\n}\n\nexport class ConfigParserService {\n keyword = null\n parameters = []\n filename = ''\n line = ''\n line_number = 0\n url = 'http://cosmosrb.com/docs/v5'\n\n constructor() {}\n\n verify_num_parameters(min_num_params, max_num_params, usage = '') {\n // This syntax works with 0 because each doesn't return any values\n // for a backwards range\n for (var index = 1; index <= min_num_params; index++) {\n // If the parameter is nil (0 based) then we have a problem\n if (this.parameters[index - 1] === undefined) {\n throw new ConfigParserError(\n this,\n `Not enough parameters for ${this.keyword}.`,\n usage,\n this.url\n )\n }\n }\n // If they pass null for max_params we don't check for a maximum number\n if (max_num_params && !this.parameters[max_num_params] === undefined) {\n throw new ConfigParserError(\n this,\n `Too many parameters for ${this.keyword}.`,\n usage,\n this.url\n )\n }\n }\n\n remove_quotes(string) {\n if (string.length < 2) {\n return string\n }\n var first_char = string.charAt(0)\n if (first_char !== '\"' && first_char !== \"'\") {\n return string\n }\n var last_char = string.charAt(string.length - 1)\n if (first_char !== last_char) {\n return string\n }\n return string.substring(1, string.length - 1)\n }\n\n scan_string(string, rx) {\n if (!rx.global) throw \"rx must have 'global' flag set\"\n var r = []\n string.replace(rx, function (match) {\n r.push(match)\n return match\n })\n return r\n }\n\n parse_string(\n input_string,\n original_filename,\n yield_non_keyword_lines,\n remove_quotes,\n handler\n ) {\n var line_continuation = false\n this.line = ''\n this.keyword = null\n this.parameters = []\n this.filename = original_filename\n\n // Break string in to lines\n var lines = input_string.split('\\n')\n var numLines = lines.length\n\n for (var i = 0; i < numLines; i++) {\n this.line_number = i + 1\n var line = lines[i]\n\n line = line.trim()\n\n var rx = /(\"([^\\\\\"]|\\\\.)*\")|('([^\\\\']|\\\\.)*')|\\S+/g\n var data = this.scan_string(line, rx)\n\n var first_item = ''\n if (data.length > 0) {\n first_item = first_item + data[0]\n }\n\n if (line_continuation) {\n this.line = this.line + line\n // Carry over keyword and parameters\n } else {\n this.line = line\n if (first_item.length === 0 || first_item.charAt(0) === '#') {\n this.keyword = null\n } else {\n this.keyword = first_item.toUpperCase()\n }\n this.parameters = []\n }\n\n // Ignore comments and blank lines\n if (this.keyword === null) {\n if (yield_non_keyword_lines && !line_continuation) {\n handler(this.keyword, this.parameters)\n }\n continue\n }\n\n if (line_continuation) {\n if (remove_quotes) {\n this.parameters.push(this.remove_quotes(first_item))\n } else {\n this.parameters.push(first_item)\n }\n line_continuation = false\n }\n\n var length = data.length\n if (length > 1) {\n for (var index = 1; index < length; index++) {\n var string = data[index]\n\n // Don't process trailing comments such as:\n // KEYWORD PARAM #This is a comment\n // But still process Ruby string interpolations such as:\n // KEYWORD PARAM #{var}\n if (string.length > 0 && string.charAt(0) === '#') {\n if (!(string.length > 1 && string.charAt(1) === '{')) {\n break\n }\n }\n\n // If the string is simply '&' and its the last string then its a line continuation so break the loop\n if (\n string.length === 1 &&\n string.charAt(0) === '&' &&\n index === length - 1\n ) {\n line_continuation = true\n continue\n }\n\n line_continuation = false\n if (remove_quotes) {\n this.parameters.push(this.remove_quotes(string))\n } else {\n this.parameters.push(string)\n }\n }\n }\n\n // If we detected a line continuation while going through all the\n // strings on the line then we strip off the continuation character and\n // return to the top of the loop to continue processing the line.\n if (line_continuation) {\n // Strip the continuation character\n if (this.line.length >= 1) {\n this.line = this.line.substring(0, this.line.length - 1)\n } else {\n this.line = ''\n }\n continue\n }\n\n handler(this.keyword, this.parameters)\n } // for\n } // parse_string\n} // class ConfigParserService\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-card>\n <v-system-bar>\n <div v-show=\"errors.length !== 0\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"error-graph-icon\"\n @click=\"errorDialog = true\"\n >\n mdi-alert\n </v-icon>\n </div>\n </template>\n <span> Errors </span>\n </v-tooltip>\n </div>\n <v-spacer />\n <span>{{ target }} {{ screen }}</span>\n <v-spacer />\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"edit-screen-icon\" @click=\"openEdit\">\n mdi-pencil\n </v-icon>\n </div>\n </template>\n <span> Edit Screen </span>\n </v-tooltip>\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"expand\"\n >\n mdi-window-minimize\n </v-icon>\n <v-icon\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"!expand\"\n >\n mdi-window-maximize\n </v-icon>\n </div>\n </template>\n <span v-show=\"expand\"> Minimize Screen </span>\n <span v-show=\"!expand\"> Maximize Screen </span>\n </v-tooltip>\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"close-screen-icon\"\n @click=\"$emit('close-screen')\"\n >\n mdi-close-box\n </v-icon>\n </div>\n </template>\n <span> Close Screen </span>\n </v-tooltip>\n </v-system-bar>\n <v-expand-transition>\n <div class=\"pa-1\" ref=\"screen\" v-show=\"expand\">\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n v-on=\"$listeners\"\n />\n </div>\n </v-expand-transition>\n </v-card>\n\n <!-- Edit dialog -->\n <v-dialog v-model=\"editDialog\" width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Edit Screen: {{ target }} {{ screen }} </span>\n <v-spacer />\n <div class=\"mx-2\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"download-screen-icon\"\n @click=\"downloadScreen\"\n >\n mdi-download\n </v-icon>\n </div>\n </template>\n <span> Download Screen </span>\n </v-tooltip>\n </div>\n </v-system-bar>\n <v-card-text>\n <v-row class=\"mt-3\"> Upload a screen file. </v-row>\n <v-row no-gutters align=\"center\">\n <v-col cols=\"3\">\n <v-btn\n block\n color=\"success\"\n @click=\"loadFile\"\n :disabled=\"!file || loadingFile\"\n :loading=\"loadingFile\"\n data-test=\"editScreenLoadBtn\"\n >\n Load\n <template v-slot:loader>\n <span>Loading...</span>\n </template>\n </v-btn>\n </v-col>\n <v-col cols=\"9\">\n <v-file-input\n v-model=\"file\"\n truncate-length=\"15\"\n accept=\".txt\"\n label=\"Click to select .txt screen file.\"\n />\n </v-col>\n </v-row>\n <v-row> Edit the screen definition. </v-row>\n <v-row no-gutters>\n <v-textarea\n v-model=\"currentDefinition\"\n rows=\"12\"\n :rules=\"[rules.required]\"\n data-test=\"screen-text-input\"\n />\n </v-row>\n <v-row class=\"my-3\">\n <span class=\"red--text\" v-show=\"editErrors\" v-text=\"editErrors\" />\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn\n @click=\"cancelEdit\"\n class=\"mx-2\"\n outlined\n data-test=\"editScreenCancelBtn\"\n >\n Cancel\n </v-btn>\n <v-btn\n @click=\"saveEdit\"\n class=\"mx-2\"\n color=\"primary\"\n data-test=\"editScreenSubmitBtn\"\n :disabled=\"!!editErrors\"\n >\n Save\n </v-btn>\n </v-row>\n </v-card-text>\n </v-card>\n </v-dialog>\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" max-width=\"600\">\n <v-system-bar>\n <v-spacer />\n <span> Screen: {{ target }} {{ screen }} Errors </span>\n <v-spacer />\n </v-system-bar>\n <v-card class=\"pa-3\">\n <v-row class=\"my-3\">\n <v-textarea readonly rows=\"13\" :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 </div>\n</template>\n\n<script>\nimport Api from '@cosmosc2/tool-common/src/services/api'\nimport { ConfigParserService } from '@cosmosc2/tool-common/src/services/config-parser'\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport Vue from 'vue'\nimport upperFirst from 'lodash/upperFirst'\nimport camelCase from 'lodash/camelCase'\n\n// Globally register all XxxWidget.vue components\nconst requireComponent = require.context(\n // The relative path of the components folder\n '@cosmosc2/tool-common/src/components/widgets',\n // Whether or not to look in subfolders\n false,\n // The regular expression used to match base component filenames\n /[A-Z]\\w+Widget\\.vue$/\n)\n\nrequireComponent.keys().forEach((filename) => {\n // Get component config\n const componentConfig = requireComponent(filename)\n\n // Get PascalCase name of component\n const componentName = upperFirst(\n camelCase(\n // Gets the filename regardless of folder depth\n filename\n .split('/')\n .pop()\n .replace(/\\.\\w+$/, '')\n )\n )\n\n // Register component globally\n Vue.component(\n componentName,\n // Look for the component options on `.default`, which will\n // exist if the component was exported with `export default`,\n // otherwise fall back to module's root.\n componentConfig.default || componentConfig\n )\n})\n\nexport default {\n props: {\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n },\n data() {\n return {\n rules: {\n required: (value) => !!value || 'Required',\n },\n api: null,\n loadingFile: false,\n file: null,\n currentDefinition: this.definition,\n backup: '',\n editDialog: false,\n expand: true,\n configParser: null,\n currentLayout: null,\n layoutStack: [],\n namedWidgets: {},\n width: null,\n height: null,\n fixed: null,\n globalSettings: [],\n globalSubsettings: [],\n substitute: false,\n original_target_name: null,\n force_substitute: false,\n pollingPeriod: 1,\n errors: [],\n errorDialog: false,\n screenKey: null,\n }\n },\n computed: {\n editErrors: function () {\n if (this.currentDefinition === '' && !this.file) {\n return 'Input can not be blank.'\n }\n if (this.currentDefinition === this.backup) {\n return 'No changes have been made to save.'\n }\n return null\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 // Called when an error from any descendent component is captured\n // We need this because an error can occur from any of the children\n // in the widget stack and are typically thrown on create()\n errorCaptured(err, vm, info) {\n if (err.usage) {\n this.errors.push({\n type: 'usage',\n message: err.usage,\n time: new Date().getTime(),\n })\n } else {\n this.errors.push({\n type: 'error',\n message: `${err}`,\n time: new Date().getTime(),\n })\n }\n return false\n },\n created() {\n this.api = new CosmosApi()\n this.configParser = new ConfigParserService()\n this.parseDefinition()\n this.screenKey = Math.floor(Math.random() * 1000000)\n },\n mounted() {\n let refreshInterval = this.pollingPeriod * 1000\n this.updater = setInterval(() => {\n this.update()\n }, refreshInterval)\n },\n destroyed() {\n if (this.updater != null) {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n methods: {\n clearErrors: function () {\n this.errors = []\n },\n parseDefinition: function () {\n // Each time we start over and parse the screen definition\n this.errors = []\n this.namedWidgets = {}\n this.layoutStack = []\n // Every screen starts with a VerticalWidget\n this.layoutStack.push({\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n })\n this.currentLayout = this.layoutStack[this.layoutStack.length - 1]\n\n this.configParser.parse_string(\n this.currentDefinition,\n '',\n false,\n true,\n (keyword, parameters) => {\n if (keyword) {\n switch (keyword) {\n case 'SCREEN':\n this.configParser.verify_num_parameters(\n 3,\n 4,\n `${keyword} <Width or AUTO> <Height or AUTO> <Polling Period> <FIXED>`\n )\n this.width = parseInt(parameters[0])\n this.height = parseInt(parameters[1])\n this.pollingPeriod = parseFloat(parameters[2])\n if (parameters.length === 4) {\n this.fixed = true\n } else {\n this.fixed = false\n }\n break\n case 'END':\n this.configParser.verify_num_parameters(0, 0, `${keyword}`)\n this.layoutStack.pop()\n this.currentLayout =\n this.layoutStack[this.layoutStack.length - 1]\n break\n case 'SETTING':\n case 'SUBSETTING':\n const widget =\n this.currentLayout.widgets[\n this.currentLayout.widgets.length - 1\n ] ?? this.currentLayout\n widget.settings.push(parameters)\n break\n case 'GLOBAL_SETTING':\n this.globalSettings.push(parameters)\n break\n case 'GLOBAL_SUBSETTING':\n this.globalSubsettings.push(parameters)\n break\n default:\n this.processWidget(keyword, parameters)\n break\n } // switch keyword\n } // if keyword\n }\n )\n this.applyGlobalSettings(this.layoutStack[0].widgets)\n },\n // Called by button scripts to get named widgets\n // Underscores used to match COSMOS API rather than Javascript convention\n get_named_widget: function (name) {\n return this.namedWidgets[name]\n },\n // Called by named widgets to register with the screen\n setNamedWidget: function (name, widget) {\n this.namedWidgets[name] = widget\n },\n update: function () {\n if (this.$store.state.tlmViewerItems.length !== 0) {\n this.api\n .get_tlm_values(this.$store.state.tlmViewerItems)\n .then((data) => {\n this.$store.commit('tlmViewerUpdateValues', data)\n })\n }\n },\n openEdit: function () {\n // Make a copy in case they edit and cancel\n this.backup = this.currentDefinition.repeat(1)\n this.editDialog = true\n },\n cancelEdit: function () {\n this.file = null\n this.editDialog = false\n // Restore the backup since we cancelled\n this.currentDefinition = this.backup\n },\n loadFile: function () {\n const fileReader = new FileReader()\n fileReader.readAsText(this.file)\n this.loadingFile = true\n const that = this\n fileReader.onload = function () {\n that.loadingFile = false\n that.currentDefinition = fileReader.result\n that.inputType = 'txt'\n that.file = null\n }\n },\n saveEdit: function () {\n this.parseDefinition()\n // After parsing wait and see if there are errors before saving\n this.$nextTick(function () {\n Api.post('/cosmos-api/screen/', {\n data: {\n scope: localStorage.scope,\n target: this.target,\n screen: this.screen,\n text: this.currentDefinition,\n },\n })\n this.editDialog = false\n this.screenKey = Math.floor(Math.random() * 1000000)\n })\n },\n downloadScreen: function () {\n const blob = new Blob([this.currentDefinition], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', `${this.target}_${this.screen}.txt`)\n link.click()\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-screen')\n },\n processWidget: function (keyword, parameters) {\n var widgetName = null\n if (keyword === 'NAMED_WIDGET') {\n this.configParser.verify_num_parameters(\n 2,\n null,\n `${keyword} <Widget Name> <Widget Type> <Widget Settings... (optional)>`\n )\n widgetName = parameters[0].toUpperCase()\n keyword = parameters[1].toUpperCase()\n parameters = parameters.slice(2, parameters.length)\n }\n const componentName =\n keyword.charAt(0).toUpperCase() +\n keyword.slice(1).toLowerCase() +\n 'Widget'\n let settings = []\n if (widgetName !== null) {\n // Push a reference to the screen so the layout can register when it is created\n // We do this because the widget isn't actually created until\n // the layout happens with <component :is='type'>\n settings.push(['NAMED_WIDGET', widgetName, this])\n }\n // If this is a layout widget we add it to the layoutStack and reset the currentLayout\n if (\n keyword.includes('VERTICAL') ||\n keyword.includes('HORIZONTAL') ||\n keyword === 'MATRIXBYCOLUMNS' ||\n keyword === 'TABBOOK' ||\n keyword === 'TABITEM' ||\n keyword === 'CANVAS' ||\n keyword === 'RADIOGROUP' ||\n keyword === 'SCROLLWINDOW'\n ) {\n const layout = {\n type: componentName,\n parameters: parameters,\n settings: settings,\n widgets: [],\n }\n this.layoutStack.push(layout)\n this.currentLayout.widgets.push(layout)\n this.currentLayout = layout\n } else {\n // Buttons require a reference to the screen to call get_named_widget\n if (keyword.includes('BUTTON')) {\n settings.push(['SCREEN', this])\n }\n if (Vue.options.components[componentName]) {\n this.currentLayout.widgets.push({\n type: componentName,\n target: this.target,\n parameters: parameters,\n settings: settings,\n })\n } else {\n this.currentLayout.widgets.push({\n type: 'DynamicWidget',\n target: this.target,\n parameters: parameters,\n settings: settings,\n name: componentName,\n })\n }\n }\n },\n applyGlobalSettings: function (widgets) {\n this.globalSettings.forEach((setting) => {\n widgets.forEach((widget) => {\n // widget.type is already the full camelcase widget name like LabelWidget\n // so we have to lower case both and tack on 'widget' to compare\n if (\n widget.type.toLowerCase() ===\n setting[0].toLowerCase() + 'widget'\n ) {\n widget.settings.push(setting.slice(1))\n }\n // Recursively apply to all widgets contained in layouts\n if (widget.widgets) {\n this.applyGlobalSettings(widget.widgets)\n }\n })\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.v-card {\n background-color: var(--v-tertiary-darken2);\n}\n.v-textarea >>> textarea {\n padding: 5px;\n background-color: var(--v-tertiary-darken1) !important;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmosScreen.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmosScreen.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CosmosScreen.vue?vue&type=template&id=3e6c007d&scoped=true&\"\nimport script from \"./CosmosScreen.vue?vue&type=script&lang=js&\"\nexport * from \"./CosmosScreen.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CosmosScreen.vue?vue&type=style&index=0&id=3e6c007d&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3e6c007d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancel.apply(null, arguments)}},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Open Configuration\")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"label\":\"search\",\"type\":\"text\",\"data-test\":\"search\",\"prepend-icon\":\"mdi-magnify\",\"clear-icon\":\"mdi-close-circle-outline\",\"clearable\":\"\",\"autofocus\":\"\",\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-data-table',{attrs:{\"show-select\":\"\",\"single-select\":\"\",\"item-key\":\"configId\",\"search\":_vm.search,\"headers\":_vm.headers,\"items\":_vm.configs,\"items-per-page\":5,\"footer-props\":{ 'items-per-page-options': [5] }},on:{\"item-selected\":_vm.itemSelected,\"click:row\":function (item, slot) { return slot.select(item); }},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-btn',{staticClass:\"mt-1\",attrs:{\"data-test\":\"item-delete\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.deleteConfig(item)}}},[_c('v-icon',[_vm._v(\"mdi-delete\")])],1)]}}])}),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.error),expression:\"error\"}],staticClass:\"ma-2 red--text\",domProps:{\"textContent\":_vm._s(_vm.error)}})]),_c('v-row',[_c('v-btn',{attrs:{\"type\":\"submit\",\"color\":\"success\",\"data-test\":\"open-config-submit-btn\",\"disabled\":!!_vm.error},on:{\"click\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_vm._v(\" Ok \")]),_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\",\"data-test\":\"open-config-cancel-btn\"},on:{\"click\":_vm.cancel}},[_vm._v(\" Cancel \")])],1)],1)])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-dialog v-model=\"show\" @keydown.esc=\"cancel\" width=\"600\">\n <v-card>\n <form v-on:submit.prevent=\"success\">\n <v-system-bar>\n <v-spacer />\n <span>Open Configuration</span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense>\n <v-text-field\n label=\"search\"\n v-model=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-icon=\"mdi-magnify\"\n clear-icon=\"mdi-close-circle-outline\"\n clearable\n autofocus\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n show-select\n single-select\n item-key=\"configId\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"configs\"\n :items-per-page=\"5\"\n :footer-props=\"{ 'items-per-page-options': [5] }\"\n @item-selected=\"itemSelected\"\n @click:row=\"(item, slot) => slot.select(item)\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-btn\n class=\"mt-1\"\n data-test=\"item-delete\"\n icon\n @click=\"deleteConfig(item)\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\n </template>\n </v-data-table>\n <v-row dense>\n <span class=\"ma-2 red--text\" v-show=\"error\" v-text=\"error\" />\n </v-row>\n <v-row>\n <v-btn\n @click.prevent=\"success\"\n type=\"submit\"\n color=\"success\"\n data-test=\"open-config-submit-btn\"\n :disabled=\"!!error\"\n >\n Ok\n </v-btn>\n <v-spacer />\n <v-btn\n @click=\"cancel\"\n color=\"primary\"\n data-test=\"open-config-cancel-btn\"\n >\n Cancel\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api.js'\n\nexport default {\n props: {\n tool: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n configs: [],\n headers: [\n {\n text: 'Configuration',\n value: 'config',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n search: null,\n selectedItem: null,\n }\n },\n computed: {\n error: function () {\n if (this.selectedItem === '' || this.selectedItem === null) {\n return 'Must select a config'\n }\n return null\n },\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n mounted() {\n let configId = -1\n new CosmosApi()\n .list_configs(this.tool)\n .then((response) => {\n this.configs = response.map((config) => {\n configId += 1\n return { configId, config }\n })\n })\n .catch((error) => {\n this.$emit('warning', `Failed to connect to Cosmos. ${error}`)\n })\n },\n methods: {\n itemSelected: function (item) {\n if (item.value) {\n this.selectedItem = item.item\n } else {\n this.selectedItem = null\n }\n },\n success: function () {\n this.$emit('success', this.selectedItem.config)\n this.show = false\n this.search = null\n this.selectedItem = null\n },\n cancel: function () {\n this.show = false\n this.search = null\n this.selectedItem = null\n },\n deleteConfig: function (item) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${item.config}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.selectedItem.config === item.config) {\n this.selectedItem = null\n }\n this.configs.splice(this.configs.indexOf(item), 1)\n new CosmosApi().delete_config(this.tool, item.config)\n })\n .catch((error) => {\n if (error) {\n this.$emit(\n 'warning',\n `Failed to delete config ${item.config} Error: ${error}`\n )\n }\n })\n },\n },\n}\n</script>\n\n<style scoped></style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OpenConfigDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OpenConfigDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OpenConfigDialog.vue?vue&type=template&id=4f9dd098&scoped=true&\"\nimport script from \"./OpenConfigDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./OpenConfigDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f9dd098\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancel.apply(null, arguments)}},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Save Configuration\")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"label\":\"search\",\"type\":\"text\",\"data-test\":\"search\",\"prepend-icon\":\"mdi-magnify\",\"clear-icon\":\"mdi-close-circle-outline\",\"clearable\":\"\",\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-data-table',{attrs:{\"show-select\":\"\",\"single-select\":\"\",\"item-key\":\"configId\",\"search\":_vm.search,\"headers\":_vm.headers,\"items\":_vm.configs,\"items-per-page\":5,\"footer-props\":{ 'items-per-page-options': [5] }},on:{\"item-selected\":_vm.itemSelected,\"click:row\":function (item, slot) { return slot.select(item); }},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-btn',{staticClass:\"mt-1\",attrs:{\"icon\":\"\",\"data-test\":\"item-delete\"},on:{\"click\":function($event){return _vm.deleteConfig(item)}}},[_c('v-icon',[_vm._v(\"mdi-delete\")])],1)]}}])}),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"autofocus\":\"\",\"disabled\":!!_vm.selectedItem,\"label\":\"Configuration Name\",\"data-test\":\"name-input-save-config-dialog\"},model:{value:(_vm.configName),callback:function ($$v) {_vm.configName=$$v},expression:\"configName\"}})],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.error),expression:\"error\"}],staticClass:\"ma-2 red--text\",domProps:{\"textContent\":_vm._s(_vm.error)}})]),_c('v-row',[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"outlined\":\"\"},on:{\"click\":_vm.cancel}},[_vm._v(\" Cancel \")]),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"type\":\"submit\",\"color\":\"primary\",\"data-test\":\"save-config-submit-btn\",\"disabled\":!!_vm.error},on:{\"click\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_vm._v(\" Ok \")])],1)],1)])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-dialog v-model=\"show\" @keydown.esc=\"cancel\" width=\"600\">\n <v-card>\n <form v-on:submit.prevent=\"success\">\n <v-system-bar>\n <v-spacer />\n <span>Save Configuration</span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense>\n <v-text-field\n label=\"search\"\n v-model=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-icon=\"mdi-magnify\"\n clear-icon=\"mdi-close-circle-outline\"\n clearable\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n show-select\n single-select\n item-key=\"configId\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"configs\"\n :items-per-page=\"5\"\n :footer-props=\"{ 'items-per-page-options': [5] }\"\n @item-selected=\"itemSelected\"\n @click:row=\"(item, slot) => slot.select(item)\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-btn\n icon\n class=\"mt-1\"\n data-test=\"item-delete\"\n @click=\"deleteConfig(item)\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\n </template>\n </v-data-table>\n <v-row dense>\n <v-text-field\n v-model=\"configName\"\n hide-details\n autofocus\n :disabled=\"!!selectedItem\"\n label=\"Configuration Name\"\n data-test=\"name-input-save-config-dialog\"\n />\n </v-row>\n <v-row dense>\n <span class=\"ma-2 red--text\" v-show=\"error\" v-text=\"error\" />\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn outlined class=\"mx-2\" @click=\"cancel\"> Cancel </v-btn>\n <v-btn\n @click.prevent=\"success\"\n type=\"submit\"\n color=\"primary\"\n class=\"mx-2\"\n data-test=\"save-config-submit-btn\"\n :disabled=\"!!error\"\n >\n Ok\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api.js'\n\nexport default {\n props: {\n tool: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n configName: '',\n configs: [],\n headers: [\n {\n text: 'Configuration',\n value: 'config',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n search: null,\n selectedItem: null,\n }\n },\n computed: {\n error: function () {\n if (this.configName === '') {\n return 'Config must have a name'\n }\n return null\n },\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n mounted() {\n let configId = -1\n new CosmosApi()\n .list_configs(this.tool)\n .then((response) => {\n this.configs = response.map((config) => {\n configId += 1\n return { configId, config }\n })\n })\n .catch((error) => {\n this.$emit('warning', `Failed to connect to Cosmos. ${error}`)\n })\n },\n methods: {\n itemSelected: function (item) {\n if (item.value) {\n this.selectedItem = item.item\n this.configName = item.item.config\n } else {\n this.selectedItem = null\n this.configName = ''\n }\n },\n success: function () {\n this.$emit('success', this.configName)\n this.show = false\n this.search = null\n this.selectedItem = null\n this.configName = ''\n },\n cancel: function () {\n this.show = false\n this.search = null\n this.selectedItem = null\n this.configName = ''\n },\n deleteConfig: function (item) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${item.config}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.configName === item.config) {\n this.selectedItem = null\n this.configName = ''\n }\n this.configs.splice(this.configs.indexOf(item.config), 1)\n new CosmosApi().delete_config(this.tool, item.config)\n })\n .catch((error) => {\n if (error) {\n this.$emit(\n 'warning',\n `Failed to delete config ${item.config} Error: ${error}`\n )\n }\n })\n },\n },\n}\n</script>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveConfigDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveConfigDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SaveConfigDialog.vue?vue&type=template&id=7685694e&\"\nimport script from \"./SaveConfigDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./SaveConfigDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('mounting-portal',{attrs:{\"mount-to\":\"#cosmos-menu\",\"append\":\"\"}},[_c('div',{staticClass:\"v-toolbar__content\"},[_vm._l((_vm.menus),function(menu,i){return _c('v-menu',{key:i,attrs:{\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mx-1\",attrs:{\"outlined\":\"\",\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label)))}},'v-btn',attrs,false),on),[_c('span',{domProps:{\"textContent\":_vm._s(menu.label)}}),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\" mdi-menu-down \")])],1)]}}],null,true)},[_c('v-list',[_c('v-radio-group',{staticClass:\"ma-0 pa-0\",attrs:{\"value\":menu.radioGroup,\"hide-details\":\"\",\"dense\":\"\"}},[_vm._l((menu.items),function(option,j){return [(option.divider)?_c('v-divider',{key:j}):_c('v-list-item',{key:j,attrs:{\"disabled\":option.disabled,\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label) + \" \" + (option.label)))},on:{\"click\":option.command}},[(option.radio)?_c('v-list-item-action',[_c('v-radio',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label}})],1):_vm._e(),(option.checkbox)?_c('v-list-item-action',[_c('v-checkbox',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label},model:{value:(_vm.checked),callback:function ($$v) {_vm.checked=$$v},expression:\"checked\"}})],1):_vm._e(),(option.icon)?_c('v-list-item-icon',[_c('v-icon',{attrs:{\"disabled\":option.disabled}},[_vm._v(_vm._s(option.icon))])],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : ''))},[_vm._v(_vm._s(option.label))]):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',[_vm._v(_vm._s(_vm.title))]),_c('v-spacer')],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <mounting-portal mount-to=\"#cosmos-menu\" append>\n <div class=\"v-toolbar__content\">\n <v-menu offset-y v-for=\"(menu, i) in menus\" :key=\"i\">\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n outlined\n v-bind=\"attrs\"\n v-on=\"on\"\n class=\"mx-1\"\n :data-test=\"formatDT(`${title} ${menu.label}`)\"\n >\n <span v-text=\"menu.label\" />\n <v-icon right> mdi-menu-down </v-icon>\n </v-btn>\n </template>\n <v-list>\n <!-- The radio-group is necessary in case the application wants radio buttons -->\n <v-radio-group\n :value=\"menu.radioGroup\"\n hide-details\n dense\n class=\"ma-0 pa-0\"\n >\n <template v-for=\"(option, j) in menu.items\">\n <v-divider v-if=\"option.divider\" :key=\"j\" />\n <v-list-item\n v-else\n @click=\"option.command\"\n :key=\"j\"\n :disabled=\"option.disabled\"\n :data-test=\"formatDT(`${title} ${menu.label} ${option.label}`)\"\n >\n <v-list-item-action v-if=\"option.radio\">\n <v-radio\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-action v-if=\"option.checkbox\">\n <v-checkbox\n v-model=\"checked\"\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-icon v-if=\"option.icon\">\n <v-icon :disabled=\"option.disabled\">{{ option.icon }}</v-icon>\n </v-list-item-icon>\n <v-list-item-title\n v-if=\"!option.radio && !option.checkbox\"\n :style=\"\n 'cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')\n \"\n >{{ option.label }}</v-list-item-title\n >\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title>{{ title }}</v-toolbar-title>\n <v-spacer />\n </div>\n </mounting-portal>\n</template>\n\n<script>\nexport default {\n props: {\n menus: {\n type: Array,\n default: function () {\n return []\n },\n },\n title: {\n type: String,\n default: '',\n },\n },\n methods: {\n // Convert the string to a standard data-test format\n formatDT: function (string) {\n return string.replaceAll(' ', '-').toLowerCase()\n },\n },\n}\n</script>\n\n<style scoped>\n.v-list >>> .v-label {\n margin-left: 5px;\n}\n.v-list-item__icon {\n /* For some reason the default margin-right is huge */\n margin-right: 15px !important;\n}\n.v-list-item__title {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=0b311b9a&scoped=true&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TopBar.vue?vue&type=style&index=0&id=0b311b9a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b311b9a\",\n null\n \n)\n\nexport default component.exports","<!--\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# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <top-bar :title=\"title\" :menus=\"menus\" />\n <v-container>\n <v-row>\n <v-col>\n <v-select\n class=\"ma-0 pa-0\"\n label=\"Select Target\"\n :items=\"targets\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedTarget\"\n @change=\"targetSelect\"\n />\n </v-col>\n <v-col>\n <v-select\n class=\"ma-0 pa-0\"\n label=\"Select Screen\"\n :items=\"screens\"\n v-model=\"selectedScreen\"\n @change=\"screenSelect\"\n />\n </v-col>\n <v-col>\n <v-btn\n class=\"primary\"\n :disabled=\"!selectedScreen\"\n @click=\"() => showScreen(selectedTarget, selectedScreen)\"\n >\n Show Screen\n </v-btn>\n </v-col>\n </v-row>\n </v-container>\n <div class=\"grid\">\n <div\n class=\"item\"\n v-for=\"def in definitions\"\n :key=\"def.id\"\n :id=\"screenId(def.id)\"\n ref=\"gridItem\"\n >\n <div class=\"item-content\">\n <cosmos-screen\n :target=\"def.target\"\n :screen=\"def.screen\"\n :definition=\"def.definition\"\n @close-screen=\"closeScreen(def.id)\"\n @min-max-screen=\"refreshLayout\"\n @add-new-screen=\"($event) => showScreen(...$event)\"\n />\n </div>\n </div>\n </div>\n <!-- Dialogs for opening and saving configs -->\n <open-config-dialog\n v-if=\"openConfig\"\n v-model=\"openConfig\"\n :tool=\"toolName\"\n @success=\"openConfiguration($event)\"\n />\n <save-config-dialog\n v-if=\"saveConfig\"\n v-model=\"saveConfig\"\n :tool=\"toolName\"\n @success=\"saveConfiguration($event)\"\n />\n </div>\n</template>\n\n<script>\nimport Api from '@cosmosc2/tool-common/src/services/api'\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport CosmosScreen from './CosmosScreen'\nimport OpenConfigDialog from '@cosmosc2/tool-common/src/components/OpenConfigDialog'\nimport SaveConfigDialog from '@cosmosc2/tool-common/src/components/SaveConfigDialog'\nimport Muuri from 'muuri'\nimport TopBar from '@cosmosc2/tool-common/src/components/TopBar'\n\nexport default {\n components: {\n CosmosScreen,\n TopBar,\n OpenConfigDialog,\n SaveConfigDialog,\n },\n data() {\n return {\n title: 'Telemetry Viewer',\n counter: 0,\n definitions: [],\n targets: [],\n screens: [],\n selectedTarget: '',\n selectedScreen: '',\n grid: null,\n api: null,\n menus: [\n {\n label: 'File',\n items: [\n {\n label: 'Open Configuration',\n icon: 'mdi-folder-open',\n command: () => {\n this.openConfig = true\n },\n },\n {\n label: 'Save Configuration',\n icon: 'mdi-content-save',\n command: () => {\n this.saveConfig = true\n },\n },\n ],\n },\n ],\n toolName: 'tlm-viewer',\n openConfig: false,\n saveConfig: false,\n }\n },\n created() {\n this.api = new CosmosApi()\n this.api\n .get_target_list({ params: { scope: localStorage.scope } })\n .then((data) => {\n var arrayLength = data.length\n for (var i = 0; i < arrayLength; i++) {\n this.targets.push({ label: data[i], value: data[i] })\n }\n if (!this.selectedTarget) {\n this.selectedTarget = this.targets[0].value\n }\n this.updateScreens()\n })\n },\n mounted() {\n this.grid = new Muuri('.grid', {\n dragEnabled: true,\n // Only allow drags starting from the v-system-bar title\n dragHandle: '.v-system-bar',\n })\n this.grid.on('dragEnd', this.refreshLayout)\n const previousConfig = localStorage['lastconfig__telemetry_viewer']\n if (previousConfig) {\n this.openConfiguration(previousConfig)\n }\n },\n methods: {\n updateScreens() {\n this.screens = []\n Api.get('/cosmos-api/screen/' + this.selectedTarget).then((response) => {\n for (let screen of response.data) {\n this.screens.push(screen)\n }\n })\n },\n targetSelect(target) {\n this.selectedTarget = target\n this.selectedScreen = ''\n this.updateScreens()\n },\n screenSelect(screen) {\n this.selectedScreen = screen\n },\n showScreen(target, screen) {\n this.loadScreen(target, screen).then((response) => {\n this.pushScreen({\n id: this.counter++,\n target: target,\n screen: screen,\n definition: response.data,\n })\n })\n },\n loadScreen(target, screen) {\n return Api.get('/cosmos-api/screen/' + target + '/' + screen, {\n headers: {\n Accept: 'text/plain',\n },\n })\n },\n pushScreen(definition) {\n this.definitions.push(definition)\n this.$nextTick(function () {\n var items = this.grid.add(\n this.$refs.gridItem[this.$refs.gridItem.length - 1],\n {\n active: false,\n }\n )\n this.grid.show(items)\n this.grid.refreshItems().layout()\n })\n },\n closeScreen(id) {\n var items = this.grid.getItems([\n document.getElementById(this.screenId(id)),\n ])\n this.grid.remove(items)\n this.grid.refreshItems().layout()\n this.definitions = this.definitions.filter((value, index, arr) => {\n return value.id != id\n })\n },\n refreshLayout() {\n setTimeout(() => {\n this.grid.refreshItems().layout()\n }, 600) // TODO: Is 600ms ok for all screens?\n },\n screenId(id) {\n return 'tlmViewerScreen' + id\n },\n openConfiguration: async function (name) {\n localStorage['lastconfig__telemetry_viewer'] = name\n this.counter = 0\n this.definitions = []\n let configResponse = await this.api.load_config(this.toolName, name)\n if (configResponse) {\n const config = JSON.parse(configResponse)\n // Load all the screen definitions from the API at once\n const loadScreenPromises = config.map((definition) => {\n return this.loadScreen(definition.target, definition.screen)\n })\n // Wait until they're all loaded\n Promise.all(loadScreenPromises)\n .then((responses) => {\n // Then add all the screens in order\n config.forEach((definition, index) => {\n const response = responses[index]\n setTimeout(() => {\n this.pushScreen({\n id: this.counter++,\n target: definition.target,\n screen: definition.screen,\n definition: response.data,\n })\n }, 0) // I don't even know... but Muuri complains if this isn't in a setTimeout\n })\n })\n .then(() => {\n setTimeout(this.refreshLayout, 0) // Muuri probably stacked some, so refresh that\n })\n }\n },\n saveConfiguration: function (name) {\n localStorage['lastconfig__telemetry_viewer'] = name\n const gridItems = this.grid.getItems().map((item) => item.getElement().id) // TODO: this order isn't reliable for some reason\n const config = this.definitions\n .sort((a, b) => {\n // Sort by their current position on the page\n return gridItems.indexOf(this.screenId(a)) >\n gridItems.indexOf(this.screenId(b))\n ? -1\n : 1\n })\n .map((def) => {\n return {\n screen: def.screen,\n target: def.target,\n }\n })\n this.api.save_config(this.toolName, name, JSON.stringify(config))\n },\n },\n}\n</script>\n\n<style scoped>\n.grid {\n position: relative;\n}\n.item {\n position: absolute;\n display: block;\n margin: 5px;\n z-index: 1;\n}\n.item.muuri-item-dragging {\n z-index: 3;\n}\n.item.muuri-item-releasing {\n z-index: 2;\n}\n.item.muuri-item-hidden {\n z-index: 0;\n}\n.item-content {\n position: relative;\n cursor: pointer;\n border-radius: 6px;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TlmViewer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TlmViewer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TlmViewer.vue?vue&type=template&id=633418c4&scoped=true&\"\nimport script from \"./TlmViewer.vue?vue&type=script&lang=js&\"\nexport * from \"./TlmViewer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TlmViewer.vue?vue&type=style&index=0&id=633418c4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"633418c4\",\n null\n \n)\n\nexport default component.exports","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".label[data-v-3eb9665d]{font-weight:700;text-transform:capitalize}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".uplot.side-legend{display:flex;width:auto}.uplot.side-legend .u-wrap{flex:none}.uplot.side-legend .u-legend{text-align:left;margin-left:0;width:220px}.uplot.side-legend .u-legend,.uplot.side-legend .u-legend td,.uplot.side-legend .u-legend th,.uplot.side-legend .u-legend tr{display:revert}.uplot.left-legend .u-legend{order:-1}.uplot.top-legend{display:flex;flex-direction:column}.uplot.top-legend .u-legend{order:-1}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#chart[data-v-6e0520e4]{background-color:var(--v-tertiary-darken2)}#chart[data-v-6e0520e4] .u-select{background-color:hsla(0,0%,100%,.07)}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-list[data-v-0b311b9a] .v-label{margin-left:5px}.v-list-item__icon[data-v-0b311b9a]{margin-right:15px!important}.v-list-item__title[data-v-0b311b9a]{color:#fff}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".value[data-v-3369b22f] div{min-height:24px!important;display:flex!important;align-items:center!important}.cosmos-green[data-v-3369b22f] input{color:#009600}.cosmos-yellow[data-v-3369b22f] input{color:#be8700}.cosmos-red[data-v-3369b22f] input{color:red}.cosmos-blue[data-v-3369b22f] input{color:#0064ff}.cosmos-purple[data-v-3369b22f] input{color:#c800c8}.cosmos-black[data-v-3369b22f] input{color:#000}.cosmos-white[data-v-3369b22f] input{color:#fff}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-textarea[data-v-401cb124] textarea{font-family:Courier New,Courier,monospace}.value[data-v-401cb124] div{min-height:24px!important;display:flex!important;align-items:center!important}.cosmos-green[data-v-401cb124] input{color:#009600}.cosmos-yellow[data-v-401cb124] input{color:#be8700}.cosmos-red[data-v-401cb124] input{color:red}.cosmos-blue[data-v-401cb124] input{color:#0064ff}.cosmos-purple[data-v-401cb124] input{color:#c800c8}.cosmos-black[data-v-401cb124] input{color:#000}.cosmos-white[data-v-401cb124] input{color:#fff}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-banner[data-v-490e35ec] div{background-color:var(--v-tertiary-darken2)!important}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".label[data-v-1ff40000]{font-family:var(--font-family);font-size:var(--font-size);font-weight:var(--font-weight);font-style:var(--font-style)}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".led[data-v-1d5674e7]{height:var(--height);width:var(--width);background-color:var(--color);border-radius:50%}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".led[data-v-348c2b1c]{height:var(--height);width:var(--width);background-color:var(--color);border-radius:50%}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".value[data-v-580e657e] div{min-height:24px!important;display:flex!important;align-items:center!important}.cosmos-green[data-v-580e657e] input{color:#009600}.cosmos-yellow[data-v-580e657e] input{color:#be8700}.cosmos-red[data-v-580e657e] input{color:red}.cosmos-blue[data-v-580e657e] input{color:#0064ff}.cosmos-purple[data-v-580e657e] input{color:#c800c8}.cosmos-black[data-v-580e657e] input{color:#000}.cosmos-white[data-v-580e657e] input{color:#fff}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-banner[data-v-818decfa] div{background-color:var(--v-tertiary-darken2)!important}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-card[data-v-3e6c007d]{background-color:var(--v-tertiary-darken2)}.v-textarea[data-v-3e6c007d] textarea{padding:5px;background-color:var(--v-tertiary-darken1)!important}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".grid[data-v-633418c4]{position:relative}.item[data-v-633418c4]{position:absolute;display:block;margin:5px;z-index:1}.item.muuri-item-dragging[data-v-633418c4]{z-index:3}.item.muuri-item-releasing[data-v-633418c4]{z-index:2}.item.muuri-item-hidden[data-v-633418c4]{z-index:0}.item-content[data-v-633418c4]{position:relative;cursor:pointer;border-radius:6px}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"svg[data-v-a508bc5c]{background-color:#fff}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".limitsbar[data-v-4d506ea0]{cursor:default;display:flex;justify-content:center;align-items:center;padding:5px;width:var(--width)}.limitsbar__container[data-v-4d506ea0]{position:relative;flex:1;height:var(--container-height);border:1px solid #000;background-color:#fff}.limitsbar__redlow[data-v-4d506ea0]{left:0;width:var(--redlow-width)}.limitsbar__redhigh[data-v-4d506ea0],.limitsbar__redlow[data-v-4d506ea0]{position:absolute;top:-1px;height:var(--container-height);background-color:red}.limitsbar__redhigh[data-v-4d506ea0]{right:0;width:var(--redhigh-width)}.limitsbar__yellowlow[data-v-4d506ea0]{left:var(--redlow-width);width:var(--yellowlow-width)}.limitsbar__yellowhigh[data-v-4d506ea0],.limitsbar__yellowlow[data-v-4d506ea0]{position:absolute;top:-1px;height:var(--container-height);background-color:#ffdc00}.limitsbar__yellowhigh[data-v-4d506ea0]{right:var(--redhigh-width);width:var(--yellowhigh-width)}.limitsbar__greenlow[data-v-4d506ea0]{left:calc(var(--redlow-width) + var(--yellowlow-width));width:var(--greenlow-width)}.limitsbar__greenhigh[data-v-4d506ea0],.limitsbar__greenlow[data-v-4d506ea0]{position:absolute;top:-1px;height:var(--container-height);background-color:green}.limitsbar__greenhigh[data-v-4d506ea0]{right:calc(var(--redhigh-width) + var(--yellowhigh-width));width:var(--greenhigh-width)}.limitsbar__blue[data-v-4d506ea0]{top:-1px;left:calc(var(--redlow-width) + var(--yellowlow-width) + var(--greenlow-width));width:var(--blue-width);background-color:blue}.limitsbar__blue[data-v-4d506ea0],.limitsbar__line[data-v-4d506ea0]{position:absolute;height:var(--container-height)}.limitsbar__line[data-v-4d506ea0]{left:var(--position);width:1px;background-color:gray}.limitsbar__arrow[data-v-4d506ea0]{position:absolute;top:-5px;left:var(--position);width:0;height:0;-webkit-transform:translateX(-5px);transform:translateX(-5px);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid gray}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".limitsbar[data-v-5f237a99]{cursor:default;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:5px;height:var(--height)}.limitsbar__container[data-v-5f237a99]{position:relative;flex:1 1 100%;width:var(--container-width);border:1px solid #000;background-color:#fff}.limitsbar__redlow[data-v-5f237a99]{bottom:0;height:var(--redlow-height)}.limitsbar__redhigh[data-v-5f237a99],.limitsbar__redlow[data-v-5f237a99]{position:absolute;width:var(--container-width);background-color:red}.limitsbar__redhigh[data-v-5f237a99]{top:0;height:var(--redhigh-height)}.limitsbar__yellowlow[data-v-5f237a99]{bottom:var(--redlow-height);height:var(--yellowlow-height)}.limitsbar__yellowhigh[data-v-5f237a99],.limitsbar__yellowlow[data-v-5f237a99]{position:absolute;width:var(--container-width);background-color:#ffdc00}.limitsbar__yellowhigh[data-v-5f237a99]{top:var(--redhigh-height);height:var(--yellowhigh-height)}.limitsbar__greenlow[data-v-5f237a99]{bottom:calc(var(--redlow-height) + var(--yellowlow-height));height:var(--greenlow-height)}.limitsbar__greenhigh[data-v-5f237a99],.limitsbar__greenlow[data-v-5f237a99]{position:absolute;width:var(--container-width);background-color:green}.limitsbar__greenhigh[data-v-5f237a99]{top:calc(var(--redhigh-height) + var(--yellowhigh-height));height:var(--greenhigh-height)}.limitsbar__blue[data-v-5f237a99]{bottom:calc(var(--redlow-height) + var(--yellowlow-height) + var(--greenlow-height));height:var(--blue-height);background-color:blue}.limitsbar__blue[data-v-5f237a99],.limitsbar__line[data-v-5f237a99]{position:absolute;width:var(--container-width)}.limitsbar__line[data-v-5f237a99]{bottom:var(--position);height:1px;background-color:gray}.limitsbar__arrow[data-v-5f237a99]{position:absolute;bottom:var(--position);left:var(--container-width);width:0;height:0;-webkit-transform:translateY(5px);transform:translateY(5px);border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid gray}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".rangebar[data-v-3ec94604]{cursor:default;display:flex;justify-content:center;align-items:center;padding:5px;width:var(--width)}.rangebar__container[data-v-3ec94604]{position:relative;flex:1;height:var(--container-height);border:1px solid #000;background-color:#fff}.rangebar__line[data-v-3ec94604]{width:1px;height:var(--container-height);background-color:gray}.rangebar__arrow[data-v-3ec94604],.rangebar__line[data-v-3ec94604]{position:absolute;left:var(--position)}.rangebar__arrow[data-v-3ec94604]{top:-5px;width:0;height:0;-webkit-transform:translateX(-5px);transform:translateX(-5px);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid gray}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".value-widget-container[data-v-d1470e40]{min-height:34px}.value[data-v-d1470e40] div{min-height:24px!important;display:flex!important;align-items:center!important}.cosmos-green[data-v-d1470e40] input{color:#009600}.cosmos-yellow[data-v-d1470e40] input{color:#be8700}.cosmos-red[data-v-d1470e40] input{color:red}.cosmos-blue[data-v-d1470e40] input{color:#0064ff}.cosmos-purple[data-v-d1470e40] input{color:#c800c8}.cosmos-black[data-v-d1470e40] input{color:#000}.cosmos-white[data-v-d1470e40] input{color:#fff}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DetailsDialog.vue?vue&type=style&index=0&id=3eb9665d&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"7c1e213a\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Graph.vue?vue&type=style&index=0&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"daa7e718\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Graph.vue?vue&type=style&index=1&id=6e0520e4&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"2ce1e0c1\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=style&index=0&id=0b311b9a&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"772a3f68\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArrayWidget.vue?vue&type=style&index=0&id=3369b22f&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"094f0f8e\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlockWidget.vue?vue&type=style&index=0&id=401cb124&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"7e113069\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HorizontalboxWidget.vue?vue&type=style&index=0&id=490e35ec&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"1abcb262\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LabelWidget.vue?vue&type=style&index=0&id=1ff40000&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"27aab41a\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LedWidget.vue?vue&type=style&index=0&id=1d5674e7&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"8e0203fe\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LimitscolorWidget.vue?vue&type=style&index=0&id=348c2b1c&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"8ddb8b54\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TextboxWidget.vue?vue&type=style&index=0&id=580e657e&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"b5b42bf6\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VerticalboxWidget.vue?vue&type=style&index=0&id=818decfa&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"6786983a\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmosScreen.vue?vue&type=style&index=0&id=3e6c007d&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"1e83646f\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TlmViewer.vue?vue&type=style&index=0&id=633418c4&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"07bd2359\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[4]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CanvasWidget.vue?vue&type=style&index=0&id=a508bc5c&lang=scss&scoped=true&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"0706837e\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[4]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LimitsbarWidget.vue?vue&type=style&index=0&id=4d506ea0&lang=scss&scoped=true&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"fbeb2792\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[4]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LimitscolumnWidget.vue?vue&type=style&index=0&id=5f237a99&lang=scss&scoped=true&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"799e0f5c\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[4]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RangebarWidget.vue?vue&type=style&index=0&id=3ec94604&lang=scss&scoped=true&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"5358f44c\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[4]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ValueWidget.vue?vue&type=style&index=0&id=d1470e40&lang=scss&scoped=true&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"10f1e48f\", content, true, {\"sourceMap\":false,\"shadowMode\":false});"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","mixins","data","api","screen","displaySendHazardous","lastCmd","computed","buttonText","eval","created","methods","onClick","lines","result","then","catch","sendHazardousCmd","cancelHazardousCmd","runScript","scriptName","Api","window","props","target","type","String","require","getPresignedUrl","fileName","encodeURIComponent","localStorage","scope","this","response","url","Widget","widgets","Array","default","value","limitsState","formatString","valueId","colorBlind","viewDetails","contextMenuShown","x","y","contextMenuOptions","title","action","open","parameters","_value","$store","state","tlmViewerValues","formatted","formatValue","colorblindMode","limitsLetter","valueClass","limitsColor","c","charAt","endsWith","toLowerCase","getType","commit","destroyed","prototype","toString","call","slice","i","length","sprintf","showContextMenu","preventDefault","clientX","clientY","$nextTick","widgetIndex","Number","settings","computedStyle","style","forEach","setting","index","parseInt","getColor","originalWidthSetting","width","resetWidth","beforeUpdate","some","unshift","request","method","params","headers","noAuth","noScope","CosmosAuth","updateToken","defaultMinValidity","login","cosmosToken","axios","acceptOnlyDefaultHeaders","Accept","fullDefaultHeaders","get","path","put","post","delete","vueInstance","Vue","axiosInstance","baseURL","location","origin","timeout","interceptors","use","error","status","href","axiosIgnoreResponse","Promise","reject","body","statusText","config","message","exception","class","$notify","serious","ActionCable","Cable","_cable","disconnect","channel","callbacks","additionalOptions","subscriptions","create","token","CosmosApi","kwparams","jsonrpc","keyword_params","Authorization","err","name","val","json_class","raw","NaN","Infinity","isNaN","POSITIVE_INFINITY","NEGATIVE_INFINITY","exec","interface_name","router_name","packet","item","log_writer_name","limits_set","target_name","packet_name","value_type","len","converted","decode_cosmos_type","items","item_name","command_name","parameter_name","param_list","key","hasOwnProperty","encode_cosmos_type","undefined","_cmd","tool","ignored","array","string","isSecureContext","arrayBuffer","TextEncoder","encode","crypto","subtle","digest","hashAsArrayBuffer","uint8ViewOfHash","Uint8Array","from","b","padStart","join","render","_vm","_h","$createElement","_c","_self","attrs","model","callback","$$v","show","expression","_v","_s","targetName","packetName","itemName","details","description","staticClass","rawValue","convertedValue","formattedValue","unitsValue","_e","bit_offset","bit_size","array_size","data_type","minimum","maximum","format_string","read_conversion","write_conversion","id_value","units_full","units","endianness","_l","limit","formatLimit","staticRenderFns","validator","updater","set","beforeDestroy","clearInterval","watch","get_tlm_values","requestDetails","get_item","get_parameter","component","height","on","$event","stopPropagation","apply","arguments","components","DetailsDialog","itemsPerRow","formatter","text","count","bytesPerWord","wordsPerRow","addrFormat","addr","byteCount","widget","_g","tag","$listeners","imageUrl","image","directives","rawName","selectedValue","defaultImage","images","showDefault","immediate","handler","filter","fillColor","fontSize","calcStyle","color","label","checked","widgetType","_b","assign","$props","$attrs","mounted","System","self","ref","getParameters","ValueWidget","HorizontalWidget","src","itemFullName","cable","subscription","imageData","valueType","get_tlm_packet","finally","received","subscribe","createSubscription","connected","mode","disconnected","rejected","cssProps","labelText","fontFamily","fontWeight","fontStyle","size","labelName","LabelWidget","LedWidget","ProgressbarWidget","defaultStyle","limitsBarParameters","LabelvalueWidget","LimitsbarWidget","overallWidth","limitsColumnParameters","LimitscolumnWidget","labelValueParameters","RangebarWidget","colors","TRUE","FALSE","_m","minValue","maxValue","scale","redLow","yellowLow","greenLow","greenHigh","yellowHigh","redHigh","blue","limitsSettings","DEFAULT","currentLimitsSet","currentSetRefreshInterval","selectedLimitsSet","DEFAULT_LIMITS_SET","get_limits","modifyLimits","divisor","calcPosition","lowValue","highValue","calcLimits","getCurrentLimitsSet","radius","fullLabelDisplay","secondsGraphed","pointsSaved","pointsGraphed","nativeOn","$emit","hideSystemBar","selectedGraphId","errors","scopedSlots","_u","fn","errorDialog","editGraph","collapseAll","calcFullSize","expandAll","collapseWidth","fullWidth","expandWidth","collapseHeight","fullHeight","expandHeight","minMaxTransition","expand","hideOverview","indexOf","_k","keyCode","editGraphClose","graphStartDateTime","graphEndDateTime","legendPositions","legendPosition","graphMinY","graphMaxY","itemHeaders","editItems","removeItems","proxy","clearErrors","editGraphMenuX","editGraphMenuY","editGraphMenu","staticStyle","editItem","valueTypes","currentType","closeEditItem","itemMenuX","itemMenuY","itemMenu","openEditItem","selectedItem","legendMenuX","legendMenuY","legendMenu","moveLegend","dateLabel","Date","now","dateRules","date","timeLabel","timeRules","onChange","time","required","initialDate","initialTime","rules","isValid","DateTimeChooser","startTime","initialItems","sortable","active","graph","overview","indexes","drawInterval","zoomChart","zoomOverview","needToUpdate","itemId","spanGaps","stroke","seriesObj","commonProps","chartSeries","overviewSeries","series","v","cursor","drag","sync","hooks","setScale","left","ready","canvas","legend","seriesEl","chartOpts","document","points","setSelect","chart","min","max","overviewOpts","handleResize","resize","setGraphRange","pad","getSize","navDrawer","legendWidth","Math","navDrawerWidth","getScales","scales","range","u","dataMin","dataMax","getAxes","strokeColor","axisColor","axes","grid","changeType","addItems","itemArray","addItemsToSubscription","endTime","start_time","end_time","removeItemsFromSubscription","reorderIndexes","bs_comparator","set_data_at_index","subscriptionKey","Graph","chunk","rindex","cindex","columns","widgetChunks","ceil","scaleFactor","selectedIndex","selected","scrollwindowStyle","VerticalboxWidget","maxHeight","curTab","tab","tabIndex","fullName","valueParameters","VerticalWidget","contentStyle","menus","targets","targetSelect","selectedTarget","screens","screenSelect","selectedScreen","showScreen","def","refInFor","screenId","definition","closeScreen","refreshLayout","toolName","openConfiguration","openConfig","saveConfiguration","saveConfig","openEdit","screenKey","layoutStack","editDialog","downloadScreen","file","loadingFile","loadFile","currentDefinition","domProps","editErrors","cancelEdit","saveEdit","ConfigParserError","config_parser","usage","keyword","filename","line","line_number","ConfigParserService","min_num_params","max_num_params","first_char","last_char","substring","rx","global","r","replace","match","push","input_string","original_filename","yield_non_keyword_lines","remove_quotes","line_continuation","split","numLines","trim","scan_string","first_item","toUpperCase","requireComponent","camelCase","pop","componentName","backup","configParser","currentLayout","namedWidgets","fixed","globalSettings","globalSubsettings","substitute","original_target_name","force_substitute","pollingPeriod","errorCaptured","vm","info","refreshInterval","parseDefinition","get_named_widget","setNamedWidget","update","fileReader","that","link","processWidget","widgetName","applyGlobalSettings","cancel","success","search","configs","itemSelected","slot","select","deleteConfig","align","list_configs","configId","confirm","okText","cancelText","configName","menu","formatDT","radioGroup","option","j","disabled","command","icon","radio","checkbox","CosmosScreen","TopBar","OpenConfigDialog","SaveConfigDialog","counter","definitions","get_target_list","dragEnabled","dragHandle","updateScreens","loadScreen","pushScreen","setTimeout","configResponse","JSON","loadScreenPromises","sort","gridItems","___CSS_LOADER_EXPORT___","content","__esModule","locals","add"],"sourceRoot":""}