mirror of
https://github.com/IoTManagerProject/IoTManagerWeb.git
synced 2026-03-26 23:12:34 +03:00
изменение стилей
This commit is contained in:
@@ -38,14 +38,14 @@
|
|||||||
const LOG_MAX_MESSAGES = 100;
|
const LOG_MAX_MESSAGES = 100;
|
||||||
const reconnectTimeout = 60000; //период проверки соединения с устройством
|
const reconnectTimeout = 60000; //период проверки соединения с устройством
|
||||||
let preventReconnect = false;
|
let preventReconnect = false;
|
||||||
const waitingAckTimeout = 12000; //время ожидания ответа от устройства
|
const waitingAckTimeout = 18000; //время ожидания ответа от устройства
|
||||||
const rebootingTimeout = 20000;
|
const rebootingTimeout = 30000;
|
||||||
const updatingTimeout = 130000;
|
const updatingTimeout = 130000;
|
||||||
let rebootTimer;
|
let rebootTimer;
|
||||||
let opened = false;
|
let opened = false;
|
||||||
let preventMove = false;
|
let preventMove = false;
|
||||||
const blobDebug = false;
|
const blobDebug = false;
|
||||||
const devMode = false;
|
const devMode = true;
|
||||||
|
|
||||||
let timeout = reconnectTimeout / 1000;
|
let timeout = reconnectTimeout / 1000;
|
||||||
let percent;
|
let percent;
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
//****************************************************variable section**********************************************************/
|
//****************************************************variable section**********************************************************/
|
||||||
//******************************************************************************************************************************/
|
//******************************************************************************************************************************/
|
||||||
let myip = document.location.hostname;
|
let myip = document.location.hostname;
|
||||||
if (devMode) myip = "192.168.1.238";
|
if (devMode) myip = "192.168.1.247";
|
||||||
|
|
||||||
//Flags
|
//Flags
|
||||||
let firstDevListRequest = true;
|
let firstDevListRequest = true;
|
||||||
@@ -949,6 +949,7 @@
|
|||||||
return ((number - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin;
|
return ((number - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//тикер который тикает каждую секунду и на каждую 0 секунду запускает проверку соединения
|
||||||
function wsTestMsgTask() {
|
function wsTestMsgTask() {
|
||||||
setTimeout(wsTestMsgTask, 1000);
|
setTimeout(wsTestMsgTask, 1000);
|
||||||
if (!preventReconnect) {
|
if (!preventReconnect) {
|
||||||
@@ -1657,4 +1658,25 @@
|
|||||||
input[type="file"] {
|
input[type="file"] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* width */
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Track */
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
background: #ebebeb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle */
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: #cbcbcb;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle on hover */
|
||||||
|
::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: #aeaeae;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -257,7 +257,7 @@
|
|||||||
</td>
|
</td>
|
||||||
{#if element[key] != "nil"}
|
{#if element[key] != "nil"}
|
||||||
<td class="tbl-bdy-sm text-center">
|
<td class="tbl-bdy-sm text-center">
|
||||||
<input bind:value={element[key]} class="ipt-sm w-full" type="text" />
|
<input bind:value={element[key]} class="ipt-sm w-full text-sm" type="text" />
|
||||||
</td>
|
</td>
|
||||||
{/if}
|
{/if}
|
||||||
{:else}
|
{:else}
|
||||||
@@ -265,7 +265,7 @@
|
|||||||
<p class="txt-ita">{key}</p>
|
<p class="txt-ita">{key}</p>
|
||||||
</td>
|
</td>
|
||||||
<td class="tbl-bdy-sm text-center">
|
<td class="tbl-bdy-sm text-center">
|
||||||
<input bind:value={element[key]} class="ipt-sm w-full" type="text" />
|
<input bind:value={element[key]} class="ipt-sm w-full text-sm" type="text" />
|
||||||
</td>
|
</td>
|
||||||
{/if}
|
{/if}
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -18,36 +18,33 @@
|
|||||||
<div class="my-4">
|
<div class="my-4">
|
||||||
<div class="grd-2col1">
|
<div class="grd-2col1">
|
||||||
<Card title="Подключение к WiFi">
|
<Card title="Подключение к WiFi">
|
||||||
<div class="crd-itm-psn">
|
<div class="grid grid-cols-2 gap-2">
|
||||||
<div class="w-4/6">
|
<div class="w-full">
|
||||||
<p class="wgt-dscr-stl truncate">Название устройства</p>
|
<p class="wgt-dscr-stl truncate">Название устройства</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<input bind:value={settingsJson.name} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
|
<input bind:value={settingsJson.name} class="content-center px-2 h-8 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" type="text" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="crd-itm-psn">
|
<div class="w-full">
|
||||||
<div class="w-4/6">
|
|
||||||
<p class="wgt-dscr-stl truncate">Точка доступа</p>
|
<p class="wgt-dscr-stl truncate">Точка доступа</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<input bind:value={settingsJson.apssid} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
|
<input bind:value={settingsJson.apssid} class="content-center px-2 h-8 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" type="text" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="crd-itm-psn">
|
<div class="w-full">
|
||||||
<div class="w-4/6">
|
|
||||||
<p class="wgt-dscr-stl truncate">Пароль точки доступа</p>
|
<p class="wgt-dscr-stl truncate">Пароль точки доступа</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<input bind:value={settingsJson.appass} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
|
<input bind:value={settingsJson.appass} class="content-center px-2 h-8 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="crd-itm-psn">
|
<div class="w-full">
|
||||||
<div class="w-4/6">
|
|
||||||
<p class="wgt-dscr-stl truncate">Название wifi сети</p>
|
<p class="wgt-dscr-stl truncate">Название wifi сети</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<select class="ipt-rnd text-left focus:border-indigo-500" bind:value={settingsJson.routerssid} on:click={() => ssidClick()}>
|
<select class="content-center px-2 h-8 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" bind:value={settingsJson.routerssid} on:click={() => ssidClick()}>
|
||||||
{#each Object.entries(ssidJson) as [num, ssid]}
|
{#each Object.entries(ssidJson) as [num, ssid]}
|
||||||
<option value={ssid}>
|
<option value={ssid}>
|
||||||
{ssid}
|
{ssid}
|
||||||
@@ -55,21 +52,19 @@
|
|||||||
{/each}
|
{/each}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="crd-itm-psn">
|
<div class="w-full">
|
||||||
<div class="w-4/6">
|
|
||||||
<p class="wgt-dscr-stl truncate">Пароль</p>
|
<p class="wgt-dscr-stl truncate">Пароль</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<input bind:value={settingsJson.routerpass} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
|
<input bind:value={settingsJson.routerpass} class="content-center px-2 h-8 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" type="text" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="crd-itm-psn">
|
<div class="w-full">
|
||||||
<div class="w-4/6">
|
|
||||||
<p class="wgt-dscr-stl truncate">Сервер обновления</p>
|
<p class="wgt-dscr-stl truncate">Сервер обновления</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<input bind:value={settingsJson.serverip} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
|
<input bind:value={settingsJson.serverip} class="content-center px-2 h-8 mb-4 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" type="text" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{#if errorsJson.passer === 1}
|
{#if errorsJson.passer === 1}
|
||||||
@@ -82,13 +77,13 @@
|
|||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<Card title="Подключение к MQTT">
|
<Card title="Подключение к MQTT">
|
||||||
<div class="crd-itm-psn">
|
<div class="grid grid-cols-2 gap-2">
|
||||||
<div class="w-4/6">
|
<div class="w-full">
|
||||||
<p class="wgt-dscr-stl text-gray-500 truncate">Состояние подключения</p>
|
<p class="wgt-dscr-stl text-gray-500 truncate">Состояние подключения</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-center w-3/6 align-baseline text-sm sm:text-sm md:text-base lg:text-base xl:text-base 2xl:text-base break-words">
|
<div class="flex justify-center w-full align-baseline text-sm sm:text-sm md:text-base lg:text-base xl:text-base 2xl:text-base truncate align-text-middle">
|
||||||
{#if errorsJson.mqtt === "e5"}
|
{#if errorsJson.mqtt === "e5"}
|
||||||
<p class="text-green-500 font-bold h-8 bg-green-50 border-2 border-gray-200 rounded w-full text-center">Подключено</p>
|
<p class="text-green-500 font-bold m-0 p-0 h-8 bg-green-50 border-2 border-gray-200 rounded w-full text-center">Подключено</p>
|
||||||
{:else if errorsJson.mqtt === "e13"}
|
{:else if errorsJson.mqtt === "e13"}
|
||||||
<p class="text-yellow-500 font-bold h-8 bg-yellow-50 border-2 border-gray-200 rounded w-full text-center">Подключение</p>
|
<p class="text-yellow-500 font-bold h-8 bg-yellow-50 border-2 border-gray-200 rounded w-full text-center">Подключение</p>
|
||||||
{:else if errorsJson.mqtt === undefined}
|
{:else if errorsJson.mqtt === undefined}
|
||||||
@@ -97,45 +92,40 @@
|
|||||||
<p class="text-red-500 font-bold h-8 bg-red-50 border-2 border-gray-200 rounded w-full text-center">Ошибка</p>
|
<p class="text-red-500 font-bold h-8 bg-red-50 border-2 border-gray-200 rounded w-full text-center">Ошибка</p>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="crd-itm-psn">
|
<div class="w-full">
|
||||||
<div class="w-4/6">
|
|
||||||
<p class="wgt-dscr-stl truncate">Название сервера</p>
|
<p class="wgt-dscr-stl truncate">Название сервера</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<input bind:value={settingsJson.mqttServer} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
|
<input bind:value={settingsJson.mqttServer} class="content-center px-2 h-8 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" type="text" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="crd-itm-psn">
|
<div class="w-full">
|
||||||
<div class="w-4/6">
|
|
||||||
<p class="wgt-dscr-stl truncate">Порт</p>
|
<p class="wgt-dscr-stl truncate">Порт</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<input bind:value={settingsJson.mqttPort} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
|
<input bind:value={settingsJson.mqttPort} class="content-center px-2 h-8 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" type="text" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="crd-itm-psn">
|
<div class="w-full">
|
||||||
<div class="w-4/6">
|
|
||||||
<p class="wgt-dscr-stl truncate">Префикс</p>
|
<p class="wgt-dscr-stl truncate">Префикс</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<input bind:value={settingsJson.mqttPrefix} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
|
<input bind:value={settingsJson.mqttPrefix} class="content-center px-2 h-8 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" type="text" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="crd-itm-psn">
|
<div class="w-full">
|
||||||
<div class="w-4/6">
|
|
||||||
<p class="wgt-dscr-stl truncate">Имя пользователя</p>
|
<p class="wgt-dscr-stl truncate">Имя пользователя</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<input bind:value={settingsJson.mqttUser} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
|
<input bind:value={settingsJson.mqttUser} class="content-center px-2 h-8 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" type="text" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="crd-itm-psn">
|
<div class="w-full">
|
||||||
<div class="w-4/6">
|
|
||||||
<p class="wgt-dscr-stl truncate">Пароль</p>
|
<p class="wgt-dscr-stl truncate">Пароль</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-3/6">
|
<div class="flex justify-end w-full">
|
||||||
<input bind:value={settingsJson.mqttPass} class="ipt-rnd text-left focus:border-indigo-500" type="text" />
|
<input bind:value={settingsJson.mqttPass} class="content-center px-2 h-8 mb-4 bg-gray-50 border-2 border-gray-200 rounded w-full text-gray-700 leading-tight focus:outline-none focus:bg-white text-left focus:border-indigo-500" type="text" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn-lg" on:click={() => saveMqtt()}>{"Сохранить"}</button>
|
<button class="btn-lg" on:click={() => saveMqtt()}>{"Сохранить"}</button>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
<script>
|
<script>
|
||||||
import { onMount } from "svelte";
|
|
||||||
import Card from "../components/Card.svelte";
|
import Card from "../components/Card.svelte";
|
||||||
import Input from "../widgets/Input.svelte";
|
import Input from "../widgets/Input.svelte";
|
||||||
import Range from "../widgets/Range.svelte";
|
import Range from "../widgets/Range.svelte";
|
||||||
@@ -8,8 +7,6 @@
|
|||||||
import Anydata from "../widgets/Anydata.svelte";
|
import Anydata from "../widgets/Anydata.svelte";
|
||||||
import Alarm from "../components/Alarm.svelte";
|
import Alarm from "../components/Alarm.svelte";
|
||||||
|
|
||||||
onMount(async () => {});
|
|
||||||
|
|
||||||
export let layoutJson;
|
export let layoutJson;
|
||||||
|
|
||||||
$: layoutJson.length, timeOut();
|
$: layoutJson.length, timeOut();
|
||||||
|
|||||||
@@ -44,13 +44,11 @@
|
|||||||
|
|
||||||
<div class="crd-itm-psn">
|
<div class="crd-itm-psn">
|
||||||
<div class="w-2/3">
|
<div class="w-2/3">
|
||||||
<!-- svelte-ignore a11y-label-has-associated-control -->
|
<p class="pr-4 truncate text-{widget.descrColor ? widget.descrColor : 'gray'}-500 font-bold">{!widget.descr ? "" : widget.descr}</p>
|
||||||
<label class="pr-4 text-{widget.descrColor ? widget.descrColor : 'gray'}-500 font-bold">{!widget.descr ? "" : widget.descr}</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-1/3">
|
<div class="flex justify-end w-1/3">
|
||||||
<!-- svelte-ignore a11y-label-has-associated-control -->
|
<p class="wgt-adt-stl truncate {green ? 'text-green-500' : ''}">{!widget.status ? "" : widget.status}</p>
|
||||||
<label class="wgt-adt-stl {green ? 'text-green-500' : ''}">{!widget.status ? "" : widget.status}</label>
|
|
||||||
<!-- svelte-ignore a11y-label-has-associated-control -->
|
<p class="wgt-adt-stl truncate {green ? 'text-green-500' : ''}"> {!widget.after ? "" : widget.after}</p>
|
||||||
<label class="wgt-adt-stl {green ? 'text-green-500' : ''}"> {!widget.after ? "" : widget.after}</label>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,11 +1,5 @@
|
|||||||
<script>
|
<script>
|
||||||
import Chart from "svelte-frappe-charts";
|
import Chart from "svelte-frappe-charts";
|
||||||
import { onMount } from "svelte";
|
|
||||||
|
|
||||||
onMount(async () => {
|
|
||||||
console.log("[i]", "chart component mounted");
|
|
||||||
});
|
|
||||||
|
|
||||||
export let widget;
|
export let widget;
|
||||||
|
|
||||||
let datachart = {
|
let datachart = {
|
||||||
@@ -25,7 +19,7 @@
|
|||||||
let labels = [];
|
let labels = [];
|
||||||
let values = [];
|
let values = [];
|
||||||
|
|
||||||
let axisOptions = { xAxisMode: "tick", xIsSeries: true };
|
let axisOptions = { xAxisMode: "tick", xIsSeries: true, xIsSeries: true };
|
||||||
let lineOptions;
|
let lineOptions;
|
||||||
if (widget.pointRadius == "0") {
|
if (widget.pointRadius == "0") {
|
||||||
lineOptions = { regionFill: 1, hideDots: 1, spline: 1 };
|
lineOptions = { regionFill: 1, hideDots: 1, spline: 1 };
|
||||||
@@ -110,8 +104,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<!-- svelte-ignore a11y-label-has-associated-control -->
|
<p class="inline-block italic truncate align-top text-center text-{widget.descrColor ? widget.descrColor : 'gray'}-500 txt-sz">{!widget.descr ? "" : widget.descr}</p>
|
||||||
<label class="inline-block italic align-top text-center text-{widget.descrColor ? widget.descrColor : 'gray'}-500 txt-sz">{!widget.descr ? "" : widget.descr}</label>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Chart data={datachart} type={type} lineOptions={lineOptions} axisOptions={axisOptions} height="150" padding="0px" />
|
<Chart id={"notes"} data={datachart} type={type} title={""} lineOptions={lineOptions} axisOptions={axisOptions} height="150" padding="0px" margin="0px" />
|
||||||
|
|||||||
@@ -52,8 +52,7 @@
|
|||||||
|
|
||||||
<div class="crd-itm-psn">
|
<div class="crd-itm-psn">
|
||||||
<div class="w-2/3">
|
<div class="w-2/3">
|
||||||
<!-- svelte-ignore a11y-label-has-associated-control -->
|
<p class="pr-4 truncate text-{widget.descrColor ? widget.descrColor : 'gray'}-500 font-bold">{!widget.descr ? "" : widget.descr}</p>
|
||||||
<label class="pr-4 text-{widget.descrColor ? widget.descrColor : 'gray'}-500 font-bold">{!widget.descr ? "" : widget.descr}</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-1/3">
|
<div class="flex justify-end w-1/3">
|
||||||
{#if widget.type == "number"}
|
{#if widget.type == "number"}
|
||||||
|
|||||||
@@ -29,8 +29,7 @@
|
|||||||
|
|
||||||
<!--ползунок работает в режиме для микроконтроллера-->
|
<!--ползунок работает в режиме для микроконтроллера-->
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<!-- svelte-ignore a11y-label-has-associated-control -->
|
<p class="pr-4 truncate text-{widget.descrColor ? widget.descrColor : 'gray'}-500 font-bold">{!widget.descr ? "" : widget.descr} {valueForUser} {widget.after}</p>
|
||||||
<label class="pr-4 text-{widget.descrColor ? widget.descrColor : 'gray'}-500 font-bold">{!widget.descr ? "" : widget.descr} {valueForUser} {widget.after} </label>
|
|
||||||
</div>
|
</div>
|
||||||
<input
|
<input
|
||||||
bind:value={widget.status}
|
bind:value={widget.status}
|
||||||
|
|||||||
@@ -25,8 +25,7 @@
|
|||||||
|
|
||||||
<div class="crd-itm-psn">
|
<div class="crd-itm-psn">
|
||||||
<div class="w-2/3">
|
<div class="w-2/3">
|
||||||
<!-- svelte-ignore a11y-label-has-associated-control -->
|
<p class="pr-4 truncate text-{widget.descrColor ? widget.descrColor : 'gray'}-500 font-bold">{!widget.descr ? "" : widget.descr}</p>
|
||||||
<label class="pr-4 text-{widget.descrColor ? widget.descrColor : 'gray'}-500 font-bold">{!widget.descr ? "" : widget.descr}</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end w-1/3">
|
<div class="flex justify-end w-1/3">
|
||||||
<label for={widget.topic} class="items-center cursor-pointer">
|
<label for={widget.topic} class="items-center cursor-pointer">
|
||||||
|
|||||||
Reference in New Issue
Block a user