cosmosc2-tool-tlmviewer 5.0.3 → 5.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"js/947.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?4269","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?d0ae","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?34e4","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?8888","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?da40","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?228d","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?c458","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/TopBar.vue?b2db","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?15aa","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?d6b3","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/TopBar.vue?5429","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?8e1a","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\": 5393,\n\t\"./ButtonWidget.vue\": 3945,\n\t\"./CanvasWidget.vue\": 8494,\n\t\"./CanvasdotWidget.vue\": 8176,\n\t\"./CanvasimageWidget.vue\": 8116,\n\t\"./CanvasimagevalueWidget.vue\": 5467,\n\t\"./CanvaslabelWidget.vue\": 2739,\n\t\"./CanvaslabelvalueWidget.vue\": 1981,\n\t\"./CanvaslineWidget.vue\": 3003,\n\t\"./CanvaslinevalueWidget.vue\": 8605,\n\t\"./CheckbuttonWidget.vue\": 604,\n\t\"./ComboboxWidget.vue\": 2229,\n\t\"./DynamicWidget.vue\": 393,\n\t\"./FormatvalueWidget.vue\": 7451,\n\t\"./HorizontalWidget.vue\": 1297,\n\t\"./HorizontalboxWidget.vue\": 978,\n\t\"./IframeWidget.vue\": 443,\n\t\"./ImageviewerWidget.vue\": 6735,\n\t\"./LabelWidget.vue\": 3520,\n\t\"./LabelledWidget.vue\": 2915,\n\t\"./LabelprogressbarWidget.vue\": 6632,\n\t\"./LabelvalueWidget.vue\": 7701,\n\t\"./LabelvaluedescWidget.vue\": 8074,\n\t\"./LabelvaluelimitsbarWidget.vue\": 1579,\n\t\"./LabelvaluelimitscolumnWidget.vue\": 3288,\n\t\"./LabelvaluerangebarWidget.vue\": 3249,\n\t\"./LedWidget.vue\": 7146,\n\t\"./LimitsbarWidget.vue\": 2570,\n\t\"./LimitscolorWidget.vue\": 1873,\n\t\"./LimitscolumnWidget.vue\": 5290,\n\t\"./LinegraphWidget.vue\": 9584,\n\t\"./MatrixbycolumnsWidget.vue\": 1110,\n\t\"./ProgressbarWidget.vue\": 34,\n\t\"./RadiobuttonWidget.vue\": 8022,\n\t\"./RadiogroupWidget.vue\": 1390,\n\t\"./RangebarWidget.vue\": 6117,\n\t\"./ScrollwindowWidget.vue\": 4825,\n\t\"./SectionheaderWidget.vue\": 1354,\n\t\"./SpacerWidget.vue\": 8879,\n\t\"./TabbookWidget.vue\": 9181,\n\t\"./TextboxWidget.vue\": 9669,\n\t\"./TextfieldWidget.vue\": 2872,\n\t\"./TitleWidget.vue\": 6690,\n\t\"./ValueWidget.vue\": 7720,\n\t\"./ValuelimitsbarWidget.vue\": 4907,\n\t\"./ValuelimitscolumnWidget.vue\": 6756,\n\t\"./ValuerangebarWidget.vue\": 6963,\n\t\"./VerticalWidget.vue\": 9314,\n\t\"./VerticalboxWidget.vue\": 5637\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 = 6263;","<!--\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 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 lines.forEach((line) => {\n const result = eval(line.trim())\n if (result instanceof Promise) {\n result\n .then((success) => {})\n .catch((err) => {\n if (err.message.includes('HazardousError')) {\n this.lastCmd = err.message.split('\\n')[2]\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 },\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: 10000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response.status === 401) {\n delete localStorage.cosmosToken\n CosmosAuth.login(location.href)\n } else {\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 }\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 'actioncable'\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","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=0f52a486&\"\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',{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-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()],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\n </v-icon>\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 data-test=\"close-graph-icon\" @click=\"$emit('close-graph')\">\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\n :id=\"`overview${id}`\"\n v-show=\"!hideOverview\"\n ></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-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 </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 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 clientX\n let clientY\n let canvas = u.root.querySelector('.u-over')\n canvas.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.itemMenu = 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.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 }\n return false\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\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 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 },\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 const viewWidth =\n Math.max(document.documentElement.clientWidth, window.innerWidth || 0) -\n navDrawerWidth\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 scoped>\n#chart {\n background-color: var(--v-tertiary-darken2);\n}\n#chart >>> .u-legend {\n text-align: left;\n}\n#chart >>> .u-inline {\n max-width: fit-content;\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=bfba4026&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&id=bfba4026&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 \"bfba4026\",\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}})}\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 hide-details dense :label=\"label\" :style=\"computedStyle\" />\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\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=60c7bd5e&\"\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:{\"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 :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=35a44a25&\"\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({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 :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 }\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 },\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 this.parseDefinition()\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 })\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=dc9e830a&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=dc9e830a&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 \"dc9e830a\",\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},domProps:{\"textContent\":_vm._s(option.icon)}})],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')),domProps:{\"textContent\":_vm._s(option.label)}}):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',{domProps:{\"textContent\":_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\n v-if=\"option.radio\"\n >\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\n v-if=\"option.checkbox\"\n >\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 v-text=\"option.icon\" :disabled=\"option.disabled\" />\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 v-text=\"option.label\"\n />\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title v-text=\"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=e3bb7458&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=e3bb7458&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 \"e3bb7458\",\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, \"#chart[data-v-bfba4026]{background-color:var(--v-tertiary-darken2)}#chart[data-v-bfba4026] .u-legend{text-align:left}#chart[data-v-bfba4026] .u-inline{max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}#chart[data-v-bfba4026] .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-e3bb7458] .v-label{margin-left:5px}.v-list-item__icon[data-v-e3bb7458]{margin-right:15px!important}.v-list-item__title[data-v-e3bb7458]{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-dc9e830a]{background-color:var(--v-tertiary-darken2)}.v-textarea[data-v-dc9e830a] 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&id=bfba4026&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(\"70802780\", 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=e3bb7458&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(\"a2f2c426\", 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=dc9e830a&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(\"1b5a8fcc\", 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","props","target","type","String","require","getPresignedUrl","fileName","Api","encodeURIComponent","localStorage","scope","this","response","url","Widget","widgets","Array","default","value","limitsState","formatString","valueId","colorBlind","viewDetails","contextMenuShown","x","y","contextMenuOptions","title","action","window","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","body","statusText","config","message","exception","class","$notify","serious","Cable","_cable","ActionCable","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","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","Promise","fillColor","fontSize","calcStyle","color","label","checked","widgetType","_b","assign","$props","$attrs","mounted","System","self","ref","getParameters","ValueWidget","join","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","graphMinY","graphMaxY","itemHeaders","editItems","removeItems","proxy","clearErrors","editGraphMenuX","editGraphMenuY","editGraphMenu","staticStyle","editItem","valueTypes","currentType","closeEditItem","itemMenuX","itemMenuY","itemMenu","openEditItem","selectedItem","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","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","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","string","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":""}
1
+ {"version":3,"file":"js/947.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?0c88","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?d0ae","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?da40","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?228d","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?c458","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/TopBar.vue?b2db","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?15aa","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?d6b3","webpack://@cosmosc2/tool-tlmviewer/../cosmosc2-tool-common/src/components/TopBar.vue?5429","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?8e1a","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\": 5393,\n\t\"./ButtonWidget.vue\": 5321,\n\t\"./CanvasWidget.vue\": 8494,\n\t\"./CanvasdotWidget.vue\": 8176,\n\t\"./CanvasimageWidget.vue\": 8116,\n\t\"./CanvasimagevalueWidget.vue\": 5467,\n\t\"./CanvaslabelWidget.vue\": 2739,\n\t\"./CanvaslabelvalueWidget.vue\": 1981,\n\t\"./CanvaslineWidget.vue\": 3003,\n\t\"./CanvaslinevalueWidget.vue\": 8605,\n\t\"./CheckbuttonWidget.vue\": 604,\n\t\"./ComboboxWidget.vue\": 2229,\n\t\"./DynamicWidget.vue\": 393,\n\t\"./FormatvalueWidget.vue\": 7451,\n\t\"./HorizontalWidget.vue\": 1297,\n\t\"./HorizontalboxWidget.vue\": 978,\n\t\"./IframeWidget.vue\": 443,\n\t\"./ImageviewerWidget.vue\": 6735,\n\t\"./LabelWidget.vue\": 3520,\n\t\"./LabelledWidget.vue\": 2915,\n\t\"./LabelprogressbarWidget.vue\": 6632,\n\t\"./LabelvalueWidget.vue\": 7701,\n\t\"./LabelvaluedescWidget.vue\": 8074,\n\t\"./LabelvaluelimitsbarWidget.vue\": 1579,\n\t\"./LabelvaluelimitscolumnWidget.vue\": 3288,\n\t\"./LabelvaluerangebarWidget.vue\": 3249,\n\t\"./LedWidget.vue\": 7146,\n\t\"./LimitsbarWidget.vue\": 2570,\n\t\"./LimitscolorWidget.vue\": 1873,\n\t\"./LimitscolumnWidget.vue\": 5290,\n\t\"./LinegraphWidget.vue\": 9584,\n\t\"./MatrixbycolumnsWidget.vue\": 1110,\n\t\"./ProgressbarWidget.vue\": 34,\n\t\"./RadiobuttonWidget.vue\": 102,\n\t\"./RadiogroupWidget.vue\": 6305,\n\t\"./RangebarWidget.vue\": 6117,\n\t\"./ScrollwindowWidget.vue\": 4825,\n\t\"./SectionheaderWidget.vue\": 1354,\n\t\"./SpacerWidget.vue\": 8879,\n\t\"./TabbookWidget.vue\": 9181,\n\t\"./TextboxWidget.vue\": 9669,\n\t\"./TextfieldWidget.vue\": 2872,\n\t\"./TitleWidget.vue\": 6690,\n\t\"./ValueWidget.vue\": 7720,\n\t\"./ValuelimitsbarWidget.vue\": 4907,\n\t\"./ValuelimitscolumnWidget.vue\": 6756,\n\t\"./ValuerangebarWidget.vue\": 6963,\n\t\"./VerticalWidget.vue\": 9314,\n\t\"./VerticalboxWidget.vue\": 5637\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 = 6263;","<!--\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 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')\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 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 },\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: 10000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response.status === 401) {\n delete localStorage.cosmosToken\n CosmosAuth.login(location.href)\n } else {\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 }\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","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=7db068da&\"\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',{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-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()],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\n </v-icon>\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 data-test=\"close-graph-icon\" @click=\"$emit('close-graph')\">\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\n :id=\"`overview${id}`\"\n v-show=\"!hideOverview\"\n ></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-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 </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 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 clientX\n let clientY\n let canvas = u.root.querySelector('.u-over')\n canvas.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.itemMenu = 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.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 }\n return false\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\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 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 },\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 const viewWidth =\n Math.max(document.documentElement.clientWidth, window.innerWidth || 0) -\n navDrawerWidth\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 scoped>\n#chart {\n background-color: var(--v-tertiary-darken2);\n}\n#chart >>> .u-legend {\n text-align: left;\n}\n#chart >>> .u-inline {\n max-width: fit-content;\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=bfba4026&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&id=bfba4026&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 \"bfba4026\",\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({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 :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 }\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 },\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 this.parseDefinition()\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 })\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=dc9e830a&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=dc9e830a&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 \"dc9e830a\",\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},domProps:{\"textContent\":_vm._s(option.icon)}})],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')),domProps:{\"textContent\":_vm._s(option.label)}}):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',{domProps:{\"textContent\":_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\n v-if=\"option.radio\"\n >\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\n v-if=\"option.checkbox\"\n >\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 v-text=\"option.icon\" :disabled=\"option.disabled\" />\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 v-text=\"option.label\"\n />\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title v-text=\"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=e3bb7458&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=e3bb7458&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 \"e3bb7458\",\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, \"#chart[data-v-bfba4026]{background-color:var(--v-tertiary-darken2)}#chart[data-v-bfba4026] .u-legend{text-align:left}#chart[data-v-bfba4026] .u-inline{max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}#chart[data-v-bfba4026] .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-e3bb7458] .v-label{margin-left:5px}.v-list-item__icon[data-v-e3bb7458]{margin-right:15px!important}.v-list-item__title[data-v-e3bb7458]{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-dc9e830a]{background-color:var(--v-tertiary-darken2)}.v-textarea[data-v-dc9e830a] 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&id=bfba4026&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(\"70802780\", 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=e3bb7458&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(\"a2f2c426\", 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=dc9e830a&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(\"1b5a8fcc\", 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","props","target","type","String","require","getPresignedUrl","fileName","Api","encodeURIComponent","localStorage","scope","this","response","url","Widget","widgets","Array","default","value","limitsState","formatString","valueId","colorBlind","viewDetails","contextMenuShown","x","y","contextMenuOptions","title","action","window","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","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","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","Promise","fillColor","fontSize","calcStyle","color","label","checked","widgetType","_b","assign","$props","$attrs","mounted","System","self","ref","getParameters","ValueWidget","join","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","graphMinY","graphMaxY","itemHeaders","editItems","removeItems","proxy","clearErrors","editGraphMenuX","editGraphMenuY","editGraphMenu","staticStyle","editItem","valueTypes","currentType","closeEditItem","itemMenuX","itemMenuY","itemMenu","openEditItem","selectedItem","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","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","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","string","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":""}