mirror of
https://github.com/IT4Change/boilerplate-frontend.git
synced 2025-12-13 07:35:53 +00:00
51 lines
1.1 KiB
Vue
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>
|