1
0
Fork 0
mirror of synced 2024-09-19 18:59:06 +12:00
budibase/packages/bbui/src/Modal/ModalContent.svelte

119 lines
2.9 KiB
Svelte
Raw Normal View History

2021-03-31 22:59:07 +13:00
<script>
2021-04-16 20:02:16 +12:00
import "@spectrum-css/dialog/dist/index-vars.css"
import { getContext } from "svelte"
2021-03-31 22:59:07 +13:00
import Button from "../Button/Button.svelte"
2021-04-15 00:52:25 +12:00
import Divider from "../Divider/Divider.svelte"
import Icon from "../Icon/Icon.svelte"
2021-03-31 22:59:07 +13:00
import Context from "../context"
export let title = undefined
2021-05-04 22:07:26 +12:00
export let size = "S"
2021-03-31 22:59:07 +13:00
export let cancelText = "Cancel"
export let confirmText = "Confirm"
export let showCancelButton = true
export let showConfirmButton = true
export let showCloseIcon = true
export let onConfirm = undefined
export let disabled = false
const { hide } = getContext(Context.Modal)
let loading = false
$: confirmDisabled = disabled || loading
async function confirm() {
loading = true
if (!onConfirm || (await onConfirm()) !== false) {
hide()
}
loading = false
}
</script>
<div
2021-05-04 22:07:26 +12:00
class="spectrum-Dialog"
class:spectrum-Dialog--small={size === "S"}
class:spectrum-Dialog--medium={size === "M"}
class:spectrum-Dialog--large={size === "L"}
class:spectrum-Dialog--extraLarge={size === "XL"}
style="position: relative;"
role="dialog"
tabindex="-1"
aria-modal="true"
>
<div class="spectrum-Dialog-grid">
2021-04-17 04:12:22 +12:00
<h1 class="spectrum-Dialog-heading spectrum-Dialog-heading--noHeader">
{title}
</h1>
2021-04-28 02:25:39 +12:00
<Divider size="M" />
<!-- TODO: Remove content-grid class once Layout components are in bbui -->
<section class="spectrum-Dialog-content content-grid">
<slot />
</section>
{#if showCancelButton || showConfirmButton}
<div
class="spectrum-ButtonGroup spectrum-Dialog-buttonGroup spectrum-Dialog-buttonGroup--noFooter"
>
<slot name="footer" />
{#if showCancelButton}
<Button group secondary on:click={hide}>{cancelText}</Button>
{/if}
{#if showConfirmButton}
<Button
group
2021-04-10 01:24:28 +12:00
cta
{...$$restProps}
disabled={confirmDisabled}
on:click={confirm}
>
{confirmText}
</Button>
{/if}
2021-03-31 22:59:07 +13:00
</div>
{/if}
{#if showCloseIcon}
<div class="close-icon" on:click={hide}>
<Icon hoverable name="Close" />
2021-03-31 22:59:07 +13:00
</div>
{/if}
</div>
2021-03-31 22:59:07 +13:00
</div>
<style>
2021-05-04 22:07:26 +12:00
.spectrum-Dialog--extraLarge {
width: 1000px;
}
.content-grid {
display: grid;
position: relative;
gap: var(--spacing-xl);
color: var(--ink);
}
.spectrum-Dialog-content {
overflow: visible;
}
2021-04-23 00:59:00 +12:00
.spectrum-Dialog-heading {
font-family: var(--spectrum-alias-body-text-font-family);
}
.spectrum-Dialog-buttonGroup {
gap: var(--spectrum-global-dimension-static-size-200);
}
2021-03-31 22:59:07 +13:00
.close-icon {
position: absolute;
top: 15px;
right: 15px;
2021-03-31 22:59:07 +13:00
color: var(--ink);
font-size: var(--font-size-m);
}
.close-icon:hover {
color: var(--grey-6);
cursor: pointer;
}
.close-icon :global(svg) {
margin-right: 0;
}
</style>