@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":"VWidget-BMxLXtSO.cjs","sources":["../../../node_modules/sprintf-js/src/sprintf.js","../src/widgets/FormatValueBase.js","../src/widgets/VWidget.js"],"sourcesContent":["/* global window, exports, define */\n\n!function() {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[+-]/\n }\n\n function sprintf(key) {\n // `arguments` is not an array, but should be fine for this call\n return sprintf_format(sprintf_parse(key), arguments)\n }\n\n function vsprintf(fmt, argv) {\n return sprintf.apply(null, [fmt].concat(argv || []))\n }\n\n function sprintf_format(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n for (i = 0; i < tree_length; i++) {\n if (typeof parse_tree[i] === 'string') {\n output += parse_tree[i]\n }\n else if (typeof parse_tree[i] === 'object') {\n ph = parse_tree[i] // convenience purposes only\n if (ph.keys) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < ph.keys.length; k++) {\n if (arg == undefined) {\n throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n }\n arg = arg[ph.keys[k]]\n }\n }\n else if (ph.param_no) { // positional argument (explicit)\n arg = argv[ph.param_no]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n arg = arg()\n }\n\n if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n }\n\n if (re.number.test(ph.type)) {\n is_positive = arg >= 0\n }\n\n switch (ph.type) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n break\n case 'e':\n arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n break\n case 'g':\n arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n break\n case 'o':\n arg = (parseInt(arg, 10) >>> 0).toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'T':\n arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'x':\n arg = (parseInt(arg, 10) >>> 0).toString(16)\n break\n case 'X':\n arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n break\n }\n if (re.json.test(ph.type)) {\n output += arg\n }\n else {\n if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n pad_length = ph.width - (sign + arg).length\n pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output\n }\n\n var sprintf_cache = Object.create(null)\n\n function sprintf_parse(fmt) {\n if (sprintf_cache[fmt]) {\n return sprintf_cache[fmt]\n }\n\n var _fmt = fmt, match, parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree.push(match[0])\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree.push('%')\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n }\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n }\n\n parse_tree.push(\n {\n placeholder: match[0],\n param_no: match[1],\n keys: match[2],\n sign: match[3],\n pad_char: match[4],\n align: match[5],\n width: match[6],\n precision: match[7],\n type: match[8]\n }\n )\n }\n else {\n throw new SyntaxError('[sprintf] unexpected placeholder')\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return sprintf_cache[fmt] = parse_tree\n }\n\n /**\n * export to either browser or node.js\n */\n /* eslint-disable quote-props */\n if (typeof exports !== 'undefined') {\n exports['sprintf'] = sprintf\n exports['vsprintf'] = vsprintf\n }\n if (typeof window !== 'undefined') {\n window['sprintf'] = sprintf\n window['vsprintf'] = vsprintf\n\n if (typeof define === 'function' && define['amd']) {\n define(function() {\n return {\n 'sprintf': sprintf,\n 'vsprintf': vsprintf\n }\n })\n }\n }\n /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport 'sprintf-js'\nexport default {\n methods: {\n formatValueBase(value, formatString) {\n if (this.isJsonString(value)) {\n return this.formatJsonString(value)\n }\n if (Array.isArray(value)) {\n return this.formatArray(value)\n }\n if (this.isObject(value)) {\n return ''\n }\n if (formatString && value) {\n return sprintf(formatString, value)\n }\n return String(value)\n },\n isJsonString(value) {\n return (\n value && value['json_class'] === 'String' && value['raw'] !== undefined\n )\n },\n formatJsonString(value) {\n let result = Array.from(value['raw'].slice(0, 32), (byte) =>\n ('0' + (byte & 0xff).toString(16)).slice(-2),\n )\n .join(' ')\n .toUpperCase()\n if (value['raw'].length > 32) {\n result += '...'\n }\n return result\n },\n formatArray(value) {\n return (\n '[' +\n value\n .map((item) => (typeof item === 'string' ? `\"${item}\"` : item))\n .join(', ') +\n ']'\n )\n },\n isObject(value) {\n return Object.prototype.toString.call(value).slice(8, -1) === 'Object'\n },\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { TimeFilters } from '@/util'\nimport Widget from './Widget'\nimport FormatValueBase from './FormatValueBase'\nexport default {\n mixins: [Widget, TimeFilters, FormatValueBase],\n // ValueWidget can either get it's value and limitsState directly through props\n // or it will register itself in the Vuex store and be updated asynchronously\n props: {\n value: {\n default: null,\n },\n limitsState: {\n type: String,\n default: null,\n },\n counter: {\n default: null,\n },\n formatString: null,\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n emits: ['addItem', 'deleteItem', 'open'],\n data() {\n return {\n appliedTimeZone: 'local',\n curValue: null,\n prevValue: null,\n grayLevel: 80,\n grayRate: 5,\n valueId: null,\n arrayIndex: null,\n viewDetails: false,\n contextMenuShown: false,\n x: 0,\n y: 0,\n contextMenuOptions: [\n {\n title: 'Details',\n action: () => {\n this.contextMenuShown = false\n this.viewDetails = true\n },\n },\n {\n title: 'Graph',\n action: () => {\n window.open(\n '/tools/tlmgrapher/' +\n encodeURIComponent(this.parameters[0]) +\n '/' +\n encodeURIComponent(this.parameters[1]) +\n '/' +\n encodeURIComponent(this.parameters[2]),\n '_blank',\n )\n },\n },\n ],\n }\n },\n watch: {\n _counter: function (newVal, oldVal) {\n if (this.curValue !== this.prevValue) {\n this.grayLevel = 80\n } else {\n this.grayLevel -= this.grayRate\n if (this.grayLevel < 30) {\n this.grayLevel = 30\n }\n }\n this.prevValue = this.curValue\n },\n },\n computed: {\n _value: function () {\n this.curValue = this.value\n if (this.curValue === null) {\n // See store.js for how this is set\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n if (\n this.arrayIndex !== null &&\n this.screenValues[this.valueId][0]\n ) {\n this.curValue =\n this.screenValues[this.valueId][0][this.arrayIndex]\n } else {\n this.curValue = this.screenValues[this.valueId][0]\n }\n }\n } else {\n this.curValue = null\n }\n }\n this.curValue = this.formatValue(this.curValue)\n return this.curValue\n },\n _limitsState: function () {\n let limitsState = this.limitsState\n if (limitsState === null) {\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n limitsState = this.screenValues[this.valueId][1]\n }\n } else {\n limitsState = null\n }\n }\n return limitsState\n },\n _counter: function () {\n let counter = this.counter\n if (counter === null) {\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n counter = this.screenValues[this.valueId][2]\n }\n } else {\n counter = null\n }\n }\n return counter\n },\n valueClass: function () {\n return 'value shrink pa-1 ' + 'openc3-' + this.limitsColor\n },\n astroStatus() {\n switch (this.limitsColor) {\n case 'green':\n return 'normal'\n case 'yellow':\n return 'caution'\n case 'red':\n return 'critical'\n case 'blue':\n // This one is a little weird but it matches our color scheme\n return 'standby'\n default:\n return null\n }\n },\n limitsColor() {\n let limitsState = this._limitsState\n if (limitsState != null) {\n switch (limitsState) {\n case 'GREEN':\n case 'GREEN_HIGH':\n case 'GREEN_LOW':\n return 'green'\n case 'YELLOW':\n case 'YELLOW_HIGH':\n case 'YELLOW_LOW':\n return 'yellow'\n case 'RED':\n case 'RED_HIGH':\n case 'RED_LOW':\n return 'red'\n case 'BLUE':\n return 'blue'\n case 'STALE':\n return 'purple'\n default:\n return 'white'\n }\n }\n return ''\n },\n limitsLetter() {\n let limitsState = this._limitsState\n if (limitsState != null) {\n let c = limitsState.charAt(0)\n if (limitsState.endsWith('_LOW')) {\n c = c.toLowerCase()\n }\n return c\n }\n return ''\n },\n },\n created() {\n // If they're not passing us the value and limitsState we have to register\n if (this.value === null || this.limitsState === null) {\n // Remove double bracket escaping. This means they actually have an item\n // with a bracket in the name, not an array index.\n if (this.parameters[2].includes('[[')) {\n this.parameters[2] = this.parameters[2]\n .replace('[[', '[')\n .replace(']]', ']')\n } else if (this.parameters[2].includes('[')) {\n // Brackets mean array indexes (normally, but see above)\n let match = this.parameters[2].match(/\\[(\\d+)\\]/)\n this.arrayIndex = parseInt(match[1])\n this.parameters[2] = this.parameters[2].replace(match[0], '')\n }\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${\n this.parameters[2]\n }__${this.getType()}`\n\n this.$emit('addItem', this.valueId)\n if (this.screenTimeZone) {\n this.appliedTimeZone = this.screenTimeZone\n } else {\n this.appliedTimeZone = this.timeZone\n }\n }\n },\n destroyed() {\n if (this.value === null || this.limitsState === null) {\n this.$emit('deleteItem', this.valueId)\n }\n },\n methods: {\n getType() {\n let type = 'WITH_UNITS'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n return type\n },\n formatValue(value) {\n if (\n value &&\n this.valueId &&\n (this.valueId.toUpperCase().includes('PACKET_TIMEFORMATTED') ||\n this.valueId.toUpperCase().includes('RECEIVED_TIMEFORMATTED'))\n ) {\n // Our dates have / rather than - which results in an invalid date on old browsers\n // when they call new Date(value)\n value = this.formatUtcToLocal(\n new Date(value.replaceAll('/', '-')),\n this.appliedTimeZone,\n )\n }\n return this.formatValueBase(value, this.formatString)\n },\n showContextMenu(e) {\n e.preventDefault()\n this.contextMenuShown = false\n this.x = e.clientX\n this.y = e.clientY\n this.$nextTick(() => {\n this.contextMenuShown = true\n })\n },\n },\n}\n"],"names":["re","sprintf","key","sprintf_format","sprintf_parse","vsprintf","fmt","argv","parse_tree","cursor","tree_length","arg","output","i","k","ph","pad","pad_character","pad_length","is_positive","sign","sprintf_cache","_fmt","match","arg_names","field_list","replacement_field","field_match","exports","FormatValueBase","value","formatString","result","byte","item","VWidget","Widget","TimeFilters","newVal","oldVal","limitsState","counter","c","type","e"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"VWidget-BMxLXtSO.cjs","sources":["../../../node_modules/sprintf-js/src/sprintf.js","../src/widgets/FormatValueBase.js","../src/widgets/VWidget.js"],"sourcesContent":["/* global window, exports, define */\n\n!function() {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[+-]/\n }\n\n function sprintf(key) {\n // `arguments` is not an array, but should be fine for this call\n return sprintf_format(sprintf_parse(key), arguments)\n }\n\n function vsprintf(fmt, argv) {\n return sprintf.apply(null, [fmt].concat(argv || []))\n }\n\n function sprintf_format(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n for (i = 0; i < tree_length; i++) {\n if (typeof parse_tree[i] === 'string') {\n output += parse_tree[i]\n }\n else if (typeof parse_tree[i] === 'object') {\n ph = parse_tree[i] // convenience purposes only\n if (ph.keys) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < ph.keys.length; k++) {\n if (arg == undefined) {\n throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n }\n arg = arg[ph.keys[k]]\n }\n }\n else if (ph.param_no) { // positional argument (explicit)\n arg = argv[ph.param_no]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n arg = arg()\n }\n\n if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n }\n\n if (re.number.test(ph.type)) {\n is_positive = arg >= 0\n }\n\n switch (ph.type) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n break\n case 'e':\n arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n break\n case 'g':\n arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n break\n case 'o':\n arg = (parseInt(arg, 10) >>> 0).toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'T':\n arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'x':\n arg = (parseInt(arg, 10) >>> 0).toString(16)\n break\n case 'X':\n arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n break\n }\n if (re.json.test(ph.type)) {\n output += arg\n }\n else {\n if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n pad_length = ph.width - (sign + arg).length\n pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output\n }\n\n var sprintf_cache = Object.create(null)\n\n function sprintf_parse(fmt) {\n if (sprintf_cache[fmt]) {\n return sprintf_cache[fmt]\n }\n\n var _fmt = fmt, match, parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree.push(match[0])\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree.push('%')\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n }\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n }\n\n parse_tree.push(\n {\n placeholder: match[0],\n param_no: match[1],\n keys: match[2],\n sign: match[3],\n pad_char: match[4],\n align: match[5],\n width: match[6],\n precision: match[7],\n type: match[8]\n }\n )\n }\n else {\n throw new SyntaxError('[sprintf] unexpected placeholder')\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return sprintf_cache[fmt] = parse_tree\n }\n\n /**\n * export to either browser or node.js\n */\n /* eslint-disable quote-props */\n if (typeof exports !== 'undefined') {\n exports['sprintf'] = sprintf\n exports['vsprintf'] = vsprintf\n }\n if (typeof window !== 'undefined') {\n window['sprintf'] = sprintf\n window['vsprintf'] = vsprintf\n\n if (typeof define === 'function' && define['amd']) {\n define(function() {\n return {\n 'sprintf': sprintf,\n 'vsprintf': vsprintf\n }\n })\n }\n }\n /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport 'sprintf-js'\nexport default {\n methods: {\n formatValueBase(value, formatString) {\n if (this.isJsonString(value)) {\n return this.formatJsonString(value)\n }\n if (Array.isArray(value)) {\n return this.formatArray(value)\n }\n if (this.isObject(value)) {\n return ''\n }\n if (formatString && value) {\n return sprintf(formatString, value)\n }\n return String(value)\n },\n isJsonString(value) {\n return (\n value && value['json_class'] === 'String' && value['raw'] !== undefined\n )\n },\n formatJsonString(value) {\n let result = Array.from(value['raw'].slice(0, 32), (byte) =>\n ('0' + (byte & 0xff).toString(16)).slice(-2),\n )\n .join(' ')\n .toUpperCase()\n if (value['raw'].length > 32) {\n result += '...'\n }\n return result\n },\n formatArray(value) {\n return (\n '[' +\n value\n .map((item) => (typeof item === 'string' ? `\"${item}\"` : item))\n .join(', ') +\n ']'\n )\n },\n isObject(value) {\n return Object.prototype.toString.call(value).slice(8, -1) === 'Object'\n },\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { TimeFilters } from '@/util'\nimport Widget from './Widget'\nimport FormatValueBase from './FormatValueBase'\nexport default {\n mixins: [Widget, TimeFilters, FormatValueBase],\n // ValueWidget can either get it's value and limitsState directly through props\n // or it will register itself in the Vuex store and be updated asynchronously\n props: {\n value: {\n default: null,\n },\n limitsState: {\n type: String,\n default: null,\n },\n counter: {\n default: null,\n },\n formatString: null,\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n emits: ['addItem', 'deleteItem', 'open'],\n data() {\n return {\n appliedTimeZone: 'local',\n curValue: null,\n prevValue: null,\n grayLevel: 80,\n grayRate: 5,\n valueId: null,\n arrayIndex: null,\n viewDetails: false,\n contextMenuShown: false,\n x: 0,\n y: 0,\n contextMenuOptions: [\n {\n title: 'Details',\n action: () => {\n this.contextMenuShown = false\n this.viewDetails = true\n },\n },\n {\n title: 'Graph',\n action: () => {\n window.open(\n '/tools/tlmgrapher/' +\n encodeURIComponent(this.parameters[0]) +\n '/' +\n encodeURIComponent(this.parameters[1]) +\n '/' +\n encodeURIComponent(this.parameters[2]),\n '_blank',\n )\n },\n },\n ],\n }\n },\n watch: {\n _counter: function (newVal, oldVal) {\n if (this.curValue !== this.prevValue) {\n this.grayLevel = 80\n } else {\n this.grayLevel -= this.grayRate\n if (this.grayLevel < 30) {\n this.grayLevel = 30\n }\n }\n this.prevValue = this.curValue\n },\n },\n computed: {\n _value: function () {\n this.curValue = this.value\n if (this.curValue === null) {\n // See store.js for how this is set\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n if (\n this.arrayIndex !== null &&\n this.screenValues[this.valueId][0]\n ) {\n this.curValue =\n this.screenValues[this.valueId][0][this.arrayIndex]\n } else {\n this.curValue = this.screenValues[this.valueId][0]\n }\n }\n } else {\n this.curValue = null\n }\n }\n this.curValue = this.formatValue(this.curValue)\n return this.curValue\n },\n _limitsState: function () {\n let limitsState = this.limitsState\n if (limitsState === null) {\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n limitsState = this.screenValues[this.valueId][1]\n }\n } else {\n limitsState = null\n }\n }\n return limitsState\n },\n _counter: function () {\n let counter = this.counter\n if (counter === null) {\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n counter = this.screenValues[this.valueId][2]\n }\n } else {\n counter = null\n }\n }\n return counter\n },\n valueClass: function () {\n return 'value shrink pa-1 ' + 'openc3-' + this.limitsColor\n },\n astroStatus() {\n switch (this.limitsColor) {\n case 'green':\n return 'normal'\n case 'yellow':\n return 'caution'\n case 'red':\n return 'critical'\n case 'blue':\n // This one is a little weird but it matches our color scheme\n return 'standby'\n default:\n return null\n }\n },\n limitsColor() {\n let limitsState = this._limitsState\n if (limitsState != null) {\n switch (limitsState) {\n case 'GREEN':\n case 'GREEN_HIGH':\n case 'GREEN_LOW':\n return 'green'\n case 'YELLOW':\n case 'YELLOW_HIGH':\n case 'YELLOW_LOW':\n return 'yellow'\n case 'RED':\n case 'RED_HIGH':\n case 'RED_LOW':\n return 'red'\n case 'BLUE':\n return 'blue'\n case 'STALE':\n return 'purple'\n default:\n return 'white'\n }\n }\n return ''\n },\n limitsLetter() {\n let limitsState = this._limitsState\n if (limitsState != null) {\n let c = limitsState.charAt(0)\n if (limitsState.endsWith('_LOW')) {\n c = c.toLowerCase()\n }\n return c\n }\n return ''\n },\n },\n created() {\n // If they're not passing us the value and limitsState we have to register\n if (this.value === null || this.limitsState === null) {\n // Remove double bracket escaping. This means they actually have an item\n // with a bracket in the name, not an array index.\n if (this.parameters[2].includes('[[')) {\n this.parameters[2] = this.parameters[2]\n .replace('[[', '[')\n .replace(']]', ']')\n } else if (this.parameters[2].includes('[')) {\n // Brackets mean array indexes (normally, but see above)\n let match = this.parameters[2].match(/\\[(\\d+)\\]/)\n this.arrayIndex = parseInt(match[1])\n this.parameters[2] = this.parameters[2].replace(match[0], '')\n }\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${\n this.parameters[2]\n }__${this.getType()}`\n\n this.$emit('addItem', this.valueId)\n if (this.screenTimeZone) {\n this.appliedTimeZone = this.screenTimeZone\n } else {\n this.appliedTimeZone = this.timeZone\n }\n }\n },\n destroyed() {\n if (this.value === null || this.limitsState === null) {\n this.$emit('deleteItem', this.valueId)\n }\n },\n methods: {\n getType() {\n let type = 'WITH_UNITS'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n return type\n },\n formatValue(value) {\n if (\n value &&\n this.valueId &&\n (this.valueId.toUpperCase().includes('PACKET_TIMEFORMATTED') ||\n this.valueId.toUpperCase().includes('RECEIVED_TIMEFORMATTED'))\n ) {\n // Our dates have / rather than - which results in an invalid date on old browsers\n // when they call new Date(value)\n value = this.formatUtcToLocal(\n new Date(value.replaceAll('/', '-')),\n this.appliedTimeZone,\n )\n }\n return this.formatValueBase(value, this.formatString)\n },\n showContextMenu(e) {\n e.preventDefault()\n this.contextMenuShown = false\n this.x = e.clientX\n this.y = e.clientY\n this.$nextTick(() => {\n this.contextMenuShown = true\n })\n },\n },\n}\n"],"names":["re","sprintf","key","sprintf_format","sprintf_parse","vsprintf","fmt","argv","parse_tree","cursor","tree_length","arg","output","i","k","ph","pad","pad_character","pad_length","is_positive","sign","sprintf_cache","_fmt","match","arg_names","field_list","replacement_field","field_match","exports","FormatValueBase","value","formatString","result","byte","item","VWidget","Widget","TimeFilters","newVal","oldVal","limitsState","counter","c","type","e"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +1 @@
1
- {"version":3,"file":"VWidget-j2GIGGSX.js","sources":["../../../node_modules/sprintf-js/src/sprintf.js","../src/widgets/FormatValueBase.js","../src/widgets/VWidget.js"],"sourcesContent":["/* global window, exports, define */\n\n!function() {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[+-]/\n }\n\n function sprintf(key) {\n // `arguments` is not an array, but should be fine for this call\n return sprintf_format(sprintf_parse(key), arguments)\n }\n\n function vsprintf(fmt, argv) {\n return sprintf.apply(null, [fmt].concat(argv || []))\n }\n\n function sprintf_format(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n for (i = 0; i < tree_length; i++) {\n if (typeof parse_tree[i] === 'string') {\n output += parse_tree[i]\n }\n else if (typeof parse_tree[i] === 'object') {\n ph = parse_tree[i] // convenience purposes only\n if (ph.keys) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < ph.keys.length; k++) {\n if (arg == undefined) {\n throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n }\n arg = arg[ph.keys[k]]\n }\n }\n else if (ph.param_no) { // positional argument (explicit)\n arg = argv[ph.param_no]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n arg = arg()\n }\n\n if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n }\n\n if (re.number.test(ph.type)) {\n is_positive = arg >= 0\n }\n\n switch (ph.type) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n break\n case 'e':\n arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n break\n case 'g':\n arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n break\n case 'o':\n arg = (parseInt(arg, 10) >>> 0).toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'T':\n arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'x':\n arg = (parseInt(arg, 10) >>> 0).toString(16)\n break\n case 'X':\n arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n break\n }\n if (re.json.test(ph.type)) {\n output += arg\n }\n else {\n if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n pad_length = ph.width - (sign + arg).length\n pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output\n }\n\n var sprintf_cache = Object.create(null)\n\n function sprintf_parse(fmt) {\n if (sprintf_cache[fmt]) {\n return sprintf_cache[fmt]\n }\n\n var _fmt = fmt, match, parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree.push(match[0])\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree.push('%')\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n }\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n }\n\n parse_tree.push(\n {\n placeholder: match[0],\n param_no: match[1],\n keys: match[2],\n sign: match[3],\n pad_char: match[4],\n align: match[5],\n width: match[6],\n precision: match[7],\n type: match[8]\n }\n )\n }\n else {\n throw new SyntaxError('[sprintf] unexpected placeholder')\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return sprintf_cache[fmt] = parse_tree\n }\n\n /**\n * export to either browser or node.js\n */\n /* eslint-disable quote-props */\n if (typeof exports !== 'undefined') {\n exports['sprintf'] = sprintf\n exports['vsprintf'] = vsprintf\n }\n if (typeof window !== 'undefined') {\n window['sprintf'] = sprintf\n window['vsprintf'] = vsprintf\n\n if (typeof define === 'function' && define['amd']) {\n define(function() {\n return {\n 'sprintf': sprintf,\n 'vsprintf': vsprintf\n }\n })\n }\n }\n /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport 'sprintf-js'\nexport default {\n methods: {\n formatValueBase(value, formatString) {\n if (this.isJsonString(value)) {\n return this.formatJsonString(value)\n }\n if (Array.isArray(value)) {\n return this.formatArray(value)\n }\n if (this.isObject(value)) {\n return ''\n }\n if (formatString && value) {\n return sprintf(formatString, value)\n }\n return String(value)\n },\n isJsonString(value) {\n return (\n value && value['json_class'] === 'String' && value['raw'] !== undefined\n )\n },\n formatJsonString(value) {\n let result = Array.from(value['raw'].slice(0, 32), (byte) =>\n ('0' + (byte & 0xff).toString(16)).slice(-2),\n )\n .join(' ')\n .toUpperCase()\n if (value['raw'].length > 32) {\n result += '...'\n }\n return result\n },\n formatArray(value) {\n return (\n '[' +\n value\n .map((item) => (typeof item === 'string' ? `\"${item}\"` : item))\n .join(', ') +\n ']'\n )\n },\n isObject(value) {\n return Object.prototype.toString.call(value).slice(8, -1) === 'Object'\n },\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { TimeFilters } from '@/util'\nimport Widget from './Widget'\nimport FormatValueBase from './FormatValueBase'\nexport default {\n mixins: [Widget, TimeFilters, FormatValueBase],\n // ValueWidget can either get it's value and limitsState directly through props\n // or it will register itself in the Vuex store and be updated asynchronously\n props: {\n value: {\n default: null,\n },\n limitsState: {\n type: String,\n default: null,\n },\n counter: {\n default: null,\n },\n formatString: null,\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n emits: ['addItem', 'deleteItem', 'open'],\n data() {\n return {\n appliedTimeZone: 'local',\n curValue: null,\n prevValue: null,\n grayLevel: 80,\n grayRate: 5,\n valueId: null,\n arrayIndex: null,\n viewDetails: false,\n contextMenuShown: false,\n x: 0,\n y: 0,\n contextMenuOptions: [\n {\n title: 'Details',\n action: () => {\n this.contextMenuShown = false\n this.viewDetails = true\n },\n },\n {\n title: 'Graph',\n action: () => {\n window.open(\n '/tools/tlmgrapher/' +\n encodeURIComponent(this.parameters[0]) +\n '/' +\n encodeURIComponent(this.parameters[1]) +\n '/' +\n encodeURIComponent(this.parameters[2]),\n '_blank',\n )\n },\n },\n ],\n }\n },\n watch: {\n _counter: function (newVal, oldVal) {\n if (this.curValue !== this.prevValue) {\n this.grayLevel = 80\n } else {\n this.grayLevel -= this.grayRate\n if (this.grayLevel < 30) {\n this.grayLevel = 30\n }\n }\n this.prevValue = this.curValue\n },\n },\n computed: {\n _value: function () {\n this.curValue = this.value\n if (this.curValue === null) {\n // See store.js for how this is set\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n if (\n this.arrayIndex !== null &&\n this.screenValues[this.valueId][0]\n ) {\n this.curValue =\n this.screenValues[this.valueId][0][this.arrayIndex]\n } else {\n this.curValue = this.screenValues[this.valueId][0]\n }\n }\n } else {\n this.curValue = null\n }\n }\n this.curValue = this.formatValue(this.curValue)\n return this.curValue\n },\n _limitsState: function () {\n let limitsState = this.limitsState\n if (limitsState === null) {\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n limitsState = this.screenValues[this.valueId][1]\n }\n } else {\n limitsState = null\n }\n }\n return limitsState\n },\n _counter: function () {\n let counter = this.counter\n if (counter === null) {\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n counter = this.screenValues[this.valueId][2]\n }\n } else {\n counter = null\n }\n }\n return counter\n },\n valueClass: function () {\n return 'value shrink pa-1 ' + 'openc3-' + this.limitsColor\n },\n astroStatus() {\n switch (this.limitsColor) {\n case 'green':\n return 'normal'\n case 'yellow':\n return 'caution'\n case 'red':\n return 'critical'\n case 'blue':\n // This one is a little weird but it matches our color scheme\n return 'standby'\n default:\n return null\n }\n },\n limitsColor() {\n let limitsState = this._limitsState\n if (limitsState != null) {\n switch (limitsState) {\n case 'GREEN':\n case 'GREEN_HIGH':\n case 'GREEN_LOW':\n return 'green'\n case 'YELLOW':\n case 'YELLOW_HIGH':\n case 'YELLOW_LOW':\n return 'yellow'\n case 'RED':\n case 'RED_HIGH':\n case 'RED_LOW':\n return 'red'\n case 'BLUE':\n return 'blue'\n case 'STALE':\n return 'purple'\n default:\n return 'white'\n }\n }\n return ''\n },\n limitsLetter() {\n let limitsState = this._limitsState\n if (limitsState != null) {\n let c = limitsState.charAt(0)\n if (limitsState.endsWith('_LOW')) {\n c = c.toLowerCase()\n }\n return c\n }\n return ''\n },\n },\n created() {\n // If they're not passing us the value and limitsState we have to register\n if (this.value === null || this.limitsState === null) {\n // Remove double bracket escaping. This means they actually have an item\n // with a bracket in the name, not an array index.\n if (this.parameters[2].includes('[[')) {\n this.parameters[2] = this.parameters[2]\n .replace('[[', '[')\n .replace(']]', ']')\n } else if (this.parameters[2].includes('[')) {\n // Brackets mean array indexes (normally, but see above)\n let match = this.parameters[2].match(/\\[(\\d+)\\]/)\n this.arrayIndex = parseInt(match[1])\n this.parameters[2] = this.parameters[2].replace(match[0], '')\n }\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${\n this.parameters[2]\n }__${this.getType()}`\n\n this.$emit('addItem', this.valueId)\n if (this.screenTimeZone) {\n this.appliedTimeZone = this.screenTimeZone\n } else {\n this.appliedTimeZone = this.timeZone\n }\n }\n },\n destroyed() {\n if (this.value === null || this.limitsState === null) {\n this.$emit('deleteItem', this.valueId)\n }\n },\n methods: {\n getType() {\n let type = 'WITH_UNITS'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n return type\n },\n formatValue(value) {\n if (\n value &&\n this.valueId &&\n (this.valueId.toUpperCase().includes('PACKET_TIMEFORMATTED') ||\n this.valueId.toUpperCase().includes('RECEIVED_TIMEFORMATTED'))\n ) {\n // Our dates have / rather than - which results in an invalid date on old browsers\n // when they call new Date(value)\n value = this.formatUtcToLocal(\n new Date(value.replaceAll('/', '-')),\n this.appliedTimeZone,\n )\n }\n return this.formatValueBase(value, this.formatString)\n },\n showContextMenu(e) {\n e.preventDefault()\n this.contextMenuShown = false\n this.x = e.clientX\n this.y = e.clientY\n this.$nextTick(() => {\n this.contextMenuShown = true\n })\n },\n },\n}\n"],"names":["re","sprintf","key","sprintf_format","sprintf_parse","vsprintf","fmt","argv","parse_tree","cursor","tree_length","arg","output","i","k","ph","pad","pad_character","pad_length","is_positive","sign","sprintf_cache","_fmt","match","arg_names","field_list","replacement_field","field_match","exports","FormatValueBase","value","formatString","result","byte","item","VWidget","Widget","TimeFilters","newVal","oldVal","limitsState","counter","c","type","e"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"VWidget-j2GIGGSX.js","sources":["../../../node_modules/sprintf-js/src/sprintf.js","../src/widgets/FormatValueBase.js","../src/widgets/VWidget.js"],"sourcesContent":["/* global window, exports, define */\n\n!function() {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[+-]/\n }\n\n function sprintf(key) {\n // `arguments` is not an array, but should be fine for this call\n return sprintf_format(sprintf_parse(key), arguments)\n }\n\n function vsprintf(fmt, argv) {\n return sprintf.apply(null, [fmt].concat(argv || []))\n }\n\n function sprintf_format(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n for (i = 0; i < tree_length; i++) {\n if (typeof parse_tree[i] === 'string') {\n output += parse_tree[i]\n }\n else if (typeof parse_tree[i] === 'object') {\n ph = parse_tree[i] // convenience purposes only\n if (ph.keys) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < ph.keys.length; k++) {\n if (arg == undefined) {\n throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n }\n arg = arg[ph.keys[k]]\n }\n }\n else if (ph.param_no) { // positional argument (explicit)\n arg = argv[ph.param_no]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n arg = arg()\n }\n\n if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n }\n\n if (re.number.test(ph.type)) {\n is_positive = arg >= 0\n }\n\n switch (ph.type) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n break\n case 'e':\n arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n break\n case 'g':\n arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n break\n case 'o':\n arg = (parseInt(arg, 10) >>> 0).toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'T':\n arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'x':\n arg = (parseInt(arg, 10) >>> 0).toString(16)\n break\n case 'X':\n arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n break\n }\n if (re.json.test(ph.type)) {\n output += arg\n }\n else {\n if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n pad_length = ph.width - (sign + arg).length\n pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output\n }\n\n var sprintf_cache = Object.create(null)\n\n function sprintf_parse(fmt) {\n if (sprintf_cache[fmt]) {\n return sprintf_cache[fmt]\n }\n\n var _fmt = fmt, match, parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree.push(match[0])\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree.push('%')\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n }\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n }\n\n parse_tree.push(\n {\n placeholder: match[0],\n param_no: match[1],\n keys: match[2],\n sign: match[3],\n pad_char: match[4],\n align: match[5],\n width: match[6],\n precision: match[7],\n type: match[8]\n }\n )\n }\n else {\n throw new SyntaxError('[sprintf] unexpected placeholder')\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return sprintf_cache[fmt] = parse_tree\n }\n\n /**\n * export to either browser or node.js\n */\n /* eslint-disable quote-props */\n if (typeof exports !== 'undefined') {\n exports['sprintf'] = sprintf\n exports['vsprintf'] = vsprintf\n }\n if (typeof window !== 'undefined') {\n window['sprintf'] = sprintf\n window['vsprintf'] = vsprintf\n\n if (typeof define === 'function' && define['amd']) {\n define(function() {\n return {\n 'sprintf': sprintf,\n 'vsprintf': vsprintf\n }\n })\n }\n }\n /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport 'sprintf-js'\nexport default {\n methods: {\n formatValueBase(value, formatString) {\n if (this.isJsonString(value)) {\n return this.formatJsonString(value)\n }\n if (Array.isArray(value)) {\n return this.formatArray(value)\n }\n if (this.isObject(value)) {\n return ''\n }\n if (formatString && value) {\n return sprintf(formatString, value)\n }\n return String(value)\n },\n isJsonString(value) {\n return (\n value && value['json_class'] === 'String' && value['raw'] !== undefined\n )\n },\n formatJsonString(value) {\n let result = Array.from(value['raw'].slice(0, 32), (byte) =>\n ('0' + (byte & 0xff).toString(16)).slice(-2),\n )\n .join(' ')\n .toUpperCase()\n if (value['raw'].length > 32) {\n result += '...'\n }\n return result\n },\n formatArray(value) {\n return (\n '[' +\n value\n .map((item) => (typeof item === 'string' ? `\"${item}\"` : item))\n .join(', ') +\n ']'\n )\n },\n isObject(value) {\n return Object.prototype.toString.call(value).slice(8, -1) === 'Object'\n },\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { TimeFilters } from '@/util'\nimport Widget from './Widget'\nimport FormatValueBase from './FormatValueBase'\nexport default {\n mixins: [Widget, TimeFilters, FormatValueBase],\n // ValueWidget can either get it's value and limitsState directly through props\n // or it will register itself in the Vuex store and be updated asynchronously\n props: {\n value: {\n default: null,\n },\n limitsState: {\n type: String,\n default: null,\n },\n counter: {\n default: null,\n },\n formatString: null,\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n emits: ['addItem', 'deleteItem', 'open'],\n data() {\n return {\n appliedTimeZone: 'local',\n curValue: null,\n prevValue: null,\n grayLevel: 80,\n grayRate: 5,\n valueId: null,\n arrayIndex: null,\n viewDetails: false,\n contextMenuShown: false,\n x: 0,\n y: 0,\n contextMenuOptions: [\n {\n title: 'Details',\n action: () => {\n this.contextMenuShown = false\n this.viewDetails = true\n },\n },\n {\n title: 'Graph',\n action: () => {\n window.open(\n '/tools/tlmgrapher/' +\n encodeURIComponent(this.parameters[0]) +\n '/' +\n encodeURIComponent(this.parameters[1]) +\n '/' +\n encodeURIComponent(this.parameters[2]),\n '_blank',\n )\n },\n },\n ],\n }\n },\n watch: {\n _counter: function (newVal, oldVal) {\n if (this.curValue !== this.prevValue) {\n this.grayLevel = 80\n } else {\n this.grayLevel -= this.grayRate\n if (this.grayLevel < 30) {\n this.grayLevel = 30\n }\n }\n this.prevValue = this.curValue\n },\n },\n computed: {\n _value: function () {\n this.curValue = this.value\n if (this.curValue === null) {\n // See store.js for how this is set\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n if (\n this.arrayIndex !== null &&\n this.screenValues[this.valueId][0]\n ) {\n this.curValue =\n this.screenValues[this.valueId][0][this.arrayIndex]\n } else {\n this.curValue = this.screenValues[this.valueId][0]\n }\n }\n } else {\n this.curValue = null\n }\n }\n this.curValue = this.formatValue(this.curValue)\n return this.curValue\n },\n _limitsState: function () {\n let limitsState = this.limitsState\n if (limitsState === null) {\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n limitsState = this.screenValues[this.valueId][1]\n }\n } else {\n limitsState = null\n }\n }\n return limitsState\n },\n _counter: function () {\n let counter = this.counter\n if (counter === null) {\n if (this.screenValues) {\n if (this.screenValues[this.valueId]) {\n counter = this.screenValues[this.valueId][2]\n }\n } else {\n counter = null\n }\n }\n return counter\n },\n valueClass: function () {\n return 'value shrink pa-1 ' + 'openc3-' + this.limitsColor\n },\n astroStatus() {\n switch (this.limitsColor) {\n case 'green':\n return 'normal'\n case 'yellow':\n return 'caution'\n case 'red':\n return 'critical'\n case 'blue':\n // This one is a little weird but it matches our color scheme\n return 'standby'\n default:\n return null\n }\n },\n limitsColor() {\n let limitsState = this._limitsState\n if (limitsState != null) {\n switch (limitsState) {\n case 'GREEN':\n case 'GREEN_HIGH':\n case 'GREEN_LOW':\n return 'green'\n case 'YELLOW':\n case 'YELLOW_HIGH':\n case 'YELLOW_LOW':\n return 'yellow'\n case 'RED':\n case 'RED_HIGH':\n case 'RED_LOW':\n return 'red'\n case 'BLUE':\n return 'blue'\n case 'STALE':\n return 'purple'\n default:\n return 'white'\n }\n }\n return ''\n },\n limitsLetter() {\n let limitsState = this._limitsState\n if (limitsState != null) {\n let c = limitsState.charAt(0)\n if (limitsState.endsWith('_LOW')) {\n c = c.toLowerCase()\n }\n return c\n }\n return ''\n },\n },\n created() {\n // If they're not passing us the value and limitsState we have to register\n if (this.value === null || this.limitsState === null) {\n // Remove double bracket escaping. This means they actually have an item\n // with a bracket in the name, not an array index.\n if (this.parameters[2].includes('[[')) {\n this.parameters[2] = this.parameters[2]\n .replace('[[', '[')\n .replace(']]', ']')\n } else if (this.parameters[2].includes('[')) {\n // Brackets mean array indexes (normally, but see above)\n let match = this.parameters[2].match(/\\[(\\d+)\\]/)\n this.arrayIndex = parseInt(match[1])\n this.parameters[2] = this.parameters[2].replace(match[0], '')\n }\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${\n this.parameters[2]\n }__${this.getType()}`\n\n this.$emit('addItem', this.valueId)\n if (this.screenTimeZone) {\n this.appliedTimeZone = this.screenTimeZone\n } else {\n this.appliedTimeZone = this.timeZone\n }\n }\n },\n destroyed() {\n if (this.value === null || this.limitsState === null) {\n this.$emit('deleteItem', this.valueId)\n }\n },\n methods: {\n getType() {\n let type = 'WITH_UNITS'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n return type\n },\n formatValue(value) {\n if (\n value &&\n this.valueId &&\n (this.valueId.toUpperCase().includes('PACKET_TIMEFORMATTED') ||\n this.valueId.toUpperCase().includes('RECEIVED_TIMEFORMATTED'))\n ) {\n // Our dates have / rather than - which results in an invalid date on old browsers\n // when they call new Date(value)\n value = this.formatUtcToLocal(\n new Date(value.replaceAll('/', '-')),\n this.appliedTimeZone,\n )\n }\n return this.formatValueBase(value, this.formatString)\n },\n showContextMenu(e) {\n e.preventDefault()\n this.contextMenuShown = false\n this.x = e.clientX\n this.y = e.clientY\n this.$nextTick(() => {\n this.contextMenuShown = true\n })\n },\n },\n}\n"],"names":["re","sprintf","key","sprintf_format","sprintf_parse","vsprintf","fmt","argv","parse_tree","cursor","tree_length","arg","output","i","k","ph","pad","pad_character","pad_length","is_positive","sign","sprintf_cache","_fmt","match","arg_names","field_list","replacement_field","field_match","exports","FormatValueBase","value","formatString","result","byte","item","VWidget","Widget","TimeFilters","newVal","oldVal","limitsState","counter","c","type","e"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +1 @@
1
- {"version":3,"file":"ValueWidget-3jNtnh5i.js","sources":["../src/widgets/ValueWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div class=\"value-widget-container\" :style=\"[computedStyle, aging]\">\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-text-field\n variant=\"solo\"\n density=\"compact\"\n flat\n readonly\n hide-details\n :model-value=\"_value\"\n :class=\"valueClass\"\n data-test=\"value\"\n v-bind=\"props\"\n @contextmenu=\"showContextMenu\"\n >\n <template v-if=\"astroStatus\" #prepend-inner>\n <rux-status :status=\"astroStatus\" />\n </template>\n </v-text-field>\n </template>\n <span>{{ fullName }}</span>\n </v-tooltip>\n <v-menu v-model=\"contextMenuShown\" :target=\"[x, y]\" style=\"z-index: 3000\">\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n v-model=\"viewDetails\"\n :target-name=\"parameters[0]\"\n :packet-name=\"parameters[1]\"\n :item-name=\"parameters[2]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\n\nimport { DetailsDialog } from '@/components'\nimport VWidget from './VWidget'\n\nexport default {\n components: {\n DetailsDialog,\n },\n mixins: [VWidget],\n data: function () {\n return {\n width: 12 + INPUT_PADDING, // 'ch'\n }\n },\n computed: {\n fullName() {\n return (\n this.parameters[0] + ' ' + this.parameters[1] + ' ' + this.parameters[2]\n )\n },\n aging() {\n return {\n '--aging': this.grayLevel,\n }\n },\n },\n created() {\n this.verifyNumParams(\n 'VALUE',\n 3,\n 5,\n 'VALUE <TARGET> <PACKET> <ITEM> <TYPE> <WIDTH>',\n )\n // Note: TYPE is parameters[3]\n // This works because NaN selects the default width\n this.setWidth(\n parseInt(this.parameters[4]) + INPUT_PADDING,\n 'ch',\n this.width,\n )\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.value-widget-container {\n min-height: 34px;\n}\n.value-widget-container :deep(.v-field) {\n background: rgba(var(--aging), var(--aging), var(--aging), 1) !important;\n height: 26px;\n}\n.value-widget-container :deep(.v-field__loader) {\n display: none !important;\n}\n.value-widget-container :deep(input) {\n text-align: var(--text-align) !important;\n}\n// If we're showing an icon then shrink the left padding\n:deep(.v-field:has(.v-icon)) {\n padding-left: 2px !important;\n}\n.value :deep(div) {\n min-height: 24px !important;\n display: flex !important;\n align-items: center !important;\n}\n// TODO: These openc3 styles are also defined in assets/stylesheets/layout/_overrides.scss\n// Can they somehow be reused here? We need to force the style down into the input\n.openc3-green :deep(input) {\n color: rgb(0, 200, 0);\n}\n.openc3-yellow :deep(input) {\n color: rgb(255, 220, 0);\n}\n.openc3-red :deep(input) {\n color: rgb(255, 45, 45);\n}\n.openc3-blue :deep(input) {\n color: rgb(0, 153, 255);\n}\n.openc3-purple :deep(input) {\n color: rgb(200, 0, 200);\n}\n.openc3-black :deep(input) {\n color: black;\n}\n.openc3-white :deep(input) {\n color: white;\n}\n</style>\n"],"names":["INPUT_PADDING","_sfc_main","DetailsDialog","VWidget","_createElementBlock","_normalizeStyle","_ctx","$options","_createVNode","_component_v_tooltip","_withCtx","props","_component_v_text_field","_mergeProps","_createSlots","_component_rux_status","_createElementVNode","_component_v_menu","_cache","$event","_component_v_list","_openBlock","_Fragment","_renderList","item","index","_createBlock","_component_v_list_item","_withModifiers","_component_v_list_item_title","_createTextVNode","_toDisplayString","_component_details_dialog"],"mappings":"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"}
1
+ {"version":3,"file":"ValueWidget-3jNtnh5i.js","sources":["../src/widgets/ValueWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div class=\"value-widget-container\" :style=\"[computedStyle, aging]\">\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-text-field\n variant=\"solo\"\n density=\"compact\"\n flat\n readonly\n hide-details\n :model-value=\"_value\"\n :class=\"valueClass\"\n data-test=\"value\"\n v-bind=\"props\"\n @contextmenu=\"showContextMenu\"\n >\n <template v-if=\"astroStatus\" #prepend-inner>\n <rux-status :status=\"astroStatus\" />\n </template>\n </v-text-field>\n </template>\n <span>{{ fullName }}</span>\n </v-tooltip>\n <v-menu v-model=\"contextMenuShown\" :target=\"[x, y]\" style=\"z-index: 3000\">\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n v-model=\"viewDetails\"\n :target-name=\"parameters[0]\"\n :packet-name=\"parameters[1]\"\n :item-name=\"parameters[2]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\n\nimport { DetailsDialog } from '@/components'\nimport VWidget from './VWidget'\n\nexport default {\n components: {\n DetailsDialog,\n },\n mixins: [VWidget],\n data: function () {\n return {\n width: 12 + INPUT_PADDING, // 'ch'\n }\n },\n computed: {\n fullName() {\n return (\n this.parameters[0] + ' ' + this.parameters[1] + ' ' + this.parameters[2]\n )\n },\n aging() {\n return {\n '--aging': this.grayLevel,\n }\n },\n },\n created() {\n this.verifyNumParams(\n 'VALUE',\n 3,\n 5,\n 'VALUE <TARGET> <PACKET> <ITEM> <TYPE> <WIDTH>',\n )\n // Note: TYPE is parameters[3]\n // This works because NaN selects the default width\n this.setWidth(\n parseInt(this.parameters[4]) + INPUT_PADDING,\n 'ch',\n this.width,\n )\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.value-widget-container {\n min-height: 34px;\n}\n.value-widget-container :deep(.v-field) {\n background: rgba(var(--aging), var(--aging), var(--aging), 1) !important;\n height: 26px;\n}\n.value-widget-container :deep(.v-field__loader) {\n display: none !important;\n}\n.value-widget-container :deep(input) {\n text-align: var(--text-align) !important;\n}\n// If we're showing an icon then shrink the left padding\n:deep(.v-field:has(.v-icon)) {\n padding-left: 2px !important;\n}\n.value :deep(div) {\n min-height: 24px !important;\n display: flex !important;\n align-items: center !important;\n}\n// TODO: These openc3 styles are also defined in assets/stylesheets/layout/_overrides.scss\n// Can they somehow be reused here? We need to force the style down into the input\n.openc3-green :deep(input) {\n color: rgb(0, 200, 0);\n}\n.openc3-yellow :deep(input) {\n color: rgb(255, 220, 0);\n}\n.openc3-red :deep(input) {\n color: rgb(255, 45, 45);\n}\n.openc3-blue :deep(input) {\n color: rgb(0, 153, 255);\n}\n.openc3-purple :deep(input) {\n color: rgb(200, 0, 200);\n}\n.openc3-black :deep(input) {\n color: black;\n}\n.openc3-white :deep(input) {\n color: white;\n}\n</style>\n"],"names":["INPUT_PADDING","_sfc_main","DetailsDialog","VWidget","_createElementBlock","_normalizeStyle","_ctx","$options","_createVNode","_component_v_tooltip","_withCtx","props","_component_v_text_field","_mergeProps","_createSlots","_component_rux_status","_createElementVNode","_component_v_menu","_cache","$event","_component_v_list","_openBlock","_Fragment","_renderList","item","index","_createBlock","_component_v_list_item","_withModifiers","_component_v_list_item_title","_createTextVNode","_toDisplayString","_component_details_dialog"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValueWidget-CjZeSiPQ.cjs","sources":["../src/widgets/ValueWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div class=\"value-widget-container\" :style=\"[computedStyle, aging]\">\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-text-field\n variant=\"solo\"\n density=\"compact\"\n flat\n readonly\n hide-details\n :model-value=\"_value\"\n :class=\"valueClass\"\n data-test=\"value\"\n v-bind=\"props\"\n @contextmenu=\"showContextMenu\"\n >\n <template v-if=\"astroStatus\" #prepend-inner>\n <rux-status :status=\"astroStatus\" />\n </template>\n </v-text-field>\n </template>\n <span>{{ fullName }}</span>\n </v-tooltip>\n <v-menu v-model=\"contextMenuShown\" :target=\"[x, y]\" style=\"z-index: 3000\">\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n v-model=\"viewDetails\"\n :target-name=\"parameters[0]\"\n :packet-name=\"parameters[1]\"\n :item-name=\"parameters[2]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\n\nimport { DetailsDialog } from '@/components'\nimport VWidget from './VWidget'\n\nexport default {\n components: {\n DetailsDialog,\n },\n mixins: [VWidget],\n data: function () {\n return {\n width: 12 + INPUT_PADDING, // 'ch'\n }\n },\n computed: {\n fullName() {\n return (\n this.parameters[0] + ' ' + this.parameters[1] + ' ' + this.parameters[2]\n )\n },\n aging() {\n return {\n '--aging': this.grayLevel,\n }\n },\n },\n created() {\n this.verifyNumParams(\n 'VALUE',\n 3,\n 5,\n 'VALUE <TARGET> <PACKET> <ITEM> <TYPE> <WIDTH>',\n )\n // Note: TYPE is parameters[3]\n // This works because NaN selects the default width\n this.setWidth(\n parseInt(this.parameters[4]) + INPUT_PADDING,\n 'ch',\n this.width,\n )\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.value-widget-container {\n min-height: 34px;\n}\n.value-widget-container :deep(.v-field) {\n background: rgba(var(--aging), var(--aging), var(--aging), 1) !important;\n height: 26px;\n}\n.value-widget-container :deep(.v-field__loader) {\n display: none !important;\n}\n.value-widget-container :deep(input) {\n text-align: var(--text-align) !important;\n}\n// If we're showing an icon then shrink the left padding\n:deep(.v-field:has(.v-icon)) {\n padding-left: 2px !important;\n}\n.value :deep(div) {\n min-height: 24px !important;\n display: flex !important;\n align-items: center !important;\n}\n// TODO: These openc3 styles are also defined in assets/stylesheets/layout/_overrides.scss\n// Can they somehow be reused here? We need to force the style down into the input\n.openc3-green :deep(input) {\n color: rgb(0, 200, 0);\n}\n.openc3-yellow :deep(input) {\n color: rgb(255, 220, 0);\n}\n.openc3-red :deep(input) {\n color: rgb(255, 45, 45);\n}\n.openc3-blue :deep(input) {\n color: rgb(0, 153, 255);\n}\n.openc3-purple :deep(input) {\n color: rgb(200, 0, 200);\n}\n.openc3-black :deep(input) {\n color: black;\n}\n.openc3-white :deep(input) {\n color: white;\n}\n</style>\n"],"names":["INPUT_PADDING","_sfc_main","DetailsDialog","VWidget","_createElementBlock","_normalizeStyle","_ctx","$options","_createVNode","_component_v_tooltip","_withCtx","props","_component_v_text_field","_mergeProps","_createSlots","_component_rux_status","_createElementVNode","_component_v_menu","_cache","$event","_component_v_list","_openBlock","_Fragment","_renderList","item","index","_createBlock","_component_v_list_item","_withModifiers","_component_v_list_item_title","_createTextVNode","_toDisplayString","_component_details_dialog"],"mappings":"4VAqEMA,EAAgB,EAKjBC,EAAU,CACb,WAAY,eACVC,EAAAA,eAEF,OAAQ,CAACC,EAAAA,OAAO,EAChB,KAAM,UAAY,CAChB,MAAO,CACL,MAAO,GAAKH,CACd,GAEF,SAAU,CACR,UAAW,CACT,OACE,KAAK,WAAW,CAAC,EAAI,IAAM,KAAK,WAAW,CAAC,EAAI,IAAM,KAAK,WAAW,CAAC,GAG3E,OAAQ,CACN,MAAO,CACL,UAAW,KAAK,SAClB,IAGJ,SAAU,CACR,KAAK,gBACH,QACA,EACA,EACA,+CACF,EAGA,KAAK,SACH,SAAS,KAAK,WAAW,CAAC,CAAC,EAAIA,EAC/B,KACA,KAAK,KACP,EAEJ,kVAxFEI,EAAAA,mBAwCM,MAAA,CAxCD,MAAM,yBAA0B,MAvBvCC,EAAAA,eAAA,CAuB+CC,EAAA,cAAeC,EAAA,KAAK,CAAA,IAC/DC,EAAAA,YAoBYC,EAAA,CApBA,aAAY,IAAK,SAAS,QACzB,UAASC,EAAAA,QAClB,CAee,CAhBO,MAAAC,KAAK,CAC3BH,EAAAA,YAeeI,EAffC,aAee,CAdb,QAAQ,OACR,QAAQ,UACR,KAAA,GACA,SAAA,GACA,eAAA,GACC,cAAaP,EAAA,OACb,MAAOA,EAAA,WACR,YAAU,OACF,EAAAK,GACP,cAAaL,EAAA,gBAAe,EApCvCQ,eAAA,EAAA,GAAA,CAsC0BR,EAAA,aAtC1B,KAsCwC,gBAtCxC,GAAAI,EAAAA,QAuCY,IAAoC,CAApCF,cAAoCO,EAAA,CAAvB,OAAQT,EAAA,WAAW,EAAA,KAAA,EAAA,CAAA,QAAA,CAAA,IAvC5C,IAAA,KAAA,yDAAA,QAAAI,EAAAA,QA2CM,IAA2B,CAA3BM,EAAAA,mBAA2B,8BAAlBT,EAAA,QAAQ,EAAA,CAAA,IA3CvB,EAAA,IA6CIC,EAAAA,YAUSS,EAAA,CAvDb,WA6CqBX,EAAA,iBA7CrB,sBAAAY,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GA6CqBb,EAAA,iBAAgBa,GAAG,OAAM,CAAGb,EAAA,EAAGA,EAAA,CAAC,EAAG,MAAA,CAAA,UAAA,MAAA,IA7CxD,QAAAI,EAAAA,QA8CM,IAQS,CARTF,EAAAA,YAQSY,EAAA,KAAA,CAtDf,QAAAV,EAAAA,QAgDU,IAA2C,EAD7CW,EAAAA,UAAA,EAAA,EAAAjB,EAAAA,mBAMckB,gBArDtBC,EAAAA,WAgDkCjB,EAAA,mBAhDlC,CAgDkBkB,EAAMC,mBADhBC,EAAAA,YAMcC,EAAA,CAJX,IAAKF,EACL,QAlDXG,EAAAA,cAkDuBJ,EAAK,OAAM,CAAA,MAAA,CAAA,IAlDlC,QAAAd,EAAAA,QAoDU,IAAuD,CAAvDF,EAAAA,YAAuDqB,EAAA,KAAA,CApDjE,QAAAnB,EAAAA,QAoD6B,IAAgB,CApD7CoB,EAAAA,gBAAAC,EAAAA,gBAoDgCP,EAAK,KAAK,EAAA,CAAA,IApD1C,EAAA,WAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,8BAyDIhB,EAAAA,YAKEwB,EAAA,CA9DN,WA0De1B,EAAA,YA1Df,sBAAAY,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GA0Deb,EAAA,YAAWa,GACnB,cAAab,EAAA,WAAU,CAAA,EACvB,cAAaA,EAAA,WAAU,CAAA,EACvB,YAAWA,EAAA,WAAU,CAAA"}
1
+ {"version":3,"file":"ValueWidget-CjZeSiPQ.cjs","sources":["../src/widgets/ValueWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div class=\"value-widget-container\" :style=\"[computedStyle, aging]\">\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-text-field\n variant=\"solo\"\n density=\"compact\"\n flat\n readonly\n hide-details\n :model-value=\"_value\"\n :class=\"valueClass\"\n data-test=\"value\"\n v-bind=\"props\"\n @contextmenu=\"showContextMenu\"\n >\n <template v-if=\"astroStatus\" #prepend-inner>\n <rux-status :status=\"astroStatus\" />\n </template>\n </v-text-field>\n </template>\n <span>{{ fullName }}</span>\n </v-tooltip>\n <v-menu v-model=\"contextMenuShown\" :target=\"[x, y]\" style=\"z-index: 3000\">\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n v-model=\"viewDetails\"\n :target-name=\"parameters[0]\"\n :packet-name=\"parameters[1]\"\n :item-name=\"parameters[2]\"\n />\n </div>\n</template>\n\n<script>\n// When we apply a fixed character width we need to pad a bit since the\n// width applies to the enclosing div and not the underlying input\nconst INPUT_PADDING = 4\n\nimport { DetailsDialog } from '@/components'\nimport VWidget from './VWidget'\n\nexport default {\n components: {\n DetailsDialog,\n },\n mixins: [VWidget],\n data: function () {\n return {\n width: 12 + INPUT_PADDING, // 'ch'\n }\n },\n computed: {\n fullName() {\n return (\n this.parameters[0] + ' ' + this.parameters[1] + ' ' + this.parameters[2]\n )\n },\n aging() {\n return {\n '--aging': this.grayLevel,\n }\n },\n },\n created() {\n this.verifyNumParams(\n 'VALUE',\n 3,\n 5,\n 'VALUE <TARGET> <PACKET> <ITEM> <TYPE> <WIDTH>',\n )\n // Note: TYPE is parameters[3]\n // This works because NaN selects the default width\n this.setWidth(\n parseInt(this.parameters[4]) + INPUT_PADDING,\n 'ch',\n this.width,\n )\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.value-widget-container {\n min-height: 34px;\n}\n.value-widget-container :deep(.v-field) {\n background: rgba(var(--aging), var(--aging), var(--aging), 1) !important;\n height: 26px;\n}\n.value-widget-container :deep(.v-field__loader) {\n display: none !important;\n}\n.value-widget-container :deep(input) {\n text-align: var(--text-align) !important;\n}\n// If we're showing an icon then shrink the left padding\n:deep(.v-field:has(.v-icon)) {\n padding-left: 2px !important;\n}\n.value :deep(div) {\n min-height: 24px !important;\n display: flex !important;\n align-items: center !important;\n}\n// TODO: These openc3 styles are also defined in assets/stylesheets/layout/_overrides.scss\n// Can they somehow be reused here? We need to force the style down into the input\n.openc3-green :deep(input) {\n color: rgb(0, 200, 0);\n}\n.openc3-yellow :deep(input) {\n color: rgb(255, 220, 0);\n}\n.openc3-red :deep(input) {\n color: rgb(255, 45, 45);\n}\n.openc3-blue :deep(input) {\n color: rgb(0, 153, 255);\n}\n.openc3-purple :deep(input) {\n color: rgb(200, 0, 200);\n}\n.openc3-black :deep(input) {\n color: black;\n}\n.openc3-white :deep(input) {\n color: white;\n}\n</style>\n"],"names":["INPUT_PADDING","_sfc_main","DetailsDialog","VWidget","_createElementBlock","_normalizeStyle","_ctx","$options","_createVNode","_component_v_tooltip","_withCtx","props","_component_v_text_field","_mergeProps","_createSlots","_component_rux_status","_createElementVNode","_component_v_menu","_cache","$event","_component_v_list","_openBlock","_Fragment","_renderList","item","index","_createBlock","_component_v_list_item","_withModifiers","_component_v_list_item_title","_createTextVNode","_toDisplayString","_component_details_dialog"],"mappings":"4VAqEMA,EAAgB,EAKjBC,EAAU,CACb,WAAY,eACVC,EAAAA,eAEF,OAAQ,CAACC,EAAAA,OAAO,EAChB,KAAM,UAAY,CAChB,MAAO,CACL,MAAO,GAAKH,CACd,CACF,EACA,SAAU,CACR,UAAW,CACT,OACE,KAAK,WAAW,CAAC,EAAI,IAAM,KAAK,WAAW,CAAC,EAAI,IAAM,KAAK,WAAW,CAAC,CAE3E,EACA,OAAQ,CACN,MAAO,CACL,UAAW,KAAK,SAClB,CACF,GAEF,SAAU,CACR,KAAK,gBACH,QACA,EACA,EACA,+CACF,EAGA,KAAK,SACH,SAAS,KAAK,WAAW,CAAC,CAAC,EAAIA,EAC/B,KACA,KAAK,KACP,CACF,CACF,kVAxFEI,EAAAA,mBAwCM,MAAA,CAxCD,MAAM,yBAA0B,MAvBvCC,EAAAA,eAAA,CAuB+CC,EAAA,cAAeC,EAAA,KAAK,CAAA,IAC/DC,EAAAA,YAoBYC,EAAA,CApBA,aAAY,IAAK,SAAS,QACzB,UAASC,EAAAA,QAClB,CAee,CAhBO,MAAAC,KAAK,CAC3BH,EAAAA,YAeeI,EAffC,aAee,CAdb,QAAQ,OACR,QAAQ,UACR,KAAA,GACA,SAAA,GACA,eAAA,GACC,cAAaP,EAAA,OACb,MAAOA,EAAA,WACR,YAAU,OACF,EAAAK,GACP,cAAaL,EAAA,gBAAe,EApCvCQ,eAAA,EAAA,GAAA,CAsC0BR,EAAA,aAtC1B,KAsCwC,gBAtCxC,GAAAI,EAAAA,QAuCY,IAAoC,CAApCF,cAAoCO,EAAA,CAAvB,OAAQT,EAAA,WAAW,EAAA,KAAA,EAAA,CAAA,QAAA,CAAA,IAvC5C,IAAA,KAAA,yDAAA,QAAAI,EAAAA,QA2CM,IAA2B,CAA3BM,EAAAA,mBAA2B,8BAAlBT,EAAA,QAAQ,EAAA,CAAA,IA3CvB,EAAA,IA6CIC,EAAAA,YAUSS,EAAA,CAvDb,WA6CqBX,EAAA,iBA7CrB,sBAAAY,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GA6CqBb,EAAA,iBAAgBa,GAAG,OAAM,CAAGb,EAAA,EAAGA,EAAA,CAAC,EAAG,MAAA,CAAA,UAAA,MAAA,IA7CxD,QAAAI,EAAAA,QA8CM,IAQS,CARTF,EAAAA,YAQSY,EAAA,KAAA,CAtDf,QAAAV,EAAAA,QAgDU,IAA2C,EAD7CW,EAAAA,UAAA,EAAA,EAAAjB,EAAAA,mBAMckB,gBArDtBC,EAAAA,WAgDkCjB,EAAA,mBAhDlC,CAgDkBkB,EAAMC,mBADhBC,EAAAA,YAMcC,EAAA,CAJX,IAAKF,EACL,QAlDXG,EAAAA,cAkDuBJ,EAAK,OAAM,CAAA,MAAA,CAAA,IAlDlC,QAAAd,EAAAA,QAoDU,IAAuD,CAAvDF,EAAAA,YAAuDqB,EAAA,KAAA,CApDjE,QAAAnB,EAAAA,QAoD6B,IAAgB,CApD7CoB,EAAAA,gBAAAC,EAAAA,gBAoDgCP,EAAK,KAAK,EAAA,CAAA,IApD1C,EAAA,WAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,8BAyDIhB,EAAAA,YAKEwB,EAAA,CA9DN,WA0De1B,EAAA,YA1Df,sBAAAY,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GA0Deb,EAAA,YAAWa,GACnB,cAAab,EAAA,WAAU,CAAA,EACvB,cAAaA,EAAA,WAAU,CAAA,EACvB,YAAWA,EAAA,WAAU,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValuerangebarWidget-CpZYmUl_.cjs","sources":["../src/widgets/ValuerangebarWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"valueParameters\"\n :settings=\"[...appliedSettings]\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widget-index=\"0\"\n />\n <rangebar-widget\n v-bind=\"$attrs\"\n :parameters=\"rangeBarParameters\"\n :settings=\"[...appliedSettings]\"\n :screen-values=\"screenValues\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport ValueWidget from './ValueWidget.vue'\nimport RangebarWidget from './RangebarWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n ValueWidget,\n RangebarWidget,\n },\n computed: {\n valueParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n // Skip 3,4 which is range min,max\n this.parameters[5],\n this.parameters[6], // num characters\n ]\n },\n rangeBarParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[3],\n this.parameters[4],\n this.parameters[5],\n // Skip 6 which is num chars\n this.parameters[7],\n this.parameters[8],\n ]\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ValueWidget","RangebarWidget","_createElementBlock","_normalizeStyle","_ctx","_createVNode","_component_value_widget","_mergeProps","$options","_component_rangebar_widget"],"mappings":"oQA+CKA,EAAU,CACb,OAAQ,CAACC,EAAAA,MAAM,EACf,WAAY,aACVC,EAAAA,QACA,eAAAC,EAAAA,SAEF,SAAU,CACR,iBAAkB,CAChB,MAAO,CACL,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EAEjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,CACnB,GAEF,oBAAqB,CACnB,MAAO,CACL,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EAEjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,CACnB,GAGN,kIAvDEC,EAAAA,mBAgBM,MAAA,CAhBD,IAAI,YAAY,MAAM,kBAAmB,MAvBhDC,EAAAA,eAuBuDC,EAAA,aAAa,IAChEC,EAAAA,YAOEC,EAPFC,aACUH,EAAA,OAAM,CACb,WAAYI,EAAA,gBACZ,aAAcJ,EAAA,eAAe,EAC7B,gBAAeA,EAAA,aACf,mBAAkBA,EAAA,eAClB,eAAc,0EAEjBC,EAAAA,YAMEI,EANFF,aACUH,EAAA,OAAM,CACb,WAAYI,EAAA,mBACZ,aAAcJ,EAAA,eAAe,EAC7B,gBAAeA,EAAA,aACf,eAAc"}
1
+ {"version":3,"file":"ValuerangebarWidget-CpZYmUl_.cjs","sources":["../src/widgets/ValuerangebarWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"valueParameters\"\n :settings=\"[...appliedSettings]\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widget-index=\"0\"\n />\n <rangebar-widget\n v-bind=\"$attrs\"\n :parameters=\"rangeBarParameters\"\n :settings=\"[...appliedSettings]\"\n :screen-values=\"screenValues\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport ValueWidget from './ValueWidget.vue'\nimport RangebarWidget from './RangebarWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n ValueWidget,\n RangebarWidget,\n },\n computed: {\n valueParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n // Skip 3,4 which is range min,max\n this.parameters[5],\n this.parameters[6], // num characters\n ]\n },\n rangeBarParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[3],\n this.parameters[4],\n this.parameters[5],\n // Skip 6 which is num chars\n this.parameters[7],\n this.parameters[8],\n ]\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ValueWidget","RangebarWidget","_createElementBlock","_normalizeStyle","_ctx","_createVNode","_component_value_widget","_mergeProps","$options","_component_rangebar_widget"],"mappings":"oQA+CKA,EAAU,CACb,OAAQ,CAACC,EAAAA,MAAM,EACf,WAAY,aACVC,EAAAA,QACA,eAAAC,EAAAA,SAEF,SAAU,CACR,iBAAkB,CAChB,MAAO,CACL,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EAEjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,CACnB,CACF,EACA,oBAAqB,CACnB,MAAO,CACL,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,EAEjB,KAAK,WAAW,CAAC,EACjB,KAAK,WAAW,CAAC,CACnB,CACF,EAEJ,kIAvDEC,EAAAA,mBAgBM,MAAA,CAhBD,IAAI,YAAY,MAAM,kBAAmB,MAvBhDC,EAAAA,eAuBuDC,EAAA,aAAa,IAChEC,EAAAA,YAOEC,EAPFC,aACUH,EAAA,OAAM,CACb,WAAYI,EAAA,gBACZ,aAAcJ,EAAA,eAAe,EAC7B,gBAAeA,EAAA,aACf,mBAAkBA,EAAA,eAClB,eAAc,0EAEjBC,EAAAA,YAMEI,EANFF,aACUH,EAAA,OAAM,CACb,WAAYI,EAAA,mBACZ,aAAcJ,EAAA,eAAe,EAC7B,gBAAeA,EAAA,aACf,eAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValuerangebarWidget-DnZrho8S.js","sources":["../src/widgets/ValuerangebarWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"valueParameters\"\n :settings=\"[...appliedSettings]\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widget-index=\"0\"\n />\n <rangebar-widget\n v-bind=\"$attrs\"\n :parameters=\"rangeBarParameters\"\n :settings=\"[...appliedSettings]\"\n :screen-values=\"screenValues\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport ValueWidget from './ValueWidget.vue'\nimport RangebarWidget from './RangebarWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n ValueWidget,\n RangebarWidget,\n },\n computed: {\n valueParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n // Skip 3,4 which is range min,max\n this.parameters[5],\n this.parameters[6], // num characters\n ]\n },\n rangeBarParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[3],\n this.parameters[4],\n this.parameters[5],\n // Skip 6 which is num chars\n this.parameters[7],\n this.parameters[8],\n ]\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ValueWidget","RangebarWidget","_createElementBlock","_normalizeStyle","_ctx","_createVNode","_component_value_widget","_mergeProps","$options","_component_rangebar_widget"],"mappings":";;;;;AA+CA,MAAKA,IAAU;AAAA,EACb,QAAQ,CAACC,CAAM;AAAA,EACf,YAAY;AAAA,IACV,aAAAC;AAAA,IACA,gBAAAC;AAAA;EAEF,UAAU;AAAA,IACR,kBAAkB;AAChB,aAAO;AAAA,QACL,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA;AAAA,QAEjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA;AAAA,MACnB;AAAA;IAEF,qBAAqB;AACnB,aAAO;AAAA,QACL,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA;AAAA,QAEjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,MACnB;AAAA;;AAGN;;;cAvDEC,EAgBM,OAAA;AAAA,IAhBD,KAAI;AAAA,IAAY,OAAM;AAAA,IAAmB,OAvBhDC,EAuBuDC,EAAA,aAAa;AAAA;IAChEC,EAOEC,GAPFC,EACUH,EAAA,QAAM;AAAA,MACb,YAAYI,EAAA;AAAA,MACZ,cAAcJ,EAAA,eAAe;AAAA,MAC7B,iBAAeA,EAAA;AAAA,MACf,oBAAkBA,EAAA;AAAA,MAClB,gBAAc;AAAA;IAEjBC,EAMEI,GANFF,EACUH,EAAA,QAAM;AAAA,MACb,YAAYI,EAAA;AAAA,MACZ,cAAcJ,EAAA,eAAe;AAAA,MAC7B,iBAAeA,EAAA;AAAA,MACf,gBAAc;AAAA;;;;"}
1
+ {"version":3,"file":"ValuerangebarWidget-DnZrho8S.js","sources":["../src/widgets/ValuerangebarWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div ref=\"container\" class=\"d-flex flex-row\" :style=\"computedStyle\">\n <value-widget\n v-bind=\"$attrs\"\n :parameters=\"valueParameters\"\n :settings=\"[...appliedSettings]\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widget-index=\"0\"\n />\n <rangebar-widget\n v-bind=\"$attrs\"\n :parameters=\"rangeBarParameters\"\n :settings=\"[...appliedSettings]\"\n :screen-values=\"screenValues\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport ValueWidget from './ValueWidget.vue'\nimport RangebarWidget from './RangebarWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n ValueWidget,\n RangebarWidget,\n },\n computed: {\n valueParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n // Skip 3,4 which is range min,max\n this.parameters[5],\n this.parameters[6], // num characters\n ]\n },\n rangeBarParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n this.parameters[3],\n this.parameters[4],\n this.parameters[5],\n // Skip 6 which is num chars\n this.parameters[7],\n this.parameters[8],\n ]\n },\n },\n}\n</script>\n"],"names":["_sfc_main","Widget","ValueWidget","RangebarWidget","_createElementBlock","_normalizeStyle","_ctx","_createVNode","_component_value_widget","_mergeProps","$options","_component_rangebar_widget"],"mappings":";;;;;AA+CA,MAAKA,IAAU;AAAA,EACb,QAAQ,CAACC,CAAM;AAAA,EACf,YAAY;AAAA,IACV,aAAAC;AAAA,IACA,gBAAAC;AAAA;EAEF,UAAU;AAAA,IACR,kBAAkB;AAChB,aAAO;AAAA,QACL,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA;AAAA,QAEjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA;AAAA,MACnB;AAAA,IACF;AAAA,IACA,qBAAqB;AACnB,aAAO;AAAA,QACL,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA;AAAA,QAEjB,KAAK,WAAW,CAAC;AAAA,QACjB,KAAK,WAAW,CAAC;AAAA,MACnB;AAAA,IACF;AAAA;AAEJ;;;cAvDEC,EAgBM,OAAA;AAAA,IAhBD,KAAI;AAAA,IAAY,OAAM;AAAA,IAAmB,OAvBhDC,EAuBuDC,EAAA,aAAa;AAAA;IAChEC,EAOEC,GAPFC,EACUH,EAAA,QAAM;AAAA,MACb,YAAYI,EAAA;AAAA,MACZ,cAAcJ,EAAA,eAAe;AAAA,MAC7B,iBAAeA,EAAA;AAAA,MACf,oBAAkBA,EAAA;AAAA,MAClB,gBAAc;AAAA;IAEjBC,EAMEI,GANFF,EACUH,EAAA,QAAM;AAAA,MACb,YAAYI,EAAA;AAAA,MACZ,cAAcJ,EAAA,eAAe;AAAA,MAC7B,iBAAeA,EAAA;AAAA,MACf,gBAAc;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalWidget-CcJMMaK_.cjs","sources":["../src/widgets/VerticalWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div ref=\"container\" :style=\"computedStyle\">\n <component\n :is=\"widget.type\"\n v-for=\"(widget, index) in widgets\"\n v-bind=\"listeners\"\n :key=\"index\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n :line=\"widget.line\"\n :line-number=\"widget.lineNumber\"\n />\n </div>\n</template>\n\n<script>\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n created: function () {\n if (this.parameters[0]) {\n let margin = this.parameters[0]\n this.widgets.forEach((widget) => {\n // Don't push MARGIN on a widget that's already defined it\n const found = widget.settings.find(\n (setting) =>\n setting[0] === 'MARGIN' ||\n (setting[0] === 'RAW' &&\n setting[1].toUpperCase().includes('MARGIN')),\n )\n if (found === undefined) {\n widget.settings.push(['MARGIN', margin])\n }\n })\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","margin","widget","setting","_createElementBlock","_normalizeStyle","_ctx","_openBlock","_Fragment","_renderList","index","_createBlock","_resolveDynamicComponent","_mergeProps"],"mappings":"iLA4CKA,EAAU,CACb,OAAQ,CAACC,EAAAA,MAAM,EACf,QAAS,UAAY,CACnB,GAAI,KAAK,WAAW,CAAC,EAAG,CACtB,IAAIC,EAAS,KAAK,WAAW,CAAC,EAC9B,KAAK,QAAQ,QAASC,GAAW,CAEjBA,EAAO,SAAS,KAC3BC,GACCA,EAAQ,CAAC,IAAM,UACdA,EAAQ,CAAC,IAAM,OACdA,EAAQ,CAAC,EAAE,YAAW,EAAG,SAAS,QAAQ,CAChD,IACc,QACZD,EAAO,SAAS,KAAK,CAAC,SAAUD,CAAM,CAAC,EAE1C,CACH,EAEJ,+CAxCEG,EAAAA,mBAgBM,MAAA,CAhBD,IAAI,YAAa,MAvBxBC,EAAAA,eAuB+BC,EAAA,aAAa,KACxCC,EAAAA,UAAA,EAAA,EAAAH,EAAAA,mBAcEI,gBAtCNC,EAAAA,WA0BgCH,EAAA,QA1BhC,CA0BcJ,EAAQQ,mBAFlBC,EAAAA,YAxBJC,EAAAA,wBAyBWV,EAAO,IAAI,EADlBW,EAAAA,WAcE,CAtCN,QAAA,IA2BcP,EAAA,UAAS,CAChB,IAAKI,EACL,OAAQR,EAAO,OACf,WAAYA,EAAO,WACnB,SAAUA,EAAO,SACjB,gBAAeI,EAAA,aACf,mBAAkBA,EAAA,eAClB,QAASJ,EAAO,QAChB,KAAMA,EAAO,KACb,KAAMA,EAAO,KACb,cAAaA,EAAO"}
1
+ {"version":3,"file":"VerticalWidget-CcJMMaK_.cjs","sources":["../src/widgets/VerticalWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div ref=\"container\" :style=\"computedStyle\">\n <component\n :is=\"widget.type\"\n v-for=\"(widget, index) in widgets\"\n v-bind=\"listeners\"\n :key=\"index\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n :line=\"widget.line\"\n :line-number=\"widget.lineNumber\"\n />\n </div>\n</template>\n\n<script>\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n created: function () {\n if (this.parameters[0]) {\n let margin = this.parameters[0]\n this.widgets.forEach((widget) => {\n // Don't push MARGIN on a widget that's already defined it\n const found = widget.settings.find(\n (setting) =>\n setting[0] === 'MARGIN' ||\n (setting[0] === 'RAW' &&\n setting[1].toUpperCase().includes('MARGIN')),\n )\n if (found === undefined) {\n widget.settings.push(['MARGIN', margin])\n }\n })\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","margin","widget","setting","_createElementBlock","_normalizeStyle","_ctx","_openBlock","_Fragment","_renderList","index","_createBlock","_resolveDynamicComponent","_mergeProps"],"mappings":"iLA4CKA,EAAU,CACb,OAAQ,CAACC,EAAAA,MAAM,EACf,QAAS,UAAY,CACnB,GAAI,KAAK,WAAW,CAAC,EAAG,CACtB,IAAIC,EAAS,KAAK,WAAW,CAAC,EAC9B,KAAK,QAAQ,QAASC,GAAW,CAEjBA,EAAO,SAAS,KAC3BC,GACCA,EAAQ,CAAC,IAAM,UACdA,EAAQ,CAAC,IAAM,OACdA,EAAQ,CAAC,EAAE,YAAW,EAAG,SAAS,QAAQ,CAChD,IACc,QACZD,EAAO,SAAS,KAAK,CAAC,SAAUD,CAAM,CAAC,CAE3C,CAAC,CACH,CACF,CACF,+CAxCEG,EAAAA,mBAgBM,MAAA,CAhBD,IAAI,YAAa,MAvBxBC,EAAAA,eAuB+BC,EAAA,aAAa,KACxCC,EAAAA,UAAA,EAAA,EAAAH,EAAAA,mBAcEI,gBAtCNC,EAAAA,WA0BgCH,EAAA,QA1BhC,CA0BcJ,EAAQQ,mBAFlBC,EAAAA,YAxBJC,EAAAA,wBAyBWV,EAAO,IAAI,EADlBW,EAAAA,WAcE,CAtCN,QAAA,IA2BcP,EAAA,UAAS,CAChB,IAAKI,EACL,OAAQR,EAAO,OACf,WAAYA,EAAO,WACnB,SAAUA,EAAO,SACjB,gBAAeI,EAAA,aACf,mBAAkBA,EAAA,eAClB,QAASJ,EAAO,QAChB,KAAMA,EAAO,KACb,KAAMA,EAAO,KACb,cAAaA,EAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalWidget-DJvoxqLE.js","sources":["../src/widgets/VerticalWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div ref=\"container\" :style=\"computedStyle\">\n <component\n :is=\"widget.type\"\n v-for=\"(widget, index) in widgets\"\n v-bind=\"listeners\"\n :key=\"index\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n :line=\"widget.line\"\n :line-number=\"widget.lineNumber\"\n />\n </div>\n</template>\n\n<script>\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n created: function () {\n if (this.parameters[0]) {\n let margin = this.parameters[0]\n this.widgets.forEach((widget) => {\n // Don't push MARGIN on a widget that's already defined it\n const found = widget.settings.find(\n (setting) =>\n setting[0] === 'MARGIN' ||\n (setting[0] === 'RAW' &&\n setting[1].toUpperCase().includes('MARGIN')),\n )\n if (found === undefined) {\n widget.settings.push(['MARGIN', margin])\n }\n })\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","margin","widget","setting","_createElementBlock","_normalizeStyle","_ctx","_openBlock","_Fragment","_renderList","index","_createBlock","_resolveDynamicComponent","_mergeProps"],"mappings":";;;AA4CA,MAAKA,IAAU;AAAA,EACb,QAAQ,CAACC,CAAM;AAAA,EACf,SAAS,WAAY;AACnB,QAAI,KAAK,WAAW,CAAC,GAAG;AACtB,UAAIC,IAAS,KAAK,WAAW,CAAC;AAC9B,WAAK,QAAQ,QAAQ,CAACC,MAAW;AAQ/B,QANcA,EAAO,SAAS;AAAA,UAC5B,CAACC,MACCA,EAAQ,CAAC,MAAM,YACdA,EAAQ,CAAC,MAAM,SACdA,EAAQ,CAAC,EAAE,YAAW,EAAG,SAAS,QAAQ;AAAA,QAChD,MACc,UACZD,EAAO,SAAS,KAAK,CAAC,UAAUD,CAAM,CAAC;AAAA,OAE1C;AAAA,IACH;AAAA;AAEJ;;cAxCEG,EAgBM,OAAA;AAAA,IAhBD,KAAI;AAAA,IAAa,OAvBxBC,EAuB+BC,EAAA,aAAa;AAAA;KACxCC,EAAA,EAAA,GAAAH,EAcEI,SAtCNC,EA0BgCH,EAAA,SA1BhC,CA0BcJ,GAAQQ,YAFlBC,EAxBJC,EAyBWV,EAAO,IAAI,GADlBW,EAcE,EAtCN,SAAA,MA2BcP,EAAA,WAAS;AAAA,MAChB,KAAKI;AAAA,MACL,QAAQR,EAAO;AAAA,MACf,YAAYA,EAAO;AAAA,MACnB,UAAUA,EAAO;AAAA,MACjB,iBAAeI,EAAA;AAAA,MACf,oBAAkBA,EAAA;AAAA,MAClB,SAASJ,EAAO;AAAA,MAChB,MAAMA,EAAO;AAAA,MACb,MAAMA,EAAO;AAAA,MACb,eAAaA,EAAO;AAAA;;;;"}
1
+ {"version":3,"file":"VerticalWidget-DJvoxqLE.js","sources":["../src/widgets/VerticalWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div ref=\"container\" :style=\"computedStyle\">\n <component\n :is=\"widget.type\"\n v-for=\"(widget, index) in widgets\"\n v-bind=\"listeners\"\n :key=\"index\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n :line=\"widget.line\"\n :line-number=\"widget.lineNumber\"\n />\n </div>\n</template>\n\n<script>\nimport Layout from './Layout'\nexport default {\n mixins: [Layout],\n created: function () {\n if (this.parameters[0]) {\n let margin = this.parameters[0]\n this.widgets.forEach((widget) => {\n // Don't push MARGIN on a widget that's already defined it\n const found = widget.settings.find(\n (setting) =>\n setting[0] === 'MARGIN' ||\n (setting[0] === 'RAW' &&\n setting[1].toUpperCase().includes('MARGIN')),\n )\n if (found === undefined) {\n widget.settings.push(['MARGIN', margin])\n }\n })\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","margin","widget","setting","_createElementBlock","_normalizeStyle","_ctx","_openBlock","_Fragment","_renderList","index","_createBlock","_resolveDynamicComponent","_mergeProps"],"mappings":";;;AA4CA,MAAKA,IAAU;AAAA,EACb,QAAQ,CAACC,CAAM;AAAA,EACf,SAAS,WAAY;AACnB,QAAI,KAAK,WAAW,CAAC,GAAG;AACtB,UAAIC,IAAS,KAAK,WAAW,CAAC;AAC9B,WAAK,QAAQ,QAAQ,CAACC,MAAW;AAQ/B,QANcA,EAAO,SAAS;AAAA,UAC5B,CAACC,MACCA,EAAQ,CAAC,MAAM,YACdA,EAAQ,CAAC,MAAM,SACdA,EAAQ,CAAC,EAAE,YAAW,EAAG,SAAS,QAAQ;AAAA,QAChD,MACc,UACZD,EAAO,SAAS,KAAK,CAAC,UAAUD,CAAM,CAAC;AAAA,MAE3C,CAAC;AAAA,IACH;AAAA,EACF;AACF;;cAxCEG,EAgBM,OAAA;AAAA,IAhBD,KAAI;AAAA,IAAa,OAvBxBC,EAuB+BC,EAAA,aAAa;AAAA;KACxCC,EAAA,EAAA,GAAAH,EAcEI,SAtCNC,EA0BgCH,EAAA,SA1BhC,CA0BcJ,GAAQQ,YAFlBC,EAxBJC,EAyBWV,EAAO,IAAI,GADlBW,EAcE,EAtCN,SAAA,MA2BcP,EAAA,WAAS;AAAA,MAChB,KAAKI;AAAA,MACL,QAAQR,EAAO;AAAA,MACf,YAAYA,EAAO;AAAA,MACnB,UAAUA,EAAO;AAAA,MACjB,iBAAeI,EAAA;AAAA,MACf,oBAAkBA,EAAA;AAAA,MAClB,SAASJ,EAAO;AAAA,MAChB,MAAMA,EAAO;AAAA,MACb,MAAMA,EAAO;AAAA,MACb,eAAaA,EAAO;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalboxWidget-CJR_mOLa.cjs","sources":["../src/widgets/VerticalboxWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 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\n<template>\n <div>\n <label-widget\n v-if=\"parameters.length > 0\"\n :parameters=\"parameters.slice(0, 1)\"\n :settings=\"[...labelSettings]\"\n :widget-index=\"0\"\n />\n <horizontal-line-widget\n :settings=\"[...appliedSettings]\"\n :widget-index=\"1\"\n />\n <vertical-widget\n v-bind=\"listeners\"\n :parameters=\"parameters.slice(1)\"\n :settings=\"settings\"\n :widgets=\"widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n />\n </div>\n</template>\n\n<script>\nimport LabelWidget from './LabelWidget.vue'\nimport HorizontalLineWidget from './HorizontallineWidget.vue'\nimport VerticalWidget from './VerticalWidget.vue'\nimport Layout from './Layout'\n\nexport default {\n mixins: [Layout],\n components: {\n LabelWidget,\n HorizontalLineWidget,\n VerticalWidget,\n },\n created() {\n this.labelSettings = [...this.appliedSettings]\n // Set the font-weight to bold if not already set\n const fontWeightSetting = this.labelSettings.find(\n (setting) =>\n setting[0] === '0' &&\n setting[1] === 'RAW' &&\n setting[2] === 'font-weight',\n )\n if (!fontWeightSetting) {\n this.labelSettings.push(['0', 'RAW', 'font-weight', 'bold'])\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","LabelWidget","HorizontalLineWidget","VerticalWidget","setting","_createElementBlock","_ctx","_createBlock","_component_label_widget","_createCommentVNode","_createVNode","_component_horizontal_line_widget","_component_vertical_widget","_mergeProps"],"mappings":"qTAmDKA,EAAU,CACb,OAAQ,CAACC,EAAAA,MAAM,EACf,WAAY,aACVC,EAAAA,QACA,qBAAAC,EAAAA,QACA,eAAAC,EAAAA,SAEF,SAAU,CACR,KAAK,cAAgB,CAAC,GAAG,KAAK,eAAe,EAEnB,KAAK,cAAc,KAC1CC,GACCA,EAAQ,CAAC,IAAM,KACfA,EAAQ,CAAC,IAAM,OACfA,EAAQ,CAAC,IAAM,aACnB,GAEE,KAAK,cAAc,KAAK,CAAC,IAAK,MAAO,cAAe,MAAM,CAAC,EAGjE,iLAhDEC,qBAmBM,MAAA,KAAA,CAjBIC,EAAA,WAAW,OAAM,iBADzBC,EAAAA,YAKEC,EAAA,CA7BN,IAAA,EA0BO,WAAYF,EAAA,WAAW,MAAK,EAAA,CAAA,EAC5B,aAAcA,EAAA,aAAa,EAC3B,eAAc,sCA5BrBG,EAAAA,mBAAA,GAAA,EAAA,EA8BIC,EAAAA,YAGEC,EAAA,CAFC,aAAcL,EAAA,eAAe,EAC7B,eAAc,wBAEjBI,EAAAA,YAOEE,EAPFC,aACUP,EAAA,UAAS,CAChB,WAAYA,EAAA,WAAW,MAAK,CAAA,EAC5B,SAAUA,EAAA,SACV,QAASA,EAAA,QACT,gBAAeA,EAAA,aACf,mBAAkBA,EAAA"}
1
+ {"version":3,"file":"VerticalboxWidget-CJR_mOLa.cjs","sources":["../src/widgets/VerticalboxWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 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\n<template>\n <div>\n <label-widget\n v-if=\"parameters.length > 0\"\n :parameters=\"parameters.slice(0, 1)\"\n :settings=\"[...labelSettings]\"\n :widget-index=\"0\"\n />\n <horizontal-line-widget\n :settings=\"[...appliedSettings]\"\n :widget-index=\"1\"\n />\n <vertical-widget\n v-bind=\"listeners\"\n :parameters=\"parameters.slice(1)\"\n :settings=\"settings\"\n :widgets=\"widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n />\n </div>\n</template>\n\n<script>\nimport LabelWidget from './LabelWidget.vue'\nimport HorizontalLineWidget from './HorizontallineWidget.vue'\nimport VerticalWidget from './VerticalWidget.vue'\nimport Layout from './Layout'\n\nexport default {\n mixins: [Layout],\n components: {\n LabelWidget,\n HorizontalLineWidget,\n VerticalWidget,\n },\n created() {\n this.labelSettings = [...this.appliedSettings]\n // Set the font-weight to bold if not already set\n const fontWeightSetting = this.labelSettings.find(\n (setting) =>\n setting[0] === '0' &&\n setting[1] === 'RAW' &&\n setting[2] === 'font-weight',\n )\n if (!fontWeightSetting) {\n this.labelSettings.push(['0', 'RAW', 'font-weight', 'bold'])\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","LabelWidget","HorizontalLineWidget","VerticalWidget","setting","_createElementBlock","_ctx","_createBlock","_component_label_widget","_createCommentVNode","_createVNode","_component_horizontal_line_widget","_component_vertical_widget","_mergeProps"],"mappings":"qTAmDKA,EAAU,CACb,OAAQ,CAACC,EAAAA,MAAM,EACf,WAAY,aACVC,EAAAA,QACA,qBAAAC,EAAAA,QACA,eAAAC,EAAAA,SAEF,SAAU,CACR,KAAK,cAAgB,CAAC,GAAG,KAAK,eAAe,EAEnB,KAAK,cAAc,KAC1CC,GACCA,EAAQ,CAAC,IAAM,KACfA,EAAQ,CAAC,IAAM,OACfA,EAAQ,CAAC,IAAM,aACnB,GAEE,KAAK,cAAc,KAAK,CAAC,IAAK,MAAO,cAAe,MAAM,CAAC,CAE/D,CACF,iLAhDEC,qBAmBM,MAAA,KAAA,CAjBIC,EAAA,WAAW,OAAM,iBADzBC,EAAAA,YAKEC,EAAA,CA7BN,IAAA,EA0BO,WAAYF,EAAA,WAAW,MAAK,EAAA,CAAA,EAC5B,aAAcA,EAAA,aAAa,EAC3B,eAAc,sCA5BrBG,EAAAA,mBAAA,GAAA,EAAA,EA8BIC,EAAAA,YAGEC,EAAA,CAFC,aAAcL,EAAA,eAAe,EAC7B,eAAc,wBAEjBI,EAAAA,YAOEE,EAPFC,aACUP,EAAA,UAAS,CAChB,WAAYA,EAAA,WAAW,MAAK,CAAA,EAC5B,SAAUA,EAAA,SACV,QAASA,EAAA,QACT,gBAAeA,EAAA,aACf,mBAAkBA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalboxWidget-CYYyLBoO.js","sources":["../src/widgets/VerticalboxWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 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\n<template>\n <div>\n <label-widget\n v-if=\"parameters.length > 0\"\n :parameters=\"parameters.slice(0, 1)\"\n :settings=\"[...labelSettings]\"\n :widget-index=\"0\"\n />\n <horizontal-line-widget\n :settings=\"[...appliedSettings]\"\n :widget-index=\"1\"\n />\n <vertical-widget\n v-bind=\"listeners\"\n :parameters=\"parameters.slice(1)\"\n :settings=\"settings\"\n :widgets=\"widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n />\n </div>\n</template>\n\n<script>\nimport LabelWidget from './LabelWidget.vue'\nimport HorizontalLineWidget from './HorizontallineWidget.vue'\nimport VerticalWidget from './VerticalWidget.vue'\nimport Layout from './Layout'\n\nexport default {\n mixins: [Layout],\n components: {\n LabelWidget,\n HorizontalLineWidget,\n VerticalWidget,\n },\n created() {\n this.labelSettings = [...this.appliedSettings]\n // Set the font-weight to bold if not already set\n const fontWeightSetting = this.labelSettings.find(\n (setting) =>\n setting[0] === '0' &&\n setting[1] === 'RAW' &&\n setting[2] === 'font-weight',\n )\n if (!fontWeightSetting) {\n this.labelSettings.push(['0', 'RAW', 'font-weight', 'bold'])\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","LabelWidget","HorizontalLineWidget","VerticalWidget","setting","_createElementBlock","_ctx","_createBlock","_component_label_widget","_createCommentVNode","_createVNode","_component_horizontal_line_widget","_component_vertical_widget","_mergeProps"],"mappings":";;;;;;AAmDA,MAAKA,IAAU;AAAA,EACb,QAAQ,CAACC,CAAM;AAAA,EACf,YAAY;AAAA,IACV,aAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,gBAAAC;AAAA;EAEF,UAAU;AACR,SAAK,gBAAgB,CAAC,GAAG,KAAK,eAAe,GAEnB,KAAK,cAAc;AAAA,MAC3C,CAACC,MACCA,EAAQ,CAAC,MAAM,OACfA,EAAQ,CAAC,MAAM,SACfA,EAAQ,CAAC,MAAM;AAAA,IACnB,KAEE,KAAK,cAAc,KAAK,CAAC,KAAK,OAAO,eAAe,MAAM,CAAC;AAAA;AAGjE;;;cAhDEC,EAmBM,OAAA,MAAA;AAAA,IAjBIC,EAAA,WAAW,SAAM,UADzBC,EAKEC,GAAA;AAAA,MA7BN,KAAA;AAAA,MA0BO,YAAYF,EAAA,WAAW,MAAK,GAAA,CAAA;AAAA,MAC5B,cAAcA,EAAA,aAAa;AAAA,MAC3B,gBAAc;AAAA,+CA5BrBG,EAAA,IAAA,EAAA;AAAA,IA8BIC,EAGEC,GAAA;AAAA,MAFC,cAAcL,EAAA,eAAe;AAAA,MAC7B,gBAAc;AAAA;IAEjBI,EAOEE,GAPFC,EACUP,EAAA,WAAS;AAAA,MAChB,YAAYA,EAAA,WAAW,MAAK,CAAA;AAAA,MAC5B,UAAUA,EAAA;AAAA,MACV,SAASA,EAAA;AAAA,MACT,iBAAeA,EAAA;AAAA,MACf,oBAAkBA,EAAA;AAAA;;;;"}
1
+ {"version":3,"file":"VerticalboxWidget-CYYyLBoO.js","sources":["../src/widgets/VerticalboxWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 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\n<template>\n <div>\n <label-widget\n v-if=\"parameters.length > 0\"\n :parameters=\"parameters.slice(0, 1)\"\n :settings=\"[...labelSettings]\"\n :widget-index=\"0\"\n />\n <horizontal-line-widget\n :settings=\"[...appliedSettings]\"\n :widget-index=\"1\"\n />\n <vertical-widget\n v-bind=\"listeners\"\n :parameters=\"parameters.slice(1)\"\n :settings=\"settings\"\n :widgets=\"widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n />\n </div>\n</template>\n\n<script>\nimport LabelWidget from './LabelWidget.vue'\nimport HorizontalLineWidget from './HorizontallineWidget.vue'\nimport VerticalWidget from './VerticalWidget.vue'\nimport Layout from './Layout'\n\nexport default {\n mixins: [Layout],\n components: {\n LabelWidget,\n HorizontalLineWidget,\n VerticalWidget,\n },\n created() {\n this.labelSettings = [...this.appliedSettings]\n // Set the font-weight to bold if not already set\n const fontWeightSetting = this.labelSettings.find(\n (setting) =>\n setting[0] === '0' &&\n setting[1] === 'RAW' &&\n setting[2] === 'font-weight',\n )\n if (!fontWeightSetting) {\n this.labelSettings.push(['0', 'RAW', 'font-weight', 'bold'])\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","LabelWidget","HorizontalLineWidget","VerticalWidget","setting","_createElementBlock","_ctx","_createBlock","_component_label_widget","_createCommentVNode","_createVNode","_component_horizontal_line_widget","_component_vertical_widget","_mergeProps"],"mappings":";;;;;;AAmDA,MAAKA,IAAU;AAAA,EACb,QAAQ,CAACC,CAAM;AAAA,EACf,YAAY;AAAA,IACV,aAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,gBAAAC;AAAA;EAEF,UAAU;AACR,SAAK,gBAAgB,CAAC,GAAG,KAAK,eAAe,GAEnB,KAAK,cAAc;AAAA,MAC3C,CAACC,MACCA,EAAQ,CAAC,MAAM,OACfA,EAAQ,CAAC,MAAM,SACfA,EAAQ,CAAC,MAAM;AAAA,IACnB,KAEE,KAAK,cAAc,KAAK,CAAC,KAAK,OAAO,eAAe,MAAM,CAAC;AAAA,EAE/D;AACF;;;cAhDEC,EAmBM,OAAA,MAAA;AAAA,IAjBIC,EAAA,WAAW,SAAM,UADzBC,EAKEC,GAAA;AAAA,MA7BN,KAAA;AAAA,MA0BO,YAAYF,EAAA,WAAW,MAAK,GAAA,CAAA;AAAA,MAC5B,cAAcA,EAAA,aAAa;AAAA,MAC3B,gBAAc;AAAA,+CA5BrBG,EAAA,IAAA,EAAA;AAAA,IA8BIC,EAGEC,GAAA;AAAA,MAFC,cAAcL,EAAA,eAAe;AAAA,MAC7B,gBAAc;AAAA;IAEjBI,EAOEE,GAPFC,EACUP,EAAA,WAAS;AAAA,MAChB,YAAYA,EAAA,WAAW,MAAK,CAAA;AAAA,MAC5B,UAAUA,EAAA;AAAA,MACV,SAASA,EAAA;AAAA,MACT,iBAAeA,EAAA;AAAA,MACf,oBAAkBA,EAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Widget-Bn_S-zBo.js","sources":["../src/widgets/Widget.js"],"sourcesContent":["/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 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\nimport { ConfigParserError } from '@openc3/js-common/services'\nimport WidgetComponents from './WidgetComponents'\n\nexport default {\n mixins: [WidgetComponents],\n props: {\n widgetIndex: {\n type: Number,\n default: null,\n },\n parameters: {\n type: Array,\n default: () => [],\n },\n settings: {\n type: Array,\n default: () => [],\n },\n screenValues: {\n type: Object,\n default: () => {},\n },\n screenTimeZone: {\n type: String,\n default: 'local',\n },\n namedWidgets: {\n type: Object,\n default: {},\n },\n line: {\n type: String,\n default: '',\n },\n lineNumber: {\n type: Number,\n default: 0,\n },\n },\n data() {\n return {\n // The settings that apply to the current widget based on widgetIndex\n // Calculated in created, updated in setWidth & setHeight and used in computedStyle\n appliedSettings: [],\n // We make style a data attribute so as we recurse through nested\n // widgets we can check to see if style attributes have been applied\n // at any level of the widget, i.e. if LABELVALUE applies a style\n // to the VALUE component then we don't want the VALUE widget to think\n // it doesn't have a style when it renders.\n appliedStyle: {},\n widgetName: null,\n screenId: 'NO_SCREEN', // only used for named widgets - hopefully overwritten by settings value in created()\n }\n },\n computed: {\n computedStyle: function () {\n // Take all the COSMOS settings and create appliedStyle with actual css values\n this.appliedSettings.forEach((setting) => {\n this.applyStyleSetting(setting)\n })\n\n // If nothing has yet defined a width or height then we add flex to the style\n if (\n this.appliedStyle['width'] === undefined &&\n this.appliedStyle['height'] === undefined\n ) {\n // This flex allows for alignment in our widgets\n // The value of '1 1 auto' means allow items to grow and shrink proportionally\n // and by default try to take an equal portion of the parent\n this.appliedStyle['flex'] = '1 1 auto' // flex-grow, flex-shrink, flex-basis\n }\n return this.appliedStyle\n },\n screen: function () {\n // This exists for backwards compatibility of screen definitions since widgets no longer have a reference\n // to the Openc3Screen component instance\n const that = this\n return {\n getNamedWidget: function (widgetName) {\n return that.$store.getters.namedWidget(\n that.toQualifiedWidgetName(widgetName),\n )\n },\n open: function (target, screen) {\n that.$emit('open', target, screen)\n },\n close: function (target, screen) {\n that.$emit('close', target, screen)\n },\n closeAll: function () {\n that.$emit('closeAll')\n },\n }\n },\n listeners: function () {\n // Vue 3 deprecated $listeners, which was used to bubble up events to the Openc3Screen component. The new way is\n // to use v-bind=\"$attrs\", but that also passes the `style` DOM attribute to children, which makes widgets\n // inherit styles from the layout like height and flex.\n // This is a workaround to let us v-bind to just the event listeners (which were previously in the $listeners\n // object in Vue 2).\n return Object.entries(this.$attrs).reduce((listeners, entry) => {\n if (entry[0].startsWith('on')) {\n return {\n ...listeners,\n [entry[0]]: entry[1],\n }\n }\n return listeners\n }, {})\n },\n },\n watch: {\n widgetName: function (newName, oldName) {\n this.$store.commit(\n 'clearNamedWidget',\n this.toQualifiedWidgetName(oldName),\n )\n this.$store.commit('setNamedWidget', {\n [this.toQualifiedWidgetName(newName)]: this,\n })\n },\n },\n created() {\n // Look through the settings and get a reference to the screen\n this.screenId = this.settings\n .find((setting) => setting[0] === '__SCREEN_ID__')\n ?.at(1)\n\n this.widgetName = this.settings\n .find((setting) => setting[0] === 'NAMED_WIDGET')\n ?.at(1)\n\n // Figure out any subsettings that apply\n this.appliedSettings = this.settings\n .map((setting) => {\n const index = parseInt(setting[0])\n // If the first value isn't a number or if there isn't a widgetIndex\n // then it's not a subsetting so just return the setting\n if (isNaN(index) || this.widgetIndex === null) {\n return setting\n }\n // This is our setting so slice off the index and return\n // this effectively promotes the subsetting to a setting\n // on the current widget\n if (this.widgetIndex === index) {\n return setting.slice(1)\n }\n })\n // Remove any settings that we filtered out with null\n .filter((setting) => setting !== undefined)\n },\n beforeUnmount() {\n if (this.widgetName) {\n this.$store.commit(\n 'clearNamedWidget',\n this.toQualifiedWidgetName(this.widgetName),\n )\n }\n },\n methods: {\n applyStyleSetting(setting) {\n switch (setting[0]) {\n case 'TEXTALIGN':\n this.appliedStyle['text-align'] =\n setting[1].toLowerCase() + ' !important'\n this.appliedStyle['--text-align'] = setting[1].toLowerCase()\n break\n case 'PADDING':\n if (!isNaN(Number(setting[1]))) {\n setting[1] += 'px'\n }\n this.appliedStyle['padding'] = setting[1] + ' !important'\n break\n case 'MARGIN':\n if (!isNaN(Number(setting[1]))) {\n setting[1] += 'px'\n }\n this.appliedStyle['margin'] = setting[1] + ' !important'\n break\n case 'BACKCOLOR':\n this.appliedStyle['background-color'] =\n this.getColor(setting.slice(1)) + ' !important'\n break\n case 'TEXTCOLOR':\n this.appliedStyle['color'] =\n this.getColor(setting.slice(1)) + ' !important'\n break\n case 'BORDERCOLOR':\n this.appliedStyle['border-width'] = '1px!important'\n this.appliedStyle['border-style'] = 'solid!important'\n this.appliedStyle['border-color'] =\n this.getColor(setting.slice(1)) + ' !important'\n break\n case 'WIDTH':\n if (!isNaN(Number(setting[1]))) {\n setting[1] += 'px'\n }\n this.appliedStyle['width'] = setting[1] + ' !important'\n break\n case 'HEIGHT':\n if (!isNaN(Number(setting[1]))) {\n setting[1] += 'px'\n }\n this.appliedStyle['height'] = setting[1] + ' !important'\n break\n case 'RAW':\n this.appliedStyle[setting[1].toLowerCase()] =\n setting[2] + ' !important'\n break\n }\n },\n verifyNumParams(keyword, min_num_params, max_num_params, usage = '') {\n let parser = {\n line: this.line,\n lineNumber: this.lineNumber,\n keyword: keyword,\n parameters: this.parameters,\n }\n\n // This syntax works with 0 because each doesn't return any values\n // for a backwards range\n for (let index = 1; index <= min_num_params; index++) {\n // If the parameter is nil (0 based) then we have a problem\n if (this.parameters[index - 1] === undefined) {\n throw new ConfigParserError(\n parser,\n `Not enough parameters for ${keyword}.`,\n usage,\n 'https://docs.openc3.com/docs/configuration',\n )\n }\n }\n // If they pass null for max_params we don't check for a maximum number\n if (max_num_params !== null && this.parameters.length > max_num_params) {\n throw new ConfigParserError(\n parser,\n `Too many parameters for ${keyword}.`,\n usage,\n 'https://docs.openc3.com/docs/configuration',\n )\n }\n },\n setWidth(width, units = 'px', defaultWidth = '120') {\n // Don't set the width if someone has already set it\n // This is important in PacketViewer which uses the value-widget\n // and passes an explicit width setting to use\n let foundSetting = this.appliedSettings.find(\n (setting) => setting[0] === 'WIDTH',\n )\n if (foundSetting) {\n return foundSetting['WIDTH']\n } else {\n if (width) {\n this.appliedSettings.push(['WIDTH', `${width}${units}`])\n return parseInt(width)\n } else {\n this.appliedSettings.push(['WIDTH', `${defaultWidth}${units}`])\n return parseInt(defaultWidth)\n }\n }\n },\n setHeight(height, units = 'px', defaultHeight = '20') {\n // Don't set the height if someone has already set it\n let foundSetting = null\n foundSetting = this.appliedSettings.find(\n (setting) => setting[0] === 'HEIGHT',\n )\n if (foundSetting) {\n return foundSetting['HEIGHT']\n } else {\n if (height) {\n this.appliedSettings.push(['HEIGHT', `${height}${units}`])\n return parseInt(height)\n } else {\n this.appliedSettings.push(['HEIGHT', `${defaultHeight}${units}`])\n return parseInt(defaultHeight)\n }\n }\n },\n // Expects an array, can either be a single color or 3 rgb values\n getColor(setting) {\n switch (setting.length) {\n case 1:\n return setting[0].toLowerCase()\n case 3:\n return `rgb(${setting[0]},${setting[1]},${setting[2]})`\n }\n },\n toQualifiedWidgetName(widgetName) {\n return `${this.screenId}:${widgetName}`\n },\n },\n}\n"],"names":["Widget","WidgetComponents","setting","that","widgetName","target","screen","listeners","entry","newName","oldName","_a","_b","index","keyword","min_num_params","max_num_params","usage","parser","ConfigParserError","width","units","defaultWidth","foundSetting","height","defaultHeight"],"mappings":"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"}
1
+ {"version":3,"file":"Widget-Bn_S-zBo.js","sources":["../src/widgets/Widget.js"],"sourcesContent":["/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 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\nimport { ConfigParserError } from '@openc3/js-common/services'\nimport WidgetComponents from './WidgetComponents'\n\nexport default {\n mixins: [WidgetComponents],\n props: {\n widgetIndex: {\n type: Number,\n default: null,\n },\n parameters: {\n type: Array,\n default: () => [],\n },\n settings: {\n type: Array,\n default: () => [],\n },\n screenValues: {\n type: Object,\n default: () => {},\n },\n screenTimeZone: {\n type: String,\n default: 'local',\n },\n namedWidgets: {\n type: Object,\n default: {},\n },\n line: {\n type: String,\n default: '',\n },\n lineNumber: {\n type: Number,\n default: 0,\n },\n },\n data() {\n return {\n // The settings that apply to the current widget based on widgetIndex\n // Calculated in created, updated in setWidth & setHeight and used in computedStyle\n appliedSettings: [],\n // We make style a data attribute so as we recurse through nested\n // widgets we can check to see if style attributes have been applied\n // at any level of the widget, i.e. if LABELVALUE applies a style\n // to the VALUE component then we don't want the VALUE widget to think\n // it doesn't have a style when it renders.\n appliedStyle: {},\n widgetName: null,\n screenId: 'NO_SCREEN', // only used for named widgets - hopefully overwritten by settings value in created()\n }\n },\n computed: {\n computedStyle: function () {\n // Take all the COSMOS settings and create appliedStyle with actual css values\n this.appliedSettings.forEach((setting) => {\n this.applyStyleSetting(setting)\n })\n\n // If nothing has yet defined a width or height then we add flex to the style\n if (\n this.appliedStyle['width'] === undefined &&\n this.appliedStyle['height'] === undefined\n ) {\n // This flex allows for alignment in our widgets\n // The value of '1 1 auto' means allow items to grow and shrink proportionally\n // and by default try to take an equal portion of the parent\n this.appliedStyle['flex'] = '1 1 auto' // flex-grow, flex-shrink, flex-basis\n }\n return this.appliedStyle\n },\n screen: function () {\n // This exists for backwards compatibility of screen definitions since widgets no longer have a reference\n // to the Openc3Screen component instance\n const that = this\n return {\n getNamedWidget: function (widgetName) {\n return that.$store.getters.namedWidget(\n that.toQualifiedWidgetName(widgetName),\n )\n },\n open: function (target, screen) {\n that.$emit('open', target, screen)\n },\n close: function (target, screen) {\n that.$emit('close', target, screen)\n },\n closeAll: function () {\n that.$emit('closeAll')\n },\n }\n },\n listeners: function () {\n // Vue 3 deprecated $listeners, which was used to bubble up events to the Openc3Screen component. The new way is\n // to use v-bind=\"$attrs\", but that also passes the `style` DOM attribute to children, which makes widgets\n // inherit styles from the layout like height and flex.\n // This is a workaround to let us v-bind to just the event listeners (which were previously in the $listeners\n // object in Vue 2).\n return Object.entries(this.$attrs).reduce((listeners, entry) => {\n if (entry[0].startsWith('on')) {\n return {\n ...listeners,\n [entry[0]]: entry[1],\n }\n }\n return listeners\n }, {})\n },\n },\n watch: {\n widgetName: function (newName, oldName) {\n this.$store.commit(\n 'clearNamedWidget',\n this.toQualifiedWidgetName(oldName),\n )\n this.$store.commit('setNamedWidget', {\n [this.toQualifiedWidgetName(newName)]: this,\n })\n },\n },\n created() {\n // Look through the settings and get a reference to the screen\n this.screenId = this.settings\n .find((setting) => setting[0] === '__SCREEN_ID__')\n ?.at(1)\n\n this.widgetName = this.settings\n .find((setting) => setting[0] === 'NAMED_WIDGET')\n ?.at(1)\n\n // Figure out any subsettings that apply\n this.appliedSettings = this.settings\n .map((setting) => {\n const index = parseInt(setting[0])\n // If the first value isn't a number or if there isn't a widgetIndex\n // then it's not a subsetting so just return the setting\n if (isNaN(index) || this.widgetIndex === null) {\n return setting\n }\n // This is our setting so slice off the index and return\n // this effectively promotes the subsetting to a setting\n // on the current widget\n if (this.widgetIndex === index) {\n return setting.slice(1)\n }\n })\n // Remove any settings that we filtered out with null\n .filter((setting) => setting !== undefined)\n },\n beforeUnmount() {\n if (this.widgetName) {\n this.$store.commit(\n 'clearNamedWidget',\n this.toQualifiedWidgetName(this.widgetName),\n )\n }\n },\n methods: {\n applyStyleSetting(setting) {\n switch (setting[0]) {\n case 'TEXTALIGN':\n this.appliedStyle['text-align'] =\n setting[1].toLowerCase() + ' !important'\n this.appliedStyle['--text-align'] = setting[1].toLowerCase()\n break\n case 'PADDING':\n if (!isNaN(Number(setting[1]))) {\n setting[1] += 'px'\n }\n this.appliedStyle['padding'] = setting[1] + ' !important'\n break\n case 'MARGIN':\n if (!isNaN(Number(setting[1]))) {\n setting[1] += 'px'\n }\n this.appliedStyle['margin'] = setting[1] + ' !important'\n break\n case 'BACKCOLOR':\n this.appliedStyle['background-color'] =\n this.getColor(setting.slice(1)) + ' !important'\n break\n case 'TEXTCOLOR':\n this.appliedStyle['color'] =\n this.getColor(setting.slice(1)) + ' !important'\n break\n case 'BORDERCOLOR':\n this.appliedStyle['border-width'] = '1px!important'\n this.appliedStyle['border-style'] = 'solid!important'\n this.appliedStyle['border-color'] =\n this.getColor(setting.slice(1)) + ' !important'\n break\n case 'WIDTH':\n if (!isNaN(Number(setting[1]))) {\n setting[1] += 'px'\n }\n this.appliedStyle['width'] = setting[1] + ' !important'\n break\n case 'HEIGHT':\n if (!isNaN(Number(setting[1]))) {\n setting[1] += 'px'\n }\n this.appliedStyle['height'] = setting[1] + ' !important'\n break\n case 'RAW':\n this.appliedStyle[setting[1].toLowerCase()] =\n setting[2] + ' !important'\n break\n }\n },\n verifyNumParams(keyword, min_num_params, max_num_params, usage = '') {\n let parser = {\n line: this.line,\n lineNumber: this.lineNumber,\n keyword: keyword,\n parameters: this.parameters,\n }\n\n // This syntax works with 0 because each doesn't return any values\n // for a backwards range\n for (let index = 1; index <= min_num_params; index++) {\n // If the parameter is nil (0 based) then we have a problem\n if (this.parameters[index - 1] === undefined) {\n throw new ConfigParserError(\n parser,\n `Not enough parameters for ${keyword}.`,\n usage,\n 'https://docs.openc3.com/docs/configuration',\n )\n }\n }\n // If they pass null for max_params we don't check for a maximum number\n if (max_num_params !== null && this.parameters.length > max_num_params) {\n throw new ConfigParserError(\n parser,\n `Too many parameters for ${keyword}.`,\n usage,\n 'https://docs.openc3.com/docs/configuration',\n )\n }\n },\n setWidth(width, units = 'px', defaultWidth = '120') {\n // Don't set the width if someone has already set it\n // This is important in PacketViewer which uses the value-widget\n // and passes an explicit width setting to use\n let foundSetting = this.appliedSettings.find(\n (setting) => setting[0] === 'WIDTH',\n )\n if (foundSetting) {\n return foundSetting['WIDTH']\n } else {\n if (width) {\n this.appliedSettings.push(['WIDTH', `${width}${units}`])\n return parseInt(width)\n } else {\n this.appliedSettings.push(['WIDTH', `${defaultWidth}${units}`])\n return parseInt(defaultWidth)\n }\n }\n },\n setHeight(height, units = 'px', defaultHeight = '20') {\n // Don't set the height if someone has already set it\n let foundSetting = null\n foundSetting = this.appliedSettings.find(\n (setting) => setting[0] === 'HEIGHT',\n )\n if (foundSetting) {\n return foundSetting['HEIGHT']\n } else {\n if (height) {\n this.appliedSettings.push(['HEIGHT', `${height}${units}`])\n return parseInt(height)\n } else {\n this.appliedSettings.push(['HEIGHT', `${defaultHeight}${units}`])\n return parseInt(defaultHeight)\n }\n }\n },\n // Expects an array, can either be a single color or 3 rgb values\n getColor(setting) {\n switch (setting.length) {\n case 1:\n return setting[0].toLowerCase()\n case 3:\n return `rgb(${setting[0]},${setting[1]},${setting[2]})`\n }\n },\n toQualifiedWidgetName(widgetName) {\n return `${this.screenId}:${widgetName}`\n },\n },\n}\n"],"names":["Widget","WidgetComponents","setting","that","widgetName","target","screen","listeners","entry","newName","oldName","_a","_b","index","keyword","min_num_params","max_num_params","usage","parser","ConfigParserError","width","units","defaultWidth","foundSetting","height","defaultHeight"],"mappings":"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"}