mirror of
https://github.com/KevinMidboe/hivemonitor.git
synced 2025-10-29 01:20:25 +00:00
Card elemenets for displaying alerts of different types
This commit is contained in:
140
src/lib/components/Card.svelte
Normal file
140
src/lib/components/Card.svelte
Normal file
@@ -0,0 +1,140 @@
|
||||
<script lang="ts">
|
||||
import { modal } from '$lib/store';
|
||||
|
||||
export let title = '';
|
||||
export let iconBackground = 'var(--background)';
|
||||
|
||||
export let opens: any = null;
|
||||
export let data: any = {};
|
||||
export let borderLess = false;
|
||||
|
||||
function openModal() {
|
||||
if (opens) {
|
||||
$modal = { opens, data };
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<div
|
||||
class={`card ${borderLess ? 'border-less' : ''}`}
|
||||
on:click={openModal}
|
||||
on:keyup={(e) => e?.code === 'Enter' && openModal()}
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<div class="hive-icon" style={`background-color: ${iconBackground}`}>
|
||||
<div class="img">
|
||||
<slot name="logo" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="details">
|
||||
<div class="top-row">
|
||||
<h2>{title}</h2>
|
||||
</div>
|
||||
<div class="bottom-row">
|
||||
<div class="metric">
|
||||
<div class="icon">
|
||||
<slot name="first-icon" />
|
||||
</div>
|
||||
|
||||
<span class="value"><slot name="first-value" /></span>
|
||||
</div>
|
||||
|
||||
<div class="metric">
|
||||
<div class="icon">
|
||||
<slot name="second-icon" />
|
||||
</div>
|
||||
|
||||
<span class="value"><slot name="second-value" /></span>
|
||||
</div>
|
||||
|
||||
<div class="metric">
|
||||
<div class="icon">
|
||||
<slot name="third-icon" />
|
||||
</div>
|
||||
|
||||
<span class="value"><slot name="third-value" /></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style lang="scss">
|
||||
.card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: var(--color);
|
||||
background-color: var(--highlight);
|
||||
border-radius: 1rem;
|
||||
padding: 0.75rem 1rem;
|
||||
cursor: pointer;
|
||||
will-change: filter;
|
||||
transition: filter 250ms ease;
|
||||
margin-bottom: 1rem;
|
||||
|
||||
&:hover {
|
||||
filter: drop-shadow(0 0 2px #646cffaa);
|
||||
}
|
||||
|
||||
&.border-less {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
background-color: var(--background);
|
||||
filter: none !important;
|
||||
cursor: auto;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.hive-icon {
|
||||
background-color: var(--background);
|
||||
display: grid;
|
||||
place-items: center;
|
||||
min-height: 50px;
|
||||
min-width: 50px;
|
||||
max-height: 50px;
|
||||
max-width: 50px;
|
||||
border-radius: 1rem;
|
||||
margin-right: 1rem;
|
||||
|
||||
.img {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.details {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.top-row h2 {
|
||||
margin: 0 0 0.2rem 0;
|
||||
text-align: left;
|
||||
font-size: 1.1rem;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
.bottom-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.metric {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.metric span {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.metric .icon {
|
||||
max-width: 22px;
|
||||
height: 22px;
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
:global(.metric .icon svg) {
|
||||
}
|
||||
</style>
|
||||
14
src/lib/components/cards/HighTemperature.svelte
Normal file
14
src/lib/components/cards/HighTemperature.svelte
Normal file
@@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import Card from "../Card.svelte";
|
||||
import ThermometerHotIcon from "$lib/icons/thermometerHot.svelte";
|
||||
|
||||
export let temperature: string | number;
|
||||
export let borderLess: boolean = false;
|
||||
</script>
|
||||
|
||||
<Card title="High temperature" iconBackground="#F93131" {borderLess}>
|
||||
<ThermometerHotIcon slot="logo" fill="var(--highlight)" />
|
||||
|
||||
<span slot="first-value">Over: { temperature }°C</span>
|
||||
</Card>
|
||||
|
||||
15
src/lib/components/cards/LowBattery.svelte
Normal file
15
src/lib/components/cards/LowBattery.svelte
Normal file
@@ -0,0 +1,15 @@
|
||||
<script lang="ts">
|
||||
import Card from "../Card.svelte";
|
||||
import BatteryLowIcon from "$lib/icons/batteryLow.svelte";
|
||||
|
||||
export let battery: number | string;
|
||||
export let borderLess: boolean = false;
|
||||
</script>
|
||||
|
||||
<!-- <Card title="Low battery" iconBackground="#FF6B00" {borderLess}> -->
|
||||
<Card title="Low battery" iconBackground="#58C73A" {borderLess}>
|
||||
<BatteryLowIcon slot="logo" fill="var(--highlight)" />
|
||||
|
||||
<span slot="first-value">Under: { battery }%</span>
|
||||
</Card>
|
||||
|
||||
14
src/lib/components/cards/LowTemperature.svelte
Normal file
14
src/lib/components/cards/LowTemperature.svelte
Normal file
@@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import Card from "../Card.svelte";
|
||||
import ThermometerColdIcon from "$lib/icons/thermometerCold.svelte";
|
||||
|
||||
export let temperature: number | string;
|
||||
export let borderLess: boolean = false;
|
||||
</script>
|
||||
|
||||
<Card title="low temperature" iconBackground="#05B4EC" {borderLess}>
|
||||
<ThermometerColdIcon slot="logo" fill="var(--highlight)" />
|
||||
|
||||
<span slot="first-value">Under: { temperature }°C</span>
|
||||
</Card>
|
||||
|
||||
14
src/lib/components/cards/NoData.svelte
Normal file
14
src/lib/components/cards/NoData.svelte
Normal file
@@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import Card from "../Card.svelte";
|
||||
import NetworkDisconnectedIcon from "$lib/icons/networkDisconnected.svelte";
|
||||
|
||||
export let time: String | Number;
|
||||
export let borderLess: boolean = false;
|
||||
</script>
|
||||
|
||||
<Card title="no data" iconBackground="#ECECEC" {borderLess}>
|
||||
<NetworkDisconnectedIcon slot="logo" fill="#213547" />
|
||||
|
||||
<span slot="first-value">More than: { time } hours</span>
|
||||
</Card>
|
||||
|
||||
15
src/lib/components/cards/WeightChanged.svelte
Normal file
15
src/lib/components/cards/WeightChanged.svelte
Normal file
@@ -0,0 +1,15 @@
|
||||
<script lang="ts">
|
||||
import Card from "../Card.svelte";
|
||||
import WeightIcon from "$lib/icons/weight.svelte";
|
||||
|
||||
export let from: string | number;
|
||||
export let to: string | number;
|
||||
export let borderLess: boolean = false;
|
||||
</script>
|
||||
|
||||
<Card title="Weight changed" iconBackground="#F6B138" {borderLess}>
|
||||
<WeightIcon slot="logo" fill="var(--highlight)" />
|
||||
|
||||
<span slot="first-value">From { from }kg to { to }kg</span>
|
||||
</Card>
|
||||
|
||||
Reference in New Issue
Block a user