library_components/src/components/Ml/Button/MlButton.vue

50 lines
1.3 KiB
Vue
Raw Normal View History

2024-07-05 12:22:31 +00:00
<template>
2024-07-08 10:03:25 +00:00
<button :class="rootClasses" @click="useRipple($event, true)">
<div :class="outerClasses">
<div :class="innerClasses">
<slot></slot>
</div>
</div>
</button>
2024-07-05 12:22:31 +00:00
</template>
<script setup lang="ts">
2024-07-08 10:57:39 +00:00
import { useRipple } from "#imports";
2024-07-08 10:03:25 +00:00
import { computed, ref } from "vue";
import type { ButtonProps, PTAttribs } from "./types";
import { twMerge } from "tailwind-merge";
2024-07-05 12:22:31 +00:00
const props = withDefaults(defineProps<ButtonProps>(), {
2024-07-08 10:03:25 +00:00
rounded: true,
spinerSize: "6",
spinerColor: "accent1",
spinerPlace: "prefix",
2024-07-05 12:22:31 +00:00
});
const classes = ref({
2024-07-08 10:03:25 +00:00
root: {
class: `flex justify-center items-center disabled:opacity-60`,
},
outer: {
2024-07-08 11:15:04 +00:00
class: `p-[2px] w-full focus:outline-none ${
2024-07-08 10:03:25 +00:00
props.rounded ? "rounded-3xl" : ""
}`,
},
inner: {
class: `justify-center flex items-center bg-white dark:bg-gradient-to-r px-5 py-2 w-full h-full font-semibold leading-[1.5] back ${
props.rounded ? "rounded-3xl" : ""
}`,
},
2024-07-05 12:22:31 +00:00
} as PTAttribs);
2024-07-08 10:03:25 +00:00
const rootClasses = computed(() =>
twMerge(classes.value.root?.class, props.pt?.root?.class)
);
const innerClasses = computed(() =>
twMerge(classes.value.inner?.class, props.pt?.inner?.class)
);
const outerClasses = computed(() =>
twMerge(classes.value.outer?.class, props.pt?.outer?.class)
);
2024-07-05 12:22:31 +00:00
</script>