Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 2,298 Bytes
e71d24a d6da254 e71d24a eb29a95 e71d24a 8fce765 e71d24a b1a4d81 e71d24a c8cdf26 e71d24a c8cdf26 e71d24a b1a4d81 e71d24a c8cdf26 e71d24a c16a39b e71d24a eb29a95 e71d24a eb29a95 e71d24a eb29a95 e71d24a a084673 e71d24a 8fce765 e71d24a c16a39b e71d24a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
<script lang="ts">
import { goto } from '$app/navigation';
import Icon from "@iconify/svelte";
import Loading from './Loading.svelte';
export let theme: "light" | "dark" | "blue" | "pink" | "red" = "light";
export let size: "md" | "lg" = "md";
export let href: string | undefined = undefined;
export let icon: string | undefined = undefined;
export let target: "_blank" | "_self" | undefined = undefined;
export let iconPosition: "left" | "right" = "left";
export let disabled: boolean = false;
export let loading: boolean = false;
export let onClick: (e?: any) => void = (e) => {};
const handleClick = async (e: any) => {
if (href) {
if (target) window.open(href, target);
else goto(href);
return
}
if (disabled || loading) return;
onClick(e);
};
</script>
<button
class="button {theme} {size} relative whitespace-nowrap {disabled ? 'disabled' : ''}"
class:!bg-neutral-400={loading}
class:!border-neutral-400={loading}
class:!grayscale={disabled}
class:!cursor-not-allowed={disabled}
class:!text-neutral-700={disabled}
on:click={handleClick}
>
{#if icon && iconPosition === "left"}
<p class:opacity-0={loading}>
<Icon icon={icon} class="w-[20px] h-[20px]" />
</p>
{/if}
{#if loading}
<Loading />
{/if}
<p class:opacity-0={loading}>
<slot />
</p>
{#if icon && iconPosition === "right"}
<p class:opacity-0={loading}>
<Icon icon={icon} class="w-[20px] h-[20px]" />
</p>
{/if}
</button>
<style lang="scss">
.button {
@apply rounded-full outline-none border font-medium flex items-center justify-center gap-1.5 transition-all duration-200 cursor-pointer;
&.lg {
@apply px-6 py-3 text-base;
}
&.md {
@apply px-5 py-2 text-sm;
}
&.light {
@apply bg-white text-neutral-900 border-white;
}
&.pink {
@apply bg-pink-500 text-white border-pink-500;
}
&.blue {
@apply bg-blue-500 text-white border-blue-500;
}
&.dark {
@apply bg-neutral-900 border-neutral-800 text-neutral-300;
}
&.red {
@apply bg-red-500 text-white border-red-500;
}
&:hover {
@apply brightness-125
}
&.disabled {
&:hover {
@apply brightness-100
}
}
}
</style> |