aboutsummaryrefslogtreecommitdiff
path: root/src_frontend/ComponentLib/Button/FloatingButton.svelte
diff options
context:
space:
mode:
authorJakob Stendahl <14180120+JakobST1n@users.noreply.github.com>2021-10-11 20:02:04 +0200
committerGitHub <noreply@github.com>2021-10-11 20:02:04 +0200
commitc67531161e56488166a33232f87566309ba8676e (patch)
tree846e59a020e80bea48557d5a06af5728e44961ff /src_frontend/ComponentLib/Button/FloatingButton.svelte
parente6880cd8ccf82d993f222cb14b4860581654acb8 (diff)
parentc1b6eec770b885a9829e1f62bad5cc99389ca429 (diff)
downloadLuxcena-Neo-c67531161e56488166a33232f87566309ba8676e.tar.gz
Luxcena-Neo-c67531161e56488166a33232f87566309ba8676e.zip
Merge pull request #24 from JakobST1n/rebuild
v1.0.0
Diffstat (limited to 'src_frontend/ComponentLib/Button/FloatingButton.svelte')
-rw-r--r--src_frontend/ComponentLib/Button/FloatingButton.svelte104
1 files changed, 104 insertions, 0 deletions
diff --git a/src_frontend/ComponentLib/Button/FloatingButton.svelte b/src_frontend/ComponentLib/Button/FloatingButton.svelte
new file mode 100644
index 0000000..123debc
--- /dev/null
+++ b/src_frontend/ComponentLib/Button/FloatingButton.svelte
@@ -0,0 +1,104 @@
+<script>
+ export let faIcon = false;
+ export let fullWidth = false;
+ export let backgroundColor = "white";
+ export let color = "black";
+ export let activeBackgroundColor = "gray";
+ export let activeColor = "white";
+ export let active = false;
+ export let label = null;
+
+ export let loadingPromise = null;
+ $: listen(loadingPromise);
+ function listen(promise) {
+ if (promise != null) {
+ loading = true;
+ promise.then(res => {
+ loading = false;
+ success = true;
+ }).catch(err => {
+ loading = false;
+ success = false;
+ });
+ } else {
+ loading = false;
+ }
+ }
+ let loading;
+ let success;
+</script>
+
+<style>
+ button {
+ background-color: var(--bg-color);
+ color: var(--color);
+ border: none;
+ text-decoration: none;
+ padding: 15px;
+ font-size: 15px;
+
+ transition: background-color, color 0.1s ease;
+ border-radius: 50px;
+ }
+ button:hover {
+ filter: brightness(0.95);
+ }
+ button:active {
+ filter: brightness(0.90);
+ }
+ .fullWidth {
+ width: 100%;
+ }
+ .iconButton {
+ display: flex;
+ }
+ .iconButton .text {
+ margin: auto;
+ }
+ .active {
+ background-color: var(--active-bg-color);
+ color: var(--active-color);
+ }
+ .wrapper {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ }
+ .label {
+ margin-top: 10px;
+ color: var(--grey-700);
+ font-size: 13px;
+ }
+</style>
+
+<div class="wrapper">
+ <button
+ on:click
+ class:fullWidth={fullWidth}
+ class:iconButton={faIcon != false}
+ class:active={active}
+ style="--bg-color: {backgroundColor};
+ --color: {color};
+ --active-bg-color: {activeBackgroundColor};
+ --active-color: {activeColor};"
+ class="drop-shadow"
+ >
+
+ {#if faIcon}
+ <div class="icon">
+ <i class={faIcon}></i>
+ </div>
+ {/if}
+
+ {#if loading}
+ <i class="fas fa-spinner fa-pulse"></i>
+ {:else}
+ <div class="text">
+ <slot></slot>
+ </div>
+ {/if}
+ </button>
+ {#if label != null}
+ <span class="label">{label}</span>
+ {/if}
+</div> \ No newline at end of file