@openc3/vue-common 6.5.1 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/ArrayWidget-Bb_Ldxq7.cjs.map +1 -1
  2. package/dist/ArrayWidget-Ck6pzAyW.js.map +1 -1
  3. package/dist/ArrayplotWidget-DC41cpv1.cjs.map +1 -1
  4. package/dist/ArrayplotWidget-ntRLh6-B.js.map +1 -1
  5. package/dist/AstroStatus-CILMWL6F.cjs.map +1 -1
  6. package/dist/AstroStatus-CY9VkeTN.js.map +1 -1
  7. package/dist/BarColumn-Bgz2YJ59.js.map +1 -1
  8. package/dist/BarColumn-DtRNuOpa.cjs.map +1 -1
  9. package/dist/BlockWidget-DGH3Zz5p.js.map +1 -1
  10. package/dist/BlockWidget-DOY5lVfa.cjs.map +1 -1
  11. package/dist/ButtonWidget-CFyZXGt6.cjs.map +1 -1
  12. package/dist/ButtonWidget-D_tupiPB.js.map +1 -1
  13. package/dist/CanvasWidget-C6dc7mUw.cjs.map +1 -1
  14. package/dist/CanvasWidget-CzG2jYQb.js.map +1 -1
  15. package/dist/CanvasimageWidget-CNJlzLqo.js.map +1 -1
  16. package/dist/CanvasimageWidget-DjvdDCRS.cjs.map +1 -1
  17. package/dist/CanvasimagevalueWidget-C1fI-ftP.cjs.map +1 -1
  18. package/dist/CanvasimagevalueWidget-DudwwOD6.js.map +1 -1
  19. package/dist/CanvaslabelWidget--6Sjc4E8.cjs.map +1 -1
  20. package/dist/CanvaslabelWidget-BZQp16dH.js.map +1 -1
  21. package/dist/CanvaslabelvalueWidget-CHS36Te9.js.map +1 -1
  22. package/dist/CanvaslabelvalueWidget-DZCxsIKk.cjs.map +1 -1
  23. package/dist/CanvaslineWidget-Bn83Rb10.cjs.map +1 -1
  24. package/dist/CanvaslineWidget-nhKEAGhs.js.map +1 -1
  25. package/dist/CanvaslinevalueWidget-C6x_4Gc9.cjs.map +1 -1
  26. package/dist/CanvaslinevalueWidget-DsyIDkJy.js.map +1 -1
  27. package/dist/CheckbuttonWidget-BvggsGZY.cjs.map +1 -1
  28. package/dist/CheckbuttonWidget-DCam7Jd0.js.map +1 -1
  29. package/dist/ComboboxWidget-BS5WSbrK.cjs.map +1 -1
  30. package/dist/ComboboxWidget-ZX-k-_aK.js.map +1 -1
  31. package/dist/CriticalCmdDialog-7tOK2XQk.cjs.map +1 -1
  32. package/dist/CriticalCmdDialog-Dylpoz_4.js.map +1 -1
  33. package/dist/CustomIcon-Bop2mEnu.cjs.map +1 -1
  34. package/dist/CustomIcon-h5X7369N.js.map +1 -1
  35. package/dist/DateWidget-DuJ5uC2t.js.map +1 -1
  36. package/dist/DateWidget-jejbk2-G.cjs.map +1 -1
  37. package/dist/DetailsDialog-BQE0TraI.js.map +1 -1
  38. package/dist/DetailsDialog-DmKpPDNn.cjs.map +1 -1
  39. package/dist/DynamicWidget-BWEVCUfd.cjs.map +1 -1
  40. package/dist/DynamicWidget-CfMtj7H8.js.map +1 -1
  41. package/dist/EventListDialog-CDcJcxy5.cjs.map +1 -1
  42. package/dist/EventListDialog-CGUFCrJF.js.map +1 -1
  43. package/dist/FormatvalueWidget-DYICPNcx.js.map +1 -1
  44. package/dist/FormatvalueWidget-wu7Q3sXu.cjs.map +1 -1
  45. package/dist/Graph-DCihpnT0.js.map +1 -1
  46. package/dist/Graph-mSqImgca.cjs.map +1 -1
  47. package/dist/GraphWidget-CQjKAMPR.cjs.map +1 -1
  48. package/dist/GraphWidget-cTVq29cY.js.map +1 -1
  49. package/dist/HorizontalWidget--AkRJPlL.cjs.map +1 -1
  50. package/dist/HorizontalWidget-v1pfd94Z.js.map +1 -1
  51. package/dist/HorizontalboxWidget-B06-c_n4.js.map +1 -1
  52. package/dist/HorizontalboxWidget-synL-Bar.cjs.map +1 -1
  53. package/dist/IframeWidget-ByhwW9yG.cjs.map +1 -1
  54. package/dist/IframeWidget-n8lNXrpt.js.map +1 -1
  55. package/dist/ImageLoader-CfcErydq.js.map +1 -1
  56. package/dist/ImageLoader-DBWVFtNu.cjs.map +1 -1
  57. package/dist/ImageviewerWidget-D4mU6wLX.cjs.map +1 -1
  58. package/dist/ImageviewerWidget-DE8fj06Z.js.map +1 -1
  59. package/dist/InterfacesTab-BF-Wx5gk.js.map +1 -1
  60. package/dist/InterfacesTab-DTAAIx-y.cjs.map +1 -1
  61. package/dist/LabelWidget-DQZqRxKF.cjs.map +1 -1
  62. package/dist/LabelWidget-iUIJLhdA.js.map +1 -1
  63. package/dist/LabelledWidget-9HWChRmv.cjs.map +1 -1
  64. package/dist/LabelledWidget-KI6fMlsr.js.map +1 -1
  65. package/dist/LabelprogressbarWidget-C2lzmqBH.js.map +1 -1
  66. package/dist/LabelprogressbarWidget-DwzTP73u.cjs.map +1 -1
  67. package/dist/LabelsparklineWidget-Ci6GGm29.js.map +1 -1
  68. package/dist/LabelsparklineWidget-DMjBshq8.cjs.map +1 -1
  69. package/dist/LabelvalueWidget-mAb0eLA8.cjs.map +1 -1
  70. package/dist/LabelvalueWidget-oiW-JDw6.js.map +1 -1
  71. package/dist/LabelvaluedescWidget-CZJ0kZN-.cjs.map +1 -1
  72. package/dist/LabelvaluedescWidget-Ck0AJ9g0.js.map +1 -1
  73. package/dist/LabelvaluelimitsbarWidget-DjBqYxRr.cjs.map +1 -1
  74. package/dist/LabelvaluelimitsbarWidget-aaVLaejn.js.map +1 -1
  75. package/dist/LabelvaluerangebarWidget-Bs9locqu.js.map +1 -1
  76. package/dist/LabelvaluerangebarWidget-Ci-n_hxk.cjs.map +1 -1
  77. package/dist/LedWidget-BN8IgAxJ.js.map +1 -1
  78. package/dist/LedWidget-BUTbyEBi.cjs.map +1 -1
  79. package/dist/LimitsbarWidget-BxxoKTjp.js.map +1 -1
  80. package/dist/LimitsbarWidget-Co5GAHro.cjs.map +1 -1
  81. package/dist/LimitscolorWidget-BpTcgqRC.cjs.map +1 -1
  82. package/dist/LimitscolorWidget-DFDwf4In.js.map +1 -1
  83. package/dist/LimitscolumnWidget-CdBh2mJu.js.map +1 -1
  84. package/dist/LimitscolumnWidget-CqJJKDzz.cjs.map +1 -1
  85. package/dist/MatrixbycolumnsWidget-DCwxPjwS.js.map +1 -1
  86. package/dist/MatrixbycolumnsWidget-DxRhvPGv.cjs.map +1 -1
  87. package/dist/MicroservicesTab-B-SdMwek.js.map +1 -1
  88. package/dist/MicroservicesTab-DGaTcj-y.cjs.map +1 -1
  89. package/dist/Openc3Screen-BZN0Wtrm.js.map +1 -1
  90. package/dist/Openc3Screen-dtpBWZdA.cjs.map +1 -1
  91. package/dist/OutputDialog-CcSp-Uqo.js.map +1 -1
  92. package/dist/OutputDialog-CxKDhrg6.cjs.map +1 -1
  93. package/dist/PackagesTab-B4V2n4io.cjs.map +1 -1
  94. package/dist/PackagesTab-Dx25CfF0.js.map +1 -1
  95. package/dist/PluginsTab-DHO1tK2S.cjs.map +1 -1
  96. package/dist/PluginsTab-lHDR5v6S.js.map +1 -1
  97. package/dist/ProgressbarWidget-C0AkbX_o.cjs.map +1 -1
  98. package/dist/ProgressbarWidget-Cdu5nJC3.js.map +1 -1
  99. package/dist/RadiobuttonWidget-CZZGbvdG.js.map +1 -1
  100. package/dist/RadiobuttonWidget-DslmJO31.cjs.map +1 -1
  101. package/dist/RadiogroupWidget-CQN3v8Ip.js.map +1 -1
  102. package/dist/RadiogroupWidget-DKgBAR9E.cjs.map +1 -1
  103. package/dist/RangebarWidget-Tq80I5zA.cjs.map +1 -1
  104. package/dist/RangebarWidget-dZN9WjoZ.js.map +1 -1
  105. package/dist/RedisTab-CdiSo-CO.cjs.map +1 -1
  106. package/dist/RedisTab-CkSwEwTZ.js.map +1 -1
  107. package/dist/RollupWidget-CHdZAUCb.cjs.map +1 -1
  108. package/dist/RollupWidget-i9DnNJl6.js.map +1 -1
  109. package/dist/RoutersTab-Cp8wM-mS.cjs.map +1 -1
  110. package/dist/RoutersTab-DiYEI1Nq.js.map +1 -1
  111. package/dist/ScriptChooser-BnTP6ucF.cjs.map +1 -1
  112. package/dist/ScriptChooser-Cua8ObYv.js.map +1 -1
  113. package/dist/ScrollwindowWidget-54GU96Ve.js.map +1 -1
  114. package/dist/ScrollwindowWidget-C5_X-KwQ.cjs.map +1 -1
  115. package/dist/SecretsTab-DY16usGc.cjs.map +1 -1
  116. package/dist/SecretsTab-uWRVI1EE.js.map +1 -1
  117. package/dist/SettingsTab-BVnr4OtU.js.map +1 -1
  118. package/dist/SettingsTab-BkwaDhYo.cjs.map +1 -1
  119. package/dist/SignalWidget-B_kA9eCJ.js.map +1 -1
  120. package/dist/SignalWidget-COL8kXSJ.cjs.map +1 -1
  121. package/dist/SimpleTextDialog-BWUqPlTv.cjs.map +1 -1
  122. package/dist/SimpleTextDialog-BulqUrdH.js.map +1 -1
  123. package/dist/SpacerWidget-D_Ya_b1j.cjs.map +1 -1
  124. package/dist/SpacerWidget-XoMPHak8.js.map +1 -1
  125. package/dist/SparklineWidget-CRzXTS5z.cjs.map +1 -1
  126. package/dist/SparklineWidget-DQNsvEj9.js.map +1 -1
  127. package/dist/TabbookWidget-Bh-GDBXg.cjs.map +1 -1
  128. package/dist/TabbookWidget-_HVA72t5.js.map +1 -1
  129. package/dist/TargetsTab-BfoRYnTP.js.map +1 -1
  130. package/dist/TargetsTab-CGE-jQAz.cjs.map +1 -1
  131. package/dist/TextBoxDialog-C60jmnyN.js.map +1 -1
  132. package/dist/TextBoxDialog-DWt30tB8.cjs.map +1 -1
  133. package/dist/TextboxWidget-0JXn4bMH.js.map +1 -1
  134. package/dist/TextboxWidget-uDptDK_z.cjs.map +1 -1
  135. package/dist/TextfieldWidget-B0FCskrL.cjs.map +1 -1
  136. package/dist/TextfieldWidget-BXr9MkVW.js.map +1 -1
  137. package/dist/TimeWidget-C67uwMGH.js.map +1 -1
  138. package/dist/TimeWidget-q5tUvHC6.cjs.map +1 -1
  139. package/dist/TitleWidget-REsd7MqR.cjs.map +1 -1
  140. package/dist/TitleWidget-t_YLgUMB.js.map +1 -1
  141. package/dist/ToolsTab-CGztf9_j.cjs.map +1 -1
  142. package/dist/ToolsTab-DKYeIlXu.js.map +1 -1
  143. package/dist/TopBar-B0UcAtIW.cjs.map +1 -1
  144. package/dist/TopBar-BrCfgCxc.js.map +1 -1
  145. package/dist/UpgradeToEnterpriseDialog-CGyR2v7U.js.map +1 -1
  146. package/dist/UpgradeToEnterpriseDialog-DJ3oth3I.cjs.map +1 -1
  147. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs.map +1 -1
  148. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js.map +1 -1
  149. package/dist/VWidget-BMxLXtSO.cjs.map +1 -1
  150. package/dist/VWidget-j2GIGGSX.js.map +1 -1
  151. package/dist/ValueWidget-3jNtnh5i.js.map +1 -1
  152. package/dist/ValueWidget-CjZeSiPQ.cjs.map +1 -1
  153. package/dist/ValuerangebarWidget-CpZYmUl_.cjs.map +1 -1
  154. package/dist/ValuerangebarWidget-DnZrho8S.js.map +1 -1
  155. package/dist/VerticalWidget-CcJMMaK_.cjs.map +1 -1
  156. package/dist/VerticalWidget-DJvoxqLE.js.map +1 -1
  157. package/dist/VerticalboxWidget-CJR_mOLa.cjs.map +1 -1
  158. package/dist/VerticalboxWidget-CYYyLBoO.js.map +1 -1
  159. package/dist/Widget-Bn_S-zBo.js.map +1 -1
  160. package/dist/Widget-O7wkmc39.cjs.map +1 -1
  161. package/dist/components.cjs.map +1 -1
  162. package/dist/components.js.map +1 -1
  163. package/dist/fileIcon-BduOQcTc.cjs.map +1 -1
  164. package/dist/fileIcon-DqRHb1_Z.js.map +1 -1
  165. package/dist/format-B22VpiOS.cjs.map +1 -1
  166. package/dist/format-CVeawcIv.js.map +1 -1
  167. package/dist/icons.cjs.map +1 -1
  168. package/dist/icons.js.map +1 -1
  169. package/dist/index-DcL65Mqb.cjs.map +1 -1
  170. package/dist/index-qCq0L4jN.js.map +1 -1
  171. package/dist/parse-DnkEsW-3.js.map +1 -1
  172. package/dist/parse-DwfgQboe.cjs.map +1 -1
  173. package/dist/plugins.cjs.map +1 -1
  174. package/dist/plugins.js.map +1 -1
  175. package/dist/timeFilters-BKnCM4rv.js.map +1 -1
  176. package/dist/timeFilters-CJFxfjqN.cjs.map +1 -1
  177. package/dist/tools/admin.cjs.map +1 -1
  178. package/dist/tools/admin.js.map +1 -1
  179. package/dist/tools/base.cjs.map +1 -1
  180. package/dist/tools/base.js.map +1 -1
  181. package/dist/tools/scriptrunner.cjs.map +1 -1
  182. package/dist/tools/scriptrunner.js.map +1 -1
  183. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"Graph-DCihpnT0.js","sources":["../src/components/GraphEditDialog.vue","../src/components/GraphEditItemDialog.vue","../src/components/Graph.vue"],"sourcesContent":["<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" max-width=\"700\" @keydown.esc=\"$emit('cancel')\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Edit Graph </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-tabs v-model=\"tab\" class=\"ml-3\">\n <v-tab value=\"0\"> Settings </v-tab>\n <v-tab value=\"1\"> Scale / Lines </v-tab>\n <v-tab value=\"2\"> Items </v-tab>\n </v-tabs>\n <v-tabs-window v-model=\"tab\">\n <v-tabs-window-item value=\"0\" eager>\n <div class=\"edit-box\">\n <v-row>\n <v-col>\n <v-card-text class=\"pa-0\">\n <v-text-field\n v-model=\"graph.title\"\n class=\"pb-2\"\n label=\"Title\"\n hide-details\n />\n </v-card-text>\n </v-col>\n <v-col>\n <v-select\n v-model=\"graph.legendPosition\"\n label=\"Legend Position\"\n hide-details\n :items=\"legendPositions\"\n style=\"max-width: 280px\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Select a start date/time for the graph. Leave blank for start now.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"startDate\"\n label=\"Start Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"startTime\"\n label=\"Start Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n <v-card-text class=\"pa-0\">\n Select a end date/time for the graph. Leave blank for continuous\n real-time graphing.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"endDate\"\n label=\"End Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"endTime\"\n label=\"End Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"1\" eager>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Set a min or max Y value to override automatic scaling\n </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMinY\"\n hide-details\n label=\"Min Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMaxY\"\n hide-details\n label=\"Max Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-list density=\"compact\" class=\"horizontal-lines\">\n <v-list-item>\n <span style=\"padding-top: 5px\">\n Add horizontal lines to the graph\n </span>\n <v-spacer />\n <v-btn @click=\"addLine()\"> New Line </v-btn>\n </v-list-item>\n <v-list-item\n v-for=\"(item, i) in graph.lines\"\n :key=\"i\"\n :value=\"item\"\n color=\"primary\"\n >\n <v-row>\n <v-col>\n <v-text-field v-model=\"item.yValue\" label=\"Y Value\" />\n </v-col>\n <v-col>\n <v-select\n v-model=\"item.color\"\n label=\"Color\"\n hide-details\n :items=\"colors\"\n />\n </v-col>\n <v-col>\n <v-btn\n style=\"padding: 30px\"\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Line\"\n @click=\"removeLine(item)\"\n />\n </v-col>\n </v-row>\n </v-list-item>\n </v-list>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"2\" eager>\n <v-data-table\n item-key=\"itemId\"\n class=\"elevation-1 my-2\"\n data-test=\"edit-graph-items\"\n :headers=\"itemHeaders\"\n :items=\"editItems\"\n :items-per-page=\"5\"\n :footer-props=\"{\n 'items-per-page-options': [5],\n }\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Item\"\n @click=\"$emit('remove', item)\"\n />\n </template>\n <template #no-data>\n <span> Currently no items on this graph </span>\n </template>\n </v-data-table>\n </v-tabs-window-item>\n </v-tabs-window>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"closeOk\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { TimeFilters } from '@/util'\nimport { isValid, parse, toDate } from 'date-fns'\nexport default {\n mixins: [TimeFilters],\n props: {\n modelValue: Boolean, // modelValue is the default prop when using v-model\n title: {\n type: String,\n required: true,\n },\n legendPosition: {\n type: String,\n required: true,\n },\n items: {\n type: Array,\n required: true,\n },\n graphMinY: {\n type: Number,\n },\n graphMaxY: {\n type: Number,\n },\n lines: {\n type: Array,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n startDateTime: {\n type: Number,\n },\n endDateTime: {\n type: Number,\n },\n timeZone: {\n type: String,\n required: true,\n },\n },\n data: function () {\n return {\n tab: 0,\n graph: {},\n legendPositions: ['top', 'bottom', 'left', 'right'],\n startDate: null,\n startTime: null,\n endDate: null,\n endTime: null,\n lineHeaders: [\n { title: 'Y Value', value: 'yValue' },\n { title: 'Color', value: 'color' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n itemHeaders: [\n { title: 'Target Name', value: 'targetName' },\n { title: 'Packet Name', value: 'packetName' },\n { title: 'Item Name', value: 'itemName' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n rules: {\n date: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'yyyy-MM-dd', new Date())) ||\n 'Invalid date (YYYY-MM-DD)'\n )\n } catch (e) {\n return 'Invalid date (YYYY-MM-DD)'\n }\n },\n time: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'HH:mm:ss', new Date())) ||\n 'Invalid time (HH:MM:SS)'\n )\n } catch (e) {\n return 'Invalid time (HH:MM:SS)'\n }\n },\n },\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n editItems: function () {\n if (!this.items) return []\n let itemId = 0\n return this.items.map((item) => {\n itemId += 1\n return { ...item, itemId }\n })\n },\n },\n created() {\n this.graph = {\n title: this.title,\n legendPosition: this.legendPosition,\n items: this.items,\n graphMinY: this.graphMinY,\n graphMaxY: this.graphMaxY,\n lines: [...this.lines],\n }\n // Set the date and time if they pass a dateTime or set a default\n // Start needs a default because if the timeZone is UTC the time will still be local time\n if (this.startDateTime) {\n // Use the passed dateTime as is\n let date = toDate(this.startDateTime / 1000000)\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n } else {\n // Create a new date 1 hr in the past as a default\n let date = new Date() - 3600000\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n }\n // Only set end date / time if it is explicitly passed\n if (this.endDateTime) {\n let date = toDate(this.endDateTime / 1000000)\n this.endDate = this.formatDate(date, this.timeZone)\n this.endTime = this.formatTimeHMS(date, this.timeZone)\n }\n },\n methods: {\n closeOk() {\n if (!!this.startDate && !!this.startTime) {\n this.graph.startDateTime = this.startDate + ' ' + this.startTime\n } else {\n this.graph.startDateTime = null\n }\n if (!!this.endDate && !!this.endTime) {\n this.graph.endDateTime = this.endDate + ' ' + this.endTime\n } else {\n this.graph.endDateTime = null\n }\n this.$emit('ok', this.graph)\n },\n addLine() {\n this.graph.lines.push({ yValue: 0, color: 'white' })\n },\n removeLine(dline) {\n let i = this.graph.lines.indexOf(dline)\n this.graph.lines.splice(i, 1)\n },\n },\n}\n</script>\n\n<style>\n.edit-box {\n color: hsla(0, 0%, 100%, 0.7);\n background-color: var(--color-background-surface-default);\n padding: 10px;\n margin-top: 10px;\n}\n\n/* For the Y Axis item editor within the Edit Dialog */\n.v-small-dialog__content {\n background-color: var(--color-background-surface-selected);\n padding: 5px 5px;\n}\n\n.horizontal-lines {\n background-color: var(--color-background-surface-default);\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2023, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" width=\"400\" @keydown.enter=\"success()\">\n <v-card>\n <v-card-title class=\"mb-2\">Edit Item</v-card-title>\n <v-card-text>\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n v-model=\"editItem.valueType\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Reduction\"\n :items=\"reduction\"\n v-model=\"editItem.reduced\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Reduced Type\"\n :items=\"reducedTypes\"\n :disabled=\"editItem.reduced === 'DECOM'\"\n v-model=\"editItem.reducedType\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Color\"\n :items=\"colors\"\n v-model=\"editItem.color\"\n @update:model-value=\"$emit('changeColor', $event)\"\n class=\"mb-2\"\n />\n <div v-if=\"limitsNames.length > 1\">\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Display Limits\"\n :items=\"limitsNames\"\n v-model=\"limitsName\"\n @update:model-value=\"$emit('changeLimits', limits[limitsName])\"\n />\n <div class=\"pa-3\">{{ limitsName }}: {{ limits[limitsName] }}</div>\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"$emit('close', editItem)\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\nexport default {\n props: {\n modelValue: Boolean,\n item: {\n type: Object,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n },\n data: function () {\n return {\n editItem: null,\n limitsName: 'NONE',\n // NONE: [] matches the default limits assigned in Graph addItems\n limits: { NONE: [] },\n valueTypes: ['CONVERTED', 'RAW'],\n reduction: [\n // Map NONE to DECOM for clarity\n { title: 'NONE', value: 'DECOM' },\n { title: 'REDUCED_MINUTE', value: 'REDUCED_MINUTE' },\n { title: 'REDUCED_HOUR', value: 'REDUCED_HOUR' },\n { title: 'REDUCED_DAY', value: 'REDUCED_DAY' },\n ],\n reducedTypes: ['MIN', 'MAX', 'AVG', 'STDDEV'],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n limitsNames() {\n return Object.keys(this.limits)\n },\n },\n async created() {\n this.editItem = { ...this.item }\n new OpenC3Api()\n .get_item(this.item.targetName, this.item.packetName, this.item.itemName)\n .then((details) => {\n for (const [key, value] of Object.entries(details.limits)) {\n if (Object.keys(value).includes('red_low')) {\n this.limits[key] = Object.values(value)\n }\n }\n // Locate the key for the value array that we pass in\n this.limitsName = Object.keys(this.limits).find(\n // Little hack to compare arrays you convert them to strings\n (key) => this.limits[key] + '' === this.editItem.limits + '',\n )\n })\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n#\n# A portion of this file was funded by Blue Origin Enterprises, L.P.\n# See https://github.com/OpenC3/cosmos/pull/1957\n-->\n\n<template>\n <div @click.prevent=\"$emit('click')\">\n <v-card>\n <v-toolbar\n v-show=\"!hideToolbarData\"\n height=\"24\"\n class=\"pl-2 pr-2\"\n :class=\"selectedGraphId === id ? 'active' : ''\"\n >\n <v-btn\n v-show=\"errors.length !== 0\"\n class=\"mx-2\"\n icon=\"mdi-alert\"\n density=\"compact\"\n variant=\"text\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"edit-graph-icon\"\n aria-label=\"Edit Graph\"\n @click=\"\n () => {\n editGraph = true\n }\n \"\n />\n\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n\n <template v-if=\"expand\">\n <v-btn\n v-if=\"calcFullSize\"\n icon=\"mdi-arrow-collapse\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-all\"\n @click=\"collapseAll\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-all\"\n @click=\"expandAll\"\n />\n\n <v-btn\n v-if=\"fullWidth\"\n icon=\"mdi-arrow-collapse-horizontal\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-width\"\n @click=\"collapseWidth\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand-horizontal\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-width\"\n @click=\"expandWidth\"\n />\n\n <v-btn\n v-if=\"fullHeight\"\n icon=\"mdi-arrow-collapse-vertical\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-height\"\n @click=\"collapseHeight\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand-vertical\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-height\"\n @click=\"expandHeight\"\n />\n </template>\n\n <v-btn\n v-if=\"expand\"\n icon=\"mdi-window-minimize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-else\n icon=\"mdi-window-maximize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n />\n\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-graph-icon\"\n @click.stop=\"$emit('close-graph')\"\n />\n </v-toolbar>\n\n <v-expand-transition>\n <div v-show=\"expand\" id=\"chart\" ref=\"chart\" class=\"pa-1\">\n <div :id=\"`chart${id}`\"></div>\n <div id=\"betweenCharts\"></div>\n <div v-show=\"showOverview\" :id=\"`overview${id}`\"></div>\n </div>\n </v-expand-transition>\n </v-card>\n\n <!-- Edit graph dialog -->\n <graph-edit-dialog\n v-if=\"editGraph\"\n v-model=\"editGraph\"\n :title=\"title\"\n :legend-position=\"legendPosition\"\n :items=\"items\"\n :graph-min-y=\"graphMinY\"\n :graph-max-y=\"graphMaxY\"\n :lines=\"lines\"\n :colors=\"colors\"\n :start-date-time=\"graphStartDateTime\"\n :end-date-time=\"graphEndDateTime\"\n :time-zone=\"timeZone\"\n @remove=\"removeItems([$event])\"\n @ok=\"editGraphClose\"\n @cancel=\"editGraph = false\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" max-width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n v-model=\"title\"\n readonly\n hide-details\n class=\"pb-2\"\n label=\"Graph Title\"\n />\n </v-row>\n <v-row class=\"my-3\">\n <v-textarea readonly rows=\"8\" :value=\"error\" />\n </v-row>\n <v-row>\n <v-btn block @click=\"clearErrors\"> Clear </v-btn>\n </v-row>\n </v-card>\n </v-dialog>\n\n <!-- Edit right click context menu -->\n <v-menu\n v-if=\"editGraphMenu\"\n v-model=\"editGraphMenu\"\n :target=\"[editGraphMenuX, editGraphMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"editGraph = true\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ title }}\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <graph-edit-item-dialog\n v-if=\"editItem\"\n v-model=\"editItem\"\n :colors=\"colors\"\n :item=\"selectedItem\"\n @change-color=\"changeColor\"\n @change-limits=\"changeLimits\"\n @cancel=\"editItem = false\"\n @close=\"closeEditItem\"\n />\n\n <!-- Edit Item right click context menu -->\n <v-menu\n v-if=\"itemMenu\"\n v-model=\"itemMenu\"\n :target=\"[itemMenuX, itemMenuY]\"\n absolute\n offset-y\n >\n <v-list nav density=\"compact\">\n <v-list-subheader>\n {{ selectedItem.targetName }}\n {{ selectedItem.packetName }}\n {{ selectedItem.itemName }}\n </v-list-subheader>\n <v-list-item @click=\"editItem = true\">\n <template #prepend>\n <v-icon icon=\"mdi-pencil\" />\n </template>\n <v-list-item-title> Edit </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"clearData([selectedItem])\">\n <template #prepend>\n <v-icon icon=\"mdi-eraser\" />\n </template>\n <v-list-item-title> Clear </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"removeItems([selectedItem])\">\n <template #prepend>\n <v-icon icon=\"mdi-delete\" />\n </template>\n <v-list-item-title> Delete </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <!-- Edit Legend right click context menu -->\n <v-menu\n v-if=\"legendMenu\"\n v-model=\"legendMenu\"\n :target=\"[legendMenuX, legendMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"moveLegend('top')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Top\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('bottom')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Bottom\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('left')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Left\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('right')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend RIght\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <div v-if=\"!sparkline\" ref=\"info\" class=\"u-series\">\n <v-tooltip\n text=\"Click item to toggle, Right click to edit\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-icon v-bind=\"props\"> mdi-information-variant-circle </v-icon>\n </template>\n </v-tooltip>\n </div>\n </div>\n</template>\n\n<script>\nimport GraphEditDialog from './GraphEditDialog.vue'\nimport GraphEditItemDialog from './GraphEditItemDialog.vue'\nimport uPlot from 'uplot'\nimport bs from 'binary-search'\nimport { Cable } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\n\nimport 'uplot/dist/uPlot.min.css'\n\nexport default {\n components: {\n GraphEditDialog,\n GraphEditItemDialog,\n },\n mixins: [TimeFilters],\n props: {\n id: {\n type: Number,\n required: true,\n },\n selectedGraphId: {\n type: Number,\n // Not required because we pass null\n },\n state: {\n type: String,\n required: true,\n },\n // start time in nanoseconds to start the graph\n // this allows multiple graphs to be synchronized\n startTime: {\n type: Number,\n },\n secondsGraphed: {\n type: Number,\n required: true,\n },\n pointsSaved: {\n type: Number,\n required: true,\n },\n pointsGraphed: {\n type: Number,\n required: true,\n },\n refreshIntervalMs: {\n type: Number,\n default: 200,\n },\n hideToolbar: {\n type: Boolean,\n default: false,\n },\n hideOverview: {\n type: Boolean,\n default: false,\n },\n sparkline: {\n type: Boolean,\n default: false,\n },\n initialItems: {\n type: Array,\n },\n // These allow the parent to force a specific height and/or width\n height: {\n type: Number,\n },\n width: {\n type: Number,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n data() {\n return {\n lines: [],\n active: true,\n expand: true,\n fullWidth: true,\n fullHeight: true,\n graph: null,\n editGraph: false,\n editGraphMenu: false,\n editGraphMenuX: 0,\n editGraphMenuY: 0,\n editItem: false,\n itemMenu: false,\n itemMenuX: 0,\n itemMenuY: 0,\n legendMenu: false,\n legendMenuX: 0,\n legendMenuY: 0,\n legendPosition: 'bottom',\n selectedItem: null,\n hideToolbarData: this.hideToolbar,\n showOverview: !this.hideOverview,\n hideOverviewData: this.hideOverview,\n title: '',\n overview: null,\n data: [[]],\n dataChanged: false,\n timeout: null,\n graphMinY: null,\n graphMaxY: null,\n graphStartDateTime: null,\n graphEndDateTime: null,\n indexes: {},\n items: this.initialItems || [],\n limitsValues: [],\n drawInterval: null,\n zoomChart: false,\n zoomOverview: false,\n cable: new Cable(),\n subscription: null,\n needToUpdate: false,\n errorDialog: false,\n errors: [],\n colorIndex: 0,\n colors: [\n // The first 3 are taken from the Astro css definitions for\n // --color-data-visualization-1 through 3\n '#00c7cb',\n '#938bdb',\n '#4dacff',\n 'lime',\n 'darkorange',\n 'red',\n 'gold',\n 'hotpink',\n 'tan',\n 'cyan',\n 'maroon',\n 'blue',\n 'teal',\n 'purple',\n 'green',\n 'brown',\n 'lightblue',\n 'white',\n 'black',\n ],\n }\n },\n computed: {\n calcFullSize: function () {\n return this.fullWidth || this.fullHeight\n },\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n return JSON.stringify(this.errors, null, 4)\n }\n return null\n },\n },\n watch: {\n state: function (newState, oldState) {\n switch (newState) {\n case 'start':\n // Only subscribe if we were previously stopped\n // If we were paused we do nothing ... see the data function\n if (oldState === 'stop') {\n this.startGraph()\n }\n break\n // case 'pause': Nothing to do ... see the data function\n case 'stop':\n this.stopGraph()\n break\n }\n },\n data: function (newData, oldData) {\n this.dataChanged = true\n },\n graphMinY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMinY = val\n }\n this.setGraphRange()\n },\n graphMaxY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMaxY = val\n }\n this.setGraphRange()\n },\n graphStartDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphStartDateTime =\n this.parseDateTime(this.graphStartDateTime, this.timeZone) * 1000000\n if (this.graphStartDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the start date time we need to update\n this.graphStartDateTime = null\n this.needToUpdate = true\n }\n },\n graphEndDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphEndDateTime =\n this.parseDateTime(this.graphEndDateTime, this.timeZone) * 1000000\n if (this.graphEndDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the end date time we need to update\n this.graphEndDateTime = null\n this.needToUpdate = true\n }\n },\n },\n created() {\n this.title = `Graph ${this.id}`\n for (const [index, item] of this.items.entries()) {\n this.data.push([]) // initialize the empty data arrays\n this.indexes[this.subscriptionKey(item)] = index + 1\n if (item.color === undefined) {\n item.color = this.colors[this.colorIndex]\n }\n this.colorIndex++\n if (this.colorIndex === this.colors.length) {\n this.colorIndex = 0\n }\n }\n },\n mounted() {\n // This code allows for temporary pulling in a patched uPlot\n // Also note you need to add 'async' before the mounted method for await\n // const plugin = document.createElement('script')\n // plugin.setAttribute(\n // 'src',\n // 'https://leeoniya.github.io/uPlot/dist/uPlot.iife.min.js'\n // )\n // plugin.async = true\n // document.head.appendChild(plugin)\n // await new Promise(r => setTimeout(r, 500)) // Allow the js to load\n\n // TODO: This is demo / performance code of multiple items with many data points\n // 10 items at 500,000 each renders immediately and uses 180MB in Chrome\n // Refresh still works, chrome is sluggish but once you pause it is very performant\n // 500,000 pts at 1Hz is 138.9hrs .. almost 6 days\n //\n // 10 items at 100,000 each is very performant ... 1,000,000 pts is Qt TlmGrapher default\n // 100,000 pts at 1Hz is 27.8hrs\n //\n // 100,000 takes 40ms, Chrome uses 160MB\n // this.data = []\n // const dataPoints = 100000\n // const items = 10\n // let pts = new Array(dataPoints)\n // let times = new Array(dataPoints)\n // let time = 1589398007\n // let series = [{}]\n // for (let i = 0; i < dataPoints; i++) {\n // times[i] = time\n // pts[i] = i\n // time += 1\n // }\n // this.data.push(times)\n // for (let i = 0; i < items; i++) {\n // this.data.push(pts.map(x => x + i))\n // series.push({\n // label: 'Item' + i,\n // stroke: this.colors[i]\n // })\n // }\n\n // NOTE: These are just initial settings ... actual series are added by this.graph.addSeries\n const { chartSeries, overviewSeries } = this.items.reduce(\n (seriesObj, item) => {\n const commonProps = {\n spanGaps: true,\n }\n seriesObj.chartSeries.push({\n ...commonProps,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => {\n return this.items[seriesIdx - 1].color\n },\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else {\n return rawValue == null ? '--' : rawValue.toFixed(3)\n }\n },\n })\n seriesObj.overviewSeries.push({\n ...commonProps,\n })\n return seriesObj\n },\n { chartSeries: [], overviewSeries: [] },\n )\n\n let chartOpts = {}\n if (this.sparkline) {\n this.hideToolbarData = true\n this.hideOverviewData = true\n this.showOverview = false\n chartOpts = {\n width: this.width,\n height: this.height,\n pxAlign: false,\n cursor: {\n show: false,\n },\n select: {\n show: false,\n },\n legend: {\n show: false,\n },\n scales: {\n x: {\n time: false,\n },\n },\n axes: [\n {\n show: false,\n },\n {\n show: false,\n },\n ],\n series: [\n {},\n {\n stroke: 'white', // TODO: Light / dark theme\n },\n ],\n }\n this.graph = new uPlot(\n chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n } else {\n // Uplot wants the real timezone name ('local' doesn't work)\n let timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone\n if (this.timeZone && this.timeZone !== 'local') {\n timeZoneName = this.timeZone\n }\n chartOpts = {\n ...this.getSize('chart'),\n ...this.getScales(),\n ...this.getAxes('chart'),\n // series: series, // TODO: Uncomment with the performance code\n plugins: [this.linesPlugin()],\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [\n {\n label: 'Time',\n value: (u, v) =>\n // Convert the unix timestamp into a formatted date / time\n v == null ? '--' : this.formatSeconds(v, this.timeZone),\n },\n ...chartSeries,\n ],\n cursor: {\n drag: {\n x: true,\n y: false,\n },\n // Sync the cursor across graphs so mouseovers are synced\n sync: {\n key: 'openc3',\n // setSeries links graphs so clicking an item to hide it also hides the other graph item\n // setSeries: true,\n },\n bind: {\n mouseup: (self, targ, handler) => {\n return (e) => {\n // Single click while paused will resume the graph\n // This makes it possible to resume in TlmViewer widgets\n if (this.state === 'pause' && self.select.width === 0) {\n this.$emit('start')\n }\n handler(e)\n }\n },\n },\n },\n hooks: {\n setScale: [\n (chart, key) => {\n if (key === 'x' && !this.zoomOverview && this.overview) {\n this.zoomChart = true\n let left = Math.round(\n this.overview.valToPos(chart.scales.x.min, 'x'),\n )\n let right = Math.round(\n this.overview.valToPos(chart.scales.x.max, 'x'),\n )\n this.overview.setSelect({ left, width: right - left })\n this.zoomChart = false\n }\n },\n ],\n setSelect: [\n (chart) => {\n // Pause the graph while selecting a range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n },\n ],\n ready: [\n (u) => {\n let canvas = u.root.querySelector('.u-over')\n canvas.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.itemMenu = false\n this.legendMenu = false\n this.editGraphMenuX = e.clientX\n this.editGraphMenuY = e.clientY\n this.editGraphMenu = true\n })\n let legend = u.root.querySelector('.u-legend')\n legend.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.editGraphMenu = false\n this.legendMenu = false\n this.itemMenuX = e.clientX\n this.itemMenuY = e.clientY\n // Grab the closest series and then figure out which index it is\n let seriesEl = e.target.closest('.u-series')\n let seriesIdx = Array.prototype.slice\n .call(legend.childNodes[0].childNodes)\n .indexOf(seriesEl)\n let series = u.series[seriesIdx]\n if (series.item) {\n this.selectedItem = series.item\n this.itemMenu = true\n } else {\n this.itemMenu = false\n this.legendMenuX = e.clientX\n this.legendMenuY = e.clientY\n this.legendMenu = true\n }\n })\n // Append the info to the legend\n legend.querySelector('tbody').appendChild(this.$refs.info)\n },\n ],\n },\n }\n this.graph = new uPlot(\n chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n\n const overviewOpts = {\n ...this.getSize('overview'),\n ...this.getScales(),\n ...this.getAxes('overview'),\n // series: series, // TODO: Uncomment with the performance code\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [...overviewSeries],\n cursor: {\n y: false,\n drag: {\n setScale: false,\n x: true,\n y: false,\n },\n },\n legend: {\n show: false,\n },\n hooks: {\n setSelect: [\n (chart) => {\n if (!this.zoomChart) {\n // Pause the graph while selecting an overview range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n this.zoomOverview = true\n let min = chart.posToVal(chart.select.left, 'x')\n let max = chart.posToVal(\n chart.select.left + chart.select.width,\n 'x',\n )\n this.graph.setScale('x', { min, max })\n this.zoomOverview = false\n }\n },\n ],\n },\n }\n if (!this.hideOverview) {\n this.overview = new uPlot(\n overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`),\n )\n }\n this.moveLegend(this.legendPosition)\n\n // Allow the charts to dynamically resize when the window resizes\n window.addEventListener('resize', this.resize)\n }\n\n if (this.state !== 'stop') {\n this.startGraph()\n }\n },\n beforeUnmount: function () {\n this.stopGraph()\n this.cable.disconnect()\n window.removeEventListener('resize', this.resize)\n },\n methods: {\n startGraph: function () {\n this.subscribe()\n this.timeout = setTimeout(() => {\n this.updateTimeout()\n }, this.refreshIntervalMs)\n },\n stopGraph: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n this.subscription = null\n }\n if (this.timeout) {\n clearTimeout(this.timeout)\n this.timeout = null\n }\n },\n updateTimeout: function () {\n this.updateGraphData()\n this.timeout = setTimeout(() => {\n this.updateTimeout()\n }, this.refreshIntervalMs)\n },\n updateGraphData: function () {\n // Ignore changes to the data while we're paused\n if (this.state === 'pause' || !this.dataChanged) {\n return\n }\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n let max = this.data[0][this.data[0].length - 1]\n let ptsMin = this.data[0][this.data[0].length - this.pointsGraphed]\n let min = this.data[0][0]\n if (min < max - this.secondsGraphed) {\n min = max - this.secondsGraphed\n }\n if (ptsMin > min) {\n min = ptsMin\n }\n this.graph.setScale('x', { min, max })\n this.dataChanged = false\n },\n formatLabel(item) {\n if (item.valueType === 'CONVERTED' && item.reduced === 'DECOM') {\n return item.itemName\n } else {\n let description = ''\n // Only display valueType if we're not CONVERTED\n if (item.valueType !== 'CONVERTED') {\n description += item.valueType\n }\n // Only display reduced if we're not DECOM\n if (item.reduced !== 'DECOM') {\n // If we already have the valueType add a space\n if (description !== '') {\n description += ' '\n }\n description += `${item.reduced.split('_')[1]} ${item.reducedType}`\n }\n return `${item.itemName} (${description})`\n }\n },\n moveLegend: function (desired) {\n switch (desired) {\n case 'bottom':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.remove('top-legend')\n break\n case 'top':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('top-legend')\n break\n case 'left':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.add('side-legend')\n this.graph.root.classList.add('left-legend')\n break\n case 'right':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('side-legend')\n break\n }\n this.legendPosition = desired\n this.resize()\n },\n clearErrors: function () {\n this.errors = []\n },\n editGraphClose: function (graph) {\n this.editGraph = false\n this.title = graph.title\n // Don't need to copy items because we don't modify them\n this.legendPosition = graph.legendPosition\n this.graphMinY = graph.graphMinY\n this.graphMaxY = graph.graphMaxY\n this.lines = [...graph.lines]\n this.graphStartDateTime = graph.startDateTime\n this.graphEndDateTime = graph.endDateTime\n // Allow the watch to update needToUpdate\n this.$nextTick(() => {\n if (this.needToUpdate) {\n if (this.subscription == null) {\n this.startGraph()\n } else {\n // NOTE: removing and adding back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n // Clone the items first because removeItems modifies this.items\n let clonedItems = JSON.parse(JSON.stringify(this.items))\n this.removeItems(clonedItems)\n setTimeout(() => {\n this.addItems(clonedItems)\n }, 0)\n }\n this.needToUpdate = false\n }\n })\n this.moveLegend(this.legendPosition)\n this.$emit('edit')\n },\n resize: function () {\n this.graph.setSize(this.getSize('chart'))\n if (this.overview) {\n this.overview.setSize(this.getSize('overview'))\n }\n this.$emit('resize', this.id)\n },\n expandAll: function () {\n this.fullWidth = true\n this.fullHeight = true\n this.resize()\n },\n collapseAll: function () {\n this.fullWidth = false\n this.fullHeight = false\n this.resize()\n },\n expandWidth: function () {\n this.fullWidth = true\n this.resize()\n },\n collapseWidth: function () {\n this.fullWidth = false\n this.resize()\n },\n expandHeight: function () {\n this.fullHeight = true\n this.resize()\n },\n collapseHeight: function () {\n this.fullHeight = false\n this.resize()\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-graph', this.id)\n },\n setGraphRange: function () {\n let pad = 0.1\n if (\n this.graphMinY ||\n this.graphMinY === 0 ||\n this.graphMaxY ||\n this.graphMaxY === 0\n ) {\n pad = 0\n }\n this.graph.scales.y.range = (u, dataMin, dataMax) => {\n let min = dataMin\n if (this.graphMinY || this.graphMinY === 0) {\n min = this.graphMinY\n }\n let max = dataMax\n if (this.graphMaxY || this.graphMaxY === 0) {\n max = this.graphMaxY\n }\n return uPlot.rangeNum(min, max, pad, true)\n }\n },\n subscribe: function () {\n this.cable\n .createSubscription('StreamingChannel', window.openc3Scope, {\n received: (data) => this.received(data),\n connected: () => {\n this.addItemsToSubscription(this.items)\n },\n disconnected: (data) => {\n // If allowReconnect is true it means we got a disconnect due to connection lost or server disconnect\n // If allowReconnect is false this is a normal server close or client close\n if (data.allowReconnect) {\n this.errors.push({\n type: 'disconnected',\n message: 'OpenC3 backend connection disconnected',\n time: new Date().getTime(),\n })\n }\n },\n rejected: () => {\n this.errors.push({\n type: 'rejected',\n message: 'OpenC3 backend connection rejected',\n time: new Date().getTime(),\n })\n },\n })\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n // throttle(cb, limit) {\n // let wait = false\n // return () => {\n // if (!wait) {\n // requestAnimationFrame(cb)\n // wait = true\n // setTimeout(() => {\n // wait = false\n // }, limit)\n // }\n // }\n // },\n getSize: function (type) {\n let navDrawerWidth = 0\n const navDrawer = document.getElementById('openc3-nav-drawer')\n if (navDrawer) {\n navDrawerWidth = navDrawer.classList.contains(\n 'v-navigation-drawer--active',\n )\n ? navDrawer.clientWidth\n : 0\n }\n let legendWidth = 0\n if (this.legendPosition === 'right' || this.legendPosition === 'left') {\n const legend = document.getElementsByClassName('u-legend')[0]\n legendWidth = legend.clientWidth\n }\n const viewWidth =\n Math.max(document.documentElement.clientWidth, window.innerWidth || 0) -\n navDrawerWidth -\n legendWidth\n const viewHeight = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0,\n )\n\n const panel = document.getElementsByClassName('v-expansion-panel')[0]\n let height = 100\n if (type === 'overview') {\n // Show overview if we're full height and we're not explicitly hiding it\n if (this.fullHeight && !this.hideOverviewData) {\n this.showOverview = true\n } else {\n this.showOverview = false\n }\n } else {\n // Height of chart is viewportSize - expansion-panel - overview - fudge factor (primarily padding)\n height = viewHeight - panel.clientHeight - height - 250\n if (!this.fullHeight) {\n height = height / 2.0 + 10 // 5px padding top and bottom\n }\n }\n // subtract off some arbitrary padding left and right to make the layout work\n let width = viewWidth - 70\n if (!this.fullWidth) {\n // 6px padding left and right defined in TlmGrapher.vue .item-content\n width = width / 2.0 - 12\n }\n return {\n width: this.width || width,\n height: this.height || height,\n }\n },\n getScales: function () {\n return {\n scales: {\n x: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [1566453600, 1566497660]\n return [dataMin, dataMax]\n },\n },\n y: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [-100, 100]\n return uPlot.rangeNum(dataMin, dataMax, 0.1, true)\n },\n },\n },\n }\n },\n getAxes: function (type) {\n let strokeColor = 'rgba(255, 255, 255, .1)'\n let axisColor = 'white'\n return {\n axes: [\n {\n stroke: axisColor,\n grid: {\n show: true,\n stroke: strokeColor,\n width: 2,\n },\n },\n {\n size: 80, // This size supports values up to 8 digits plus sign\n stroke: axisColor,\n grid: {\n show: type === 'overview' ? false : true,\n stroke: strokeColor,\n width: 2,\n },\n // Forces the axis values to be formatted correctly\n // especially with really small or large values\n values(u, splits) {\n if (\n splits.some((el) => el >= 10000000) ||\n splits.every((el) => el < 0.01)\n ) {\n splits = splits.map((split) => split.toExponential(3))\n }\n return splits\n },\n },\n ],\n }\n },\n closeEditItem: function (event) {\n this.editItem = false\n if (\n // If we have an end time and anything was changed we basically regraph\n (this.graphEndDateTime !== null && this.selectedItem !== event) ||\n // If we're live graphing we just regraph if the types change\n this.selectedItem.valueType !== event.valueType ||\n this.selectedItem.reduced !== event.reduced ||\n this.selectedItem.reducedType !== event.reducedType\n ) {\n this.changeItem(event)\n }\n },\n changeColor: function (event) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].color = event\n this.selectedItem.color = event\n this.graph.root.querySelectorAll('.u-marker')[index].style.borderColor =\n event\n },\n changeLimits: function (limits) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].limits = limits\n this.selectedItem.limits = limits\n this.limitsValues = limits\n },\n linesPlugin: function () {\n return {\n hooks: {\n draw: (u) => {\n const { ctx, bbox } = u\n // These are all in canvas units\n const yMin = u.valToPos(u.scales.y.min, 'y', true)\n const yMax = u.valToPos(u.scales.y.max, 'y', true)\n const redLow = u.valToPos(this.limitsValues[0], 'y', true)\n const yellowLow = u.valToPos(this.limitsValues[1], 'y', true)\n const yellowHigh = u.valToPos(this.limitsValues[2], 'y', true)\n const redHigh = u.valToPos(this.limitsValues[3], 'y', true)\n let height = 0\n\n // NOTE: These comparisons are tricky because the canvas\n // starts in the upper left with 0,0. Thus it grows downward\n // and to the right with increasing values. The comparisons\n // of scale and limitsValues use graph coordinates but the\n // fillRect calculations use the canvas coordinates.\n\n // Draw Y axis lines\n this.lines.forEach((line) => {\n if (\n u.scales.y.min <= line.yValue &&\n line.yValue <= u.scales.y.max\n ) {\n ctx.save()\n ctx.beginPath()\n ctx.strokeStyle = line.color\n ctx.lineWidth = 2\n ctx.moveTo(bbox.left, u.valToPos(line.yValue, 'y', true))\n ctx.lineTo(\n bbox.left + bbox.width,\n u.valToPos(line.yValue, 'y', true),\n )\n ctx.stroke()\n ctx.restore()\n }\n })\n\n ctx.save()\n ctx.beginPath()\n\n // Draw red limits\n ctx.fillStyle = 'rgba(255,0,0,0.15)'\n if (u.scales.y.min < this.limitsValues[0]) {\n let start = redLow < yMax ? yMax : redLow\n ctx.fillRect(bbox.left, redLow, bbox.width, yMin - start)\n }\n if (u.scales.y.max > this.limitsValues[3]) {\n let end = yMin < redHigh ? yMin : redHigh\n ctx.fillRect(bbox.left, yMax, bbox.width, end - yMax)\n }\n\n // Draw yellow limits\n ctx.fillStyle = 'rgba(255,255,0,0.15)'\n if (\n u.scales.y.min < this.limitsValues[1] && // yellowLow\n u.scales.y.max > this.limitsValues[0] // redLow\n ) {\n let start = yellowLow < yMax ? yMax : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, redLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[2] && // yellowHigh\n u.scales.y.min < this.limitsValues[3] // redHigh\n ) {\n let start = yMin < redHigh ? yMin : redHigh\n let end = yMin < yellowHigh ? yMin : yellowHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n\n // Draw green limits & operational limits\n ctx.fillStyle = 'rgba(0,255,0,0.15)'\n // If there are no operational limits the interior is all green\n if (this.limitsValues.length === 4) {\n // Determine if we show any green\n if (\n u.scales.y.min < this.limitsValues[2] && // yellowHigh\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = yellowHigh < yMax ? yMax : yellowHigh\n let end = yMin < yellowLow ? yMin : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n } else {\n // Operational limits\n const greenLow = u.valToPos(this.limitsValues[4], 'y', true)\n const greenHigh = u.valToPos(this.limitsValues[5], 'y', true)\n if (\n u.scales.y.min < this.limitsValues[4] && // greenLow\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = greenLow < yMax ? yMax : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, yellowLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[5] && // greenHigh\n u.scales.y.min < this.limitsValues[2] // yellowHigh\n ) {\n let start = yMin < yellowHigh ? yMin : yellowHigh\n let end = yMin < greenHigh ? yMin : greenHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.fillStyle = 'rgba(0,0,255,0.15)'\n let start = greenHigh < yMax ? yMax : greenHigh\n let end = yMin < greenLow ? yMin : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.stroke()\n ctx.restore()\n },\n },\n }\n },\n changeItem: function (event) {\n // NOTE: removing and adding items back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n this.removeItems([this.selectedItem])\n this.selectedItem.valueType = event.valueType\n this.selectedItem.reduced = event.reduced\n this.selectedItem.reducedType = event.reducedType\n setTimeout(() => {\n this.addItems([this.selectedItem])\n }, 0)\n },\n addItems: function (itemArray, type = 'CONVERTED') {\n itemArray.forEach((item) => {\n item.valueType ||= type // set the default type\n item.color ||= this.colors[this.colorIndex]\n item.limits ||= []\n\n if (item.limits.length > 0) {\n this.limitsValues = item.limits\n }\n\n this.colorIndex = (this.colorIndex + 1) % this.colors.length\n this.items.push(item)\n\n const index = this.data.length\n this.graph.addSeries(this.createSeriesConfig(item), index)\n\n if (this.overview) {\n this.overview.addSeries(this.createOverviewSeriesConfig(), index)\n }\n\n this.data.splice(index, 0, Array(this.data[0].length))\n this.indexes[this.subscriptionKey(item)] = index\n })\n\n this.updateColorIndex(itemArray)\n this.addItemsToSubscription(itemArray)\n this.$emit('resize')\n this.$emit('edit')\n },\n createSeriesConfig: function (item) {\n return {\n spanGaps: true,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else if (rawValue == null) {\n return '--'\n } else if (\n (Math.abs(rawValue) < 0.01 && rawValue !== 0) ||\n Math.abs(rawValue) >= 10000000\n ) {\n return rawValue.toExponential(6)\n } else {\n return rawValue.toFixed(6)\n }\n },\n }\n },\n createOverviewSeriesConfig: function () {\n return {\n spanGaps: true,\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n }\n },\n updateColorIndex: function (itemArray) {\n const lastItem = itemArray[itemArray.length - 1]\n if (lastItem) {\n const index = this.colors.indexOf(lastItem.color)\n if (index !== -1) {\n this.colorIndex = (index + 1) % this.colors.length\n }\n }\n },\n addItemsToSubscription: function (itemArray = this.items) {\n let theStartTime = this.startTime\n if (this.graphStartDateTime) {\n theStartTime = this.graphStartDateTime\n }\n if (this.subscription) {\n OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(\n (refreshed) => {\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n this.subscription.perform('add', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: itemArray.map(this.subscriptionKey),\n start_time: theStartTime,\n end_time: this.graphEndDateTime,\n })\n },\n )\n }\n },\n clearAllData: function () {\n // Clear all data so delete the time data as well\n this.data[0] = []\n this.clearData(this.items)\n },\n clearData: function (itemArray) {\n for (const key of itemArray.map(this.subscriptionKey)) {\n let index = this.indexes[key]\n this.data[index] = Array(this.data[0].length).fill(null)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n // data.length of 2 means we only have 1 item\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 2) {\n this.data[0] = []\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\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 this.items.splice(index - 1, 1)\n this.data.splice(index, 1)\n this.graph.delSeries(index)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.delSeries(index)\n this.overview.setData(this.data)\n }\n }\n // data.length of 1 means we've deleted all our items\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 1) {\n this.data[0] = []\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n this.$emit('resize')\n this.$emit('edit')\n },\n removeItemsFromSubscription: function (itemArray = this.items) {\n if (this.subscription) {\n this.subscription.perform('remove', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: itemArray.map(this.subscriptionKey),\n })\n }\n },\n reorderIndexes: function (key) {\n let index = this.indexes[key]\n delete this.indexes[key]\n for (let i in this.indexes) {\n if (this.indexes[i] > index) {\n this.indexes[i] -= 1\n }\n }\n return index\n },\n received: function (data) {\n this.cable.recordPing()\n // TODO: Shouldn't get errors but should we handle this every time?\n // if (json_data.error) {\n // console.log(json_data.error)\n // return\n // }\n for (let i = 0; i < data.length; i++) {\n let time = data[i].__time / 1000000000.0 // Time in seconds\n let length = this.data[0].length\n if (length === 0 || time > this.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 a slot with the exact same time value\n // Handle duplicate time by subtracting a small amount until we find an open slot\n while (index >= 0) {\n time -= 1e-5 // Subtract 10 microseconds\n index = bs(this.data[0], time, this.bs_comparator)\n }\n // Now that we have a unique time, insert 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 // Use the adjusted time but keep the original data\n this.set_data_at_index(ideal_index, time, data[i])\n } else {\n // Insert a new null slot at the ideal index\n let ideal_index = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(ideal_index, 0, null)\n }\n this.set_data_at_index(ideal_index, time, data[i])\n }\n }\n }\n // If we weren't passed a startTime notify grapher of our start\n if (this.startTime == null && this.data[0][0]) {\n let newStartTime = this.data[0][0] * 1000000000\n this.$emit('started', newStartTime)\n }\n this.dataChanged = true\n },\n bs_comparator: function (element, needle) {\n return element - needle\n },\n set_data_at_index: function (index, time, new_data) {\n this.data[0][index] = time\n for (const [key, value] of Object.entries(new_data)) {\n if (key === 'time') {\n continue\n }\n let key_index = this.indexes[key]\n if (key_index) {\n let array = this.data[key_index]\n // NaN and Infinite values are sent as objects with raw attribute set\n // to 'NaN', '-Infinity', or 'Infinity', just set data to null\n if (value?.raw) {\n array[index] = null\n } else if (typeof value === 'string') {\n // Can't graph strings so just set to null\n array[index] = null\n // If it's not already RAW, change the type to RAW\n // NOTE: Some items are RAW strings so they won't ever work\n if (!key.includes('__RAW')) {\n for (let item of this.items) {\n if (this.subscriptionKey(item) === key) {\n this.selectedItem = item\n break\n }\n }\n this.changeItem({\n valueType: 'RAW',\n reduced: this.selectedItem.reduced,\n reducedType: this.selectedItem.reducedType,\n })\n }\n } else {\n array[index] = value\n }\n }\n }\n },\n subscriptionKey: function (item) {\n let key = `${item.reduced}__TLM__${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`\n if (\n item.reduced === 'REDUCED_MINUTE' ||\n item.reduced === 'REDUCED_HOUR' ||\n item.reduced === 'REDUCED_DAY'\n ) {\n key += `__${item.reducedType}`\n }\n return key\n },\n },\n}\n</script>\n\n<style>\n.v-window-item {\n background-color: var(--color-background-surface-default);\n}\n\n/* left right stacked legend */\n.uplot.side-legend {\n display: flex;\n width: auto;\n}\n\n.uplot.side-legend .u-wrap {\n flex: none;\n}\n\n.uplot.side-legend .u-legend {\n text-align: left;\n margin-left: 0;\n width: 220px;\n}\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\n/* left side we need to order the legend before the plot */\n.uplot.left-legend .u-legend {\n order: -1;\n}\n\n/* top legend */\n.uplot.top-legend {\n display: flex;\n flex-direction: column;\n}\n\n.uplot.top-legend .u-legend {\n order: -1;\n}\n\n/* This value is large enough to support negative scientific notation\n that we use on the value with rawValue.toExponential(6) */\n.u-legend.u-inline .u-series .u-value {\n width: 105px;\n}\n\n/* This value is large enough to support our date format: YYYY-MM-DD HH:MM:SS.sss */\n.u-legend.u-inline .u-series:first-child .u-value {\n width: 185px;\n}\n\n.u-select {\n background-color: rgba(255, 255, 255, 0.07);\n}\n</style>\n<style scoped>\n.active {\n background-color: var(--color-background-surface-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","TimeFilters","value","isValid","parse","itemId","item","date","toDate","dline","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_dialog","$options","_cache","$event","_withKeys","_ctx","_withCtx","_createVNode","_component_v_toolbar","_component_v_spacer","_createElementVNode","_component_v_card","_component_v_tabs","_component_v_tab","_createTextVNode","_component_v_tabs_window","_component_v_tabs_window_item","_component_v_row","_component_v_col","_component_v_card_text","_component_v_text_field","_component_v_select","_component_v_list","_component_v_list_item","_component_v_btn","_createElementBlock","_Fragment","_renderList","$props","_component_v_data_table","_component_v_card_actions","OpenC3Api","details","key","_component_v_card_title","_openBlock","_toDisplayString","_createCommentVNode","GraphEditDialog","GraphEditItemDialog","Cable","newState","oldState","newData","oldData","newVal","oldVal","val","index","chartSeries","overviewSeries","seriesObj","commonProps","u","seriesIdx","self","rawValue","chartOpts","uPlot","timeZoneName","ts","v","targ","handler","e","chart","left","right","legend","seriesEl","series","overviewOpts","min","max","ptsMin","description","desired","graph","clonedItems","pad","dataMin","dataMax","data","subscription","type","navDrawerWidth","navDrawer","legendWidth","viewWidth","viewHeight","panel","height","width","strokeColor","axisColor","splits","el","split","event","limits","ctx","bbox","yMin","yMax","redLow","yellowLow","yellowHigh","redHigh","line","start","end","greenLow","greenHigh","itemArray","lastItem","theStartTime","refreshed","time","length","j","bs","ideal_index","newStartTime","element","needle","new_data","key_index","array","_withModifiers","_normalizeClass","$data","_vShow","_component_v_expand_transition","_withDirectives","_component_graph_edit_dialog","_component_v_textarea","_component_v_menu","_component_v_list_item_title","_component_graph_edit_item_dialog","_component_v_list_subheader","_component_v_icon","_component_v_tooltip","props","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
1
+ {"version":3,"file":"Graph-DCihpnT0.js","sources":["../src/components/GraphEditDialog.vue","../src/components/GraphEditItemDialog.vue","../src/components/Graph.vue"],"sourcesContent":["<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" max-width=\"700\" @keydown.esc=\"$emit('cancel')\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Edit Graph </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-tabs v-model=\"tab\" class=\"ml-3\">\n <v-tab value=\"0\"> Settings </v-tab>\n <v-tab value=\"1\"> Scale / Lines </v-tab>\n <v-tab value=\"2\"> Items </v-tab>\n </v-tabs>\n <v-tabs-window v-model=\"tab\">\n <v-tabs-window-item value=\"0\" eager>\n <div class=\"edit-box\">\n <v-row>\n <v-col>\n <v-card-text class=\"pa-0\">\n <v-text-field\n v-model=\"graph.title\"\n class=\"pb-2\"\n label=\"Title\"\n hide-details\n />\n </v-card-text>\n </v-col>\n <v-col>\n <v-select\n v-model=\"graph.legendPosition\"\n label=\"Legend Position\"\n hide-details\n :items=\"legendPositions\"\n style=\"max-width: 280px\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Select a start date/time for the graph. Leave blank for start now.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"startDate\"\n label=\"Start Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"startTime\"\n label=\"Start Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n <v-card-text class=\"pa-0\">\n Select a end date/time for the graph. Leave blank for continuous\n real-time graphing.\n </v-card-text>\n <v-row>\n <v-col>\n <v-text-field\n v-model=\"endDate\"\n label=\"End Date\"\n :name=\"`date${Date.now()}`\"\n :rules=\"[rules.date]\"\n type=\"date\"\n />\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n v-model=\"endTime\"\n label=\"End Time\"\n :name=\"`time${Date.now()}`\"\n :rules=\"[rules.time]\"\n type=\"time\"\n step=\"1\"\n />\n </v-col>\n </v-row>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"1\" eager>\n <div class=\"edit-box\">\n <v-card-text class=\"pa-0\">\n Set a min or max Y value to override automatic scaling\n </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMinY\"\n hide-details\n label=\"Min Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n v-model=\"graph.graphMaxY\"\n hide-details\n label=\"Max Y Axis (Optional)\"\n type=\"number\"\n />\n </v-col>\n </v-row>\n </div>\n <div class=\"edit-box\">\n <v-list density=\"compact\" class=\"horizontal-lines\">\n <v-list-item>\n <span style=\"padding-top: 5px\">\n Add horizontal lines to the graph\n </span>\n <v-spacer />\n <v-btn @click=\"addLine()\"> New Line </v-btn>\n </v-list-item>\n <v-list-item\n v-for=\"(item, i) in graph.lines\"\n :key=\"i\"\n :value=\"item\"\n color=\"primary\"\n >\n <v-row>\n <v-col>\n <v-text-field v-model=\"item.yValue\" label=\"Y Value\" />\n </v-col>\n <v-col>\n <v-select\n v-model=\"item.color\"\n label=\"Color\"\n hide-details\n :items=\"colors\"\n />\n </v-col>\n <v-col>\n <v-btn\n style=\"padding: 30px\"\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Line\"\n @click=\"removeLine(item)\"\n />\n </v-col>\n </v-row>\n </v-list-item>\n </v-list>\n </div>\n </v-tabs-window-item>\n <v-tabs-window-item value=\"2\" eager>\n <v-data-table\n item-key=\"itemId\"\n class=\"elevation-1 my-2\"\n data-test=\"edit-graph-items\"\n :headers=\"itemHeaders\"\n :items=\"editItems\"\n :items-per-page=\"5\"\n :footer-props=\"{\n 'items-per-page-options': [5],\n }\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Remove Item\"\n @click=\"$emit('remove', item)\"\n />\n </template>\n <template #no-data>\n <span> Currently no items on this graph </span>\n </template>\n </v-data-table>\n </v-tabs-window-item>\n </v-tabs-window>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"closeOk\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { TimeFilters } from '@/util'\nimport { isValid, parse, toDate } from 'date-fns'\nexport default {\n mixins: [TimeFilters],\n props: {\n modelValue: Boolean, // modelValue is the default prop when using v-model\n title: {\n type: String,\n required: true,\n },\n legendPosition: {\n type: String,\n required: true,\n },\n items: {\n type: Array,\n required: true,\n },\n graphMinY: {\n type: Number,\n },\n graphMaxY: {\n type: Number,\n },\n lines: {\n type: Array,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n startDateTime: {\n type: Number,\n },\n endDateTime: {\n type: Number,\n },\n timeZone: {\n type: String,\n required: true,\n },\n },\n data: function () {\n return {\n tab: 0,\n graph: {},\n legendPositions: ['top', 'bottom', 'left', 'right'],\n startDate: null,\n startTime: null,\n endDate: null,\n endTime: null,\n lineHeaders: [\n { title: 'Y Value', value: 'yValue' },\n { title: 'Color', value: 'color' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n itemHeaders: [\n { title: 'Target Name', value: 'targetName' },\n { title: 'Packet Name', value: 'packetName' },\n { title: 'Item Name', value: 'itemName' },\n { title: 'Actions', value: 'actions', sortable: false },\n ],\n rules: {\n date: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'yyyy-MM-dd', new Date())) ||\n 'Invalid date (YYYY-MM-DD)'\n )\n } catch (e) {\n return 'Invalid date (YYYY-MM-DD)'\n }\n },\n time: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'HH:mm:ss', new Date())) ||\n 'Invalid time (HH:MM:SS)'\n )\n } catch (e) {\n return 'Invalid time (HH:MM:SS)'\n }\n },\n },\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n editItems: function () {\n if (!this.items) return []\n let itemId = 0\n return this.items.map((item) => {\n itemId += 1\n return { ...item, itemId }\n })\n },\n },\n created() {\n this.graph = {\n title: this.title,\n legendPosition: this.legendPosition,\n items: this.items,\n graphMinY: this.graphMinY,\n graphMaxY: this.graphMaxY,\n lines: [...this.lines],\n }\n // Set the date and time if they pass a dateTime or set a default\n // Start needs a default because if the timeZone is UTC the time will still be local time\n if (this.startDateTime) {\n // Use the passed dateTime as is\n let date = toDate(this.startDateTime / 1000000)\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n } else {\n // Create a new date 1 hr in the past as a default\n let date = new Date() - 3600000\n this.startDate = this.formatDate(date, this.timeZone)\n this.startTime = this.formatTimeHMS(date, this.timeZone)\n }\n // Only set end date / time if it is explicitly passed\n if (this.endDateTime) {\n let date = toDate(this.endDateTime / 1000000)\n this.endDate = this.formatDate(date, this.timeZone)\n this.endTime = this.formatTimeHMS(date, this.timeZone)\n }\n },\n methods: {\n closeOk() {\n if (!!this.startDate && !!this.startTime) {\n this.graph.startDateTime = this.startDate + ' ' + this.startTime\n } else {\n this.graph.startDateTime = null\n }\n if (!!this.endDate && !!this.endTime) {\n this.graph.endDateTime = this.endDate + ' ' + this.endTime\n } else {\n this.graph.endDateTime = null\n }\n this.$emit('ok', this.graph)\n },\n addLine() {\n this.graph.lines.push({ yValue: 0, color: 'white' })\n },\n removeLine(dline) {\n let i = this.graph.lines.indexOf(dline)\n this.graph.lines.splice(i, 1)\n },\n },\n}\n</script>\n\n<style>\n.edit-box {\n color: hsla(0, 0%, 100%, 0.7);\n background-color: var(--color-background-surface-default);\n padding: 10px;\n margin-top: 10px;\n}\n\n/* For the Y Axis item editor within the Edit Dialog */\n.v-small-dialog__content {\n background-color: var(--color-background-surface-selected);\n padding: 5px 5px;\n}\n\n.horizontal-lines {\n background-color: var(--color-background-surface-default);\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2023, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit Item dialog -->\n <v-dialog v-model=\"show\" width=\"400\" @keydown.enter=\"success()\">\n <v-card>\n <v-card-title class=\"mb-2\">Edit Item</v-card-title>\n <v-card-text>\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n v-model=\"editItem.valueType\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Reduction\"\n :items=\"reduction\"\n v-model=\"editItem.reduced\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Reduced Type\"\n :items=\"reducedTypes\"\n :disabled=\"editItem.reduced === 'DECOM'\"\n v-model=\"editItem.reducedType\"\n class=\"mb-2\"\n />\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Color\"\n :items=\"colors\"\n v-model=\"editItem.color\"\n @update:model-value=\"$emit('changeColor', $event)\"\n class=\"mb-2\"\n />\n <div v-if=\"limitsNames.length > 1\">\n <v-select\n variant=\"outlined\"\n hide-details\n label=\"Display Limits\"\n :items=\"limitsNames\"\n v-model=\"limitsName\"\n @update:model-value=\"$emit('changeLimits', limits[limitsName])\"\n />\n <div class=\"pa-3\">{{ limitsName }}: {{ limits[limitsName] }}</div>\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"$emit('cancel')\"> Cancel </v-btn>\n <v-btn variant=\"flat\" @click=\"$emit('close', editItem)\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\nexport default {\n props: {\n modelValue: Boolean,\n item: {\n type: Object,\n required: true,\n },\n colors: {\n type: Array,\n required: true,\n },\n },\n data: function () {\n return {\n editItem: null,\n limitsName: 'NONE',\n // NONE: [] matches the default limits assigned in Graph addItems\n limits: { NONE: [] },\n valueTypes: ['CONVERTED', 'RAW'],\n reduction: [\n // Map NONE to DECOM for clarity\n { title: 'NONE', value: 'DECOM' },\n { title: 'REDUCED_MINUTE', value: 'REDUCED_MINUTE' },\n { title: 'REDUCED_HOUR', value: 'REDUCED_HOUR' },\n { title: 'REDUCED_DAY', value: 'REDUCED_DAY' },\n ],\n reducedTypes: ['MIN', 'MAX', 'AVG', 'STDDEV'],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n limitsNames() {\n return Object.keys(this.limits)\n },\n },\n async created() {\n this.editItem = { ...this.item }\n new OpenC3Api()\n .get_item(this.item.targetName, this.item.packetName, this.item.itemName)\n .then((details) => {\n for (const [key, value] of Object.entries(details.limits)) {\n if (Object.keys(value).includes('red_low')) {\n this.limits[key] = Object.values(value)\n }\n }\n // Locate the key for the value array that we pass in\n this.limitsName = Object.keys(this.limits).find(\n // Little hack to compare arrays you convert them to strings\n (key) => this.limits[key] + '' === this.editItem.limits + '',\n )\n })\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n#\n# A portion of this file was funded by Blue Origin Enterprises, L.P.\n# See https://github.com/OpenC3/cosmos/pull/1957\n-->\n\n<template>\n <div @click.prevent=\"$emit('click')\">\n <v-card>\n <v-toolbar\n v-show=\"!hideToolbarData\"\n height=\"24\"\n class=\"pl-2 pr-2\"\n :class=\"selectedGraphId === id ? 'active' : ''\"\n >\n <v-btn\n v-show=\"errors.length !== 0\"\n class=\"mx-2\"\n icon=\"mdi-alert\"\n density=\"compact\"\n variant=\"text\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"edit-graph-icon\"\n aria-label=\"Edit Graph\"\n @click=\"\n () => {\n editGraph = true\n }\n \"\n />\n\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n\n <template v-if=\"expand\">\n <v-btn\n v-if=\"calcFullSize\"\n icon=\"mdi-arrow-collapse\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-all\"\n @click=\"collapseAll\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-all\"\n @click=\"expandAll\"\n />\n\n <v-btn\n v-if=\"fullWidth\"\n icon=\"mdi-arrow-collapse-horizontal\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-width\"\n @click=\"collapseWidth\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand-horizontal\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-width\"\n @click=\"expandWidth\"\n />\n\n <v-btn\n v-if=\"fullHeight\"\n icon=\"mdi-arrow-collapse-vertical\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"collapse-height\"\n @click=\"collapseHeight\"\n />\n <v-btn\n v-else\n icon=\"mdi-arrow-expand-vertical\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"expand-height\"\n @click=\"expandHeight\"\n />\n </template>\n\n <v-btn\n v-if=\"expand\"\n icon=\"mdi-window-minimize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-else\n icon=\"mdi-window-maximize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n />\n\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-graph-icon\"\n @click.stop=\"$emit('close-graph')\"\n />\n </v-toolbar>\n\n <v-expand-transition>\n <div v-show=\"expand\" id=\"chart\" ref=\"chart\" class=\"pa-1\">\n <div :id=\"`chart${id}`\"></div>\n <div id=\"betweenCharts\"></div>\n <div v-show=\"showOverview\" :id=\"`overview${id}`\"></div>\n </div>\n </v-expand-transition>\n </v-card>\n\n <!-- Edit graph dialog -->\n <graph-edit-dialog\n v-if=\"editGraph\"\n v-model=\"editGraph\"\n :title=\"title\"\n :legend-position=\"legendPosition\"\n :items=\"items\"\n :graph-min-y=\"graphMinY\"\n :graph-max-y=\"graphMaxY\"\n :lines=\"lines\"\n :colors=\"colors\"\n :start-date-time=\"graphStartDateTime\"\n :end-date-time=\"graphEndDateTime\"\n :time-zone=\"timeZone\"\n @remove=\"removeItems([$event])\"\n @ok=\"editGraphClose\"\n @cancel=\"editGraph = false\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" max-width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n v-model=\"title\"\n readonly\n hide-details\n class=\"pb-2\"\n label=\"Graph Title\"\n />\n </v-row>\n <v-row class=\"my-3\">\n <v-textarea readonly rows=\"8\" :value=\"error\" />\n </v-row>\n <v-row>\n <v-btn block @click=\"clearErrors\"> Clear </v-btn>\n </v-row>\n </v-card>\n </v-dialog>\n\n <!-- Edit right click context menu -->\n <v-menu\n v-if=\"editGraphMenu\"\n v-model=\"editGraphMenu\"\n :target=\"[editGraphMenuX, editGraphMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"editGraph = true\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ title }}\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <graph-edit-item-dialog\n v-if=\"editItem\"\n v-model=\"editItem\"\n :colors=\"colors\"\n :item=\"selectedItem\"\n @change-color=\"changeColor\"\n @change-limits=\"changeLimits\"\n @cancel=\"editItem = false\"\n @close=\"closeEditItem\"\n />\n\n <!-- Edit Item right click context menu -->\n <v-menu\n v-if=\"itemMenu\"\n v-model=\"itemMenu\"\n :target=\"[itemMenuX, itemMenuY]\"\n absolute\n offset-y\n >\n <v-list nav density=\"compact\">\n <v-list-subheader>\n {{ selectedItem.targetName }}\n {{ selectedItem.packetName }}\n {{ selectedItem.itemName }}\n </v-list-subheader>\n <v-list-item @click=\"editItem = true\">\n <template #prepend>\n <v-icon icon=\"mdi-pencil\" />\n </template>\n <v-list-item-title> Edit </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"clearData([selectedItem])\">\n <template #prepend>\n <v-icon icon=\"mdi-eraser\" />\n </template>\n <v-list-item-title> Clear </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"removeItems([selectedItem])\">\n <template #prepend>\n <v-icon icon=\"mdi-delete\" />\n </template>\n <v-list-item-title> Delete </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <!-- Edit Legend right click context menu -->\n <v-menu\n v-if=\"legendMenu\"\n v-model=\"legendMenu\"\n :target=\"[legendMenuX, legendMenuY]\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"moveLegend('top')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Top\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('bottom')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Bottom\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('left')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend Left\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"moveLegend('right')\">\n <v-list-item-title style=\"cursor: pointer\">\n Legend RIght\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <div v-if=\"!sparkline\" ref=\"info\" class=\"u-series\">\n <v-tooltip\n text=\"Click item to toggle, Right click to edit\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-icon v-bind=\"props\"> mdi-information-variant-circle </v-icon>\n </template>\n </v-tooltip>\n </div>\n </div>\n</template>\n\n<script>\nimport GraphEditDialog from './GraphEditDialog.vue'\nimport GraphEditItemDialog from './GraphEditItemDialog.vue'\nimport uPlot from 'uplot'\nimport bs from 'binary-search'\nimport { Cable } from '@openc3/js-common/services'\nimport { TimeFilters } from '@/util'\n\nimport 'uplot/dist/uPlot.min.css'\n\nexport default {\n components: {\n GraphEditDialog,\n GraphEditItemDialog,\n },\n mixins: [TimeFilters],\n props: {\n id: {\n type: Number,\n required: true,\n },\n selectedGraphId: {\n type: Number,\n // Not required because we pass null\n },\n state: {\n type: String,\n required: true,\n },\n // start time in nanoseconds to start the graph\n // this allows multiple graphs to be synchronized\n startTime: {\n type: Number,\n },\n secondsGraphed: {\n type: Number,\n required: true,\n },\n pointsSaved: {\n type: Number,\n required: true,\n },\n pointsGraphed: {\n type: Number,\n required: true,\n },\n refreshIntervalMs: {\n type: Number,\n default: 200,\n },\n hideToolbar: {\n type: Boolean,\n default: false,\n },\n hideOverview: {\n type: Boolean,\n default: false,\n },\n sparkline: {\n type: Boolean,\n default: false,\n },\n initialItems: {\n type: Array,\n },\n // These allow the parent to force a specific height and/or width\n height: {\n type: Number,\n },\n width: {\n type: Number,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n data() {\n return {\n lines: [],\n active: true,\n expand: true,\n fullWidth: true,\n fullHeight: true,\n graph: null,\n editGraph: false,\n editGraphMenu: false,\n editGraphMenuX: 0,\n editGraphMenuY: 0,\n editItem: false,\n itemMenu: false,\n itemMenuX: 0,\n itemMenuY: 0,\n legendMenu: false,\n legendMenuX: 0,\n legendMenuY: 0,\n legendPosition: 'bottom',\n selectedItem: null,\n hideToolbarData: this.hideToolbar,\n showOverview: !this.hideOverview,\n hideOverviewData: this.hideOverview,\n title: '',\n overview: null,\n data: [[]],\n dataChanged: false,\n timeout: null,\n graphMinY: null,\n graphMaxY: null,\n graphStartDateTime: null,\n graphEndDateTime: null,\n indexes: {},\n items: this.initialItems || [],\n limitsValues: [],\n drawInterval: null,\n zoomChart: false,\n zoomOverview: false,\n cable: new Cable(),\n subscription: null,\n needToUpdate: false,\n errorDialog: false,\n errors: [],\n colorIndex: 0,\n colors: [\n // The first 3 are taken from the Astro css definitions for\n // --color-data-visualization-1 through 3\n '#00c7cb',\n '#938bdb',\n '#4dacff',\n 'lime',\n 'darkorange',\n 'red',\n 'gold',\n 'hotpink',\n 'tan',\n 'cyan',\n 'maroon',\n 'blue',\n 'teal',\n 'purple',\n 'green',\n 'brown',\n 'lightblue',\n 'white',\n 'black',\n ],\n }\n },\n computed: {\n calcFullSize: function () {\n return this.fullWidth || this.fullHeight\n },\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n return JSON.stringify(this.errors, null, 4)\n }\n return null\n },\n },\n watch: {\n state: function (newState, oldState) {\n switch (newState) {\n case 'start':\n // Only subscribe if we were previously stopped\n // If we were paused we do nothing ... see the data function\n if (oldState === 'stop') {\n this.startGraph()\n }\n break\n // case 'pause': Nothing to do ... see the data function\n case 'stop':\n this.stopGraph()\n break\n }\n },\n data: function (newData, oldData) {\n this.dataChanged = true\n },\n graphMinY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMinY = val\n }\n this.setGraphRange()\n },\n graphMaxY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMaxY = val\n }\n this.setGraphRange()\n },\n graphStartDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphStartDateTime =\n this.parseDateTime(this.graphStartDateTime, this.timeZone) * 1000000\n if (this.graphStartDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the start date time we need to update\n this.graphStartDateTime = null\n this.needToUpdate = true\n }\n },\n graphEndDateTime: function (newVal, oldVal) {\n if (newVal && typeof newVal === 'string') {\n this.graphEndDateTime =\n this.parseDateTime(this.graphEndDateTime, this.timeZone) * 1000000\n if (this.graphEndDateTime !== oldVal) {\n this.needToUpdate = true\n }\n } else if (newVal === null && oldVal) {\n // If they clear the end date time we need to update\n this.graphEndDateTime = null\n this.needToUpdate = true\n }\n },\n },\n created() {\n this.title = `Graph ${this.id}`\n for (const [index, item] of this.items.entries()) {\n this.data.push([]) // initialize the empty data arrays\n this.indexes[this.subscriptionKey(item)] = index + 1\n if (item.color === undefined) {\n item.color = this.colors[this.colorIndex]\n }\n this.colorIndex++\n if (this.colorIndex === this.colors.length) {\n this.colorIndex = 0\n }\n }\n },\n mounted() {\n // This code allows for temporary pulling in a patched uPlot\n // Also note you need to add 'async' before the mounted method for await\n // const plugin = document.createElement('script')\n // plugin.setAttribute(\n // 'src',\n // 'https://leeoniya.github.io/uPlot/dist/uPlot.iife.min.js'\n // )\n // plugin.async = true\n // document.head.appendChild(plugin)\n // await new Promise(r => setTimeout(r, 500)) // Allow the js to load\n\n // TODO: This is demo / performance code of multiple items with many data points\n // 10 items at 500,000 each renders immediately and uses 180MB in Chrome\n // Refresh still works, chrome is sluggish but once you pause it is very performant\n // 500,000 pts at 1Hz is 138.9hrs .. almost 6 days\n //\n // 10 items at 100,000 each is very performant ... 1,000,000 pts is Qt TlmGrapher default\n // 100,000 pts at 1Hz is 27.8hrs\n //\n // 100,000 takes 40ms, Chrome uses 160MB\n // this.data = []\n // const dataPoints = 100000\n // const items = 10\n // let pts = new Array(dataPoints)\n // let times = new Array(dataPoints)\n // let time = 1589398007\n // let series = [{}]\n // for (let i = 0; i < dataPoints; i++) {\n // times[i] = time\n // pts[i] = i\n // time += 1\n // }\n // this.data.push(times)\n // for (let i = 0; i < items; i++) {\n // this.data.push(pts.map(x => x + i))\n // series.push({\n // label: 'Item' + i,\n // stroke: this.colors[i]\n // })\n // }\n\n // NOTE: These are just initial settings ... actual series are added by this.graph.addSeries\n const { chartSeries, overviewSeries } = this.items.reduce(\n (seriesObj, item) => {\n const commonProps = {\n spanGaps: true,\n }\n seriesObj.chartSeries.push({\n ...commonProps,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => {\n return this.items[seriesIdx - 1].color\n },\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else {\n return rawValue == null ? '--' : rawValue.toFixed(3)\n }\n },\n })\n seriesObj.overviewSeries.push({\n ...commonProps,\n })\n return seriesObj\n },\n { chartSeries: [], overviewSeries: [] },\n )\n\n let chartOpts = {}\n if (this.sparkline) {\n this.hideToolbarData = true\n this.hideOverviewData = true\n this.showOverview = false\n chartOpts = {\n width: this.width,\n height: this.height,\n pxAlign: false,\n cursor: {\n show: false,\n },\n select: {\n show: false,\n },\n legend: {\n show: false,\n },\n scales: {\n x: {\n time: false,\n },\n },\n axes: [\n {\n show: false,\n },\n {\n show: false,\n },\n ],\n series: [\n {},\n {\n stroke: 'white', // TODO: Light / dark theme\n },\n ],\n }\n this.graph = new uPlot(\n chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n } else {\n // Uplot wants the real timezone name ('local' doesn't work)\n let timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone\n if (this.timeZone && this.timeZone !== 'local') {\n timeZoneName = this.timeZone\n }\n chartOpts = {\n ...this.getSize('chart'),\n ...this.getScales(),\n ...this.getAxes('chart'),\n // series: series, // TODO: Uncomment with the performance code\n plugins: [this.linesPlugin()],\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [\n {\n label: 'Time',\n value: (u, v) =>\n // Convert the unix timestamp into a formatted date / time\n v == null ? '--' : this.formatSeconds(v, this.timeZone),\n },\n ...chartSeries,\n ],\n cursor: {\n drag: {\n x: true,\n y: false,\n },\n // Sync the cursor across graphs so mouseovers are synced\n sync: {\n key: 'openc3',\n // setSeries links graphs so clicking an item to hide it also hides the other graph item\n // setSeries: true,\n },\n bind: {\n mouseup: (self, targ, handler) => {\n return (e) => {\n // Single click while paused will resume the graph\n // This makes it possible to resume in TlmViewer widgets\n if (this.state === 'pause' && self.select.width === 0) {\n this.$emit('start')\n }\n handler(e)\n }\n },\n },\n },\n hooks: {\n setScale: [\n (chart, key) => {\n if (key === 'x' && !this.zoomOverview && this.overview) {\n this.zoomChart = true\n let left = Math.round(\n this.overview.valToPos(chart.scales.x.min, 'x'),\n )\n let right = Math.round(\n this.overview.valToPos(chart.scales.x.max, 'x'),\n )\n this.overview.setSelect({ left, width: right - left })\n this.zoomChart = false\n }\n },\n ],\n setSelect: [\n (chart) => {\n // Pause the graph while selecting a range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n },\n ],\n ready: [\n (u) => {\n let canvas = u.root.querySelector('.u-over')\n canvas.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.itemMenu = false\n this.legendMenu = false\n this.editGraphMenuX = e.clientX\n this.editGraphMenuY = e.clientY\n this.editGraphMenu = true\n })\n let legend = u.root.querySelector('.u-legend')\n legend.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.editGraphMenu = false\n this.legendMenu = false\n this.itemMenuX = e.clientX\n this.itemMenuY = e.clientY\n // Grab the closest series and then figure out which index it is\n let seriesEl = e.target.closest('.u-series')\n let seriesIdx = Array.prototype.slice\n .call(legend.childNodes[0].childNodes)\n .indexOf(seriesEl)\n let series = u.series[seriesIdx]\n if (series.item) {\n this.selectedItem = series.item\n this.itemMenu = true\n } else {\n this.itemMenu = false\n this.legendMenuX = e.clientX\n this.legendMenuY = e.clientY\n this.legendMenu = true\n }\n })\n // Append the info to the legend\n legend.querySelector('tbody').appendChild(this.$refs.info)\n },\n ],\n },\n }\n this.graph = new uPlot(\n chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`),\n )\n\n const overviewOpts = {\n ...this.getSize('overview'),\n ...this.getScales(),\n ...this.getAxes('overview'),\n // series: series, // TODO: Uncomment with the performance code\n tzDate: (ts) => uPlot.tzDate(new Date(ts * 1e3), timeZoneName),\n series: [...overviewSeries],\n cursor: {\n y: false,\n drag: {\n setScale: false,\n x: true,\n y: false,\n },\n },\n legend: {\n show: false,\n },\n hooks: {\n setSelect: [\n (chart) => {\n if (!this.zoomChart) {\n // Pause the graph while selecting an overview range to zoom\n if (this.state === 'start' && chart.select.width > 0) {\n this.$emit('pause')\n }\n this.zoomOverview = true\n let min = chart.posToVal(chart.select.left, 'x')\n let max = chart.posToVal(\n chart.select.left + chart.select.width,\n 'x',\n )\n this.graph.setScale('x', { min, max })\n this.zoomOverview = false\n }\n },\n ],\n },\n }\n if (!this.hideOverview) {\n this.overview = new uPlot(\n overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`),\n )\n }\n this.moveLegend(this.legendPosition)\n\n // Allow the charts to dynamically resize when the window resizes\n window.addEventListener('resize', this.resize)\n }\n\n if (this.state !== 'stop') {\n this.startGraph()\n }\n },\n beforeUnmount: function () {\n this.stopGraph()\n this.cable.disconnect()\n window.removeEventListener('resize', this.resize)\n },\n methods: {\n startGraph: function () {\n this.subscribe()\n this.timeout = setTimeout(() => {\n this.updateTimeout()\n }, this.refreshIntervalMs)\n },\n stopGraph: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n this.subscription = null\n }\n if (this.timeout) {\n clearTimeout(this.timeout)\n this.timeout = null\n }\n },\n updateTimeout: function () {\n this.updateGraphData()\n this.timeout = setTimeout(() => {\n this.updateTimeout()\n }, this.refreshIntervalMs)\n },\n updateGraphData: function () {\n // Ignore changes to the data while we're paused\n if (this.state === 'pause' || !this.dataChanged) {\n return\n }\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n let max = this.data[0][this.data[0].length - 1]\n let ptsMin = this.data[0][this.data[0].length - this.pointsGraphed]\n let min = this.data[0][0]\n if (min < max - this.secondsGraphed) {\n min = max - this.secondsGraphed\n }\n if (ptsMin > min) {\n min = ptsMin\n }\n this.graph.setScale('x', { min, max })\n this.dataChanged = false\n },\n formatLabel(item) {\n if (item.valueType === 'CONVERTED' && item.reduced === 'DECOM') {\n return item.itemName\n } else {\n let description = ''\n // Only display valueType if we're not CONVERTED\n if (item.valueType !== 'CONVERTED') {\n description += item.valueType\n }\n // Only display reduced if we're not DECOM\n if (item.reduced !== 'DECOM') {\n // If we already have the valueType add a space\n if (description !== '') {\n description += ' '\n }\n description += `${item.reduced.split('_')[1]} ${item.reducedType}`\n }\n return `${item.itemName} (${description})`\n }\n },\n moveLegend: function (desired) {\n switch (desired) {\n case 'bottom':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.remove('top-legend')\n break\n case 'top':\n this.graph.root.classList.remove('side-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('top-legend')\n break\n case 'left':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.add('side-legend')\n this.graph.root.classList.add('left-legend')\n break\n case 'right':\n this.graph.root.classList.remove('top-legend')\n this.graph.root.classList.remove('left-legend')\n this.graph.root.classList.add('side-legend')\n break\n }\n this.legendPosition = desired\n this.resize()\n },\n clearErrors: function () {\n this.errors = []\n },\n editGraphClose: function (graph) {\n this.editGraph = false\n this.title = graph.title\n // Don't need to copy items because we don't modify them\n this.legendPosition = graph.legendPosition\n this.graphMinY = graph.graphMinY\n this.graphMaxY = graph.graphMaxY\n this.lines = [...graph.lines]\n this.graphStartDateTime = graph.startDateTime\n this.graphEndDateTime = graph.endDateTime\n // Allow the watch to update needToUpdate\n this.$nextTick(() => {\n if (this.needToUpdate) {\n if (this.subscription == null) {\n this.startGraph()\n } else {\n // NOTE: removing and adding back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n // Clone the items first because removeItems modifies this.items\n let clonedItems = JSON.parse(JSON.stringify(this.items))\n this.removeItems(clonedItems)\n setTimeout(() => {\n this.addItems(clonedItems)\n }, 0)\n }\n this.needToUpdate = false\n }\n })\n this.moveLegend(this.legendPosition)\n this.$emit('edit')\n },\n resize: function () {\n this.graph.setSize(this.getSize('chart'))\n if (this.overview) {\n this.overview.setSize(this.getSize('overview'))\n }\n this.$emit('resize', this.id)\n },\n expandAll: function () {\n this.fullWidth = true\n this.fullHeight = true\n this.resize()\n },\n collapseAll: function () {\n this.fullWidth = false\n this.fullHeight = false\n this.resize()\n },\n expandWidth: function () {\n this.fullWidth = true\n this.resize()\n },\n collapseWidth: function () {\n this.fullWidth = false\n this.resize()\n },\n expandHeight: function () {\n this.fullHeight = true\n this.resize()\n },\n collapseHeight: function () {\n this.fullHeight = false\n this.resize()\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-graph', this.id)\n },\n setGraphRange: function () {\n let pad = 0.1\n if (\n this.graphMinY ||\n this.graphMinY === 0 ||\n this.graphMaxY ||\n this.graphMaxY === 0\n ) {\n pad = 0\n }\n this.graph.scales.y.range = (u, dataMin, dataMax) => {\n let min = dataMin\n if (this.graphMinY || this.graphMinY === 0) {\n min = this.graphMinY\n }\n let max = dataMax\n if (this.graphMaxY || this.graphMaxY === 0) {\n max = this.graphMaxY\n }\n return uPlot.rangeNum(min, max, pad, true)\n }\n },\n subscribe: function () {\n this.cable\n .createSubscription('StreamingChannel', window.openc3Scope, {\n received: (data) => this.received(data),\n connected: () => {\n this.addItemsToSubscription(this.items)\n },\n disconnected: (data) => {\n // If allowReconnect is true it means we got a disconnect due to connection lost or server disconnect\n // If allowReconnect is false this is a normal server close or client close\n if (data.allowReconnect) {\n this.errors.push({\n type: 'disconnected',\n message: 'OpenC3 backend connection disconnected',\n time: new Date().getTime(),\n })\n }\n },\n rejected: () => {\n this.errors.push({\n type: 'rejected',\n message: 'OpenC3 backend connection rejected',\n time: new Date().getTime(),\n })\n },\n })\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n // throttle(cb, limit) {\n // let wait = false\n // return () => {\n // if (!wait) {\n // requestAnimationFrame(cb)\n // wait = true\n // setTimeout(() => {\n // wait = false\n // }, limit)\n // }\n // }\n // },\n getSize: function (type) {\n let navDrawerWidth = 0\n const navDrawer = document.getElementById('openc3-nav-drawer')\n if (navDrawer) {\n navDrawerWidth = navDrawer.classList.contains(\n 'v-navigation-drawer--active',\n )\n ? navDrawer.clientWidth\n : 0\n }\n let legendWidth = 0\n if (this.legendPosition === 'right' || this.legendPosition === 'left') {\n const legend = document.getElementsByClassName('u-legend')[0]\n legendWidth = legend.clientWidth\n }\n const viewWidth =\n Math.max(document.documentElement.clientWidth, window.innerWidth || 0) -\n navDrawerWidth -\n legendWidth\n const viewHeight = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0,\n )\n\n const panel = document.getElementsByClassName('v-expansion-panel')[0]\n let height = 100\n if (type === 'overview') {\n // Show overview if we're full height and we're not explicitly hiding it\n if (this.fullHeight && !this.hideOverviewData) {\n this.showOverview = true\n } else {\n this.showOverview = false\n }\n } else {\n // Height of chart is viewportSize - expansion-panel - overview - fudge factor (primarily padding)\n height = viewHeight - panel.clientHeight - height - 250\n if (!this.fullHeight) {\n height = height / 2.0 + 10 // 5px padding top and bottom\n }\n }\n // subtract off some arbitrary padding left and right to make the layout work\n let width = viewWidth - 70\n if (!this.fullWidth) {\n // 6px padding left and right defined in TlmGrapher.vue .item-content\n width = width / 2.0 - 12\n }\n return {\n width: this.width || width,\n height: this.height || height,\n }\n },\n getScales: function () {\n return {\n scales: {\n x: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [1566453600, 1566497660]\n return [dataMin, dataMax]\n },\n },\n y: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [-100, 100]\n return uPlot.rangeNum(dataMin, dataMax, 0.1, true)\n },\n },\n },\n }\n },\n getAxes: function (type) {\n let strokeColor = 'rgba(255, 255, 255, .1)'\n let axisColor = 'white'\n return {\n axes: [\n {\n stroke: axisColor,\n grid: {\n show: true,\n stroke: strokeColor,\n width: 2,\n },\n },\n {\n size: 80, // This size supports values up to 8 digits plus sign\n stroke: axisColor,\n grid: {\n show: type === 'overview' ? false : true,\n stroke: strokeColor,\n width: 2,\n },\n // Forces the axis values to be formatted correctly\n // especially with really small or large values\n values(u, splits) {\n if (\n splits.some((el) => el >= 10000000) ||\n splits.every((el) => el < 0.01)\n ) {\n splits = splits.map((split) => split.toExponential(3))\n }\n return splits\n },\n },\n ],\n }\n },\n closeEditItem: function (event) {\n this.editItem = false\n if (\n // If we have an end time and anything was changed we basically regraph\n (this.graphEndDateTime !== null && this.selectedItem !== event) ||\n // If we're live graphing we just regraph if the types change\n this.selectedItem.valueType !== event.valueType ||\n this.selectedItem.reduced !== event.reduced ||\n this.selectedItem.reducedType !== event.reducedType\n ) {\n this.changeItem(event)\n }\n },\n changeColor: function (event) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].color = event\n this.selectedItem.color = event\n this.graph.root.querySelectorAll('.u-marker')[index].style.borderColor =\n event\n },\n changeLimits: function (limits) {\n let key = this.subscriptionKey(this.selectedItem)\n let index = this.indexes[key]\n this.items[index - 1].limits = limits\n this.selectedItem.limits = limits\n this.limitsValues = limits\n },\n linesPlugin: function () {\n return {\n hooks: {\n draw: (u) => {\n const { ctx, bbox } = u\n // These are all in canvas units\n const yMin = u.valToPos(u.scales.y.min, 'y', true)\n const yMax = u.valToPos(u.scales.y.max, 'y', true)\n const redLow = u.valToPos(this.limitsValues[0], 'y', true)\n const yellowLow = u.valToPos(this.limitsValues[1], 'y', true)\n const yellowHigh = u.valToPos(this.limitsValues[2], 'y', true)\n const redHigh = u.valToPos(this.limitsValues[3], 'y', true)\n let height = 0\n\n // NOTE: These comparisons are tricky because the canvas\n // starts in the upper left with 0,0. Thus it grows downward\n // and to the right with increasing values. The comparisons\n // of scale and limitsValues use graph coordinates but the\n // fillRect calculations use the canvas coordinates.\n\n // Draw Y axis lines\n this.lines.forEach((line) => {\n if (\n u.scales.y.min <= line.yValue &&\n line.yValue <= u.scales.y.max\n ) {\n ctx.save()\n ctx.beginPath()\n ctx.strokeStyle = line.color\n ctx.lineWidth = 2\n ctx.moveTo(bbox.left, u.valToPos(line.yValue, 'y', true))\n ctx.lineTo(\n bbox.left + bbox.width,\n u.valToPos(line.yValue, 'y', true),\n )\n ctx.stroke()\n ctx.restore()\n }\n })\n\n ctx.save()\n ctx.beginPath()\n\n // Draw red limits\n ctx.fillStyle = 'rgba(255,0,0,0.15)'\n if (u.scales.y.min < this.limitsValues[0]) {\n let start = redLow < yMax ? yMax : redLow\n ctx.fillRect(bbox.left, redLow, bbox.width, yMin - start)\n }\n if (u.scales.y.max > this.limitsValues[3]) {\n let end = yMin < redHigh ? yMin : redHigh\n ctx.fillRect(bbox.left, yMax, bbox.width, end - yMax)\n }\n\n // Draw yellow limits\n ctx.fillStyle = 'rgba(255,255,0,0.15)'\n if (\n u.scales.y.min < this.limitsValues[1] && // yellowLow\n u.scales.y.max > this.limitsValues[0] // redLow\n ) {\n let start = yellowLow < yMax ? yMax : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, redLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[2] && // yellowHigh\n u.scales.y.min < this.limitsValues[3] // redHigh\n ) {\n let start = yMin < redHigh ? yMin : redHigh\n let end = yMin < yellowHigh ? yMin : yellowHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n\n // Draw green limits & operational limits\n ctx.fillStyle = 'rgba(0,255,0,0.15)'\n // If there are no operational limits the interior is all green\n if (this.limitsValues.length === 4) {\n // Determine if we show any green\n if (\n u.scales.y.min < this.limitsValues[2] && // yellowHigh\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = yellowHigh < yMax ? yMax : yellowHigh\n let end = yMin < yellowLow ? yMin : yellowLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n } else {\n // Operational limits\n const greenLow = u.valToPos(this.limitsValues[4], 'y', true)\n const greenHigh = u.valToPos(this.limitsValues[5], 'y', true)\n if (\n u.scales.y.min < this.limitsValues[4] && // greenLow\n u.scales.y.max > this.limitsValues[1] // yellowLow\n ) {\n let start = greenLow < yMax ? yMax : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, yellowLow - start)\n }\n if (\n u.scales.y.max > this.limitsValues[5] && // greenHigh\n u.scales.y.min < this.limitsValues[2] // yellowHigh\n ) {\n let start = yMin < yellowHigh ? yMin : yellowHigh\n let end = yMin < greenHigh ? yMin : greenHigh\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.fillStyle = 'rgba(0,0,255,0.15)'\n let start = greenHigh < yMax ? yMax : greenHigh\n let end = yMin < greenLow ? yMin : greenLow\n ctx.fillRect(bbox.left, start, bbox.width, end - start)\n }\n ctx.stroke()\n ctx.restore()\n },\n },\n }\n },\n changeItem: function (event) {\n // NOTE: removing and adding items back to back broke the streaming_api\n // because the messages got out of order (add before remove)\n // Code in openc3-cosmos-cmd-tlm-api/app/channels/application_cable/channel.rb\n // fixed the issue to enforce ordering.\n this.removeItems([this.selectedItem])\n this.selectedItem.valueType = event.valueType\n this.selectedItem.reduced = event.reduced\n this.selectedItem.reducedType = event.reducedType\n setTimeout(() => {\n this.addItems([this.selectedItem])\n }, 0)\n },\n addItems: function (itemArray, type = 'CONVERTED') {\n itemArray.forEach((item) => {\n item.valueType ||= type // set the default type\n item.color ||= this.colors[this.colorIndex]\n item.limits ||= []\n\n if (item.limits.length > 0) {\n this.limitsValues = item.limits\n }\n\n this.colorIndex = (this.colorIndex + 1) % this.colors.length\n this.items.push(item)\n\n const index = this.data.length\n this.graph.addSeries(this.createSeriesConfig(item), index)\n\n if (this.overview) {\n this.overview.addSeries(this.createOverviewSeriesConfig(), index)\n }\n\n this.data.splice(index, 0, Array(this.data[0].length))\n this.indexes[this.subscriptionKey(item)] = index\n })\n\n this.updateColorIndex(itemArray)\n this.addItemsToSubscription(itemArray)\n this.$emit('resize')\n this.$emit('edit')\n },\n createSeriesConfig: function (item) {\n return {\n spanGaps: true,\n item: item,\n label: this.formatLabel(item),\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n width: 2,\n value: (self, rawValue) => {\n if (typeof rawValue === 'string' || isNaN(rawValue)) {\n return 'NaN'\n } else if (rawValue == null) {\n return '--'\n } else if (\n (Math.abs(rawValue) < 0.01 && rawValue !== 0) ||\n Math.abs(rawValue) >= 10000000\n ) {\n return rawValue.toExponential(6)\n } else {\n return rawValue.toFixed(6)\n }\n },\n }\n },\n createOverviewSeriesConfig: function () {\n return {\n spanGaps: true,\n stroke: (u, seriesIdx) => this.items[seriesIdx - 1].color,\n }\n },\n updateColorIndex: function (itemArray) {\n const lastItem = itemArray[itemArray.length - 1]\n if (lastItem) {\n const index = this.colors.indexOf(lastItem.color)\n if (index !== -1) {\n this.colorIndex = (index + 1) % this.colors.length\n }\n }\n },\n addItemsToSubscription: function (itemArray = this.items) {\n let theStartTime = this.startTime\n if (this.graphStartDateTime) {\n theStartTime = this.graphStartDateTime\n }\n if (this.subscription) {\n OpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(\n (refreshed) => {\n if (refreshed) {\n OpenC3Auth.setTokens()\n }\n this.subscription.perform('add', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: itemArray.map(this.subscriptionKey),\n start_time: theStartTime,\n end_time: this.graphEndDateTime,\n })\n },\n )\n }\n },\n clearAllData: function () {\n // Clear all data so delete the time data as well\n this.data[0] = []\n this.clearData(this.items)\n },\n clearData: function (itemArray) {\n for (const key of itemArray.map(this.subscriptionKey)) {\n let index = this.indexes[key]\n this.data[index] = Array(this.data[0].length).fill(null)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n // data.length of 2 means we only have 1 item\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 2) {\n this.data[0] = []\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\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 this.items.splice(index - 1, 1)\n this.data.splice(index, 1)\n this.graph.delSeries(index)\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.delSeries(index)\n this.overview.setData(this.data)\n }\n }\n // data.length of 1 means we've deleted all our items\n // so delete all the time (data[0]) to start fresh\n if (this.data.length === 1) {\n this.data[0] = []\n this.graph.setData(this.data)\n if (this.overview) {\n this.overview.setData(this.data)\n }\n }\n this.$emit('resize')\n this.$emit('edit')\n },\n removeItemsFromSubscription: function (itemArray = this.items) {\n if (this.subscription) {\n this.subscription.perform('remove', {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: itemArray.map(this.subscriptionKey),\n })\n }\n },\n reorderIndexes: function (key) {\n let index = this.indexes[key]\n delete this.indexes[key]\n for (let i in this.indexes) {\n if (this.indexes[i] > index) {\n this.indexes[i] -= 1\n }\n }\n return index\n },\n received: function (data) {\n this.cable.recordPing()\n // TODO: Shouldn't get errors but should we handle this every time?\n // if (json_data.error) {\n // console.log(json_data.error)\n // return\n // }\n for (let i = 0; i < data.length; i++) {\n let time = data[i].__time / 1000000000.0 // Time in seconds\n let length = this.data[0].length\n if (length === 0 || time > this.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 a slot with the exact same time value\n // Handle duplicate time by subtracting a small amount until we find an open slot\n while (index >= 0) {\n time -= 1e-5 // Subtract 10 microseconds\n index = bs(this.data[0], time, this.bs_comparator)\n }\n // Now that we have a unique time, insert 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 // Use the adjusted time but keep the original data\n this.set_data_at_index(ideal_index, time, data[i])\n } else {\n // Insert a new null slot at the ideal index\n let ideal_index = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(ideal_index, 0, null)\n }\n this.set_data_at_index(ideal_index, time, data[i])\n }\n }\n }\n // If we weren't passed a startTime notify grapher of our start\n if (this.startTime == null && this.data[0][0]) {\n let newStartTime = this.data[0][0] * 1000000000\n this.$emit('started', newStartTime)\n }\n this.dataChanged = true\n },\n bs_comparator: function (element, needle) {\n return element - needle\n },\n set_data_at_index: function (index, time, new_data) {\n this.data[0][index] = time\n for (const [key, value] of Object.entries(new_data)) {\n if (key === 'time') {\n continue\n }\n let key_index = this.indexes[key]\n if (key_index) {\n let array = this.data[key_index]\n // NaN and Infinite values are sent as objects with raw attribute set\n // to 'NaN', '-Infinity', or 'Infinity', just set data to null\n if (value?.raw) {\n array[index] = null\n } else if (typeof value === 'string') {\n // Can't graph strings so just set to null\n array[index] = null\n // If it's not already RAW, change the type to RAW\n // NOTE: Some items are RAW strings so they won't ever work\n if (!key.includes('__RAW')) {\n for (let item of this.items) {\n if (this.subscriptionKey(item) === key) {\n this.selectedItem = item\n break\n }\n }\n this.changeItem({\n valueType: 'RAW',\n reduced: this.selectedItem.reduced,\n reducedType: this.selectedItem.reducedType,\n })\n }\n } else {\n array[index] = value\n }\n }\n }\n },\n subscriptionKey: function (item) {\n let key = `${item.reduced}__TLM__${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`\n if (\n item.reduced === 'REDUCED_MINUTE' ||\n item.reduced === 'REDUCED_HOUR' ||\n item.reduced === 'REDUCED_DAY'\n ) {\n key += `__${item.reducedType}`\n }\n return key\n },\n },\n}\n</script>\n\n<style>\n.v-window-item {\n background-color: var(--color-background-surface-default);\n}\n\n/* left right stacked legend */\n.uplot.side-legend {\n display: flex;\n width: auto;\n}\n\n.uplot.side-legend .u-wrap {\n flex: none;\n}\n\n.uplot.side-legend .u-legend {\n text-align: left;\n margin-left: 0;\n width: 220px;\n}\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\n/* left side we need to order the legend before the plot */\n.uplot.left-legend .u-legend {\n order: -1;\n}\n\n/* top legend */\n.uplot.top-legend {\n display: flex;\n flex-direction: column;\n}\n\n.uplot.top-legend .u-legend {\n order: -1;\n}\n\n/* This value is large enough to support negative scientific notation\n that we use on the value with rawValue.toExponential(6) */\n.u-legend.u-inline .u-series .u-value {\n width: 105px;\n}\n\n/* This value is large enough to support our date format: YYYY-MM-DD HH:MM:SS.sss */\n.u-legend.u-inline .u-series:first-child .u-value {\n width: 185px;\n}\n\n.u-select {\n background-color: rgba(255, 255, 255, 0.07);\n}\n</style>\n<style scoped>\n.active {\n background-color: var(--color-background-surface-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","TimeFilters","value","isValid","parse","itemId","item","date","toDate","dline","i","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_createBlock","_component_v_dialog","$options","_cache","$event","_withKeys","_ctx","_withCtx","_createVNode","_component_v_toolbar","_component_v_spacer","_createElementVNode","_component_v_card","_component_v_tabs","_component_v_tab","_createTextVNode","_component_v_tabs_window","_component_v_tabs_window_item","_component_v_row","_component_v_col","_component_v_card_text","_component_v_text_field","_component_v_select","_component_v_list","_component_v_list_item","_component_v_btn","_createElementBlock","_Fragment","_renderList","$props","_component_v_data_table","_component_v_card_actions","OpenC3Api","details","key","_component_v_card_title","_openBlock","_toDisplayString","_createCommentVNode","GraphEditDialog","GraphEditItemDialog","Cable","newState","oldState","newData","oldData","newVal","oldVal","val","index","chartSeries","overviewSeries","seriesObj","commonProps","u","seriesIdx","self","rawValue","chartOpts","uPlot","timeZoneName","ts","v","targ","handler","e","chart","left","right","legend","seriesEl","series","overviewOpts","min","max","ptsMin","description","desired","graph","clonedItems","pad","dataMin","dataMax","data","subscription","type","navDrawerWidth","navDrawer","legendWidth","viewWidth","viewHeight","panel","height","width","strokeColor","axisColor","splits","el","split","event","limits","ctx","bbox","yMin","yMax","redLow","yellowLow","yellowHigh","redHigh","line","start","end","greenLow","greenHigh","itemArray","lastItem","theStartTime","refreshed","time","length","j","bs","ideal_index","newStartTime","element","needle","new_data","key_index","array","_withModifiers","_normalizeClass","$data","_vShow","_component_v_expand_transition","_withDirectives","_component_graph_edit_dialog","_component_v_textarea","_component_v_menu","_component_v_list_item_title","_component_graph_edit_item_dialog","_component_v_list_subheader","_component_v_icon","_component_v_tooltip","props","_normalizeProps","_guardReactiveProps"],"mappings":"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"}