boilerplate-frontend/src/stories/ExampleButton.vue
2023-11-16 12:26:21 +01:00

51 lines
1.1 KiB
Vue

<template>
<button type="button" :class="classes" :style="style" @click="onClick">{{ label }}</button>
</template>
<script lang="ts" setup>
// eslint-disable-next-line import/no-unassigned-import
import './button.css'
import { computed } from 'vue'
const props = withDefaults(
defineProps<{
/**
* The label of the button
*/
label: string
/**
* primary or secondary button
*/
primary?: boolean
/**
* size of the button
*/
size?: 'small' | 'medium' | 'large'
/**
* background color of the button
*/
backgroundColor?: string
}>(),
{ primary: false, size: 'medium', backgroundColor: '' },
)
const emit = defineEmits<{
(e: 'click', id: number): void
}>()
const classes = computed(() => ({
'storybook-button': true,
'storybook-button--primary': props.primary,
'storybook-button--secondary': !props.primary,
[`storybook-button--${props.size || 'medium'}`]: true,
}))
const style = computed(() => ({
backgroundColor: props.backgroundColor,
}))
const onClick = () => {
emit('click', 1)
}
</script>