Here a small example of a table with the sparklines.
The handling of the array is done externally, since for my use want to preserve the history even upon page reloading and wasn't happening with the template.
[{"id":"ead3ae3670afa3c8","type":"inject","z":"33f272716c862133","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"0.5","crontab":"","once":true,"onceDelay":0.1,"topic":"newValue","payload":"","payloadType":"date","x":560,"y":4440,"wires":[["9765f18dec0445ea"]]},{"id":"9765f18dec0445ea","type":"function","z":"33f272716c862133","name":"Parse WideBands","func":"if(msg.topic != 'clear' && msg.topic != 'newValue'){\n return null;\n}\n\nlet _oldData = context.get('data') ?? undefined;\n\nlet _value = [Math.floor(Math.random() * 100), Math.floor(Math.random() * 100)];\n\n\nif(_oldData == undefined || msg.topic == 'clear'){\n _oldData = [];\n _oldData.push({ channel: 1, name: 'EGT1', value: (_value[0]), arrayvalues: [(_value[0])], unit: 'ÂșC'});\n _oldData.push({ channel: 2, name: 'EGT2', value: (_value[0]), arrayvalues: [(_value[0])], unit: 'ÂșC' });\n}else{\n for(let i = 0; i < 2; i++){\n _oldData[i].value = (_value[i]);\n _oldData[i].arrayvalues.push(_value[i]);\n if (_oldData[i].arrayvalues.length > 50) {\n _oldData[i].arrayvalues.shift();\n }\n }\n}\n\ncontext.set('data', _oldData);\n\nreturn {topic: 'data', payload: _oldData};\n\n\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":4440,"wires":[["7af90e299d5aee5e","62c16319ce066dd8"]]},{"id":"62c16319ce066dd8","type":"ui-template","z":"33f272716c862133","group":"acbbafbfc6d6007a","name":"Table Test","order":3,"width":0,"height":0,"head":"","format":"<template>\n <!-- Provide an input text box to search the content -->\n <div class=\"d-flex\" style=\"font-weight: bold; font-size: 1.3rem\">\n <span class=\"text-center\" style=\"width: 100%\"> Generic Temperatures </span>\n <v-spacer></v-spacer\n ><v-btn color=\"#D2691E\" @click=\"this.send({topic: 'clear'})\">\n <strong style=\"color: white\">Clear</strong>\n </v-btn>\n </div>\n <v-data-table class=\"myDataTable\" :items=\"msg?.payload\" :headers=\"headers\" hide-details=\"auto\" density=\"compact\" items-per-page=20>\n <template #bottom>\n <!-- Leave this slot empty to hide pagination controls -->\n <!-- <hr> -->\n </template>\n <template v-slot:item.value=\"{ item }\">\n <v-progress-linear :model-value=\"getValue(item.value)\" max=\"100\" height=\"40\" :color=\"getColor(item)\">\n <template v-slot:default=\"{ value }\">\n <strong>{{ Math.ceil(item.value) }}{{item.unit}}</strong>\n </template>\n </v-progress-linear>\n </template>\n <template v-slot:item.arrayvalues=\"{ item }\">\n <v-sparkline v-model=\"item.arrayvalues\" :gradient=\"['#FF0000', '#5525FF']\" :line-width=\"1\" gradientDirection=\"top\"\n :smooth=\"true\" :fill=\"false\" height=\"45\">\n </template>\n\n </v-data-table>\n</template>\n\n<script>\n export default {\n data () {\n return {\n progressBar_Max: 100,\n progressBar_Min: 0,\n headers: [\n { key: 'name', title: 'Name', width: '15%'},\n { key: 'value', title: 'Value', width: '45%', align: 'center' },\n { key: 'arrayvalues', title: 'History',align: 'center' }\n ]\n }\n },\n methods: {\n getColor: function (item) {\n if (item.value > 80) {\n return 'red'\n } else {\n return 'green'\n }\n },\n // add a function to determine the color of the progress bar given the row's item\n getValue: function (value) {\n let val = Math.ceil(this.map(value, this.progressBar_Min, this.progressBar_Max, 0, 100));\n return val;\n },\n map: function (current, in_min, in_max, out_min, out_max){\n let mapped = ((current - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min;\n return this.clamp(mapped, out_min, out_max);\n },\n clamp: function (input, min, max) {\n return input < min ? min : input > max ? max : input;\n }\n }\n}\n</script>\n<style>\n .v-progress-linear__determinate {\n transition: none !important\n }\n\n .myDataTable .v-data-table-header__content {\n font-weight: bold;\n }\n</style>","storeOutMessages":true,"passthru":true,"resendOnRefresh":true,"templateScope":"local","className":"","x":1060,"y":4440,"wires":[["a375d22722bd6d24","9765f18dec0445ea"]]},{"id":"acbbafbfc6d6007a","type":"ui-group","name":"WideBand Probe","page":"3cdf194d3e1f3330","width":"6","height":"1","order":6,"showTitle":true,"className":"","visible":"true","disabled":"false"},{"id":"3cdf194d3e1f3330","type":"ui-page","name":"Values Visualization","ui":"9df4836d2f5c3db3","path":"/values_view","icon":"chart-timeline","layout":"grid","theme":"6abc079232f2e7a5","order":6,"className":"","visible":"true","disabled":"false"},{"id":"9df4836d2f5c3db3","type":"ui-base","name":"My Dashboard","path":"/dashboard","includeClientData":true,"acceptsClientConfig":["ui-notification","ui-control"],"showPathInSidebar":false,"navigationStyle":"default"},{"id":"6abc079232f2e7a5","type":"ui-theme","name":"Default Theme","colors":{"surface":"#097479","primary":"#097479","bgPage":"#111111","groupBg":"#333333","groupOutline":"#cccccc"},"sizes":{"pagePadding":"6px","groupGap":"6px","groupBorderRadius":"4px","widgetGap":"6px"}}]
It is still a work in progress...