budibase/packages/standard-components/src/Card.svelte

97 lines
1.8 KiB
Svelte
Raw Normal View History

2020-08-13 09:58:48 +02:00
<script>
import { getContext } from "svelte"
2020-08-13 09:58:48 +02:00
2021-02-11 12:35:52 +01:00
const { styleable, linkable } = getContext("sdk")
const component = getContext("component")
2020-08-13 11:54:43 +02:00
export const className = ""
2020-08-13 09:58:48 +02:00
export let imageUrl = ""
export let heading = ""
export let description = ""
export let linkText = ""
export let linkUrl
export let linkColor
2020-08-13 09:58:48 +02:00
export let linkHoverColor
export let imageHeight
export let cardWidth
$: cardStyles = {
...$component.styles,
normal: {
...$component.styles.normal,
width: cardWidth,
},
2020-08-13 09:58:48 +02:00
}
$: showImage = !!imageUrl
</script>
<div class="container" use:styleable={cardStyles}>
{#if showImage}
<img
style="--imageHeight: {imageHeight}"
class="image"
src={imageUrl}
alt="" />
{/if}
2020-08-13 09:58:48 +02:00
<div class="content">
<h2 class="heading">{heading}</h2>
<h4 class="text">{description}</h4>
<a
2021-02-11 12:35:52 +01:00
use:linkable
style="--linkColor: {linkColor}; --linkHoverColor: {linkHoverColor}"
href={linkUrl || '/'}>
2021-02-11 12:35:52 +01:00
{linkText}
</a>
2020-08-13 09:58:48 +02:00
</div>
</div>
<style>
.container {
width: var(--cardWidth);
overflow: hidden !important;
height: auto;
}
.image {
width: 100% !important;
max-width: 100%;
height: var(--imageHeight);
vertical-align: middle;
}
.content {
padding: 1.5rem;
display: flex;
flex-direction: column;
gap: 1rem;
}
.heading {
font-size: 1.25rem;
font-weight: 700;
margin: 0;
white-space: pre-wrap;
2020-08-13 09:58:48 +02:00
}
.text {
font-size: 1rem;
margin: 0;
font-weight: 400;
line-height: 1.5rem;
white-space: pre-wrap;
2020-08-13 09:58:48 +02:00
}
a {
margin: 0.5rem 0;
text-decoration: none;
color: var(--linkColor);
2020-08-13 09:58:48 +02:00
font-weight: 600;
white-space: pre-wrap;
2020-08-13 09:58:48 +02:00
}
a:hover {
color: var(--linkHoverColor);
}
</style>