openc3-tool-tlmviewer 5.0.7 → 5.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/969.js","mappings":"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","sources":["webpack://@openc3/tool-tlmviewer/../../node_modules/@openc3/tool-common/src/components/widgets/ sync nonrecursive [A-Z]\\w+Widget\\.vue$","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ButtonWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ImageLoader.js","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/Layout.js","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VWidget.js","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/Widget.js","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/WidthSetter.js","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/services/api.js","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/services/axios.js","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/services/cable.js","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/services/config-parser.js","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/services/openc3-api.js","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/DetailsDialog.vue?bc9a","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/DetailsDialog.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/DetailsDialog.vue?c3b2","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/DetailsDialog.vue?a6d9","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ArrayWidget.vue?8070","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ArrayWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ArrayWidget.vue?1c29","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ArrayWidget.vue?3719","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/BlockWidget.vue?e155","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/BlockWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/BlockWidget.vue?d6e1","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/BlockWidget.vue?c039","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ButtonWidget.vue?ff68","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ButtonWidget.vue?435b","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ButtonWidget.vue?184d","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasWidget.vue?6ac7","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasWidget.vue?27e3","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasWidget.vue?4ed0","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasdotWidget.vue?00a3","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasdotWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasdotWidget.vue?c186","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasdotWidget.vue?b7eb","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasimageWidget.vue?7695","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasimageWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasimageWidget.vue?2cf5","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasimageWidget.vue?b9bf","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasimagevalueWidget.vue?ec34","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasimagevalueWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasimagevalueWidget.vue?00a9","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasimagevalueWidget.vue?986e","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslabelWidget.vue?a1ee","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslabelWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslabelWidget.vue?c907","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslabelWidget.vue?492c","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslabelvalueWidget.vue?f284","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslabelvalueWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslabelvalueWidget.vue?b785","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslabelvalueWidget.vue?0ce0","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslineWidget.vue?ae8b","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslineWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslineWidget.vue?8b6d","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslineWidget.vue?cb19","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslinevalueWidget.vue?229e","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslinevalueWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslinevalueWidget.vue?0adb","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvaslinevalueWidget.vue?e863","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CheckbuttonWidget.vue?80b7","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CheckbuttonWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CheckbuttonWidget.vue?986f","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CheckbuttonWidget.vue?45ff","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ComboboxWidget.vue?1493","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ComboboxWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ComboboxWidget.vue?63c4","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ComboboxWidget.vue?c6ea","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/DynamicWidget.vue?4f2a","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/DynamicWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/DynamicWidget.vue?5041","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/DynamicWidget.vue?adcb","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/FormatvalueWidget.vue?0fc9","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/FormatvalueWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/FormatvalueWidget.vue?eaf4","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/FormatvalueWidget.vue?8974","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/HorizontalWidget.vue?fb5b","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/HorizontalWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/HorizontalWidget.vue?1fc3","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/HorizontalWidget.vue?0efe","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/HorizontalboxWidget.vue?77d9","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/HorizontalboxWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/HorizontalboxWidget.vue?fcff","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/HorizontalboxWidget.vue?9bc5","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/IframeWidget.vue?8e95","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/IframeWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/IframeWidget.vue?b746","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/IframeWidget.vue?ed61","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ImageviewerWidget.vue?f6d9","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ImageviewerWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ImageviewerWidget.vue?a987","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ImageviewerWidget.vue?b4d4","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelWidget.vue?f465","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelWidget.vue?6518","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelWidget.vue?977e","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelledWidget.vue?52d4","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelledWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelledWidget.vue?acf0","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelledWidget.vue?ebd1","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelprogressbarWidget.vue?84d5","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelprogressbarWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelprogressbarWidget.vue?daaf","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelprogressbarWidget.vue?19a8","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvalueWidget.vue?7b6e","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvalueWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvalueWidget.vue?129e","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvalueWidget.vue?86f0","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluedescWidget.vue?a6cc","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluedescWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluedescWidget.vue?ef0c","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluedescWidget.vue?fa21","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?db3f","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?ffdc","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?5cbf","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluelimitscolumnWidget.vue?f41e","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluelimitscolumnWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluelimitscolumnWidget.vue?f35d","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluelimitscolumnWidget.vue?9cff","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluerangebarWidget.vue?8852","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluerangebarWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluerangebarWidget.vue?c509","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelvaluerangebarWidget.vue?0761","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LedWidget.vue?79de","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LedWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LedWidget.vue?4267","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LedWidget.vue?fef3","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitsbarWidget.vue?9295","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitsbarWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitsbarWidget.vue?1841","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitsbarWidget.vue?676d","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolorWidget.vue?ae5e","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolorWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolorWidget.vue?91c6","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolorWidget.vue?bd65","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolumnWidget.vue?9196","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolumnWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolumnWidget.vue?1c29","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolumnWidget.vue?86d1","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LinegraphWidget.vue?5eb9","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/Graph.vue?d273","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/DateTimeChooser.vue?9d82","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/DateTimeChooser.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/DateTimeChooser.vue?5af2","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/DateTimeChooser.vue?b0ec","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/Graph.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/Graph.vue?237b","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/Graph.vue?a4ec","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LinegraphWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LinegraphWidget.vue?8b98","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LinegraphWidget.vue?996d","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/MatrixbycolumnsWidget.vue?3a00","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/MatrixbycolumnsWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/MatrixbycolumnsWidget.vue?4bf7","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/MatrixbycolumnsWidget.vue?bfe9","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ProgressbarWidget.vue?36ce","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ProgressbarWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ProgressbarWidget.vue?c5a9","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ProgressbarWidget.vue?6e53","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RadiobuttonWidget.vue?e549","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RadiobuttonWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RadiobuttonWidget.vue?5475","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RadiobuttonWidget.vue?4323","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RadiogroupWidget.vue?a6e0","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RadiogroupWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RadiogroupWidget.vue?74fa","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RadiogroupWidget.vue?5348","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RangebarWidget.vue?5496","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RangebarWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RangebarWidget.vue?1b88","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RangebarWidget.vue?9887","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ScrollwindowWidget.vue?6bd9","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ScrollwindowWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ScrollwindowWidget.vue?08df","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ScrollwindowWidget.vue?f542","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/SectionheaderWidget.vue?4cb6","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/SectionheaderWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/SectionheaderWidget.vue?6002","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/SectionheaderWidget.vue?96bb","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/SpacerWidget.vue?ac74","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/SpacerWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/SpacerWidget.vue?8f76","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/SpacerWidget.vue?b07a","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TabbookWidget.vue?5fd3","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TabbookWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TabbookWidget.vue?a295","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TabbookWidget.vue?18bd","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TextboxWidget.vue?8dc4","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TextboxWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TextboxWidget.vue?a64d","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TextboxWidget.vue?1416","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TextfieldWidget.vue?95fb","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TextfieldWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TextfieldWidget.vue?da90","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TextfieldWidget.vue?5009","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TitleWidget.vue?cfa6","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TitleWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TitleWidget.vue?4aca","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TitleWidget.vue?5eb2","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValueWidget.vue?2ffd","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValueWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValueWidget.vue?25e0","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValueWidget.vue?bd80","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuelimitsbarWidget.vue?b82f","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuelimitsbarWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuelimitsbarWidget.vue?d155","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuelimitsbarWidget.vue?b741","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuelimitscolumnWidget.vue?f4ea","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuelimitscolumnWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuelimitscolumnWidget.vue?adb1","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuelimitscolumnWidget.vue?9309","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuerangebarWidget.vue?c50e","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuerangebarWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuerangebarWidget.vue?f2e1","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValuerangebarWidget.vue?edbc","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VerticalWidget.vue?8f4f","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VerticalWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VerticalWidget.vue?e27d","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VerticalWidget.vue?fe91","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VerticalboxWidget.vue?49ef","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VerticalboxWidget.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VerticalboxWidget.vue?d855","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VerticalboxWidget.vue?f5d0","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/TlmViewer.vue?28de","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/TopBar.vue?79bd","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/TopBar.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/TopBar.vue?231a","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/TopBar.vue?d9e2","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/Openc3Screen.vue?f549","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/EditScreenDialog.vue?1ade","webpack://@openc3/tool-tlmviewer/src/tools/TlmViewer/EditScreenDialog.vue","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/EditScreenDialog.vue?2295","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/EditScreenDialog.vue","webpack://@openc3/tool-tlmviewer/src/tools/TlmViewer/Openc3Screen.vue","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/Openc3Screen.vue?4f81","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/Openc3Screen.vue","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/NewScreenDialog.vue?9fc9","webpack://@openc3/tool-tlmviewer/src/tools/TlmViewer/NewScreenDialog.vue","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/NewScreenDialog.vue?3c6d","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/NewScreenDialog.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/OpenConfigDialog.vue?33ed","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/OpenConfigDialog.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/OpenConfigDialog.vue?15fa","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/OpenConfigDialog.vue?22a0","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/SaveConfigDialog.vue?282a","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/SaveConfigDialog.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/SaveConfigDialog.vue?eb28","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/SaveConfigDialog.vue?5010","webpack://@openc3/tool-tlmviewer/src/tools/TlmViewer/TlmViewer.vue","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/TlmViewer.vue?ce44","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/TlmViewer.vue","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/DetailsDialog.vue?92dc","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/Graph.vue?ad90","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/Graph.vue?cfb6","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/TopBar.vue?bfe1","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ArrayWidget.vue?3f97","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/BlockWidget.vue?e266","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/HorizontalboxWidget.vue?fe0a","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelWidget.vue?3f92","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LedWidget.vue?0122","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolorWidget.vue?3cf9","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TextboxWidget.vue?924c","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VerticalboxWidget.vue?9b01","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/EditScreenDialog.vue?e51c","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/Openc3Screen.vue?ec2c","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/TlmViewer.vue?1fd2","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasWidget.vue?29bf","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitsbarWidget.vue?2121","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolumnWidget.vue?451e","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RangebarWidget.vue?aac1","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValueWidget.vue?3034","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/DetailsDialog.vue?fd9a","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/Graph.vue?1702","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/Graph.vue?ef6c","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/TopBar.vue?1e7c","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ArrayWidget.vue?7b15","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/BlockWidget.vue?6adb","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/HorizontalboxWidget.vue?4e7f","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LabelWidget.vue?def7","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LedWidget.vue?6dc4","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolorWidget.vue?9330","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/TextboxWidget.vue?3c1e","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/VerticalboxWidget.vue?02a9","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/EditScreenDialog.vue?27e0","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/Openc3Screen.vue?1463","webpack://@openc3/tool-tlmviewer/./src/tools/TlmViewer/TlmViewer.vue?ca11","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/CanvasWidget.vue?3abb","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitsbarWidget.vue?b62b","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/LimitscolumnWidget.vue?6c31","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/RangebarWidget.vue?6eb8","webpack://@openc3/tool-tlmviewer/../openc3-tool-common/src/components/widgets/ValueWidget.vue?7bd2"],"sourcesContent":["var map = {\n\t\"./ArrayWidget.vue\": 74132,\n\t\"./BlockWidget.vue\": 3770,\n\t\"./ButtonWidget.vue\": 35355,\n\t\"./CanvasWidget.vue\": 8617,\n\t\"./CanvasdotWidget.vue\": 54383,\n\t\"./CanvasimageWidget.vue\": 72282,\n\t\"./CanvasimagevalueWidget.vue\": 350,\n\t\"./CanvaslabelWidget.vue\": 72106,\n\t\"./CanvaslabelvalueWidget.vue\": 15986,\n\t\"./CanvaslineWidget.vue\": 50720,\n\t\"./CanvaslinevalueWidget.vue\": 5649,\n\t\"./CheckbuttonWidget.vue\": 79371,\n\t\"./ComboboxWidget.vue\": 57810,\n\t\"./DynamicWidget.vue\": 41780,\n\t\"./FormatvalueWidget.vue\": 12558,\n\t\"./HorizontalWidget.vue\": 24122,\n\t\"./HorizontalboxWidget.vue\": 93534,\n\t\"./IframeWidget.vue\": 60809,\n\t\"./ImageviewerWidget.vue\": 19226,\n\t\"./LabelWidget.vue\": 12112,\n\t\"./LabelledWidget.vue\": 7881,\n\t\"./LabelprogressbarWidget.vue\": 81002,\n\t\"./LabelvalueWidget.vue\": 92884,\n\t\"./LabelvaluedescWidget.vue\": 65965,\n\t\"./LabelvaluelimitsbarWidget.vue\": 1820,\n\t\"./LabelvaluelimitscolumnWidget.vue\": 22075,\n\t\"./LabelvaluerangebarWidget.vue\": 10078,\n\t\"./LedWidget.vue\": 75337,\n\t\"./LimitsbarWidget.vue\": 55000,\n\t\"./LimitscolorWidget.vue\": 71905,\n\t\"./LimitscolumnWidget.vue\": 71229,\n\t\"./LinegraphWidget.vue\": 63819,\n\t\"./MatrixbycolumnsWidget.vue\": 36913,\n\t\"./ProgressbarWidget.vue\": 5775,\n\t\"./RadiobuttonWidget.vue\": 45251,\n\t\"./RadiogroupWidget.vue\": 67822,\n\t\"./RangebarWidget.vue\": 71276,\n\t\"./ScrollwindowWidget.vue\": 12542,\n\t\"./SectionheaderWidget.vue\": 41411,\n\t\"./SpacerWidget.vue\": 99528,\n\t\"./TabbookWidget.vue\": 39792,\n\t\"./TextboxWidget.vue\": 28088,\n\t\"./TextfieldWidget.vue\": 75022,\n\t\"./TitleWidget.vue\": 56333,\n\t\"./ValueWidget.vue\": 84952,\n\t\"./ValuelimitsbarWidget.vue\": 28162,\n\t\"./ValuelimitscolumnWidget.vue\": 77634,\n\t\"./ValuerangebarWidget.vue\": 84887,\n\t\"./VerticalWidget.vue\": 42248,\n\t\"./VerticalboxWidget.vue\": 10772\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 = 15507;","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n-->\n\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 { OpenC3Api } from '../../services/openc3-api'\nimport Api from '../../services/api'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n api: null,\n screen: null,\n displaySendHazardous: false,\n lastCmd: '',\n }\n },\n computed: {\n buttonText() {\n return this.parameters[0]\n },\n eval() {\n return this.parameters[1]\n },\n },\n created() {\n this.api = new OpenC3Api()\n // Look through the settings and get a reference to the screen\n this.settings.forEach((setting) => {\n if (setting[0] === 'SCREEN') {\n this.screen = setting[1]\n }\n })\n },\n methods: {\n onClick() {\n const lines = this.eval.split(';;')\n // Create local references to variables so users don't need to use 'this'\n const self = this // needed for $emit\n const screen = this.screen\n const api = this.api\n const run_script = this.runScript\n lines.forEach((line) => {\n const result = eval(line.trim())\n if (result instanceof Promise) {\n result\n .then((success) => {})\n .catch((err) => {\n // This text is in top_level.rb HazardousError.to_s\n if (err.message.includes('is Hazardous')) {\n this.lastCmd = err.message.split('\\n').pop()\n this.displaySendHazardous = true\n }\n })\n }\n })\n },\n sendHazardousCmd() {\n this.displaySendHazardous = false\n // TODO: This only handles basic cmd() calls in buttons, do we need to handle other? cmd_raw()?\n this.lastCmd = this.lastCmd.replace(\n 'cmd(',\n 'this.api.cmd_no_hazardous_check('\n )\n eval(this.lastCmd)\n },\n cancelHazardousCmd() {\n this.displaySendHazardous = false\n },\n runScript(scriptName, openScript = true) {\n Api.post(`/script-api/scripts/${scriptName}/run`).then((response) => {\n if (openScript) {\n window.open(`/tools/scriptrunner/${response.data}`, '_blank')\n }\n })\n },\n },\n}\n</script>\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 `/openc3-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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 ' + 'openc3-' + 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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n*/\n\nimport { ConfigParserError } from '@openc3/tool-common/src/services/config-parser'\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 line: {\n type: String,\n default: ''\n },\n lineNumber: {\n type: Number,\n default: 0,\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 verifyNumParams(keyword, min_num_params, max_num_params, usage = '') {\n let parser = { line: this.line, lineNumber: this.lineNumber, keyword: keyword, parameters: this.parameters }\n\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 parser,\n `Not enough parameters for ${keyword}.`,\n usage,\n 'https://openc3.com/docs/v5'\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 parser,\n `Too many parameters for ${keyword}.`,\n usage,\n 'https://openc3.com/docs/v5'\n )\n }\n },\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 OpenC3Screen.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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity)\n } catch (error) {\n OpenC3Auth.login()\n }\n headers['Authorization'] = localStorage.openc3Token\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n*/\n\nimport axios from 'axios'\nimport Vue from 'vue'\n\nconst vueInstance = new Vue()\n\nconst axiosInstance = axios.create({\n baseURL: location.origin,\n timeout: 60000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n if (error.response.status === 401) {\n delete localStorage.openc3Token\n OpenC3Auth.login(location.href)\n } else {\n // Individual tools can set axiosIgnoreResponse to an error code\n // they potentially expect, e.g. '404', in which case we ignore it\n // Since localStorage only supports strings call toString on the status\n if (\n localStorage.axiosIgnoreResponse === error.response.status.toString()\n ) {\n return Promise.reject(error)\n }\n let body = `HTTP ${error.response.status} - `\n if (error.response?.statusText) {\n body += `${error.response.statusText} `\n }\n if (error.response?.config?.data) {\n body += `${error.response.config.data} `\n }\n if (error.response?.data?.message) {\n body += `${error.response.data.message}`\n } else if (error.response?.data?.exception) {\n body += `${error.response.data.exception}`\n } else if (error.response?.data?.error?.message) {\n if (error.response.data.error.class) {\n body += `${error.response.data.error.class} `\n }\n body += `${error.response.data.error.message}`\n } else {\n body += `${error.response?.data}`\n }\n vueInstance.$notify.serious({\n title: 'Network error',\n body,\n })\n }\n throw error\n } else {\n throw error\n }\n }\n)\n\nexport default axiosInstance\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 = '/openc3-api/cable') {\n this._cable = ActionCable.createConsumer(url)\n }\n disconnect() {\n this._cable.disconnect()\n }\n createSubscription(channel, scope, callbacks = {}, additionalOptions = {}) {\n return OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(() => {\n return this._cable.subscriptions.create(\n {\n channel,\n scope,\n token: localStorage.openc3Token,\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n*/\n\nexport class ConfigParserError {\n constructor(config_parser, message, 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.lineNumber = config_parser.lineNumber\n this.message = message\n this.usage = usage\n this.url = url\n }\n}\n\nexport class ConfigParserService {\n keyword = null\n parameters = []\n filename = ''\n line = ''\n lineNumber = 0\n url = 'https://openc3.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 (let 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 let first_char = string.charAt(0)\n if (first_char !== '\"' && first_char !== \"'\") {\n return string\n }\n let 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 let 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 let 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 let lines = input_string.split('\\n')\n let numLines = lines.length\n\n for (let i = 0; i < numLines; i++) {\n this.lineNumber = i + 1\n let line = lines[i].trim()\n let rx = /(\"([^\\\\\"]|\\\\.)*\")|('([^\\\\']|\\\\.)*')|\\S+/g\n let data = this.scan_string(line, rx)\n let 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, line, this.lineNumber)\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 let length = data.length\n if (length > 1) {\n for (let index = 1; index < length; index++) {\n let 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, line, this.lineNumber)\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n*/\n\nimport axios from './axios.js'\n\nexport class OpenC3Api {\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 OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity)\n } catch (error) {\n OpenC3Auth.login()\n }\n this.id = this.id + 1\n try {\n kwparams['scope'] = localStorage.scope\n const response = await axios.post(\n '/openc3-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.openc3Token,\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_openc3_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_openc3_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_tlm_cnts(target_commands) {\n return this.exec('get_tlm_cnts', [target_commands])\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_names(target_name) {\n return this.exec('get_all_telemetry_names', [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_openc3_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 OpenC3ScreenComponent\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_openc3_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_openc3_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_command_names(target_name) {\n return this.exec('get_all_command_names', [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_cnts(target_commands) {\n return this.exec('get_cmd_cnts', [target_commands])\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_openc3_type(param_list[key])\n if (converted !== null) {\n param_list[key] = converted\n }\n }\n }\n return this.exec(method, [target_name, command_name, param_list])\n }\n\n // Called by CmdSenderComponent\n get_cmd_hazardous(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('get_cmd_hazardous', target_name)\n } else {\n return this._cmd(\n 'get_cmd_hazardous',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd', target_name)\n } else {\n return this._cmd('cmd', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw', target_name)\n } else {\n return this._cmd('cmd_raw', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_checks', target_name)\n } else {\n return this._cmd('cmd_no_checks', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_checks', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_checks',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n get_interface_names() {\n return this.exec('get_interface_names', [])\n }\n\n // Called by CmdSenderComponent\n send_raw(interface_name, data) {\n return this.exec('send_raw', [interface_name, data])\n }\n\n list_configs(tool) {\n return this.exec('list_configs', [tool])\n }\n\n load_config(tool, name) {\n return this.exec('load_config', [tool, name])\n }\n\n save_config(tool, name, data) {\n return this.exec('save_config', [tool, name, data])\n }\n\n delete_config(tool, name) {\n return this.exec('delete_config', [tool, name])\n }\n\n get_out_of_limits() {\n return this.exec('get_out_of_limits', [])\n }\n\n get_overall_limits_state(ignored) {\n return this.exec('get_overall_limits_state', [ignored])\n }\n\n list_settings() {\n return this.exec('list_settings', [])\n }\n\n get_all_settings() {\n return this.exec('get_all_settings', [])\n }\n\n get_setting(name) {\n return this.exec('get_setting', [name])\n }\n\n get_settings(array) {\n return this.exec('get_settings', array)\n }\n\n save_setting(name, data) {\n return this.exec('save_setting', [name, data])\n }\n\n // TODO: Currently unused but seemed like a useful function\n async hashString(string) {\n if (window.isSecureContext) {\n // Encode the string as an arrayBuffer which the subtle crypto API uses\n const arrayBuffer = new TextEncoder().encode(string)\n // Use the subtle crypto API to perform a SHA256 Sum of the array buffer\n // The resulting hash is stored in an array buffer\n const hashAsArrayBuffer = await crypto.subtle.digest(\n 'SHA-256',\n arrayBuffer\n )\n // To create a string we will get the hexadecimal value of each byte of the array buffer\n // This gets us an array where each byte of the array buffer becomes one item in the array\n const uint8ViewOfHash = new Uint8Array(hashAsArrayBuffer)\n // We then convert it to a regular array so we can convert each item to hexadecimal strings\n // Where to characters of 0-9 or a-f represent a number between 0 and 16, containing 4 bits of information, so 2 of them is 8 bits (1 byte).\n return Array.from(uint8ViewOfHash)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n // else ?\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Details \")]),_c('v-spacer')],1),_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.targetName)+\" \"+_vm._s(_vm.packetName)+\" \"+_vm._s(_vm.itemName)+\" \")]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.details.description))]),_c('v-card-text',[_c('v-container',{attrs:{\"fluid\":\"\"}},[(_vm.type === 'tlm')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Item Values\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Raw Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.rawValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Converted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.convertedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Formatted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.formattedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"With Units Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.unitsValue))])],1)],1)],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Offset\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_offset))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_size))])],1),(_vm.details.array_size)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Array Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.array_size))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Data Type\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.data_type))])],1),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Minimum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.minimum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Maximum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.maximum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Default\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.default))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Format String\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.format_string))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Read Conversion\")]),(_vm.details.read_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.read_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.read_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Write Conversion\")]),(_vm.details.write_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.write_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.write_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Id Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.id_value))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Full\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units_full))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Abbr\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Endianness\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.endianness))])],1),(_vm.details.states)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.states),function(state,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(state.value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.limits)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.limits),function(limit,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_vm._v(\" \"+_vm._s(_vm.formatLimit(limit))+\" \"),_c('v-col')],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.meta)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.meta),function(value,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col',[_vm._v(\"None\")])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 { OpenC3Api } from '../services/openc3-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 OpenC3Api()\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.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.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=2d350830&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=2d350830&prod&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 \"2d350830\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.openc3-green >>> input {\n color: rgb(0, 150, 0);\n}\n.openc3-yellow >>> input {\n color: rgb(190, 135, 0);\n}\n.openc3-red >>> input {\n color: red;\n}\n.openc3-blue >>> input {\n color: rgb(0, 100, 255);\n}\n.openc3-purple >>> input {\n color: rgb(200, 0, 200);\n}\n.openc3-black >>> input {\n color: black;\n}\n.openc3-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.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.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=048f5302&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=048f5302&prod&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 \"048f5302\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.openc3-green >>> input {\n color: rgb(0, 150, 0);\n}\n.openc3-yellow >>> input {\n color: rgb(190, 135, 0);\n}\n.openc3-red >>> input {\n color: red;\n}\n.openc3-blue >>> input {\n color: rgb(0, 100, 255);\n}\n.openc3-purple >>> input {\n color: rgb(200, 0, 200);\n}\n.openc3-black >>> input {\n color: black;\n}\n.openc3-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.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.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=2fbe28c1&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=2fbe28c1&prod&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 \"2fbe28c1\",\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.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.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=252c48d6&\"\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,\"line\":widget.line,\"lineNumber\":widget.lineNumber}},_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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 :line=\"widget.line\"\n :lineNumber=\"widget.lineNumber\"\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.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.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=44b6a4ed&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=44b6a4ed&prod&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 \"44b6a4ed\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=43053f5f&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=1f2f5e73&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=22d9b558&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=0c8549af&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=dd99407c&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=18bf5d2c&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=32ff8d62&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=28d5f47c&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=72913c0e&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 async mounted() {\n try {\n /* eslint-disable-next-line */\n this.widgetType = await System.import(/* webpackIgnore: true */ this.url)\n } catch (e) {\n throw new Error(`Unknown widget: ${this.name}`)\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.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.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=02f7b0de&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=92fe903c&\"\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,\"line\":widget.line,\"lineNumber\":widget.lineNumber}},_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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 :line=\"widget.line\"\n :lineNumber=\"widget.lineNumber\"\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.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.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=6bc45c4e&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=76a0c989&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=76a0c989&prod&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 \"76a0c989\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=65712e8a&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 { OpenC3Api } from '@openc3/tool-common/src/services/openc3-api'\nimport Widget from '@openc3/tool-common/src/components/widgets/Widget'\nimport Cable from '@openc3/tool-common/src/services/cable.js'\n\nexport default {\n mixins: [Widget],\n data: function () {\n return {\n api: new OpenC3Api(),\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.openc3Token,\n items: [this.itemFullName],\n })\n },\n disconnected: () => {\n this.$notify.caution({\n body: 'OpenC3 backend connection disconnected.',\n })\n },\n rejected: () => {\n this.$notify.caution({\n body: 'OpenC3 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.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.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=6b8a3373&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 this.verifyNumParams(\n 'LABEL',\n 1,\n 5,\n 'LABEL <Text> <Font Family> <Font Size> <Font Weight> <Font Style>'\n )\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.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.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=c4066fac&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=c4066fac&prod&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 \"c4066fac\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=a15efdf2&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=07f63c9f&\"\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,\"line\":_vm.line,\"lineNumber\":_vm.lineNumber,\"widget-index\":0}}),_c('value-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings,\"line\":_vm.line,\"lineNumber\":_vm.lineNumber,\"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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 :line=\"line\"\n :lineNumber=\"lineNumber\"\n :widget-index=\"0\"\n />\n <value-widget\n :parameters=\"parameters\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :line=\"line\"\n :lineNumber=\"lineNumber\"\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.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.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=72159f24&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 { OpenC3Api } from '../../services/openc3-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 OpenC3Api()\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.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.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=657cb4aa&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=074b6799&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=09418966&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=1c027da8&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=a1dc0278&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=a1dc0278&prod&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 \"a1dc0278\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 { OpenC3Api } from '../../services/openc3-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 OpenC3Api()\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.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.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=692162b3&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=692162b3&prod&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 \"692162b3\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=71a68fe2&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=71a68fe2&prod&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 \"71a68fe2\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 { OpenC3Api } from '../../services/openc3-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 OpenC3Api()\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.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.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=1ab30c30&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=1ab30c30&prod&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 \"1ab30c30\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('graph',{ref:'graph' + _vm.id,attrs:{\"id\":_vm.id,\"state\":_vm.state,\"selected-graph-id\":_vm.id,\"seconds-graphed\":_vm.secondsGraphed,\"points-saved\":_vm.pointsSaved,\"points-graphed\":_vm.pointsGraphed,\"initial-items\":_vm.items,\"height\":_vm.size.height,\"width\":_vm.size.width,\"hide-system-bar\":\"\",\"hide-overview\":\"\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-card',{nativeOn:{\"click\":function($event){return _vm.$emit('click')}}},[_c('v-system-bar',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hideSystemBar),expression:\"!hideSystemBar\"}],class:_vm.selectedGraphId === _vm.id ? 'active' : 'inactive'},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.errors.length !== 0),expression:\"errors.length !== 0\"}],staticClass:\"mx-2\"},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"error-graph-icon\"},on:{\"click\":function($event){_vm.errorDialog = true}}},[_vm._v(\"mdi-alert\")])],1)]}}])},[_c('span',[_vm._v(\"Errors\")])])],1),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"edit-graph-icon\"},on:{\"click\":function($event){_vm.editGraph = true}}},[_vm._v(\" mdi-pencil \")])],1)]}}])},[_c('span',[_vm._v(\" Edit \")])]),_c('v-spacer'),_c('span',[_vm._v(_vm._s(_vm.title))]),_c('v-spacer'),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.calcFullSize),expression:\"calcFullSize\"}],attrs:{\"data-test\":\"collapse-all\"},on:{\"click\":_vm.collapseAll}},[_vm._v(\" mdi-arrow-collapse \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.calcFullSize),expression:\"!calcFullSize\"}],attrs:{\"data-test\":\"expand-all\"},on:{\"click\":_vm.expandAll}},[_vm._v(\" mdi-arrow-expand \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.calcFullSize),expression:\"calcFullSize\"}]},[_vm._v(\" Collapse \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.calcFullSize),expression:\"!calcFullSize\"}]},[_vm._v(\" Expand \")])])],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullWidth),expression:\"fullWidth\"}],attrs:{\"data-test\":\"collapse-width\"},on:{\"click\":_vm.collapseWidth}},[_vm._v(\" mdi-arrow-collapse-horizontal \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullWidth),expression:\"!fullWidth\"}],attrs:{\"data-test\":\"expand-width\"},on:{\"click\":_vm.expandWidth}},[_vm._v(\" mdi-arrow-expand-horizontal \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullWidth),expression:\"fullWidth\"}]},[_vm._v(\" Collapse Width \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullWidth),expression:\"!fullWidth\"}]},[_vm._v(\" Expand Width \")])])],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullHeight),expression:\"fullHeight\"}],attrs:{\"data-test\":\"collapse-height\"},on:{\"click\":_vm.collapseHeight}},[_vm._v(\" mdi-arrow-collapse-vertical \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullHeight),expression:\"!fullHeight\"}],attrs:{\"data-test\":\"expand-height\"},on:{\"click\":_vm.expandHeight}},[_vm._v(\" mdi-arrow-expand-vertical \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullHeight),expression:\"fullHeight\"}]},[_vm._v(\" Collapse Height \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullHeight),expression:\"!fullHeight\"}]},[_vm._v(\" Expand Height \")])])],1),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}],attrs:{\"data-test\":\"minimize-screen-icon\"},on:{\"click\":_vm.minMaxTransition}},[_vm._v(\" mdi-window-minimize \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.expand),expression:\"!expand\"}],attrs:{\"data-test\":\"maximize-screen-icon\"},on:{\"click\":_vm.minMaxTransition}},[_vm._v(\" mdi-window-maximize \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_vm._v(\" Minimize \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.expand),expression:\"!expand\"}]},[_vm._v(\" Maximize \")])]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"close-graph-icon\"},on:{\"click\":function($event){return _vm.$emit('close-graph')}}},[_vm._v(\" mdi-close-box \")])],1)]}}])},[_c('span',[_vm._v(\" Close \")])])],1),_c('v-expand-transition',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}],ref:\"chart\",staticClass:\"pa-1\",attrs:{\"id\":\"chart\"}},[_c('div',{attrs:{\"id\":(\"chart\" + _vm.id)}}),_c('div',{attrs:{\"id\":\"betweenCharts\"}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hideOverview),expression:\"!hideOverview\"}],attrs:{\"id\":(\"overview\" + _vm.id)}})])])],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.$emit('input')},\"input\":function($event){return _vm.editGraphClose()}},model:{value:(_vm.editGraph),callback:function ($$v) {_vm.editGraph=$$v},expression:\"editGraph\"}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Edit Graph\")]),_c('v-spacer')],1),_c('v-card',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{staticClass:\"pb-2\",attrs:{\"label\":\"Title\",\"hide-details\":\"\",\"data-test\":\"edit-graph-title\"},model:{value:(_vm.title),callback:function ($$v) {_vm.title=$$v},expression:\"title\"}})],1),_c('v-card-text',{staticClass:\"pa-0\"},[_vm._v(\" Select a start date/time for the graph. Leave blank for start now. \")]),_c('date-time-chooser',{attrs:{\"required\":false,\"date-label\":\"Start Date\",\"time-label\":\"Start Time\"},on:{\"date-time\":function($event){_vm.graphStartDateTime = $event}}}),_c('v-card-text',{staticClass:\"pa-0\"},[_vm._v(\" Select a end date/time for the graph. Leave blank for continuous real-time graphing. \")]),_c('date-time-chooser',{attrs:{\"date-label\":\"End Date\",\"time-label\":\"End Time\"},on:{\"date-time\":function($event){_vm.graphEndDateTime = $event}}}),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-select',{attrs:{\"label\":\"Legend Position\",\"items\":_vm.legendPositions,\"data-test\":\"edit-legend-position\"},model:{value:(_vm.legendPosition),callback:function ($$v) {_vm.legendPosition=$$v},expression:\"legendPosition\"}})],1),_c('v-card-text',{staticClass:\"pa-0\"},[_vm._v(\" Optional Y axis settings. \")]),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"px-2\"},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"label\":\"Min Y\",\"type\":\"number\",\"data-test\":\"graph-min-y\"},model:{value:(_vm.graphMinY),callback:function ($$v) {_vm.graphMinY=$$v},expression:\"graphMinY\"}})],1),_c('v-col',{staticClass:\"px-2\"},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"label\":\"Max Y\",\"type\":\"number\",\"data-test\":\"graph-max-y\"},model:{value:(_vm.graphMaxY),callback:function ($$v) {_vm.graphMaxY=$$v},expression:\"graphMaxY\"}})],1)],1),_c('v-data-table',{staticClass:\"elevation-1 my-2\",attrs:{\"item-key\":\"itemId\",\"headers\":_vm.itemHeaders,\"items\":_vm.editItems,\"items-per-page\":5,\"footer-props\":{\n 'items-per-page-options': [5],\n }},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\n var item = ref.item;\nreturn [_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-btn',{attrs:{\"icon\":\"\",\"data-test\":(\"delete-item-icon\" + (item.itemId))},on:{\"click\":function () { return _vm.removeItems([item]); }}},[_c('v-icon',[_vm._v(\"mdi-delete\")])],1)],1)]}}],null,true)},[_c('span',[_vm._v(\"Remove\")])])]}},{key:\"no-data\",fn:function(){return [_c('span',[_vm._v(\"Currently no items on this graph\")])]},proxy:true}])}),_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.editGraphClose()}}},[_vm._v(\" Ok \")])],1)],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.errorDialog),callback:function ($$v) {_vm.errorDialog=$$v},expression:\"errorDialog\"}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Errors\")]),_c('v-spacer')],1),_c('v-card',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{staticClass:\"pb-2\",attrs:{\"readonly\":\"\",\"hide-details\":\"\",\"label\":\"Graph Title\"},model:{value:(_vm.title),callback:function ($$v) {_vm.title=$$v},expression:\"title\"}})],1),_c('v-row',{staticClass:\"my-3\"},[_c('v-textarea',{attrs:{\"readonly\":\"\",\"rows\":\"8\",\"value\":_vm.error}})],1),_c('v-row',[_c('v-btn',{attrs:{\"block\":\"\"},on:{\"click\":_vm.clearErrors}},[_vm._v(\" Clear \")])],1)],1)],1),(_vm.editGraphMenu)?_c('v-menu',{attrs:{\"position-x\":_vm.editGraphMenuX,\"position-y\":_vm.editGraphMenuY,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.editGraphMenu),callback:function ($$v) {_vm.editGraphMenu=$$v},expression:\"editGraphMenu\"}},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){_vm.editGraph = true}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\" Edit \"+_vm._s(_vm.title)+\" \")])],1)],1)],1):_vm._e(),(_vm.editItem)?_c('v-dialog',{attrs:{\"max-width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }_vm.editItem = false}},model:{value:(_vm.editItem),callback:function ($$v) {_vm.editItem=$$v},expression:\"editItem\"}},[_c('v-card',{staticClass:\"pa-3\"},[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(\"Edit Item\")]),_c('v-select',{attrs:{\"outlined\":\"\",\"hide-details\":\"\",\"label\":\"Value Type\",\"items\":_vm.valueTypes},model:{value:(_vm.currentType),callback:function ($$v) {_vm.currentType=$$v},expression:\"currentType\"}}),_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.closeEditItem()}}},[_vm._v(\"Ok\")])],1)],1)],1):_vm._e(),(_vm.itemMenu)?_c('v-menu',{attrs:{\"position-x\":_vm.itemMenuX,\"position-y\":_vm.itemMenuY,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.itemMenu),callback:function ($$v) {_vm.itemMenu=$$v},expression:\"itemMenu\"}},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){return _vm.openEditItem()}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\" Edit \"+_vm._s(_vm.selectedItem.itemName)+\" \")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.removeItems([_vm.selectedItem])}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\" Delete \"+_vm._s(_vm.selectedItem.itemName)+\" \")])],1)],1)],1):_vm._e(),(_vm.legendMenu)?_c('v-menu',{attrs:{\"position-x\":_vm.legendMenuX,\"position-y\":_vm.legendMenuY,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.legendMenu),callback:function ($$v) {_vm.legendMenu=$$v},expression:\"legendMenu\"}},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){return _vm.moveLegend('top')}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\"Legend Top\")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.moveLegend('bottom')}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\"Legend Bottom\")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.moveLegend('left')}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\"Legend Left\")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.moveLegend('right')}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\"Legend RIght\")])],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-row',[_c('v-col',[_c('v-menu',{attrs:{\"close-on-content-click\":\"\",\"transition\":\"scale-transition\",\"offset-y\":\"\",\"max-width\":\"290px\",\"min-width\":\"290px\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-text-field',_vm._g({attrs:{\"label\":_vm.dateLabel,\"name\":(\"date\" + (Date.now())),\"rules\":_vm.dateRules,\"type\":\"date\",\"data-test\":\"date-chooser\"},model:{value:(_vm.date),callback:function ($$v) {_vm.date=$$v},expression:\"date\"}},on))]}}])})],1),_c('v-col',[_c('v-text-field',{attrs:{\"label\":_vm.timeLabel,\"name\":(\"time\" + (Date.now())),\"rules\":_vm.timeRules,\"type\":\"time\",\"step\":\"1\",\"data-test\":\"time-chooser\"},on:{\"change\":_vm.onChange},model:{value:(_vm.time),callback:function ($$v) {_vm.time=$$v},expression:\"time\"}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=00fd3b2e&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n-->\n\n<template>\n <div>\n <v-card @click.native=\"$emit('click')\">\n <v-system-bar\n :class=\"selectedGraphId === id ? 'active' : 'inactive'\"\n v-show=\"!hideSystemBar\"\n >\n <div v-show=\"errors.length !== 0\" class=\"mx-2\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"error-graph-icon\" @click=\"errorDialog = true\"\n >mdi-alert</v-icon\n >\n </div>\n </template>\n <span>Errors</span>\n </v-tooltip>\n </div>\n\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"edit-graph-icon\" @click=\"editGraph = true\">\n mdi-pencil\n </v-icon>\n </div>\n </template>\n <span> Edit </span>\n </v-tooltip>\n\n <v-spacer />\n <span>{{ title }}</span>\n <v-spacer />\n\n <div v-show=\"expand\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"collapse-all\"\n v-show=\"calcFullSize\"\n @click=\"collapseAll\"\n >\n mdi-arrow-collapse\n </v-icon>\n <v-icon\n data-test=\"expand-all\"\n v-show=\"!calcFullSize\"\n @click=\"expandAll\"\n >\n mdi-arrow-expand\n </v-icon>\n </div>\n </template>\n <span v-show=\"calcFullSize\"> Collapse </span>\n <span v-show=\"!calcFullSize\"> Expand </span>\n </v-tooltip>\n </div>\n\n <div v-show=\"expand\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"collapse-width\"\n v-show=\"fullWidth\"\n @click=\"collapseWidth\"\n >\n mdi-arrow-collapse-horizontal\n </v-icon>\n <v-icon\n data-test=\"expand-width\"\n v-show=\"!fullWidth\"\n @click=\"expandWidth\"\n >\n mdi-arrow-expand-horizontal\n </v-icon>\n </div>\n </template>\n <span v-show=\"fullWidth\"> Collapse Width </span>\n <span v-show=\"!fullWidth\"> Expand Width </span>\n </v-tooltip>\n </div>\n\n <div v-show=\"expand\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"collapse-height\"\n v-show=\"fullHeight\"\n @click=\"collapseHeight\"\n >\n mdi-arrow-collapse-vertical\n </v-icon>\n <v-icon\n data-test=\"expand-height\"\n v-show=\"!fullHeight\"\n @click=\"expandHeight\"\n >\n mdi-arrow-expand-vertical\n </v-icon>\n </div>\n </template>\n <span v-show=\"fullHeight\"> Collapse Height </span>\n <span v-show=\"!fullHeight\"> Expand Height </span>\n </v-tooltip>\n </div>\n\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"expand\"\n >\n mdi-window-minimize\n </v-icon>\n <v-icon\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"!expand\"\n >\n mdi-window-maximize\n </v-icon>\n </div>\n </template>\n <span v-show=\"expand\"> Minimize </span>\n <span v-show=\"!expand\"> Maximize </span>\n </v-tooltip>\n\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"close-graph-icon\"\n @click=\"$emit('close-graph')\"\n >\n mdi-close-box\n </v-icon>\n </div>\n </template>\n <span> Close </span>\n </v-tooltip>\n </v-system-bar>\n\n <v-expand-transition>\n <div class=\"pa-1\" id=\"chart\" ref=\"chart\" v-show=\"expand\">\n <div :id=\"`chart${id}`\"></div>\n <div id=\"betweenCharts\" />\n <div :id=\"`overview${id}`\" v-show=\"!hideOverview\"></div>\n </div>\n </v-expand-transition>\n </v-card>\n\n <!-- Edit dialog -->\n <v-dialog\n v-model=\"editGraph\"\n @keydown.esc=\"$emit('input')\"\n @input=\"editGraphClose()\"\n max-width=\"600\"\n >\n <v-system-bar>\n <v-spacer />\n <span>Edit Graph</span>\n <v-spacer />\n </v-system-bar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n class=\"pb-2\"\n label=\"Title\"\n v-model=\"title\"\n hide-details\n data-test=\"edit-graph-title\"\n />\n </v-row>\n <v-card-text class=\"pa-0\">\n Select a start date/time for the graph. Leave blank for start now.\n </v-card-text>\n <date-time-chooser\n :required=\"false\"\n date-label=\"Start Date\"\n time-label=\"Start Time\"\n @date-time=\"graphStartDateTime = $event\"\n />\n <v-card-text class=\"pa-0\">\n Select a end date/time for the graph. Leave blank for continuous\n real-time graphing.\n </v-card-text>\n <date-time-chooser\n date-label=\"End Date\"\n time-label=\"End Time\"\n @date-time=\"graphEndDateTime = $event\"\n />\n <v-row dense>\n <v-select\n label=\"Legend Position\"\n :items=\"legendPositions\"\n v-model=\"legendPosition\"\n data-test=\"edit-legend-position\"\n />\n </v-row>\n <v-card-text class=\"pa-0\"> Optional Y axis settings. </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n hide-details\n label=\"Min Y\"\n v-model=\"graphMinY\"\n type=\"number\"\n data-test=\"graph-min-y\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n hide-details\n label=\"Max Y\"\n v-model=\"graphMaxY\"\n type=\"number\"\n data-test=\"graph-max-y\"\n />\n </v-col>\n </v-row>\n <v-data-table\n item-key=\"itemId\"\n class=\"elevation-1 my-2\"\n :headers=\"itemHeaders\"\n :items=\"editItems\"\n :items-per-page=\"5\"\n :footer-props=\"{\n 'items-per-page-options': [5],\n }\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-btn\n icon\n :data-test=\"`delete-item-icon${item.itemId}`\"\n @click=\"() => removeItems([item])\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\n </div>\n </template>\n <span>Remove</span>\n </v-tooltip>\n </template>\n <template v-slot:no-data>\n <span>Currently no items on this graph</span>\n </template>\n </v-data-table>\n <v-card-actions>\n <v-btn color=\"primary\" @click=\"editGraphClose()\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" max-width=\"600\">\n <v-system-bar>\n <v-spacer />\n <span>Errors</span>\n <v-spacer />\n </v-system-bar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n readonly\n hide-details\n v-model=\"title\"\n class=\"pb-2\"\n label=\"Graph Title\"\n />\n </v-row>\n <v-row class=\"my-3\">\n <v-textarea readonly rows=\"8\" :value=\"error\" />\n </v-row>\n <v-row>\n <v-btn block @click=\"clearErrors\"> Clear </v-btn>\n </v-row>\n </v-card>\n </v-dialog>\n\n <!-- Edit right click context menu -->\n <v-menu\n v-if=\"editGraphMenu\"\n v-model=\"editGraphMenu\"\n :position-x=\"editGraphMenuX\"\n :position-y=\"editGraphMenuY\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"editGraph = true\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ title }}\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <!-- Edit Item dialog -->\n <v-dialog\n max-width=\"600\"\n v-if=\"editItem\"\n v-model=\"editItem\"\n @keydown.esc=\"editItem = false\"\n >\n <v-card class=\"pa-3\">\n <v-card-title class=\"headline\">Edit Item</v-card-title>\n <v-select\n outlined\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n v-model=\"currentType\"\n />\n <v-card-actions>\n <v-btn color=\"primary\" @click=\"closeEditItem()\">Ok</v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n\n <!-- Edit Item right click context menu -->\n <v-menu\n v-if=\"itemMenu\"\n v-model=\"itemMenu\"\n :position-x=\"itemMenuX\"\n :position-y=\"itemMenuY\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"openEditItem()\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ selectedItem.itemName }}\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"removeItems([selectedItem])\">\n <v-list-item-title style=\"cursor: pointer\">\n Delete {{ selectedItem.itemName }}\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <!-- Edit Legend right click context menu -->\n <v-menu\n v-if=\"legendMenu\"\n v-model=\"legendMenu\"\n :position-x=\"legendMenuX\"\n :position-y=\"legendMenuY\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"moveLegend('top')\">\n <v-list-item-title style=\"cursor: pointer\"\n >Legend Top</v-list-item-title\n >\n </v-list-item>\n <v-list-item @click=\"moveLegend('bottom')\">\n <v-list-item-title style=\"cursor: pointer\"\n >Legend Bottom</v-list-item-title\n >\n </v-list-item>\n <v-list-item @click=\"moveLegend('left')\">\n <v-list-item-title style=\"cursor: pointer\"\n >Legend Left</v-list-item-title\n >\n </v-list-item>\n <v-list-item @click=\"moveLegend('right')\">\n <v-list-item-title style=\"cursor: pointer\"\n >Legend RIght</v-list-item-title\n >\n </v-list-item>\n </v-list>\n </v-menu>\n </div>\n</template>\n\n<script>\nimport DateTimeChooser from './DateTimeChooser'\nimport uPlot from 'uplot'\nimport bs from 'binary-search'\nimport { toDate, format, getTime } from 'date-fns'\nimport Cable from '../services/cable.js'\n\nrequire('uplot/dist/uPlot.min.css')\n\nexport default {\n components: {\n DateTimeChooser,\n },\n props: {\n id: {\n type: Number,\n required: true,\n },\n selectedGraphId: {\n type: Number,\n // Not required because we pass null\n },\n state: {\n type: String,\n required: true,\n },\n // start time in nanoseconds to start the graph\n // this allows multiple graphs to be synchronized\n startTime: {\n type: Number,\n },\n secondsGraphed: {\n type: Number,\n required: true,\n },\n pointsSaved: {\n type: Number,\n required: true,\n },\n pointsGraphed: {\n type: Number,\n required: true,\n },\n hideSystemBar: {\n type: Boolean,\n default: false,\n },\n hideOverview: {\n type: Boolean,\n default: false,\n },\n initialItems: {\n type: Array,\n },\n // These allow the parent to force a specific height and/or width\n height: {\n type: Number,\n },\n width: {\n type: Number,\n },\n },\n data() {\n return {\n itemHeaders: [\n { text: 'Target Name', value: 'targetName' },\n { text: 'Packet Name', value: 'packetName' },\n { text: 'Item Name', value: 'itemName' },\n { text: 'Actions', value: 'actions', sortable: false },\n ],\n valueTypes: ['CONVERTED', 'RAW'],\n active: true,\n expand: true,\n fullWidth: true,\n fullHeight: true,\n graph: null,\n editGraph: false,\n editGraphMenu: false,\n editGraphMenuX: 0,\n editGraphMenuY: 0,\n editItem: false,\n itemMenu: false,\n itemMenuX: 0,\n itemMenuY: 0,\n legendMenu: false,\n legendMenuX: 0,\n legendMenuY: 0,\n legendPosition: 'bottom',\n legendPositions: ['top', 'bottom', 'left', 'right'],\n selectedItem: null,\n currentType: null,\n title: '',\n overview: null,\n data: [[]],\n graphMinY: '',\n graphMaxY: '',\n graphStartDateTime: this.startTime,\n graphEndDateTime: null,\n indexes: {},\n items: this.initialItems || [],\n drawInterval: null,\n zoomChart: false,\n zoomOverview: false,\n cable: new Cable(),\n subscription: null,\n needToUpdate: false,\n errorDialog: false,\n errors: [],\n colors: [\n 'blue',\n 'red',\n 'green',\n 'darkorange',\n 'purple',\n 'cornflowerblue',\n 'lime',\n 'gold',\n 'hotpink',\n 'tan',\n 'cyan',\n 'peru',\n 'maroon',\n 'coral',\n 'navy',\n 'teal',\n 'brown',\n 'crimson',\n 'lightblue',\n 'black',\n ],\n }\n },\n computed: {\n calcFullSize: function () {\n return this.fullWidth || this.fullHeight\n },\n editItems: function () {\n if (!this.items) return []\n let itemId = 0\n return this.items.map((item) => {\n itemId += 1\n return { ...item, itemId }\n })\n },\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n return JSON.stringify(this.errors, null, 4)\n }\n return null\n },\n },\n created() {\n this.title = `Graph ${this.id}`\n for (const [index, item] of this.items.entries()) {\n this.data.push([]) // initialize the empty data arrays\n this.indexes[this.subscriptionKey(item)] = index + 1\n }\n },\n mounted() {\n // This code allows for temporary pulling in a patched uPlot\n // Also note you need to add 'async' before the mounted method for await\n // const plugin = document.createElement('script')\n // plugin.setAttribute(\n // 'src',\n // 'https://leeoniya.github.io/uPlot/dist/uPlot.iife.min.js'\n // )\n // plugin.async = true\n // document.head.appendChild(plugin)\n // await new Promise(r => setTimeout(r, 500)) // Allow the js to load\n\n // TODO: This is demo / performance code of multiple items with many data points\n // 10 items at 500,000 each renders immediately and uses 180MB in Chrome\n // Refresh still works, chrome is sluggish but once you pause it is very performant\n // 500,000 pts at 1Hz is 138.9hrs .. almost 6 days\n //\n // 10 items at 100,000 each is very performant ... 1,000,000 pts is Qt TlmGrapher default\n // 100,000 pts at 1Hz is 27.8hrs\n //\n // 100,000 takes 40ms, Chrome uses 160MB\n // this.data = []\n // const dataPoints = 100000\n // const items = 10\n // let pts = new Array(dataPoints)\n // let times = new Array(dataPoints)\n // let time = 1589398007\n // let series = [{}]\n // for (let i = 0; i < dataPoints; i++) {\n // times[i] = time\n // pts[i] = i\n // time += 1\n // }\n // this.data.push(times)\n // for (let i = 0; i < items; i++) {\n // this.data.push(pts.map(x => x + i))\n // series.push({\n // label: 'Item' + i,\n // stroke: this.colors[i]\n // })\n // }\n\n const { chartSeries, overviewSeries } = this.items.reduce(\n (seriesObj, item) => {\n const commonProps = {\n spanGaps: true,\n stroke: this.colors.shift(),\n }\n seriesObj.chartSeries.push({\n ...commonProps,\n item: item,\n label: item.itemName,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else {\n return rawValue == null ? '--' : rawValue.toFixed(2)\n }\n },\n })\n seriesObj.overviewSeries.push({\n ...commonProps,\n })\n return seriesObj\n },\n { chartSeries: [], overviewSeries: [] }\n )\n\n let chartOpts = {\n ...this.getSize('chart'),\n ...this.getScales(),\n ...this.getAxes('chart'),\n // series: series, // TODO: Uncomment with the performance code\n series: [\n {\n label: 'Time',\n value: (u, v) =>\n // Convert the unix timestamp into a formatted date / time\n v == null ? '--' : format(toDate(v * 1000), 'yyyy-MM-dd HH:mm:ss'),\n },\n ...chartSeries,\n ],\n cursor: {\n drag: {\n x: true,\n y: false,\n },\n // Sync the cursor across graphs so mouseovers are synced\n sync: {\n key: 'openc3',\n // setSeries links graphs so clicking an item to hide it also hides the other graph item\n // setSeries: true,\n },\n },\n hooks: {\n setScale: [\n (chart, key) => {\n if (key == 'x' && !this.zoomOverview && this.overview) {\n this.zoomChart = true\n let left = Math.round(\n this.overview.valToPos(chart.scales.x.min, 'x')\n )\n let right = Math.round(\n this.overview.valToPos(chart.scales.x.max, 'x')\n )\n this.overview.setSelect({ left, width: right - left })\n this.zoomChart = false\n }\n },\n ],\n ready: [\n (u) => {\n let canvas = u.root.querySelector('.u-over')\n canvas.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.itemMenu = false\n this.legendMenu = false\n this.editGraphMenuX = e.clientX\n this.editGraphMenuY = e.clientY\n this.editGraphMenu = true\n })\n // Tell TlmGrapher that you might need to resize since on mouseenter\n // we start showing value popups and the graph can expand\n canvas.addEventListener('mouseenter', (e) => {\n this.$emit('resize')\n })\n canvas.addEventListener('mouseleave', (e) => {\n this.$emit('resize')\n })\n let legend = u.root.querySelector('.u-legend')\n legend.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.editGraphMenu = false\n this.legendMenu = false\n this.itemMenuX = e.clientX\n this.itemMenuY = e.clientY\n // Grab the closest series and then figure out which index it is\n let seriesEl = e.target.closest('.u-series')\n let seriesIdx = Array.prototype.slice\n .call(legend.childNodes)\n .indexOf(seriesEl)\n let series = u.series[seriesIdx]\n if (series.item) {\n this.selectedItem = series.item\n this.itemMenu = true\n } else {\n this.itemMenu = false\n this.legendMenuX = e.clientX\n this.legendMenuY = e.clientY\n this.legendMenu = true\n }\n })\n },\n ],\n },\n }\n // console.time('chart')\n this.graph = new uPlot(\n chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`)\n )\n\n const overviewOpts = {\n ...this.getSize('overview'),\n ...this.getScales(),\n ...this.getAxes('overview'),\n // series: series, // TODO: Uncomment with the performance code\n series: [...overviewSeries],\n cursor: {\n y: false,\n points: {\n show: false, // TODO: This isn't working\n },\n drag: {\n setScale: false,\n x: true,\n y: false,\n },\n },\n legend: {\n show: false,\n },\n hooks: {\n setSelect: [\n (chart) => {\n if (!this.zoomChart) {\n this.zoomOverview = true\n let min = chart.posToVal(chart.select.left, 'x')\n let max = chart.posToVal(\n chart.select.left + chart.select.width,\n 'x'\n )\n this.graph.setScale('x', { min, max })\n this.zoomOverview = false\n }\n },\n ],\n },\n }\n this.overview = new uPlot(\n overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`)\n )\n //console.timeEnd('chart')\n this.moveLegend(this.legendPosition)\n\n // Allow the charts to dynamically resize when the window resizes\n window.addEventListener('resize', this.handleResize)\n\n if (this.state !== 'stop') {\n this.subscribe()\n }\n },\n beforeDestroy: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.cable.disconnect()\n window.removeEventListener('resize', this.handleResize)\n },\n watch: {\n state: function (newState, oldState) {\n switch (newState) {\n case 'start':\n // Only subscribe if we were previously stopped\n // If we were paused we do nothing ... see the data function\n if (oldState === 'stop') {\n this.subscribe()\n }\n break\n // case 'pause': Nothing to do ... see the data function\n case 'stop':\n this.subscription.unsubscribe()\n this.subscription = null\n break\n }\n },\n data: function (newData, oldData) {\n // Ignore changes to the data while we're paused\n if (this.state === 'pause') {\n return\n }\n this.graph.setData(newData)\n this.overview.setData(newData)\n let max = newData[0][newData[0].length - 1]\n let ptsMin = newData[0][newData[0].length - this.pointsGraphed]\n let min = newData[0][0]\n if (min < max - this.secondsGraphed) {\n min = max - this.secondsGraphed\n }\n if (ptsMin > min) {\n min = ptsMin\n }\n this.graph.setScale('x', { min, max })\n },\n graphMinY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMinY = val\n }\n this.setGraphRange()\n },\n graphMaxY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMaxY = val\n }\n this.setGraphRange()\n },\n graphStartDateTime: function (val) {\n this.needToUpdate = true\n if (val && typeof val === 'string') {\n this.graphStartDateTime =\n new Date(this.graphStartDateTime).getTime() * 1_000_000\n }\n },\n graphEndDateTime: function (val) {\n this.needToUpdate = true\n if (val && typeof val === 'string') {\n this.graphEndDateTime =\n new Date(this.graphEndDateTime).getTime() * 1_000_000\n }\n },\n },\n methods: {\n moveLegend: function (desired) {\n switch (desired) {\n case 'bottom':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.remove('top-legend')\n break\n case 'top':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('top-legend')\n break\n case 'left':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.add('side-legend')\n this.graph.root.classList.add('left-legend')\n break\n case 'right':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('side-legend')\n break\n }\n this.legendPosition = desired\n this.resize()\n },\n clearErrors: function () {\n this.errors = []\n },\n editGraphClose: function () {\n this.editGraph = false\n if (this.needToUpdate) {\n this.removeItemsFromSubscription()\n this.addItemsToSubscription()\n this.needToUpdate = false\n }\n this.moveLegend(this.legendPosition)\n },\n handleResize: function () {\n // TODO: Should this method be throttled?\n this.graph.setSize(this.getSize('chart'))\n this.overview.setSize(this.getSize('overview'))\n },\n resize: function () {\n this.graph.setSize(this.getSize('chart'))\n this.overview.setSize(this.getSize('overview'))\n this.$emit('resize', this.id)\n },\n expandAll: function () {\n this.fullWidth = true\n this.fullHeight = true\n this.resize()\n },\n collapseAll: function () {\n this.fullWidth = false\n this.fullHeight = false\n this.resize()\n },\n expandWidth: function () {\n this.fullWidth = true\n this.resize()\n },\n collapseWidth: function () {\n this.fullWidth = false\n this.resize()\n },\n expandHeight: function () {\n this.fullHeight = true\n this.resize()\n },\n collapseHeight: function () {\n this.fullHeight = false\n this.resize()\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-graph', this.id)\n },\n setGraphRange: function () {\n let pad = 0.1\n if (\n this.graphMinY ||\n this.graphMinY === 0 ||\n this.graphMaxY ||\n this.graphMaxY === 0\n ) {\n pad = 0\n }\n this.graph.scales.y.range = (u, dataMin, dataMax) => {\n let min = dataMin\n if (this.graphMinY || this.graphMinY === 0) {\n min = this.graphMinY\n }\n let max = dataMax\n if (this.graphMaxY || this.graphMaxY === 0) {\n max = this.graphMaxY\n }\n return uPlot.rangeNum(min, max, pad, true)\n }\n },\n subscribe: function (endTime = null) {\n this.cable\n .createSubscription('StreamingChannel', localStorage.scope, {\n received: (data) => this.received(data),\n connected: () => {\n this.addItemsToSubscription(this.items, endTime)\n },\n disconnected: () => {\n this.errors.push({\n type: 'disconnected',\n message: 'OpenC3 backend connection disconnected',\n time: new Date().getTime(),\n })\n },\n rejected: () => {\n this.errors.push({\n type: 'rejected',\n message: 'OpenC3 backend connection rejected',\n time: new Date().getTime(),\n })\n },\n })\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n // throttle(cb, limit) {\n // 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('openc3-nav-drawer')\n const navDrawerWidth = navDrawer.classList.contains(\n 'v-navigation-drawer--open'\n )\n ? navDrawer.clientWidth\n : 0\n\n let legendWidth = 0\n if (this.legendPosition === 'right' || this.legendPosition === 'left') {\n const legend = document.getElementsByClassName('u-legend')[0]\n legendWidth = legend.clientWidth\n }\n const viewWidth =\n Math.max(document.documentElement.clientWidth, window.innerWidth || 0) -\n navDrawerWidth -\n legendWidth\n const viewHeight = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n )\n\n const chooser = document.getElementsByClassName('c-chooser')[0]\n let height = 100\n if (type === 'overview') {\n // Hide overview if we're NOT full height\n this.hideOverview = !this.fullHeight\n } else if (chooser) {\n // Height of chart is viewportSize - chooser - overview - fudge factor (primarily padding)\n height = viewHeight - chooser.clientHeight - height - 190\n if (!this.fullHeight) {\n height = height / 2.0 + 10 // 5px padding top and bottom\n }\n }\n let width = viewWidth - 60 // 30px padding left and right\n if (!this.fullWidth) {\n width = width / 2.0 - 10 // 5px padding left and right\n }\n return {\n width: this.width || width,\n height: this.height || height,\n }\n },\n getScales: function () {\n return {\n scales: {\n x: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [1566453600, 1566497660]\n return [dataMin, dataMax]\n },\n },\n y: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [-100, 100]\n return uPlot.rangeNum(dataMin, dataMax, 0.1, true)\n },\n },\n },\n }\n },\n getAxes: function (type) {\n let strokeColor = 'rgba(0, 0, 0, .1)'\n let axisColor = 'black'\n if (this.$vuetify.theme.dark) {\n strokeColor = 'rgba(255, 255, 255, .1)'\n axisColor = 'white'\n }\n return {\n axes: [\n {\n stroke: axisColor,\n grid: {\n show: true,\n stroke: strokeColor,\n width: 2,\n },\n },\n {\n size: 70, // This size supports values up to 99 million\n stroke: axisColor,\n grid: {\n show: type === 'overview' ? false : true,\n stroke: strokeColor,\n width: 2,\n },\n },\n ],\n }\n },\n openEditItem: function () {\n this.currentType = this.selectedItem.valueType\n this.editItem = true\n },\n closeEditItem: function () {\n this.editItem = false\n // Only change if the type was changed\n if (this.selectedItem.valueType !== this.currentType) {\n this.changeType()\n }\n },\n changeType: function () {\n this.removeItems([this.selectedItem])\n this.selectedItem.valueType = this.currentType\n this.addItems([this.selectedItem])\n },\n addItems: function (itemArray, type = 'CONVERTED') {\n for (const item of itemArray) {\n item.valueType ||= type // set the default type\n this.items.push(item)\n const index = this.data.length\n const color = this.colors.shift()\n this.graph.addSeries(\n {\n spanGaps: true,\n item: item,\n label: item.itemName,\n stroke: color,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else {\n return rawValue === null ? '--' : rawValue.toFixed(2)\n }\n },\n },\n index\n )\n this.overview.addSeries({ spanGaps: true, stroke: color }, index)\n let newData = Array(this.data[0].length)\n this.data.splice(index, 0, newData)\n this.indexes[this.subscriptionKey(item)] = index\n }\n this.addItemsToSubscription(itemArray)\n },\n addItemsToSubscription: function (\n itemArray = this.items,\n endTime = this.graphEndDateTime\n ) {\n if (this.subscription) {\n OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(() => {\n this.subscription.perform('add', {\n scope: localStorage.scope,\n mode: 'DECOM',\n token: localStorage.openc3Token,\n items: itemArray.map(this.subscriptionKey),\n start_time: this.graphStartDateTime,\n end_time: endTime,\n })\n })\n }\n },\n removeItems: function (itemArray) {\n this.removeItemsFromSubscription(itemArray)\n\n for (const key of itemArray.map(this.subscriptionKey)) {\n const index = this.reorderIndexes(key)\n // Put back the color so it's available for new series\n this.colors.unshift(this.graph.series[index].stroke)\n this.items.splice(index - 1, 1)\n this.data.splice(index, 1)\n this.graph.delSeries(index)\n this.overview.delSeries(index)\n this.graph.setData(this.data)\n this.overview.setData(this.data)\n }\n },\n removeItemsFromSubscription: function (itemArray = this.items) {\n if (this.subscription) {\n this.subscription.perform('remove', {\n scope: localStorage.scope,\n items: itemArray.map(this.subscriptionKey),\n })\n }\n },\n reorderIndexes: function (key) {\n let index = this.indexes[key]\n delete this.indexes[key]\n for (var i in this.indexes) {\n if (this.indexes[i] > index) {\n this.indexes[i] -= 1\n }\n }\n return index\n },\n received: function (json_data) {\n // TODO: Shouldn't get errors but should we handle this every time?\n // if (json_data.error) {\n // console.log(json_data.error)\n // return\n // }\n let data = JSON.parse(json_data)\n for (let i = 0; i < data.length; i++) {\n let time = data[i].time / 1_000_000_000.0 // Time in seconds\n let length = data[0].length\n if (length == 0 || time > data[0][length - 1]) {\n // Nominal case - append new data to end\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].push(null)\n }\n this.set_data_at_index(this.data[0].length - 1, time, data[i])\n } else {\n let index = bs(this.data[0], time, this.bs_comparator)\n if (index >= 0) {\n // Found the slot in the existing data\n this.set_data_at_index(index, time, data[i])\n } else {\n // Insert a new null slot at the ideal index\n let ideal_index = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(ideal_index, 0, null)\n }\n this.set_data_at_index(ideal_index, time, data[i])\n }\n }\n }\n // If we weren't passed a startTime notify grapher of our start\n if (this.startTime === null) {\n this.graphStartDateTime = this.data[0][0] * 1_000_000_000\n this.$emit('started', this.graphStartDateTime)\n }\n },\n bs_comparator: function (element, needle) {\n return element - needle\n },\n set_data_at_index: function (index, time, new_data) {\n this.data[0][index] = time\n for (const [key, value] of Object.entries(new_data)) {\n if (key == 'time') {\n continue\n }\n let key_index = this.indexes[key]\n if (key_index) {\n let array = this.data[key_index]\n // NaN and Infinite values are sent as objects with raw attribute set\n // to 'NaN', '-Infinity', or 'Infinity', just set data to null\n if (value.raw) {\n array[index] = null\n } else if (typeof value === 'string') {\n // Can't graph strings so just set to null\n array[index] = null\n // If it's not already RAW, change the type to RAW\n // NOTE: Some items are RAW strings so they won't ever work\n if (!key.includes('__RAW')) {\n for (let item of this.items) {\n if (this.subscriptionKey(item) === key) {\n this.selectedItem = item\n break\n }\n }\n this.currentType = 'RAW'\n this.changeType()\n }\n } else {\n array[index] = value\n }\n }\n }\n },\n subscriptionKey: function (item) {\n return `TLM__${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`\n },\n },\n}\n</script>\n\n<style>\n/* left right stacked legend */\n.uplot.side-legend {\n display: flex;\n width: auto;\n}\n.uplot.side-legend .u-wrap {\n flex: none;\n}\n.uplot.side-legend .u-legend {\n text-align: left;\n margin-left: 0;\n width: 220px;\n}\n.uplot.side-legend .u-legend,\n.uplot.side-legend .u-legend tr,\n.uplot.side-legend .u-legend th,\n.uplot.side-legend .u-legend td {\n display: revert;\n}\n/* left side we need to order the legend before the plot */\n.uplot.left-legend .u-legend {\n order: -1;\n}\n/* top legend */\n.uplot.top-legend {\n display: flex;\n flex-direction: column;\n}\n.uplot.top-legend .u-legend {\n order: -1;\n}\n</style>\n\n<style scoped>\n#chart {\n background-color: var(--v-tertiary-darken2);\n}\n/* TODO: Get this to work with white theme, values would be 0 in white */\n#chart >>> .u-select {\n background-color: rgba(255, 255, 255, 0.07);\n}\n/* This prevents the axis from responding to pointer-events.\n Necessary if we set overview height to 0 which makes it hidden but still present.\n However, we simply don't display the overview with v-show.\n See https://github.com/leeoniya/uPlot/issues/689\n#chart >>> .u-axis {\n pointer-events: none;\n} */\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.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.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=335d365e&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=335d365e&prod&lang=css&\"\nimport style1 from \"./Graph.vue?vue&type=style&index=1&id=335d365e&prod&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 \"335d365e\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=18277ddd&\"\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,\"line\":widget.line,\"lineNumber\":widget.lineNumber}},_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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 :line=\"widget.line\"\n :lineNumber=\"widget.lineNumber\"\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.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.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=16308cd8&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=60734572&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=1fc8c87a&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=17c75996&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=687f0825&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=687f0825&prod&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 \"687f0825\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=18764905&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=84630592&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=12ce0cd6&\"\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,\"line\":widget.line,\"lineNumber\":widget.lineNumber}},_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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 :line=\"widget.line\"\n :lineNumber=\"widget.lineNumber\"\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.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.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=ce470e88&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.openc3-green >>> input {\n color: rgb(0, 150, 0);\n}\n.openc3-yellow >>> input {\n color: rgb(190, 135, 0);\n}\n.openc3-red >>> input {\n color: red;\n}\n.openc3-blue >>> input {\n color: rgb(0, 100, 255);\n}\n.openc3-purple >>> input {\n color: rgb(200, 0, 200);\n}\n.openc3-black >>> input {\n color: black;\n}\n.openc3-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.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.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=2bc42f58&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=2bc42f58&prod&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 \"2bc42f58\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=53962dbe&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=eacf3134&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 created() {\n this.verifyNumParams('VALUE', 3, 3, 'VALUE <TARGET> <PACKET> <ITEM>')\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 openc3 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.openc3-green ::v-deep input {\n color: rgb(0, 150, 0);\n}\n.openc3-yellow ::v-deep input {\n color: rgb(190, 135, 0);\n}\n.openc3-red ::v-deep input {\n color: red;\n}\n.openc3-blue ::v-deep input {\n color: rgb(0, 100, 255);\n}\n.openc3-purple ::v-deep input {\n color: rgb(200, 0, 200);\n}\n.openc3-black ::v-deep input {\n color: black;\n}\n.openc3-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.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.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=61027b58&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=61027b58&prod&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 \"61027b58\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=ac89df2c&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=7a44169e&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=4270edd8&\"\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,\"line\":widget.line,\"lineNumber\":widget.lineNumber}},_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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 :line=\"widget.line\"\n :lineNumber=\"widget.lineNumber\"\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.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.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=0d35ed74&\"\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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.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.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=63de4b40&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=63de4b40&prod&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 \"63de4b40\",\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 mr-2\",attrs:{\"disabled\":!_vm.selectedScreen},on:{\"click\":function () { return _vm.showScreen(_vm.selectedTarget, _vm.selectedScreen); }}},[_vm._v(\" Show Screen \")]),_c('v-btn',{staticClass:\"primary\",on:{\"click\":function () { return _vm.newScreen(_vm.selectedTarget); }}},[_vm._v(\" New Screen \"),_c('v-icon',[_vm._v(\" mdi-file-plus\")])],1)],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('openc3-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); },\"delete-screen\":function($event){return _vm.deleteScreen(def.id)}}})],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(),(_vm.newScreenDialog)?_c('new-screen-dialog',{attrs:{\"screens\":_vm.screens},on:{\"success\":function($event){return _vm.saveNewScreen($event)}},model:{value:(_vm.newScreenDialog),callback:function ($$v) {_vm.newScreenDialog=$$v},expression:\"newScreenDialog\"}}):_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('mounting-portal',{attrs:{\"mount-to\":\"#openc3-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'):_c('v-list-item',{key:j,attrs:{\"disabled\":option.disabled,\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label) + \" \" + (option.label)))},on:{\"click\":option.command}},[(option.radio)?_c('v-list-item-action',[_c('v-radio',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label}})],1):_vm._e(),(option.checkbox)?_c('v-list-item-action',[_c('v-checkbox',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label},model:{value:(_vm.checked),callback:function ($$v) {_vm.checked=$$v},expression:\"checked\"}})],1):_vm._e(),(option.icon)?_c('v-list-item-icon',[_c('v-icon',{attrs:{\"disabled\":option.disabled}},[_vm._v(_vm._s(option.icon))])],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : ''))},[_vm._v(_vm._s(option.label))]):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',[_vm._v(_vm._s(_vm.title))]),_c('v-spacer')],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n-->\n\n<template>\n <mounting-portal mount-to=\"#openc3-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\" />\n <v-list-item\n v-else\n @click=\"option.command\"\n :disabled=\"option.disabled\"\n :data-test=\"formatDT(`${title} ${menu.label} ${option.label}`)\"\n :key=\"j\"\n >\n <v-list-item-action v-if=\"option.radio\">\n <v-radio\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-action v-if=\"option.checkbox\">\n <v-checkbox\n v-model=\"checked\"\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-icon v-if=\"option.icon\">\n <v-icon :disabled=\"option.disabled\">{{ option.icon }}</v-icon>\n </v-list-item-icon>\n <v-list-item-title\n v-if=\"!option.radio && !option.checkbox\"\n :style=\"\n 'cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')\n \"\n >{{ option.label }}</v-list-item-title\n >\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title>{{ title }}</v-toolbar-title>\n <v-spacer />\n </div>\n </mounting-portal>\n</template>\n\n<script>\nexport default {\n props: {\n menus: {\n type: Array,\n default: function () {\n return []\n },\n },\n title: {\n type: String,\n default: '',\n },\n },\n methods: {\n // Convert the string to a standard data-test format\n formatDT: function (string) {\n return string.replaceAll(' ', '-').toLowerCase()\n },\n },\n}\n</script>\n\n<style scoped>\n.v-list >>> .v-label {\n margin-left: 5px;\n}\n.v-list-item__icon {\n /* For some reason the default margin-right is huge */\n margin-right: 15px !important;\n}\n.v-list-item__title {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40.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.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=3237297b&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=3237297b&prod&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 \"3237297b\",\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-card',[_c('v-system-bar',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.errors.length !== 0),expression:\"errors.length !== 0\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"error-graph-icon\"},on:{\"click\":function($event){_vm.errorDialog = true}}},[_vm._v(\" mdi-alert \")])],1)]}}])},[_c('span',[_vm._v(\" Errors \")])])],1),_c('v-spacer'),_c('span',[_vm._v(_vm._s(_vm.target)+\" \"+_vm._s(_vm.screen))]),_c('v-spacer'),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"edit-screen-icon\"},on:{\"click\":_vm.openEdit}},[_vm._v(\" mdi-pencil \")])],1)]}}])},[_c('span',[_vm._v(\" Edit Screen \")])]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}],attrs:{\"data-test\":\"minimize-screen-icon\"},on:{\"click\":_vm.minMaxTransition}},[_vm._v(\" mdi-window-minimize \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.expand),expression:\"!expand\"}],attrs:{\"data-test\":\"maximize-screen-icon\"},on:{\"click\":_vm.minMaxTransition}},[_vm._v(\" mdi-window-maximize \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_vm._v(\" Minimize Screen \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.expand),expression:\"!expand\"}]},[_vm._v(\" Maximize Screen \")])]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"close-screen-icon\"},on:{\"click\":function($event){return _vm.$emit('close-screen')}}},[_vm._v(\" mdi-close-box \")])],1)]}}])},[_c('span',[_vm._v(\" Close Screen \")])])],1),_c('v-expand-transition',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}],ref:\"screen\",staticClass:\"pa-1\"},[_c('vertical-widget',_vm._g({key:_vm.screenKey,attrs:{\"widgets\":_vm.layoutStack[0].widgets}},_vm.$listeners))],1)])],1),(_vm.editDialog)?_c('edit-screen-dialog',{attrs:{\"target\":_vm.target,\"screen\":_vm.screen,\"definition\":_vm.currentDefinition,\"errors\":_vm.errors},on:{\"save\":function($event){return _vm.saveEdit($event)},\"cancel\":function($event){return _vm.cancelEdit()},\"delete\":function($event){return _vm.deleteScreen()}},model:{value:(_vm.editDialog),callback:function ($$v) {_vm.editDialog=$$v},expression:\"editDialog\"}}):_vm._e(),_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 }","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('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\":\"delete-screen-icon\"},on:{\"click\":_vm.deleteScreen}},[_vm._v(\" mdi-delete \")])],1)]}}])},[_c('span',[_vm._v(\" Delete Screen \")])])],1),_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),_vm._l((_vm.editErrors),function(error,index){return _c('v-row',{key:index,staticClass:\"my-3\"},[_c('span',{staticClass:\"red--text\",domProps:{\"textContent\":_vm._s(error)}})])}),_c('v-row',[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"outlined\":\"\",\"data-test\":\"editScreenCancelBtn\"},on:{\"click\":function($event){return _vm.$emit('cancel')}}},[_vm._v(\" Cancel \")]),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"color\":\"primary\",\"data-test\":\"editScreenSubmitBtn\"},on:{\"click\":function($event){return _vm.$emit('save', _vm.currentDefinition)}}},[_vm._v(\" Save \")])],1)],2)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n-->\n\n<template>\n <!-- Edit dialog -->\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <v-system-bar>\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 data-test=\"delete-screen-icon\" @click=\"deleteScreen\">\n mdi-delete\n </v-icon>\n </div>\n </template>\n <span> Delete Screen </span>\n </v-tooltip>\n </div>\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 <!-- TODO: Consider putting this in the Ace Editor for line number support -->\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 v-for=\"(error, index) in editErrors\" :key=\"index\" class=\"my-3\">\n <span class=\"red--text\" v-text=\"error\"></span>\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn\n @click=\"$emit('cancel')\"\n class=\"mx-2\"\n outlined\n data-test=\"editScreenCancelBtn\"\n >\n Cancel\n </v-btn>\n <v-btn\n @click=\"$emit('save', currentDefinition)\"\n class=\"mx-2\"\n color=\"primary\"\n data-test=\"editScreenSubmitBtn\"\n >\n Save\n </v-btn>\n </v-row>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nexport default {\n props: {\n value: Boolean, // value is the default prop when using v-model\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 errors: {\n type: Array,\n default: () => [],\n },\n },\n data() {\n return {\n rules: {\n required: (value) => !!value || 'Required',\n },\n currentDefinition: this.definition,\n file: null,\n loadingFile: Boolean,\n }\n },\n computed: {\n editErrors: function () {\n if (this.definition === '' && !this.file) {\n return ['Input can not be blank.']\n }\n if (this.errors.length !== 0) {\n let result = []\n for (const error of this.errors) {\n let msg = `At ${error.lineNumber}: (${error.line}) ${error.message}.`\n if (error.usage) {\n msg += ` Usage: ${error.usage}`\n }\n result.push(msg)\n }\n return result\n }\n return []\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 methods: {\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 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 deleteScreen: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete this screen?!`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('delete')\n })\n },\n },\n}\n</script>\n\n<style 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.use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EditScreenDialog.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.use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EditScreenDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditScreenDialog.vue?vue&type=template&id=0b0aba1f&scoped=true&\"\nimport script from \"./EditScreenDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./EditScreenDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditScreenDialog.vue?vue&type=style&index=0&id=0b0aba1f&prod&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 \"0b0aba1f\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n-->\n\n<template>\n <div>\n <v-card>\n <v-system-bar>\n <div v-show=\"errors.length !== 0\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"error-graph-icon\"\n @click=\"errorDialog = true\"\n >\n mdi-alert\n </v-icon>\n </div>\n </template>\n <span> Errors </span>\n </v-tooltip>\n </div>\n <v-spacer />\n <span>{{ target }} {{ screen }}</span>\n <v-spacer />\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"edit-screen-icon\" @click=\"openEdit\">\n mdi-pencil\n </v-icon>\n </div>\n </template>\n <span> Edit Screen </span>\n </v-tooltip>\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"expand\"\n >\n mdi-window-minimize\n </v-icon>\n <v-icon\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"!expand\"\n >\n mdi-window-maximize\n </v-icon>\n </div>\n </template>\n <span v-show=\"expand\"> Minimize Screen </span>\n <span v-show=\"!expand\"> Maximize Screen </span>\n </v-tooltip>\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"close-screen-icon\"\n @click=\"$emit('close-screen')\"\n >\n mdi-close-box\n </v-icon>\n </div>\n </template>\n <span> Close Screen </span>\n </v-tooltip>\n </v-system-bar>\n <v-expand-transition>\n <div class=\"pa-1\" ref=\"screen\" v-show=\"expand\">\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n v-on=\"$listeners\"\n />\n </div>\n </v-expand-transition>\n </v-card>\n <edit-screen-dialog\n v-if=\"editDialog\"\n v-model=\"editDialog\"\n :target=\"target\"\n :screen=\"screen\"\n :definition=\"currentDefinition\"\n :errors=\"errors\"\n @save=\"saveEdit($event)\"\n @cancel=\"cancelEdit()\"\n @delete=\"deleteScreen()\"\n />\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 '@openc3/tool-common/src/services/api'\nimport { ConfigParserService } from '@openc3/tool-common/src/services/config-parser'\nimport { OpenC3Api } from '@openc3/tool-common/src/services/openc3-api'\nimport Vue from 'vue'\nimport upperFirst from 'lodash/upperFirst'\nimport camelCase from 'lodash/camelCase'\nimport EditScreenDialog from '@/tools/TlmViewer/EditScreenDialog'\n\n// Globally register all XxxWidget.vue components\nconst requireComponent = require.context(\n // The relative path of the components folder\n '@openc3/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 components: {\n EditScreenDialog,\n },\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 api: null,\n backup: '',\n currentDefinition: this.definition,\n editDialog: false,\n expand: true,\n configParser: null,\n currentLayout: null,\n layoutStack: [],\n namedWidgets: {},\n dynamicWidgets: [],\n width: null,\n height: null,\n fixed: null,\n globalSettings: [],\n globalSubsettings: [],\n substitute: false,\n original_target_name: null,\n force_substitute: false,\n pollingPeriod: 1,\n errors: [],\n errorDialog: false,\n screenKey: null,\n }\n },\n computed: {\n 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.message,\n usage: err.usage,\n line: err.line,\n lineNumber: err.lineNumber,\n time: new Date().getTime(),\n })\n } else {\n this.errors.push({\n type: 'error',\n message: `${err}`,\n time: new Date().getTime(),\n })\n }\n return false\n },\n created() {\n this.api = new OpenC3Api()\n this.configParser = new ConfigParserService()\n this.parseDefinition()\n this.screenKey = Math.floor(Math.random() * 1000000)\n },\n mounted() {\n 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 this.dynamicWidgets = []\n // Every screen starts with a VerticalWidget\n this.layoutStack.push({\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n })\n this.currentLayout = this.layoutStack[this.layoutStack.length - 1]\n\n this.configParser.parse_string(\n this.currentDefinition,\n '',\n false,\n true,\n (keyword, parameters, line, lineNumber) => {\n if (keyword) {\n switch (keyword) {\n case 'SCREEN':\n this.configParser.verify_num_parameters(\n 3,\n 4,\n `${keyword} <Width or AUTO> <Height or AUTO> <Polling Period> <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, line, lineNumber)\n break\n } // switch keyword\n } // if keyword\n }\n )\n // This can happen if there is a typo in a layout widget with a corresponding END\n if (typeof this.layoutStack[0] === 'undefined') {\n let names = []\n let lines = []\n for (const widget of this.dynamicWidgets) {\n names.push(widget.name)\n lines.push(widget.lineNumber)\n }\n // Warn about any of the Dynamic widgets we found .. they could be typos\n this.errors.push({\n type: 'usage',\n message: `Unknown widget! Are these widgets: ${names.join(',')}?`,\n lineNumber: lines.join(','),\n time: new Date().getTime(),\n })\n // Create a simple VerticalWidget to replace the bad widget so\n // the layout stack can successfully unwind\n this.layoutStack[0] = {\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n }\n } else {\n this.applyGlobalSettings(this.layoutStack[0].widgets)\n }\n },\n // Called by button scripts to get named widgets\n // Underscores used to match OpenC3 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 (\n this.$store.state.tlmViewerItems.length !== 0 &&\n this.errors.length === 0\n ) {\n this.api\n .get_tlm_values(this.$store.state.tlmViewerItems)\n .then((data) => {\n this.$store.commit('tlmViewerUpdateValues', data)\n })\n .catch((error) => {\n this.errors.push({\n type: 'usage',\n message: error.message,\n time: new Date().getTime(),\n })\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 // Force re-render\n this.screenKey = Math.floor(Math.random() * 1000000)\n // After re-render clear any errors\n this.$nextTick(function () {\n this.clearErrors()\n })\n },\n saveEdit: function (definition) {\n this.currentDefinition = definition\n this.parseDefinition()\n // Force re-render\n this.screenKey = Math.floor(Math.random() * 1000000)\n // After re-render wait and see if there are errors before saving\n this.$nextTick(function () {\n if (this.errors.length === 0) {\n Api.post('/openc3-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 },\n deleteScreen: function () {\n this.editDialog = false\n Api.delete(`/openc3-api/screen/${this.target}/${this.screen}`).then(\n (response) => {\n this.$emit('delete-screen')\n }\n )\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-screen')\n },\n processWidget: function (keyword, parameters, line, lineNumber) {\n 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 line: line,\n lineNumber: lineNumber,\n })\n } else {\n let widget = {\n type: 'DynamicWidget',\n target: this.target,\n parameters: parameters,\n settings: settings,\n name: componentName,\n line: line,\n lineNumber: lineNumber,\n }\n this.currentLayout.widgets.push(widget)\n this.dynamicWidgets.push(widget)\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.use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Openc3Screen.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.use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Openc3Screen.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Openc3Screen.vue?vue&type=template&id=10fc5aea&scoped=true&\"\nimport script from \"./Openc3Screen.vue?vue&type=script&lang=js&\"\nexport * from \"./Openc3Screen.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Openc3Screen.vue?vue&type=style&index=0&id=10fc5aea&prod&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 \"10fc5aea\",\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\"},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(\"Create New 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\":\"new-screen-close-icon\"},on:{\"click\":function($event){_vm.show = false}}},[_vm._v(\" mdi-close-box \")])],1)]}}])},[_c('span',[_vm._v(\"Close\")])])],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('v-alert',{attrs:{\"type\":\"error\",\"dismissible\":\"\",\"dense\":\"\"},model:{value:(_vm.duplicateScreenAlert),callback:function ($$v) {_vm.duplicateScreenAlert=$$v},expression:\"duplicateScreenAlert\"}},[_vm._v(\" Screen \"+_vm._s(_vm.newScreenName.toUpperCase())+\" already exists! \")]),_c('v-row',{staticClass:\"pb-2\"},[_c('span',[_vm._v(\"Existing Screens: \"+_vm._s(_vm.screens.join(', ')))])]),_c('v-row',[_c('v-text-field',{attrs:{\"flat\":\"\",\"autofocus\":\"\",\"solo-inverted\":\"\",\"hide-details\":\"\",\"clearable\":\"\",\"label\":\"Screen Name (without .txt)\",\"data-test\":\"new-screen-name\"},on:{\"keyup\":function($event){return _vm.newScreenKeyup($event)}},model:{value:(_vm.newScreenName),callback:function ($$v) {_vm.newScreenName=$$v},expression:\"newScreenName\"}}),(_vm.newScreenSaving)?_c('div',{staticClass:\"pl-2\"},[_c('v-progress-circular',{attrs:{\"indeterminate\":\"\",\"color\":\"primary\"}})],1):_vm._e()],1)],1)]),_c('v-divider'),_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"primary\",\"text\":\"\"},on:{\"click\":_vm.saveNewScreen}},[_vm._v(\" Ok \")]),_c('v-btn',{attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.show = false}}},[_vm._v(\" Cancel \")])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n-->\n\n<template>\n <!-- Dialog for creating new screen -->\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span>Create New 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=\"new-screen-close-icon\" @click=\"show = false\">\n mdi-close-box\n </v-icon>\n </div>\n </template>\n <span>Close</span>\n </v-tooltip>\n </v-system-bar>\n <!-- <v-card-title> Create New Screen </v-card-title> -->\n <v-card-text>\n <div class=\"pa-3\">\n <v-alert\n v-model=\"duplicateScreenAlert\"\n type=\"error\"\n dismissible\n dense\n >\n Screen {{ newScreenName.toUpperCase() }} already exists!\n </v-alert>\n\n <v-row class=\"pb-2\">\n <span>Existing Screens: {{ screens.join(', ') }}</span>\n </v-row>\n <v-row>\n <v-text-field\n v-model=\"newScreenName\"\n flat\n autofocus\n solo-inverted\n hide-details\n clearable\n label=\"Screen Name (without .txt)\"\n data-test=\"new-screen-name\"\n @keyup=\"newScreenKeyup($event)\"\n />\n <div class=\"pl-2\" v-if=\"newScreenSaving\">\n <v-progress-circular indeterminate color=\"primary\" />\n </div>\n </v-row>\n </div>\n </v-card-text>\n <v-divider />\n <v-card-actions>\n <v-btn color=\"primary\" text @click=\"saveNewScreen\"> Ok </v-btn>\n <v-btn text @click=\"show = false\"> Cancel </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nexport default {\n props: {\n value: Boolean, // value is the default prop when using v-model\n screens: {\n type: Array,\n default: () => [],\n },\n },\n data() {\n return {\n newScreenSaving: false,\n newScreenName: '',\n duplicateScreenAlert: false,\n }\n },\n created() {\n this.duplicateScreenAlert = false\n this.newScreenSaving = false\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 methods: {\n newScreenKeyup(event) {\n if (this.screens.indexOf(this.newScreenName.toUpperCase()) !== -1) {\n this.duplicateScreenAlert = true\n } else {\n this.duplicateScreenAlert = false\n if (event.key === 'Enter') {\n this.saveNewScreen()\n }\n }\n },\n saveNewScreen() {\n this.newScreenSaving = true\n this.$emit('success', this.newScreenName.toUpperCase())\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.use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewScreenDialog.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.use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewScreenDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NewScreenDialog.vue?vue&type=template&id=4e353c40&\"\nimport script from \"./NewScreenDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./NewScreenDialog.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-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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 { OpenC3Api } from '../services/openc3-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 OpenC3Api()\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 OpenC3. ${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 OpenC3Api().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.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.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=db42aa32&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 \"db42aa32\",\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# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\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 { OpenC3Api } from '../services/openc3-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 OpenC3Api()\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 OpenC3. ${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 OpenC3Api().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.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.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=d7576030&\"\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","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n-->\n\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 mr-2\"\n :disabled=\"!selectedScreen\"\n @click=\"() => showScreen(selectedTarget, selectedScreen)\"\n >\n Show Screen\n </v-btn>\n <v-btn class=\"primary\" @click=\"() => newScreen(selectedTarget)\">\n New Screen\n <v-icon> mdi-file-plus</v-icon>\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 <openc3-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 @delete-screen=\"deleteScreen(def.id)\"\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 <new-screen-dialog\n v-if=\"newScreenDialog\"\n v-model=\"newScreenDialog\"\n :screens=\"screens\"\n @success=\"saveNewScreen($event)\"\n />\n </div>\n</template>\n\n<script>\nimport Api from '@openc3/tool-common/src/services/api'\nimport { OpenC3Api } from '@openc3/tool-common/src/services/openc3-api'\nimport TopBar from '@openc3/tool-common/src/components/TopBar'\nimport Openc3Screen from './Openc3Screen'\nimport NewScreenDialog from './NewScreenDialog'\nimport OpenConfigDialog from '@openc3/tool-common/src/components/OpenConfigDialog'\nimport SaveConfigDialog from '@openc3/tool-common/src/components/SaveConfigDialog'\nimport Muuri from 'muuri'\n\nexport default {\n components: {\n TopBar,\n Openc3Screen,\n NewScreenDialog,\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 newScreenDialog: false,\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 OpenC3Api()\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('/openc3-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 newScreen() {\n this.newScreenDialog = true\n },\n saveNewScreen(screenName) {\n Api.post('/openc3-api/screen/', {\n data: {\n scope: localStorage.scope,\n target: this.selectedTarget,\n screen: screenName,\n text: 'SCREEN AUTO AUTO 1.0\\nLABEL NEW',\n },\n }).then((response) => {\n this.newScreenDialog = false\n this.updateScreens()\n this.showScreen(this.selectedTarget, screenName)\n })\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('/openc3-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 deleteScreen(id) {\n this.closeScreen(id)\n this.updateScreens()\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.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.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=70d338f9&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=70d338f9&prod&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 \"70d338f9\",\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-2d350830]{font-weight:700;text-transform:capitalize}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".uplot.side-legend{display:flex;width:auto}.uplot.side-legend .u-wrap{flex:none}.uplot.side-legend .u-legend{text-align:left;margin-left:0;width:220px}.uplot.side-legend .u-legend,.uplot.side-legend .u-legend td,.uplot.side-legend .u-legend th,.uplot.side-legend .u-legend tr{display:revert}.uplot.left-legend .u-legend{order:-1}.uplot.top-legend{display:flex;flex-direction:column}.uplot.top-legend .u-legend{order:-1}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#chart[data-v-335d365e]{background-color:var(--v-tertiary-darken2)}#chart[data-v-335d365e] .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-3237297b] .v-label{margin-left:5px}.v-list-item__icon[data-v-3237297b]{margin-right:15px!important}.v-list-item__title[data-v-3237297b]{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-048f5302] div{min-height:24px!important;display:flex!important;align-items:center!important}.openc3-green[data-v-048f5302] input{color:#009600}.openc3-yellow[data-v-048f5302] input{color:#be8700}.openc3-red[data-v-048f5302] input{color:red}.openc3-blue[data-v-048f5302] input{color:#0064ff}.openc3-purple[data-v-048f5302] input{color:#c800c8}.openc3-black[data-v-048f5302] input{color:#000}.openc3-white[data-v-048f5302] 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-2fbe28c1] textarea{font-family:Courier New,Courier,monospace}.value[data-v-2fbe28c1] div{min-height:24px!important;display:flex!important;align-items:center!important}.openc3-green[data-v-2fbe28c1] input{color:#009600}.openc3-yellow[data-v-2fbe28c1] input{color:#be8700}.openc3-red[data-v-2fbe28c1] input{color:red}.openc3-blue[data-v-2fbe28c1] input{color:#0064ff}.openc3-purple[data-v-2fbe28c1] input{color:#c800c8}.openc3-black[data-v-2fbe28c1] input{color:#000}.openc3-white[data-v-2fbe28c1] 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-76a0c989] 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-c4066fac]{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-a1dc0278]{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-71a68fe2]{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-2bc42f58] div{min-height:24px!important;display:flex!important;align-items:center!important}.openc3-green[data-v-2bc42f58] input{color:#009600}.openc3-yellow[data-v-2bc42f58] input{color:#be8700}.openc3-red[data-v-2bc42f58] input{color:red}.openc3-blue[data-v-2bc42f58] input{color:#0064ff}.openc3-purple[data-v-2bc42f58] input{color:#c800c8}.openc3-black[data-v-2bc42f58] input{color:#000}.openc3-white[data-v-2bc42f58] 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-63de4b40] 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-0b0aba1f]{background-color:var(--v-tertiary-darken2)}.v-textarea[data-v-0b0aba1f] 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, \".v-card[data-v-10fc5aea]{background-color:var(--v-tertiary-darken2)}.v-textarea[data-v-10fc5aea] 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-70d338f9]{position:relative}.item[data-v-70d338f9]{position:absolute;display:block;margin:5px;z-index:1}.item.muuri-item-dragging[data-v-70d338f9]{z-index:3}.item.muuri-item-releasing[data-v-70d338f9]{z-index:2}.item.muuri-item-hidden[data-v-70d338f9]{z-index:0}.item-content[data-v-70d338f9]{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-44b6a4ed]{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-692162b3]{cursor:default;display:flex;justify-content:center;align-items:center;padding:5px;width:var(--width)}.limitsbar__container[data-v-692162b3]{position:relative;flex:1;height:var(--container-height);border:1px solid #000;background-color:#fff}.limitsbar__redlow[data-v-692162b3]{left:0;width:var(--redlow-width)}.limitsbar__redhigh[data-v-692162b3],.limitsbar__redlow[data-v-692162b3]{position:absolute;top:-1px;height:var(--container-height);background-color:red}.limitsbar__redhigh[data-v-692162b3]{right:0;width:var(--redhigh-width)}.limitsbar__yellowlow[data-v-692162b3]{left:var(--redlow-width);width:var(--yellowlow-width)}.limitsbar__yellowhigh[data-v-692162b3],.limitsbar__yellowlow[data-v-692162b3]{position:absolute;top:-1px;height:var(--container-height);background-color:#ffdc00}.limitsbar__yellowhigh[data-v-692162b3]{right:var(--redhigh-width);width:var(--yellowhigh-width)}.limitsbar__greenlow[data-v-692162b3]{left:calc(var(--redlow-width) + var(--yellowlow-width));width:var(--greenlow-width)}.limitsbar__greenhigh[data-v-692162b3],.limitsbar__greenlow[data-v-692162b3]{position:absolute;top:-1px;height:var(--container-height);background-color:green}.limitsbar__greenhigh[data-v-692162b3]{right:calc(var(--redhigh-width) + var(--yellowhigh-width));width:var(--greenhigh-width)}.limitsbar__blue[data-v-692162b3]{top:-1px;left:calc(var(--redlow-width) + var(--yellowlow-width) + var(--greenlow-width));width:var(--blue-width);background-color:blue}.limitsbar__blue[data-v-692162b3],.limitsbar__line[data-v-692162b3]{position:absolute;height:var(--container-height)}.limitsbar__line[data-v-692162b3]{left:var(--position);width:1px;background-color:gray}.limitsbar__arrow[data-v-692162b3]{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-1ab30c30]{cursor:default;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:5px;height:var(--height)}.limitsbar__container[data-v-1ab30c30]{position:relative;flex:1 1 100%;width:var(--container-width);border:1px solid #000;background-color:#fff}.limitsbar__redlow[data-v-1ab30c30]{bottom:0;height:var(--redlow-height)}.limitsbar__redhigh[data-v-1ab30c30],.limitsbar__redlow[data-v-1ab30c30]{position:absolute;width:var(--container-width);background-color:red}.limitsbar__redhigh[data-v-1ab30c30]{top:0;height:var(--redhigh-height)}.limitsbar__yellowlow[data-v-1ab30c30]{bottom:var(--redlow-height);height:var(--yellowlow-height)}.limitsbar__yellowhigh[data-v-1ab30c30],.limitsbar__yellowlow[data-v-1ab30c30]{position:absolute;width:var(--container-width);background-color:#ffdc00}.limitsbar__yellowhigh[data-v-1ab30c30]{top:var(--redhigh-height);height:var(--yellowhigh-height)}.limitsbar__greenlow[data-v-1ab30c30]{bottom:calc(var(--redlow-height) + var(--yellowlow-height));height:var(--greenlow-height)}.limitsbar__greenhigh[data-v-1ab30c30],.limitsbar__greenlow[data-v-1ab30c30]{position:absolute;width:var(--container-width);background-color:green}.limitsbar__greenhigh[data-v-1ab30c30]{top:calc(var(--redhigh-height) + var(--yellowhigh-height));height:var(--greenhigh-height)}.limitsbar__blue[data-v-1ab30c30]{bottom:calc(var(--redlow-height) + var(--yellowlow-height) + var(--greenlow-height));height:var(--blue-height);background-color:blue}.limitsbar__blue[data-v-1ab30c30],.limitsbar__line[data-v-1ab30c30]{position:absolute;width:var(--container-width)}.limitsbar__line[data-v-1ab30c30]{bottom:var(--position);height:1px;background-color:gray}.limitsbar__arrow[data-v-1ab30c30]{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-687f0825]{cursor:default;display:flex;justify-content:center;align-items:center;padding:5px;width:var(--width)}.rangebar__container[data-v-687f0825]{position:relative;flex:1;height:var(--container-height);border:1px solid #000;background-color:#fff}.rangebar__line[data-v-687f0825]{width:1px;height:var(--container-height);background-color:gray}.rangebar__arrow[data-v-687f0825],.rangebar__line[data-v-687f0825]{position:absolute;left:var(--position)}.rangebar__arrow[data-v-687f0825]{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-61027b58]{min-height:34px}.value[data-v-61027b58] div{min-height:24px!important;display:flex!important;align-items:center!important}.openc3-green[data-v-61027b58] input{color:#009600}.openc3-yellow[data-v-61027b58] input{color:#be8700}.openc3-red[data-v-61027b58] input{color:red}.openc3-blue[data-v-61027b58] input{color:#0064ff}.openc3-purple[data-v-61027b58] input{color:#c800c8}.openc3-black[data-v-61027b58] input{color:#000}.openc3-white[data-v-61027b58] 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.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.use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=2d350830&prod&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(\"7fea72d5\", 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.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.use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=335d365e&prod&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(\"4d874f9a\", 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.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.use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Graph.vue?vue&type=style&index=1&id=335d365e&prod&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(\"b50c2682\", 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.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.use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=3237297b&prod&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(\"9f637652\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=048f5302&prod&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(\"bb481186\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=2fbe28c1&prod&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(\"0c454f16\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=76a0c989&prod&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(\"4ec96170\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=c4066fac&prod&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(\"490e0094\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=a1dc0278&prod&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(\"40dc2e86\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=71a68fe2&prod&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(\"d7cb3956\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=2bc42f58&prod&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(\"90e58dfa\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=63de4b40&prod&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(\"39ba3bd3\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EditScreenDialog.vue?vue&type=style&index=0&id=0b0aba1f&prod&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(\"0f114ac9\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Openc3Screen.vue?vue&type=style&index=0&id=10fc5aea&prod&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(\"0e10acac\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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=70d338f9&prod&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(\"5c26ba06\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.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=44b6a4ed&prod&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(\"7a26e40c\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.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=692162b3&prod&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(\"2ffb71a7\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.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=1ab30c30&prod&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(\"61d362d7\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.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=687f0825&prod&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(\"1f64b642\", 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.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.use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.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=61027b58&prod&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(\"364acb37\", content, true, {\"sourceMap\":false,\"shadowMode\":false});"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","mixins","data","api","screen","displaySendHazardous","lastCmd","computed","buttonText","eval","created","methods","onClick","lines","result","then","catch","sendHazardousCmd","cancelHazardousCmd","runScript","scriptName","Api","window","props","target","type","String","require","getPresignedUrl","fileName","encodeURIComponent","localStorage","scope","this","response","url","Widget","widgets","Array","default","value","limitsState","formatString","valueId","colorBlind","viewDetails","contextMenuShown","x","y","contextMenuOptions","title","action","open","parameters","_value","$store","state","tlmViewerValues","formatted","formatValue","colorblindMode","limitsLetter","valueClass","limitsColor","c","charAt","endsWith","toLowerCase","getType","commit","destroyed","prototype","toString","call","slice","i","length","sprintf","showContextMenu","preventDefault","clientX","clientY","$nextTick","widgetIndex","Number","settings","line","lineNumber","computedStyle","style","forEach","setting","index","parseInt","getColor","verifyNumParams","keyword","min_num_params","max_num_params","usage","parser","undefined","ConfigParserError","originalWidthSetting","width","resetWidth","beforeUpdate","some","unshift","request","method","params","headers","noAuth","noScope","OpenC3Auth","updateToken","defaultMinValidity","login","openc3Token","axios","acceptOnlyDefaultHeaders","Accept","fullDefaultHeaders","get","path","put","post","delete","vueInstance","Vue","axiosInstance","baseURL","location","origin","timeout","interceptors","use","error","status","href","axiosIgnoreResponse","Promise","reject","body","statusText","config","message","exception","class","$notify","serious","ActionCable","Cable","_cable","disconnect","channel","callbacks","additionalOptions","subscriptions","create","token","config_parser","filename","ConfigParserService","string","first_char","last_char","substring","rx","global","r","replace","match","push","input_string","original_filename","yield_non_keyword_lines","remove_quotes","handler","line_continuation","split","numLines","trim","scan_string","first_item","toUpperCase","OpenC3Api","kwparams","jsonrpc","keyword_params","Authorization","err","name","val","json_class","raw","NaN","Infinity","isNaN","POSITIVE_INFINITY","NEGATIVE_INFINITY","exec","interface_name","router_name","target_commands","packet","item","log_writer_name","limits_set","target_name","packet_name","value_type","len","converted","decode_openc3_type","items","item_name","command_name","parameter_name","param_list","key","hasOwnProperty","encode_openc3_type","_cmd","tool","ignored","array","isSecureContext","arrayBuffer","TextEncoder","encode","crypto","subtle","digest","hashAsArrayBuffer","uint8ViewOfHash","Uint8Array","from","b","padStart","join","render","_vm","_h","$createElement","_c","_self","attrs","model","callback","$$v","show","expression","_v","_s","targetName","packetName","itemName","details","description","staticClass","rawValue","convertedValue","formattedValue","unitsValue","_e","bit_offset","bit_size","array_size","data_type","minimum","maximum","format_string","read_conversion","write_conversion","id_value","units_full","units","endianness","_l","limit","formatLimit","staticRenderFns","validator","updater","set","beforeDestroy","clearInterval","watch","get_tlm_values","requestDetails","get_item","get_parameter","component","height","on","$event","stopPropagation","apply","arguments","components","DetailsDialog","itemsPerRow","formatter","text","count","bytesPerWord","wordsPerRow","addrFormat","addr","byteCount","widget","_g","tag","$listeners","imageUrl","image","directives","rawName","selectedValue","defaultImage","images","showDefault","immediate","filter","fillColor","fontSize","calcStyle","color","label","checked","widgetType","_b","assign","$props","$attrs","mounted","System","ref","getParameters","ValueWidget","HorizontalWidget","src","itemFullName","cable","subscription","imageData","valueType","get_tlm_packet","finally","received","subscribe","createSubscription","connected","mode","disconnected","rejected","cssProps","labelText","fontFamily","fontWeight","fontStyle","size","labelName","LabelWidget","LedWidget","ProgressbarWidget","defaultStyle","limitsBarParameters","LabelvalueWidget","LimitsbarWidget","overallWidth","limitsColumnParameters","LimitscolumnWidget","labelValueParameters","RangebarWidget","colors","TRUE","FALSE","_m","minValue","maxValue","scale","redLow","yellowLow","greenLow","greenHigh","yellowHigh","redHigh","blue","limitsSettings","DEFAULT","currentLimitsSet","currentSetRefreshInterval","selectedLimitsSet","DEFAULT_LIMITS_SET","get_limits","modifyLimits","divisor","calcPosition","lowValue","highValue","calcLimits","getCurrentLimitsSet","radius","fullLabelDisplay","secondsGraphed","pointsSaved","pointsGraphed","nativeOn","$emit","hideSystemBar","selectedGraphId","errors","scopedSlots","_u","fn","errorDialog","editGraph","collapseAll","calcFullSize","expandAll","collapseWidth","fullWidth","expandWidth","collapseHeight","fullHeight","expandHeight","minMaxTransition","expand","hideOverview","indexOf","_k","keyCode","editGraphClose","graphStartDateTime","graphEndDateTime","legendPositions","legendPosition","graphMinY","graphMaxY","itemHeaders","editItems","removeItems","proxy","clearErrors","editGraphMenuX","editGraphMenuY","editGraphMenu","staticStyle","editItem","valueTypes","currentType","closeEditItem","itemMenuX","itemMenuY","itemMenu","openEditItem","selectedItem","legendMenuX","legendMenuY","legendMenu","moveLegend","dateLabel","Date","now","dateRules","date","timeLabel","timeRules","onChange","time","required","initialDate","initialTime","rules","isValid","DateTimeChooser","startTime","initialItems","sortable","active","graph","overview","indexes","drawInterval","zoomChart","zoomOverview","needToUpdate","itemId","spanGaps","stroke","seriesObj","commonProps","chartSeries","overviewSeries","series","v","cursor","drag","sync","hooks","setScale","left","ready","canvas","legend","seriesEl","chartOpts","document","points","setSelect","chart","min","max","overviewOpts","handleResize","resize","setGraphRange","pad","getSize","navDrawer","legendWidth","Math","navDrawerWidth","getScales","scales","range","u","dataMin","dataMax","getAxes","strokeColor","axisColor","axes","grid","changeType","addItems","itemArray","addItemsToSubscription","endTime","start_time","end_time","removeItemsFromSubscription","reorderIndexes","bs_comparator","set_data_at_index","subscriptionKey","Graph","chunk","rindex","cindex","columns","widgetChunks","ceil","scaleFactor","selectedIndex","selected","scrollwindowStyle","VerticalboxWidget","maxHeight","curTab","tab","tabIndex","fullName","valueParameters","VerticalWidget","contentStyle","menus","targets","targetSelect","selectedTarget","screens","screenSelect","selectedScreen","showScreen","newScreen","def","refInFor","screenId","definition","closeScreen","refreshLayout","deleteScreen","toolName","openConfiguration","openConfig","saveConfiguration","saveConfig","saveNewScreen","newScreenDialog","menu","formatDT","domProps","radioGroup","option","j","disabled","command","icon","radio","checkbox","openEdit","screenKey","layoutStack","currentDefinition","saveEdit","cancelEdit","editDialog","downloadScreen","file","loadingFile","loadFile","editErrors","msg","link","fileReader","that","confirm","okText","cancelText","requireComponent","camelCase","pop","componentName","EditScreenDialog","backup","configParser","currentLayout","namedWidgets","dynamicWidgets","fixed","globalSettings","globalSubsettings","substitute","original_target_name","force_substitute","pollingPeriod","errorCaptured","vm","info","refreshInterval","parseDefinition","names","get_named_widget","setNamedWidget","update","processWidget","widgetName","applyGlobalSettings","duplicateScreenAlert","newScreenName","newScreenKeyup","newScreenSaving","event","cancel","success","search","configs","itemSelected","slot","select","deleteConfig","align","list_configs","configId","configName","TopBar","Openc3Screen","NewScreenDialog","OpenConfigDialog","SaveConfigDialog","counter","definitions","get_target_list","dragEnabled","dragHandle","updateScreens","screenName","loadScreen","pushScreen","setTimeout","configResponse","JSON","loadScreenPromises","sort","gridItems","___CSS_LOADER_EXPORT___","content","__esModule","locals","add"],"sourceRoot":""}