| <script lang="ts"> | |
| export let size: "small" | "large" = "small"; | |
| export let unpadded_box = false; | |
| let el: HTMLDivElement; | |
| $: parent_height = compare_el_to_parent(el); | |
| function compare_el_to_parent(el: HTMLDivElement): boolean { | |
| if (!el) return false; | |
| const { height: el_height } = el.getBoundingClientRect(); | |
| const { height: parent_height } = | |
| el.parentElement?.getBoundingClientRect() || { height: el_height }; | |
| return el_height > parent_height + 2; | |
| } | |
| </script> | |
| <div | |
| class="empty" | |
| class:small={size === "small"} | |
| class:large={size === "large"} | |
| class:unpadded_box | |
| bind:this={el} | |
| class:small_parent={parent_height} | |
| aria-label="Empty value" | |
| > | |
| <div class="icon"> | |
| <slot /> | |
| </div> | |
| </div> | |
| <style> | |
| .empty { | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| margin-top: calc(0px - var(--size-6)); | |
| height: var(--size-full); | |
| } | |
| .icon { | |
| opacity: 0.5; | |
| height: var(--size-5); | |
| color: var(--body-text-color); | |
| } | |
| .small { | |
| min-height: calc(var(--size-32) - 20px); | |
| } | |
| .large { | |
| min-height: calc(var(--size-64) - 20px); | |
| } | |
| .unpadded_box { | |
| margin-top: 0; | |
| } | |
| .small_parent { | |
| min-height: 100% ; | |
| } | |
| </style> | |